diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index 1982187..e01c52e 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -421,27 +421,31 @@
 
            __slots__ = ()
 
-           _fields = ('x', 'y')
-
            def __new__(cls, x, y):
                return tuple.__new__(cls, (x, y))
 
+           _cast = classmethod(tuple.__new__)
+
            def __repr__(self):
                return 'Point(x=%r, y=%r)' % self
 
-           def _asdict(self):
+           def _asdict(t):
                'Return a new dict which maps field names to their values'
-               return dict(zip(('x', 'y'), self))
+               return {'x': t[0], 'y': t[1]}
 
            def _replace(self, **kwds):
                'Return a new Point object replacing specified fields with new values'
-               return Point(*map(kwds.get, ('x', 'y'), self))
+               return Point._cast(map(kwds.get, ('x', 'y'), self))
+
+           @property
+           def _fields(self):
+               return ('x', 'y')
 
            x = property(itemgetter(0))
            y = property(itemgetter(1))
 
    >>> p = Point(11, y=22)     # instantiate with positional or keyword arguments
-   >>> p[0] + p[1]             # indexable like the regular tuple (11, 22)
+   >>> p[0] + p[1]             # indexable like the plain tuple (11, 22)
    33
    >>> x, y = p                # unpack like a regular tuple
    >>> x, y
@@ -456,34 +460,31 @@
 
    EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
 
-   from itertools import starmap
    import csv
-   for record in starmap(EmployeeRecord, csv.reader(open("employees.csv", "rb"))):
+   for emp in map(EmployeeRecord._cast, csv.reader(open("employees.csv", "rb"))):
        print(emp.name, emp.title)
 
    import sqlite3
    conn = sqlite3.connect('/companydata')
    cursor = conn.cursor()
    cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
-   for emp in starmap(EmployeeRecord, cursor.fetchall()):
+   for emp in map(EmployeeRecord._cast, cursor.fetchall()):
        print emp.name, emp.title
 
-When casting a single record to a named tuple, use the star-operator [#]_ to unpack
-the values::
+In addition to the methods inherited from tuples, named tuples support
+three additonal methods and a read-only attribute.
+
+.. method:: namedtuple._cast(iterable)
+
+   Class method returning a new instance taking the positional arguments from the *iterable*.
+   Useful for casting existing sequences and iterables to named tuples:
+
+::
 
    >>> t = [11, 22]
-   >>> Point(*t)               # the star-operator unpacks any iterable object
+   >>> Point._cast(t)
    Point(x=11, y=22)
 
-When casting a dictionary to a named tuple, use the double-star-operator::
-
-   >>> d = {'x': 11, 'y': 22}
-   >>> Point(**d)
-   Point(x=11, y=22)
-
-In addition to the methods inherited from tuples, named tuples support
-two additonal methods and a read-only attribute.
-
 .. method:: somenamedtuple._asdict()
 
    Return a new dict which maps field names to their corresponding values:
@@ -529,6 +530,12 @@
     >>> getattr(p, 'x')
     11
 
+When casting a dictionary to a named tuple, use the double-star-operator [#]_::
+
+   >>> d = {'x': 11, 'y': 22}
+   >>> Point(**d)
+   Point(x=11, y=22)
+
 Since a named tuple is a regular Python class, it is easy to add or change
 functionality.  For example, the display format can be changed by overriding
 the :meth:`__repr__` method:
@@ -551,5 +558,5 @@
 
 .. rubric:: Footnotes
 
-.. [#] For information on the star-operator see
+.. [#] For information on the double-star-operator see
    :ref:`tut-unpacking-arguments` and :ref:`calls`.
