diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 0ccf489..c46176c 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -464,7 +464,7 @@
 
 static PyObject* ast2obj_int(long b)
 {
-    return PyInt_FromLong(b);
+    return PyLong_FromLong(b);
 }
 
 static int init_types(void)
diff --git a/Python/ast.c b/Python/ast.c
index da75975..6ad43dd 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -110,7 +110,7 @@
     if (!errstr)
         return;
     Py_INCREF(errstr);
-    lineno = PyInt_AsLong(PyTuple_GetItem(value, 1));
+    lineno = PyLong_AsLong(PyTuple_GetItem(value, 1));
     if (lineno == -1) {
         Py_DECREF(errstr);
         return;
@@ -3074,7 +3074,7 @@
     if (*end == '\0') {
         if (errno != 0)
             return PyLong_FromString((char *)s, (char **)0, 0);
-        return PyInt_FromLong(x);
+        return PyLong_FromLong(x);
     }
     /* XXX Huge floats may silently fail */
 #ifndef WITHOUT_COMPLEX
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 053e083..b57083b 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -378,7 +378,7 @@
 		return NULL;
 	if (PyObject_Cmp(a, b, &c) < 0)
 		return NULL;
-	return PyInt_FromLong((long)c);
+	return PyLong_FromLong((long)c);
 }
 
 PyDoc_STRVAR(cmp_doc,
@@ -890,7 +890,7 @@
 	x = PyObject_Hash(v);
 	if (x == -1)
 		return NULL;
-	return PyInt_FromLong(x);
+	return PyLong_FromLong(x);
 }
 
 PyDoc_STRVAR(hash_doc,
@@ -946,7 +946,7 @@
 	res = PyObject_Size(v);
 	if (res < 0 && PyErr_Occurred())
 		return NULL;
-	return PyInt_FromSsize_t(res);
+	return PyLong_FromSsize_t(res);
 }
 
 PyDoc_STRVAR(len_doc,
@@ -1105,14 +1105,14 @@
 		size = PyString_GET_SIZE(obj);
 		if (size == 1) {
 			ord = (long)((unsigned char)*PyString_AS_STRING(obj));
-			return PyInt_FromLong(ord);
+			return PyLong_FromLong(ord);
 		}
 	}
 	else if (PyUnicode_Check(obj)) {
 		size = PyUnicode_GET_SIZE(obj);
 		if (size == 1) {
 			ord = (long)*PyUnicode_AS_UNICODE(obj);
-			return PyInt_FromLong(ord);
+			return PyLong_FromLong(ord);
 		}
 #ifndef Py_UNICODE_WIDE
 		if (size == 2) {
@@ -1123,7 +1123,7 @@
 			    0xDC00 <= c1 && c1 <= 0xDFFF) {
 				ord = ((((c0 & 0x03FF) << 10) | (c1 & 0x03FF)) +
 				       0x00010000);
-				return PyInt_FromLong(ord);
+				return PyLong_FromLong(ord);
 			}
 		}
 #endif
