diff --git a/Doc/c-api/conversion.rst b/Doc/c-api/conversion.rst
index ad3f2fa..e5f83ff 100644
--- a/Doc/c-api/conversion.rst
+++ b/Doc/c-api/conversion.rst
@@ -51,21 +51,6 @@
 The following functions provide locale-independent string to number conversions.
 
 
-.. cfunction:: double PyOS_ascii_strtod(const char *nptr, char **endptr)
-
-   Convert a string to a :ctype:`double`. This function behaves like the Standard C
-   function :cfunc:`strtod` does in the C locale. It does this without changing the
-   current locale, since that would not be thread-safe.
-
-   :cfunc:`PyOS_ascii_strtod` should typically be used for reading configuration
-   files or other non-user input that should be locale independent.
-
-   See the Unix man page :manpage:`strtod(2)` for details.
-
-   .. deprecated:: 3.1
-      Use :cfunc:`PyOS_string_to_double` instead.
-
-
 .. cfunction:: double PyOS_string_to_double(const char *s, char **endptr, PyObject *overflow_exception)
 
    Convert a string ``s`` to a :ctype:`double`, raising a Python
@@ -100,20 +85,6 @@
    .. versionadded:: 3.1
 
 
-.. cfunction:: char* PyOS_ascii_formatd(char *buffer, size_t buf_len, const char *format, double d)
-
-   Convert a :ctype:`double` to a string using the ``'.'`` as the decimal
-   separator. *format* is a :cfunc:`printf`\ -style format string specifying the
-   number format. Allowed conversion characters are ``'e'``, ``'E'``, ``'f'``,
-   ``'F'``, ``'g'`` and ``'G'``.
-
-   The return value is a pointer to *buffer* with the converted string or NULL if
-   the conversion failed.
-
-   .. deprecated:: 3.1
-     Use :cfunc:`PyOS_double_to_string` instead.
-
-
 .. cfunction:: char* PyOS_double_to_string(double val, char format_code, int precision, int flags, int *ptype)
 
    Convert a :ctype:`double` *val* to a string using supplied
@@ -148,16 +119,6 @@
    .. versionadded:: 3.1
 
 
-.. cfunction:: double PyOS_ascii_atof(const char *nptr)
-
-   Convert a string to a :ctype:`double` in a locale-independent way.
-
-   See the Unix man page :manpage:`atof(2)` for details.
-
-   .. deprecated:: 3.1
-      Use :cfunc:`PyOS_string_to_double` instead.
-
-
 .. cfunction:: char* PyOS_stricmp(char *s1, char *s2)
 
    Case insensitive comparison of strings. The function works almost
diff --git a/Include/pystrtod.h b/Include/pystrtod.h
index b1d8786..d7bae12 100644
--- a/Include/pystrtod.h
+++ b/Include/pystrtod.h
@@ -6,9 +6,6 @@
 #endif
 
 
-PyAPI_FUNC(double) PyOS_ascii_strtod(const char *str, char **ptr);
-PyAPI_FUNC(double) PyOS_ascii_atof(const char *str);
-PyAPI_FUNC(char *) PyOS_ascii_formatd(char *buffer, size_t buf_len,  const char *format, double d);
 PyAPI_FUNC(double) PyOS_string_to_double(const char *str,
                                          char **endptr,
                                          PyObject *overflow_exception);
