diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c
index 7f62c46..5033aaf 100644
--- a/mail/e-mail-backend.c
+++ b/mail/e-mail-backend.c
@@ -269,7 +269,7 @@ mail_backend_quit_requested_cb (EShell *shell,
 	window = e_shell_get_active_window (shell);
 
 	/* We can quit immediately if offline. */
-	if (!e_shell_get_online (shell))
+	if (!e_shell_get_online (shell) || e_shell_get_quit_request (shell))
 		return;
 
 	/* In express mode, don't raise mail request in non mail window. */
diff --git a/shell/e-shell.c b/shell/e-shell.c
index f82931c..5e1f04c 100644
--- a/shell/e-shell.c
+++ b/shell/e-shell.c
@@ -72,6 +72,7 @@ struct _EShellPrivate {
 	guint express_mode	: 1;
 	guint meego_mode	: 1;
 	guint small_screen_mode	: 1;
+	guint quit_request      : 1;
 };
 
 enum {
@@ -83,7 +84,8 @@ enum {
 	PROP_MODULE_DIRECTORY,
 	PROP_NETWORK_AVAILABLE,
 	PROP_ONLINE,
-	PROP_SHELL_SETTINGS
+	PROP_SHELL_SETTINGS,
+	PROP_QUIT_REQUEST
 };
 
 enum {
@@ -189,6 +191,15 @@ shell_window_weak_notify_cb (EShell *shell,
 }
 
 static void
+shell_set_quit_request (EShell *shell, gboolean quit_request)
+{
+	g_return_if_fail (shell != NULL);
+	g_return_if_fail (E_IS_SHELL (shell));
+
+	shell->priv->quit_request = quit_request;
+}
+
+static void
 shell_ready_for_offline (EShell *shell,
                          EActivity *activity,
                          gboolean is_last_ref)
@@ -554,6 +565,12 @@ shell_set_property (GObject *object,
 				E_SHELL (object),
 				g_value_get_boolean (value));
 			return;
+
+		case PROP_QUIT_REQUEST:
+			shell_set_quit_request (
+				E_SHELL (object),
+				g_value_get_boolean (value));
+			return;
 	}
 
 	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -607,6 +624,12 @@ shell_get_property (GObject *object,
 				value, e_shell_get_shell_settings (
 				E_SHELL (object)));
 			return;
+
+		case PROP_QUIT_REQUEST:
+			g_value_set_boolean (
+				value, e_shell_get_quit_request (
+				E_SHELL (object)));
+			return;
 	}
 
 	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@@ -689,7 +712,7 @@ shell_constructed (GObject *object)
 	/* UniqueApp will have by this point determined whether we're
 	 * the only Evolution process running.  If so, proceed normally.
 	 * Otherwise we just issue commands to the other process. */
-	if (unique_app_is_running (UNIQUE_APP (object)))
+	if (unique_app_is_running (UNIQUE_APP (object)) || e_shell_get_quit_request (E_SHELL (object)))
 		return;
 
 	e_file_lock_create ();
@@ -753,6 +776,8 @@ shell_message_handle_close (EShell *shell,
 {
 	UniqueResponse response;
 
+	shell->priv->quit_request = TRUE;
+
 	if (e_shell_quit (shell))
 		response = UNIQUE_RESPONSE_OK;
 	else
@@ -950,6 +975,25 @@ e_shell_class_init (EShellClass *class)
 			G_PARAM_READABLE));
 
 	/**
+	 * EShell:quit-request
+	 *
+	 * Whether the shell was invoked just to quit the already running Evolution.
+	 * For cases where Evolution crashes and there is left a .running file
+	 * this will ensure that the newly run Evolution will not be spawned,
+	 * even it was run with a --quit parameter.
+	 **/
+	g_object_class_install_property (
+		object_class,
+		PROP_QUIT_REQUEST,
+		g_param_spec_boolean (
+			"quit-request",
+			"quit-request",
+			"Whether the shell was invoked only to quit running Evolution",
+			FALSE,
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT_ONLY));
+
+	/**
 	 * EShell::event
 	 * @shell: the #EShell which emitted the signal
 	 * @event_data: data associated with the event
@@ -1394,7 +1438,7 @@ e_shell_create_shell_window (EShell *shell,
 
 	app = UNIQUE_APP (shell);
 
-	if (unique_app_is_running (app))
+	if (unique_app_is_running (app) || e_shell_get_quit_request (shell))
 		goto unique;
 
 	view_name = e_shell_get_canonical_name (shell, view_name);
@@ -1803,6 +1847,21 @@ e_shell_set_online (EShell *shell,
 }
 
 /**
+ * e_shell_get_quit_request:
+ * @shell: an #EShell
+ *
+ * Returns: whether was shell invoked just to quit already
+ * running Evolution.
+ **/
+gboolean
+e_shell_get_quit_request (EShell *shell)
+{
+	g_return_val_if_fail (E_IS_SHELL (shell), FALSE);
+
+	return shell->priv->quit_request;
+}
+
+/**
  * e_shell_get_preferences_window:
  * @shell: an #EShell
  *
diff --git a/shell/e-shell.h b/shell/e-shell.h
index f1d76b9..38780ad 100644
--- a/shell/e-shell.h
+++ b/shell/e-shell.h
@@ -118,6 +118,7 @@ void		e_shell_set_network_available	(EShell *shell,
 gboolean	e_shell_get_online		(EShell *shell);
 void		e_shell_set_online		(EShell *shell,
 						 gboolean online);
+gboolean	e_shell_get_quit_request	(EShell *shell);
 GtkWidget *	e_shell_get_preferences_window	(EShell *shell);
 void		e_shell_event			(EShell *shell,
 						 const gchar *event_name,
diff --git a/shell/main.c b/shell/main.c
index cac04dd..a0eeb98 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -415,6 +415,7 @@ create_default_shell (void)
 		"express-mode", express_mode,
 		"small-screen-mode", small_screen,
 		"online", online,
+		"quit-request", quit,
 		NULL);
 
 	g_object_unref (client);
@@ -577,6 +578,14 @@ main (gint argc, gchar **argv)
 	g_object_unref (client);
 
 	shell = create_default_shell ();
+	if (quit) {
+		if (unique_app_is_running (UNIQUE_APP (shell)))
+			unique_app_send_message (UNIQUE_APP (shell), UNIQUE_CLOSE, NULL);
+
+		g_object_unref (shell);
+
+		return 0;
+	}
 
 	if (!disable_eplugin) {
 		/* Register built-in plugin hook types. */
