diff --git a/Python/import.c b/Python/import.c
index e258fd1..b0f46b0 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -411,13 +411,13 @@
 {
 	int i, npath, len, namelen;
 	struct filedescr *fdp;
-	FILE *fp;
+	FILE *fp = NULL;
 
 	if (path == NULL)
 		path = sysget("path");
 	if (path == NULL || !is_listobject(path)) {
 		err_setstr(ImportError,
-		    "module search path must be list of directory names");
+			   "sys.path must be a list of directory names");
 		return NULL;
 	}
 	npath = getlistsize(path);
@@ -528,7 +528,7 @@
 		if (strcmp(name, inittab[i].name) == 0) {
 			if (inittab[i].initfunc == NULL) {
 				err_setstr(ImportError,
-					   "cannot re-init internal module");
+					   "Cannot re-init internal module");
 				return -1;
 			}
 			if (verbose)
@@ -544,9 +544,7 @@
 }
 
 
-/* Initialize a frozen module.
-   Return 1 for succes, 0 if the module is not found, and -1 with
-   an exception set if the initialization failed. */
+/* Frozen modules */
 
 extern struct frozen {
 	char *name;
@@ -554,21 +552,50 @@
 	int size;
 } frozen_modules[];
 
-/* This function is also used from frozenmain.c */
+static struct frozen *
+find_frozen(name)
+	char *name;
+{
+	struct frozen *p;
+	object *co;
+
+	for (p = frozen_modules; ; p++) {
+		if (p->name == NULL)
+			return NULL;
+		if (strcmp(p->name, name) == 0)
+			break;
+	}
+	return p;
+}
+
+static object *
+get_frozen_object(name)
+	char *name;
+{
+	struct frozen *p = find_frozen(name);
+
+	if (p == NULL) {
+		err_setstr(ImportError, "No such frozen object");
+		return NULL;
+	}
+	return rds_object(p->code, p->size);
+}
+
+/* Initialize a frozen module.
+   Return 1 for succes, 0 if the module is not found, and -1 with
+   an exception set if the initialization failed.
+   This function is also used from frozenmain.c */
 
 int
 init_frozen(name)
 	char *name;
 {
-	struct frozen *p;
+	struct frozen *p = find_frozen(name);
 	object *co;
 	object *m;
-	for (p = frozen_modules; ; p++) {
-		if (p->name == NULL)
-			return 0;
-		if (strcmp(p->name, name) == 0)
-			break;
-	}
+
+	if (p == NULL)
+		return 0;
 	if (verbose)
 		fprintf(stderr, "import %s # frozen\n", name);
 	co = rds_object(p->code, p->size);
@@ -576,7 +603,7 @@
 		return -1;
 	if (!is_codeobject(co)) {
 		DECREF(co);
-		err_setstr(SystemError, "frozen object is not a code object");
+		err_setstr(TypeError, "frozen object is not a code object");
 		return -1;
 	}
 	m = exec_code_module(name, co);
@@ -786,6 +813,19 @@
 }
 
 static object *
+imp_get_frozen_object(self, args)
+	object *self;
+	object *args;
+{
+	char *name;
+	int ret;
+	object *m;
+	if (!newgetargs(args, "s", &name))
+		return NULL;
+	return get_frozen_object(name);
+}
+
+static object *
 imp_is_builtin(self, args)
 	object *self;
 	object *args;
@@ -928,6 +968,7 @@
 }
 
 static struct methodlist imp_methods[] = {
+	{"get_frozen_object",	imp_get_frozen_object,	1},
 	{"get_magic",		imp_get_magic,		1},
 	{"get_suffixes",	imp_get_suffixes,	1},
 	{"find_module",		imp_find_module,	1},
