diff --git a/src/nm-policy.c b/src/nm-policy.c
index a0cf71e..923aa49 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -1781,21 +1781,43 @@ vpn_connection_deactivated (NMPolicy *policy, NMVpnConnection *vpn)
 static void
 vpn_connection_state_changed (NMVpnConnection *vpn,
                               NMVpnConnectionState new_state,
                               NMVpnConnectionState old_state,
                               NMVpnConnectionStateReason reason,
                               NMPolicy *policy)
 {
+	NMPolicyPrivate *priv = NM_POLICY_GET_PRIVATE (policy);
+
 	if (new_state == NM_VPN_CONNECTION_STATE_ACTIVATED)
 		vpn_connection_activated (policy, vpn);
 	else if (new_state >= NM_VPN_CONNECTION_STATE_FAILED) {
 		/* Only clean up IP/DNS if the connection ever got past IP_CONFIG */
 		if (old_state >= NM_VPN_CONNECTION_STATE_IP_CONFIG_GET &&
 		    old_state <= NM_VPN_CONNECTION_STATE_ACTIVATED)
 			vpn_connection_deactivated (policy, vpn);
+
+		if (old_state == NM_VPN_CONNECTION_STATE_ACTIVATED &&
+		    new_state == NM_VPN_CONNECTION_STATE_FAILED &&
+		    reason != NM_VPN_CONNECTION_STATE_REASON_DEVICE_DISCONNECTED) {
+		    NMConnection *connection = nm_active_connection_get_connection (NM_ACTIVE_CONNECTION (vpn));
+			GError *error = NULL;
+
+			/* Attempt to reconnect VPN connections that failed after being connected */
+			if (!nm_manager_activate_connection (priv->manager,
+			                                     connection,
+			                                     NULL,
+			                                     NULL,
+			                                     nm_active_connection_get_subject (NM_ACTIVE_CONNECTION (vpn)),
+			                                     &error)) {
+				nm_log_warn (LOGD_DEVICE, "VPN '%s' reconnect failed: %s",
+				             nm_connection_get_id (connection),
+				             error->message ? error->message : "unknown");
+				g_clear_error (&error);
+			}
+		}
 	}
 }
 
 static void
 active_connection_state_changed (NMActiveConnection *active,
                                  GParamSpec *pspec,
                                  NMPolicy *policy)
