diff --git a/tests/modeltests/model_formsets/tests.py b/tests/modeltests/model_formsets/tests.py
index 396f1bd..20bd384 100644
--- a/tests/modeltests/model_formsets/tests.py
+++ b/tests/modeltests/model_formsets/tests.py
@@ -92,12 +92,12 @@ class ModelFormsetTest(TestCase):
         AuthorFormSet = modelformset_factory(Author, extra=3)
 
         formset = AuthorFormSet(queryset=qs)
-        self.assertEqual(len(formset.forms), 3)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 3)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /><input type="hidden" name="form-0-id" id="id_form-0-id" /></p>')
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /><input type="hidden" name="form-1-id" id="id_form-1-id" /></p>')
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_form-2-name">Name:</label> <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" /><input type="hidden" name="form-2-id" id="id_form-2-id" /></p>')
 
         data = {
@@ -130,12 +130,12 @@ class ModelFormsetTest(TestCase):
         AuthorFormSet = modelformset_factory(Author, extra=1, can_delete=False)
 
         formset = AuthorFormSet(queryset=qs)
-        self.assertEqual(len(formset.forms), 3)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 3)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100" /><input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id)
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100" /><input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id)
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_form-2-name">Name:</label> <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" /><input type="hidden" name="form-2-id" id="id_form-2-id" /></p>')
 
         data = {
@@ -168,17 +168,17 @@ class ModelFormsetTest(TestCase):
         AuthorFormSet = modelformset_factory(Author, extra=1, can_delete=True)
 
         formset = AuthorFormSet(queryset=qs)
-        self.assertEqual(len(formset.forms), 4)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 4)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100" /></p>\n'
             '<p><label for="id_form-0-DELETE">Delete:</label> <input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE" /><input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id)
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100" /></p>\n'
             '<p><label for="id_form-1-DELETE">Delete:</label> <input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE" /><input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id)
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_form-2-name">Name:</label> <input id="id_form-2-name" type="text" name="form-2-name" value="Paul Verlaine" maxlength="100" /></p>\n'
             '<p><label for="id_form-2-DELETE">Delete:</label> <input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE" /><input type="hidden" name="form-2-id" value="%d" id="id_form-2-id" /></p>' % author3.id)
-        self.assertEqual(formset.forms[3].as_p(),
+        self.assertEqual(formset[3].as_p(),
             '<p><label for="id_form-3-name">Name:</label> <input id="id_form-3-name" type="text" name="form-3-name" maxlength="100" /></p>\n'
             '<p><label for="id_form-3-DELETE">Delete:</label> <input type="checkbox" name="form-3-DELETE" id="id_form-3-DELETE" /><input type="hidden" name="form-3-id" id="id_form-3-id" /></p>')
 
@@ -285,17 +285,17 @@ class ModelFormsetTest(TestCase):
 
         AuthorFormSet = modelformset_factory(Author, max_num=None, extra=3)
         formset = AuthorFormSet(queryset=qs)
-        self.assertEqual(len(formset.forms), 6)
+        self.assertEqual(len(formset), 6)
         self.assertEqual(len(formset.extra_forms), 3)
 
         AuthorFormSet = modelformset_factory(Author, max_num=4, extra=3)
         formset = AuthorFormSet(queryset=qs)
-        self.assertEqual(len(formset.forms), 4)
+        self.assertEqual(len(formset), 4)
         self.assertEqual(len(formset.extra_forms), 1)
 
         AuthorFormSet = modelformset_factory(Author, max_num=0, extra=3)
         formset = AuthorFormSet(queryset=qs)
-        self.assertEqual(len(formset.forms), 3)
+        self.assertEqual(len(formset), 3)
         self.assertEqual(len(formset.extra_forms), 0)
 
         AuthorFormSet = modelformset_factory(Author, max_num=None)
@@ -356,8 +356,8 @@ class ModelFormsetTest(TestCase):
     def test_model_inheritance(self):
         BetterAuthorFormSet = modelformset_factory(BetterAuthor)
         formset = BetterAuthorFormSet()
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></p>\n'
             '<p><label for="id_form-0-write_speed">Write speed:</label> <input type="text" name="form-0-write_speed" id="id_form-0-write_speed" /><input type="hidden" name="form-0-author_ptr" id="id_form-0-author_ptr" /></p>')
 
@@ -379,11 +379,11 @@ class ModelFormsetTest(TestCase):
         hemingway_id = BetterAuthor.objects.get(name="Ernest Hemingway").pk
 
         formset = BetterAuthorFormSet()
