=== modified file 'django/newforms/forms.py'
--- django/newforms/forms.py	2007-05-14 20:12:56 +0000
+++ django/newforms/forms.py	2007-05-15 03:35:45 +0000
@@ -171,9 +171,8 @@
         """
         Cleans all of self.data and populates self.__errors and self.cleaned_data.
         """
-        errors = ErrorDict()
+        self.__errors = ErrorDict()
         if not self.is_bound: # Stop further processing.
-            self.__errors = errors
             return
         self.cleaned_data = {}
         for name, field in self.fields.items():
@@ -188,14 +187,13 @@
                     value = getattr(self, 'clean_%s' % name)()
                 self.cleaned_data[name] = value
             except ValidationError, e:
-                errors[name] = e.messages
+                self.__errors[name] = e.messages
         try:
             self.cleaned_data = self.clean()
         except ValidationError, e:
-            errors[NON_FIELD_ERRORS] = e.messages
-        if errors:
+            self.__errors[NON_FIELD_ERRORS] = e.messages
+        if self.__errors:
             delattr(self, 'cleaned_data')
-        self.__errors = errors
 
     def clean(self):
         """

=== modified file 'tests/regressiontests/forms/tests.py'
--- tests/regressiontests/forms/tests.py	2007-05-14 20:12:56 +0000
+++ tests/regressiontests/forms/tests.py	2007-05-15 04:05:49 +0000
@@ -3515,6 +3515,26 @@
 u'1'
 >>> smart_unicode('foo')
 u'foo'
+
+
+####################################
+# Test accessing errors in clean() #
+####################################
+
+>>> class UserForm(Form):
+...     username = CharField(max_length=10)
+...     password = CharField(widget=PasswordInput)
+...     def clean(self):
+...         data = self.cleaned_data
+...         if not self.errors:
+...             data['username'] = data['username'].lower()
+...         return data
+
+>>> f = UserForm({'username': 'SirRobin', 'password': 'blue'})
+>>> f.is_valid()
+True
+>>> f.cleaned_data['username']
+u'sirrobin'
 """
 
 __test__ = {

