diff --git a/openvpn.c b/openvpn.c
index 7819902..24adc00 100644
--- a/openvpn.c
+++ b/openvpn.c
@@ -664,6 +664,9 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
         else
             SetForegroundWindow(hwndDlg);
 
+        /* disable OK button by default - not disabled in resources */
+        EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE);
+
         break;
 
     case WM_COMMAND:
@@ -672,6 +675,15 @@ GenericPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
         char *fmt;
         switch (LOWORD(wParam))
         {
+        case ID_EDT_RESPONSE:
+            if (HIWORD(wParam) == EN_UPDATE)
+            {
+                /* enable OK if response is non-empty */
+                BOOL enableOK = GetWindowTextLength((HWND) lParam);
+                EnableWindow(GetDlgItem(hwndDlg, IDOK), enableOK);
+            }
+            break;
+
         case IDOK:
             if (GetDlgItemTextW(hwndDlg, ID_EDT_RESPONSE, password, _countof(password))
                 && !validate_input(password, L"\n"))
@@ -782,6 +794,9 @@ PrivKeyPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
             ForceForegroundWindow(hwndDlg);
         else
             SetForegroundWindow(hwndDlg);
+
+        /* disable OK button by default - not disabled in resources */
+        EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE);
         break;
 
     case WM_COMMAND:
@@ -799,6 +814,15 @@ PrivKeyPassDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
             }
             break;
 
+        case ID_EDT_PASSPHRASE:
+            if (HIWORD(wParam) == EN_UPDATE)
+            {
+                /* enable OK if response is non-empty */
+                BOOL enableOK = GetWindowTextLength((HWND) lParam);
+                EnableWindow(GetDlgItem(hwndDlg, IDOK), enableOK);
+            }
+            break;
+
         case IDOK:
             if (GetDlgItemTextW(hwndDlg, ID_EDT_PASSPHRASE, passphrase, _countof(passphrase)))
             {