-        self.assertEqual(len(formset.forms), 2)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 2)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-name">Name:</label> <input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100" /></p>\n'
             '<p><label for="id_form-0-write_speed">Write speed:</label> <input type="text" name="form-0-write_speed" value="10" id="id_form-0-write_speed" /><input type="hidden" name="form-0-author_ptr" value="%d" id="id_form-0-author_ptr" /></p>' % hemingway_id)
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_form-1-name">Name:</label> <input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /></p>\n'
             '<p><label for="id_form-1-write_speed">Write speed:</label> <input type="text" name="form-1-write_speed" id="id_form-1-write_speed" /><input type="hidden" name="form-1-author_ptr" id="id_form-1-author_ptr" /></p>')
 
@@ -411,12 +411,12 @@ class ModelFormsetTest(TestCase):
         author = Author.objects.create(name='Charles Baudelaire')
 
         formset = AuthorBooksFormSet(instance=author)
-        self.assertEqual(len(formset.forms), 3)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 3)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" maxlength="100" /><input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" id="id_book_set-0-id" /></p>'  % author.id)
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" /><input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id)
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" /><input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id)
 
         data = {
@@ -445,12 +445,12 @@ class ModelFormsetTest(TestCase):
         author = Author.objects.get(name='Charles Baudelaire')
 
         formset = AuthorBooksFormSet(instance=author)
-        self.assertEqual(len(formset.forms), 3)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 3)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" value="Les Fleurs du Mal" maxlength="100" /><input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" value="%d" id="id_book_set-0-id" /></p>' % (author.id, book1.id))
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" /><input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id)
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" /><input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id)
 
         data = {
@@ -509,10 +509,10 @@ class ModelFormsetTest(TestCase):
         # Test using a custom prefix on an inline formset.
 
         formset = AuthorBooksFormSet(prefix="test")
-        self.assertEqual(len(formset.forms), 2)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 2)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_test-0-title">Title:</label> <input id="id_test-0-title" type="text" name="test-0-title" maxlength="100" /><input type="hidden" name="test-0-author" id="id_test-0-author" /><input type="hidden" name="test-0-id" id="id_test-0-id" /></p>')
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_test-1-title">Title:</label> <input id="id_test-1-title" type="text" name="test-1-title" maxlength="100" /><input type="hidden" name="test-1-author" id="id_test-1-author" /><input type="hidden" name="test-1-id" id="id_test-1-id" /></p>')
 
     def test_inline_formsets_with_custom_pk(self):
@@ -523,8 +523,8 @@ class ModelFormsetTest(TestCase):
         author = Author.objects.create(pk=1, name='Charles Baudelaire')
 
         formset = AuthorBooksFormSet2(instance=author)
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_bookwithcustompk_set-0-my_pk">My pk:</label> <input type="text" name="bookwithcustompk_set-0-my_pk" id="id_bookwithcustompk_set-0-my_pk" /></p>\n'
             '<p><label for="id_bookwithcustompk_set-0-title">Title:</label> <input id="id_bookwithcustompk_set-0-title" type="text" name="bookwithcustompk_set-0-title" maxlength="100" /><input type="hidden" name="bookwithcustompk_set-0-author" value="1" id="id_bookwithcustompk_set-0-author" /></p>')
 
@@ -555,8 +555,8 @@ class ModelFormsetTest(TestCase):
         author = Author.objects.create(pk=1, name='Charles Baudelaire')
 
         formset = AuthorBooksFormSet3(instance=author)
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_alternatebook_set-0-title">Title:</label> <input id="id_alternatebook_set-0-title" type="text" name="alternatebook_set-0-title" maxlength="100" /></p>\n'
             '<p><label for="id_alternatebook_set-0-notes">Notes:</label> <input id="id_alternatebook_set-0-notes" type="text" name="alternatebook_set-0-notes" maxlength="100" /><input type="hidden" name="alternatebook_set-0-author" value="1" id="id_alternatebook_set-0-author" /><input type="hidden" name="alternatebook_set-0-book_ptr" id="id_alternatebook_set-0-book_ptr" /></p>')
 
@@ -643,16 +643,16 @@ class ModelFormsetTest(TestCase):
 
         custom_qs = Book.objects.order_by('-title')
         formset = AuthorBooksFormSet(instance=author, queryset=custom_qs)
