diff --git a/Doc/library/htmllib.rst b/Doc/library/htmllib.rst
index e1f2447..34423a0 100644
--- a/Doc/library/htmllib.rst
+++ b/Doc/library/htmllib.rst
@@ -75,12 +75,12 @@
       Interface definition for transforming an abstract flow of formatting events into
       specific output events on writer objects.
 
-   Module :mod:`HTMLParser`
+   Module :mod:`html.parser`
       Alternate HTML parser that offers a slightly lower-level view of the input, but
       is designed to work with XHTML, and does not implement some of the SGML syntax
       not used in "HTML as deployed" and which isn't legal for XHTML.
 
-   Module :mod:`htmlentitydefs`
+   Module :mod:`html.entities`
       Definition of replacement text for XHTML 1.0  entities.
 
    Module :mod:`sgmllib`
@@ -147,10 +147,10 @@
    :meth:`save_bgn` will raise a :exc:`TypeError` exception.
 
 
-:mod:`htmlentitydefs` --- Definitions of HTML general entities
-==============================================================
+:mod:`html.entities` --- Definitions of HTML general entities
+=============================================================
 
-.. module:: htmlentitydefs
+.. module:: html.entities
    :synopsis: Definitions of HTML general entities.
 .. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
 
diff --git a/Doc/library/htmlparser.rst b/Doc/library/htmlparser.rst
index 5cfe04e..4bfb287 100644
--- a/Doc/library/htmlparser.rst
+++ b/Doc/library/htmlparser.rst
@@ -1,8 +1,8 @@
 
-:mod:`HTMLParser` --- Simple HTML and XHTML parser
-==================================================
+:mod:`html.parser` --- Simple HTML and XHTML parser
+===================================================
 
-.. module:: HTMLParser
+.. module:: html.parser
    :synopsis: A simple parser that can handle HTML and XHTML.
 
 
@@ -18,7 +18,7 @@
 
    The :class:`HTMLParser` class is instantiated without arguments.
 
-   An HTMLParser instance is fed HTML data and calls handler functions when tags
+   An :class:`HTMLParser` instance is fed HTML data and calls handler functions when tags
    begin and end.  The :class:`HTMLParser` class is meant to be overridden by the
    user to provide a desired behavior.
 
@@ -87,8 +87,8 @@
    HREF="http://www.cwi.nl/">``, this method would be called as
    ``handle_starttag('a', [('href', 'http://www.cwi.nl/')])``.
 
-   All entity references from htmlentitydefs are replaced in the attribute
-   values.
+   All entity references from :mod:`html.entities` are replaced in the
+   attribute values.
 
 
 .. method:: HTMLParser.handle_startendtag(tag, attrs)
@@ -166,7 +166,7 @@
 As a basic example, below is a very basic HTML parser that uses the
 :class:`HTMLParser` class to print out tags as they are encountered::
 
-   from HTMLParser import HTMLParser
+   from html.parser import HTMLParser
 
    class MyHTMLParser(HTMLParser):
 
diff --git a/Lib/html/__init__.py b/Lib/html/__init__.py
new file mode 100644
index 0000000..196d378
--- /dev/null
+++ b/Lib/html/__init__.py
@@ -0,0 +1 @@
+# This directory is a Python package.
diff --git a/Lib/htmlentitydefs.py b/Lib/html/entities.py
similarity index 100%
rename from Lib/htmlentitydefs.py
rename to Lib/html/entities.py
diff --git a/Lib/HTMLParser.py b/Lib/html/parser.py
similarity index 96%
rename from Lib/HTMLParser.py
rename to Lib/html/parser.py
index 9979195..352a788 100644
--- a/Lib/HTMLParser.py
+++ b/Lib/html/parser.py
@@ -372,16 +372,17 @@
                     c = int(s)
                 return chr(c)
             else:
-                # Cannot use name2codepoint directly, because HTMLParser supports apos,
-                # which is not part of HTML 4
-                import htmlentitydefs
+                # Cannot use name2codepoint directly, because HTMLParser
+                # supports apos, which is not part of HTML 4
+                import html.entities
                 if HTMLParser.entitydefs is None:
                     entitydefs = HTMLParser.entitydefs = {'apos':"'"}
-                    for k, v in htmlentitydefs.name2codepoint.items():
-                        entitydefs[k] = chr(v)
+                    for k, v in html.entities.name2codepoint.items():
+                        entitydefs[k] = unichr(v)
                 try:
                     return self.entitydefs[s]
                 except KeyError:
                     return '&'+s+';'
 
-        return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));", replaceEntities, s)
+        return re.sub(r"&(#?[xX]?(?:[0-9a-fA-F]+|\w{1,8}));",
+                      replaceEntities, s)
diff --git a/Lib/htmllib.py b/Lib/htmllib.py
index 88e1df5..a580006 100644
--- a/Lib/htmllib.py
+++ b/Lib/htmllib.py
@@ -24,7 +24,7 @@
 
     """
 
-    from htmlentitydefs import entitydefs
+    from html.entities import entitydefs
 
     def __init__(self, formatter, verbose=0):
         """Creates an instance of the HTMLParser class.
diff --git a/Lib/test/test_codeccallbacks.py b/Lib/test/test_codeccallbacks.py
index 12eb068..64d1645 100644
--- a/Lib/test/test_codeccallbacks.py
+++ b/Lib/test/test_codeccallbacks.py
@@ -1,5 +1,5 @@
 import test.test_support, unittest
-import sys, codecs, htmlentitydefs, unicodedata
+import sys, codecs, html.entities, unicodedata
 
 class PosReturn:
     # this can be used for configurable callbacks
@@ -86,7 +86,7 @@
             l = []
             for c in exc.object[exc.start:exc.end]:
                 try:
-                    l.append("&%s;" % htmlentitydefs.codepoint2name[ord(c)])
+                    l.append("&%s;" % html.entities.codepoint2name[ord(c)])
                 except KeyError:
                     l.append("&#%d;" % ord(c))
             return ("".join(l), exc.end)
diff --git a/Lib/test/test_multibytecodec_support.py b/Lib/test/test_multibytecodec_support.py
index 48e9089..5508c9d 100644
--- a/Lib/test/test_multibytecodec_support.py
+++ b/Lib/test/test_multibytecodec_support.py
@@ -74,7 +74,7 @@
         if self.has_iso10646:
             return
 
-        from htmlentitydefs import codepoint2name
+        from html.entities import codepoint2name
 
         def xmlcharnamereplace(exc):
             if not isinstance(exc, UnicodeEncodeError):
diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py
index dd81e5b..1b6069d 100644
--- a/Lib/test/test_sundry.py
+++ b/Lib/test/test_sundry.py
@@ -48,7 +48,7 @@
             import encodings
             import formatter
             import getpass
-            import htmlentitydefs
+            import html.entities
             import imghdr
             import keyword
             import linecache
