diff --git a/Registry.cxx b/Registry.cxx
index d11db560c4611d902c8c0c38758bf4b0e6f3f2b5..2097085f79a3586c2aba8c6c119608aac630a117 100644
--- a/Registry.cxx
+++ b/Registry.cxx
@@ -367,6 +367,11 @@ RegistryHelper::~RegistryHelper()
 bool RegistryHelper::Open(const char *toplevel, const char *subkey,
   int readonly)
 {  
+  this->EntriesMap.erase(
+    this->EntriesMap.begin(),
+    this->EntriesMap.end());
+  m_Empty = 1;
+
 #ifdef _WIN32
   if ( m_RegistryType == Registry::WIN32_REGISTRY)
     {
@@ -493,10 +498,6 @@ bool RegistryHelper::Close()
     {
     if ( !m_Changed )
       {
-      this->EntriesMap.erase(
-        this->EntriesMap.begin(),
-        this->EntriesMap.end());
-      m_Empty = 1;
       this->SetSubKey(0);
       return true;
       }
@@ -786,7 +787,7 @@ kwsys_stl::string RegistryHelper::DecodeValue(const char* str)
   kwsys_ios::ostringstream ostr;
   while ( *str )
     {
-    int val;
+    unsigned int val;
     switch ( *str )
       {
     case '%':