diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst
index 6de3fb0..1f6b1e8 100644
--- a/Doc/c-api/import.rst
+++ b/Doc/c-api/import.rst
@@ -178,7 +178,8 @@
 .. c:function:: const char * PyImport_GetMagicTag()
 
    Return the magic tag string for :pep:`3147` format Python bytecode file
-   names.
+   names.  Keep in mind that the value at ``sys.implementation.cache_tag`` is
+   authoritative and should be used instead of this function.
 
    .. versionadded:: 3.2
 
diff --git a/Python/import.c b/Python/import.c
index c31819d..1592045 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -116,7 +116,7 @@
 */
 #define MAGIC (3230 | ((long)'\r'<<16) | ((long)'\n'<<24))
 #define CACHEDIR "__pycache__"
-/* Current magic word and string tag as globals. */
+/* Current magic word as global. */
 static long pyc_magic = MAGIC;
 
 /* See _PyImport_FixupExtensionObject() below */
@@ -520,22 +520,12 @@
 }
 
 
+extern const char * _PySys_ImplCacheTag;
+
 const char *
 PyImport_GetMagicTag(void)
 {
-    PyObject *impl, *tag;
-    const char *raw_tag;
-
-    /* We could also pull it from imp or importlib. */
-    impl = PySys_GetObject("implementation");
-    if (impl == NULL)
-        return NULL;
-    tag = PyObject_GetAttrString(impl, "cache_tag");
-    if (tag == NULL)
-        return NULL;
-    raw_tag = PyUnicode_DATA(tag);
-    Py_DECREF(tag);
-    return raw_tag;
+    return _PySys_ImplCacheTag;
 }
 
 
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index ce5e825..20bfa55 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1478,6 +1478,22 @@
     return version_info;
 }
 
+/* sys.implementation values */
+#define NAME "cpython"
+const char *_PySys_ImplName = NAME;
+#define QUOTE(arg) #arg
+#define STRIFY(name) QUOTE(name)
+#define MAJOR STRIFY(PY_MAJOR_VERSION)
+#define MINOR STRIFY(PY_MINOR_VERSION)
+#define TAG NAME "-" MAJOR MINOR;
+const char *_PySys_ImplCacheTag = TAG;
+#undef NAME
+#undef QUOTE
+#undef STRIFY
+#undef MAJOR
+#undef MINOR
+#undef TAG
+
 static PyObject *
 make_impl_info(PyObject *version_info)
 {
@@ -1490,13 +1506,7 @@
 
     /* populate the dict */
 
-#define NAME "cpython"
-#define QUOTE(arg) #arg
-#define STRIFY(name) QUOTE(name)
-#define MAJOR STRIFY(PY_MAJOR_VERSION)
-#define MINOR STRIFY(PY_MINOR_VERSION)
-#define TAG NAME "-" MAJOR MINOR
-    value = PyUnicode_FromString(NAME);
+    value = PyUnicode_FromString(_PySys_ImplName);
     if (value == NULL)
         goto error;
     res = PyDict_SetItemString(impl_info, "name", value);
@@ -1504,19 +1514,13 @@
     if (res < 0)
         goto error;
 
-    value = PyUnicode_FromString(TAG);
+    value = PyUnicode_FromString(_PySys_ImplCacheTag);
     if (value == NULL)
         goto error;
     res = PyDict_SetItemString(impl_info, "cache_tag", value);
     Py_DECREF(value);
     if (res < 0)
         goto error;
-#undef NAME
-#undef QUOTE
-#undef STRIFY
-#undef MAJOR
-#undef MINOR
-#undef TAG
 
     res = PyDict_SetItemString(impl_info, "version", version_info);
     if (res < 0)
