diff --git a/src/if_ole.cpp b/src/if_ole.cpp
index 53c12de27f46486605ffd4fc0e75153df4668f3a..44a35682a7ef74c9614c2cef7339159e50cdeecc 100644
--- a/src/if_ole.cpp
+++ b/src/if_ole.cpp
@@ -158,7 +158,7 @@ CVim *CVim::Create(int *pbDoRestart)
 	// RegCreateKeyEx succeeds even if key exists. W.Briscoe W2K 20021011
 	if (RegCreateKeyEx(HKEY_CLASSES_ROOT, MYVIPROGID, 0, NULL,
 		  REG_OPTION_NON_VOLATILE,
-		  KEY_ALL_ACCESS, NULL, &hKey, NULL))
+		  KEY_WOW64_64KEY | KEY_ALL_ACCESS, NULL, &hKey, NULL))
 	{
 	    delete me;
 	    return NULL; // Unable to write to registry. Quietly fail.
@@ -651,7 +651,7 @@ static void RecursiveDeleteKey(HKEY hKeyParent, const char *child)
     // Open the child
     HKEY hKeyChild;
     LONG result = RegOpenKeyEx(hKeyParent, child, 0,
-						  KEY_ALL_ACCESS, &hKeyChild);
+				KEY_WOW64_64KEY | KEY_ALL_ACCESS, &hKeyChild);
     if (result != ERROR_SUCCESS)
 	return;
 
@@ -694,7 +694,7 @@ static void SetKeyAndValue(const char *key, const char *subkey, const char *valu
     long result = RegCreateKeyEx(HKEY_CLASSES_ROOT,
 				 buffer,
 				 0, NULL, REG_OPTION_NON_VOLATILE,
-				 KEY_ALL_ACCESS, NULL,
+				 KEY_WOW64_64KEY | KEY_ALL_ACCESS, NULL,
 				 &hKey, NULL);
     if (result != ERROR_SUCCESS)
 	return;