#2879: rename _winreg to winreg.
diff --git a/Doc/library/windows.rst b/Doc/library/windows.rst
index b09dd8b..b60d4e4 100644
--- a/Doc/library/windows.rst
+++ b/Doc/library/windows.rst
@@ -11,5 +11,5 @@
 
    msilib.rst
    msvcrt.rst
-   _winreg.rst
+   winreg.rst
    winsound.rst
diff --git a/Doc/library/_winreg.rst b/Doc/library/winreg.rst
similarity index 99%
rename from Doc/library/_winreg.rst
rename to Doc/library/winreg.rst
index ba2994d..f349fdf 100644
--- a/Doc/library/_winreg.rst
+++ b/Doc/library/winreg.rst
@@ -1,8 +1,7 @@
-
-:mod:`_winreg` -- Windows registry access
+:mod:`winreg` -- Windows registry access
 =========================================
 
-.. module:: _winreg
+.. module:: winreg
    :platform: Windows
    :synopsis: Routines and objects for manipulating the Windows registry.
 .. sectionauthor:: Mark Hammond <MarkH@ActiveState.com>
diff --git a/Lib/distutils/msvc9compiler.py b/Lib/distutils/msvc9compiler.py
index c8d52c4..fdb74ae 100644
--- a/Lib/distutils/msvc9compiler.py
+++ b/Lib/distutils/msvc9compiler.py
@@ -24,17 +24,17 @@
 from distutils import log
 from distutils.util import get_platform
 
-import _winreg
+import winreg
 
-RegOpenKeyEx = _winreg.OpenKeyEx
-RegEnumKey = _winreg.EnumKey
-RegEnumValue = _winreg.EnumValue
-RegError = _winreg.error
+RegOpenKeyEx = winreg.OpenKeyEx
+RegEnumKey = winreg.EnumKey
+RegEnumValue = winreg.EnumValue
+RegError = winreg.error
 
-HKEYS = (_winreg.HKEY_USERS,
-         _winreg.HKEY_CURRENT_USER,
-         _winreg.HKEY_LOCAL_MACHINE,
-         _winreg.HKEY_CLASSES_ROOT)
+HKEYS = (winreg.HKEY_USERS,
+         winreg.HKEY_CURRENT_USER,
+         winreg.HKEY_LOCAL_MACHINE,
+         winreg.HKEY_CLASSES_ROOT)
 
 VS_BASE = r"Software\Microsoft\VisualStudio\%0.1f"
 WINSDK_BASE = r"Software\Microsoft\Microsoft SDKs\Windows"
diff --git a/Lib/distutils/msvccompiler.py b/Lib/distutils/msvccompiler.py
index 71146dc..1cd0f91 100644
--- a/Lib/distutils/msvccompiler.py
+++ b/Lib/distutils/msvccompiler.py
@@ -20,15 +20,15 @@
 
 _can_read_reg = False
 try:
-    import _winreg
+    import winreg
 
     _can_read_reg = True
-    hkey_mod = _winreg
+    hkey_mod = winreg
 
-    RegOpenKeyEx = _winreg.OpenKeyEx
-    RegEnumKey = _winreg.EnumKey
-    RegEnumValue = _winreg.EnumValue
-    RegError = _winreg.error
+    RegOpenKeyEx = winreg.OpenKeyEx
+    RegEnumKey = winreg.EnumKey
+    RegEnumValue = winreg.EnumValue
+    RegError = winreg.error
 
 except ImportError:
     try:
@@ -44,7 +44,7 @@
     except ImportError:
         log.info("Warning: Can't read registry to find the "
                  "necessary compiler setting\n"
-                 "Make sure that Python modules _winreg, "
+                 "Make sure that Python modules winreg, "
                  "win32api or win32con are installed.")
         pass
 
diff --git a/Lib/platform.py b/Lib/platform.py
index d5cf623..415d83f 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -529,9 +529,9 @@
         # Use win32api if available
         from win32api import RegQueryValueEx
     except ImportError:
-        # On Python 2.0 and later, emulate using _winreg
-        import _winreg
-        RegQueryValueEx = _winreg.QueryValueEx
+        # On Python 2.0 and later, emulate using winreg
+        import winreg
+        RegQueryValueEx = winreg.QueryValueEx
     try:
         return RegQueryValueEx(key,name)
     except:
@@ -579,14 +579,14 @@
             # No emulation possible, so return the defaults...
             return release,version,csd,ptype
         else:
