Index: django/newforms/forms.py
===================================================================
--- django/newforms/forms.py	(revision 5591)
+++ django/newforms/forms.py	(working copy)
@@ -57,12 +57,13 @@
     # class is different than Form. See the comments by the Form class for more
     # information. Any improvements to the form API should be made to *this*
     # class, not to the Form class.
-    def __init__(self, data=None, auto_id='id_%s', prefix=None, initial=None):
+    def __init__(self, data=None, auto_id='id_%s', prefix=None, initial=None, error_list_class = ErrorList):
         self.is_bound = data is not None
         self.data = data or {}
         self.auto_id = auto_id
         self.prefix = prefix
         self.initial = initial or {}
+        self.error_list_class = error_list_class
         self._errors = None # Stores the errors after clean() has been called.
 
         # The base_fields class attribute is the *class-wide* definition of
@@ -77,7 +78,7 @@
 
     def __iter__(self):
         for name, field in self.fields.items():
-            yield BoundField(self, field, name)
+            yield BoundField(self, field, name, self.error_list_class)
 
     def __getitem__(self, name):
         "Returns a BoundField with the given name."
@@ -85,7 +86,7 @@
             field = self.fields[name]
         except KeyError:
             raise KeyError('Key %r not found in Form' % name)
-        return BoundField(self, field, name)
+        return BoundField(self, field, name, self.error_list_class)
 
     def _get_errors(self):
         "Returns an ErrorDict for self.data"
@@ -115,8 +116,8 @@
         top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
         output, hidden_fields = [], []
         for name, field in self.fields.items():
-            bf = BoundField(self, field, name)
-            bf_errors = ErrorList([escape(error) for error in bf.errors]) # Escape and cache in local variable.
+            bf = BoundField(self, field, name, self.error_list_class)
+            bf_errors = self.error_list_class([escape(error) for error in bf.errors]) # Escape and cache in local variable.
             if bf.is_hidden:
                 if bf_errors:
                     top_errors.extend(['(Hidden field %s) %s' % (name, e) for e in bf_errors])
@@ -167,7 +168,7 @@
         field -- i.e., from Form.clean(). Returns an empty ErrorList if there
         are none.
         """
-        return self.errors.get(NON_FIELD_ERRORS, ErrorList())
+        return self.errors.get(NON_FIELD_ERRORS, self.error_list_class())
 
     def full_clean(self):
         """
@@ -220,11 +221,12 @@
 
 class BoundField(StrAndUnicode):
     "A Field plus data"
-    def __init__(self, form, field, name):
+    def __init__(self, form, field, name, error_list_class = ErrorList):
         self.form = form
         self.field = field
         self.name = name
         self.html_name = form.add_prefix(name)
+        self.error_list_class = error_list_class
         if self.field.label is None:
             self.label = pretty_name(name)
         else:
@@ -248,7 +250,7 @@
         Returns an ErrorList for this field. Returns an empty ErrorList
         if there are none.
         """
-        return self.form.errors.get(self.name, ErrorList())
+        return self.form.errors.get(self.name, self.error_list_class())
     errors = property(_errors)
 
     def as_widget(self, widget, attrs=None):
