diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c
index 9da255e..8cda642 100644
--- a/Modules/_bisectmodule.c
+++ b/Modules/_bisectmodule.c
@@ -86,7 +86,7 @@
         if (PyList_Insert(list, index, item) < 0)
             return NULL;
     } else {
-        _Py_identifier(insert);
+        _Py_IDENTIFIER(insert);
 
         result = _PyObject_CallMethodId(list, &PyId_insert, "nO", index, item);
         if (result == NULL)
@@ -188,7 +188,7 @@
         if (PyList_Insert(list, index, item) < 0)
             return NULL;
     } else {
-        _Py_identifier(insert);
+        _Py_IDENTIFIER(insert);
 
         result = _PyObject_CallMethodId(list, &PyId_insert, "iO", index, item);
         if (result == NULL)
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 0c68aa8..efce5ce 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -767,7 +767,7 @@
 deque_reduce(dequeobject *deque)
 {
     PyObject *dict, *result, *aslist;
-    _Py_identifier(__dict__);
+    _Py_IDENTIFIER(__dict__);
 
     dict = _PyObject_GetAttrId((PyObject *)deque, &PyId___dict__);
     if (dict == NULL)
@@ -1335,7 +1335,7 @@
     PyObject *items;
     PyObject *iter;
     PyObject *result;
-    _Py_identifier(items);
+    _Py_IDENTIFIER(items);
 
     if (dd->default_factory == NULL || dd->default_factory == Py_None)
         args = PyTuple_New(0);
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 59c74e7..627c3b1 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -1317,7 +1317,7 @@
 {
     PyObject * output_file, * dialect = NULL;
     WriterObj * self = PyObject_GC_New(WriterObj, &Writer_Type);
-    _Py_identifier(write);
+    _Py_IDENTIFIER(write);
 
     if (!self)
         return NULL;
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 1d7cf94..e08dea1a 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -3679,7 +3679,7 @@
             PyTuple_SET_ITEM(tup, index, v);
             index++;
         } else if (bit & outmask) {
-            _Py_identifier(__ctypes_from_outparam__);
+            _Py_IDENTIFIER(__ctypes_from_outparam__);
 
             v = PyTuple_GET_ITEM(callargs, i);
             v = _PyObject_CallMethodId(v, &PyId___ctypes_from_outparam__, NULL);
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index adc2870..dd441f5 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -1687,8 +1687,8 @@
     PyObject *state;
     PyObject *result;
     PyObject *tmp;
-    _Py_identifier(__new__);
-    _Py_identifier(__setstate__);
+    _Py_IDENTIFIER(__new__);
+    _Py_IDENTIFIER(__setstate__);
 
     if (!PyArg_ParseTuple(args, "OO", &typ, &state))
         return NULL;
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 7c89acc..dddaa3a 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -1418,7 +1418,7 @@
     while (1) {
         char buf[BUFSIZ];
         Py_ssize_t n = fread(buf, 1, BUFSIZ, fp);
-        _Py_identifier(write);
+        _Py_IDENTIFIER(write);
 
         if (n <= 0)
             break;
@@ -1913,7 +1913,7 @@
     WINDOW *win;
 
     PyCursesInitialised;
-    _Py_identifier(read);
+    _Py_IDENTIFIER(read);
 
     strcpy(fn, "/tmp/py.curses.getwin.XXXXXX");
     fd = mkstemp(fn);
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index 4dceaa9..316e1d7 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -946,7 +946,7 @@
 call_tzname(PyObject *tzinfo, PyObject *tzinfoarg)
 {
     PyObject *result;
-    _Py_identifier(tzname);
+    _Py_IDENTIFIER(tzname);
 
     assert(tzinfo != NULL);
     assert(check_tzinfo_subclass(tzinfo) >= 0);
@@ -1079,7 +1079,7 @@
     PyObject *temp;
     PyObject *tzinfo = get_tzinfo_member(object);
     PyObject *Zreplacement = PyUnicode_FromStringAndSize(NULL, 0);
-    _Py_identifier(replace);
+    _Py_IDENTIFIER(replace);
 	
     if (Zreplacement == NULL)
         return NULL;
@@ -1289,7 +1289,7 @@
             goto Done;
         format = PyUnicode_FromString(PyBytes_AS_STRING(newfmt));
         if (format != NULL) {
-            _Py_identifier(strftime);
+            _Py_IDENTIFIER(strftime);
 
             result = _PyObject_CallMethodId(time, &PyId_strftime, "OO",
                                             format, timetuple, NULL);
@@ -1318,7 +1318,7 @@
     PyObject *time = PyImport_ImportModuleNoBlock("time");
 
     if (time != NULL) {
-        _Py_identifier(time);
+        _Py_IDENTIFIER(time);
 
         result = _PyObject_CallMethodId(time, &PyId_time, "()");
         Py_DECREF(time);
@@ -1337,7 +1337,7 @@
 
     time = PyImport_ImportModuleNoBlock("time");
     if (time != NULL) {
-        _Py_identifier(struct_time);
+        _Py_IDENTIFIER(struct_time);
 
         result = _PyObject_CallMethodId(time, &PyId_struct_time,
                                         "((iiiiiiiii))",
@@ -1578,7 +1578,7 @@
     PyObject *result = NULL;
     PyObject *pyus_in = NULL, *temp, *pyus_out;
     PyObject *ratio = NULL;
-    _Py_identifier(as_integer_ratio);
+    _Py_IDENTIFIER(as_integer_ratio);
 
     pyus_in = delta_to_microseconds(delta);
     if (pyus_in == NULL)
@@ -1677,7 +1677,7 @@
     PyObject *result = NULL;
     PyObject *pyus_in = NULL, *temp, *pyus_out;
     PyObject *ratio = NULL;
-    _Py_identifier(as_integer_ratio);
+    _Py_IDENTIFIER(as_integer_ratio);
 
     pyus_in = delta_to_microseconds(delta);
     if (pyus_in == NULL)
@@ -2473,7 +2473,7 @@
 {
     PyObject *time;
     PyObject *result;
-    _Py_identifier(fromtimestamp);
+    _Py_IDENTIFIER(fromtimestamp);
 
     time = time_time();
     if (time == NULL)
@@ -2626,7 +2626,7 @@
 static PyObject *
 date_str(PyDateTime_Date *self)
 {
-    _Py_identifier(isoformat);
+    _Py_IDENTIFIER(isoformat);
 
     return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
 }
@@ -2647,7 +2647,7 @@
     PyObject *result;
     PyObject *tuple;
     PyObject *format;
-    _Py_identifier(timetuple);
+    _Py_IDENTIFIER(timetuple);
     static char *keywords[] = {"format", NULL};
 
     if (! PyArg_ParseTupleAndKeywords(args, kw, "U:strftime", keywords,
@@ -2667,7 +2667,7 @@
 date_format(PyDateTime_Date *self, PyObject *args)
 {
     PyObject *format;
-    _Py_identifier(strftime);
+    _Py_IDENTIFIER(strftime);
 
     if (!PyArg_ParseTuple(args, "U:__format__", &format))
         return NULL;
@@ -3077,8 +3077,8 @@
 {
     PyObject *args, *state, *tmp;
     PyObject *getinitargs, *getstate;
-    _Py_identifier(__getinitargs__);
-    _Py_identifier(__getstate__);
+    _Py_IDENTIFIER(__getinitargs__);
+    _Py_IDENTIFIER(__getstate__);
 
     tmp = PyTuple_New(0);
     if (tmp == NULL)
@@ -3592,7 +3592,7 @@
 static PyObject *
 time_str(PyDateTime_Time *self)
 {
-    _Py_identifier(isoformat);
+    _Py_IDENTIFIER(isoformat);
 
     return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "()");
 }
@@ -4173,7 +4173,7 @@
     if (self != NULL && tzinfo != Py_None) {
         /* Convert UTC to tzinfo's zone. */
         PyObject *temp = self;
-        _Py_identifier(fromutc);
+        _Py_IDENTIFIER(fromutc);
 
         self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self);
         Py_DECREF(temp);
@@ -4212,7 +4212,7 @@
     if (self != NULL && tzinfo != Py_None) {
         /* Convert UTC to tzinfo's zone. */
         PyObject *temp = self;
-        _Py_identifier(fromutc);
+        _Py_IDENTIFIER(fromutc);
 
         self = _PyObject_CallMethodId(tzinfo, &PyId_fromutc, "O", self);
         Py_DECREF(temp);
@@ -4239,7 +4239,7 @@
 {
     static PyObject *module = NULL;
     PyObject *string, *format;
-    _Py_identifier(_strptime_datetime);
+    _Py_IDENTIFIER(_strptime_datetime);
 
     if (!PyArg_ParseTuple(args, "UU:strptime", &string, &format))
         return NULL;
@@ -4495,7 +4495,7 @@
 static PyObject *
 datetime_str(PyDateTime_DateTime *self)
 {
-    _Py_identifier(isoformat);
+    _Py_IDENTIFIER(isoformat);
 
     return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, "(s)", " ");
 }
@@ -4704,7 +4704,7 @@
     PyObject *offset;
     PyObject *temp;
     PyObject *tzinfo;
-    _Py_identifier(fromutc);
+    _Py_IDENTIFIER(fromutc);
     static char *keywords[] = {"tz", NULL};
 
     if (! PyArg_ParseTupleAndKeywords(args, kw, "O!:astimezone", keywords,
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index fcd1271..1fb6038 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -797,7 +797,7 @@
         return NULL;
 
     if (checkpath(tag) || namespaces != Py_None) {
-        _Py_identifier(find);
+        _Py_IDENTIFIER(find);
         return _PyObject_CallMethodId(
             elementpath_obj, &PyId_find, "OOO", self, tag, namespaces
             );
@@ -825,7 +825,7 @@
     PyObject* tag;
     PyObject* default_value = Py_None;
     PyObject* namespaces = Py_None;
-    _Py_identifier(findtext);
+    _Py_IDENTIFIER(findtext);
 
     if (!PyArg_ParseTuple(args, "O|OO:findtext", &tag, &default_value, &namespaces))
         return NULL;
@@ -868,7 +868,7 @@
         return NULL;
 
     if (checkpath(tag) || namespaces != Py_None) {
-        _Py_identifier(findall);
+        _Py_IDENTIFIER(findall);
         return _PyObject_CallMethodId(
             elementpath_obj, &PyId_findall, "OOO", self, tag, namespaces
             );
@@ -900,7 +900,7 @@
 {
     PyObject* tag;
     PyObject* namespaces = Py_None;
-    _Py_identifier(iterfind);
+    _Py_IDENTIFIER(iterfind);
 
     if (!PyArg_ParseTuple(args, "O|O:iterfind", &tag, &namespaces))
         return NULL;
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index 9061a41..2ad002e 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -225,8 +225,8 @@
 
     PyObject *raw, *modeobj = NULL, *buffer = NULL, *wrapper = NULL;
 
-    _Py_identifier(isatty);
-    _Py_identifier(fileno);
+    _Py_IDENTIFIER(isatty);
+    _Py_IDENTIFIER(fileno);
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|sizzzi:open", kwlist,
                                      &file, &mode, &buffering,
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index c72bfb9..880ed78 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -13,17 +13,17 @@
 #include "pythread.h"
 #include "_iomodule.h"
 
-_Py_identifier(close);
-_Py_identifier(_dealloc_warn);
-_Py_identifier(flush);
-_Py_identifier(isatty);
-_Py_identifier(peek);
-_Py_identifier(read);
-_Py_identifier(read1);
-_Py_identifier(readable);
-_Py_identifier(readinto);
-_Py_identifier(writable);
-_Py_identifier(write);
+_Py_IDENTIFIER(close);
+_Py_IDENTIFIER(_dealloc_warn);
+_Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(isatty);
+_Py_IDENTIFIER(peek);
+_Py_IDENTIFIER(read);
+_Py_IDENTIFIER(read1);
+_Py_IDENTIFIER(readable);
+_Py_IDENTIFIER(readinto);
+_Py_IDENTIFIER(writable);
+_Py_IDENTIFIER(write);
 
 /*
  * BufferedIOBase class, inherits from IOBase.
@@ -50,7 +50,7 @@
     Py_buffer buf;
     Py_ssize_t len;
     PyObject *data;
-    _Py_identifier(read);
+    _Py_IDENTIFIER(read);
 
     if (!PyArg_ParseTuple(args, "w*:readinto", &buf)) {
         return NULL;
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index c6b89f3..acb0097 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -122,7 +122,7 @@
 static PyObject *
 fileio_close(fileio *self)
 {
-    _Py_identifier(close);
+    _Py_IDENTIFIER(close);
     if (!self->closefd) {
         self->fd = -1;
         Py_RETURN_NONE;
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index 6a94a04..52f6aa0 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -97,7 +97,7 @@
 static PyObject *
 iobase_tell(PyObject *self, PyObject *args)
 {
-    _Py_identifier(seek);
+    _Py_IDENTIFIER(seek);
 
     return _PyObject_CallMethodId(self, &PyId_seek, "ii", 0, 1);
 }
@@ -466,7 +466,7 @@
     int has_peek = 0;
     PyObject *buffer, *result;
     Py_ssize_t old_size = -1;
-    _Py_identifier(read);
+    _Py_IDENTIFIER(read);
 
     if (!PyArg_ParseTuple(args, "|O&:readline", &_PyIO_ConvertSsize_t, &limit)) {
         return NULL;
@@ -484,7 +484,7 @@
         PyObject *b;
 
         if (has_peek) {
-            _Py_identifier(peek);
+            _Py_IDENTIFIER(peek);
             PyObject *readahead = _PyObject_CallMethodId(self, &PyId_peek, "i", 1);
 
             if (readahead == NULL)
@@ -606,7 +606,7 @@
         /* XXX special-casing this made sense in the Python version in order
            to remove the bytecode interpretation overhead, but it could
            probably be removed here. */
-        _Py_identifier(extend);
+        _Py_IDENTIFIER(extend);
         PyObject *ret = _PyObject_CallMethodId(result, &PyId_extend, "O", self);
 
         if (ret == NULL) {
@@ -789,7 +789,7 @@
     }
 
     if (n < 0) {
-        _Py_identifier(readall);
+        _Py_IDENTIFIER(readall);
 
         return _PyObject_CallMethodId(self, &PyId_readall, NULL);
     }
@@ -833,7 +833,7 @@
         return NULL;
 
     while (1) {
-        _Py_identifier(read);
+        _Py_IDENTIFIER(read);
         PyObject *data = _PyObject_CallMethodId(self, &PyId_read,
                                                 "i", DEFAULT_BUFFER_SIZE);
         if (!data) {
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 2ded719..c63c3c7 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -11,23 +11,23 @@
 #include "structmember.h"
 #include "_iomodule.h"
 
-_Py_identifier(close);
-_Py_identifier(_dealloc_warn);
-_Py_identifier(decode);
-_Py_identifier(device_encoding);
-_Py_identifier(fileno);
-_Py_identifier(flush);
-_Py_identifier(getpreferredencoding);
-_Py_identifier(isatty);
-_Py_identifier(read);
-_Py_identifier(readable);
-_Py_identifier(replace);
-_Py_identifier(reset);
-_Py_identifier(seek);
-_Py_identifier(seekable);
-_Py_identifier(setstate);
-_Py_identifier(tell);
-_Py_identifier(writable);
+_Py_IDENTIFIER(close);
+_Py_IDENTIFIER(_dealloc_warn);
+_Py_IDENTIFIER(decode);
+_Py_IDENTIFIER(device_encoding);
+_Py_IDENTIFIER(fileno);
+_Py_IDENTIFIER(flush);
+_Py_IDENTIFIER(getpreferredencoding);
+_Py_IDENTIFIER(isatty);
+_Py_IDENTIFIER(read);
+_Py_IDENTIFIER(readable);
+_Py_IDENTIFIER(replace);
+_Py_IDENTIFIER(reset);
+_Py_IDENTIFIER(seek);
+_Py_IDENTIFIER(seekable);
+_Py_IDENTIFIER(setstate);
+_Py_IDENTIFIER(tell);
+_Py_IDENTIFIER(writable);
 
 /* TextIOBase */
 
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index ad185a7..2c29b20 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -826,7 +826,7 @@
 static int
 _Pickler_SetOutputStream(PicklerObject *self, PyObject *file)
 {
-    _Py_identifier(write);
+    _Py_IDENTIFIER(write);
     assert(file != NULL);
     self->write = _PyObject_GetAttrId(file, &PyId_write);
     if (self->write == NULL) {
@@ -1174,9 +1174,9 @@
 static int
 _Unpickler_SetInputStream(UnpicklerObject *self, PyObject *file)
 {
-    _Py_identifier(peek);
-    _Py_identifier(read);
-    _Py_identifier(readline);
+    _Py_IDENTIFIER(peek);
+    _Py_IDENTIFIER(read);
+    _Py_IDENTIFIER(readline);
 
     self->peek = _PyObject_GetAttrId(file, &PyId_peek);
     if (self->peek == NULL) {
@@ -2492,7 +2492,7 @@
             status = batch_dict_exact(self, obj);
             Py_LeaveRecursiveCall();
         } else {
-            _Py_identifier(items);
+            _Py_IDENTIFIER(items);
 
             items = _PyObject_CallMethodId(obj, &PyId_items, "()");
             if (items == NULL)
@@ -3394,7 +3394,7 @@
     PyObject *file;
     PyObject *proto_obj = NULL;
     PyObject *fix_imports = Py_True;
-    _Py_identifier(persistent_id);
+    _Py_IDENTIFIER(persistent_id);
 
     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|OO:Pickler",
                                      kwlist, &file, &proto_obj, &fix_imports))
@@ -3781,7 +3781,7 @@
 static PyObject *
 find_class(UnpicklerObject *self, PyObject *module_name, PyObject *global_name)
 {
-    _Py_identifier(find_class);
+    _Py_IDENTIFIER(find_class);
 
     return _PyObject_CallMethodId((PyObject *)self, &PyId_find_class, "OO",
                                   module_name, global_name);
@@ -4397,7 +4397,7 @@
         result = PyObject_CallObject(cls, args);
     }
     else {
-        _Py_identifier(__new__);
+        _Py_IDENTIFIER(__new__);
 
         result = _PyObject_CallMethodId(cls, &PyId___new__, "O", cls);
     }
@@ -4940,7 +4940,7 @@
     }
     else {
         PyObject *append_func;
-        _Py_identifier(append);
+        _Py_IDENTIFIER(append);
 
         append_func = _PyObject_GetAttrId(list, &PyId_append);
         if (append_func == NULL)
@@ -5029,7 +5029,7 @@
     PyObject *state, *inst, *slotstate;
     PyObject *setstate;
     int status = 0;
-    _Py_identifier(__setstate__);
+    _Py_IDENTIFIER(__setstate__);
 
     /* Stack is ... instance, state.  We want to leave instance at
      * the stack top, possibly mutated via instance.__setstate__(state).
@@ -5086,7 +5086,7 @@
         PyObject *dict;
         PyObject *d_key, *d_value;
         Py_ssize_t i;
-        _Py_identifier(__dict__);
+        _Py_IDENTIFIER(__dict__);
 
         if (!PyDict_Check(state)) {
             PyErr_SetString(UnpicklingError, "state is not a dictionary");
@@ -5592,7 +5592,7 @@
         return -1;
 
     if (PyObject_HasAttrString((PyObject *)self, "persistent_load")) {
-        _Py_identifier(persistent_load);
+        _Py_IDENTIFIER(persistent_load);
         self->pers_func = _PyObject_GetAttrId((PyObject *)self,
                                               &PyId_persistent_load);
         if (self->pers_func == NULL)
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index e6a9283..301f2a5 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -18,7 +18,7 @@
 static int _enable_gc(PyObject *gc_module)
 {
     PyObject *result;
-    _Py_identifier(enable);
+    _Py_IDENTIFIER(enable);
 
     result = _PyObject_CallMethodId(gc_module, &PyId_enable, NULL);
     if (result == NULL)
@@ -251,8 +251,8 @@
     /* We need to call gc.disable() when we'll be calling preexec_fn */
     if (preexec_fn != Py_None) {
         PyObject *result;
-        _Py_identifier(isenabled);
-        _Py_identifier(disable);
+        _Py_IDENTIFIER(isenabled);
+        _Py_IDENTIFIER(disable);
         
         gc_module = PyImport_ImportModule("gc");
         if (gc_module == NULL)
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index c2f218f..5cbf418 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -675,7 +675,7 @@
 {
     PyObject* function_result = NULL;
     PyObject** aggregate_instance;
-    _Py_identifier(finalize);
+    _Py_IDENTIFIER(finalize);
 
 #ifdef WITH_THREAD
     PyGILState_STATE threadstate;
@@ -1231,7 +1231,7 @@
     PyObject* cursor = 0;
     PyObject* result = 0;
     PyObject* method = 0;
-    _Py_identifier(cursor);
+    _Py_IDENTIFIER(cursor);
 
     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
     if (!cursor) {
@@ -1261,7 +1261,7 @@
     PyObject* cursor = 0;
     PyObject* result = 0;
     PyObject* method = 0;
-    _Py_identifier(cursor);
+    _Py_IDENTIFIER(cursor);
 
     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
     if (!cursor) {
@@ -1291,7 +1291,7 @@
     PyObject* cursor = 0;
     PyObject* result = 0;
     PyObject* method = 0;
-    _Py_identifier(cursor);
+    _Py_IDENTIFIER(cursor);
 
     cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, "");
     if (!cursor) {
@@ -1441,7 +1441,7 @@
     PyObject* name;
     PyObject* retval;
     Py_ssize_t i, len;
-    _Py_identifier(upper);
+    _Py_IDENTIFIER(upper);
     char *uppercase_name_str;
     int rc;
     unsigned int kind;
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index b47fed4..75ee73a 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -150,7 +150,7 @@
 {
     PyObject* upcase_key;
     PyObject* retval;
-    _Py_identifier(upper);
+    _Py_IDENTIFIER(upper);
 
     upcase_key = _PyObject_CallMethodId(key, &PyId_upper, "");
     if (!upcase_key) {
diff --git a/Modules/_sqlite/microprotocols.c b/Modules/_sqlite/microprotocols.c
index c0f5e22..2261b80 100644
--- a/Modules/_sqlite/microprotocols.c
+++ b/Modules/_sqlite/microprotocols.c
@@ -95,7 +95,7 @@
 
     /* try to have the protocol adapt this object*/
     if (PyObject_HasAttrString(proto, "__adapt__")) {
-        _Py_identifier(__adapt__);
+        _Py_IDENTIFIER(__adapt__);
         PyObject *adapted = _PyObject_CallMethodId(proto, &PyId___adapt__, "O", obj);
 
         if (adapted) {
@@ -112,7 +112,7 @@
 
     /* and finally try to have the object adapt itself */
     if (PyObject_HasAttrString(obj, "__conform__")) {
-        _Py_identifier(__conform__);
+        _Py_IDENTIFIER(__conform__);
         PyObject *adapted = _PyObject_CallMethodId(obj, &PyId___conform__,"O", proto);
 
         if (adapted) {
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 20e1ec7..406d787 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -179,7 +179,7 @@
     PyObject* name = NULL;
     PyObject* callable;
     PyObject* retval = NULL;
-    _Py_identifier(upper);
+    _Py_IDENTIFIER(upper);
 
     if (!PyArg_ParseTuple(args, "UO", &orig_name, &callable)) {
         return NULL;
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index cb86de7..b2d368d 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1253,7 +1253,7 @@
     PyObject *f, *b, *res;
     Py_ssize_t itemsize = self->ob_descr->itemsize;
     Py_ssize_t n, nbytes;
-    _Py_identifier(read);
+    _Py_IDENTIFIER(read);
     int not_enough_bytes;
 
     if (!PyArg_ParseTuple(args, "On:fromfile", &f, &n))
@@ -1322,7 +1322,7 @@
         char* ptr = self->ob_item + i*BLOCKSIZE;
         Py_ssize_t size = BLOCKSIZE;
         PyObject *bytes, *res;
-        _Py_identifier(write);
+        _Py_IDENTIFIER(write);
 
         if (i*BLOCKSIZE + size > nbytes)
             size = nbytes - i*BLOCKSIZE;
@@ -2003,8 +2003,8 @@
     int mformat_code;
     static PyObject *array_reconstructor = NULL;
     long protocol;
-    _Py_identifier(_array_reconstructor);
-    _Py_identifier(__dict__);
+    _Py_IDENTIFIER(_array_reconstructor);
+    _Py_IDENTIFIER(__dict__);
 
     if (array_reconstructor == NULL) {
         PyObject *array_module = PyImport_ImportModule("array");
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 8635a56..77edbb3 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -1579,7 +1579,7 @@
                       PyObject *unistr)
 {
     PyObject *str, *wr;
-    _Py_identifier(write);
+    _Py_IDENTIFIER(write);
 
     str = encoder_encode_stateful(STATEFUL_ECTX(self), unistr, 0);
     if (str == NULL)
@@ -1651,7 +1651,7 @@
     assert(PyBytes_Check(pwrt));
     if (PyBytes_Size(pwrt) > 0) {
         PyObject *wr;
-        _Py_identifier(write);
+        _Py_IDENTIFIER(write);
 
         wr = _PyObject_CallMethodId(self->stream, &PyId_write, "O", pwrt);
         if (wr == NULL) {
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
index 11d5340..51c66bd 100644
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -146,8 +146,8 @@
 faulthandler_get_fileno(PyObject *file, int *p_fd)
 {
     PyObject *result;
-    _Py_identifier(fileno);
-    _Py_identifier(flush);
+    _Py_IDENTIFIER(fileno);
+    _Py_IDENTIFIER(flush);
     long fd_long;
     int fd;
 
@@ -1199,7 +1199,7 @@
 faulthandler_env_options(void)
 {
     PyObject *xoptions, *key, *module, *res;
-    _Py_identifier(enable);
+    _Py_IDENTIFIER(enable);
 
     if (!Py_GETENV("PYTHONFAULTHANDLER")) {
         int has_key;
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 2533de6..6c8ca38 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -769,7 +769,7 @@
 {
     double result = 0;
     if (tmod != NULL) {
-        _Py_identifier(time);
+        _Py_IDENTIFIER(time);
 
         PyObject *f = _PyObject_CallMethodId(tmod, &PyId_time, NULL);
         if (f == NULL) {
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 4f81fe2..63f199b 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -654,7 +654,7 @@
         copyable = it;
     PyTuple_SET_ITEM(result, 0, copyable);
     for (i=1 ; i<n ; i++) {
-        _Py_identifier(__copy__);
+        _Py_IDENTIFIER(__copy__);
 
         copyable = _PyObject_CallMethodId(copyable, &PyId___copy__, NULL);
         if (copyable == NULL) {
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 35d61ba..cf0b687 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -700,7 +700,7 @@
 static PyObject *
 mmap__exit__method(PyObject *self, PyObject *args)
 {
-    _Py_identifier(close);
+    _Py_IDENTIFIER(close);
 
     return _PyObject_CallMethodId(self, &PyId_close, NULL);
 }
diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
index 7512c1d..a17a647 100644
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -534,7 +534,7 @@
 static PyObject *
 oss_exit(PyObject *self, PyObject *unused)
 {
-    _Py_identifier(close);
+    _Py_IDENTIFIER(close);
 
     PyObject *ret = _PyObject_CallMethodId(self, &PyId_close, NULL);
     if (!ret)
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 3f03cee..2f2e045 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -3241,9 +3241,9 @@
     copyreg = PyImport_ImportModuleNoBlock("copyreg");
     if (copyreg != NULL) {
         PyObject *func, *pickler;
-        _Py_identifier(pickle);
-        _Py_identifier(sequence2st);
-        _Py_identifier(_pickler);
+        _Py_IDENTIFIER(pickle);
+        _Py_IDENTIFIER(sequence2st);
+        _Py_IDENTIFIER(_pickler);
 
         func = _PyObject_GetAttrId(copyreg, &PyId_pickle);
         pickle_constructor = _PyObject_GetAttrId(module, &PyId_sequence2st);
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index da0bef0..fa50296 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -6102,7 +6102,7 @@
 {
     PyObject *result;
     static PyObject *struct_rusage;
-    _Py_identifier(struct_rusage);
+    _Py_IDENTIFIER(struct_rusage);
 
     if (pid == -1)
         return posix_error();
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index 45ab70e..1bc4ffa 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -843,7 +843,7 @@
 {
     int rv = 1;
     PyObject *readmethod = NULL;
-    _Py_identifier(read);
+    _Py_IDENTIFIER(read);
 
     readmethod = _PyObject_GetAttrId(f, &PyId_read);
     if (readmethod == NULL) {
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 2056b61..3618df1 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -4820,7 +4820,7 @@
     if (hobj == Py_None) {
         hptr = NULL;
     } else if (PyUnicode_Check(hobj)) {
-        _Py_identifier(encode);
+        _Py_IDENTIFIER(encode);
 
         idna = _PyObject_CallMethodId(hobj, &PyId_encode, "s", "idna");
         if (!idna)
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 24066d8..f825c2c 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -540,7 +540,7 @@
 {
     PyObject *strptime_module = PyImport_ImportModuleNoBlock("_strptime");
     PyObject *strptime_result;
-    _Py_identifier(_strptime_time);
+    _Py_IDENTIFIER(_strptime_time);
 
     if (!strptime_module)
         return NULL;
diff --git a/Modules/zipimport.c b/Modules/zipimport.c
index 87dc0db..8e16750 100644
--- a/Modules/zipimport.c
+++ b/Modules/zipimport.c
@@ -908,7 +908,7 @@
     static int importing_zlib = 0;
     PyObject *zlib;
     PyObject *decompress;
-    _Py_identifier(decompress);
+    _Py_IDENTIFIER(decompress);
 
     if (importing_zlib != 0)
         /* Someone has a zlib.py[co] in their Zip file;
