diff --git a/Python/ceval.c b/Python/ceval.c
index 2648add..53a5177 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -71,7 +71,6 @@
 static PyObject *build_class(PyObject *, PyObject *, PyObject *);
 static int exec_statement(PyFrameObject *,
 			  PyObject *, PyObject *, PyObject *);
-static PyObject *find_from_args(PyFrameObject *, int);
 static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
 static void reset_exc_info(PyThreadState *);
 
@@ -1627,11 +1626,7 @@
 						"__import__ not found");
 				break;
 			}
-			u = find_from_args(f, INSTR_OFFSET());
-			if (u == NULL) {
-				x = u;
-				break;
-			}
+			u = POP();
 			w = Py_BuildValue("(OOOO)",
 				    w,
 				    f->f_globals,
@@ -3068,55 +3063,6 @@
 	return 0;
 }
 
-/* Hack for ni.py */
-static PyObject *
-find_from_args(PyFrameObject *f, int nexti)
-{
-	int opcode;
-	int oparg;
-	PyObject *list, *name;
-	unsigned char *next_instr;
-	
-	_PyCode_GETCODEPTR(f->f_code, &next_instr);
-	next_instr += nexti;
-
-	opcode = (*next_instr++);
-	if (opcode != IMPORT_FROM && opcode != IMPORT_STAR) {
-		Py_INCREF(Py_None);
-		return Py_None;
-	}
-	
-	list = PyList_New(0);
-	if (list == NULL)
-		return NULL;
-
-	if (opcode == IMPORT_STAR) {
-		name = PyString_FromString("*");
-		if (!name)
-			Py_DECREF(list);
-		else {
-			if (PyList_Append(list, name) < 0) {
-				Py_DECREF(list);
-			}
-			Py_DECREF(name);
-		}
-	} else {
-		do {
-			oparg = (next_instr[1]<<8) + next_instr[0];
-			/* Jump over our own argument, the next instruction
-			   (which is a STORE), and its argument.*/
-			next_instr += 5;
-			name = Getnamev(f, oparg);
-			if (PyList_Append(list, name) < 0) {
-				Py_DECREF(list);
-				break;
-			}
-			opcode = (*next_instr++);
-		} while (opcode == IMPORT_FROM);
-	}
-	return list;
-}
-
 
 #ifdef DYNAMIC_EXECUTION_PROFILE
 
diff --git a/Python/compile.c b/Python/compile.c
index dc6e2fb..ba910c4 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2329,14 +2329,27 @@
 com_import_stmt(struct compiling *c, node *n)
 {
 	int i;
+	PyObject *tup;
 	REQ(n, import_stmt);
 	/* 'import' dotted_name (',' dotted_name)* |
 	   'from' dotted_name 'import' ('*' | NAME (',' NAME)*) */
 	if (STR(CHILD(n, 0))[0] == 'f') {
 		/* 'from' dotted_name 'import' ... */
 		REQ(CHILD(n, 1), dotted_name);
-		com_addopname(c, IMPORT_NAME, CHILD(n, 1));
+		
+		if (TYPE(CHILD(n, 3)) == STAR) {
+			tup = Py_BuildValue("(s)", "*");
+		} else {
+			tup = PyTuple_New((NCH(n) - 2)/2);
+			for (i = 3; i < NCH(n); i += 2) {
+				PyTuple_SET_ITEM(tup, (i-3)/2, 
+					PyString_FromString(STR(
+							CHILD(CHILD(n, i), 0))));
+			}
+		}
+		com_addoparg(c, LOAD_CONST, com_addconst(c, tup));
 		com_push(c, 1);
+		com_addopname(c, IMPORT_NAME, CHILD(n, 1));
 		if (TYPE(CHILD(n, 3)) == STAR) 
 			com_addbyte(c, IMPORT_STAR);
 		else {
@@ -2351,8 +2364,9 @@
 		for (i = 1; i < NCH(n); i += 2) {
 			node *subn = CHILD(n, i);
 			REQ(subn, dotted_as_name);
-			com_addopname(c, IMPORT_NAME, CHILD(subn, 0));
+			com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None));
 			com_push(c, 1);
+			com_addopname(c, IMPORT_NAME, CHILD(subn, 0));
 			if (NCH(subn) > 1) {
 				int j;
 				if (strcmp(STR(CHILD(subn, 1)), "as") != 0) {
diff --git a/Python/import.c b/Python/import.c
index f38ee41..2e058bd 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -66,7 +66,7 @@
 /* XXX Perhaps the magic number should be frozen and a version field
    added to the .pyc file header? */
 /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
-#define MAGIC (50822 | ((long)'\r'<<16) | ((long)'\n'<<24))
+#define MAGIC (50823 | ((long)'\r'<<16) | ((long)'\n'<<24))
 
 /* Magic word as global; note that _PyImport_Init() can change the
    value of this global to accommodate for alterations of how the
@@ -1401,7 +1401,7 @@
 {
 	static PyObject *fromlist = NULL;
 	if (fromlist == NULL && strchr(name, '.') != NULL) {
-		fromlist = Py_BuildValue("[s]", "*");
+		fromlist = Py_BuildValue("(s)", "*");
 		if (fromlist == NULL)
 			return NULL;
 	}
