diff --git a/Demo/newmetaclasses/Eiffel.py b/Demo/newmetaclasses/Eiffel.py
index 78a8bb5..04f9915 100644
--- a/Demo/newmetaclasses/Eiffel.py
+++ b/Demo/newmetaclasses/Eiffel.py
@@ -9,6 +9,7 @@
         return super(EiffelBaseMetaClass, meta).__new__(meta, name, bases,
                                                         dict)
 
+    @classmethod
     def convert_methods(cls, dict):
         """Replace functions in dict with EiffelMethod wrappers.
 
@@ -30,11 +31,10 @@
             if pre or post:
                 dict[k] = cls.make_eiffel_method(dict[m], pre, post)
 
-    convert_methods = classmethod(convert_methods)
-
 class EiffelMetaClass1(EiffelBaseMetaClass):
     # an implementation of the "eiffel" meta class that uses nested functions
 
+    @staticmethod
     def make_eiffel_method(func, pre, post):
         def method(self, *args, **kwargs):
             if pre:
@@ -49,8 +49,6 @@
 
         return method
 
-    make_eiffel_method = staticmethod(make_eiffel_method)
-
 class EiffelMethodWrapper:
 
     def __init__(self, inst, descr):
diff --git a/Lib/UserDict.py b/Lib/UserDict.py
index 703f118..7168703 100644
--- a/Lib/UserDict.py
+++ b/Lib/UserDict.py
@@ -63,12 +63,12 @@
         return self.data.popitem()
     def __contains__(self, key):
         return key in self.data
+    @classmethod
     def fromkeys(cls, iterable, value=None):
         d = cls()
         for key in iterable:
             d[key] = value
         return d
-    fromkeys = classmethod(fromkeys)
 
 class IterableUserDict(UserDict):
     def __iter__(self):
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 0dc7a42..9d00615 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -656,6 +656,7 @@
     def __repr__(self):
         return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self))
 
+    @classmethod
     def frombuf(cls, buf):
         """Construct a TarInfo object from a 512 byte string buffer.
         """
@@ -699,8 +700,6 @@
             tarinfo.name += "/"
         return tarinfo
 
-    frombuf = classmethod(frombuf)
-
     def tobuf(self):
         """Return a tar header block as a 512 byte string.
         """
@@ -858,6 +857,7 @@
     # the super-constructor. A sub-constructor is registered and made available
     # by adding it to the mapping in OPEN_METH.
 
+    @classmethod
     def open(cls, name=None, mode="r", fileobj=None, bufsize=20*512):
         """Open a tar archive for reading, writing or appending. Return
            an appropriate TarFile class.
@@ -923,8 +923,7 @@
 
         raise ValueError, "undiscernible mode"
 
-    open = classmethod(open)
-
+    @classmethod
     def taropen(cls, name, mode="r", fileobj=None):
         """Open uncompressed tar archive name for reading or writing.
         """
@@ -932,8 +931,7 @@
             raise ValueError, "mode must be 'r', 'a' or 'w'"
         return cls(name, mode, fileobj)
 
-    taropen = classmethod(taropen)
-
+    @classmethod
     def gzopen(cls, name, mode="r", fileobj=None, compresslevel=9):
         """Open gzip compressed tar archive name for reading or writing.
            Appending is not allowed.
@@ -970,8 +968,7 @@
         t._extfileobj = False
         return t
 
-    gzopen = classmethod(gzopen)
-
+    @classmethod
     def bz2open(cls, name, mode="r", fileobj=None, compresslevel=9):
         """Open bzip2 compressed tar archive name for reading or writing.
            Appending is not allowed.
@@ -1002,8 +999,6 @@
         t._extfileobj = False
         return t
 
-    bz2open = classmethod(bz2open)
-
     # All *open() methods are registered here.
     OPEN_METH = {
         "tar": "taropen",   # uncompressed tar
