Index: newforms/fields.py
===================================================================
--- newforms/fields.py	(revision 6702)
+++ newforms/fields.py	(working copy)
@@ -50,7 +50,7 @@
     creation_counter = 0
 
     def __init__(self, required=True, widget=None, label=None, initial=None,
-                 help_text=None, error_messages=None):
+                 help_text=None, error_messages=None, weight=0):
         # required -- Boolean that specifies whether the field is required.
         #             True by default.
         # widget -- A Widget class, or instance of a Widget class, that should
@@ -64,6 +64,7 @@
         # initial -- A value to use in this Field's initial display. This value
         #            is *not* used as a fallback if data isn't given.
         # help_text -- An optional string to use as "help text" for this Field.
+        # weight -- An optional parameter to control Fields order in a Form.
         if label is not None:
             label = smart_unicode(label)
         self.required, self.label, self.initial = required, label, initial
@@ -83,6 +84,8 @@
         self.creation_counter = Field.creation_counter
         Field.creation_counter += 1
 
+        self.weight = weight
+
         self.error_messages = self._build_error_messages(error_messages)
 
     def _build_error_messages(self, extra_error_messages):
Index: newforms/forms.py
===================================================================
--- newforms/forms.py	(revision 6702)
+++ newforms/forms.py	(working copy)
@@ -37,6 +37,9 @@
         for base in bases[::-1]:
             if hasattr(base, 'base_fields'):
                 fields = base.base_fields.items() + fields
+        
+        # Field weights override declaration and inheritance order.
+        fields.sort(lambda x, y: cmp(x[1].weight, y[1].weight))
 
         attrs['base_fields'] = SortedDict(fields)
         return type.__new__(cls, name, bases, attrs)
