diff --git a/src/eog-application.c b/src/eog-application.c
index b9cfb11..032f399 100644
--- a/src/eog-application.c
+++ b/src/eog-application.c
@@ -27,8 +27,11 @@
 #endif
 
 #include "eog-config-keys.h"
+#include "eog-debug.h"
 #include "eog-image.h"
+#include "eog-job-scheduler.h"
 #include "eog-session.h"
+#include "eog-thumbnail.h"
 #include "eog-window.h"
 #include "eog-application.h"
 #include "eog-application-activatable.h"
@@ -42,8 +45,14 @@
 #include <glib-object.h>
 #include <gtk/gtk.h>
 
+#if HAVE_EXEMPI
+#include <exempi/xmp.h>
+#endif
+
 #define APPLICATION_SERVICE_NAME "org.gnome.eog.ApplicationService"
 
+#define EOG_CSS_FILE_PATH EOG_DATA_DIR G_DIR_SEPARATOR_S "eog.css"
+
 static void eog_application_load_accelerators (void);
 static void eog_application_save_accelerators (void);
 
@@ -225,9 +234,59 @@ eog_application_init_app_menu (EogApplication *application)
 static void
 eog_application_startup (GApplication *application)
 {
+	EogApplication *app = EOG_APPLICATION (application);
+	GError *error = NULL;
+	GtkSettings *settings;
+	GtkCssProvider *provider;
+
 	G_APPLICATION_CLASS (eog_application_parent_class)->startup (application);
 
-	eog_application_init_app_menu (EOG_APPLICATION (application));
+#ifdef HAVE_EXEMPI
+ 	xmp_init();
+#endif
+	eog_debug_init ();
+	eog_job_scheduler_init ();
+	eog_thumbnail_init ();
+
+	/* Load special style properties for EogThumbView's scrollbar */
+	provider = gtk_css_provider_new ();
+	if (G_UNLIKELY (!gtk_css_provider_load_from_path(provider,
+							 EOG_CSS_FILE_PATH,
+							 &error)))
+	{
+		g_critical ("Could not load CSS data: %s", error->message);
+		g_clear_error (&error);
+	} else {
+		gtk_style_context_add_provider_for_screen (
+				gdk_screen_get_default(),
+				GTK_STYLE_PROVIDER (provider),
+				GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+	}
+	g_object_unref (provider);
+
+	/* Add application specific icons to search path */
+	gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+                                           EOG_DATA_DIR G_DIR_SEPARATOR_S "icons");
+
+	gtk_window_set_default_icon_name ("eog");
+	g_set_application_name (_("Image Viewer"));
+
+	settings = gtk_settings_get_default ();
+	g_object_set (G_OBJECT (settings),
+	              "gtk-application-prefer-dark-theme", TRUE,
+	              NULL);
+
+	eog_application_init_app_menu (app);
+}
+
+static void
+eog_application_shutdown (GApplication *application)
+{
+#ifdef HAVE_EXEMPI
+	xmp_terminate();
+#endif
+
+	G_APPLICATION_CLASS (eog_application_parent_class)->shutdown (application);
 }
 
 static void
@@ -332,6 +391,7 @@ eog_application_class_init (EogApplicationClass *eog_application_class)
 	object_class->finalize = eog_application_finalize;
 
 	application_class->startup = eog_application_startup;
+	application_class->shutdown = eog_application_shutdown;
 	application_class->activate = eog_application_activate;
 	application_class->open = eog_application_open;
 	application_class->add_platform_data = eog_application_add_platform_data;
diff --git a/src/main.c b/src/main.c
index 7ae06d5..1483b0d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -30,10 +30,6 @@
 #include <girepository.h>
 #endif
 
-#include "eog-session.h"
-#include "eog-debug.h"
-#include "eog-thumbnail.h"
-#include "eog-job-scheduler.h"
 #include "eog-application.h"
 #include "eog-application-internal.h"
 #include "eog-plugin-engine.h"
@@ -43,16 +39,10 @@
 #include <stdlib.h>
 #include <glib/gi18n.h>
 
-#if HAVE_EXEMPI
-#include <exempi/xmp.h>
-#endif
-
 #if HAVE_RSVG
 #include <librsvg/rsvg.h>
 #endif
 
-#define EOG_CSS_FILE_PATH EOG_DATA_DIR G_DIR_SEPARATOR_S "eog.css"
-
 static EogStartupFlags flags;
 
 static gboolean fullscreen = FALSE;
@@ -60,7 +50,6 @@ static gboolean slide_show = FALSE;
 static gboolean disable_gallery = FALSE;
 static gboolean force_new_instance = FALSE;
 static gboolean single_window = FALSE;
-static gchar **startup_files = NULL;
 
 static gboolean
 _print_version_and_exit (const gchar *option_name,
@@ -106,8 +95,6 @@ main (int argc, char **argv)
 {
 	GError *error = NULL;
 	GOptionContext *ctx;
-	GtkSettings *settings;
-	GtkCssProvider *provider;
 
 	bindtextdomain (PACKAGE, EOG_LOCALE_DIR);
 	bind_textdomain_codeset (PACKAGE, "UTF-8");
@@ -117,7 +104,7 @@ main (int argc, char **argv)
 	g_option_context_add_main_entries (ctx, goption_options, PACKAGE);
 	/* Option groups are free'd together with the context 
 	 * Using gtk_get_option_group here initializes gtk during parsing */
-	g_option_context_add_group (ctx, gtk_get_option_group (TRUE));
+	g_option_context_add_group (ctx, gtk_get_option_group (FALSE));
 #ifdef HAVE_INTROSPECTION
 	g_option_context_add_group (ctx, g_irepository_get_option_group ());
 #endif
@@ -138,44 +125,8 @@ main (int argc, char **argv)
         }
 	g_option_context_free (ctx);
 
-
 	set_startup_flags ();
-
-#ifdef HAVE_EXEMPI
- 	xmp_init();
-#endif
-	eog_debug_init ();
-	eog_job_scheduler_init ();
 	gdk_threads_init ();
-	eog_thumbnail_init ();
-
-	/* Load special style properties for EogThumbView's scrollbar */
-	provider = gtk_css_provider_new ();
-	if (G_UNLIKELY (!gtk_css_provider_load_from_path(provider,
-							 EOG_CSS_FILE_PATH,
-							 &error)))
-	{
-		g_critical ("Could not load CSS data: %s", error->message);
-		g_clear_error (&error);
-	} else {
-		gtk_style_context_add_provider_for_screen (
-				gdk_screen_get_default(),
-				GTK_STYLE_PROVIDER (provider),
-				GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-	}
-	g_object_unref (provider);
-
-	/* Add application specific icons to search path */
-	gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
-                                           EOG_DATA_DIR G_DIR_SEPARATOR_S "icons");
-
-	gtk_window_set_default_icon_name ("eog");
-	g_set_application_name (_("Image Viewer"));
-
-	settings = gtk_settings_get_default ();
-	g_object_set (G_OBJECT (settings),
-	              "gtk-application-prefer-dark-theme", TRUE,
-	              NULL);
 
 	EOG_APP->priv->flags = flags;
 	if (force_new_instance) {
@@ -187,9 +138,6 @@ main (int argc, char **argv)
 	g_application_run (G_APPLICATION (EOG_APP), argc, argv);
 	g_object_unref (EOG_APP);
 
-  	if (startup_files)
-		g_strfreev (startup_files);
-
 #ifdef HAVE_EXEMPI
 	xmp_terminate();
 #endif
