Index: newforms/forms.py
===================================================================
--- newforms/forms.py	(revision 4637)
+++ newforms/forms.py	(working copy)
@@ -36,17 +36,20 @@
     'base_fields', taking into account parent class 'base_fields' as well.
     """
     def __new__(cls, name, bases, attrs):
-        fields = [(field_name, attrs.pop(field_name)) for field_name, obj in attrs.items() if isinstance(obj, Field)]
-        fields.sort(lambda x, y: cmp(x[1].creation_counter, y[1].creation_counter))
+        if 'base_fields' in attrs:
+            fields = attrs['base_fields']
+        else:
+            fields = [(field_name, attrs.pop(field_name)) for field_name, obj in attrs.items() if isinstance(obj, Field)]
+            fields.sort(lambda x, y: cmp(x[1].creation_counter, y[1].creation_counter))
 
-        # If this class is subclassing another Form, add that Form's fields.
-        # Note that we loop over the bases in *reverse*. This is necessary in
-        # order to preserve the correct order of fields.
-        for base in bases[::-1]:
-            if hasattr(base, 'base_fields'):
-                fields = base.base_fields.items() + fields
+            # If this class is subclassing another Form, add that Form's fields.
+            # Note that we loop over the bases in *reverse*. This is necessary in
+            # order to preserve the correct order of fields.
+            for base in bases[::-1]:
+                if hasattr(base, 'base_fields'):
+                    fields = base.base_fields.items() + fields
 
-        attrs['base_fields'] = SortedDictFromList(fields)
+            attrs['base_fields'] = SortedDictFromList(fields)
         return type.__new__(cls, name, bases, attrs)
 
 class BaseForm(StrAndUnicode):
