diff --git a/Mac/scripts/gensuitemodule.py b/Mac/scripts/gensuitemodule.py
index f72a50b..1cd2ef6 100644
--- a/Mac/scripts/gensuitemodule.py
+++ b/Mac/scripts/gensuitemodule.py
@@ -15,23 +15,35 @@
 import StringIO
 import keyword
 import macresource
-from aetools import unpack
-
+import aetools
+import distutils.sysconfig
+import OSATerminology
 from Carbon.Res import *
+import MacOS
 
-DEFAULT_PACKAGEFOLDER=os.path.join(sys.prefix, 'Lib', 'plat-mac', 'lib-scriptpackages')
+_MAC_LIB_FOLDER=os.path.dirname(aetools.__file__)
+DEFAULT_STANDARD_PACKAGEFOLDER=os.path.join(_MAC_LIB_FOLDER, 'lib-scriptpackages')
+DEFAULT_USER_PACKAGEFOLDER=distutils.sysconfig.get_python_lib()
 
 def main():
 	if len(sys.argv) > 1:
 		for filename in sys.argv[1:]:
 			processfile(filename)
 	else:
-		filename = EasyDialogs.AskFileForOpen(message='Select file with aeut/aete resource:')
+		# The dialogOptionFlags below allows selection of .app bundles.
+		filename = EasyDialogs.AskFileForOpen(
+			message='Select scriptable application',
+			dialogOptionFlags=0x1056)
 		if not filename:
 			sys.exit(0)
-		processfile(filename)
+		try:
+			processfile(filename)
+		except MacOS.Error, arg:
+			print "Error getting terminology:", arg
+			print "Retry, manually parsing resources"
+			processfile_fromresource(filename)
 
-def processfile(fullname):
+def processfile_fromresource(fullname):
 	"""Process all resources in a single file"""
 	cur = CurResFile()
 	print "Processing", fullname
@@ -60,6 +72,22 @@
 	UseResFile(cur)
 	compileaetelist(aetelist, fullname)
 
+def processfile(fullname):
+	"""Ask an application for its terminology and process that"""
+	aedescobj, launched = OSATerminology.GetSysTerminology(fullname)
+	if launched:
+		print "Launched", fullname
+	raw = aetools.unpack(aedescobj)
+	if not raw: 
+		print 'Unpack returned empty value:', raw
+		return
+	if not raw[0].data: 
+		print 'Unpack returned value without data:', raw
+		return
+	aedata = raw[0]
+	aete = decode(aedata.data)
+	compileaete(aete, None, fullname)
+
 def compileaetelist(aetelist, fullname):
 	for aete, resinfo in aetelist:
 		compileaete(aete, resinfo, fullname)
@@ -240,12 +268,12 @@
 	if len(packagename) > 27:
 		packagename = packagename[:27]
 	pathname = EasyDialogs.AskFolder(message='Create and select package folder for %s'%packagename,
-		defaultLocation=DEFAULT_PACKAGEFOLDER)
+		defaultLocation=DEFAULT_USER_PACKAGEFOLDER)
 	if not pathname:
 		return
 	packagename = os.path.split(os.path.normpath(pathname))[1]
 	basepkgname = EasyDialogs.AskFolder(message='Package folder for base suite (usually StdSuites)',
-		defaultLocation=DEFAULT_PACKAGEFOLDER)
+		defaultLocation=DEFAULT_STANDARD_PACKAGEFOLDER)
 	if basepkgname:
 		dirname, basepkgname = os.path.split(os.path.normpath(basepkgname))
 		if not dirname in sys.path:
@@ -907,4 +935,3 @@
 if __name__ == '__main__':
 	main()
 	sys.exit(1)
-print identify('for')
