diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 8fac03c..3751ec3 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -37,6 +37,9 @@
 #include "ceval.h"
 #include "modsupport.h"
 
+/* Should be in longobject.h */
+extern stringobject *long_format PROTO((object *, int));
+
 static object *
 builtin_abs(self, v)
 	object *self;
@@ -58,7 +61,7 @@
 	long x;
 	char s[1];
 	if (v == NULL || !is_intobject(v)) {
-		err_setstr(TypeError, "chr() must have int argument");
+		err_setstr(TypeError, "chr() requires int argument");
 		return NULL;
 	}
 	x = getintvalue(v);
@@ -84,20 +87,20 @@
 		d = getattr(v, "__dict__");
 		if (d == NULL) {
 			err_setstr(TypeError,
-				"dir() argument has no variable attributes");
+				"dir() argument must have __dict__ attribute");
 			return NULL;
 		}
 	}
-	if (!is_dictobject(d)) { /* Assume it is None */
-		v = newlistobject(0);
-	}
-	else {
+	if (is_dictobject(d)) {
 		v = getdictkeys(d);
 		if (sortlist(v) != 0) {
 			DECREF(v);
 			v = NULL;
 		}
 	}
+	else {
+		v = newlistobject(0);
+	}
 	DECREF(d);
 	return v;
 }
@@ -195,6 +198,29 @@
 }
 
 static object *
+builtin_hex(self, v)
+	object *self;
+	object *v;
+{
+	if (v != NULL) {
+		if (is_intobject(v)) {
+			char buf[20];
+			long x = getintvalue(v);
+			if (x >= 0)
+				sprintf(buf, "0x%lx", x);
+			else
+				sprintf(buf, "-0x%lx", -x);
+			return newstringobject(buf);
+		}
+		if (is_longobject(v)) {
+			return (object *) long_format(v, 16);
+		}
+	}
+	err_setstr(TypeError, "hex() requires int/long argument");
+	return NULL;
+}
+
+static object *
 builtin_input(self, v)
 	object *self;
 	object *v;
@@ -343,6 +369,29 @@
 }
 
 static object *
+builtin_oct(self, v)
+	object *self;
+	object *v;
+{
+	if (v != NULL) {
+		if (is_intobject(v)) {
+			char buf[20];
+			long x = getintvalue(v);
+			if (x >= 0)
+				sprintf(buf, "0%lo", x);
+			else
+				sprintf(buf, "-0%lo", -x);
+			return newstringobject(buf);
+		}
+		if (is_longobject(v)) {
+			return (object *) long_format(v, 8);
+		}
+	}
+	err_setstr(TypeError, "oct() requires int/long argument");
+	return NULL;
+}
+
+static object *
 builtin_open(self, v)
 	object *self;
 	object *v;
@@ -508,12 +557,14 @@
 	{"eval", builtin_eval},
 	{"exec", builtin_exec},
 	{"float", builtin_float},
+	{"hex", builtin_hex},
 	{"input", builtin_input},
 	{"int", builtin_int},
 	{"len", builtin_len},
 	{"long", builtin_long},
 	{"max", builtin_max},
 	{"min", builtin_min},
+	{"oct", builtin_oct},
 	{"open", builtin_open}, /* XXX move to OS module */
 	{"ord", builtin_ord},
 	{"pow", builtin_pow},
