fix import related leaks
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;
 }