diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 592f4dd..6e613eb 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -1984,43 +1984,6 @@
     Py_UNICODE c
     );
 
-PyAPI_FUNC(size_t) Py_UCS4_strlen(
-    const Py_UCS4 *u
-    );
-
-PyAPI_FUNC(Py_UCS4*) Py_UCS4_strcpy(
-    Py_UCS4 *s1,
-    const Py_UCS4 *s2);
-
-PyAPI_FUNC(Py_UCS4*) Py_UCS4_strcat(
-    Py_UCS4 *s1, const Py_UCS4 *s2);
-
-PyAPI_FUNC(Py_UCS4*) Py_UCS4_strncpy(
-    Py_UCS4 *s1,
-    const Py_UCS4 *s2,
-    size_t n);
-
-PyAPI_FUNC(int) Py_UCS4_strcmp(
-    const Py_UCS4 *s1,
-    const Py_UCS4 *s2
-    );
-
-PyAPI_FUNC(int) Py_UCS4_strncmp(
-    const Py_UCS4 *s1,
-    const Py_UCS4 *s2,
-    size_t n
-    );
-
-PyAPI_FUNC(Py_UCS4*) Py_UCS4_strchr(
-    const Py_UCS4 *s,
-    Py_UCS4 c
-    );
-
-PyAPI_FUNC(Py_UCS4*) Py_UCS4_strrchr(
-    const Py_UCS4 *s,
-    Py_UCS4 c
-    );
-
 /* Create a copy of a unicode string ending with a nul character. Return NULL
    and raise a MemoryError exception on memory allocation failure, otherwise
    return a new allocated buffer (use PyMem_Free() to free the buffer). */
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 6c73779..7147f04 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -14195,16 +14195,96 @@
     return (PyObject *)it;
 }
 
-#define UNIOP(x) Py_UNICODE_##x
-#define UNIOP_t Py_UNICODE
-#include "uniops.h"
-#undef UNIOP
-#undef UNIOP_t
-#define UNIOP(x) Py_UCS4_##x
-#define UNIOP_t Py_UCS4
-#include "uniops.h"
-#undef UNIOP
-#undef UNIOP_t
+
+size_t
+Py_UNICODE_strlen(const Py_UNICODE *u)
+{
+    int res = 0;
+    while(*u++)
+        res++;
+    return res;
+}
+
+Py_UNICODE*
+Py_UNICODE_strcpy(Py_UNICODE *s1, const Py_UNICODE *s2)
+{
+    Py_UNICODE *u = s1;
+    while ((*u++ = *s2++));
+    return s1;
+}
+
+Py_UNICODE*
+Py_UNICODE_strncpy(Py_UNICODE *s1, const Py_UNICODE *s2, size_t n)
+{
+    Py_UNICODE *u = s1;
+    while ((*u++ = *s2++))
+        if (n-- == 0)
+            break;
+    return s1;
+}
+
+Py_UNICODE*
+Py_UNICODE_strcat(Py_UNICODE *s1, const Py_UNICODE *s2)
+{
+    Py_UNICODE *u1 = s1;
+    u1 += Py_UNICODE_strlen(u1);
+    Py_UNICODE_strcpy(u1, s2);
+    return s1;
+}
+
+int
+Py_UNICODE_strcmp(const Py_UNICODE *s1, const Py_UNICODE *s2)
+{
+    while (*s1 && *s2 && *s1 == *s2)
+        s1++, s2++;
+    if (*s1 && *s2)
+        return (*s1 < *s2) ? -1 : +1;
+    if (*s1)
+        return 1;
+    if (*s2)
+        return -1;
+    return 0;
+}
+
+int
+Py_UNICODE_strncmp(const Py_UNICODE *s1, const Py_UNICODE *s2, size_t n)
+{
+    register Py_UNICODE u1, u2;
+    for (; n != 0; n--) {
+        u1 = *s1;
+        u2 = *s2;
+        if (u1 != u2)
+            return (u1 < u2) ? -1 : +1;
+        if (u1 == '\0')
+            return 0;
+        s1++;
+        s2++;
+    }
+    return 0;
+}
+
+Py_UNICODE*
+Py_UNICODE_strchr(const Py_UNICODE *s, Py_UNICODE c)
+{
+    const Py_UNICODE *p;
+    for (p = s; *p; p++)
+        if (*p == c)
+            return (Py_UNICODE*)p;
+    return NULL;
+}
+
+Py_UNICODE*
+Py_UNICODE_strrchr(const Py_UNICODE *s, Py_UNICODE c)
+{
+    const Py_UNICODE *p;
+    p = s + Py_UNICODE_strlen(s);
+    while (p != s) {
+        p--;
+        if (*p == c)
+            return (Py_UNICODE*)p;
+    }
+    return NULL;
+}
 
 Py_UNICODE*
 PyUnicode_AsUnicodeCopy(PyObject *unicode)
diff --git a/Objects/uniops.h b/Objects/uniops.h
deleted file mode 100644
index 06a0b4e..0000000
--- a/Objects/uniops.h
+++ /dev/null
@@ -1,91 +0,0 @@
-
-size_t
-UNIOP(strlen)(const UNIOP_t *u)
-{
-    int res = 0;
-    while(*u++)
-        res++;
-    return res;
-}
-
-UNIOP_t*
-UNIOP(strcpy)(UNIOP_t *s1, const UNIOP_t *s2)
-{
-    UNIOP_t *u = s1;
-    while ((*u++ = *s2++));
-    return s1;
-}
-
-UNIOP_t*
-UNIOP(strncpy)(UNIOP_t *s1, const UNIOP_t *s2, size_t n)
-{
-    UNIOP_t *u = s1;
-    while ((*u++ = *s2++))
-        if (n-- == 0)
-            break;
-    return s1;
-}
-
-UNIOP_t*
-UNIOP(strcat)(UNIOP_t *s1, const UNIOP_t *s2)
-{
-    UNIOP_t *u1 = s1;
-    u1 += UNIOP(strlen(u1));
-    UNIOP(strcpy(u1, s2));
-    return s1;
-}
-
-int
-UNIOP(strcmp)(const UNIOP_t *s1, const UNIOP_t *s2)
-{
-    while (*s1 && *s2 && *s1 == *s2)
-        s1++, s2++;
-    if (*s1 && *s2)
-        return (*s1 < *s2) ? -1 : +1;
-    if (*s1)
-        return 1;
-    if (*s2)
-        return -1;
-    return 0;
-}
-
-int
-UNIOP(strncmp)(const UNIOP_t *s1, const UNIOP_t *s2, size_t n)
-{
-    register UNIOP_t u1, u2;
-    for (; n != 0; n--) {
-        u1 = *s1;
-        u2 = *s2;
-        if (u1 != u2)
-            return (u1 < u2) ? -1 : +1;
-        if (u1 == '\0')
-            return 0;
-        s1++;
-        s2++;
-    }
-    return 0;
-}
-
-UNIOP_t*
-UNIOP(strchr)(const UNIOP_t *s, UNIOP_t c)
-{
-    const UNIOP_t *p;
-    for (p = s; *p; p++)
-        if (*p == c)
-            return (UNIOP_t*)p;
-    return NULL;
-}
-
-UNIOP_t*
-UNIOP(strrchr)(const UNIOP_t *s, UNIOP_t c)
-{
-    const UNIOP_t *p;
-    p = s + UNIOP(strlen)(s);
-    while (p != s) {
-        p--;
-        if (*p == c)
-            return (UNIOP_t*)p;
-    }
-    return NULL;
-}
-
