diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index 93437d6..43b1659 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -308,11 +308,12 @@
         return "CallFunc(%s, %s, %s, %s)" % (repr(self.node), repr(self.args), repr(self.star_args), repr(self.dstar_args))
 
 class Class(Node):
-    def __init__(self, name, bases, doc, code, lineno=None):
+    def __init__(self, name, bases, doc, code, decorators = None, lineno=None):
         self.name = name
         self.bases = bases
         self.doc = doc
         self.code = code
+        self.decorators = decorators
         self.lineno = lineno
 
     def getChildren(self):
@@ -321,16 +322,19 @@
         children.extend(flatten(self.bases))
         children.append(self.doc)
         children.append(self.code)
+        children.append(self.decorators)
         return tuple(children)
 
     def getChildNodes(self):
         nodelist = []
         nodelist.extend(flatten_nodes(self.bases))
         nodelist.append(self.code)
+        if self.decorators is not None:
+            nodelist.append(self.decorators)
         return tuple(nodelist)
 
     def __repr__(self):
-        return "Class(%s, %s, %s, %s)" % (repr(self.name), repr(self.bases), repr(self.doc), repr(self.code))
+        return "Class(%s, %s, %s, %s, %s)" % (repr(self.name), repr(self.bases), repr(self.doc), repr(self.code), repr(self.decorators))
 
 class Compare(Node):
     def __init__(self, expr, ops, lineno=None):
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 56cc1ef..8c367e2 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -232,6 +232,18 @@
             items.append(self.decorator(dec_nodelist[1:]))
         return Decorators(items)
 
+    def decorated(self, nodelist):
+        assert nodelist[0][0] == symbol.decorators
+        if nodelist[1][0] == symbol.funcdef:
+            n = [nodelist[0]] + list(nodelist[1][1:])
+            return self.funcdef(n)
+        elif nodelist[1][0] == symbol.classdef:
+            decorators = self.decorators(nodelist[0][1:])
+            cls = self.classdef(nodelist[1][1:])
+            cls.decorators = decorators
+            return cls
+        raise WalkerError()
+
     def funcdef(self, nodelist):
         #                    -6   -5    -4         -3  -2    -1
         # funcdef: [decorators] 'def' NAME parameters ':' suite