-        self.assertEqual(len(formset.forms), 5)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 5)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" value="Les Paradis Artificiels" maxlength="100" /><input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" value="1" id="id_book_set-0-id" /></p>')
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" value="Les Fleurs du Mal" maxlength="100" /><input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" value="2" id="id_book_set-1-id" /></p>')
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" value="Flowers of Evil" maxlength="100" /><input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" value="3" id="id_book_set-2-id" /></p>')
-        self.assertEqual(formset.forms[3].as_p(),
+        self.assertEqual(formset[3].as_p(),
             '<p><label for="id_book_set-3-title">Title:</label> <input id="id_book_set-3-title" type="text" name="book_set-3-title" maxlength="100" /><input type="hidden" name="book_set-3-author" value="1" id="id_book_set-3-author" /><input type="hidden" name="book_set-3-id" id="id_book_set-3-id" /></p>')
-        self.assertEqual(formset.forms[4].as_p(),
+        self.assertEqual(formset[4].as_p(),
             '<p><label for="id_book_set-4-title">Title:</label> <input id="id_book_set-4-title" type="text" name="book_set-4-title" maxlength="100" /><input type="hidden" name="book_set-4-author" value="1" id="id_book_set-4-author" /><input type="hidden" name="book_set-4-id" id="id_book_set-4-id" /></p>')
 
         data = {
@@ -673,11 +673,11 @@ class ModelFormsetTest(TestCase):
 
         custom_qs = Book.objects.filter(title__startswith='F')
         formset = AuthorBooksFormSet(instance=author, queryset=custom_qs)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" name="book_set-0-title" value="Flowers of Evil" maxlength="100" /><input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" value="3" id="id_book_set-0-id" /></p>')
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_book_set-1-title">Title:</label> <input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" /><input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" /><input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>')
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_book_set-2-title">Title:</label> <input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" /><input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" /><input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>')
 
         data = {
@@ -697,8 +697,8 @@ class ModelFormsetTest(TestCase):
 
         CustomPrimaryKeyFormSet = modelformset_factory(CustomPrimaryKey)
         formset = CustomPrimaryKeyFormSet()
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-my_pk">My pk:</label> <input id="id_form-0-my_pk" type="text" name="form-0-my_pk" maxlength="10" /></p>\n'
             '<p><label for="id_form-0-some_field">Some field:</label> <input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100" /></p>')
 
@@ -708,10 +708,10 @@ class ModelFormsetTest(TestCase):
 
         FormSet = inlineformset_factory(Place, Owner, extra=2, can_delete=False)
         formset = FormSet(instance=place)
-        self.assertEqual(len(formset.forms), 2)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 2)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_owner_set-0-name">Name:</label> <input id="id_owner_set-0-name" type="text" name="owner_set-0-name" maxlength="100" /><input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" /><input type="hidden" name="owner_set-0-auto_id" id="id_owner_set-0-auto_id" /></p>')
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_owner_set-1-name">Name:</label> <input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" /><input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" /><input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>')
 
         data = {
@@ -732,12 +732,12 @@ class ModelFormsetTest(TestCase):
         self.assertEqual(owner.place.name, 'Giordanos')
 
         formset = FormSet(instance=place)
-        self.assertEqual(len(formset.forms), 3)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 3)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_owner_set-0-name">Name:</label> <input id="id_owner_set-0-name" type="text" name="owner_set-0-name" value="Joe Perry" maxlength="100" /><input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" /><input type="hidden" name="owner_set-0-auto_id" value="1" id="id_owner_set-0-auto_id" /></p>')
-        self.assertEqual(formset.forms[1].as_p(),
+        self.assertEqual(formset[1].as_p(),
             '<p><label for="id_owner_set-1-name">Name:</label> <input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" /><input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" /><input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>')
-        self.assertEqual(formset.forms[2].as_p(),
+        self.assertEqual(formset[2].as_p(),
             '<p><label for="id_owner_set-2-name">Name:</label> <input id="id_owner_set-2-name" type="text" name="owner_set-2-name" maxlength="100" /><input type="hidden" name="owner_set-2-place" value="1" id="id_owner_set-2-place" /><input type="hidden" name="owner_set-2-auto_id" id="id_owner_set-2-auto_id" /></p>')
 
         data = {
@@ -763,7 +763,7 @@ class ModelFormsetTest(TestCase):
 
         FormSet = modelformset_factory(OwnerProfile)
         formset = FormSet()
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_form-0-owner">Owner:</label> <select name="form-0-owner" id="id_form-0-owner">\n'
             '<option value="" selected="selected">---------</option>\n'
             '<option value="1">Joe Perry at Giordanos</option>\n'
@@ -776,8 +776,8 @@ class ModelFormsetTest(TestCase):
         self.assertEqual(FormSet.max_num, 1)
 
         formset = FormSet(instance=owner)
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_ownerprofile-0-age">Age:</label> <input type="text" name="ownerprofile-0-age" id="id_ownerprofile-0-age" /><input type="hidden" name="ownerprofile-0-owner" value="1" id="id_ownerprofile-0-owner" /></p>')
 
         data = {
@@ -796,8 +796,8 @@ class ModelFormsetTest(TestCase):
         self.assertEqual(profile1.age, 54)
 
         formset = FormSet(instance=owner)
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_ownerprofile-0-age">Age:</label> <input type="text" name="ownerprofile-0-age" value="54" id="id_ownerprofile-0-age" /><input type="hidden" name="ownerprofile-0-owner" value="1" id="id_ownerprofile-0-owner" /></p>')
 
         data = {
@@ -824,8 +824,8 @@ class ModelFormsetTest(TestCase):
         self.assertEqual(FormSet.max_num, 1)
 
         formset = FormSet(instance=place)
-        self.assertEqual(len(formset.forms), 1)
-        self.assertEqual(formset.forms[0].as_p(),
+        self.assertEqual(len(formset), 1)
+        self.assertEqual(formset[0].as_p(),
             '<p><label for="id_location_set-0-lat">Lat:</label> <input id="id_location_set-0-lat" type="text" name="location_set-0-lat" maxlength="100" /></p>\n'
             '<p><label for="id_location_set-0-lon">Lon:</label> <input id="id_location_set-0-lon" type="text" name="location_set-0-lon" maxlength="100" /><input type="hidden" name="location_set-0-place" value="1" id="id_location_set-0-place" /><input type="hidden" name="location_set-0-id" id="id_location_set-0-id" /></p>')
 
@@ -946,8 +946,8 @@ class ModelFormsetTest(TestCase):
         # default. This is required to ensure the value is tested for change correctly
         # when determine what extra forms have changed to save.
 
-        self.assertEquals(len(formset.forms), 1) # this formset only has one form
-        form = formset.forms[0]
+        self.assertEquals(len(formset), 1) # this formset only has one form
+        form = formset[0]
         now = form.fields['date_joined'].initial()
         result = form.as_p()
         result = re.sub(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}(?:\.\d+)?', '__DATETIME__', result)
diff --git a/tests/regressiontests/forms/tests/formsets.py b/tests/regressiontests/forms/tests/formsets.py
index bf7124f..c806ec8 100644
--- a/tests/regressiontests/forms/tests/formsets.py
+++ b/tests/regressiontests/forms/tests/formsets.py
@@ -66,7 +66,7 @@ class FormsFormsetTestCase(TestCase):
 
         formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
         self.assertTrue(formset.is_valid())
-        self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}])
+        self.assertEqual([form.cleaned_data for form in formset], [{'votes': 100, 'choice': u'Calexico'}])
 
         # If a FormSet was not passed any data, its is_valid method should return False.
         formset = ChoiceFormSet()
@@ -97,7 +97,7 @@ class FormsFormsetTestCase(TestCase):
         formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(form.as_ul())
 
         self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
@@ -119,7 +119,7 @@ class FormsFormsetTestCase(TestCase):
 
         formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
         self.assertTrue(formset.is_valid())
-        self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}, {}])
+        self.assertEqual([form.cleaned_data for form in formset], [{'votes': 100, 'choice': u'Calexico'}, {}])
 
     def test_second_form_partially_filled(self):
         # But the second form was blank! Shouldn't we get some errors? No. If we display
@@ -170,7 +170,7 @@ class FormsFormsetTestCase(TestCase):
         formset = ChoiceFormSet(auto_id=False, prefix='choices')
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(form.as_ul())
 
         self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" /></li>
@@ -198,7 +198,7 @@ class FormsFormsetTestCase(TestCase):
 
         formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
         self.assertTrue(formset.is_valid())
-        self.assertEqual([form.cleaned_data for form in formset.forms], [{}, {}, {}])
+        self.assertEqual([form.cleaned_data for form in formset], [{}, {}, {}])
 
     def test_single_form_completed(self):
         # We can just fill out one of the forms.
@@ -218,7 +218,7 @@ class FormsFormsetTestCase(TestCase):
         ChoiceFormSet = formset_factory(Choice, extra=3)
         formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
         self.assertTrue(formset.is_valid())
-        self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}, {}, {}])
+        self.assertEqual([form.cleaned_data for form in formset], [{'votes': 100, 'choice': u'Calexico'}, {}, {}])
 
     def test_second_form_partially_filled_2(self):
         # And once again, if we try to partially complete a form, validation will fail.
