diff --git a/Objects/classobject.c b/Objects/classobject.c
index 0ae6a61..d78b758 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -52,7 +52,7 @@
 	static object *getattrstr, *setattrstr, *delattrstr;
 	static object *docstr;
 	if (docstr == NULL) {
-		docstr= newstringobject("__doc__");
+		docstr= PyString_InternFromString("__doc__");
 		if (docstr == NULL)
 			return NULL;
 	}
@@ -78,9 +78,9 @@
 	XINCREF(name);
 	op->cl_name = name;
 	if (getattrstr == NULL) {
-		getattrstr = newstringobject("__getattr__");
-		setattrstr = newstringobject("__setattr__");
-		delattrstr = newstringobject("__delattr__");
+		getattrstr = PyString_InternFromString("__getattr__");
+		setattrstr = PyString_InternFromString("__setattr__");
+		delattrstr = PyString_InternFromString("__delattr__");
 	}
 	op->cl_getattr = class_lookup(op, getattrstr, &dummy);
 	op->cl_setattr = class_lookup(op, setattrstr, &dummy);
@@ -349,7 +349,7 @@
 		return NULL;
 	}
 	if (initstr == NULL)
-		initstr = newstringobject("__init__");
+		initstr = PyString_InternFromString("__init__");
 	init = instance_getattr1(inst, initstr);
 	if (init == NULL) {
 		err_clear();
@@ -408,7 +408,7 @@
 #endif /* !Py_TRACE_REFS */
 	err_fetch(&error_type, &error_value, &error_traceback);
 	if (delstr == NULL)
-		delstr = newstringobject("__del__");
+		delstr = PyString_InternFromString("__del__");
 	if ((del = instance_getattr1(inst, delstr)) != NULL) {
 		object *res = call_object(del, (object *)NULL);
 		if (res == NULL) {
@@ -610,7 +610,7 @@
 	static object *reprstr;
 
 	if (reprstr == NULL)
-		reprstr = newstringobject("__repr__");
+		reprstr = PyString_InternFromString("__repr__");
 	func = instance_getattr(inst, reprstr);
 	if (func == NULL) {
 		char buf[140];
@@ -667,14 +667,14 @@
 	static object *hashstr, *cmpstr;
 
 	if (hashstr == NULL)
-		hashstr = newstringobject("__hash__");
+		hashstr = PyString_InternFromString("__hash__");
 	func = instance_getattr(inst, hashstr);
 	if (func == NULL) {
 		/* If there is no __cmp__ method, we hash on the address.
 		   If a __cmp__ method exists, there must be a __hash__. */
 		err_clear();
 		if (cmpstr == NULL)
-			cmpstr = newstringobject("__cmp__");
+			cmpstr = PyString_InternFromString("__cmp__");
 		func = instance_getattr(inst, cmpstr);
 		if (func == NULL) {
 			err_clear();
@@ -714,7 +714,7 @@
 	int outcome;
 
 	if (lenstr == NULL)
-		lenstr = newstringobject("__len__");
+		lenstr = PyString_InternFromString("__len__");
 	func = instance_getattr(inst, lenstr);
 	if (func == NULL)
 		return -1;
@@ -745,7 +745,7 @@
 	object *res;
 
 	if (getitemstr == NULL)
-		getitemstr = newstringobject("__getitem__");
+		getitemstr = PyString_InternFromString("__getitem__");
 	func = instance_getattr(inst, getitemstr);
 	if (func == NULL)
 		return NULL;
@@ -772,12 +772,12 @@
 
 	if (value == NULL) {
 		if (delitemstr == NULL)
-			delitemstr = newstringobject("__delitem__");
+			delitemstr = PyString_InternFromString("__delitem__");
 		func = instance_getattr(inst, delitemstr);
 	}
 	else {
 		if (setitemstr == NULL)
-			setitemstr = newstringobject("__setitem__");
+			setitemstr = PyString_InternFromString("__setitem__");
 		func = instance_getattr(inst, setitemstr);
 	}
 	if (func == NULL)
@@ -813,7 +813,7 @@
 	object *func, *arg, *res;
 
 	if (getitemstr == NULL)
-		getitemstr = newstringobject("__getitem__");
+		getitemstr = PyString_InternFromString("__getitem__");
 	func = instance_getattr(inst, getitemstr);
 	if (func == NULL)
 		return NULL;
@@ -837,7 +837,7 @@
 	static object *getslicestr;
 
 	if (getslicestr == NULL)
-		getslicestr = newstringobject("__getslice__");
+		getslicestr = PyString_InternFromString("__getslice__");
 	func = instance_getattr(inst, getslicestr);
 	if (func == NULL)
 		return NULL;
@@ -862,12 +862,12 @@
 
 	if (item == NULL) {
 		if (delitemstr == NULL)
-			delitemstr = newstringobject("__delitem__");
+			delitemstr = PyString_InternFromString("__delitem__");
 		func = instance_getattr(inst, delitemstr);
 	}
 	else {
 		if (setitemstr == NULL)
-			setitemstr = newstringobject("__setitem__");
+			setitemstr = PyString_InternFromString("__setitem__");
 		func = instance_getattr(inst, setitemstr);
 	}
 	if (func == NULL)
@@ -900,12 +900,12 @@
 
 	if (value == NULL) {
 		if (delslicestr == NULL)
-			delslicestr = newstringobject("__delslice__");
+			delslicestr = PyString_InternFromString("__delslice__");
 		func = instance_getattr(inst, delslicestr);
 	}
 	else {
 		if (setslicestr == NULL)
-			setslicestr = newstringobject("__setslice__");
+			setslicestr = PyString_InternFromString("__setslice__");
 		func = instance_getattr(inst, setslicestr);
 	}
 	if (func == NULL)
@@ -1006,7 +1006,7 @@
 	if (!is_instanceobject(v))
 		return 1;
 	if (coerce_obj == NULL) {
-		coerce_obj = newstringobject("__coerce__");
+		coerce_obj = PyString_InternFromString("__coerce__");
 		if (coerce_obj == NULL)
 			return -1;
 	}
@@ -1083,7 +1083,7 @@
 	object *coerced;
 
 	if (coerce_obj == NULL) {
-		coerce_obj = newstringobject("__coerce__");
+		coerce_obj = PyString_InternFromString("__coerce__");
 		if (coerce_obj == NULL)
 			return -1;
 	}
@@ -1132,7 +1132,7 @@
 #define UNARY(funcname, methodname) \
 static object *funcname(self) instanceobject *self; { \
 	static object *o; \
-	if (o == NULL) o = newstringobject(methodname); \
+	if (o == NULL) o = PyString_InternFromString(methodname); \
 	return generic_unary_op(self, o); \
 }
 
@@ -1149,11 +1149,11 @@
 	static object *nonzerostr;
 
 	if (nonzerostr == NULL)
-		nonzerostr = newstringobject("__nonzero__");
+		nonzerostr = PyString_InternFromString("__nonzero__");
 	if ((func = instance_getattr(self, nonzerostr)) == NULL) {
 		err_clear();
 		if (lenstr == NULL)
-			lenstr = newstringobject("__len__");
+			lenstr = PyString_InternFromString("__len__");
 		if ((func = instance_getattr(self, lenstr)) == NULL) {
 			err_clear();
 			/* Fall back to the default behavior:
@@ -1200,7 +1200,7 @@
 	static object *powstr;
 
 	if (powstr == NULL)
-		powstr = newstringobject("__pow__");
+		powstr = PyString_InternFromString("__pow__");
 	func = getattro(v, powstr);
 	if (func == NULL)
 		return NULL;
