diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index ed41c7f..7c7d73d 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -522,10 +522,11 @@ class ModelAdmin(BaseModelAdmin):
             else:
                 form_validated = False
                 new_object = self.model()
-            for FormSet in self.get_formsets(request):
+            for idx, FormSet in enumerate(self.get_formsets(request)):
                 formset = FormSet(data=request.POST, files=request.FILES,
                                   instance=new_object,
-                                  save_as_new=request.POST.has_key("_saveasnew"))
+                                  save_as_new=request.POST.has_key("_saveasnew"),
+                                  prefix="form-%s" % idx)
                 formsets.append(formset)
             if all_valid(formsets) and form_validated:
                 self.save_model(request, new_object, form, change=False)
@@ -547,8 +548,8 @@ class ModelAdmin(BaseModelAdmin):
                 if isinstance(f, models.ManyToManyField):
                     initial[k] = initial[k].split(",")
             form = ModelForm(initial=initial)
-            for FormSet in self.get_formsets(request):
-                formset = FormSet(instance=self.model())
+            for idx, FormSet in enumerate(self.get_formsets(request)):
+                formset = FormSet(instance=self.model(), prefix="form-%s" % idx)
                 formsets.append(formset)
         
         adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)), self.prepopulated_fields)
@@ -608,9 +609,9 @@ class ModelAdmin(BaseModelAdmin):
             else:
                 form_validated = False
                 new_object = obj
-            for FormSet in self.get_formsets(request, new_object):
+            for idx, FormSet in enumerate(self.get_formsets(request, new_object)):
                 formset = FormSet(request.POST, request.FILES,
-                                  instance=new_object)
+                                  instance=new_object, prefix="form-%s" % idx)
                 formsets.append(formset)
             
             if all_valid(formsets) and form_validated:
@@ -625,8 +626,8 @@ class ModelAdmin(BaseModelAdmin):
         
         else:
             form = ModelForm(instance=obj)
-            for FormSet in self.get_formsets(request, obj):
-                formset = FormSet(instance=obj)
+            for idx, FormSet in enumerate(self.get_formsets(request, obj)):
+                formset = FormSet(instance=obj, prefix="form-%s" % idx)
                 formsets.append(formset)
         
         adminForm = helpers.AdminForm(form, self.get_fieldsets(request, obj), self.prepopulated_fields)
diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
index c294f74..f581684 100644
--- a/django/contrib/contenttypes/generic.py
+++ b/django/contrib/contenttypes/generic.py
@@ -291,7 +291,8 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
     ct_field_name = "content_type"
     ct_fk_field_name = "object_id"
 
-    def __init__(self, data=None, files=None, instance=None, save_as_new=None):
+    def __init__(self, data=None, files=None, instance=None, prefix=None, 
+                    save_as_new=None):
         opts = self.model._meta
         self.instance = instance
         self.rel_name = '-'.join((
@@ -300,7 +301,7 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
         ))
         super(BaseGenericInlineFormSet, self).__init__(
             queryset=self.get_queryset(), data=data, files=files,
-            prefix=self.rel_name
+            prefix=prefix or self.rel_name
         )
 
     def get_queryset(self):
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 39daf11..a511647 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -63,8 +63,8 @@ class AdminViewBasicTest(TestCase):
         post_data = {
             "name": u"Another Section",
             # inline data
-            "article_set-TOTAL_FORMS": u"3",
-            "article_set-INITIAL_FORMS": u"0",
+            "form-0-TOTAL_FORMS": u"3",
+            "form-0-INITIAL_FORMS": u"0",
         }
         response = self.client.post('/test_admin/%s/admin_views/section/add/' % self.urlbit, post_data)
         self.failUnlessEqual(response.status_code, 302) # redirect somewhere
