The cl_bases member of a class object is now never NULL.
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 5a9e49d..23001af 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -42,10 +42,18 @@
 	object *name; /* String; NULL if unknown */
 {
 	classobject *op;
+	if (bases == NULL) {
+		bases = newtupleobject(0);
+		if (bases == NULL)
+			return err_nomem();
+	}
+	else
+		INCREF(bases);
 	op = NEWOBJ(classobject, &Classtype);
-	if (op == NULL)
+	if (op == NULL) {
+		DECREF(bases);
 		return NULL;
-	XINCREF(bases);
+	}
 	op->cl_bases = bases;
 	INCREF(methods);
 	op->cl_methods = methods;
@@ -60,7 +68,8 @@
 class_dealloc(op)
 	classobject *op;
 {
-	XDECREF(op->cl_bases);
+	int i;
+	DECREF(op->cl_bases);
 	DECREF(op->cl_methods);
 	XDECREF(op->cl_name);
 	free((ANY *)op);
@@ -77,8 +86,6 @@
 		return op->cl_methods;
 	}
 	if (strcmp(name, "__bases__") == 0) {
-		if (op->cl_bases == NULL)
-			return newtupleobject(0);
 		INCREF(op->cl_bases);
 		return op->cl_bases;
 	}
@@ -95,7 +102,7 @@
 		INCREF(v);
 		return v;
 	}
-	if (op->cl_bases != NULL) {
+	{
 		int n = gettuplesize(op->cl_bases);
 		int i;
 		for (i = 0; i < n; i++) {
@@ -105,7 +112,7 @@
 			err_clear();
 		}
 	}
-	err_setstr(NameError, name);
+	err_setstr(AttributeError, name);
 	return NULL;
 }
 
@@ -209,7 +216,7 @@
 		return w;
 	}
 	DECREF(v);
-	err_setstr(NameError, name);
+	err_setstr(AttributeError, name);
 	return NULL;
 }