diff --git a/Objects/classobject.c b/Objects/classobject.c
index 9026968..e3b12c6 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -261,30 +261,6 @@
 		return dictinsert(inst->in_attr, name, v);
 }
 
-int
-instance_print(inst, fp, flags)
-	instanceobject *inst;
-	FILE *fp;
-	int flags;
-{
-	object *func, *repr;
-	int ret;
-
-	func = instance_getattr(inst, "__repr__");
-	if (func == NULL) {
-		err_clear();
-		fprintf(fp, "<instance object at %lx>", (long)inst);
-		return 0;
-	}
-	repr = call_object(func, (object *)NULL);
-	DECREF(func);
-	if (repr == NULL)
-		return -1;
-	ret = printobject(repr, fp, flags | PRINT_RAW);
-	DECREF(repr);
-	return ret;
-}
-
 object *
 instance_repr(inst)
 	instanceobject *inst;
@@ -753,7 +729,7 @@
 	sizeof(instanceobject),
 	0,
 	instance_dealloc,	/*tp_dealloc*/
-	instance_print,		/*tp_print*/
+	0,			/*tp_print*/
 	instance_getattr,	/*tp_getattr*/
 	instance_setattr,	/*tp_setattr*/
 	instance_compare,	/*tp_compare*/
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index e649792..dd47905 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -132,29 +132,11 @@
 	free((char *)f);
 }
 
-static int
-file_print(f, fp, flags)
-	fileobject *f;
-	FILE *fp;
-	int flags;
-{
-	fprintf(fp, "<%s file ", f->f_fp == NULL ? "closed" : "open");
-	if (printobject(f->f_name, fp, flags) != 0)
-		return -1;
-	fprintf(fp, ", mode ");
-	if (printobject(f->f_mode, fp, flags) != 0)
-		return -1;
-	fprintf(fp, ">");
-	return 0;
-}
-
 static object *
 file_repr(f)
 	fileobject *f;
 {
 	char buf[300];
-	/* XXX This differs from file_print if the filename contains
-	   quotes or other funny characters. */
 	sprintf(buf, "<%s file '%.256s', mode '%.10s'>",
 		f->f_fp == NULL ? "closed" : "open",
 		getstringvalue(f->f_name),
@@ -535,7 +517,7 @@
 	sizeof(fileobject),
 	0,
 	file_dealloc,	/*tp_dealloc*/
-	file_print,	/*tp_print*/
+	0,		/*tp_print*/
 	file_getattr,	/*tp_getattr*/
 	0,		/*tp_setattr*/
 	0,		/*tp_compare*/
diff --git a/Objects/listobject.c b/Objects/listobject.c
index ba44c3d..d403a5e 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -600,7 +600,7 @@
 	}
 	for (i = 0; i < self->ob_size; i++) {
 		if (cmpobject(self->ob_item[i], args) == 0)
-			return newintobject(i);
+			return newintobject((long)i);
 	}
 	err_setstr(ValueError, "list.index(x): x not in list");
 	return NULL;
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 25b4c64..84fc552 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -581,21 +581,6 @@
 	DEL(v);
 }
 
-/* ARGSUSED */
-static int
-long_print(v, fp, flags)
-	object *v;
-	FILE *fp;
-	int flags; /* Not used but required by interface */
-{
-	stringobject *str = (stringobject *) long_format(v, 10);
-	if (str == NULL)
-		return -1;
-	fprintf(fp, "%s", GETSTRINGVALUE(str));
-	DECREF(str);
-	return 0;
-}
-
 static object *
 long_repr(v)
 	object *v;
@@ -1347,7 +1332,7 @@
 	sizeof(longobject) - sizeof(digit),
 	sizeof(digit),
 	long_dealloc,	/*tp_dealloc*/
-	long_print,	/*tp_print*/
+	0,		/*tp_print*/
 	0,		/*tp_getattr*/
 	0,		/*tp_setattr*/
 	(int (*) FPROTO((object *, object *)))
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 3b7c016..d0b29c7 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -99,21 +99,6 @@
 	free((char *)m);
 }
 
-/* ARGSUSED */
-static int
-meth_print(m, fp, flags)
-	methodobject *m;
-	FILE *fp;
-	int flags; /* Not used but required by interface */
-{
-	if (m->m_self == NULL)
-		fprintf(fp, "<built-in function '%s'>", m->m_name);
-	else
-		fprintf(fp, "<built-in method '%s' of some %s object>",
-			m->m_name, m->m_self->ob_type->tp_name);
-	return 0;
-}
-
 static object *
 meth_repr(m)
 	methodobject *m;
@@ -131,11 +116,11 @@
 typeobject Methodtype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
-	"method",
+	"builtin_function_or_method",
 	sizeof(methodobject),
 	0,
 	meth_dealloc,	/*tp_dealloc*/
-	meth_print,	/*tp_print*/
+	0,		/*tp_print*/
 	0,		/*tp_getattr*/
 	0,		/*tp_setattr*/
 	0,		/*tp_compare*/
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index aedba35..9733a77 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -83,17 +83,6 @@
 	free((char *)m);
 }
 
-/* ARGSUSED */
-static int
-module_print(m, fp, flags)
-	moduleobject *m;
-	FILE *fp;
-	int flags; /* Not used but required by interface */
-{
-	fprintf(fp, "<module '%s'>", getstringvalue(m->md_name));
-	return 0;
-}
-
 static object *
 module_repr(m)
 	moduleobject *m;
@@ -153,7 +142,7 @@
 	sizeof(moduleobject),	/*tp_size*/
 	0,			/*tp_itemsize*/
 	module_dealloc,		/*tp_dealloc*/
-	module_print,		/*tp_print*/
+	0,			/*tp_print*/
 	module_getattr,		/*tp_getattr*/
 	module_setattr,		/*tp_setattr*/
 	0,			/*tp_compare*/
diff --git a/Objects/object.c b/Objects/object.c
index 16053a9..707dd58 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -207,17 +207,6 @@
 */
 
 /* ARGSUSED */
-static int
-none_print(op, fp, flags)
-	object *op;
-	FILE *fp;
-	int flags;
-{
-	fprintf(fp, "None");
-	return 0;
-}
-
-/* ARGSUSED */
 static object *
 none_repr(op)
 	object *op;
@@ -232,7 +221,7 @@
 	0,
 	0,
 	0,		/*tp_dealloc*/ /*never called*/
-	none_print,	/*tp_print*/
+	0,		/*tp_print*/
 	0,		/*tp_getattr*/
 	0,		/*tp_setattr*/
 	0,		/*tp_compare*/
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index e72f34c..f78d280 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -28,17 +28,6 @@
 
 /* Type object implementation */
 
-/* ARGSUSED */
-static int
-type_print(v, fp, flags)
-	typeobject *v;
-	FILE *fp;
-	int flags;
-{
-	fprintf(fp, "<type '%s'>", v->tp_name);
-	return 0;
-}
-
 static object *
 type_repr(v)
 	typeobject *v;
@@ -55,7 +44,7 @@
 	sizeof(typeobject),	/* Basic object size */
 	0,			/* Item size for varobject */
 	0,			/*tp_dealloc*/
-	type_print,		/*tp_print*/
+	0,			/*tp_print*/
 	0,			/*tp_getattr*/
 	0,			/*tp_setattr*/
 	0,			/*tp_compare*/