diff --git a/Lib/test/test_ascii_formatd.py b/Lib/test/test_ascii_formatd.py
deleted file mode 100644
index f61bc85..0000000
--- a/Lib/test/test_ascii_formatd.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# PyOS_ascii_formatd is deprecated and not called from anywhere in
-#  Python itself. So this module is the only place it gets tested.
-# Test that it works, and test that it's deprecated.
-
-import unittest
-from test.support import check_warnings, run_unittest, cpython_only
-
-class FormatDeprecationTests(unittest.TestCase):
-
-    @cpython_only
-    def testFormatDeprecation(self):
-        # delay importing ctypes until we know we're in CPython
-        from ctypes import (pythonapi, create_string_buffer, sizeof, byref,
-                            c_double)
-        PyOS_ascii_formatd = pythonapi.PyOS_ascii_formatd
-        buf = create_string_buffer(100)
-
-        with check_warnings() as w:
-            PyOS_ascii_formatd(byref(buf), sizeof(buf), b'%+.10f',
-                               c_double(10.0))
-            self.assertEqual(buf.value, b'+10.0000000000')
-
-        self.assertEqual(w.category, DeprecationWarning)
-
-class FormatTests(unittest.TestCase):
-    # ensure that, for the restricted set of format codes,
-    # %-formatting returns the same values os PyOS_ascii_formatd
-    @cpython_only
-    def testFormat(self):
-        # delay importing ctypes until we know we're in CPython
-        from ctypes import (pythonapi, create_string_buffer, sizeof, byref,
-                            c_double)
-        PyOS_ascii_formatd = pythonapi.PyOS_ascii_formatd
-        buf = create_string_buffer(100)
-
-        tests = [
-            ('%f', 100.0),
-            ('%g', 100.0),
-            ('%#g', 100.0),
-            ('%#.2g', 100.0),
-            ('%#.2g', 123.4567),
-            ('%#.2g', 1.234567e200),
-            ('%e', 1.234567e200),
-            ('%e', 1.234),
-            ('%+e', 1.234),
-            ('%-e', 1.234),
-            ]
-
-        with check_warnings():
-            for format, val in tests:
-                PyOS_ascii_formatd(byref(buf), sizeof(buf),
-                                   bytes(format, 'ascii'),
-                                   c_double(val))
-                self.assertEqual(buf.value, bytes(format % val, 'ascii'))
-
-
-def test_main():
-    run_unittest(FormatDeprecationTests, FormatTests)
-
-if __name__ == '__main__':
-    test_main()
diff --git a/Misc/NEWS b/Misc/NEWS
index 67a9300..021b31a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,11 @@
 Core and Builtins
 -----------------
 
+- Issue #5988: Remove deprecated functions PyOS_ascii_formatd,
+  PyOS_ascii_strtod, and PyOS_ascii_atof. Use PyOS_double_to_string
+  and PyOS_string_to_double instead. See issue #5835 for the original
+  deprecations.
+
 - Issue #7385: Fix a crash in `MemoryView_FromObject` when
   `PyObject_GetBuffer` fails.  Patch by Florent Xicluna.
 
diff --git a/PC/os2emx/python27.def b/PC/os2emx/python27.def
index 0776ced..7d05ec3 100644
--- a/PC/os2emx/python27.def
+++ b/PC/os2emx/python27.def
@@ -1048,11 +1048,6 @@
   "_PyThreadState_Current"
   "_PyThreadState_GetFrame"
 
-; From python26_s.lib(pystrtod)
-  "PyOS_ascii_strtod"
-  "PyOS_ascii_formatd"
-  "PyOS_ascii_atof"
-
 ; From python26_s.lib(pythonrun)
   "Py_IgnoreEnvironmentFlag"
   "Py_DebugFlag"
diff --git a/Python/pystrtod.c b/Python/pystrtod.c
index 5543c58..a1d7ff0 100644
--- a/Python/pystrtod.c
+++ b/Python/pystrtod.c
@@ -58,7 +58,7 @@
 }
 
 /**
- * PyOS_ascii_strtod:
+ * _PyOS_ascii_strtod:
  * @nptr:    the string to convert to a numeric value.
  * @endptr:  if non-%NULL, it returns the character after
  *           the last character used in the conversion.
@@ -88,7 +88,7 @@
 
 #ifndef PY_NO_SHORT_FLOAT_REPR
 
-double
+static double
 _PyOS_ascii_strtod(const char *nptr, char **endptr)
 {
 	double result;
@@ -121,7 +121,7 @@
    correctly rounded results.
 */
 
