diff --git a/Lib/plat-mac/EasyDialogs.py b/Lib/plat-mac/EasyDialogs.py
index 8e1e056..cb1ef99 100644
--- a/Lib/plat-mac/EasyDialogs.py
+++ b/Lib/plat-mac/EasyDialogs.py
@@ -23,9 +23,11 @@
 from Carbon import Ctl
 from Carbon import Controls
 from Carbon import Menu
+import Nav
 import MacOS
 import string
 from Carbon.ControlAccessor import *	# Also import Controls constants
+import Carbon.File
 import macfs
 import macresource
 
@@ -546,7 +548,150 @@
 		if hasattr(MacOS, 'SchedParams'):
 			apply(MacOS.SchedParams, appsw)
 		del d
+
+def _mktypelist(typelist):
+	# Workaround for OSX typeless files:
+	if 'TEXT' in typelist and not '\0\0\0\0' in typelist:
+		typelist = typelist + ('\0\0\0\0',)
+	if not typelist:
+		return None
+	data = 'Pyth' + struct.pack("hh", 0, len(typelist))
+	for type in typelist:
+		data = data+type
+	return Carbon.Res.Handle(data)
 	
+_ALLOWED_KEYS = {
+	'version':1,
+	'defaultLocation':1,
+	'dialogOptionFlags':1,
+	'location':1,
+	'clientName':1,
+	'windowTitle':1,
+	'actionButtonLabel':1,
+	'cancelButtonLabel':1,
+	'savedFileName':1,
+	'message':1,
+	'preferenceKey':1,
+	'popupExtension':1,
+	'eventProc':1,
+	'previewProc':1,
+	'filterProc':1,
+	'typeList':1,
+	'fileType':1,
+	'fileCreator':1,
+	# Our extension:
+	'wanted':1,
+	'multiple':1,
+}
+
+def _process_Nav_args(argsargs, allowed, dftflags):
+	import aepack
+	import Carbon.AE
+	import Carbon.File
+	args = argsargs.copy()
+	for k in args.keys():
+		if not allowed.has_key(k):
+			raise TypeError, "Unknown keyword argument: %s" % repr(k)
+	# Set some defaults, and modify some arguments
+	if not args.has_key('dialogOptionFlags'):
+		args['dialogOptionFlags'] = dftflags
+	if args.has_key('defaultLocation') and \
+			not isinstance(args['defaultLocation'], Carbon.AE.AEDesc):
+		defaultLocation = args['defaultLocation']
+		if isinstance(defaultLocation, (Carbon.File.FSSpec, Carbon.File.FSRef)):
+			args['defaultLocation'] = aepack.pack(defaultLocation)
+		else:
+			defaultLocation = Carbon.File.FSRef(defaultLocation)
+			args['defaultLocation'] = aepack.pack(defaultLocation)
+	if args.has_key('typeList') and not isinstance(args['typeList'], Carbon.Res.ResourceType):
+		typeList = args['typeList'].copy()
+		# Workaround for OSX typeless files:
+		if 'TEXT' in typeList and not '\0\0\0\0' in typeList:
+			typeList = typeList + ('\0\0\0\0',)
+		data = 'Pyth' + struct.pack("hh", 0, len(typeList))
+		for type in typeList:
+			data = data+type
+		args['typeList'] = Carbon.Res.Handle(data)
+	tpwanted = str
+	if args.has_key('wanted'):
+		tpwanted = args['wanted']
+		del args['wanted']
+	return args, tpwanted
+	
+def AskFileForOpen(**args):
+	default_flags = 0x56 # Or 0xe4?
+	args, tpwanted = _process_Nav_args(args, _ALLOWED_KEYS, default_flags) 
+	try:
+		rr = Nav.NavChooseFile(args)
+		good = 1
+	except Nav.error, arg:
+		if arg[0] != -128: # userCancelledErr
+			raise Nav.error, arg
+		return None
+	if not rr.validRecord or not rr.selection:
+		return None
+	if issubclass(tpwanted, Carbon.File.FSRef):
+		return tpwanted(rr.selection_fsr[0])
+	if issubclass(tpwanted, Carbon.File.FSSpec):
+		return tpwanted(rr.selection[0])
+	if issubclass(tpwanted, str):
+		return tpwanted(rr.selection_fsr[0].FSRefMakePath())
+	if issubclass(tpwanted, unicode):
+		return tpwanted(rr.selection_fsr[0].FSRefMakePath(), 'utf8')
+	raise TypeError, "Unknown value for argument 'wanted': %s" % repr(tpwanted)
+
+def AskFileForSave(**args):
+	default_flags = 0x07
+	args, tpwanted = _process_Nav_args(args, _ALLOWED_KEYS, default_flags) 
+	try:
+		rr = Nav.NavPutFile(args)
+		good = 1
+	except Nav.error, arg:
+		if arg[0] != -128: # userCancelledErr
+			raise Nav.error, arg
+		return None
+	if not rr.validRecord or not rr.selection:
+		return None
+	if issubclass(tpwanted, Carbon.File.FSRef):
+		raise TypeError, "Cannot pass wanted=FSRef to AskFileForSave"
+	if issubclass(tpwanted, Carbon.File.FSSpec):
+		return tpwanted(rr.selection[0])
+	if issubclass(tpwanted, (str, unicode)):
+		# This is gross, and probably incorrect too
+		vrefnum, dirid, name = rr.selection[0].as_tuple()
+		pardir_fss = Carbon.File.FSSpec((vrefnum, dirid, ''))
+		pardir_fsr = Carbon.File.FSRef(fss)
+		pardir_path = pardir_fsr.FSRefMakePath()  # This is utf-8
+		name_utf8 = unicode(name, 'macroman').encode('utf8')
+		fullpath = os.path.join(pardir_path, name_utf8)
+		if issubclass(tpwanted, unicode):
+			return unicode(fullpath, 'utf8')
+		return tpwanted(fullpath)
+	raise TypeError, "Unknown value for argument 'wanted': %s" % repr(tpwanted)
+		
+def AskFolder(**args):
+	default_flags = 0x17
+	args, tpwanted = _process_Nav_args(args, _ALLOWED_KEYS, default_flags) 
+	try:
+		rr = Nav.NavChooseFolder(args)
+		good = 1
+	except Nav.error, arg:
+		if arg[0] != -128: # userCancelledErr
+			raise Nav.error, arg
+		return None
+	if not rr.validRecord or not rr.selection:
+		return None
+	if issubclass(tpwanted, Carbon.File.FSRef):
+		return tpwanted(rr.selection_fsr[0])
+	if issubclass(tpwanted, Carbon.File.FSSpec):
+		return tpwanted(rr.selection[0])
+	if issubclass(tpwanted, str):
+		return tpwanted(rr.selection_fsr[0].FSRefMakePath())
+	if issubclass(tpwanted, unicode):
+		return tpwanted(rr.selection_fsr[0].FSRefMakePath(), 'utf8')
+	raise TypeError, "Unknown value for argument 'wanted': %s" % repr(tpwanted)
+	
+
 def test():
 	import time, sys
 
