diff --git a/Lib/tokenize.py b/Lib/tokenize.py
index e9114c6..f83bda5 100644
--- a/Lib/tokenize.py
+++ b/Lib/tokenize.py
@@ -24,7 +24,6 @@
                'Skip Montanaro, Raymond Hettinger, Trent Nelson, '
                'Michael Foord')
 
-import collections
 import re, string, sys
 from token import *
 from codecs import lookup, BOM_UTF8
@@ -32,7 +31,7 @@
 
 import token
 __all__ = [x for x in dir(token) if x[0] != '_'] + ["COMMENT", "tokenize",
-           "detect_encoding", "NL", "untokenize", "ENCODING", "Tokenize"]
+           "detect_encoding", "NL", "untokenize", "ENCODING", "TokenInfo"]
 del token
 
 COMMENT = N_TOKENS
@@ -43,7 +42,46 @@
 tok_name[ENCODING] = 'ENCODING'
 N_TOKENS += 3
 
-TokenInfo = collections.namedtuple('TokenInfo', 'type string start end line')
+class TokenInfo(tuple):
+    'TokenInfo(type, string, start, end, line)'
+
+    __slots__ = ()
+
+    _fields = ('type', 'string', 'start', 'end', 'line')
+
+    def __new__(cls, type, string, start, end, line):
+        return tuple.__new__(cls, (type, string, start, end, line))
+
+    @classmethod
+    def _make(cls, iterable, new=tuple.__new__, len=len):
+        'Make a new TokenInfo object from a sequence or iterable'
+        result = new(cls, iterable)
+        if len(result) != 5:
+            raise TypeError('Expected 5 arguments, got %d' % len(result))
+        return result
+
+    def __repr__(self):
+        return 'TokenInfo(type=%r, string=%r, start=%r, end=%r, line=%r)' % self
+
+    def _asdict(self):
+        'Return a new dict which maps field names to their values'
+        return dict(zip(self._fields, self))
+
+    def _replace(self, **kwds):
+        'Return a new TokenInfo object replacing specified fields with new values'
+        result = self._make(map(kwds.pop, ('type', 'string', 'start', 'end', 'line'), self))
+        if kwds:
+            raise ValueError('Got unexpected field names: %r' % kwds.keys())
+        return result
+
+    def __getnewargs__(self):
+        return tuple(self)
+
+    type = property(lambda t: t[0])
+    string = property(lambda t: t[1])
+    start = property(lambda t: t[2])
+    end = property(lambda t: t[3])
+    line = property(lambda t: t[4])
 
 def group(*choices): return '(' + '|'.join(choices) + ')'
 def any(*choices): return group(*choices) + '*'
