diff --git a/Modules/getpath.c b/Modules/getpath.c
index a8b46f5..2c0b6f2 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -374,7 +374,50 @@
     NSModule pythonModule;
 #endif
 
+	/* If there is no slash in the argv0 path, then we have to
+	 * assume python is on the user's $PATH, since there's no
+	 * other way to find a directory to start the search from.  If
+	 * $PATH isn't exported, you lose.
+	 */
+	if (strchr(prog, SEP))
+		strncpy(progpath, prog, MAXPATHLEN);
+	else if (path) {
+		while (1) {
+			char *delim = strchr(path, DELIM);
+
+			if (delim) {
+				size_t len = delim - path;
+				if (len > MAXPATHLEN)
+					len = MAXPATHLEN;
+				strncpy(progpath, path, len);
+				*(progpath + len) = '\0';
+			}
+			else
+				strncpy(progpath, path, MAXPATHLEN);
+
+			joinpath(progpath, prog);
+			if (isxfile(progpath))
+				break;
+
+			if (!delim) {
+				progpath[0] = '\0';
+				break;
+			}
+			path = delim + 1;
+		}
+	}
+	else
+		progpath[0] = '\0';
+	if (progpath[0] != SEP)
+		absolutize(progpath);
+	strncpy(argv0_path, progpath, MAXPATHLEN);
+
 #ifdef WITH_NEXT_FRAMEWORK
+	/* On Mac OS X we have a special case if we're running from a framework.
+	** This is because the python home should be set relative to the library,
+	** which is in the framework, not relative to the executable, which may
+	** be outside of the framework. Except when we're in the build directory...
+	*/
     pythonModule = NSModuleForSymbol(NSLookupAndBindSymbol("_Py_Initialize"));
     /* Use dylib functions to find out where the framework was loaded from */
     buf = NSLibraryNameForModule(pythonModule);
@@ -394,60 +437,15 @@
         if (!ismodule(argv0_path)) {
                 /* We are in the build directory so use the name of the
                    executable - we know that the absolute path is passed */
-                strncpy(progpath, prog, MAXPATHLEN);
+                strncpy(argv0_path, prog, MAXPATHLEN);
         }
         else {
                 /* Use the location of the library as the progpath */
-                strncpy(progpath, buf, MAXPATHLEN);
+                strncpy(argv0_path, buf, MAXPATHLEN);
         }
     }
-    else {
-        /* If we're not in a framework, fall back to the old way
-           (even though NSNameOfModule() probably does the same thing.) */
 #endif
 
-        /* If there is no slash in the argv0 path, then we have to
-         * assume python is on the user's $PATH, since there's no
-         * other way to find a directory to start the search from.  If
-         * $PATH isn't exported, you lose.
-         */
-        if (strchr(prog, SEP))
-            strncpy(progpath, prog, MAXPATHLEN);
-        else if (path) {
-            while (1) {
-                char *delim = strchr(path, DELIM);
-
-                if (delim) {
-                    size_t len = delim - path;
-                    if (len > MAXPATHLEN)
-                        len = MAXPATHLEN;
-                    strncpy(progpath, path, len);
-                    *(progpath + len) = '\0';
-                }
-                else
-                    strncpy(progpath, path, MAXPATHLEN);
-
-                joinpath(progpath, prog);
-                if (isxfile(progpath))
-                    break;
-
-                if (!delim) {
-                    progpath[0] = '\0';
-                    break;
-                }
-                path = delim + 1;
-            }
-        }
-        else
-            progpath[0] = '\0';
-        if (progpath[0] != SEP)
-            absolutize(progpath);
-#ifdef WITH_NEXT_FRAMEWORK
-    }
-#endif
-
-    strncpy(argv0_path, progpath, MAXPATHLEN);
-
 #if HAVE_READLINK
     {
         char tmpbuffer[MAXPATHLEN+1];
