diff --git a/Python/dynload_aix.c b/Python/dynload_aix.c
index f8f4317..0e27152 100644
--- a/Python/dynload_aix.c
+++ b/Python/dynload_aix.c
@@ -202,7 +202,7 @@
 }
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
diff --git a/Python/dynload_beos.c b/Python/dynload_beos.c
index 4b4a49a..717d5a9 100644
--- a/Python/dynload_beos.c
+++ b/Python/dynload_beos.c
@@ -185,13 +185,14 @@
 
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	image_id the_id;
 	status_t retval;
 	char fullpath[PATH_MAX];
+	char funcname[258];
 
 	if( Py_VerboseFlag ) {
 		printf( "load_add_on( %s )\n", pathname );
@@ -236,6 +237,7 @@
 		return NULL;
 	}
 
+	sprintf(funcname, "init%.200s", shortname);
 	if( Py_VerboseFlag ) {
 		printf( "get_image_symbol( %s )\n", funcname );
 	}
@@ -274,7 +276,7 @@
 	/* Save the module name and image ID for later so we can clean up
 	 * gracefully.
 	 */
-	beos_add_dyn( name, the_id );
+	beos_add_dyn( fqname, the_id );
 
 	return p;
 }
diff --git a/Python/dynload_dl.c b/Python/dynload_dl.c
index 3b445ce..45dcff7 100644
--- a/Python/dynload_dl.c
+++ b/Python/dynload_dl.c
@@ -46,8 +46,11 @@
 };
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
+	char funcname[258];
+
+	sprintf(funcname, "init%.200s", shortname);
 	return dl_loadmod(Py_GetProgramName(), pathname, funcname);
 }
diff --git a/Python/dynload_hpux.c b/Python/dynload_hpux.c
index 4379cbe..b8a5ffc 100644
--- a/Python/dynload_hpux.c
+++ b/Python/dynload_hpux.c
@@ -37,6 +37,11 @@
 #include "Python.h"
 #include "importdl.h"
 
+#if defined(__hp9000s300)
+#define FUNCNAME_PATTERN "_init%.200s"
+#else
+#define FUNCNAME_PATTERN "init%.200s"
+#endif
 
 const struct filedescr _PyImport_DynLoadFiletab[] = {
 	{".sl", "rb", C_EXTENSION},
@@ -44,12 +49,13 @@
 	{0, 0}
 };
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	shl_t lib;
 	int flags;
+	char funcname[258];
 
 	flags = BIND_FIRST | BIND_DEFERRED;
 	if (Py_VerboseFlag) {
@@ -67,6 +73,7 @@
 		PyErr_SetString(PyExc_ImportError, buf);
 		return NULL;
 	}
+	sprintf(funcname, FUNCNAME_PATTERN, shortname);
 	if (Py_VerboseFlag)
 		printf("shl_findsym %s\n", funcname);
 	shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p);
diff --git a/Python/dynload_mac.c b/Python/dynload_mac.c
index 9161995..58c57d5 100644
--- a/Python/dynload_mac.c
+++ b/Python/dynload_mac.c
@@ -59,10 +59,11 @@
 };
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
+	char funcname[258];
 
 	/*
 	** Dynamic loading of CFM shared libraries on the Mac.  The
@@ -121,6 +122,7 @@
 		return NULL;
 	}
 	/* Locate the address of the correct init function */
