diff --git a/Mac/Lib/findmodulefiles.py b/Mac/Lib/findmodulefiles.py
new file mode 100644
index 0000000..0a55c8f
--- /dev/null
+++ b/Mac/Lib/findmodulefiles.py
@@ -0,0 +1,91 @@
+"""Findmodulefiles - Find out where modules are loaded from.
+Run findmodulefiles() after running a program with "python -i". The
+resulting file list can be given to mkfrozenresources or to a
+(non-existent) freeze-like application.
+
+findmodulefiles will create a file listing all modules and where they have
+been imported from.
+
+findunusedbuiltins takes a list of (modules, file) and prints all builtin modules
+that are _not_ in the list. The list is created by opening the findmodulefiles
+output, reading it and eval()ing that.
+
+mkpycresource takes a list of (module, file) and creates a resourcefile with all those
+modules and (optionally) a main module.
+"""
+
+def findmodulefiles(output=None):
+	"""Produce a file containing a list of (modulename, filename-or-None)
+	tuples mapping module names to source files"""
+	# Immedeately grab the names
+	import sys
+	module_names = sys.modules.keys()[:]
+	import os
+	if not output:
+		if os.name == 'mac':
+			import macfs
+			
+			output, ok = macfs.StandardPutFile('Module file listing output:')
+			if not ok: sys.exit(0)
+			output = output.as_pathname()
+	if not output:
+		output = sys.stdout
+	elif type(output) == type(''):
+		output = open(output, 'w')
+	output.write('[\n')
+	for name in module_names:
+		try:
+			source = sys.modules[name].__file__
+		except AttributeError:
+			source = None
+		else:
+			source = `source`
+		output.write('\t(%s,\t%s),\n' % (`name`, source))
+	output.write(']\n')
+	del output
+	
+def findunusedbuiltins(list):
+	"""Produce (on stdout) a list of unused builtin modules"""
+	import sys
+	dict = {}
+	for name, location in list:
+		if location == None:
+			dict[name] = 1
+	for name in sys.builtin_module_names:
+		if not dict.has_key(name):
+			print 'Unused builtin module:', name
+			
+
+def mkpycresourcefile(list, main='', dst=None):
+	"""Copy list-of-modules to resource file dst."""
+	import py_resource
+	import Res
+	import sys
+	
+	if dst == None:
+		import macfs
+		fss, ok = macfs.StandardPutFile("PYC Resource output file")
+		if not ok: sys.exit(0)
+		dst = fss.as_pathname()
+	if main == '':
+		import macfs
+		fss, ok = macfs.PromptGetFile("Main program:", "TEXT")
+		if ok:
+			main = fss.as_pathname()
+	
+	fsid = py_resource.create(dst)
+
+	if main:
+		id, name = py_resource.frompyfile(main, '__main__', preload=1)
+		print '%5d\t%s\t%s'%(id, name, main)
+	for name, location in list:
+		if not location: continue
+		if location[-3:] != '.py':
+			print '*** skipping', location
+			continue
+		id, name = py_resource.frompyfile(location, name, preload=1)
+		print '%5d\t%s\t%s'%(id, name, location)
+
+	Res.CloseResFile(fsid)
+
+			
