diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index 68b7775..00d76d4 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -17,10 +17,11 @@
 import os
 import subprocess
 import sys
-from distutils.errors import (DistutilsExecError, DistutilsPlatformError,
-    CompileError, LibError, LinkError)
-from distutils.ccompiler import (CCompiler, gen_preprocess_options,
-    gen_lib_options)
+
+from distutils.errors import DistutilsExecError, DistutilsPlatformError, \
+                             CompileError, LibError, LinkError
+from distutils.ccompiler import CCompiler, gen_preprocess_options, \
+                                gen_lib_options
 from distutils import log
 from distutils.util import get_platform
 
@@ -53,15 +54,14 @@
     """Helper class to read values from the registry
     """
 
-    @classmethod
     def get_value(cls, path, key):
         for base in HKEYS:
             d = cls.read_values(base, path)
             if d and key in d:
                 return d[key]
         raise KeyError(key)
+    get_value = classmethod(get_value)
 
-    @classmethod
     def read_keys(cls, base, key):
         """Return list of registry keys."""
         try:
@@ -78,8 +78,8 @@
             L.append(k)
             i += 1
         return L
+    read_keys = classmethod(read_keys)
 
-    @classmethod
     def read_values(cls, base, key):
         """Return dict of registry keys and values.
 
@@ -100,8 +100,8 @@
             d[cls.convert_mbcs(name)] = cls.convert_mbcs(value)
             i += 1
         return d
+    read_values = classmethod(read_values)
 
-    @staticmethod
     def convert_mbcs(s):
         dec = getattr(s, "decode", None)
         if dec is not None:
@@ -110,6 +110,7 @@
             except UnicodeError:
                 pass
         return s
+    convert_mbcs = staticmethod(convert_mbcs)
 
 class MacroExpander:
 
@@ -131,7 +132,7 @@
                                "sdkinstallrootv2.0")
             else:
                 raise KeyError("sdkinstallrootv2.0")
-        except KeyError as exc: #
+        except KeyError:
             raise DistutilsPlatformError(
             """Python was built with Visual Studio 2008;
 extensions must be built with a compiler than can generate compatible binaries.
@@ -479,7 +480,7 @@
                 try:
                     self.spawn([self.rc] + pp_opts +
                                [output_opt] + [input_opt])
-                except DistutilsExecError as msg:
+                except DistutilsExecError, msg:
                     raise CompileError(msg)
                 continue
             elif ext in self._mc_extensions:
@@ -506,7 +507,7 @@
                     self.spawn([self.rc] +
                                ["/fo" + obj] + [rc_file])
 
-                except DistutilsExecError as msg:
+                except DistutilsExecError, msg:
                     raise CompileError(msg)
                 continue
             else:
@@ -519,7 +520,7 @@
                 self.spawn([self.cc] + compile_opts + pp_opts +
                            [input_opt, output_opt] +
                            extra_postargs)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise CompileError(msg)
 
         return objects
@@ -544,7 +545,7 @@
                 pass # XXX what goes here?
             try:
                 self.spawn([self.lib] + lib_args)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LibError(msg)
         else:
             log.debug("skipping %s (up-to-date)", output_filename)
@@ -633,7 +634,7 @@
             self.mkpath(os.path.dirname(output_filename))
             try:
                 self.spawn([self.linker] + ld_args)
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LinkError(msg)
 
             # embed the manifest
@@ -641,12 +642,15 @@
             # will still consider the DLL up-to-date, but it will not have a
             # manifest.  Maybe we should link to a temp file?  OTOH, that
             # implies a build environment error that shouldn't go undetected.
-            mfid = 1 if target_desc == CCompiler.EXECUTABLE else 2
+            if target_desc == CCompiler.EXECUTABLE:
+                mfid = 1
+            else:
+                mfid = 2
             out_arg = '-outputresource:%s;%s' % (output_filename, mfid)
             try:
                 self.spawn(['mt.exe', '-nologo', '-manifest',
                             temp_manifest, out_arg])
-            except DistutilsExecError as msg:
+            except DistutilsExecError, msg:
                 raise LinkError(msg)
         else:
             log.debug("skipping %s (up-to-date)", output_filename)
diff --git a/Lib/distutils/tests/test_msvc9compiler.py b/Lib/distutils/tests/test_msvc9compiler.py
index 0c8bd6e..bde614e 100644
--- a/Lib/distutils/tests/test_msvc9compiler.py
+++ b/Lib/distutils/tests/test_msvc9compiler.py
@@ -30,6 +30,28 @@
         finally:
             msvc9compiler.find_vcvarsall = old_find_vcvarsall
 
+    def test_reg_class(self):
+        if sys.platform != 'win32':
+            # this test is only for win32
+            return
+
+        from distutils.msvc9compiler import Reg
+        self.assertRaises(KeyError, Reg.get_value, 'xxx', 'xxx')
+
+        # looking for values that should exist on all
+        # windows registeries versions.
+        path = r'Software\Microsoft\Notepad'
+        v = Reg.get_value(path, u"lfitalic")
+        self.assert_(v in (0, 1))
+
+        import _winreg
+        HKCU = _winreg.HKEY_CURRENT_USER
+        keys = Reg.read_keys(HKCU, 'xxxx')
+        self.assertEquals(keys, None)
+
+        keys = Reg.read_keys(HKCU, r'Software\Microsoft')
+        self.assert_('Notepad' in keys)
+
 def test_suite():
     return unittest.makeSuite(msvc9compilerTestCase)
 
