diff --git a/Modules/_sre.c b/Modules/_sre.c
index 2ab1703..5beb3ea 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -1127,7 +1127,7 @@
 	if (!code)
 		return NULL;
 
-    n = PySequence_Length(code);
+    n = PySequence_Size(code);
 
 	self = PyObject_NEW_VAR(PatternObject, &Pattern_Type, 100*n);
 	if (!self) {
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 6be3e04..8fb321e 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -1934,7 +1934,7 @@
 	if (!PyArg_ParseTuple(args, "O:_flatten", &item))
 		return NULL;
 
-	context.maxsize = PySequence_Length(item);
+	context.maxsize = PySequence_Size(item);
 	if (context.maxsize <= 0)
 		return PyTuple_New(0);
 	
diff --git a/Modules/almodule.c b/Modules/almodule.c
index d9dfc81..84a9895 100644
--- a/Modules/almodule.c
+++ b/Modules/almodule.c
@@ -176,13 +176,13 @@
 		case AL_INT32_ELEM:
 		case AL_RESOURCE_ELEM:
 		case AL_ENUM_ELEM:
-			param->sizeIn = PySequence_Length(value);
+			param->sizeIn = PySequence_Size(value);
 			param->value.ptr = PyMem_NEW(int, param->sizeIn);
 			stepsize = sizeof(int);
 			break;
 		case AL_INT64_ELEM:
 		case AL_FIXED_ELEM:
-			param->sizeIn = PySequence_Length(value);
+			param->sizeIn = PySequence_Size(value);
 			param->value.ptr = PyMem_NEW(long long, param->sizeIn);
 			stepsize = sizeof(long long);
 			break;
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index f9ef78f..52b3a1f 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -1466,7 +1466,7 @@
             PyObject_CallObject(getinitargs_func, empty_tuple))
             goto finally;
 
-        if ((len = PyObject_Length(class_args)) < 0)  
+        if ((len = PyObject_Size(class_args)) < 0)  
             goto finally;
 
         for (i = 0; i < len; i++) {
@@ -2874,7 +2874,7 @@
   if (PyClass_Check(cls)) {
       int l;
       
-      if ((l=PyObject_Length(args)) < 0) goto err;
+      if ((l=PyObject_Size(args)) < 0) goto err;
       UNLESS (l) {
           PyObject *__getinitargs__;
 
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index 4c187fe..321e79b 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -367,7 +367,7 @@
     Py_DECREF(string_module);
   }
 
-  if (PyObject_Length(args) == -1) {
+  if (PyObject_Size(args) == -1) {
     return NULL;
   }
 
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index feea8da..27203c3 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -610,7 +610,7 @@
      *  so we can DECREF it after the check.  But we really should accept
      *  lists as well as tuples at the very least.
      */
-    ok = PyObject_Length(tuple) >= 2;
+    ok = PyObject_Size(tuple) >= 2;
     if (ok) {
         temp = PySequence_GetItem(tuple, 0);
         ok = (temp != NULL) && PyInt_Check(temp);
@@ -626,7 +626,7 @@
     }
     if (ok) {
         temp = PySequence_GetItem(tuple, 1);
-        ok = (temp != NULL) && PyObject_Length(temp) >= 2;
+        ok = (temp != NULL) && PyObject_Size(temp) >= 2;
         if (ok) {
             PyObject *temp2 = PySequence_GetItem(temp, 0);
             if (temp2 != NULL) {
@@ -693,7 +693,7 @@
 static int
 check_terminal_tuple(PyObject *elem)
 {
-    int   len = PyObject_Length(elem);
+    int   len = PyObject_Size(elem);
     int   res = 1;
     char* str = "Illegal terminal symbol; bad node length.";
 
@@ -731,7 +731,7 @@
 static node*
 build_node_children(PyObject *tuple, node *root, int *line_num)
 {
-    int len = PyObject_Length(tuple);
+    int len = PyObject_Size(tuple);
     int i;
 
     for (i = 1; i < len; ++i) {
@@ -771,7 +771,7 @@
                     (void) strcpy(strn, PyString_AS_STRING(temp));
                 Py_DECREF(temp);
 
-                if (PyObject_Length(elem) == 3) {
+                if (PyObject_Size(elem) == 3) {
                     PyObject* temp = PySequence_GetItem(elem, 2);
                     *line_num = PyInt_AsLong(temp);
                     Py_DECREF(temp);
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index c0b30f9..d879837 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1417,7 +1417,7 @@
 	}
 	argvlist[argc] = NULL;
 
-	i = PyMapping_Length(env);
+	i = PyMapping_Size(env);
 	envlist = PyMem_NEW(char *, i + 1);
 	if (envlist == NULL) {
 		PyErr_NoMemory();
@@ -1610,7 +1610,7 @@
 	}
 	argvlist[argc] = NULL;
 
-	i = PyMapping_Length(env);
+	i = PyMapping_Size(env);
 	envlist = PyMem_NEW(char *, i + 1);
 	if (envlist == NULL) {
 		PyErr_NoMemory();
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 35674de..612d0d3 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -190,7 +190,7 @@
 		seplen = 1;
 	}
 
-	seqlen = PySequence_Length(seq);
+	seqlen = PySequence_Size(seq);
 	if (seqlen < 0 && PyErr_Occurred())
 		return NULL;
 
