Index: django/newforms/forms.py
===================================================================
--- django/newforms/forms.py	(revision 6804)
+++ django/newforms/forms.py	(working copy)
@@ -38,7 +38,14 @@
             if hasattr(base, 'base_fields'):
                 fields = base.base_fields.items() + fields
 
-        attrs['base_fields'] = SortedDict(fields)
+        # preserve initial values
+        base_fields = SortedDict(fields)
+        if attrs.get('base_fields'):
+            base_fields = base_fields.copy()
+            for k, v in attrs.get('base_fields').items():
+                if k in base_fields:
+                    base_fields[k].initial = v.initial
+        attrs['base_fields'] = base_fields
         return type.__new__(cls, name, bases, attrs)
 
 class BaseForm(StrAndUnicode):
Index: tests/modeltests/model_forms/models.py
===================================================================
--- tests/modeltests/model_forms/models.py	(revision 6783)
+++ tests/modeltests/model_forms/models.py	(working copy)
@@ -665,4 +665,36 @@
 <option value="mt">Manual</option>
 <option value="cvt">CVT</option>
 </select><br />Leave empty if not applicable.</td></tr>
+
+Use form_for_instance to create a Form from a model instance. This time
+pass a form class definition in the form option and be sure the form subclasses
+BaseForm.  Verify that initial values are set properly.
+>>> class CategoryForm(BaseForm):
+...     def say_hello(self):
+...         print 'hello'
+>>> domestic = Category(name='Domestic Cars') 
+>>> form = form_for_instance(domestic, form=CategoryForm)
+>>> f = form()
+>>> f.say_hello()
+hello
+>>> print f
+<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" value="Domestic Cars" maxlength="20" /></td></tr>
+<tr><th><label for="id_slug">Slug:</label></th><td><input id="id_slug" type="text" name="slug" maxlength="20" /></td></tr>
+<tr><th><label for="id_url">The URL:</label></th><td><input id="id_url" type="text" name="url" maxlength="40" /></td></tr>
+
+Use form_for_instance to create a Form from a model instance. This time
+pass a form class definition in the form option.  Verify that initial 
+values are set properly.
+>>> class CategoryForm(Form):
+...     name = CharField(max_length=20)
+...     
+...     def say_hello(self):
+...         print 'hello'
+>>> domestic = Category(name='Domestic Cars') 
+>>> form = form_for_instance(domestic, form=CategoryForm)
+>>> f = form()
+>>> f.say_hello()
+hello
+>>> print f
+<tr><th><label for="id_name">Name:</label></th><td><input id="id_name" type="text" name="name" value="Domestic Cars" maxlength="20" /></td></tr>
 """}