@@ -76,40 +76,40 @@ class AdminViewBasicTest(TestCase):
         post_data = {
             "name": u"Test section",
             # inline data
-            "article_set-TOTAL_FORMS": u"6",
-            "article_set-INITIAL_FORMS": u"3",
-            "article_set-0-id": u"1",
+            "form-0-TOTAL_FORMS": u"6",
+            "form-0-INITIAL_FORMS": u"3",
+            "form-0-0-id": u"1",
             # there is no title in database, give one here or formset
             # will fail.
-            "article_set-0-title": u"Norske bostaver æøå skaper problemer",
-            "article_set-0-content": u"&lt;p&gt;Middle content&lt;/p&gt;",
-            "article_set-0-date_0": u"2008-03-18",
-            "article_set-0-date_1": u"11:54:58",
-            "article_set-1-id": u"2",
-            "article_set-1-title": u"Need a title.",
-            "article_set-1-content": u"&lt;p&gt;Oldest content&lt;/p&gt;",
-            "article_set-1-date_0": u"2000-03-18",
-            "article_set-1-date_1": u"11:54:58",
-            "article_set-2-id": u"3",
-            "article_set-2-title": u"Need a title.",
-            "article_set-2-content": u"&lt;p&gt;Newest content&lt;/p&gt;",
-            "article_set-2-date_0": u"2009-03-18",
-            "article_set-2-date_1": u"11:54:58",
-            "article_set-3-id": u"",
-            "article_set-3-title": u"",
-            "article_set-3-content": u"",
-            "article_set-3-date_0": u"",
-            "article_set-3-date_1": u"",
-            "article_set-4-id": u"",
-            "article_set-4-title": u"",
-            "article_set-4-content": u"",
-            "article_set-4-date_0": u"",
-            "article_set-4-date_1": u"",
-            "article_set-5-id": u"",
-            "article_set-5-title": u"",
-            "article_set-5-content": u"",
-            "article_set-5-date_0": u"",
-            "article_set-5-date_1": u"",
+            "form-0-0-title": u"Norske bostaver æøå skaper problemer",
+            "form-0-0-content": u"&lt;p&gt;Middle content&lt;/p&gt;",
+            "form-0-0-date_0": u"2008-03-18",
+            "form-0-0-date_1": u"11:54:58",
+            "form-0-1-id": u"2",
+            "form-0-1-title": u"Need a title.",
+            "form-0-1-content": u"&lt;p&gt;Oldest content&lt;/p&gt;",
+            "form-0-1-date_0": u"2000-03-18",
+            "form-0-1-date_1": u"11:54:58",
+            "form-0-2-id": u"3",
+            "form-0-2-title": u"Need a title.",
+            "form-0-2-content": u"&lt;p&gt;Newest content&lt;/p&gt;",
+            "form-0-2-date_0": u"2009-03-18",
+            "form-0-2-date_1": u"11:54:58",
+            "form-0-3-id": u"",
+            "form-0-3-title": u"",
+            "form-0-3-content": u"",
+            "form-0-3-date_0": u"",
+            "form-0-3-date_1": u"",
+            "form-0-4-id": u"",
+            "form-0-4-title": u"",
+            "form-0-4-content": u"",
+            "form-0-4-date_0": u"",
+            "form-0-4-date_1": u"",
+            "form-0-5-id": u"",
+            "form-0-5-title": u"",
+            "form-0-5-content": u"",
+            "form-0-5-date_0": u"",
+            "form-0-5-date_1": u"",
         }
         response = self.client.post('/test_admin/%s/admin_views/section/1/' % self.urlbit, post_data)
         self.failUnlessEqual(response.status_code, 302) # redirect somewhere
