diff --git a/Python/ceval.c b/Python/ceval.c
index 95e4b30..cee606b 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -319,8 +319,8 @@
 	object *owner;
 {
 	register unsigned char *next_instr;
-	register int opcode;	/* Current opcode */
-	register int oparg;	/* Current opcode argument, if any */
+	register int opcode = 0; /* Current opcode */
+	register int oparg = 0;	/* Current opcode argument, if any */
 	register object **stack_pointer;
 	register enum why_code why; /* Reason for block stack unwind */
 	register int err;	/* Error status -- nonzero if error */
@@ -330,8 +330,8 @@
 	register object *u;
 	register object *t;
 	register frameobject *f; /* Current frame */
-	register object **fastlocals;
-	object *retval;		/* Return value */
+	register object **fastlocals = NULL;
+	object *retval = NULL;	/* Return value */
 #ifdef SUPPORT_OBSOLETE_ACCESS
 	int defmode = 0;	/* Default access mode for new variables */
 #endif
@@ -1793,8 +1793,8 @@
 				break;
 			}
 			if (b->b_type == SETUP_FINALLY ||
-					b->b_type == SETUP_EXCEPT &&
-					why == WHY_EXCEPTION) {
+			    (b->b_type == SETUP_EXCEPT &&
+			     why == WHY_EXCEPTION)) {
 				if (why == WHY_EXCEPTION) {
 					object *exc, *val, *tb;
 					err_fetch(&exc, &val, &tb);
@@ -2055,7 +2055,7 @@
 {
 	BINOP("__or__", "__ror__", or);
 	if (v->ob_type->tp_as_number != NULL) {
-		object *x;
+		object *x = NULL;
 		object * (*f) FPROTO((object *, object *));
 		if (coerce(&v, &w) != 0)
 			return NULL;
@@ -2076,7 +2076,7 @@
 {
 	BINOP("__xor__", "__rxor__", xor);
 	if (v->ob_type->tp_as_number != NULL) {
-		object *x;
+		object *x = NULL;
 		object * (*f) FPROTO((object *, object *));
 		if (coerce(&v, &w) != 0)
 			return NULL;
@@ -2097,7 +2097,7 @@
 {
 	BINOP("__and__", "__rand__", and);
 	if (v->ob_type->tp_as_number != NULL) {
-		object *x;
+		object *x = NULL;
 		object * (*f) FPROTO((object *, object *));
 		if (coerce(&v, &w) != 0)
 			return NULL;
@@ -2118,7 +2118,7 @@
 {
 	BINOP("__lshift__", "__rlshift__", lshift);
 	if (v->ob_type->tp_as_number != NULL) {
-		object *x;
+		object *x = NULL;
 		object * (*f) FPROTO((object *, object *));
 		if (coerce(&v, &w) != 0)
 			return NULL;
@@ -2139,7 +2139,7 @@
 {
 	BINOP("__rshift__", "__rrshift__", rshift);
 	if (v->ob_type->tp_as_number != NULL) {
-		object *x;
+		object *x = NULL;
 		object * (*f) FPROTO((object *, object *));
 		if (coerce(&v, &w) != 0)
 			return NULL;
@@ -2379,7 +2379,7 @@
 		return NULL;
 	}
 
-        if (call = func->ob_type->tp_call)
+        if ((call = func->ob_type->tp_call) != NULL)
                 result = (*call)(func, arg, kw);
         else if (is_instancemethodobject(func) || is_funcobject(func))
 		result = call_function(func, arg, kw);
@@ -2890,22 +2890,6 @@
 		err_setstr(SystemError, "build_class with non-tuple bases");
 		return NULL;
 	}
-	if (gettuplesize(bases) > 0) {
-		object *base;
-		base = GETTUPLEITEM(bases, 0);
-		/* Call the base's *type*, if it is callable.
-		   This code is a hook for Donald Beaudry's type extensions.
-		   In unexended Python it will never be triggered since its
-		   types are not callable. */
-		if (base->ob_type->ob_type->tp_call) {
-			object *args;
-			object *class;
-			args = mkvalue("(OOO)", name, bases, methods);
-			class = call_object((object *)base->ob_type, args);
-			DECREF(args);
-			return class;
-		}
-	}
 	if (!is_dictobject(methods)) {
 		err_setstr(SystemError, "build_class with non-dictionary");
 		return NULL;
@@ -2917,6 +2901,20 @@
 	for (i = gettuplesize(bases); --i >= 0; ) {
 		object *base = GETTUPLEITEM(bases, i);
 		if (!is_classobject(base)) {
+			/* Call the base's *type*, if it is callable.
+			   This code is a hook for Donald Beaudry's
+			   and Jim Fulton's type extensions.  In
+			   unexended Python it will never be triggered
+			   since its types are not callable. */
+			if (base->ob_type->ob_type->tp_call) {
+			  	object *args;
+				object *class;
+				args = mkvalue("(OOO)", name, bases, methods);
+				class = call_object((object *)base->ob_type,
+						    args);
+				DECREF(args);
+				return class;
+			}
 			err_setstr(TypeError,
 				"base is not a class object");
 			return NULL;
