diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index 1fbef98..910916b 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -795,7 +795,10 @@ class MultiWidget(Widget):
     """
     def __init__(self, widgets, attrs=None):
         self.widgets = [isinstance(w, type) and w() or w for w in widgets]
-        super(MultiWidget, self).__init__(attrs)
+        if attrs is not None:
+            self.attrs = copy.deepcopy(attrs)
+        else:
+            self.attrs = {}
 
     def render(self, name, value, attrs=None):
         if self.is_localized:
@@ -806,13 +809,27 @@ class MultiWidget(Widget):
         if not isinstance(value, list):
             value = self.decompress(value)
         output = []
-        final_attrs = self.build_attrs(attrs)
-        id_ = final_attrs.get('id', None)
         for i, widget in enumerate(self.widgets):
             try:
                 widget_value = value[i]
             except IndexError:
                 widget_value = None
+            if isinstance(self.attrs, list):
+                try:
+                    final_attrs= dict(self.attrs[i])
+                except IndexError:
+                    final_attrs = {}
+            else:
+                final_attrs = dict(self.attrs)
+            if attrs is not None:
+                if isinstance(attrs, list):
+                    try:
+                        final_attrs.update(attrs[i])
+                    except IndexError:
+                        pass
+                else:
+                    final_attrs.update(attrs)
+            id_ = final_attrs.get('id', None)
             if id_:
                 final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
             output.append(widget.render(name + '_%s' % i, widget_value, final_attrs))
@@ -875,8 +892,8 @@ class SplitDateTimeWidget(MultiWidget):
     """
 
     def __init__(self, attrs=None, date_format=None, time_format=None):
-        widgets = (DateInput(attrs=attrs, format=date_format),
-                   TimeInput(attrs=attrs, format=time_format))
+        widgets = (DateInput(format=date_format),
+                   TimeInput(format=time_format))
         super(SplitDateTimeWidget, self).__init__(widgets, attrs)
 
     def decompress(self, value):
diff --git a/tests/regressiontests/forms/tests/widgets.py b/tests/regressiontests/forms/tests/widgets.py
index 2499b7a..edeccad 100644
--- a/tests/regressiontests/forms/tests/widgets.py
+++ b/tests/regressiontests/forms/tests/widgets.py
@@ -870,6 +870,14 @@ beatle J R Ringo False""")
         w = MyMultiWidget(widgets=(TextInput(attrs={'class': 'big'}), TextInput(attrs={'class': 'small'})), attrs={'id': 'bar'})
         self.assertHTMLEqual(w.render('name', ['john', 'lennon']), u'<input id="bar_0" type="text" class="big" value="john" name="name_0" /><br /><input id="bar_1" type="text" class="small" value="lennon" name="name_1" />')
 
+        # test passing list of attrs, each widget gets the right attrs
+        w = MyMultiWidget(widgets=(TextInput, TextInput),attrs=[{'class': 'big'}, {'class': 'small'}])
+        self.assertHTMLEqual(w.render('name', ['john', 'lennon']), u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
+
+        # test incomplete list of attrs
+        w = MyMultiWidget(widgets=(TextInput, TextInput),attrs=[{'class': 'big'},])
+        self.assertHTMLEqual(w.render('name', ['john', 'lennon']), u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" value="lennon" name="name_1" />')
+
         w = MyMultiWidget(widgets=(TextInput(), TextInput()))
 
         # test with no initial data
@@ -896,6 +904,10 @@ beatle J R Ringo False""")
         w = SplitDateTimeWidget(attrs={'class': 'pretty'})
         self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="pretty" value="07:30:00" name="date_1" />')
 
+        # different attrs for the subwidgets
+        w = SplitDateTimeWidget(attrs=[{'class': 'pretty'}, {'class': 'ugly'}])
+        self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="ugly" value="07:30:00" name="date_1" />')
+
         # Use 'date_format' and 'time_format' to change the way a value is displayed.
         w = SplitDateTimeWidget(date_format='%d/%m/%Y', time_format='%H:%M')
         self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" name="date_0" value="10/01/2006" /><input type="text" name="date_1" value="07:30" />')
