Index: django/contrib/formtools/preview.py
===================================================================
--- django/contrib/formtools/preview.py	(revision 7523)
+++ django/contrib/formtools/preview.py	(working copy)
@@ -70,7 +70,7 @@
         if f.is_valid():
             if self.security_hash(request, f) != request.POST.get(self.unused_name('hash')):
                 return self.failed_hash(request) # Security hash failed.
-            return self.done(request, f.cleaned_data)
+            return self.done(request, f)
         else:
             return render_to_response(self.form_template,
                 {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state},
@@ -117,9 +117,9 @@
 
     # METHODS SUBCLASSES MUST OVERRIDE ########################################
 
-    def done(self, request, cleaned_data):
+    def done(self, request, form):
         """
-        Does something with the cleaned_data and returns an
+        Does something with the form and returns an
         HttpResponseRedirect.
         """
         raise NotImplementedError('You must define a done() method on your %s subclass.' % self.__class__.__name__)
Index: docs/form_preview.txt
===================================================================
--- docs/form_preview.txt	(revision 7523)
+++ docs/form_preview.txt	(working copy)
@@ -21,8 +21,8 @@
        a. If it's valid, displays a preview page.
        b. If it's not valid, redisplays the form with error messages.
     3. When the "confirmation" form is submitted from the preview page, calls
-       a hook that you define -- a ``done()`` method that gets passed the valid
-       data.
+       a hook that you define -- a ``done()`` method that gets passed the form
+       instance.
 
 The framework enforces the required preview by passing a shared-secret hash to
 the preview page via hidden form fields. If somebody tweaks the form parameters
@@ -50,13 +50,13 @@
 
            class SomeModelFormPreview(FormPreview):
 
-               def done(self, request, cleaned_data):
-                   # Do something with the cleaned_data, then redirect
+               def done(self, request, form):
+                   # Do something with form or form.cleaned_data, then redirect
                    # to a "success" page.
                    return HttpResponseRedirect('/form/success')
 
-       This method takes an ``HttpRequest`` object and a dictionary of the form
-       data after it has been validated and cleaned. It should return an
+       This method takes an ``HttpRequest`` object and an bound instance of the
+       form class after having been validated and cleaned. It should return an
        ``HttpResponseRedirect`` that is the end result of the form being
        submitted.
 
