diff --git a/Lib/configparser.py b/Lib/configparser.py
index b5623cd..aba444c 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -5,11 +5,11 @@
 the style of RFC 822.
 
 Intrinsic defaults can be specified by passing them into the
-SafeConfigParser constructor as a dictionary.
+ConfigParser constructor as a dictionary.
 
 class:
 
-SafeConfigParser -- responsible for parsing a list of
+ConfigParser -- responsible for parsing a list of
                     configuration files, and managing the parsed database.
 
     methods:
@@ -265,9 +265,8 @@
 class InterpolationSyntaxError(InterpolationError):
     """Raised when the source text contains invalid syntax.
 
-    Current implementation raises this exception only for SafeConfigParser
-    instances when the source text into which substitutions are made
-    does not conform to the required syntax.
+    Current implementation raises this exception when the source text into
+    which substitutions are made does not conform to the required syntax.
     """
 
 
@@ -369,7 +368,7 @@
 
 
 class BasicInterpolation(Interpolation):
-    """Interpolation as implemented in the classic SafeConfigParser.
+    """Interpolation as implemented in the classic ConfigParser.
 
     The option values can contain format strings which refer to other values in
     the same section, or values in the special default section.
@@ -512,8 +511,8 @@
                     "found: %r" % (rest,))
 
 
-class BrokenInterpolation(Interpolation):
-    """Deprecated interpolation as implemented in the classic ConfigParser.
+class LegacyInterpolation(Interpolation):
+    """Deprecated interpolation used in old versions of ConfigParser.
     Use BasicInterpolation or ExtendedInterpolation instead."""
 
     _KEYCRE = re.compile(r"%\(([^)]*)\)s|.")
@@ -598,12 +597,6 @@
                  default_section=DEFAULTSECT,
                  interpolation=_UNSET):
 
-        if self.__class__ is RawConfigParser:
-            warnings.warn(
-                "The RawConfigParser class will be removed in future versions."
-                " Use 'SafeConfigParser(interpolation=None)' instead.",
-                DeprecationWarning, stacklevel=2
-            )
         self._dict = dict_type
         self._sections = self._dict()
         self._defaults = self._dict()
@@ -1142,8 +1135,8 @@
         - we allow valueless options but the value is not None
 
         For compatibility reasons this method is not used in classic set()
-        for RawConfigParsers and ConfigParsers. It is invoked in every
-        case for mapping protocol access and in SafeConfigParser.set().
+        for RawConfigParsers. It is invoked in every case for mapping protocol
+        access and in ConfigParser.set().
         """
         if not isinstance(section, str):
             raise TypeError("section names must be strings")
@@ -1157,21 +1150,6 @@
 class ConfigParser(RawConfigParser):
     """ConfigParser implementing interpolation."""
 
-    _DEFAULT_INTERPOLATION = BrokenInterpolation()
-
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
-        if self.__class__ is ConfigParser:
-            warnings.warn(
-                "The ConfigParser class will be removed in future versions."
-                " Use SafeConfigParser instead.",
-                DeprecationWarning, stacklevel=2
-            )
-
-
-class SafeConfigParser(ConfigParser):
-    """ConfigParser implementing sane interpolation."""
-
     _DEFAULT_INTERPOLATION = BasicInterpolation()
 
     def set(self, section, option, value=None):
@@ -1188,6 +1166,19 @@
         super().add_section(section)
 
 
+class SafeConfigParser(ConfigParser):
+    """ConfigParser alias for backwards compatibility purposes."""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        warnings.warn(
+            "The SafeConfigParser class has been renamed to ConfigParser "
+            "in Python 3.2. This alias will be removed in future versions."
+            " Use ConfigParser directly instead.",
+            DeprecationWarning, stacklevel=2
+        )
+
+
 class SectionProxy(MutableMapping):
     """A proxy for a single section from a parser."""
 
