diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 8f28ea6..7126391 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -107,27 +107,6 @@
 
 
 static PyObject *
-builtin_buffer(PyObject *self, PyObject *args)
-{
-	PyObject *ob;
-	int offset = 0;
-	int size = Py_END_OF_BUFFER;
-
-	if ( !PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size) )
-	    return NULL;
-	return PyBuffer_FromObject(ob, offset, size);
-}
-
-PyDoc_STRVAR(buffer_doc,
-"buffer(object [, offset[, size]]) -> object\n\
-\n\
-Create a new buffer object which references the given object.\n\
-The buffer will reference a slice of the target object from the\n\
-start of the object (or at the specified offset). The slice will\n\
-extend to the end of the target object (or with the specified size).");
-
-
-static PyObject *
 builtin_callable(PyObject *self, PyObject *v)
 {
 	return PyBool_FromLong((long)PyCallable_Check(v));
@@ -1079,31 +1058,6 @@
 
 
 static PyObject *
-builtin_slice(PyObject *self, PyObject *args)
-{
-	PyObject *start, *stop, *step;
-
-	start = stop = step = NULL;
-
-	if (!PyArg_ParseTuple(args, "O|OO:slice", &start, &stop, &step))
-		return NULL;
-
-	/* This swapping of stop and start is to maintain similarity with
-	   range(). */
-	if (stop == NULL) {
-		stop = start;
-		start = NULL;
-	}
-	return PySlice_New(start, stop, step);
-}
-
-PyDoc_STRVAR(slice_doc,
-"slice([start,] stop[, step]) -> slice object\n\
-\n\
-Create a slice object.  This is used for slicing by the Numeric extensions.");
-
-
-static PyObject *
 builtin_locals(PyObject *self)
 {
 	PyObject *d;
@@ -1775,7 +1729,6 @@
  	{"__import__",	builtin___import__, METH_VARARGS, import_doc},
  	{"abs",		builtin_abs,        METH_O, abs_doc},
  	{"apply",	builtin_apply,      METH_VARARGS, apply_doc},
- 	{"buffer",	builtin_buffer,     METH_VARARGS, buffer_doc},
  	{"callable",	builtin_callable,   METH_O, callable_doc},
  	{"chr",		builtin_chr,        METH_VARARGS, chr_doc},
  	{"cmp",		builtin_cmp,        METH_VARARGS, cmp_doc},
@@ -1813,7 +1766,6 @@
  	{"repr",	builtin_repr,       METH_O, repr_doc},
  	{"round",	builtin_round,      METH_VARARGS, round_doc},
  	{"setattr",	builtin_setattr,    METH_VARARGS, setattr_doc},
- 	{"slice",       builtin_slice,      METH_VARARGS, slice_doc},
 #ifdef Py_USING_UNICODE
  	{"unichr",	builtin_unichr,     METH_VARARGS, unichr_doc},
 #endif
@@ -1849,6 +1801,7 @@
 	SETBUILTIN("True",		Py_True);
 	SETBUILTIN("basestring",	&PyBaseString_Type);
 	SETBUILTIN("bool",		&PyBool_Type);
+	SETBUILTIN("buffer",		&PyBuffer_Type);
 	SETBUILTIN("classmethod",	&PyClassMethod_Type);
 #ifndef WITHOUT_COMPLEX
 	SETBUILTIN("complex",		&PyComplex_Type);
@@ -1861,6 +1814,7 @@
 	SETBUILTIN("list",		&PyList_Type);
 	SETBUILTIN("long",		&PyLong_Type);
 	SETBUILTIN("object",		&PyBaseObject_Type);
+	SETBUILTIN("slice",		&PySlice_Type);
 	SETBUILTIN("staticmethod",	&PyStaticMethod_Type);
 	SETBUILTIN("str",		&PyString_Type);
 	SETBUILTIN("super",		&PySuper_Type);
diff --git a/Python/compile.c b/Python/compile.c
index 4bbe44f..b0e125d 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -91,6 +91,69 @@
 	{NULL}	/* Sentinel */
 };
 
+PyDoc_STRVAR(code_doc,
+"code(argcount, nlocals, stacksize, flags, codestring, constants, names,\n\
+      varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])\n\
+\n\
+Create a code object.  Not for the faint of heart.");
+
+static PyObject *
+code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
+{
+	int argcount;
+	int nlocals;
+	int stacksize;
+	int flags;
+	PyObject *code;
+	PyObject *consts;
+	PyObject *names;
+	PyObject *varnames;
+	PyObject *freevars = NULL;
+	PyObject *cellvars = NULL;
+	PyObject *filename;
+	PyObject *name;
+	int firstlineno;
+	PyObject *lnotab;
+
+	if (!PyArg_ParseTuple(args, "iiiiSO!O!O!SSiS|O!O!:code",
+			      &argcount, &nlocals, &stacksize, &flags,
+			      &code,
+			      &PyTuple_Type, &consts,
+			      &PyTuple_Type, &names,
+			      &PyTuple_Type, &varnames,
+			      &filename, &name,
+			      &firstlineno, &lnotab,
+			      &PyTuple_Type, &freevars,
+			      &PyTuple_Type, &cellvars))
+		return NULL;
+
+	if (freevars == NULL || cellvars == NULL) {
+		PyObject *empty = PyTuple_New(0);
+		if (empty == NULL)
+		    return NULL;
+		if (freevars == NULL) {
+		    freevars = empty;
+		    Py_INCREF(freevars);
+		}
+		if (cellvars == NULL) {
+		    cellvars = empty;
+		    Py_INCREF(cellvars);
+		}
+		Py_DECREF(empty);
+	}
+
+	if (!PyObject_CheckReadBuffer(code)) {
+		PyErr_SetString(PyExc_TypeError,
+		  "bytecode object must be a single-segment read-only buffer");
+		return NULL;
+	}
+
+	return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
+				      code, consts, names, varnames,
+				      freevars, cellvars, filename, name,
+				      firstlineno, lnotab); 
+}
+
 static void
 code_dealloc(PyCodeObject *co)
 {
@@ -200,7 +263,7 @@
 	0,				/* tp_setattro */
 	0,				/* tp_as_buffer */
 	Py_TPFLAGS_DEFAULT,		/* tp_flags */
-	0,				/* tp_doc */
+	code_doc,			/* tp_doc */
 	0,				/* tp_traverse */
 	0,				/* tp_clear */
 	0,				/* tp_richcompare */
@@ -217,7 +280,7 @@
 	0,				/* tp_dictoffset */
 	0,				/* tp_init */
 	0,				/* tp_alloc */
-	0,				/* tp_new */
+	code_new,			/* tp_new */
 };
 
 #define NAME_CHARS \
diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index 4e39c31..bb26c07 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -104,19 +104,6 @@
 	return 0;
 }
 
-static int
-aix_bindnewmodule(void *newmoduleptr, void *modlistptr)
-{
-	register ModulePtr modptr;
-
-	/*
-	-- Bind the new module with the list of loaded modules.
-	*/
-	for (modptr = (ModulePtr)modlistptr; modptr; modptr = modptr->next)
-		if (loadbind(0, modptr->entry, newmoduleptr) != 0)
-			return -1;
-	return 0;
-}
 
 static void
 aix_loaderror(const char *pathname)
@@ -192,10 +179,6 @@
 		aix_loaderror(pathname);
 		return NULL;
 	}
-	if (aix_bindnewmodule((void *)p, staticmodlistptr) == -1) {
-		aix_loaderror(pathname);
-		return NULL;
-	}
 
 	return p;
 }
