diff --git a/Lib/plat-mac/EasyDialogs.py b/Lib/plat-mac/EasyDialogs.py
index 1d67091..83daff8 100644
--- a/Lib/plat-mac/EasyDialogs.py
+++ b/Lib/plat-mac/EasyDialogs.py
@@ -34,6 +34,7 @@
 import Carbon.File
 import macresource
 import os
+import sys
 
 __all__ = ['Message', 'AskString', 'AskPassword', 'AskYesNoCancel',
 	'GetArgv', 'AskFileForOpen', 'AskFileForSave', 'AskFolder',
@@ -635,9 +636,9 @@
 	if issubclass(tpwanted, Carbon.File.FSSpec):
 		return tpwanted(rr.selection[0])
 	if issubclass(tpwanted, str):
-		return tpwanted(rr.selection_fsr[0].FSRefMakePath())
+		return tpwanted(rr.selection_fsr[0].as_pathname())
 	if issubclass(tpwanted, unicode):
-		return tpwanted(rr.selection_fsr[0].FSRefMakePath(), 'utf8')
+		return tpwanted(rr.selection_fsr[0].as_pathname(), 'utf8')
 	raise TypeError, "Unknown value for argument 'wanted': %s" % repr(tpwanted)
 
 def AskFileForSave(
@@ -686,13 +687,16 @@
 	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(pardir_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 sys.platform == 'mac':
+			fullpath = rr.selection[0].as_pathname()
+		else:
+			# 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(pardir_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)
@@ -741,14 +745,14 @@
 	if issubclass(tpwanted, Carbon.File.FSSpec):
 		return tpwanted(rr.selection[0])
 	if issubclass(tpwanted, str):
-		return tpwanted(rr.selection_fsr[0].FSRefMakePath())
+		return tpwanted(rr.selection_fsr[0].as_pathname())
 	if issubclass(tpwanted, unicode):
-		return tpwanted(rr.selection_fsr[0].FSRefMakePath(), 'utf8')
+		return tpwanted(rr.selection_fsr[0].as_pathname(), 'utf8')
 	raise TypeError, "Unknown value for argument 'wanted': %s" % repr(tpwanted)
 	
 
 def test():
-	import time, sys, macfs
+	import time, macfs
 
 	Message("Testing EasyDialogs.")
 	optionlist = (('v', 'Verbose'), ('verbose', 'Verbose as long option'), 
diff --git a/Mac/Modules/file/_Filemodule.c b/Mac/Modules/file/_Filemodule.c
index 5d3901f..8309b35 100644
--- a/Mac/Modules/file/_Filemodule.c
+++ b/Mac/Modules/file/_Filemodule.c
@@ -1840,7 +1840,26 @@
 {
 	PyObject *_res = NULL;
 
+#if TARGET_API_MAC_OSX
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
 	_res = FSRef_FSRefMakePath(_self, _args);
+#else
+	char strbuf[1024];
+	OSErr err;
+	FSSpec fss;
+
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	if ( !PyMac_GetFSSpec((PyObject *)_self, &fss))
+		return NULL;
+	err = PyMac_GetFullPathname(&fss, strbuf, sizeof(strbuf));
+	if ( err ) {
+		PyMac_Error(err);
+		return NULL;
+	}
+	_res = PyString_FromString(strbuf);
+#endif
 	return _res;
 
 }
@@ -3190,6 +3209,7 @@
 PyMac_GetFSRef(PyObject *v, FSRef *fsr)
 {
 	OSStatus err;
+	FSSpec fss;
 	
 	if (FSRef_Check(v)) {
 		*fsr = ((FSRefObject *)v)->ob_itself;
@@ -3208,8 +3228,13 @@
 	/* XXXX Should try unicode here too */
 #endif
 	/* Otherwise we try to go via an FSSpec */
+#if TARGET_API_MAC_OSX
 	if (FSSpec_Check(v)) {
-		if ((err=FSpMakeFSRef(&((FSSpecObject *)v)->ob_itself, fsr)) == 0)
+		fss = ((FSSpecObject *)v)->ob_itself;
+#else
+	if (PyMac_GetFSSpec(v, &fss)) {
+#endif
+		if ((err=FSpMakeFSRef(&fss, fsr)) == 0)
 			return 1;
 		PyMac_Error(err);
 		return 0;
diff --git a/Mac/Modules/file/filesupport.py b/Mac/Modules/file/filesupport.py
index b7df7eb..26821dd 100644
--- a/Mac/Modules/file/filesupport.py
+++ b/Mac/Modules/file/filesupport.py
@@ -271,6 +271,7 @@
 PyMac_GetFSRef(PyObject *v, FSRef *fsr)
 {
 	OSStatus err;
+	FSSpec fss;
 	
 	if (FSRef_Check(v)) {
 		*fsr = ((FSRefObject *)v)->ob_itself;
@@ -289,8 +290,13 @@
 	/* XXXX Should try unicode here too */
 #endif
 	/* Otherwise we try to go via an FSSpec */
+#if TARGET_API_MAC_OSX
 	if (FSSpec_Check(v)) {
-		if ((err=FSpMakeFSRef(&((FSSpecObject *)v)->ob_itself, fsr)) == 0)
+		fss = ((FSSpecObject *)v)->ob_itself;
+#else
+	if (PyMac_GetFSSpec(v, &fss)) {
+#endif
+		if ((err=FSpMakeFSRef(&fss, fsr)) == 0)
 			return 1;
 		PyMac_Error(err);
 		return 0;
@@ -808,7 +814,26 @@
 fsref_methods.append(f)
 
 FSRef_as_pathname_body = """
+#if TARGET_API_MAC_OSX
+if (!PyArg_ParseTuple(_args, ""))
+	return NULL;
 _res = FSRef_FSRefMakePath(_self, _args);
+#else
+char strbuf[1024];
+OSErr err;
+FSSpec fss;
+
+if (!PyArg_ParseTuple(_args, ""))
+	return NULL;
+if ( !PyMac_GetFSSpec((PyObject *)_self, &fss))
+	return NULL;
+err = PyMac_GetFullPathname(&fss, strbuf, sizeof(strbuf));
+if ( err ) {
+	PyMac_Error(err);
+	return NULL;
+}
+_res = PyString_FromString(strbuf);
+#endif
 return _res;
 """
 f = ManualGenerator("as_pathname", FSRef_as_pathname_body)
