diff --git a/Mac/Python/macgetpath.c b/Mac/Python/macgetpath.c
index 466f073..a7c1366 100644
--- a/Mac/Python/macgetpath.c
+++ b/Mac/Python/macgetpath.c
@@ -34,6 +34,36 @@
 :Lib:test\n\
 :Lib:mac"
 
+static void
+getpreffilefss(FSSpec *fssp)
+{
+	static int diditbefore=0;
+	static FSSpec fss;
+    short prefdirRefNum;
+    long prefdirDirID;
+    Handle namehandle;
+    
+    if ( !diditbefore ) {
+	    if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
+	    				&prefdirDirID) != noErr ) {
+	    	/* Something wrong with preferences folder */
+	    	(void)StopAlert(NOPREFDIR_ID, NULL);
+	    	exit(1);
+	    }
+	    
+	    if ( (namehandle=GetNamedResource('STR ', PREFFILENAME_NAME)) == NULL ) {
+	    	(void)StopAlert(NOPREFNAME_ID, NULL);
+	    	exit(1);
+	    }
+	    
+	    HLock(namehandle);
+		(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, (unsigned char *)*namehandle, &fss);
+		HUnlock(namehandle);
+		ReleaseResource(namehandle);
+		diditbefore = 1;
+	}
+	*fssp = fss;
+}
 
 char *
 Py_GetPath()
@@ -44,21 +74,21 @@
 	** - Add :
 	*/
 	static char *pythonpath;
-	char *curwd;
 	char *p, *endp;
 	int newlen;
+	char *curwd;
 	staticforward char *PyMac_GetPythonDir();
 #ifndef USE_BUILTIN_PATH
 	staticforward char *PyMac_GetPythonPath();
 #endif
 	
 	if ( pythonpath ) return pythonpath;
-	curwd = PyMac_GetPythonDir();
 #ifndef USE_BUILTIN_PATH
-	if ( pythonpath = PyMac_GetPythonPath(curwd) )
+	if ( pythonpath = PyMac_GetPythonPath() )
 		return pythonpath;
 	printf("Warning: No pythonpath resource found, using builtin default\n");
 #endif
+	curwd = PyMac_GetPythonDir();
 	p = PYTHONPATH;
 	endp = p;
 	pythonpath = malloc(2);
@@ -90,6 +120,7 @@
 	return pythonpath;
 }
 
+
 /*
 ** Open/create the Python Preferences file, return the handle
 */
@@ -99,25 +130,16 @@
     AliasHandle handle;
     FSSpec dirspec;
     short prefrh;
-    short prefdirRefNum;
-    long prefdirDirID;
-    short action;
     OSErr err;
 
-    if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
-    				&prefdirDirID) != noErr ) {
-    	/* Something wrong with preferences folder */
-    	(void)StopAlert(NOPREFDIR_ID, NULL);
-    	exit(1);
-    }
-    
-	(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
+	getpreffilefss(&dirspec);
 	prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
 	if ( prefrh < 0 ) {
+#if 0
 		action = CautionAlert(NOPREFFILE_ID, NULL);
 		if ( action == NOPREFFILE_NO )
 			exit(1);
-	
+#endif
 		FSpCreateResFile(&dirspec, 'Pyth', 'pref', 0);
 		prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
 		if ( prefrh == -1 ) {
@@ -149,12 +171,16 @@
 static char *
 PyMac_GetPythonDir()
 {
-    static char name[256];
+	static int diditbefore = 0;
+    static char name[256] = {':', '\0'};
     AliasHandle handle;
     FSSpec dirspec;
     Boolean modified = 0;
     short oldrh, prefrh = -1, homerh;
     
+    if ( diditbefore )
+    	return name;
+    	
     oldrh = CurResFile();
 
     /* First look for an override in the application file */
@@ -168,14 +194,16 @@
 	    handle = (AliasHandle)Get1Resource('alis', PYTHONHOME_ID);
 	    if ( handle == NULL ) {
 	    	(void)StopAlert(BADPREFFILE_ID, NULL);
-	    	exit(1);
+	    	diditbefore=1;
+	    	return ":";
 	    }
 	    homerh = prefrh;
     }
 	/* It exists. Resolve it (possibly updating it) */
 	if ( ResolveAlias(NULL, handle, &dirspec, &modified) != noErr ) {
     	(void)StopAlert(BADPREFFILE_ID, NULL);
-    	exit(1);
+    	diditbefore=1;
+    	return ":";
     }
     if ( modified ) {
    		ChangedResource((Handle)handle);
@@ -192,18 +220,16 @@
 		name[0] = 0;
 		(void)getwd(name);
 	}
+	diditbefore = 1;
 	return name;
 }
 
 #ifndef USE_BUILTIN_PATH
 static char *
-PyMac_GetPythonPath(dir)
-char *dir;
+PyMac_GetPythonPath()
 {
     FSSpec dirspec;
     short oldrh, prefrh = -1;
-    short prefdirRefNum;
-    long prefdirDirID;
     char *rv;
     int i, newlen;
     Str255 pathitem;
@@ -228,15 +254,9 @@
     SetResLoad(1);
     UseResFile(oldrh);
     
-    /*
-    ** Remember old resource file and try to open preferences file
-    ** in the preferences folder.
-    */
-    if ( FindFolder(kOnSystemDisk, 'pref', kDontCreateFolder, &prefdirRefNum,
-    				&prefdirDirID) == noErr ) {
-    	(void)FSMakeFSSpec(prefdirRefNum, prefdirDirID, "\pPython Preferences", &dirspec);
-		prefrh = FSpOpenResFile(&dirspec, fsRdWrShPerm);
-    }
+    /* Open the preferences file only if there is no override */
+    if ( resource_id != PYTHONPATHOVERRIDE_ID )
+	    prefrh = PyMac_OpenPrefFile();
     /* At this point, we may or may not have the preferences file open, and it
     ** may or may not contain a sys.path STR# resource. We don't care, if it doesn't
     ** exist we use the one from the application (the default).
@@ -252,6 +272,8 @@
     		break;
     	if ( pathitem[0] >= 9 && strncmp((char *)pathitem+1, "$(PYTHON)", 9) == 0 ) {
     		/* We have to put the directory in place */
+    		char *dir = PyMac_GetPythonDir();
+    		
     		newlen = strlen(rv) + strlen(dir) + (pathitem[0]-9) + 2;
     		if( (rv=realloc(rv, newlen)) == NULL)
     			goto out;
