diff --git a/Lib/plat-mac/buildtools.py b/Lib/plat-mac/buildtools.py
index 81a086b..4cea10f 100644
--- a/Lib/plat-mac/buildtools.py
+++ b/Lib/plat-mac/buildtools.py
@@ -5,9 +5,9 @@
 import string
 import imp
 import marshal
-import macfs
 from Carbon import Res
-import MACFS
+import Carbon.Files
+import Carbon.File
 import MacOS
 import macostools
 import macresource
@@ -38,6 +38,8 @@
 READ = 1
 WRITE = 2
 
+# Parameter for FSOpenResourceFile
+RESOURCE_FORK_NAME=Carbon.File.FSGetResourceForkName()
 
 def findtemplate(template=None):
 	"""Locate the applet template along sys.path"""
@@ -50,9 +52,9 @@
 	for p in sys.path:
 		file = os.path.join(p, template)
 		try:
-			file, d1, d2 = macfs.ResolveAliasFile(file)
+			file, d1, d2 = Carbon.File.FSResolveAliasFile(file, 1)
 			break
-		except (macfs.error, ValueError):
+		except (Carbon.File.error, ValueError):
 			continue
 	else:
 		raise BuildError, "Template %s not found on sys.path" % `template`
@@ -145,9 +147,8 @@
 	if others:
 		raise BuildError, "Extra files only allowed for MachoPython applets"
 	# Create FSSpecs for the various files
-	template_fss = macfs.FSSpec(template)
-	template_fss, d1, d2 = macfs.ResolveAliasFile(template_fss)
-	dest_fss = macfs.FSSpec(destname)
+	template_fsr, d1, d2 = Carbon.File.FSResolveAliasFile(template, 1)
+	template = template_fsr.as_pathname()
 	
 	# Copy data (not resources, yet) from the template
 	if progress:
@@ -171,15 +172,16 @@
 		progress.label("Copy resources...")
 		progress.set(20)
 	try:
-		output = Res.FSpOpenResFile(dest_fss, WRITE)
+		output = Res.FSOpenResourceFile(destname, RESOURCE_FORK_NAME, WRITE)
 	except MacOS.Error:
-		Res.FSpCreateResFile(destname, '????', 'APPL', MACFS.smAllScripts)
-		output = Res.FSpOpenResFile(dest_fss, WRITE)
+		destdir, destfile = os.path.split(destname)
+		Res.FSCreateResourceFile(destdir, destfile, RESOURCE_FORK_NAME)
+		output = Res.FSOpenResourceFile(destname, RESOURCE_FORK_NAME, WRITE)
 	
 	# Copy the resources from the target specific resource template, if any
 	typesfound, ownertype = [], None
 	try:
-		input = Res.FSpOpenResFile(rsrcname, READ)
+		input = Res.FSOpenResourceFile(rsrcname, RESOURCE_FORK_NAME, READ)
 	except (MacOS.Error, ValueError):
 		pass
 		if progress:
@@ -204,7 +206,7 @@
 	
 	# Copy the resources from the template
 	
-	input = Res.FSpOpenResFile(template_fss, READ)
+	input = Res.FSOpenResourceFile(template, RESOURCE_FORK_NAME, READ)
 	dummy, tmplowner = copyres(input, output, skiptypes, 1, progress)
 		
 	Res.CloseResFile(input)
@@ -257,15 +259,17 @@
 	
 	Res.CloseResFile(output)
 	
-	# Now set the creator, type and bundle bit of the destination
-	dest_finfo = dest_fss.GetFInfo()
+	# Now set the creator, type and bundle bit of the destination.
+	# Done with FSSpec's, FSRef FInfo isn't good enough yet (2.3a1+)
+	dset_fss = Carbon.File.FSSpec(destname)
+	dest_finfo = dest_fss.FSpGetFInfo()
 	dest_finfo.Creator = ownertype
 	dest_finfo.Type = 'APPL'
-	dest_finfo.Flags = dest_finfo.Flags | MACFS.kHasBundle | MACFS.kIsShared
-	dest_finfo.Flags = dest_finfo.Flags & ~MACFS.kHasBeenInited
-	dest_fss.SetFInfo(dest_finfo)
+	dest_finfo.Flags = dest_finfo.Flags | Carbon.Files.kHasBundle | Carbon.Files.kIsShared
+	dest_finfo.Flags = dest_finfo.Flags & ~Carbon.Files.kHasBeenInited
+	dest_fss.FSpSetFInfo(dest_finfo)
 	
-	macostools.touched(dest_fss)
+	macostools.touched(destname)
 	if progress:
 		progress.label("Done.")
 		progress.inc(0)
