Replace the run-time 'future-bytecode-stream-inspection' hack to find out
how 'import' was called with a compiletime mechanism: create either a tuple
of the import arguments, or None (in the case of a normal import), add it to
the code-block constants, and load it onto the stack before calling
IMPORT_NAME.
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;
 	}