-            # Emulation using _winreg (added in Python 2.0) and
+            # Emulation using winreg (added in Python 2.0) and
             # sys.getwindowsversion() (added in Python 2.3)
-            import _winreg
+            import winreg
             GetVersionEx = sys.getwindowsversion
-            RegQueryValueEx = _winreg.QueryValueEx
-            RegOpenKeyEx = _winreg.OpenKeyEx
-            RegCloseKey = _winreg.CloseKey
-            HKEY_LOCAL_MACHINE = _winreg.HKEY_LOCAL_MACHINE
+            RegQueryValueEx = winreg.QueryValueEx
+            RegOpenKeyEx = winreg.OpenKeyEx
+            RegCloseKey = winreg.CloseKey
+            HKEY_LOCAL_MACHINE = winreg.HKEY_LOCAL_MACHINE
             VER_PLATFORM_WIN32_WINDOWS = 1
             VER_PLATFORM_WIN32_NT = 2
             VER_NT_WORKSTATION = 1
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index e852c69..3dbabc5 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -2,7 +2,7 @@
 # Test the windows specific win32reg module.
 # Only win32reg functions not hit here: FlushKey, LoadKey and SaveKey
 
-from _winreg import *
+from winreg import *
 import os, sys
 import unittest
 
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 5cdfb46..a5171ef 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -1489,19 +1489,19 @@
         """
         proxies = {}
         try:
-            import _winreg
+            import winreg
         except ImportError:
             # Std module, so should be around - but you never know!
             return proxies
         try:
-            internetSettings = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
+            internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                 r'Software\Microsoft\Windows\CurrentVersion\Internet Settings')
-            proxyEnable = _winreg.QueryValueEx(internetSettings,
-                                               'ProxyEnable')[0]
+            proxyEnable = winreg.QueryValueEx(internetSettings,
+                                              'ProxyEnable')[0]
             if proxyEnable:
                 # Returned as Unicode but problems if not converted to ASCII
-                proxyServer = str(_winreg.QueryValueEx(internetSettings,
-                                                       'ProxyServer')[0])
+                proxyServer = str(winreg.QueryValueEx(internetSettings,
+                                                      'ProxyServer')[0])
                 if '=' in proxyServer:
                     # Per-protocol settings
                     for p in proxyServer.split(';'):
@@ -1537,18 +1537,18 @@
 
     def proxy_bypass_registry(host):
         try:
-            import _winreg
+            import winreg
             import re
         except ImportError:
             # Std modules, so should be around - but you never know!
             return 0
         try:
-            internetSettings = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
+            internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
                 r'Software\Microsoft\Windows\CurrentVersion\Internet Settings')
-            proxyEnable = _winreg.QueryValueEx(internetSettings,
-                                               'ProxyEnable')[0]
-            proxyOverride = str(_winreg.QueryValueEx(internetSettings,
-                                                     'ProxyOverride')[0])
+            proxyEnable = winreg.QueryValueEx(internetSettings,
+                                              'ProxyEnable')[0]
+            proxyOverride = str(winreg.QueryValueEx(internetSettings,
+                                                    'ProxyOverride')[0])
             # ^^^^ Returned as Unicode but problems if not converted to ASCII
         except WindowsError:
             return 0
diff --git a/Misc/NEWS b/Misc/NEWS
index 161485f..f385560 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -39,11 +39,13 @@
 Extension Modules
 -----------------
 
+- Renamed ``_winreg`` module to ``winreg``.
+
 - Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the platform.
 
 - Support for Windows 9x has been removed from the winsound module.
 
-- Fixed #2870: cmathmodule.c compile error
+- Fixed #2870: cmathmodule.c compile error.
 
 Library
 -------
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 33bcbd5..7020d8e 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -476,7 +476,7 @@
 win32_error(char* function, char* filename)
 {
 	/* XXX We should pass the function name along in the future.
-	   (_winreg.c also wants to pass the function name.)
+	   (winreg.c also wants to pass the function name.)
 	   This would however require an additional param to the
 	   Windows error object, which is non-trivial.
 	*/
diff --git a/PC/VC6/pythoncore.dsp b/PC/VC6/pythoncore.dsp
index 9a369f2..84a5bb5 100644
--- a/PC/VC6/pythoncore.dsp
+++ b/PC/VC6/pythoncore.dsp
@@ -177,7 +177,7 @@
 # End Source File

 # Begin Source File

 

-SOURCE=..\_winreg.c

+SOURCE=..\winreg.c

 # End Source File

 # Begin Source File

 

diff --git a/PC/VS7.1/python.iss b/PC/VS7.1/python.iss
index 70c9bf3..2f6c8b7 100644
--- a/PC/VS7.1/python.iss
+++ b/PC/VS7.1/python.iss
@@ -155,8 +155,8 @@
 Source: DLLs\unicodedata.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main
 Source: libs\unicodedata.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main
 
-Source: DLLs\_winreg.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main
-Source: libs\_winreg.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main
+Source: DLLs\winreg.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main
+Source: libs\winreg.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main
 
 Source: DLLs\winsound.pyd; DestDir: {app}\DLLs; CopyMode: alwaysoverwrite; Components: main
 Source: libs\winsound.lib; DestDir: {app}\libs; CopyMode: alwaysoverwrite; Components: main
diff --git a/PC/VS7.1/python20.wse b/PC/VS7.1/python20.wse
index 6c1c387..8611b8e 100644
--- a/PC/VS7.1/python20.wse
+++ b/PC/VS7.1/python20.wse
@@ -1713,8 +1713,8 @@
   Text=Extension module DLLs (.pyd); keep in synch with libs directory next
 end
 item: Install File
-  Source=.\_winreg.pyd
-  Destination=%MAINDIR%\DLLs\_winreg.pyd
+  Source=.\winreg.pyd
+  Destination=%MAINDIR%\DLLs\winreg.pyd
   Description=Extension modules
   Flags=0000000000000010
 end
@@ -1809,8 +1809,8 @@
   Text=Link libraries (.lib); keep in synch with DLLs above, except that the Python lib lives here.
 end
 item: Install File
-  Source=.\_winreg.lib
-  Destination=%MAINDIR%\libs\_winreg.lib
+  Source=.\winreg.lib
+  Destination=%MAINDIR%\libs\winreg.lib
   Description=Link library files
   Flags=0000000000000010
 end
diff --git a/PC/VS7.1/pythoncore.vcproj b/PC/VS7.1/pythoncore.vcproj
index f06d626..38982f4 100644
--- a/PC/VS7.1/pythoncore.vcproj
+++ b/PC/VS7.1/pythoncore.vcproj
@@ -401,7 +401,7 @@
 			RelativePath="..\..\Modules\_weakref.c">
 		</File>
 		<File
-			RelativePath="..\..\Pc\_winreg.c">
+			RelativePath="..\..\Pc\winreg.c">
 		</File>
 		<File
 			RelativePath="..\..\Objects\abstract.c">
diff --git a/PC/VS8.0/pythoncore.vcproj b/PC/VS8.0/pythoncore.vcproj
index 8e59dae..75414ce 100644
--- a/PC/VS8.0/pythoncore.vcproj
+++ b/PC/VS8.0/pythoncore.vcproj
@@ -1559,7 +1559,7 @@
 				>

 			</File>

 			<File

-				RelativePath="..\..\PC\_winreg.c"

+				RelativePath="..\..\PC\winreg.c"

 				>

 			</File>

 			<File

diff --git a/PC/config.c b/PC/config.c
index e3bbde7..1522533 100644
--- a/PC/config.c
+++ b/PC/config.c
@@ -42,7 +42,7 @@
 extern void init_csv(void);
 extern void init_sre(void);
 extern void initparser(void);
-extern void init_winreg(void);
+extern void initwinreg(void);
 extern void init_struct(void);
 extern void initdatetime(void);
 extern void init_functools(void);
@@ -116,7 +116,7 @@
 	{"_csv", init_csv},
 	{"_sre", init_sre},
 	{"parser", initparser},
-	{"_winreg", init_winreg},
+	{"winreg", initwinreg},
 	{"_struct", init_struct},
 	{"datetime", initdatetime},
 	{"_functools", init_functools},
diff --git a/PC/_winreg.c b/PC/winreg.c
similarity index 99%
rename from PC/_winreg.c
rename to PC/winreg.c
index 8ba4863..1b141d3 100644
--- a/PC/_winreg.c
+++ b/PC/winreg.c
@@ -1,5 +1,5 @@
 /*
-  _winreg.c
+  winreg.c
 
   Windows Registry access module for Python.
 
@@ -1355,7 +1355,7 @@
 		return NULL;
 	if (typ != REG_SZ) {
 		PyErr_SetString(PyExc_TypeError,
-				"Type must be _winreg.REG_SZ");
+				"Type must be winreg.REG_SZ");
 		return NULL;
 	}
 
@@ -1565,10 +1565,10 @@
 
 #define ADD_KEY(val) inskey(d, #val, val)
 
-PyMODINIT_FUNC init_winreg(void)
+PyMODINIT_FUNC initwinreg(void)
 {
 	PyObject *m, *d;
-	m = Py_InitModule3("_winreg", winreg_methods, module_doc);
+	m = Py_InitModule3("winreg", winreg_methods, module_doc);
 	if (m == NULL)
 		return;
 	d = PyModule_GetDict(m);
diff --git a/PCbuild/pythoncore.vcproj b/PCbuild/pythoncore.vcproj
index c2a3b9a..143a178 100644
--- a/PCbuild/pythoncore.vcproj
+++ b/PCbuild/pythoncore.vcproj
@@ -1563,7 +1563,7 @@
 				>
 			</File>
 			<File
-				RelativePath="..\PC\_winreg.c"
+				RelativePath="..\PC\winreg.c"
 				>
 			</File>
 			<File
diff --git a/Tools/freeze/extensions_win32.ini b/Tools/freeze/extensions_win32.ini
index efc5e35..1e36aba 100644
--- a/Tools/freeze/extensions_win32.ini
+++ b/Tools/freeze/extensions_win32.ini
@@ -52,7 +52,7 @@
 cl=/I %PYTHONPREFIX%\..\zlib-1.1.4 /D _WINDOWS /D WIN32 
 libs=%PYTHONPREFIX%\..\zlib-1.1.4\zlib.lib /nodefaultlib:libc
 
-[_winreg]
+[winreg]
 dsp=%PYTHONPREFIX%\PCBuild\winreg.dsp
 libs=advapi32.lib
 
diff --git a/Tools/msi/msilib.py b/Tools/msi/msilib.py
index e07ef2b..8497400 100644
--- a/Tools/msi/msilib.py
+++ b/Tools/msi/msilib.py
@@ -5,7 +5,7 @@
 import win32com.client
 import pythoncom, pywintypes
 from win32com.client import constants
-import re, string, os, sets, glob, subprocess, sys, _winreg, struct
+import re, string, os, sets, glob, subprocess, sys, winreg, struct
 
 # Partially taken from Wine
 datasizemask=      0x00ff
@@ -376,9 +376,9 @@
                      (r"Software\Microsoft\Win32SDK\Directories", "Install Dir"),
                     ]:
             try:
-                key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, k)
-                dir = _winreg.QueryValueEx(key, v)[0]
-                _winreg.CloseKey(key)
+                key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, k)
+                dir = winreg.QueryValueEx(key, v)[0]
+                winreg.CloseKey(key)
             except (WindowsError, IndexError):
                 continue
             cabarc = os.path.join(dir, r"Bin", "cabarc.exe")
diff --git a/Tools/scripts/win_add2path.py b/Tools/scripts/win_add2path.py
index 876bfb2..c4f481f 100644
--- a/Tools/scripts/win_add2path.py
+++ b/Tools/scripts/win_add2path.py
@@ -10,9 +10,9 @@
 import sys
 import site
 import os
-import _winreg
+import winreg
 
-HKCU = _winreg.HKEY_CURRENT_USER
+HKCU = winreg.HKEY_CURRENT_USER
 ENV = "Environment"
 PATH = "PATH"
 DEFAULT = u"%PATH%"
@@ -27,9 +27,9 @@
     else:
         userscripts = None
 
-    with _winreg.CreateKey(HKCU, ENV) as key:
+    with winreg.CreateKey(HKCU, ENV) as key:
         try:
-            envpath = _winreg.QueryValueEx(key, PATH)[0]
+            envpath = winreg.QueryValueEx(key, PATH)[0]
         except WindowsError:
             envpath = DEFAULT
 
@@ -39,7 +39,7 @@
                 paths.append(path)
 
         envpath = os.pathsep.join(paths)
-        _winreg.SetValueEx(key, PATH, 0, _winreg.REG_EXPAND_SZ, envpath)
+        winreg.SetValueEx(key, PATH, 0, winreg.REG_EXPAND_SZ, envpath)
         return paths, envpath
 
 def main():
@@ -51,7 +51,7 @@
         print "No path was added"
     print "\nPATH is now:\n%s\n" % envpath
     print "Expanded:"
-    print _winreg.ExpandEnvironmentStrings(envpath)
+    print winreg.ExpandEnvironmentStrings(envpath)
 
 if __name__ == '__main__':
     main()