diff --git a/Mac/Include/pythonresources.h b/Mac/Include/pythonresources.h
index ca00a23..49e909f 100644
--- a/Mac/Include/pythonresources.h
+++ b/Mac/Include/pythonresources.h
@@ -75,4 +75,10 @@
 #define POPT_DEBUGGING	4
 #define POPT_KEEPNORM	5
 #define POPT_KEEPERR	6
+
+/* From macgetpath.c: */
+void PyMac_PreferenceOptions Py_PROTO((int *inspect, int *verbose, int *suppress_print, 
+						 int *unbuffered, int *debugging, int *keep_normal,
+						 int *keep_error));
+
  
diff --git a/Mac/Python/macapplication.c b/Mac/Python/macapplication.c
index 5d7bc83..0028741 100644
--- a/Mac/Python/macapplication.c
+++ b/Mac/Python/macapplication.c
@@ -31,9 +31,6 @@
 extern void PyMac_InitApplication();
 
 main() {
-#if defined(USE_GUSI)
-	GUSIDefaultSetup();
-#endif
 #if defined(__MWERKS__) && defined(__CFM68K__)
 	printf("Hello, world!\n");
 #endif
diff --git a/Mac/Python/macgetargv.c b/Mac/Python/macgetargv.c
index 90cdb5a..96a02fd 100644
--- a/Mac/Python/macgetargv.c
+++ b/Mac/Python/macgetargv.c
@@ -295,31 +295,12 @@
 	}
 }
 
-/* Initialize the Mac toolbox world */
-
-static void
-init_mac_world()
-{
-#ifdef THINK_C
-	printf("\n");
-#else
-	MaxApplZone();
-	InitGraf(&qd.thePort);
-	InitFonts();
-	InitWindows();
-	TEInit();
-	InitDialogs((long)0);
-	InitMenus();
-	InitCursor();
-#endif
-}
 /* Get the argv vector, return argc */
 
 int
 PyMac_GetArgv(pargv)
 	char ***pargv;
 {
-	init_mac_world();
 	
 	arg_count = 0;
 	arg_vector[arg_count++] = strdup(get_application_name());
diff --git a/Mac/Python/macgetpath.c b/Mac/Python/macgetpath.c
index b782736..38feb3e 100644
--- a/Mac/Python/macgetpath.c
+++ b/Mac/Python/macgetpath.c
@@ -43,9 +43,9 @@
 	char *curwd;
 	char *p, *endp;
 	int newlen;
-	extern char *PyMac_GetPythonDir();
+	staticforward char *PyMac_GetPythonDir();
 #ifndef USE_BUILTIN_PATH
-	extern char *PyMac_GetPythonPath();
+	staticforward char *PyMac_GetPythonPath();
 #endif
 	
 	if ( pythonpath ) return pythonpath;
@@ -89,7 +89,7 @@
 /*
 ** Open/create the Python Preferences file, return the handle
 */
-short
+static short
 PyMac_OpenPrefFile()
 {
     AliasHandle handle;
@@ -142,7 +142,7 @@
 /*
 ** Return the name of the Python directory
 */
-char *
+static char *
 PyMac_GetPythonDir()
 {
     static char name[256];
@@ -187,7 +187,7 @@
 }
 
 #ifndef USE_BUILTIN_PATH
-char *
+static char *
 PyMac_GetPythonPath(dir)
 char *dir;
 {
diff --git a/Mac/Python/macmain.c b/Mac/Python/macmain.c
index ecaa018..3d878ed 100644
--- a/Mac/Python/macmain.c
+++ b/Mac/Python/macmain.c
@@ -68,6 +68,54 @@
 static int keep_normal;
 static int keep_error = 1;
 
+/* Initialize the Mac toolbox world */
+
+static void
+init_mac_world()
+{
+#ifdef THINK_C
+	printf("\n");
+#else
+	MaxApplZone();
+	InitGraf(&qd.thePort);
+	InitFonts();
+	InitWindows();
+	TEInit();
+	InitDialogs((long)0);
+	InitMenus();
+	InitCursor();
+#endif
+}
+
+/* Initialization code shared by interpreter and applets */
+
+static void
+init_common()
+{
+
+	/* Initialize toolboxes */
+	init_mac_world();
+	
+#ifdef USE_MAC_SHARED_LIBRARY
+	/* Add the shared library to the stack of resource files */
+	PyMac_AddLibResources();
+#endif
+
+#if defined(USE_GUSI)
+	/* Setup GUSI */
+	GUSIDefaultSetup();
+#endif
+
+#ifdef USE_SIOUX
+	/* Set various SIOUX flags. Some are changed later based on options */
+	SIOUXSettings.asktosaveonclose = 0;
+	SIOUXSettings.showstatusline = 0;
+	SIOUXSettings.tabspaces = 4;
+#endif
+
+}
+
+
 #ifdef USE_MAC_APPLET_SUPPORT
 /* Applet support */
 
@@ -112,14 +160,7 @@
 	char **argv;
 	int err;
 
-#ifdef USE_MAC_SHARED_LIBRARY
-	PyMac_AddLibResources();
-#endif
-#ifdef USE_SIOUX
-	SIOUXSettings.asktosaveonclose = 0;
-	SIOUXSettings.showstatusline = 0;
-	SIOUXSettings.tabspaces = 4;
-#endif
+	init_common();
 	argc = PyMac_GetArgv(&argv);
 	Py_Initialize();
 	PySys_SetArgv(argc, argv);
@@ -139,14 +180,7 @@
 	int argc;
 	char **argv;
 	
-#ifdef USE_MAC_SHARED_LIBRARY
-	PyMac_AddLibResources();
-#endif
-#ifdef USE_SIOUX
-	SIOUXSettings.asktosaveonclose = 0;
-	SIOUXSettings.showstatusline = 0;
-	SIOUXSettings.tabspaces = 4;
-#endif
+	init_common();
 	argc = PyMac_GetArgv(&argv);
 	if ( argc > 1 ) {
 		/* We're running a script. Attempt to change current directory */
@@ -181,8 +215,8 @@
 	/* Default-defaults: */
 	*keep_error = 1;
 	/* Get default settings from our preference file */
-	PyMac_PreferenceOptions(&inspect, &Py_VerboseFlag, &Py_SuppressPrintingFlag,
-			&unbuffered, &Py_DebugFlag, &keep_normal, &keep_error);
+	PyMac_PreferenceOptions(inspect, verbose, suppress_print,
+			unbuffered, debugging, keep_normal, keep_error);
 	/* If option is pressed override these */
 	GetKeys(rmap);
 	map = (unsigned char *)rmap;
