diff --git a/django/contrib/formtools/tests/__init__.py b/django/contrib/formtools/tests/__init__.py
index 9c7d46f..b194845 100644
--- a/django/contrib/formtools/tests/__init__.py
+++ b/django/contrib/formtools/tests/__init__.py
@@ -360,3 +360,34 @@ class WizardTests(TestCase):
                 "wizard_step": "1"}
         wizard(DummyRequest(POST=data))
 
+    def test_prev_fields_as_hidden(self):
+        """
+        Previous fields should be available as hidden fields.
+        """
+        data = {"0-field": "test",
+                "1-field": "test2",
+                "hash_0": "7e9cea465f6a10a6fb47fcea65cb9a76350c9a5c",
+                "wizard_step": "1"}
+
+        previous_fields = '<input type="hidden" name="0-field" value="test" id="id_0-field" /><input type="hidden" name="hash_0" value="7e9cea465f6a10a6fb47fcea65cb9a76350c9a5c" id="id_hash_0" /><input type="hidden" name="1-field" value="test2" id="id_1-field" /><input type="hidden" name="hash_1" value="d5b434e3934cc92fee4bd2964c4ebc06f81d362d" id="id_hash_1" />'
+
+        response = self.client.post('/wizard/', data)
+        self.assertEquals(2, response.context['step0'])
+        self.assertEquals(previous_fields, response.context['previous_fields'])
+
+    def test_prev_fields_as_list(self):
+        """
+        Previous fields should be available as hidden fields.
+        """
+        data = {"0-field": "test",
+                "1-field": "test2",
+                "hash_0": "7e9cea465f6a10a6fb47fcea65cb9a76350c9a5c",
+                "wizard_step": "1"}
+
+        response = self.client.post('/wizard/', data)
+        self.assertEquals(2, response.context['step0'])
+
+        the_fields = [(f.html_name, f.data if f.form.is_bound else f.form.initial.get(f.name, f.field.initial)) for f in response.context['previous_fields_list']]
+
+        self.assertEquals(the_fields, [('0-field', u'test'), ('hash_0', u'7e9cea465f6a10a6fb47fcea65cb9a76350c9a5c'), ('1-field', u'test2'), ('hash_1', 'd5b434e3934cc92fee4bd2964c4ebc06f81d362d')])
+
diff --git a/django/contrib/formtools/wizard.py b/django/contrib/formtools/wizard.py
index d382e29..7ae225f 100644
--- a/django/contrib/formtools/wizard.py
+++ b/django/contrib/formtools/wizard.py
@@ -9,6 +9,7 @@ import cPickle as pickle
 from django import forms
 from django.conf import settings
 from django.contrib.formtools.utils import security_hash, form_hmac
+from django.forms.forms import BoundField
 from django.http import Http404
 from django.shortcuts import render_to_response
 from django.template.context import RequestContext
@@ -145,13 +146,23 @@ class FormWizard(object):
         prev_fields = []
         if old_data:
             hidden = forms.HiddenInput()
-            # Collect all data from previous steps and render it as HTML hidden fields.
+            # Collect all data from previous steps
             for i in range(step):
                 old_form = self.get_form(i, old_data)
                 hash_name = 'hash_%s' % i
-                prev_fields.extend([bf.as_hidden() for bf in old_form])
-                prev_fields.append(hidden.render(hash_name, old_data.get(hash_name, self.security_hash(request, old_form))))
-        return self.render_template(request, form, ''.join(prev_fields), step, context)
+                prev_fields.extend([bf for bf in old_form])
+                hash_field = forms.Field(
+                    initial=old_data.get(
+                        hash_name,
+                        self.security_hash(request, old_form)))
+                hash_bf = BoundField(forms.Form(), hash_field, hash_name)
+                prev_fields.append(hash_bf)
+
+        # render the previous fields as HTML hidden fields.
+        html_prev_fields = ''.join([f.as_hidden() for f in prev_fields])
+
+        return self.render_template(request, form, html_prev_fields,
+                                    prev_fields, step, context)
 
     # METHODS SUBCLASSES MIGHT OVERRIDE IF APPROPRIATE ########################
 
@@ -223,7 +234,8 @@ class FormWizard(object):
         """
         return 'forms/wizard.html'
 
-    def render_template(self, request, form, previous_fields, step, context=None):
+    def render_template(self, request, form, previous_fields,
+                        previous_fields_list, step, context=None):
         """
         Renders the template for the given step, returning an HttpResponse object.
 
@@ -243,6 +255,11 @@ class FormWizard(object):
                           hidden fields. Note that you'll need to run this
                           through the "safe" template filter, to prevent
                           auto-escaping, because it's raw HTML.
+            previous_fields_list -- A list containing every previous data
+                          field, plus hashes for completed forms, all in the
+                          form of regular fields. Note that you'll need to
+                          call :meth:`as_hidden` on each field to prevent
+                          them from appearing in your forms.
         """
         context = context or {}
         context.update(self.extra_context)
@@ -252,7 +269,8 @@ class FormWizard(object):
             step=step + 1,
             step_count=self.num_steps(),
             form=form,
-            previous_fields=previous_fields
+            previous_fields=previous_fields,
+            previous_fields_list=previous_fields_list
         ), context_instance=RequestContext(request))
 
     def process_step(self, request, form, step):
diff --git a/docs/ref/contrib/formtools/form-wizard.txt b/docs/ref/contrib/formtools/form-wizard.txt
index 370fbdc..653e27e 100644
--- a/docs/ref/contrib/formtools/form-wizard.txt
+++ b/docs/ref/contrib/formtools/form-wizard.txt
@@ -152,6 +152,10 @@ This template expects the following context:
       plus hashes for completed forms, all in the form of hidden fields. Note
       that you'll need to run this through the :tfilter:`safe` template filter,
       to prevent auto-escaping, because it's raw HTML.
+    ' ``previous_fields_list`` -- A list containing every previous data field,
+      plus hashes for completed forms, all in the form of regular fields. Note
+      that you'll need to call :meth:`as_hidden` on each field to prevent them
+      from appearing in your forms.
 
 You can supply extra context to this template in two ways:
 