+	sprintf(funcname, "init%.200s", shortname);
 	err = FindSymbol(connID, Pstring(funcname), &symAddr, &class);
 	if ( err ) {
 		sprintf(buf, "%s: %.200s",
diff --git a/Python/dynload_next.c b/Python/dynload_next.c
index bcb9e4b..5088b05 100644
--- a/Python/dynload_next.c
+++ b/Python/dynload_next.c
@@ -68,10 +68,13 @@
 	{0, 0}
 };
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p = NULL;
+	char funcname[258];
+
+	sprintf(funcname, "_init%.200s", shortname);
 
 #ifdef USE_RLD
 	{
diff --git a/Python/dynload_os2.c b/Python/dynload_os2.c
index 6090c33..528e7dc 100644
--- a/Python/dynload_os2.c
+++ b/Python/dynload_os2.c
@@ -45,13 +45,14 @@
 	{0, 0}
 };
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	APIRET  rc;
 	HMODULE hDLL;
 	char failreason[256];
+	char funcname[258];
 
 	rc = DosLoadModule(failreason,
 			   sizeof(failreason),
@@ -67,6 +68,7 @@
 		return NULL;
 	}
 
+	sprintf(funcname, "init%.200s", shortname);
 	rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
 	if (rc != NO_ERROR)
 		p = NULL; /* Signify Failure to Acquire Entrypoint */
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c
index d3c5a6e..2823bbb 100644
--- a/Python/dynload_shlib.c
+++ b/Python/dynload_shlib.c
@@ -65,11 +65,22 @@
 static int nhandles = 0;
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
 	void *handle;
+	char funcname[258];
+	char pathbuf[260];
+
+	if (strchr(pathname, '/') == NULL) {
+		/* Prefix bare filename with "./" */
+		sprintf(pathbuf, "./%-.255s", pathname);
+		pathname = pathbuf;
+	}
+
+	/* ### should there be a leading underscore for some platforms? */
+	sprintf(funcname, "init%.200s", shortname);
 
 	if (fp != NULL) {
 		int i;
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 9e68cac..08a2a89 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -49,10 +49,13 @@
 };
 
 
-dl_funcptr _PyImport_GetDynLoadFunc(const char *name, const char *funcname,
+dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
 				    const char *pathname, FILE *fp)
 {
 	dl_funcptr p;
+	char funcname[258];
+
+	sprintf(funcname, "init%.200s", shortname);
 
 #ifdef MS_WIN32
 	{
diff --git a/Python/import.c b/Python/import.c
index e10463b..bce1b57 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -1234,9 +1234,11 @@
 		m = load_compiled_module(name, buf, fp);
 		break;
 
+#ifdef HAVE_DYNAMIC_LOADING
 	case C_EXTENSION:
 		m = _PyImport_LoadDynamicModule(name, buf, fp);
 		break;
+#endif
 
 #ifdef macintosh
 	case PY_RESOURCE:
@@ -2158,6 +2160,8 @@
 	return m;
 }
 
+#ifdef HAVE_DYNAMIC_LOADING
+
 static PyObject *
 imp_load_dynamic(self, args)
 	PyObject *self;
@@ -2180,6 +2184,8 @@
 	return m;
 }
 
+#endif /* HAVE_DYNAMIC_LOADING */
+
 static PyObject *
 imp_load_source(self, args)
 	PyObject *self;
@@ -2330,7 +2336,9 @@
 	{"is_builtin",		imp_is_builtin,		1},
 	{"is_frozen",		imp_is_frozen,		1},
 	{"load_compiled",	imp_load_compiled,	1},
+#ifdef HAVE_DYNAMIC_LOADING
 	{"load_dynamic",	imp_load_dynamic,	1},
+#endif
 	{"load_package",	imp_load_package,	1},
 #ifdef macintosh
 	{"load_resource",	imp_load_resource,	1},
diff --git a/Python/importdl.c b/Python/importdl.c
index 6b3eccc..8dd14b8 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -30,59 +30,22 @@
 ******************************************************************/
 
 /* Support for dynamic loading of extension modules */
-/* If no dynamic linking is supported, this file still generates some code! */
 
 #include "Python.h"
-#include "importdl.h"
 
-/* Explanation of some of the the various #defines used by dynamic linking...
-
-   symbol	-- defined for:
-
-   HAVE_DYNAMIC_LOADING -- any kind of dynamic linking (from ./configure)
-   USE_SHLIB	-- SunOS or IRIX 5 (SVR4?) shared libraries
-   _AIX		-- AIX style dynamic linking
-   __NetBSD__	-- NetBSD shared libraries
-		   (assuming dlerror() was introduced between 1.2 and 1.3)
-   __BEOS__ -- BeOS shared libraries - defined by the compiler
+/* ./configure sets HAVE_DYNAMIC_LOADING if dynamic loading of modules is
+   supported on this platform. configure will then compile and link in one
+   of the dynload_*.c files, as appropriate. We will call a function in
+   those modules to get a function pointer to the module's init function.
 */
-
-/* Configure dynamic linking */
-
 #ifdef HAVE_DYNAMIC_LOADING
 
+#include "importdl.h"
+
 extern dl_funcptr _PyImport_GetDynLoadFunc(const char *name,
-					   const char *funcname,
+					   const char *shortname,
 					   const char *pathname, FILE *fp);
 
-/* ### given NeXT, is WITH_DYLD not necessary? */
-
-#if defined(__hp9000s300) || (defined(__NetBSD__) || defined(__FreeBSD__)) && !defined(__ELF__) || defined(__OpenBSD__) || defined(__BORLANDC__) || defined(NeXT) || defined(WITH_DYLD)
-#define FUNCNAME_PATTERN "_init%.200s"
-#else
-#define FUNCNAME_PATTERN "init%.200s"
-#endif
-
-/* ### temporary, for setting USE_SHLIB */
-#if defined(__NetBSD__) && (NetBSD < 199712)
-#define USE_SHLIB
-#else
-#if defined(HAVE_DLOPEN) || defined(M_UNIX)
-#define USE_SHLIB
-#endif
-#endif
-#ifdef _AIX
-#undef USE_SHLIB
-#endif
-#ifdef __BEOS__
-#undef USE_SHLIB
-#endif
-
-#endif /* HAVE_DYNAMIC_LOADING */
-
-#ifdef NO_DYNAMIC_LINK
-#undef HAVE_DYNAMIC_LOADING
-#endif
 
 
 PyObject *
@@ -91,24 +54,9 @@
 	char *pathname;
 	FILE *fp;
 {
-#ifndef HAVE_DYNAMIC_LOADING
-	PyErr_SetString(PyExc_ImportError,
-			"dynamically linked modules not supported");
-	return NULL;
-#else
 	PyObject *m, *d, *s;
-	char funcname[258];
 	char *lastdot, *shortname, *packagecontext;
-	dl_funcptr p = NULL;
-
-#ifdef USE_SHLIB
-	char pathbuf[260];
-	if (strchr(pathname, '/') == NULL) {
-		/* Prefix bare filename with "./" */
-		sprintf(pathbuf, "./%-.255s", pathname);
-		pathname = pathbuf;
-	}
-#endif /* USE_SHLIB */
+	dl_funcptr p;
 
 	if ((m = _PyImport_FindExtension(name, pathname)) != NULL) {
 		Py_INCREF(m);
@@ -123,15 +71,14 @@
 		packagecontext = name;
 		shortname = lastdot+1;
 	}
-	sprintf(funcname, FUNCNAME_PATTERN, shortname);
 
-	p = _PyImport_GetDynLoadFunc(name, funcname, pathname, fp);
+	p = _PyImport_GetDynLoadFunc(name, shortname, pathname, fp);
 	if (PyErr_Occurred())
 		return NULL;
 	if (p == NULL) {
 		PyErr_Format(PyExc_ImportError,
-		   "dynamic module does not define init function (%.200s)",
-			     funcname);
+		   "dynamic module does not define init function (init%.200s)",
+			     shortname);
 		return NULL;
 	}
 	_Py_PackageContext = packagecontext;
@@ -160,5 +107,6 @@
 			name, pathname);
 	Py_INCREF(m);
 	return m;
-#endif /* HAVE_DYNAMIC_LOADING */
 }
+
+#endif /* HAVE_DYNAMIC_LOADING */
