diff --git a/Lib/collections.py b/Lib/collections.py
index 0feda0a..e0782d0 100644
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -1,14 +1,14 @@
-__all__ = ['deque', 'defaultdict', 'named_tuple']
+__all__ = ['deque', 'defaultdict', 'namedtuple']
 
 from _collections import deque, defaultdict
 from operator import itemgetter as _itemgetter
 from keyword import iskeyword as _iskeyword
 import sys as _sys
 
-def named_tuple(typename, field_names, verbose=False):
+def namedtuple(typename, field_names, verbose=False):
     """Returns a new subclass of tuple with named fields.
 
-    >>> Point = named_tuple('Point', 'x y')
+    >>> Point = namedtuple('Point', 'x y')
     >>> Point.__doc__                   # docstring for the new class
     'Point(x, y)'
     >>> p = Point(11, y=22)             # instantiate with positional args or keywords
@@ -94,10 +94,10 @@
 if __name__ == '__main__':
     # verify that instances can be pickled
     from cPickle import loads, dumps
-    Point = named_tuple('Point', 'x, y', True)
+    Point = namedtuple('Point', 'x, y', True)
     p = Point(x=10, y=20)
     assert p == loads(dumps(p))
 
     import doctest
-    TestResults = named_tuple('TestResults', 'failed attempted')
+    TestResults = namedtuple('TestResults', 'failed attempted')
     print TestResults(*doctest.testmod())
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index b1f3add..348919f 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -1,31 +1,31 @@
 import unittest
 from test import test_support
-from collections import named_tuple
+from collections import namedtuple
 
 class TestNamedTuple(unittest.TestCase):
 
     def test_factory(self):
-        Point = named_tuple('Point', 'x y')
+        Point = namedtuple('Point', 'x y')
         self.assertEqual(Point.__name__, 'Point')
         self.assertEqual(Point.__doc__, 'Point(x, y)')
         self.assertEqual(Point.__slots__, ())
         self.assertEqual(Point.__module__, __name__)
         self.assertEqual(Point.__getitem__, tuple.__getitem__)
 
-        self.assertRaises(ValueError, named_tuple, 'abc%', 'efg ghi')       # type has non-alpha char
-        self.assertRaises(ValueError, named_tuple, 'class', 'efg ghi')      # type has keyword
-        self.assertRaises(ValueError, named_tuple, '9abc', 'efg ghi')       # type starts with digit
+        self.assertRaises(ValueError, namedtuple, 'abc%', 'efg ghi')       # type has non-alpha char
+        self.assertRaises(ValueError, namedtuple, 'class', 'efg ghi')      # type has keyword
+        self.assertRaises(ValueError, namedtuple, '9abc', 'efg ghi')       # type starts with digit
 
-        self.assertRaises(ValueError, named_tuple, 'abc', 'efg g%hi')       # field with non-alpha char
-        self.assertRaises(ValueError, named_tuple, 'abc', 'abc class')      # field has keyword
-        self.assertRaises(ValueError, named_tuple, 'abc', '8efg 9ghi')      # field starts with digit
-        self.assertRaises(ValueError, named_tuple, 'abc', '__efg__ ghi')    # field with double underscores
-        self.assertRaises(ValueError, named_tuple, 'abc', 'efg efg ghi')    # duplicate field
+        self.assertRaises(ValueError, namedtuple, 'abc', 'efg g%hi')       # field with non-alpha char
+        self.assertRaises(ValueError, namedtuple, 'abc', 'abc class')      # field has keyword
+        self.assertRaises(ValueError, namedtuple, 'abc', '8efg 9ghi')      # field starts with digit
+        self.assertRaises(ValueError, namedtuple, 'abc', '__efg__ ghi')    # field with double underscores
+        self.assertRaises(ValueError, namedtuple, 'abc', 'efg efg ghi')    # duplicate field
 
-        named_tuple('Point0', 'x1 y2')   # Verify that numbers are allowed in names
+        namedtuple('Point0', 'x1 y2')   # Verify that numbers are allowed in names
 
     def test_instance(self):
-        Point = named_tuple('Point', 'x y')
+        Point = namedtuple('Point', 'x y')
         p = Point(11, 22)
         self.assertEqual(p, Point(x=11, y=22))
         self.assertEqual(p, Point(11, y=22))
@@ -44,17 +44,17 @@
         self.assertEqual(p.__asdict__(), dict(x=11, y=22))                  # test __dict__ method
 
         # verify that field string can have commas
-        Point = named_tuple('Point', 'x, y')
+        Point = namedtuple('Point', 'x, y')
         p = Point(x=11, y=22)
         self.assertEqual(repr(p), 'Point(x=11, y=22)')
 
         # verify that fieldspec can be a non-string sequence
-        Point = named_tuple('Point', ('x', 'y'))
+        Point = namedtuple('Point', ('x', 'y'))
         p = Point(x=11, y=22)
         self.assertEqual(repr(p), 'Point(x=11, y=22)')
 
     def test_tupleness(self):
-        Point = named_tuple('Point', 'x y')
+        Point = namedtuple('Point', 'x y')
         p = Point(11, 22)
 
         self.assert_(isinstance(p, tuple))
@@ -73,9 +73,9 @@
         self.assertRaises(AttributeError, eval, 'p.z', locals())
 
     def test_odd_sizes(self):
-        Zero = named_tuple('Zero', '')
+        Zero = namedtuple('Zero', '')
         self.assertEqual(Zero(), ())
-        Dot = named_tuple('Dot', 'd')
+        Dot = namedtuple('Dot', 'd')
         self.assertEqual(Dot(1), (1,))
 
 def test_main(verbose=None):
diff --git a/Misc/NEWS b/Misc/NEWS
index b51c7fd..836ad1c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -798,6 +798,8 @@
 Extension Modules
 -----------------
 
+- collections.defaultdict now has a repr() function that can be run through eval()
+
 - Patch #1388440: Add set_completion_display_matches_hook and
   get_completion_type to readline.
 