@@ -261,7 +261,7 @@ class FormsFormsetTestCase(TestCase):
         formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(form.as_ul())
 
         self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
@@ -291,7 +291,7 @@ class FormsFormsetTestCase(TestCase):
         formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(form.as_ul())
 
         self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
@@ -324,7 +324,7 @@ class FormsFormsetTestCase(TestCase):
 
         formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
         self.assertTrue(formset.is_valid())
-        self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'DELETE': False, 'choice': u'Calexico'}, {'votes': 900, 'DELETE': True, 'choice': u'Fergie'}, {}])
+        self.assertEqual([form.cleaned_data for form in formset], [{'votes': 100, 'DELETE': False, 'choice': u'Calexico'}, {'votes': 900, 'DELETE': True, 'choice': u'Fergie'}, {}])
         self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'choice': u'Fergie'}])
 
         # If we fill a form with something and then we check the can_delete checkbox for
@@ -376,7 +376,7 @@ class FormsFormsetTestCase(TestCase):
         # FormSets with ordering ######################################################
         # We can also add ordering ability to a FormSet with an argument to
         # formset_factory. This will add a integer field to each form instance. When
-        # form validation succeeds, [form.cleaned_data for form in formset.forms] will have the data in the correct
+        # form validation succeeds, [form.cleaned_data for form in formset] will have the data in the correct
         # order specified by the ordering fields. If a number is duplicated in the set
         # of ordering fields, for instance form 0 and form 3 are both marked as 1, then
         # the form index used as a secondary ordering criteria. In order to put
