diff --git a/SystemTools.cxx b/SystemTools.cxx
index 11d23364192cb22572e460210b9b286132253e48..237862e8f642a3d95038274259a0722ad143a93d 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -493,6 +493,30 @@ void SystemTools::ReplaceString(kwsys_stl::string& source,
   free(orig);
 }
 
+#if defined(KEY_WOW64_32KEY) && defined(KEY_WOW64_64KEY)
+# define KWSYS_ST_KEY_WOW64_32KEY KEY_WOW64_32KEY
+# define KWSYS_ST_KEY_WOW64_64KEY KEY_WOW64_64KEY
+#else
+# define KWSYS_ST_KEY_WOW64_32KEY 0x0200
+# define KWSYS_ST_KEY_WOW64_64KEY 0x0100
+#endif
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+static DWORD SystemToolsMakeRegistryMode(DWORD mode,
+                                         SystemTools::KeyWOW64 view)
+{
+  if(view == SystemTools::KeyWOW64_32)
+    {
+    return mode | KWSYS_ST_KEY_WOW64_32KEY;
+    }
+  else if(view == SystemTools::KeyWOW64_64)
+    {
+    return mode | KWSYS_ST_KEY_WOW64_64KEY;
+    }
+  return mode;
+}
+#endif
+
 // Read a registry value.
 // Example : 
 //      HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.1\InstallPath
@@ -501,7 +525,8 @@ void SystemTools::ReplaceString(kwsys_stl::string& source,
 //      =>  will return the data of the "Root" value of the key
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
-bool SystemTools::ReadRegistryValue(const char *key, kwsys_stl::string &value)
+bool SystemTools::ReadRegistryValue(const char *key, kwsys_stl::string &value,
+                                    KeyWOW64 view)
 {
   bool valueset = false;
   kwsys_stl::string primary = key;
@@ -549,7 +574,7 @@ bool SystemTools::ReadRegistryValue(const char *key, kwsys_stl::string &value)
   if(RegOpenKeyEx(primaryKey, 
                   second.c_str(), 
                   0, 
-                  KEY_READ, 
+                  SystemToolsMakeRegistryMode(KEY_READ, view),
                   &hKey) != ERROR_SUCCESS)
     {
     return false;
@@ -589,7 +614,8 @@ bool SystemTools::ReadRegistryValue(const char *key, kwsys_stl::string &value)
   return valueset;
 }
 #else
-bool SystemTools::ReadRegistryValue(const char *, kwsys_stl::string &)
+bool SystemTools::ReadRegistryValue(const char *, kwsys_stl::string &,
+                                    KeyWOW64)
 {
   return false;
 }
@@ -604,7 +630,8 @@ bool SystemTools::ReadRegistryValue(const char *, kwsys_stl::string &)
 //      =>  will set the data of the "Root" value of the key
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
-bool SystemTools::WriteRegistryValue(const char *key, const char *value)
+bool SystemTools::WriteRegistryValue(const char *key, const char *value,
+                                     KeyWOW64 view)
 {
   kwsys_stl::string primary = key;
   kwsys_stl::string second;
@@ -654,7 +681,7 @@ bool SystemTools::WriteRegistryValue(const char *key, const char *value)
                     0, 
                     "",
                     REG_OPTION_NON_VOLATILE,
-                    KEY_WRITE,
+                    SystemToolsMakeRegistryMode(KEY_WRITE, view),
                     NULL,
                     &hKey,
                     &dwDummy) != ERROR_SUCCESS)
@@ -674,7 +701,7 @@ bool SystemTools::WriteRegistryValue(const char *key, const char *value)
   return false;
 }
 #else
-bool SystemTools::WriteRegistryValue(const char *, const char *)
+bool SystemTools::WriteRegistryValue(const char *, const char *, KeyWOW64)
 {
   return false;
 }
@@ -688,7 +715,7 @@ bool SystemTools::WriteRegistryValue(const char *, const char *)
 //      =>  will delete  the data of the "Root" value of the key
 
 #if defined(_WIN32) && !defined(__CYGWIN__)
-bool SystemTools::DeleteRegistryValue(const char *key)
+bool SystemTools::DeleteRegistryValue(const char *key, KeyWOW64 view)
 {
   kwsys_stl::string primary = key;
   kwsys_stl::string second;
@@ -735,7 +762,7 @@ bool SystemTools::DeleteRegistryValue(const char *key)
   if(RegOpenKeyEx(primaryKey, 
                   second.c_str(), 
                   0, 
-                  KEY_WRITE, 
+                  SystemToolsMakeRegistryMode(KEY_WRITE, view),
                   &hKey) != ERROR_SUCCESS)
     {
     return false;
@@ -752,7 +779,7 @@ bool SystemTools::DeleteRegistryValue(const char *key)
   return false;
 }
 #else
-bool SystemTools::DeleteRegistryValue(const char *)
+bool SystemTools::DeleteRegistryValue(const char *, KeyWOW64)
 {
   return false;
 }
diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index 1de89e02569db598c4cfd6826a4c4590bdf2c574..825c272d0ed0479f185300317b2747e66c22b289 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -707,20 +707,30 @@ public:
    *  -----------------------------------------------------------------
    */
 
+  /**
+   * Specify access to the 32-bit or 64-bit application view of
+   * registry values.  The default is to match the currently running
+   * binary type.
+   */
+  enum KeyWOW64 { KeyWOW64_Default, KeyWOW64_32, KeyWOW64_64 };
+
   /**
    * Read a registry value
    */
-  static bool ReadRegistryValue(const char *key, kwsys_stl::string &value);
+  static bool ReadRegistryValue(const char *key, kwsys_stl::string &value,
+                                KeyWOW64 view = KeyWOW64_Default);
 
   /**
    * Write a registry value
    */
-  static bool WriteRegistryValue(const char *key, const char *value);
+  static bool WriteRegistryValue(const char *key, const char *value,
+                                 KeyWOW64 view = KeyWOW64_Default);
 
   /**
    * Delete a registry value
    */
-  static bool DeleteRegistryValue(const char *key);
+  static bool DeleteRegistryValue(const char *key,
+                                  KeyWOW64 view = KeyWOW64_Default);
 
   /** -----------------------------------------------------------------
    *               Environment Manipulation Routines
diff --git a/kwsysDateStamp.cmake b/kwsysDateStamp.cmake
index 3beef63ee3beb6b534178b0c965845a523a1fbb7..c5bdfc2657d4b72fcad39f4192be3b70034c1e75 100644
--- a/kwsysDateStamp.cmake
+++ b/kwsysDateStamp.cmake
@@ -7,4 +7,4 @@ SET(KWSYS_DATE_STAMP_YEAR  2008)
 SET(KWSYS_DATE_STAMP_MONTH 05)
 
 # KWSys version date day component.  Format is DD.
-SET(KWSYS_DATE_STAMP_DAY   16)
+SET(KWSYS_DATE_STAMP_DAY   27)