diff --git a/django/newforms/forms.py b/django/newforms/forms.py
index 8b58b94ccd..3712c676c4 100644
--- a/django/newforms/forms.py
+++ b/django/newforms/forms.py
@@ -182,7 +182,7 @@ class BoundField(object):
         auto_id = self.auto_id
         if auto_id and not attrs.has_key('id') and not widget.attrs.has_key('id'):
             attrs['id'] = auto_id
-        return widget.render(self._name, self._form.data.get(self._name, None), attrs=attrs)
+        return widget.render(self._name, self.data, attrs=attrs)
 
     def as_text(self, attrs=None):
         """
@@ -194,6 +194,11 @@ class BoundField(object):
         "Returns a string of HTML for representing this as a <textarea>."
         return self.as_widget(Textarea(), attrs)
 
+    def _data(self):
+        "Returns the data for this BoundField, or None if it wasn't given."
+        return self._form.data.get(self._name, None)
+    data = property(_data)
+
     def _verbose_name(self):
         return pretty_name(self._name)
     verbose_name = property(_verbose_name)
diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py
index e3b7553155..40c49067af 100644
--- a/tests/regressiontests/forms/tests.py
+++ b/tests/regressiontests/forms/tests.py
@@ -1268,6 +1268,11 @@ u''
 <input type="text" name="first_name" value="John" />
 <input type="text" name="last_name" value="Lennon" />
 <input type="text" name="birthday" value="1940-10-9" />
+>>> for boundfield in p:
+...     print boundfield.verbose_name, boundfield.data
+First name John
+Last name Lennon
+Birthday 1940-10-9
 >>> print p
 <tr><td>First name:</td><td><input type="text" name="first_name" value="John" /></td></tr>
 <tr><td>Last name:</td><td><input type="text" name="last_name" value="Lennon" /></td></tr>