diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py
index fc97ea3..131d5b0 100644
--- a/Lib/plat-mac/pimp.py
+++ b/Lib/plat-mac/pimp.py
@@ -46,6 +46,51 @@
 DEFAULT_INSTALLDIR=distutils.sysconfig.get_python_lib()
 DEFAULT_PIMPDATABASE_FMT="http://www.python.org/packman/version-%s/%s-%s-%s-%s-%s.plist"
 
+def getDefaultDatabase(experimental=False):
+	if experimental:
+		status = "exp"
+	else:
+		status = "prod"
+		
+	major, minor, micro, state, extra = sys.version_info
+	pyvers = '%d.%d' % (major, minor)
+	if state != 'final':
+		pyvers = pyvers + '%s%d' % (state, extra)
+		
+	longplatform = distutils.util.get_platform()
+	osname, release, machine = longplatform.split('-')
+	# For some platforms we may want to differentiate between
+	# installation types
+	if osname == 'darwin':
+		if sys.prefix.startswith('/System/Library/Frameworks/Python.framework'):
+			osname = 'darwin_apple'
+		elif sys.prefix.startswith('/Library/Frameworks/Python.framework'):
+			osname = 'darwin_macpython'
+		# Otherwise we don't know...
+	# Now we try various URLs by playing with the release string.
+	# We remove numbers off the end until we find a match.
+	rel = release
+	while True:
+		url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, rel, machine)
+		try:
+			urllib2.urlopen(url)
+		except urllib2.HTTPError, arg:
+			pass
+		else:
+			break
+		if not rel:
+			# We're out of version numbers to try. Use the
+			# full release number, this will give a reasonable
+			# error message later
+			url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, release, machine)
+			break
+		idx = rel.rfind('.')
+		if idx < 0:
+			rel = ''
+		else:
+			rel = rel[:idx]
+	return url
+
 def _cmd(output, dir, *cmditems):
     """Internal routine to run a shell command in a given directory."""
     
@@ -163,7 +208,7 @@
         if not buildDir:
             buildDir = DEFAULT_BUILDDIR
         if not pimpDatabase:
-            pimpDatabase = self.getDefaultDatabase()
+            pimpDatabase = getDefaultDatabase()
         self.setInstallDir(installDir)
         self.flavorOrder = flavorOrder
         self.downloadDir = downloadDir
@@ -185,53 +230,6 @@
         
     def isUserInstall(self):
         return self.installDir != DEFAULT_INSTALLDIR
-        
-    def getDefaultDatabase(self, experimental=False):
-        if experimental:
-            status = "exp"
-        else:
-            status = "prod"
-            
-        major, minor, micro, state, extra = sys.version_info
-        pyvers = '%d.%d' % (major, minor)
-        if state != 'final':
-            pyvers = pyvers + '%s%d' % (state, extra)
-            
-        longplatform = distutils.util.get_platform()
-        osname, release, machine = longplatform.split('-')
-        # For some platforms we may want to differentiate between
-        # installation types
-        if osname == 'darwin':
-            if sys.prefix.startswith('/System/Library/Frameworks/Python.framework'):
-                osname = 'darwin_apple'
-            elif sys.prefix.startswith('/Library/Frameworks/Python.framework'):
-                osname = 'darwin_macpython'
-            # Otherwise we don't know...
-        # Now we try various URLs by playing with the release string.
-        # We remove numbers off the end until we find a match.
-        rel = release
-        while True:
-            url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, rel, machine)
-            try:
-                urllib2.urlopen(url)
-            except urllib2.HTTPError, arg:
-            	print 'getDefaultDatabase: cannot open', url
-            	print 'error', arg
-                pass
-            else:
-                break
-            if not rel:
-                # We're out of version numbers to try. Use the
-                # full release number, this will give a reasonable
-                # error message later
-                url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, release, machine)
-                break
-            idx = rel.rfind('.')
-            if idx < 0:
-                rel = ''
-            else:
-                rel = rel[:idx]
-        return url
 
     def check(self):
         """Check that the preferences make sense: directories exist and are