-double
+static double
 _PyOS_ascii_strtod(const char *nptr, char **endptr)
 {
 	char *fail_pos;
@@ -270,48 +270,10 @@
 
 #endif
 
-/* PyOS_ascii_strtod is DEPRECATED in Python 3.1 */
-
-double
-PyOS_ascii_strtod(const char *nptr, char **endptr)
-{
-	char *fail_pos;
-	const char *p;
-	double x;
-
-	if (PyErr_WarnEx(PyExc_DeprecationWarning,
-			 "PyOS_ascii_strtod and PyOS_ascii_atof are "
-			 "deprecated.  Use PyOS_string_to_double "
-			 "instead.", 1) < 0)
-		return -1.0;
-
-	/* _PyOS_ascii_strtod already does everything that we want,
-	   except that it doesn't parse leading whitespace */
-	p = nptr;
-	while (Py_ISSPACE(*p))
-		p++;
-	x = _PyOS_ascii_strtod(p, &fail_pos);
-	if (fail_pos == p)
-		fail_pos = (char *)nptr;
-	if (endptr)
-		*endptr = (char *)fail_pos;
-	return x;
-}
-
-/* PyOS_ascii_strtod is DEPRECATED in Python 3.1 */
-
-double
-PyOS_ascii_atof(const char *nptr)
-{
-	return PyOS_ascii_strtod(nptr, NULL);
-}
-
-/* PyOS_string_to_double is the recommended replacement for the deprecated
-   PyOS_ascii_strtod and PyOS_ascii_atof functions.  It converts a
-   null-terminated byte string s (interpreted as a string of ASCII characters)
-   to a float.  The string should not have leading or trailing whitespace (in
-   contrast, PyOS_ascii_strtod allows leading whitespace but not trailing
-   whitespace).  The conversion is independent of the current locale.
+/* PyOS_string_to_double converts a null-terminated byte string s (interpreted
+   as a string of ASCII characters) to a float.  The string should not have
+   leading or trailing whitespace.  The conversion is independent of the
+   current locale.
 
    If endptr is NULL, try to convert the whole string.  Raise ValueError and
    return -1.0 if the string is not a valid representation of a floating-point
@@ -369,6 +331,8 @@
 	return result;
 }
 
+#ifdef PY_NO_SHORT_FLOAT_REPR
+
 /* Given a string that may have a decimal point in the current
    locale, change it back to a dot.  Since the string cannot get
    longer, no need for a maximum buffer size parameter. */
@@ -618,12 +582,13 @@
 #define FLOAT_FORMATBUFLEN 120
 
 /**
- * PyOS_ascii_formatd:
+ * _PyOS_ascii_formatd:
  * @buffer: A buffer to place the resulting string in
  * @buf_size: The length of the buffer.
  * @format: The printf()-style format to use for the
  *          code to use for converting. 
  * @d: The #gdouble to convert
+ * @precision: The precision to use when formatting.
  *
  * Converts a #gdouble to a string, using the '.' as
  * decimal point. To format the number you pass in
@@ -636,7 +601,7 @@
  * Return value: The pointer to the buffer with the converted string.
  * On failure returns NULL but does not set any Python exception.
  **/
-char *
+static char *
 _PyOS_ascii_formatd(char       *buffer, 
 		   size_t      buf_size, 
 		   const char *format, 
@@ -716,22 +681,6 @@
 	return buffer;
 }
 
-char *
-PyOS_ascii_formatd(char       *buffer, 
-		   size_t      buf_size, 
-		   const char *format, 
-		   double      d)
-{
-	if (PyErr_WarnEx(PyExc_DeprecationWarning,
-			 "PyOS_ascii_formatd is deprecated, "
-			 "use PyOS_double_to_string instead", 1) < 0)
-		return NULL;
-
-	return _PyOS_ascii_formatd(buffer, buf_size, format, d, -1);
-}
-
-#ifdef PY_NO_SHORT_FLOAT_REPR
-
 /* The fallback code to use if _Py_dg_dtoa is not available. */
 
 PyAPI_FUNC(char *) PyOS_double_to_string(double val,
