diff --git a/win/vncviewer/OptionsDialog.cxx b/win/vncviewer/OptionsDialog.cxx
index c7188e1..721b9b4 100644
--- a/win/vncviewer/OptionsDialog.cxx
+++ b/win/vncviewer/OptionsDialog.cxx
@@ -22,6 +22,7 @@
 #include <rfb_win32/Registry.h>
 #include <rfb_win32/MsgBox.h>
 #include <rfb_win32/OSVersion.h>
+#include <rfb_win32/SecurityPage.h>
 #include <rfb/encodings.h>
 #include <rfb/CConnection.h>
 #include <commdlg.h>
@@ -354,239 +355,39 @@
   OptionsInfo* dlg;
 };
 
-#ifdef HAVE_GNUTLS
-/* XXX: This class contains bunch of similar code to unix/vncviewer/CConn.cxx */
-class SecurityPage : public PropSheetPage {
+class SecPage : public SecurityPage {
 public:
-  SecurityPage(OptionsInfo* dlg_, Security *security_)
-    : PropSheetPage(GetModuleHandle(0), MAKEINTRESOURCE(IDD_SECURITY)),
-      dlg(dlg_), security(security_) {
+  SecPage(Security *security_, OptionsInfo *dlg_)
+    : SecurityPage(security_), dlg(dlg_) {
   }
-  virtual void initDialog() {
-    enableVeNCryptFeatures(false);
 
-    /* Process non-VeNCrypt sectypes */
-    list<U8> secTypes = security->GetEnabledSecTypes();
-    list<U8>::iterator i;
+  virtual void enableX509Dialogs() {
+    enableItem(IDC_LOAD_CACERT, true);
+    enableItem(IDC_LOAD_CRLCERT, true);
+  }
 
-    for (i = secTypes.begin(); i != secTypes.end(); i++) {
-      switch (*i) {
-      case secTypeVeNCrypt:
-        enableVeNCryptFeatures(true);
-        setItemChecked(IDC_VENCRYPT, true);
-        break;
-      case secTypeNone:
-        setItemChecked(IDC_ENC_NONE, true);
-        setItemChecked(IDC_AUTH_NONE, true);
-        break;
-      case secTypeVncAuth:
-        setItemChecked(IDC_ENC_NONE, true);
-        setItemChecked(IDC_AUTH_VNC, true);
-        break;
-      }
-    }
-
-    /* Process VeNCrypt subtypes */
-    if (isItemChecked(IDC_VENCRYPT)) {
-      list<U32> secTypesExt = security->GetEnabledExtSecTypes();
-      list<U32>::iterator iext;
-      for (iext = secTypesExt.begin(); iext != secTypesExt.end(); iext++) {
-        switch (*iext) {
-        case secTypePlain:
-          setItemChecked(IDC_ENC_NONE, true);
-          setItemChecked(IDC_AUTH_PLAIN, true);
-          break;
-        case secTypeTLSNone:
-          setItemChecked(IDC_ENC_TLS, true);
-          setItemChecked(IDC_AUTH_NONE, true);
-          break;
-        case secTypeTLSVnc:
-          setItemChecked(IDC_ENC_TLS, true);
-          setItemChecked(IDC_AUTH_VNC, true);
-          break;
-        case secTypeTLSPlain:
-          setItemChecked(IDC_ENC_TLS, true);
-          setItemChecked(IDC_AUTH_PLAIN, true);
-          break;
-        case secTypeX509None:
-          setItemChecked(IDC_ENC_X509, true);
-          setItemChecked(IDC_AUTH_NONE, true);
-          enableItem(IDC_LOAD_CACERT, true);
-          enableItem(IDC_LOAD_CRLCERT, true);
-          break;
-        case secTypeX509Vnc:
-          setItemChecked(IDC_ENC_X509, true);
-          setItemChecked(IDC_AUTH_VNC, true);
-          enableItem(IDC_LOAD_CACERT, true);
-          enableItem(IDC_LOAD_CRLCERT, true);
-          break;
-        case secTypeX509Plain:
-          setItemChecked(IDC_ENC_X509, true);
-          setItemChecked(IDC_AUTH_PLAIN, true);
-          enableItem(IDC_LOAD_CACERT, true);
-          enableItem(IDC_LOAD_CRLCERT, true);
-          break;
-        }
-      }
-    }
+  virtual void disableX509Dialogs() {
+    enableItem(IDC_LOAD_CACERT, false);
+    enableItem(IDC_LOAD_CRLCERT, false);
   }
 
   virtual bool onOk() {
+    SecurityPage::onOk();
+
     dlg->options.secTypes = security->GetEnabledExtSecTypes();
+
     if (isItemChecked(IDC_VENCRYPT))
       dlg->options.secTypes.push_front(secTypeVeNCrypt);
+      
     return true;
   }
 
-  virtual bool onCommand(int id, int cmd) {
-    switch (id) {
-    case IDC_VENCRYPT:
-      if (isItemChecked(IDC_VENCRYPT)) {
-        enableVeNCryptFeatures(true);
-        security->EnableSecType(secTypeVeNCrypt);
-      } else {
-        enableVeNCryptFeatures(false);
-        security->DisableSecType(secTypeVeNCrypt);
-      }
-      break;
+  virtual void loadX509Certs() {}
+  virtual void loadVncPasswd() {}
 
-    /* Process types without encryption */
-    case IDC_ENC_NONE:
-      if (isItemChecked(IDC_ENC_NONE)) {
-      vlog.debug("here");
-        if (isItemChecked(IDC_AUTH_NONE))
-          security->EnableSecType(secTypeNone);
-        if (isItemChecked(IDC_AUTH_VNC))
-          security->EnableSecType(secTypeVncAuth);
-        if (isItemChecked(IDC_AUTH_PLAIN))
-          security->EnableSecType(secTypePlain);
-      } else {
-        security->DisableSecType(secTypeNone);
-        security->DisableSecType(secTypeVncAuth); 
-        security->DisableSecType(secTypePlain);
-      }
-      break;
-
-    /* Process security types which use TLS encryption */
-    case IDC_ENC_TLS:
-      if (isItemChecked(IDC_ENC_TLS)) {
-        if (isItemChecked(IDC_AUTH_NONE))
-          security->EnableSecType(secTypeTLSNone);
-        if (isItemChecked(IDC_AUTH_VNC))
-          security->EnableSecType(secTypeTLSVnc);
-        if (isItemChecked(IDC_AUTH_PLAIN))
-          security->EnableSecType(secTypeTLSPlain);
-      } else {
-        security->DisableSecType(secTypeTLSNone);
-        security->DisableSecType(secTypeTLSVnc);
-        security->DisableSecType(secTypeTLSPlain);
-      } 
-      break;
-
-    /* Process security types which use X509 encryption */
-    case IDC_ENC_X509:
-      if (isItemChecked(IDC_ENC_X509)) {
-        enableItem(IDC_LOAD_CACERT, true);
-        enableItem(IDC_LOAD_CRLCERT, true);
-        if (isItemChecked(IDC_AUTH_NONE))
-          security->EnableSecType(secTypeX509None);
-        if (isItemChecked(IDC_AUTH_VNC))
-          security->EnableSecType(secTypeX509Vnc);
-        if (isItemChecked(IDC_AUTH_PLAIN))
-          security->EnableSecType(secTypeX509Plain);
-      } else {
-        enableItem(IDC_LOAD_CACERT, false);
-        enableItem(IDC_LOAD_CRLCERT, false);
-        security->DisableSecType(secTypeX509None);
-        security->DisableSecType(secTypeX509Vnc);
-        security->DisableSecType(secTypeX509Plain);
-      }
-      break;
-
-    case IDC_LOAD_CACERT:
-      break;
-
-    case IDC_LOAD_CRLCERT:
-      break;
-
-    /* Process *None security types */
-    case IDC_AUTH_NONE:
-      if (isItemChecked(IDC_AUTH_NONE)) {
-        if (isItemChecked(IDC_ENC_NONE))
-          security->EnableSecType(secTypeNone);
-        if (isItemChecked(IDC_ENC_TLS))
-          security->EnableSecType(secTypeTLSNone);
-        if (isItemChecked(IDC_ENC_X509))
-          security->EnableSecType(secTypeX509None);
-      } else {
-        security->DisableSecType(secTypeNone);
-        security->DisableSecType(secTypeTLSNone);
-        security->DisableSecType(secTypeX509None);
-      }
-      break;
-
-    /* Process *Vnc security types */
-    case IDC_AUTH_VNC:
-      if (isItemChecked(IDC_AUTH_VNC)) {
-        if (isItemChecked(IDC_ENC_NONE))
-          security->EnableSecType(secTypeVncAuth);
-        if (isItemChecked(IDC_ENC_TLS))
-          security->EnableSecType(secTypeTLSVnc);
-        if (isItemChecked(IDC_ENC_X509))
-          security->EnableSecType(secTypeX509Vnc);
-      } else {
-        security->DisableSecType(secTypeVncAuth);
-        security->DisableSecType(secTypeTLSVnc);
-        security->DisableSecType(secTypeX509Vnc);
-      }
-      break;
-
-    /* Process *Plain security types */
-    case IDC_AUTH_PLAIN:
-      if (isItemChecked(IDC_AUTH_PLAIN)) {
-        if (isItemChecked(IDC_ENC_NONE))
-          security->EnableSecType(secTypePlain);
-        if (isItemChecked(IDC_ENC_TLS))
-          security->EnableSecType(secTypeTLSPlain);
-        if (isItemChecked(IDC_ENC_X509))
-          security->EnableSecType(secTypeX509Plain);
-      } else {
-        security->DisableSecType(secTypePlain);
-        security->DisableSecType(secTypeTLSPlain);
-        security->DisableSecType(secTypeX509Plain);
-      }
-      break;
-
-    default:
-      throw rdr::Exception("Unhandled action in SecurityPage");
-    }
-    return true;
-  }
 protected:
   OptionsInfo* dlg;
-private:
-  Security *security;
-
-  void enableVeNCryptFeatures(bool enable) {
-    if (enable) {
-      enableItem(IDC_ENC_TLS, true);
-      enableItem(IDC_ENC_X509, true);
-      enableItem(IDC_AUTH_PLAIN, true);
-    } else {
-      disableFeature(IDC_ENC_TLS);
-      disableFeature(IDC_ENC_X509);
-      disableFeature(IDC_AUTH_PLAIN);
-      enableItem(IDC_LOAD_CACERT, false);
-      enableItem(IDC_LOAD_CRLCERT, false);
-    }
-  }
-
-  void disableFeature(int id) {
-    enableItem(id, false);
-    setItemChecked(id, false);
-  }
 };
-#endif
 
 OptionsDialog::OptionsDialog() : visible(false) {
 }
@@ -607,9 +408,7 @@
   InputsPage inputsPage(&info); pages.push_back(&inputsPage);
   MiscPage miscPage(&info); pages.push_back(&miscPage);
   DefaultsPage defPage(&info); if (view) pages.push_back(&defPage);
-#ifdef HAVE_GNUTLS
-  SecurityPage secPage(&info, view->security); pages.push_back(&secPage);
-#endif
+  SecPage secPage(view->security, &info); pages.push_back(&secPage);
 
   // Show the property sheet
   ViewerOptions dialog(info, pages);
diff --git a/win/vncviewer/resource.h b/win/vncviewer/resource.h
index 03d9d76..efb977c 100644
--- a/win/vncviewer/resource.h
+++ b/win/vncviewer/resource.h
@@ -1,7 +1,7 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
 // Used by vncviewer.rc
-//
+
+#include <rfb_win32/resource.h>
+
 #define IDR_MANIFEST                    1
 #define IDI_ICON                        101
 #define IDD_VNC_AUTH_DLG                102
@@ -16,7 +16,6 @@
 #define IDR_TRAY                        112
 #define IDD_CONNECTION_INFO             113
 #define IDD_DEFAULTS                    116
-#define IDD_SECURITY                    117
 #define IDB_BITMAP                      120
 #define IDB_TOOLBAR                     122
 #define IDC_PASSWORD                    1000
@@ -86,15 +85,8 @@
 #define IDC_STATIC_SCALE                1097
 #define IDC_COMBO_SCALE                 1098
 #define IDC_STATIC_PERCENT              1099
-#define IDC_VENCRYPT                    1200
-#define IDC_ENC_NONE                    1201
-#define IDC_ENC_TLS                     1202
-#define IDC_ENC_X509                    1203
-#define IDC_LOAD_CACERT                 1204
-#define IDC_LOAD_CRLCERT                1205
-#define IDC_AUTH_NONE                   1206
-#define IDC_AUTH_VNC                    1207
-#define IDC_AUTH_PLAIN                  1208
+#define IDC_LOAD_CACERT                 1100
+#define IDC_LOAD_CRLCERT                1101
 #define ID_TOOLBAR                      4002
 #define ID_CLOSE                        4003
 #define ID_OPTIONS                      4004