@@ -1133,7 +1133,7 @@
 		size = PyBytes_GET_SIZE(obj);
 		if (size == 1) {
 			ord = (long)((unsigned char)*PyBytes_AS_STRING(obj));
-			return PyInt_FromLong(ord);
+			return PyLong_FromLong(ord);
 		}
 	}
 	else {
@@ -1300,7 +1300,7 @@
 		tty = 0;
 	}
 	else {
-		fd = PyInt_AsLong(tmp);
+		fd = PyLong_AsLong(tmp);
 		Py_DECREF(tmp);
 		if (fd < 0 && PyErr_Occurred())
 			return NULL;
@@ -1311,7 +1311,7 @@
 		if (tmp == NULL)
 			PyErr_Clear();
 		else {
-			fd = PyInt_AsLong(tmp);
+			fd = PyLong_AsLong(tmp);
 			Py_DECREF(tmp);
 			if (fd < 0 && PyErr_Occurred())
 				return NULL;
@@ -1595,7 +1595,7 @@
 		return NULL;
 
 	if (result == NULL) {
-		result = PyInt_FromLong(0);
+		result = PyLong_FromLong(0);
 		if (result == NULL) {
 			Py_DECREF(iter);
 			return NULL;
@@ -1624,7 +1624,7 @@
            to the more general routine.
 	*/
 	if (PyInt_CheckExact(result)) {
-		long i_result = PyInt_AS_LONG(result);
+		long i_result = PyLong_AS_LONG(result);
 		Py_DECREF(result);
 		result = NULL;
 		while(result == NULL) {
@@ -1633,10 +1633,10 @@
 				Py_DECREF(iter);
 				if (PyErr_Occurred())
 					return NULL;
-    				return PyInt_FromLong(i_result);
+    				return PyLong_FromLong(i_result);
 			}
         		if (PyInt_CheckExact(item)) {
-            			long b = PyInt_AS_LONG(item);
+            			long b = PyLong_AS_LONG(item);
 				long x = i_result + b;
 				if ((x^i_result) >= 0 || (x^b) >= 0) {
 					i_result = x;
@@ -1645,7 +1645,7 @@
 				}
 			}
 			/* Either overflowed or is not an int. Restore real objects and process normally */
-			result = PyInt_FromLong(i_result);
+			result = PyLong_FromLong(i_result);
 			temp = PyNumber_Add(result, item);
 			Py_DECREF(result);
 			Py_DECREF(item);
@@ -1678,7 +1678,7 @@
 			}
         		if (PyInt_CheckExact(item)) {
 				PyFPE_START_PROTECT("add", return 0)
-				f_result += (double)PyInt_AS_LONG(item);
+				f_result += (double)PyLong_AS_LONG(item);
 				PyFPE_END_PROTECT(f_result)
 				Py_DECREF(item);
 				continue;
diff --git a/Python/ceval.c b/Python/ceval.c
index b4efa33..d223f5e 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -1121,12 +1121,12 @@
 			if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
 				/* INLINE: int + int */
 				register long a, b, i;
-				a = PyInt_AS_LONG(v);
-				b = PyInt_AS_LONG(w);
+				a = PyLong_AS_LONG(v);
+				b = PyLong_AS_LONG(w);
 				i = a + b;
 				if ((i^a) < 0 && (i^b) < 0)
 					goto slow_add;
-				x = PyInt_FromLong(i);
+				x = PyLong_FromLong(i);
 			}
 			else if (PyUnicode_CheckExact(v) &&
 				 PyUnicode_CheckExact(w)) {
@@ -1151,12 +1151,12 @@
 			if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
 				/* INLINE: int - int */
 				register long a, b, i;
-				a = PyInt_AS_LONG(v);
-				b = PyInt_AS_LONG(w);
+				a = PyLong_AS_LONG(v);
+				b = PyLong_AS_LONG(w);
 				i = a - b;
 				if ((i^a) < 0 && (i^~b) < 0)
 					goto slow_sub;
-				x = PyInt_FromLong(i);
+				x = PyLong_FromLong(i);
 			}
 			else {
 			  slow_sub:
@@ -1173,7 +1173,7 @@
 			v = TOP();
 			if (PyList_CheckExact(v) && PyInt_CheckExact(w)) {
 				/* INLINE: list[int] */
-				Py_ssize_t i = PyInt_AsSsize_t(w);
+				Py_ssize_t i = PyLong_AsSsize_t(w);
 				if (i < 0)
 					i += PyList_GET_SIZE(v);
 				if (i >= 0 && i < PyList_GET_SIZE(v)) {
@@ -1322,12 +1322,12 @@
 			if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
 				/* INLINE: int + int */
 				register long a, b, i;
-				a = PyInt_AS_LONG(v);
-				b = PyInt_AS_LONG(w);
+				a = PyLong_AS_LONG(v);
+				b = PyLong_AS_LONG(w);
 				i = a + b;
 				if ((i^a) < 0 && (i^b) < 0)
 					goto slow_iadd;
-				x = PyInt_FromLong(i);
+				x = PyLong_FromLong(i);
 			}
 			else if (PyUnicode_CheckExact(v) &&
 				 PyUnicode_CheckExact(w)) {
@@ -1352,12 +1352,12 @@
 			if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
 				/* INLINE: int - int */
 				register long a, b, i;
-				a = PyInt_AS_LONG(v);
-				b = PyInt_AS_LONG(w);
+				a = PyLong_AS_LONG(v);
+				b = PyLong_AS_LONG(w);
 				i = a - b;
 				if ((i^a) < 0 && (i^~b) < 0)
 					goto slow_isub;
-				x = PyInt_FromLong(i);
+				x = PyLong_FromLong(i);
 			}
 			else {
 			  slow_isub:
@@ -1518,8 +1518,8 @@
 
 		case END_FINALLY:
 			v = POP();
-			if (PyInt_Check(v)) {
-				why = (enum why_code) PyInt_AS_LONG(v);
+			if (PyLong_Check(v)) {
+				why = (enum why_code) PyLong_AS_LONG(v);
 				assert(why != WHY_YIELD);
 				if (why == WHY_RETURN ||
 				    why == WHY_CONTINUE)
@@ -1869,8 +1869,8 @@
 				/* INLINE: cmp(int, int) */
 				register long a, b;
 				register int res;
-				a = PyInt_AS_LONG(v);
-				b = PyInt_AS_LONG(w);
+				a = PyLong_AS_LONG(v);
+				b = PyLong_AS_LONG(w);
 				switch (oparg) {
 				case PyCmp_LT: res = a <  b; break;
 				case PyCmp_LE: res = a <= b; break;
@@ -1907,7 +1907,7 @@
 			}
 			v = POP();
 			u = TOP();
-			if (PyInt_AsLong(u) != -1 || PyErr_Occurred())
+			if (PyLong_AsLong(u) != -1 || PyErr_Occurred())
 				w = PyTuple_Pack(5,
 					    w,
 					    f->f_globals,
@@ -2066,7 +2066,7 @@
 			goto fast_block_end;
 
 		case CONTINUE_LOOP:
-			retval = PyInt_FromLong(oparg);
+			retval = PyLong_FromLong(oparg);
 			if (!retval) {
 				x = NULL;
 				break;
@@ -2109,7 +2109,7 @@
 
 			x = TOP();
 			u = SECOND();
-			if (PyInt_Check(u) || u == Py_None) {
+			if (PyLong_Check(u) || u == Py_None) {
 				u = v = w = Py_None;
 			}
 			else {
@@ -2392,7 +2392,7 @@
 				PyFrame_BlockSetup(f, b->b_type, b->b_handler,
 						   b->b_level);
 				why = WHY_NOT;
-				JUMPTO(PyInt_AS_LONG(retval));
+				JUMPTO(PyLong_AS_LONG(retval));
 				Py_DECREF(retval);
 				break;
 			}
@@ -2438,7 +2438,7 @@
 				else {
 					if (why & (WHY_RETURN | WHY_CONTINUE))
 						PUSH(retval);
-					v = PyInt_FromLong((long)why);
+					v = PyLong_FromLong((long)why);
 					PUSH(v);
 				}
 				why = WHY_NOT;
@@ -3797,11 +3797,11 @@
 	if (v != NULL) {
 		Py_ssize_t x;
 		if (PyInt_CheckExact(v)) {
-			/* XXX(nnorwitz): I think PyInt_AS_LONG is correct,
+			/* XXX(nnorwitz): I think PyLong_AS_LONG is correct,
 			   however, it looks like it should be AsSsize_t.
 			   There should be a comment here explaining why.
 			*/
-			x = PyInt_AS_LONG(v);
+			x = PyLong_AS_LONG(v);
 		}
 		else if (PyIndex_Check(v)) {
 			x = PyNumber_AsSsize_t(v, NULL);
@@ -4051,7 +4051,7 @@
 	PyObject *l = PyList_New(256);
 	if (l == NULL) return NULL;
 	for (i = 0; i < 256; i++) {
-		PyObject *x = PyInt_FromLong(a[i]);
+		PyObject *x = PyLong_FromLong(a[i]);
 		if (x == NULL) {
 			Py_DECREF(l);
 			return NULL;
diff --git a/Python/compile.c b/Python/compile.c
index 80c97eb..8951331 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -335,7 +335,7 @@
 
 	n = PyList_Size(list);
 	for (i = 0; i < n; i++) {
-		v = PyInt_FromLong(i);
+		v = PyLong_FromLong(i);
 		if (!v) {
 			Py_DECREF(dict);
 			return NULL;
@@ -375,12 +375,12 @@
 	while (PyDict_Next(src, &pos, &k, &v)) {
 		/* XXX this should probably be a macro in symtable.h */
 		long vi;
-		assert(PyInt_Check(v));
-		vi = PyInt_AS_LONG(v);
+		assert(PyLong_Check(v));
+		vi = PyLong_AS_LONG(v);
 		scope = (vi >> SCOPE_OFFSET) & SCOPE_MASK;
 
 		if (scope == scope_type || vi & flag) {
-			PyObject *tuple, *item = PyInt_FromLong(i);
+			PyObject *tuple, *item = PyLong_FromLong(i);
 			if (item == NULL) {
 				Py_DECREF(dest);
 				return NULL;
@@ -907,7 +907,7 @@
                 if (PyErr_Occurred())
                         return -1;
 		arg = PyDict_Size(dict);
-		v = PyInt_FromLong(arg);
+		v = PyLong_FromLong(arg);
 		if (!v) {
 			Py_DECREF(t);
 			return -1;
@@ -920,7 +920,7 @@
 		Py_DECREF(v);
 	}
 	else
-		arg = PyInt_AsLong(v);
+		arg = PyLong_AsLong(v);
 	Py_DECREF(t);
 	return arg;
 }
@@ -1208,7 +1208,7 @@
     Py_DECREF(k);
     if (v == NULL)
 	return -1;
-    return PyInt_AS_LONG(v);
+    return PyLong_AS_LONG(v);
 }
 
 static int
@@ -2065,7 +2065,7 @@
 		int r;
 		PyObject *level;
 
-                level = PyInt_FromLong(0);
+                level = PyLong_FromLong(0);
 		if (level == NULL)
 			return 0;
 
@@ -2108,7 +2108,7 @@
 	if (!names)
 		return 0;
 
-        level = PyInt_FromLong(s->v.ImportFrom.level);
+        level = PyLong_FromLong(s->v.ImportFrom.level);
 	if (!level) {
 		Py_DECREF(names);
 		return 0;
@@ -3916,7 +3916,7 @@
 	if (tuple == NULL)
 		return NULL;
 	while (PyDict_Next(dict, &pos, &k, &v)) {
-		i = PyInt_AS_LONG(v);
+		i = PyLong_AS_LONG(v);
 		k = PyTuple_GET_ITEM(k, 0);
 		Py_INCREF(k);
 		assert((i - offset) < size);
diff --git a/Python/errors.c b/Python/errors.c
index 063187b..79f711d 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -752,7 +752,7 @@
 	PyErr_NormalizeException(&exc, &v, &tb);
 	/* XXX check that it is, indeed, a syntax error. It might not
 	 * be, though. */
-	tmp = PyInt_FromLong(lineno);
+	tmp = PyLong_FromLong(lineno);
 	if (tmp == NULL)
 		PyErr_Clear();
 	else {
diff --git a/Python/getargs.c b/Python/getargs.c
index f6cdd7c..aeeb04c 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -556,7 +556,7 @@
 		long ival;
 		if (float_argument_error(arg))
 			return converterr("integer<b>", arg, msgbuf, bufsize);
-		ival = PyInt_AsLong(arg);
+		ival = PyLong_AsLong(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<b>", arg, msgbuf, bufsize);
 		else if (ival < 0) {
@@ -580,7 +580,7 @@
 		long ival;
 		if (float_argument_error(arg))
 			return converterr("integer<B>", arg, msgbuf, bufsize);
-		ival = PyInt_AsUnsignedLongMask(arg);
+		ival = PyLong_AsUnsignedLongMask(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<B>", arg, msgbuf, bufsize);
 		else
@@ -593,7 +593,7 @@
 		long ival;
 		if (float_argument_error(arg))
 			return converterr("integer<h>", arg, msgbuf, bufsize);
-		ival = PyInt_AsLong(arg);
+		ival = PyLong_AsLong(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<h>", arg, msgbuf, bufsize);
 		else if (ival < SHRT_MIN) {
@@ -617,7 +617,7 @@
 		long ival;
 		if (float_argument_error(arg))
 			return converterr("integer<H>", arg, msgbuf, bufsize);
-		ival = PyInt_AsUnsignedLongMask(arg);
+		ival = PyLong_AsUnsignedLongMask(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<H>", arg, msgbuf, bufsize);
 		else
@@ -630,7 +630,7 @@
 		long ival;
 		if (float_argument_error(arg))
 			return converterr("integer<i>", arg, msgbuf, bufsize);
-		ival = PyInt_AsLong(arg);
+		ival = PyLong_AsLong(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<i>", arg, msgbuf, bufsize);
 		else if (ival > INT_MAX) {
@@ -654,7 +654,7 @@
 		unsigned int ival;
 		if (float_argument_error(arg))
 			return converterr("integer<I>", arg, msgbuf, bufsize);
-		ival = (unsigned int)PyInt_AsUnsignedLongMask(arg);
+		ival = (unsigned int)PyLong_AsUnsignedLongMask(arg);
 		if (ival == (unsigned int)-1 && PyErr_Occurred())
 			return converterr("integer<I>", arg, msgbuf, bufsize);
 		else
@@ -672,7 +672,7 @@
 			return converterr("integer<n>", arg, msgbuf, bufsize);
 		iobj = PyNumber_Index(arg);
 		if (iobj != NULL)
-			ival = PyInt_AsSsize_t(arg);
+			ival = PyLong_AsSsize_t(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<n>", arg, msgbuf, bufsize);
 		*p = ival;
@@ -685,7 +685,7 @@
 		long ival;
 		if (float_argument_error(arg))
 			return converterr("integer<l>", arg, msgbuf, bufsize);
-		ival = PyInt_AsLong(arg);
+		ival = PyLong_AsLong(arg);
 		if (ival == -1 && PyErr_Occurred())
 			return converterr("integer<l>", arg, msgbuf, bufsize);
 		else
diff --git a/Python/import.c b/Python/import.c
index 419f3e9..221c2dd 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -2687,7 +2687,7 @@
 	char *name;
 	if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
 		return NULL;
-	return PyInt_FromLong(is_builtin(name));
+	return PyLong_FromLong(is_builtin(name));
 }
 
 static PyObject *
@@ -2921,7 +2921,7 @@
 	PyObject *v;
 	int err;
 
-	v = PyInt_FromLong((long)value);
+	v = PyLong_FromLong((long)value);
 	err = PyDict_SetItemString(d, name, v);
 	Py_XDECREF(v);
 	return err;
diff --git a/Python/mactoolboxglue.c b/Python/mactoolboxglue.c
index 454553e..6688b02 100644
--- a/Python/mactoolboxglue.c
+++ b/Python/mactoolboxglue.c
@@ -348,9 +348,9 @@
 int
 PyMac_Getwide(PyObject *v, wide *rv)
 {
-	if (PyInt_Check(v)) {
+	if (PyLong_Check(v)) {
 		rv->hi = 0;
-		rv->lo = PyInt_AsLong(v);
+		rv->lo = PyLong_AsLong(v);
 		if( rv->lo & 0x80000000 )
 			rv->hi = -1;
 		return 1;
@@ -364,7 +364,7 @@
 {
 	if ( (w->hi == 0 && (w->lo & 0x80000000) == 0) ||
 	     (w->hi == -1 && (w->lo & 0x80000000) ) )
-		return PyInt_FromLong(w->lo);
+		return PyLong_FromLong(w->lo);
 	return Py_BuildValue("(ll)", w->hi, w->lo);
 }
 
diff --git a/Python/marshal.c b/Python/marshal.c
index 3e106c2..c06ef8b 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -460,7 +460,7 @@
 	long hi4 = r_long(p);
 #if SIZEOF_LONG > 4
 	long x = (hi4 << 32) | (lo4 & 0xFFFFFFFFL);
-	return PyInt_FromLong(x);
+	return PyLong_FromLong(x);
 #else
 	unsigned char buf[8];
 	int one = 1;
@@ -533,7 +533,7 @@
 		break;
 
 	case TYPE_INT:
-		retval = PyInt_FromLong(r_long(p));
+		retval = PyLong_FromLong(r_long(p));
 		break;
 
 	case TYPE_INT64:
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 144fb4f..aca57a4 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -307,10 +307,10 @@
 		case 'B':
 		case 'h':
 		case 'i':
-			return PyInt_FromLong((long)va_arg(*p_va, int));
+			return PyLong_FromLong((long)va_arg(*p_va, int));
 			
 		case 'H':
-			return PyInt_FromLong((long)va_arg(*p_va, unsigned int));
+			return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
 
 		case 'I':
 		{
@@ -319,16 +319,16 @@
 			if (n > (unsigned long)PyInt_GetMax())
 				return PyLong_FromUnsignedLong((unsigned long)n);
 			else
-				return PyInt_FromLong(n);
+				return PyLong_FromLong(n);
 		}
 		
 		case 'n':
 #if SIZEOF_SIZE_T!=SIZEOF_LONG
-			return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t));
+			return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
 #endif
 			/* Fall through from 'n' to 'l' if Py_ssize_t is long */
 		case 'l':
-			return PyInt_FromLong(va_arg(*p_va, long));
+			return PyLong_FromLong(va_arg(*p_va, long));
 
 		case 'k':
 		{
@@ -337,7 +337,7 @@
 			if (n > (unsigned long)PyInt_GetMax())
 				return PyLong_FromUnsignedLong(n);
 			else
-				return PyInt_FromLong(n);
+				return PyLong_FromLong(n);
 		}
 
 #ifdef HAVE_LONG_LONG
@@ -702,7 +702,7 @@
 int 
 PyModule_AddIntConstant(PyObject *m, const char *name, long value)
 {
-	return PyModule_AddObject(m, name, PyInt_FromLong(value));
+	return PyModule_AddObject(m, name, PyLong_FromLong(value));
 }
 
 int 
diff --git a/Python/pystate.c b/Python/pystate.c
index 1914ba8..030138d 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -445,7 +445,7 @@
 			struct _frame *frame = t->frame;
 			if (frame == NULL)
 				continue;
-			id = PyInt_FromLong(t->thread_id);
+			id = PyLong_FromLong(t->thread_id);
 			if (id == NULL)
 				goto Fail;
 			stat = PyDict_SetItem(result, id, (PyObject *)frame);
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index d1a062b..f46b90e 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1109,7 +1109,7 @@
 	Py_DECREF(v);
 	if (!(v = PyObject_GetAttrString(err, "lineno")))
 		goto finally;
-	hold = PyInt_AsLong(v);
+	hold = PyLong_AsLong(v);
 	Py_DECREF(v);
 	v = NULL;
 	if (hold < 0 && PyErr_Occurred())
@@ -1123,7 +1123,7 @@
 		Py_DECREF(v);
 		v = NULL;
 	} else {
-		hold = PyInt_AsLong(v);
+		hold = PyLong_AsLong(v);
 		Py_DECREF(v);
 		v = NULL;
 		if (hold < 0 && PyErr_Occurred())
@@ -1213,8 +1213,8 @@
 		/* If we failed to dig out the 'code' attribute,
 		   just let the else clause below print the error. */
 	}
-	if (PyInt_Check(value))
-		exitcode = (int)PyInt_AsLong(value);
+	if (PyLong_Check(value))
+		exitcode = (int)PyLong_AsLong(value);
 	else {
 		PyObject_Print(value, stderr, Py_PRINT_RAW);
 		PySys_WriteStderr("\n");
diff --git a/Python/structmember.c b/Python/structmember.c
index c4b7d80..f8588cc 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -13,31 +13,31 @@
 	addr += l->offset;
 	switch (l->type) {
 	case T_BYTE:
-		v = PyInt_FromLong(*(char*)addr);
+		v = PyLong_FromLong(*(char*)addr);
 		break;
 	case T_UBYTE:
 		v = PyLong_FromUnsignedLong(*(unsigned char*)addr);
 		break;
 	case T_SHORT:
-		v = PyInt_FromLong(*(short*)addr);
+		v = PyLong_FromLong(*(short*)addr);
 		break;
 	case T_USHORT:
 		v = PyLong_FromUnsignedLong(*(unsigned short*)addr);
 		break;
 	case T_INT:
-		v = PyInt_FromLong(*(int*)addr);
+		v = PyLong_FromLong(*(int*)addr);
 		break;
 	case T_UINT:
 		v = PyLong_FromUnsignedLong(*(unsigned int*)addr);
 		break;
 	case T_LONG:
-		v = PyInt_FromLong(*(long*)addr);
+		v = PyLong_FromLong(*(long*)addr);
 		break;
 	case T_ULONG:
 		v = PyLong_FromUnsignedLong(*(unsigned long*)addr);
 		break;
 	case T_PYSSIZET:
-		v = PyInt_FromSsize_t(*(Py_ssize_t*)addr);
+		v = PyLong_FromSsize_t(*(Py_ssize_t*)addr);
 		break;
 	case T_FLOAT:
 		v = PyFloat_FromDouble((double)*(float*)addr);
@@ -114,7 +114,7 @@
 	addr += l->offset;
 	switch (l->type) {
 	case T_BYTE:{
-		long long_val = PyInt_AsLong(v);
+		long long_val = PyLong_AsLong(v);
 		if ((long_val == -1) && PyErr_Occurred())
 			return -1;
 		*(char*)addr = (char)long_val;
@@ -125,7 +125,7 @@
 		break;
 		}
 	case T_UBYTE:{
-		long long_val = PyInt_AsLong(v);
+		long long_val = PyLong_AsLong(v);
 		if ((long_val == -1) && PyErr_Occurred())
 			return -1;
 		*(unsigned char*)addr = (unsigned char)long_val;
@@ -134,7 +134,7 @@
 		break;
 		}
 	case T_SHORT:{
-		long long_val = PyInt_AsLong(v);
+		long long_val = PyLong_AsLong(v);
 		if ((long_val == -1) && PyErr_Occurred())
 			return -1;
 		*(short*)addr = (short)long_val;
@@ -143,7 +143,7 @@
 		break;
 		}
 	case T_USHORT:{
-		long long_val = PyInt_AsLong(v);
+		long long_val = PyLong_AsLong(v);
 		if ((long_val == -1) && PyErr_Occurred())
 			return -1;
 		*(unsigned short*)addr = (unsigned short)long_val;
@@ -152,7 +152,7 @@
 		break;
 		}
   	case T_INT:{
-		long long_val = PyInt_AsLong(v);
+		long long_val = PyLong_AsLong(v);
 		if ((long_val == -1) && PyErr_Occurred())
 			return -1;
 		*(int *)addr = (int)long_val;
@@ -199,7 +199,7 @@
 		break;
 		}
 	case T_PYSSIZET:{
-		*(Py_ssize_t*)addr = PyInt_AsSsize_t(v);
+		*(Py_ssize_t*)addr = PyLong_AsSsize_t(v);
 		if ((*(Py_ssize_t*)addr == (Py_ssize_t)-1)
 		    && PyErr_Occurred())
 				return -1;
@@ -248,7 +248,7 @@
 		if (PyLong_Check(v))
 			*(unsigned PY_LONG_LONG*)addr = value = PyLong_AsUnsignedLongLong(v);
 		else
-			*(unsigned PY_LONG_LONG*)addr = value = PyInt_AsLong(v);
+			*(unsigned PY_LONG_LONG*)addr = value = PyLong_AsLong(v);
 		if ((value == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())
 			return -1;
 		break;
diff --git a/Python/symtable.c b/Python/symtable.c
index 968fe25..84d0067 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -90,7 +90,7 @@
 {
 	return PyUnicode_FromFormat("<symtable entry %U(%ld), line %d>",
 	                            ste->ste_name,
-	                            PyInt_AS_LONG(ste->ste_id), ste->ste_lineno);
+	                            PyLong_AS_LONG(ste->ste_id), ste->ste_lineno);
 }
 
 static void
@@ -310,8 +310,8 @@
 	PyObject *v = PyDict_GetItem(ste->ste_symbols, name);
 	if (!v)
 		return 0;
-	assert(PyInt_Check(v));
-	return (PyInt_AS_LONG(v) >> SCOPE_OFFSET) & SCOPE_MASK;
+	assert(PyLong_Check(v));
+	return (PyLong_AS_LONG(v) >> SCOPE_OFFSET) & SCOPE_MASK;
 }
 
 
@@ -361,7 +361,7 @@
 */
 
 #define SET_SCOPE(DICT, NAME, I) { \
-	PyObject *o = PyInt_FromLong(I); \
+	PyObject *o = PyLong_FromLong(I); \
 	if (!o) \
 		return 0; \
 	if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
@@ -476,13 +476,13 @@
 	int success = 0;
 	Py_ssize_t pos = 0;
 
-	v_cell = PyInt_FromLong(CELL);
+	v_cell = PyLong_FromLong(CELL);
 	if (!v_cell)
 		return 0;
 	while (PyDict_Next(scopes, &pos, &name, &v)) {
 		long scope;
-		assert(PyInt_Check(v));
-		scope = PyInt_AS_LONG(v);
+		assert(PyLong_Check(v));
+		scope = PyLong_AS_LONG(v);
 		if (scope != LOCAL)
 			continue;
 		if (!PySet_Contains(free, name))
@@ -548,13 +548,13 @@
 	/* Update scope information for all symbols in this scope */
 	while (PyDict_Next(symbols, &pos, &name, &v)) {
 		long scope, flags;
-		assert(PyInt_Check(v));
-		flags = PyInt_AS_LONG(v);
+		assert(PyLong_Check(v));
+		flags = PyLong_AS_LONG(v);
 		v_scope = PyDict_GetItem(scopes, name);
-		assert(v_scope && PyInt_Check(v_scope));
-		scope = PyInt_AS_LONG(v_scope);
+		assert(v_scope && PyLong_Check(v_scope));
+		scope = PyLong_AS_LONG(v_scope);
 		flags |= (scope << SCOPE_OFFSET);
-		v_new = PyInt_FromLong(flags);
+		v_new = PyLong_FromLong(flags);
 		if (!v_new)
 			return 0;
 		if (PyDict_SetItem(symbols, name, v_new) < 0) {
@@ -565,7 +565,7 @@
 	}
 
 	/* Record not yet resolved free variables from children (if any) */
-        v_free = PyInt_FromLong(FREE << SCOPE_OFFSET);
+        v_free = PyLong_FromLong(FREE << SCOPE_OFFSET);
         if (!v_free)
 		return 0;
 
@@ -583,9 +583,9 @@
 			   or global in the class scope.
 			*/
 			if  (classflag && 
-			     PyInt_AS_LONG(v) & (DEF_BOUND | DEF_GLOBAL)) {
-				long flags = PyInt_AS_LONG(v) | DEF_FREE_CLASS;
-				v_new = PyInt_FromLong(flags);
+			     PyLong_AS_LONG(v) & (DEF_BOUND | DEF_GLOBAL)) {
+				long flags = PyLong_AS_LONG(v) | DEF_FREE_CLASS;
+				v_new = PyLong_FromLong(flags);
 				if (!v_new) {
 					goto error;
 				}
@@ -675,7 +675,7 @@
 	assert(PySTEntry_Check(ste));
 	assert(PyDict_Check(ste->ste_symbols));
 	while (PyDict_Next(ste->ste_symbols, &pos, &name, &v)) {
-		long flags = PyInt_AS_LONG(v);
+		long flags = PyLong_AS_LONG(v);
 		if (!analyze_name(ste, scopes, name, flags, bound, local, free,
 				  global))
 			goto error;
@@ -849,7 +849,7 @@
 	Py_DECREF(mangled);
 	if (!o)
 		return 0;
-	return PyInt_AsLong(o);
+	return PyLong_AsLong(o);
 }
 
 static int
@@ -865,7 +865,7 @@
 		return 0;
 	dict = st->st_cur->ste_symbols;
 	if ((o = PyDict_GetItem(dict, mangled))) {
-	    val = PyInt_AS_LONG(o);
+	    val = PyLong_AS_LONG(o);
 	    if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
 		    /* Is it better to use 'mangled' or 'name' here? */
 		    PyErr_Format(PyExc_SyntaxError, DUPLICATE_ARGUMENT, name);
@@ -876,7 +876,7 @@
 	    val |= flag;
 	} else
 	    val = flag;
-	o = PyInt_FromLong(val);
+	o = PyLong_FromLong(val);
         if (o == NULL)
 	    goto error;
 	if (PyDict_SetItem(dict, mangled, o) < 0) {
@@ -893,9 +893,9 @@
 		   perhaps only DEF_FREE_GLOBAL */
 		val = flag;
 		if ((o = PyDict_GetItem(st->st_global, mangled))) {
-			val |= PyInt_AS_LONG(o);
+			val |= PyLong_AS_LONG(o);
 		}
-		o = PyInt_FromLong(val);
+		o = PyLong_FromLong(val);
 		if (o == NULL)
 			goto error;
 		if (PyDict_SetItem(st->st_global, mangled, o) < 0) {
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index e793707..e77b1f6 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -411,7 +411,7 @@
 static PyObject *
 sys_getcheckinterval(PyObject *self, PyObject *args)
 {
-	return PyInt_FromLong(_Py_CheckInterval);
+	return PyLong_FromLong(_Py_CheckInterval);
 }
 
 PyDoc_STRVAR(getcheckinterval_doc,
@@ -473,7 +473,7 @@
 static PyObject *
 sys_getrecursionlimit(PyObject *self)
 {
-	return PyInt_FromLong(Py_GetRecursionLimit());
+	return PyLong_FromLong(Py_GetRecursionLimit());
 }
 
 PyDoc_STRVAR(getrecursionlimit_doc,
@@ -543,7 +543,7 @@
         PyThreadState *tstate = PyThreadState_GET();
         if (!tstate)
 		return NULL;
-        return PyInt_FromLong(tstate->interp->dlopenflags);
+        return PyLong_FromLong(tstate->interp->dlopenflags);
 }
 
 PyDoc_STRVAR(getdlopenflags_doc,
@@ -573,14 +573,14 @@
 static PyObject *
 sys_getrefcount(PyObject *self, PyObject *arg)
 {
-	return PyInt_FromSsize_t(arg->ob_refcnt);
+	return PyLong_FromSsize_t(arg->ob_refcnt);
 }
 
 #ifdef Py_REF_DEBUG
 static PyObject *
 sys_gettotalrefcount(PyObject *self)
 {
-	return PyInt_FromSsize_t(_Py_GetRefTotal());
+	return PyLong_FromSsize_t(_Py_GetRefTotal());
 }
 #endif /* Py_REF_DEBUG */
 
@@ -1034,7 +1034,7 @@
 			     v = PyUnicode_FromString(Py_GetVersion()));
 	Py_XDECREF(v);
 	PyDict_SetItemString(sysdict, "hexversion",
-			     v = PyInt_FromLong(PY_VERSION_HEX));
+			     v = PyLong_FromLong(PY_VERSION_HEX));
 	Py_XDECREF(v);
 	svnversion_init();
 	v = Py_BuildValue("(UUU)", "CPython", branch, svn_revision);
@@ -1066,7 +1066,7 @@
 					       PY_MICRO_VERSION, s,
 					       PY_RELEASE_SERIAL));
 	SET_SYS_FROM_STRING("api_version",
-			    PyInt_FromLong(PYTHON_API_VERSION));
+			    PyLong_FromLong(PYTHON_API_VERSION));
 	SET_SYS_FROM_STRING("copyright",
 			    PyUnicode_FromString(Py_GetCopyright()));
 	SET_SYS_FROM_STRING("platform",
@@ -1079,13 +1079,13 @@
 	SET_SYS_FROM_STRING("exec_prefix",
 		   	    PyUnicode_DecodeFSDefault(Py_GetExecPrefix()));
 	SET_SYS_FROM_STRING("maxint",
-			    PyInt_FromLong(PyInt_GetMax()));
+			    PyLong_FromLong(PyInt_GetMax()));
 	SET_SYS_FROM_STRING("maxsize",
-			    PyInt_FromSsize_t(PY_SSIZE_T_MAX));
+			    PyLong_FromSsize_t(PY_SSIZE_T_MAX));
 	SET_SYS_FROM_STRING("float_info",
 			    PyFloat_GetInfo());
 	SET_SYS_FROM_STRING("maxunicode",
-			    PyInt_FromLong(PyUnicode_GetMax()));
+			    PyLong_FromLong(PyUnicode_GetMax()));
 	SET_SYS_FROM_STRING("builtin_module_names",
 			    list_builtin_module_names());
 	{
diff --git a/Python/traceback.c b/Python/traceback.c
index 9d7a2e0..df2a3a3 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -256,7 +256,7 @@
 	}
 	limitv = PySys_GetObject("tracebacklimit");
 	if (limitv && PyInt_CheckExact(limitv)) {
-		limit = PyInt_AsLong(limitv);
+		limit = PyLong_AsLong(limitv);
 		if (limit <= 0)
 			return 0;
 	}
