diff --git a/Lib/collections.py b/Lib/collections.py
index abe8e0c..3521ad0 100644
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -26,12 +26,12 @@
     (11, 22)
     >>> p.x + p.y                       # fields also accessable by name
     33
-    >>> d = p.__asdict__()              # convert to a dictionary
+    >>> d = p._asdict()                 # convert to a dictionary
     >>> d['x']
     11
     >>> Point(**d)                      # convert from a dictionary
     Point(x=11, y=22)
-    >>> p.__replace__(x=100)            # __replace__() is like str.replace() but targets named fields
+    >>> p._replace(x=100)               # _replace() is like str.replace() but targets named fields
     Point(x=100, y=22)
 
     """
@@ -49,8 +49,8 @@
             raise ValueError('Type names and field names cannot start with a number: %r' % name)
     seen_names = set()
     for name in field_names:
-        if name.startswith('__') and name.endswith('__') and len(name) > 3:
-            raise ValueError('Field names cannot start and end with double underscores: %r' % name)
+        if name.startswith('_'):
+            raise ValueError('Field names cannot start with an underscore: %r' % name)
         if name in seen_names:
             raise ValueError('Encountered duplicate field name: %r' % name)
         seen_names.add(name)
@@ -61,15 +61,15 @@
     template = '''class %(typename)s(tuple):
         '%(typename)s(%(argtxt)s)'
         __slots__ = ()
-        __fields__ = property(lambda self: %(field_names)r)
+        _fields = property(lambda self: %(field_names)r)
         def __new__(cls, %(argtxt)s):
             return tuple.__new__(cls, (%(argtxt)s))
         def __repr__(self):
             return '%(typename)s(%(reprtxt)s)' %% self
-        def __asdict__(self, dict=dict, zip=zip):
+        def _asdict(self, dict=dict, zip=zip):
             'Return a new dict mapping field names to their values'
             return dict(zip(%(field_names)r, self))
-        def __replace__(self, **kwds):
+        def _replace(self, **kwds):
             'Return a new %(typename)s object replacing specified fields with new values'
             return %(typename)s(**dict(zip(%(field_names)r, self), **kwds))  \n''' % locals()
     for i, name in enumerate(field_names):
diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py
index 0b0b029..d6cfe9b 100644
--- a/Lib/test/test_collections.py
+++ b/Lib/test/test_collections.py
@@ -25,11 +25,11 @@
         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 ghi')       # field with leading underscore
         self.assertRaises(ValueError, namedtuple, 'abc', 'efg efg ghi')    # duplicate field
 
         namedtuple('Point0', 'x1 y2')   # Verify that numbers are allowed in names
-        namedtuple('_', '_ __ ___')     # Verify that underscores are allowed
+        namedtuple('_', 'a b c')        # Test leading underscores in a typename
 
     def test_instance(self):
         Point = namedtuple('Point', 'x y')
@@ -46,17 +46,17 @@
         self.assertEqual(repr(p), 'Point(x=11, y=22)')
         self.assert_('__dict__' not in dir(p))                              # verify instance has no dict
         self.assert_('__weakref__' not in dir(p))
-        self.assertEqual(p.__fields__, ('x', 'y'))                          # test __fields__ attribute
-        self.assertEqual(p.__replace__(x=1), (1, 22))                       # test __replace__ method
-        self.assertEqual(p.__asdict__(), dict(x=11, y=22))                  # test __dict__ method
+        self.assertEqual(p._fields, ('x', 'y'))                             # test _fields attribute
+        self.assertEqual(p._replace(x=1), (1, 22))                          # test _replace method
+        self.assertEqual(p._asdict(), dict(x=11, y=22))                     # test _asdict method
 
-        # Verify that __fields__ is read-only
+        # Verify that _fields is read-only
         try:
-            p.__fields__ = ('F1' ,'F2')
+            p._fields = ('F1' ,'F2')
         except AttributeError:
             pass
         else:
-            self.fail('The __fields__ attribute needs to be read-only')
+            self.fail('The _fields attribute needs to be read-only')
 
         # verify that field string can have commas
         Point = namedtuple('Point', 'x, y')
