Index: django/newforms/widgets.py
===================================================================
--- django/newforms/widgets.py	(revision 4926)
+++ django/newforms/widgets.py	(working copy)
@@ -121,6 +121,11 @@
     input_type = 'file'
 
 class Textarea(Widget):
+    def __init__(self, attrs=None):
+        self.attrs = {'cols': '40', 'rows': '10'} # Needed for HTML correctness
+        if attrs:
+            self.attrs.update(attrs)
+
     def render(self, name, value, attrs=None):
         if value is None: value = ''
         value = smart_unicode(value)
Index: tests/modeltests/model_forms/models.py
===================================================================
--- tests/modeltests/model_forms/models.py	(revision 4926)
+++ tests/modeltests/model_forms/models.py	(working copy)
@@ -159,7 +159,7 @@
 <option value="1">Mike Royko</option>
 <option value="2">Bob Woodward</option>
 </select></td></tr>
-<tr><th>Article:</th><td><textarea name="article"></textarea></td></tr>
+<tr><th>Article:</th><td><textarea rows="10" cols="40" name="article"></textarea></td></tr>
 <tr><th>Categories:</th><td><select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -199,7 +199,7 @@
 <option value="1" selected="selected">Mike Royko</option>
 <option value="2">Bob Woodward</option>
 </select></li>
-<li>Article: <textarea name="article">Hello.</textarea></li>
+<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -231,7 +231,7 @@
 <option value="1" selected="selected">Mike Royko</option>
 <option value="2">Bob Woodward</option>
 </select></li>
-<li>Article: <textarea name="article">Hello.</textarea></li>
+<li>Article: <textarea rows="10" cols="40" name="article">Hello.</textarea></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1" selected="selected">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -309,7 +309,7 @@
 <option value="1">Mike Royko</option>
 <option value="2">Bob Woodward</option>
 </select></li>
-<li>Article: <textarea name="article"></textarea></li>
+<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
@@ -328,7 +328,7 @@
 <option value="2">Bob Woodward</option>
 <option value="3">Carl Bernstein</option>
 </select></li>
-<li>Article: <textarea name="article"></textarea></li>
+<li>Article: <textarea rows="10" cols="40" name="article"></textarea></li>
 <li>Categories: <select multiple="multiple" name="categories">
 <option value="1">Entertainment</option>
 <option value="2">It&#39;s a test</option>
Index: tests/regressiontests/forms/tests.py
===================================================================
--- tests/regressiontests/forms/tests.py	(revision 4926)
+++ tests/regressiontests/forms/tests.py	(working copy)
@@ -193,30 +193,30 @@
 
 >>> w = Textarea()
 >>> w.render('msg', '')
-u'<textarea name="msg"></textarea>'
+u'<textarea rows="10" cols="40" name="msg"></textarea>'
 >>> w.render('msg', None)
-u'<textarea name="msg"></textarea>'
+u'<textarea rows="10" cols="40" name="msg"></textarea>'
 >>> w.render('msg', 'value')
-u'<textarea name="msg">value</textarea>'
+u'<textarea rows="10" cols="40" name="msg">value</textarea>'
 >>> w.render('msg', 'some "quoted" & ampersanded value')
-u'<textarea name="msg">some &quot;quoted&quot; &amp; ampersanded value</textarea>'
->>> w.render('msg', 'value', attrs={'class': 'pretty'})
-u'<textarea name="msg" class="pretty">value</textarea>'
+u'<textarea rows="10" cols="40" name="msg">some &quot;quoted&quot; &amp; ampersanded value</textarea>'
+>>> w.render('msg', 'value', attrs={'class': 'pretty', 'rows': 20})
+u'<textarea class="pretty" rows="20" cols="40" name="msg">value</textarea>'
 
 You can also pass 'attrs' to the constructor:
 >>> w = Textarea(attrs={'class': 'pretty'})
 >>> w.render('msg', '')
-u'<textarea class="pretty" name="msg"></textarea>'
+u'<textarea rows="10" cols="40" name="msg" class="pretty"></textarea>'
 >>> w.render('msg', 'example')
-u'<textarea class="pretty" name="msg">example</textarea>'
+u'<textarea rows="10" cols="40" name="msg" class="pretty">example</textarea>'
 
 'attrs' passed to render() get precedence over those passed to the constructor:
 >>> w = Textarea(attrs={'class': 'pretty'})
 >>> w.render('msg', '', attrs={'class': 'special'})
-u'<textarea class="special" name="msg"></textarea>'
+u'<textarea rows="10" cols="40" name="msg" class="special"></textarea>'
 
 >>> w.render('msg', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'})
-u'<textarea class="fun" name="msg">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>'
+u'<textarea rows="10" cols="40" name="msg" class="fun">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>'
 
 # CheckboxInput Widget ########################################################
 
@@ -1966,12 +1966,12 @@
 >>> print f['subject']
 <input type="text" name="subject" />
 >>> print f['message']
-<textarea name="message"></textarea>
+<textarea rows="10" cols="40" name="message"></textarea>
 
 as_textarea(), as_text() and as_hidden() are shortcuts for changing the output
 widget type:
 >>> f['subject'].as_textarea()
-u'<textarea name="subject"></textarea>'
+u'<textarea rows="10" cols="40" name="subject"></textarea>'
 >>> f['message'].as_text()
 u'<input type="text" name="message" />'
 >>> f['message'].as_hidden()
@@ -1991,7 +1991,7 @@
 u'<input type="text" name="message" />'
 >>> f = ContactForm({'subject': 'Hello', 'message': 'I love you.'}, auto_id=False)
 >>> f['subject'].as_textarea()
-u'<textarea name="subject">Hello</textarea>'
+u'<textarea rows="10" cols="40" name="subject">Hello</textarea>'
 >>> f['message'].as_text()
 u'<input type="text" name="message" value="I love you." />'
 >>> f['message'].as_hidden()
