diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index 8099403..e35d95e 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -78,9 +78,9 @@
 # don't have this restriction.)  Codes are positive ints; 0 is
 # reserved.
 
-extension_registry = {}                 # key -> code
-inverted_registry = {}                  # code -> key
-extension_cache = {}                    # code -> object
+_extension_registry = {}                # key -> code
+_inverted_registry = {}                 # code -> key
+_extension_cache = {}                   # code -> object
 # Don't ever rebind those names:  cPickle grabs a reference to them when
 # it's initialized, and won't see a rebinding.
 
@@ -90,32 +90,32 @@
     if not 1 <= code < 0x7fffffff:
         raise ValueError, "code out of range"
     key = (module, name)
-    if (extension_registry.get(key) == code and
-        inverted_registry.get(code) == key):
+    if (_extension_registry.get(key) == code and
+        _inverted_registry.get(code) == key):
         return # Redundant registrations are benign
-    if key in extension_registry:
+    if key in _extension_registry:
         raise ValueError("key %s is already registered with code %s" %
-                         (key, extension_registry[key]))
-    if code in inverted_registry:
+                         (key, _extension_registry[key]))
+    if code in _inverted_registry:
         raise ValueError("code %s is already in use for key %s" %
-                         (code, inverted_registry[code]))
-    extension_registry[key] = code
-    inverted_registry[code] = key
+                         (code, _inverted_registry[code]))
+    _extension_registry[key] = code
+    _inverted_registry[code] = key
 
 def remove_extension(module, name, code):
     """Unregister an extension code.  For testing only."""
     key = (module, name)
-    if (extension_registry.get(key) != code or
-        inverted_registry.get(code) != key):
+    if (_extension_registry.get(key) != code or
+        _inverted_registry.get(code) != key):
         raise ValueError("key %s is not registered with code %s" %
                          (key, code))
-    del extension_registry[key]
-    del inverted_registry[code]
-    if code in extension_cache:
-        del extension_cache[code]
+    del _extension_registry[key]
+    del _inverted_registry[code]
+    if code in _extension_cache:
+        del _extension_cache[code]
 
 def clear_extension_cache():
-    extension_cache.clear()
+    _extension_cache.clear()
 
 # Standard extension code assignments
 
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 870d94d..35ab91b 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -28,7 +28,7 @@
 
 from types import *
 from copy_reg import dispatch_table, _reconstructor
-from copy_reg import extension_registry, inverted_registry, extension_cache
+from copy_reg import _extension_registry, _inverted_registry, _extension_cache
 import marshal
 import sys
 import struct
@@ -845,7 +845,7 @@
                     (obj, module, name))
 
         if self.proto >= 2:
-            code = extension_registry.get((module, name))
+            code = _extension_registry.get((module, name))
             if code:
                 assert code > 0
                 if code <= 0xff:
@@ -1238,15 +1238,15 @@
 
     def get_extension(self, code):
         nil = []
-        obj = extension_cache.get(code, nil)
+        obj = _extension_cache.get(code, nil)
         if obj is not nil:
             self.append(obj)
             return
-        key = inverted_registry.get(code)
+        key = _inverted_registry.get(code)
         if not key:
             raise ValueError("unregistered extension code %d" % code)
         obj = self.find_class(*key)
-        extension_cache[code] = obj
+        _extension_cache[code] = obj
         self.append(obj)
 
     def find_class(self, module, name):
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 3d245d8..f5aadd2 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -102,11 +102,11 @@
 static PyObject *dispatch_table;
 
 /* For EXT[124] opcodes. */
-/* copy_reg.extension_registry, {(module_name, function_name): code} */
+/* copy_reg._extension_registry, {(module_name, function_name): code} */
 static PyObject *extension_registry;
-/* copy_reg.inverted_registry, {code: (module_name, function_name)} */
+/* copy_reg._inverted_registry, {code: (module_name, function_name)} */
 static PyObject *inverted_registry;
-/* copy_reg.extension_cache, {code: object} */
+/* copy_reg._extension_cache, {code: object} */
 static PyObject *extension_cache;
 
 static PyObject *__class___str, *__getinitargs___str, *__dict___str,
@@ -5092,15 +5092,15 @@
 	if (!dispatch_table) return -1;
 
 	extension_registry = PyObject_GetAttrString(copy_reg,
-				"extension_registry");
+				"_extension_registry");
 	if (!extension_registry) return -1;
 
 	inverted_registry = PyObject_GetAttrString(copy_reg,
-				"inverted_registry");
+				"_inverted_registry");
 	if (!inverted_registry) return -1;
 
 	extension_cache = PyObject_GetAttrString(copy_reg,
-				"extension_cache");
+				"_extension_cache");
 	if (!extension_cache) return -1;
 
 	Py_DECREF(copy_reg);
