diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index dbf201e..517aea1 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -47,14 +47,10 @@
 	object *args;
 {
 	char *name;
-	object *m;
 
 	if (!newgetargs(args, "s:__import__", &name))
 		return NULL;
-	m = import_module(name);
-	XINCREF(m);
-
-	return m;
+	return import_module(name);
 }
 
 
diff --git a/Python/import.c b/Python/import.c
index 302cc25..9219c36 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -110,8 +110,8 @@
 /* Get the module object corresponding to a module name.
    First check the modules dictionary if there's one there,
    if not, create a new one and insert in in the modules dictionary.
-   Because the former action is most common, this does not return a
-   'new' reference! */
+   Because the former action is most common, THIS DOES NOT RETURN A
+   'NEW' REFERENCE! */
 
 object *
 add_module(name)
@@ -135,7 +135,8 @@
 }
 
 
-/* Execute a code object in a module and return its module object */
+/* Execute a code object in a module and return the module object
+   WITH INCREMENTED REFERENCE COUNT */
 
 static object *
 exec_code_module(name, co)
@@ -247,7 +248,7 @@
 
 
 /* Load a module from a compiled file, execute it, and return its
-   module object */
+   module object WITH INCREMENTED REFERENCE COUNT */
 
 static object *
 load_compiled_module(name, cpathname, fp)
@@ -344,8 +345,8 @@
 
 
 /* Load a source module from a given file and return its module
-   object.  If there's a matching byte-compiled file, use that
-   instead. */
+   object WITH INCREMENTED REFERENCE COUNT.  If there's a matching
+   byte-compiled file, use that instead. */
 
 static object *
 load_source_module(name, pathname, fp)
@@ -452,7 +453,7 @@
 
 
 /* Load an external module using the default search path and return
-   its module object */
+   its module object WITH INCREMENTED REFERENCE COUNT */
 
 static object *
 load_module(name)
@@ -461,7 +462,7 @@
 	char buf[MAXPATHLEN+1];
 	struct filedescr *fdp;
 	FILE *fp = NULL;
-	object *m = NULL;
+	object *m;
 
 	fdp = find_module(name, (object *)NULL, buf, MAXPATHLEN+1, &fp);
 	if (fdp == NULL)
@@ -484,6 +485,7 @@
 	default:
 		err_setstr(SystemError,
 			   "find_module returned unexpected result");
+		m = NULL;
 
 	}
 	fclose(fp);
@@ -556,12 +558,15 @@
 	}
 	m = exec_code_module(name, (codeobject *)co);
 	DECREF(co);
-	return m == NULL ? -1 : 1;
+	if (m == NULL)
+		return -1;
+	DECREF(m);
+	return 1;
 }
 
 
 /* Import a module, either built-in, frozen, or external, and return
-   its module object */
+   its module object WITH INCREMENTED REFERENCE COUNT */
 
 object *
 import_module(name)
@@ -569,7 +574,10 @@
 {
 	object *m;
 
-	if ((m = dictlookup(import_modules, name)) == NULL) {
+	if ((m = dictlookup(import_modules, name)) != NULL) {
+		INCREF(m);
+	}
+	else {
 		int i;
 		if ((i = init_builtin(name)) || (i = init_frozen(name))) {
 			if (i < 0)
@@ -579,6 +587,8 @@
 			        err_setstr(SystemError,
 				 "built-in module not initialized properly");
 			}
+			else
+				INCREF(m);
 		}
 		else
 			m = load_module(name);
@@ -613,10 +623,10 @@
 	if ((i = init_builtin(name)) || (i = init_frozen(name))) {
 		if (i < 0)
 			return NULL;
+		INCREF(m);
 	}
 	else
 		m = load_module(name);
-	XINCREF(m);
 	return m;
 }
 
