diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 6841cea..1a43be5 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -14,11 +14,12 @@
 
 .. note::
 
-   Some ``camelCase`` names have been converted to their underscored
-   equivalents. Others have been replaced by properties.  Using the old methods
-   in 2.6 will trigger a :exc:`DeprecationWarning` when Python is run with the
-   :option:`-3` flag and a full :exc:`DeprecationWarning` in 3.0.  The old names
-   will be removed early in the 3.x series.
+   Starting with Python 2.6, this module provides PEP 8 compliant aliases and
+   properties to replace the ``camelCase`` names that were inspired by Java's
+   threading API. This updated API is compatible with that of the
+   :mod:`multiprocessing` module. However, no schedule has been set for the
+   deprecation of the ``camelCase`` names and they remain fully supported in
+   both Python 2.x and 3.x.
 
 This module defines the following functions and objects:
 
diff --git a/Lib/test/test_py3kwarn.py b/Lib/test/test_py3kwarn.py
index 1b487fe..8fa6135 100644
--- a/Lib/test/test_py3kwarn.py
+++ b/Lib/test/test_py3kwarn.py
@@ -272,41 +272,6 @@
                 def __hash__(self): pass
             self.assertEqual(len(w.warnings), 0)
 
-    def test_pep8ified_threading(self):
-        import threading
-
-        t = threading.Thread()
-        with catch_warning() as w:
-            msg = "isDaemon() is deprecated in favor of the " \
-                  "Thread.daemon property"
-            self.assertWarning(t.isDaemon(), w, msg)
-            w.reset()
-            msg = "setDaemon() is deprecated in favor of the " \
-                  "Thread.daemon property"
-            self.assertWarning(t.setDaemon(True), w, msg)
-            w.reset()
-            msg = "getName() is deprecated in favor of the " \
-                  "Thread.name property"
-            self.assertWarning(t.getName(), w, msg)
-            w.reset()
-            msg = "setName() is deprecated in favor of the " \
-                  "Thread.name property"
-            self.assertWarning(t.setName("name"), w, msg)
-            w.reset()
-            msg = "isAlive() is deprecated in favor of is_alive()"
-            self.assertWarning(t.isAlive(), w, msg)
-            w.reset()
-            e = threading.Event()
-            msg = "isSet() is deprecated in favor of is_set()"
-            self.assertWarning(e.isSet(), w, msg)
-            w.reset()
-            msg = "currentThread() is deprecated in favor of current_thread()"
-            self.assertWarning(threading.currentThread(), w, msg)
-            w.reset()
-            msg = "activeCount() is deprecated in favor of active_count()"
-            self.assertWarning(threading.activeCount(), w, msg)
-
-
 
 class TestStdlibRemovals(unittest.TestCase):
 
diff --git a/Lib/threading.py b/Lib/threading.py
index 7a58773..25eb9b6 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -15,6 +15,17 @@
 from traceback import format_exc as _format_exc
 from collections import deque
 
+# Note regarding PEP 8 compliant aliases
+#  This threading model was originally inspired by Java, and inherited
+# the convention of camelCase function and method names from that
+# language. While those names are not in any imminent danger of being
+# deprecated, starting with Python 2.6, the module now provides a
+# PEP 8 compliant alias for any such method name.
+# Using the new PEP 8 compliant names also facilitates substitution
+# with the multiprocessing module, which doesn't provide the old
+# Java inspired names.
+
+
 # Rename some stuff so "from threading import *" is safe
 __all__ = ['activeCount', 'active_count', 'Condition', 'currentThread',
            'current_thread', 'enumerate', 'Event',
@@ -33,19 +44,6 @@
 warnings.filterwarnings('ignore', category=DeprecationWarning,
                         module='threading', message='sys.exc_clear')
 
-
-def _old_api(callable, old_name):
-    if not _sys.py3kwarning:
-        return callable
-    @wraps(callable)
-    def old(*args, **kwargs):
-        warnings.warnpy3k("{0}() is deprecated in favor of {1}()"
-                          .format(old_name, callable.__name__),
-                          stacklevel=3)
-        return callable(*args, **kwargs)
-    old.__name__ = old_name
-    return old
-
 # Debug support (adapted from ihooks.py).
 # All the major classes here derive from _Verbose.  We force that to
 # be a new-style class so that all the major classes here are new-style.
@@ -287,10 +285,10 @@
             except ValueError:
                 pass
 
-    def notify_all(self):
+    def notifyAll(self):
         self.notify(len(self.__waiters))
 
-    notifyAll = _old_api(notify_all, "notifyAll")
+    notify_all = notifyAll
 
 
 def Semaphore(*args, **kwargs):
@@ -368,10 +366,10 @@
         self.__cond = Condition(Lock())
         self.__flag = False
 
-    def is_set(self):
+    def isSet(self):
         return self.__flag
 
-    isSet = _old_api(is_set, "isSet")
+    is_set = isSet
 
     def set(self):
         self.__cond.acquire()
@@ -666,11 +664,11 @@
         assert self.__initialized, "Thread.__init__() not called"
         return self.__ident
 
-    def is_alive(self):
+    def isAlive(self):
         assert self.__initialized, "Thread.__init__() not called"
         return self.__started.is_set() and not self.__stopped
 
-    isAlive = _old_api(is_alive, "isAlive")
+    is_alive = isAlive
 
     @property
     def daemon(self):
@@ -686,23 +684,15 @@
         self.__daemonic = daemonic
 
     def isDaemon(self):
-        warnings.warnpy3k("isDaemon() is deprecated in favor of the " \
-                          "Thread.daemon property")
         return self.daemon
 
     def setDaemon(self, daemonic):
-        warnings.warnpy3k("setDaemon() is deprecated in favor of the " \
-                          "Thread.daemon property")
         self.daemon = daemonic
 
     def getName(self):
-        warnings.warnpy3k("getName() is deprecated in favor of the " \
-                          "Thread.name property")
         return self.name
 
     def setName(self, name):
-        warnings.warnpy3k("setName() is deprecated in favor of the " \
-                          "Thread.name property")
         self.name = name
 
 # The timer class was contributed by Itamar Shtull-Trauring
@@ -803,22 +793,22 @@
 
 # Global API functions
 
-def current_thread():
+def currentThread():
     try:
         return _active[_get_ident()]
     except KeyError:
         ##print "current_thread(): no current thread for", _get_ident()
         return _DummyThread()
 
-currentThread = _old_api(current_thread, "currentThread")
+current_thread = currentThread
 
-def active_count():
+def activeCount():
     _active_limbo_lock.acquire()
     count = len(_active) + len(_limbo)
     _active_limbo_lock.release()
     return count
 
-activeCount = _old_api(active_count, "activeCount")
+active_count = activeCount
 
 def enumerate():
     _active_limbo_lock.acquire()
diff --git a/Misc/NEWS b/Misc/NEWS
index 6f012ab..73bcf08 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -53,6 +53,8 @@
 Library
 -------
 
+- The deprecation warnings for the old camelCase threading API were removed.
+
 - logging: fixed lack of use of encoding attribute specified on a stream.
 
 - Silenced a trivial compiler warning in the sqlite module.
