diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index cf08af7..4dc0b90 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -106,6 +106,27 @@
 	return newstringobject(buf);
 }
 
+static int
+func_compare(f, g)
+	funcobject *f, *g;
+{
+	if (f->func_globals != g->func_globals)
+		return (f->func_globals < g->func_globals) ? -1 : 1;
+	return cmpobject(f->func_code, g->func_code);
+}
+
+static long
+func_hash(f)
+	funcobject *f;
+{
+	long h;
+	h = hashobject(f->func_code);
+	if (h == -1) return h;
+	h = h ^ (long)f->func_globals;
+	if (h == -1) h = -2;
+	return h;
+}
+
 typeobject Functype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
@@ -116,6 +137,10 @@
 	0,		/*tp_print*/
 	func_getattr,	/*tp_getattr*/
 	0,		/*tp_setattr*/
-	0,		/*tp_compare*/
+	func_compare,	/*tp_compare*/
 	func_repr,	/*tp_repr*/
+	0,		/*tp_as_number*/
+	0,		/*tp_as_sequence*/
+	0,		/*tp_as_mapping*/
+	func_hash,	/*tp_hash*/
 };
diff --git a/Python/compile.c b/Python/compile.c
index 3a6d181..565c65c 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -92,6 +92,35 @@
 	return newstringobject(buf);
 }
 
+static int
+code_compare(co, cp)
+	codeobject *co, *cp;
+{
+	int cmp;
+	cmp = cmpobject((object *)co->co_code, (object *)cp->co_code);
+	if (cmp) return cmp;
+	cmp = cmpobject(co->co_consts, cp->co_consts);
+	if (cmp) return cmp;
+	cmp = cmpobject(co->co_names, cp->co_names);
+	return cmp;
+}
+
+static long
+code_hash(co)
+	codeobject *co;
+{
+	long h, h1, h2, h3;
+	h1 = hashobject((object *)co->co_code);
+	if (h1 == -1) return -1;
+	h2 = hashobject(co->co_consts);
+	if (h2 == -1) return -1;
+	h3 = hashobject(co->co_names);
+	if (h3 == -1) return -1;
+	h = h1 ^ h2 ^ h3;
+	if (h == -1) h = -2;
+	return h;
+}
+
 typeobject Codetype = {
 	OB_HEAD_INIT(&Typetype)
 	0,
@@ -102,11 +131,12 @@
 	0,		/*tp_print*/
 	code_getattr,	/*tp_getattr*/
 	0,		/*tp_setattr*/
-	0,		/*tp_compare*/
+	code_compare,	/*tp_compare*/
 	code_repr,	/*tp_repr*/
 	0,		/*tp_as_number*/
 	0,		/*tp_as_sequence*/
 	0,		/*tp_as_mapping*/
+	code_hash,	/*tp_hash*/
 };
 
 codeobject *