@@ -555,10 +700,9 @@
 				('flags=', 'Valued option'), ('f:', 'Short valued option'))
 	commandlist = (('start', 'Start something'), ('stop', 'Stop something'))
 	argv = GetArgv(optionlist=optionlist, commandlist=commandlist, addoldfile=0)
+	Message("Command line: %s"%' '.join(argv))
 	for i in range(len(argv)):
 		print 'arg[%d] = %s'%(i, `argv[i]`)
-	print 'Type return to continue - ',
-	sys.stdin.readline()
 	ok = AskYesNoCancel("Do you want to proceed?")
 	ok = AskYesNoCancel("Do you want to identify?", yes="Identify", no="No")
 	if ok > 0:
@@ -568,6 +712,14 @@
 			Message("%s has no secret nickname"%s)
 		else:
 			Message("Hello everybody!!\nThe secret nickname of %s is %s!!!"%(s, s2))
+	else:
+		s = 'Anonymous'
+	rv = AskFileForOpen(message="Gimme a file, %s"%s, wanted=macfs.FSSpec)
+	Message("rv: %s"%rv)
+	rv = AskFileForSave(wanted=macfs.FSSpec, savedFileName="%s.txt"%s)
+	Message("rv.as_pathname: %s"%rv.as_pathname())
+	rv = AskFolder()
+	Message("Folder name: %s"%rv)
 	text = ( "Working Hard...", "Hardly Working..." ,
 			"So far, so good!", "Keep on truckin'" )
 	bar = ProgressBar("Progress, progress...", 0, label="Ramping up...")
