diff --git a/modules/offline-alert/evolution-offline-alert.c b/modules/offline-alert/evolution-offline-alert.c
index 4c064ce..15b4541 100644
--- a/modules/offline-alert/evolution-offline-alert.c
+++ b/modules/offline-alert/evolution-offline-alert.c
@@ -80,7 +80,13 @@ offline_alert_network_available_cb (EShell *shell,
                                     GParamSpec *pspec,
                                     EOfflineAlert *extension)
 {
-	if (e_shell_get_network_available (shell))
+	if (e_shell_get_network_available (shell)) {
+		if (extension->alert != NULL)
+			e_alert_response (extension->alert, GTK_RESPONSE_OK);
+		return;
+	}
+
+	if (!e_shell_get_online (shell))
 		return;
 
 	g_return_if_fail (extension->alert == NULL);
@@ -122,11 +128,6 @@ offline_alert_window_created_cb (EShell *shell,
 	if (e_shell_get_online (shell))
 		return;
 
-	if (!e_shell_get_network_available (shell)) {
-		g_object_notify (G_OBJECT (shell), "network-available");
-		return;
-	}
-
 	g_return_if_fail (extension->alert == NULL);
 
 	/* This alert only shows at startup, not when the user
@@ -135,7 +136,7 @@ offline_alert_window_created_cb (EShell *shell,
 
 	action = E_SHELL_WINDOW_ACTION_WORK_ONLINE (window);
 
-	extension->alert = e_alert_new ("offline-alert:offline", NULL);
+	extension->alert = e_alert_new (e_shell_get_network_available (shell) ? "offline-alert:offline" : "offline-alert:no-network", NULL);
 	e_alert_add_action (extension->alert, action, GTK_RESPONSE_NONE);
 
 	g_object_add_weak_pointer (
diff --git a/shell/apps_evolution_shell.schemas.in b/shell/apps_evolution_shell.schemas.in
index 09c376e..6bb8524 100644
--- a/shell/apps_evolution_shell.schemas.in
+++ b/shell/apps_evolution_shell.schemas.in
@@ -88,6 +88,21 @@
     </schema>
 
     <schema>
+      <key>/schemas/apps/evolution/shell/currently_offline</key>
+      <applyto>/apps/evolution/shell/currently_offline</applyto>
+      <owner>evolution</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+        <short>Current state of offline mode</short>
+	<long>Set to true when evolution is currently in offline mode, false otherwise.
+	This is responding to both user choice of working online/offline and network
+	outages noticed by any network monitoring system like NetworkManager or ConnManager.
+	</long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/evolution/shell/offline/folder_paths</key>
       <applyto>/apps/evolution/shell/offline/folder_paths</applyto>
       <owner>evolution</owner>
diff --git a/shell/e-shell.c b/shell/e-shell.c
index dbcb55b..bc469ab 100644
--- a/shell/e-shell.c
+++ b/shell/e-shell.c
@@ -1267,6 +1267,14 @@ e_shell_init (EShell *shell)
 		"start-offline",
 		"/apps/evolution/shell/start_offline");
 
+	e_shell_settings_install_property_for_key (
+		"currently-offline",
+		"/apps/evolution/shell/currently_offline");
+
+	g_object_bind_property (shell, "online",
+		e_shell_get_shell_settings (shell), "currently-offline",
+		G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN);
+
 	/*** Session Management ***/
 
 	sm_client = egg_sm_client_get ();