@@ -687,26 +687,26 @@ class AdminViewUnicodeTest(TestCase):
         post_data = {
             "name": u"Test lærdommer",
             # inline data
-            "chapter_set-TOTAL_FORMS": u"6",
-            "chapter_set-INITIAL_FORMS": u"3",
-            "chapter_set-0-id": u"1",
-            "chapter_set-0-title": u"Norske bostaver æøå skaper problemer",
-            "chapter_set-0-content": u"&lt;p&gt;Svært frustrerende med UnicodeDecodeError&lt;/p&gt;",
-            "chapter_set-1-id": u"2",
-            "chapter_set-1-title": u"Kjærlighet.",
-            "chapter_set-1-content": u"&lt;p&gt;La kjærligheten til de lidende seire.&lt;/p&gt;",
-            "chapter_set-2-id": u"3",
-            "chapter_set-2-title": u"Need a title.",
-            "chapter_set-2-content": u"&lt;p&gt;Newest content&lt;/p&gt;",
-            "chapter_set-3-id": u"",
-            "chapter_set-3-title": u"",
-            "chapter_set-3-content": u"",
-            "chapter_set-4-id": u"",
-            "chapter_set-4-title": u"",
-            "chapter_set-4-content": u"",
-            "chapter_set-5-id": u"",
-            "chapter_set-5-title": u"",
-            "chapter_set-5-content": u"",
+            "form-0-TOTAL_FORMS": u"6",
+            "form-0-INITIAL_FORMS": u"3",
+            "form-0-0-id": u"1",
+            "form-0-0-title": u"Norske bostaver æøå skaper problemer",
+            "form-0-0-content": u"&lt;p&gt;Svært frustrerende med UnicodeDecodeError&lt;/p&gt;",
+            "form-0-1-id": u"2",
+            "form-0-1-title": u"Kjærlighet.",
+            "form-0-1-content": u"&lt;p&gt;La kjærligheten til de lidende seire.&lt;/p&gt;",
+            "form-0-2-id": u"3",
+            "form-0-2-title": u"Need a title.",
+            "form-0-2-content": u"&lt;p&gt;Newest content&lt;/p&gt;",
+            "form-0-3-id": u"",
+            "form-0-3-title": u"",
+            "form-0-3-content": u"",
+            "form-0-4-id": u"",
+            "form-0-4-title": u"",
+            "form-0-4-content": u"",
+            "form-0-5-id": u"",
+            "form-0-5-title": u"",
+            "form-0-5-content": u"",
         }
 
         response = self.client.post('/test_admin/admin/admin_views/book/1/', post_data)
diff --git a/tests/regressiontests/generic_inline_admin/tests.py b/tests/regressiontests/generic_inline_admin/tests.py
index a3ea5fc..3276199 100644
--- a/tests/regressiontests/generic_inline_admin/tests.py
+++ b/tests/regressiontests/generic_inline_admin/tests.py
@@ -51,8 +51,8 @@ class GenericAdminViewTest(TestCase):
         post_data = {
             "name": u"This Week in Django",
             # inline data
-            "generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"1",
-            "generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"0",
+            "form-0-TOTAL_FORMS": u"1",
+            "form-0-INITIAL_FORMS": u"0",
         }
         response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/episode/add/', post_data)
         self.failUnlessEqual(response.status_code, 302) # redirect somewhere
@@ -64,12 +64,12 @@ class GenericAdminViewTest(TestCase):
         post_data = {
             "name": u"This Week in Django",
             # inline data
-            "generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"2",
-            "generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"1",
-            "generic_inline_admin-media-content_type-object_id-0-id": u"%d" % self.media_pk,
-            "generic_inline_admin-media-content_type-object_id-0-url": u"http://example.com/podcast.mp3",
-            "generic_inline_admin-media-content_type-object_id-1-id": u"",
-            "generic_inline_admin-media-content_type-object_id-1-url": u"",
+            "form-0-TOTAL_FORMS": u"2",
+            "form-0-INITIAL_FORMS": u"1",
+            "form-0-0-id": u"%d" % self.media_pk,
+            "form-0-0-url": u"http://example.com/podcast.mp3",
+            "form-0-1-id": u"",
+            "form-0-1-url": u"",
         }
         url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk
         response = self.client.post(url, post_data)
