diff --git a/openvpn.c b/openvpn.c
index 3e8f186..b123069 100644
--- a/openvpn.c
+++ b/openvpn.c
@@ -848,6 +848,27 @@ StatusDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
     case WM_DESTROY:
         PostQuitMessage(0);
         break;
+
+    case WM_OVPN_STOP:
+        c = (connection_t *) GetProp(hwndDlg, cfgProp);
+        c->state = disconnecting;
+        RunDisconnectScript(c, false);
+        EnableWindow(GetDlgItem(c->hwndStatus, ID_DISCONNECT), FALSE);
+        EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE);
+        SetMenuStatus(c, disconnecting);
+        SetDlgItemText(c->hwndStatus, ID_TXT_STATUS, LoadLocalizedString(IDS_NFO_STATE_WAIT_TERM));
+        SetEvent(c->exit_event);
+        break;
+
+    case WM_OVPN_SUSPEND:
+        c = (connection_t *) GetProp(hwndDlg, cfgProp);
+        c->state = suspending;
+        EnableWindow(GetDlgItem(c->hwndStatus, ID_DISCONNECT), FALSE);
+        EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE);
+        SetMenuStatus(c, disconnecting);
+        SetDlgItemText(c->hwndStatus, ID_TXT_STATUS, LoadLocalizedString(IDS_NFO_STATE_WAIT_TERM));
+        SetEvent(c->exit_event);
+        break;
     }
     return FALSE;
 }
@@ -913,31 +934,7 @@ ThreadOpenVPNStatus(void *p)
             continue;
         }
 
-        if (msg.hwnd == NULL)
-        {
-            switch (msg.message)
-            {
-            case WM_OVPN_STOP:
-                c->state = disconnecting;
-                RunDisconnectScript(c, false);
-                EnableWindow(GetDlgItem(c->hwndStatus, ID_DISCONNECT), FALSE);
-                EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE);
-                SetMenuStatus(c, disconnecting);
-                SetDlgItemText(c->hwndStatus, ID_TXT_STATUS, LoadLocalizedString(IDS_NFO_STATE_WAIT_TERM));
-                SetEvent(c->exit_event);
-                break;
-
-            case WM_OVPN_SUSPEND:
-                c->state = suspending;
-                EnableWindow(GetDlgItem(c->hwndStatus, ID_DISCONNECT), FALSE);
-                EnableWindow(GetDlgItem(c->hwndStatus, ID_RESTART), FALSE);
-                SetMenuStatus(c, disconnecting);
-                SetDlgItemText(c->hwndStatus, ID_TXT_STATUS, LoadLocalizedString(IDS_NFO_STATE_WAIT_TERM));
-                SetEvent(c->exit_event);
-                break;
-            }
-        }
-        else if (IsDialogMessage(c->hwndStatus, &msg) == 0)
+        if (IsDialogMessage(c->hwndStatus, &msg) == 0)
         {
             TranslateMessage(&msg);
             DispatchMessage(&msg);
@@ -1158,14 +1155,14 @@ out:
 void
 StopOpenVPN(connection_t *c)
 {
-    PostThreadMessage(c->threadId, WM_OVPN_STOP, 0, 0);
+    PostMessage(c->hwndStatus, WM_OVPN_STOP, 0, 0);
 }
 
 
 void
 SuspendOpenVPN(int config)
 {
-    PostThreadMessage(o.conn[config].threadId, WM_OVPN_SUSPEND, 0, 0);
+    PostMessage(o.conn[config].hwndStatus, WM_OVPN_SUSPEND, 0, 0);
 }