@@ -388,7 +388,7 @@ class FormsFormsetTestCase(TestCase):
         formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(form.as_ul())
 
         self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
@@ -499,7 +499,7 @@ class FormsFormsetTestCase(TestCase):
         formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(form.as_ul())
 
         self.assertEqual('\n'.join(form_output), """<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
@@ -625,7 +625,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet()
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>
@@ -637,7 +637,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet()
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), "")
@@ -646,7 +646,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet()
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>
@@ -658,7 +658,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet()
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>""")
@@ -677,7 +677,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet(initial=initial)
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="Fernet and Coke" id="id_form-0-name" /></td></tr>
@@ -695,7 +695,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet(initial=initial)
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), "")
@@ -713,7 +713,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet(initial=initial)
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name" /></td></tr>
@@ -728,7 +728,7 @@ class FormsFormsetTestCase(TestCase):
         formset = LimitedFavoriteDrinkFormSet(initial=initial)
         form_output = []
 
-        for form in formset.forms:
+        for form in formset:
             form_output.append(str(form))
 
         self.assertEqual('\n'.join(form_output), """<tr><th><label for="id_form-0-name">Name:</label></th><td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name" /></td></tr>
@@ -762,6 +762,37 @@ class FormsFormsetTestCase(TestCase):
         self.assertFalse(formset.is_valid())
         self.assertEqual(formset.non_form_errors(), [u'You may only specify a drink once.'])
 
+    def test_iteration(self):
+        # Regression tests for #16455 -- formset instance iterable
+        extra = 3
+        ChoiceFormset = formset_factory(Choice, extra=extra)       
+        formset = ChoiceFormset()
+        
+        # confirm iterated formset yields formset.forms
+        forms = list(formset)
+        self.assertEqual(forms, formset.forms)
+        self.assertEqual(len(formset), len(forms))
+
+        # confirm indexing of formset
+        self.assertEqual(formset[0], forms[0])
+        with self.assertRaises(IndexError):
+            formset[extra]
+
+        # define formset which renders forms in reverse order
+        class BaseReverseFormSet(BaseFormSet):
+            def __iter__(self):
+                for form in reversed(self.forms):
+                    yield form
+        
+        ReverseChoiceFormset = formset_factory(Choice, BaseReverseFormSet, extra=extra)
+        reverse_formset = ReverseChoiceFormset()
+        
+        # confirm that __iter__ modifies rendering order
+        # compare forms from "reverse" formset with forms from original formset
+        self.assertEqual(str(reverse_formset[0]), str(forms[-1]))
+        self.assertEqual(str(reverse_formset[1]), str(forms[-2]))
+        self.assertEqual(len(reverse_formset), len(forms))
+        
 
 data = {
     'choices-TOTAL_FORMS': '1', # the number of forms rendered
