diff --git a/Mac/Tools/IDE/PyConsole.py b/Mac/Tools/IDE/PyConsole.py
index 24fa059..6c0ecd7 100644
--- a/Mac/Tools/IDE/PyConsole.py
+++ b/Mac/Tools/IDE/PyConsole.py
@@ -75,9 +75,11 @@
 			if char == Wkeys.returnkey:
 				text = self.get()[self._inputstart:selstart]
 				text = string.join(string.split(text, "\r"), "\n")
-				saveyield = MacOS.EnableAppswitch(0)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					saveyield = MacOS.EnableAppswitch(0)
 				self.pyinteractive.executeline(text, self, self._namespace)
-				MacOS.EnableAppswitch(saveyield)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(saveyield)
 				selstart, selend = self.getselection()
 				self._inputstart = selstart
 	
@@ -275,13 +277,15 @@
 		self.w.bind("<activate>", self.activate)
 	
 	def write(self, text):
-		oldyield = MacOS.EnableAppswitch(-1)
+		if hasattr(MacOS, 'EnableAppswitch'):
+			oldyield = MacOS.EnableAppswitch(-1)
 		try:
 			self._buf = self._buf + text
 			if '\n' in self._buf:
 				self.flush()
 		finally:
-			MacOS.EnableAppswitch(oldyield)
+			if hasattr(MacOS, 'EnableAppswitch'):
+				MacOS.EnableAppswitch(oldyield)
 	
 	def flush(self):
 		self.show()
diff --git a/Mac/Tools/IDE/PyDebugger.py b/Mac/Tools/IDE/PyDebugger.py
index 4bbac26..74bfc74 100644
--- a/Mac/Tools/IDE/PyDebugger.py
+++ b/Mac/Tools/IDE/PyDebugger.py
@@ -496,7 +496,8 @@
 			self.w.panes.bottom.tracingmonitor.toggle()
 		try:
 			try:
-				MacOS.EnableAppswitch(0)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(0)
 				if self.quitting:
 					# returning None is not enough, a former BdbQuit exception
 					# might have been eaten by the print statement
@@ -512,7 +513,8 @@
 				print 'bdb.Bdb.dispatch: unknown debugging event:', `event`
 				return self.trace_dispatch
 			finally:
-				MacOS.EnableAppswitch(-1)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(-1)
 		except KeyboardInterrupt:
 			self.set_step()
 			return self.trace_dispatch
diff --git a/Mac/Tools/IDE/PyDocSearch.py b/Mac/Tools/IDE/PyDocSearch.py
index 208870e..98eced9 100644
--- a/Mac/Tools/IDE/PyDocSearch.py
+++ b/Mac/Tools/IDE/PyDocSearch.py
@@ -122,7 +122,8 @@
 	_open = open
 	hits = {}
 	try:
-		MacOS.EnableAppswitch(0)
+		if hasattr(MacOS, 'EnableAppswitch'):
+			MacOS.EnableAppswitch(0)
 		try:
 			for do, name in books:
 				if not do:
@@ -145,7 +146,8 @@
 					if filehits:
 						hits[fullpath] = filehits
 		finally:
-			MacOS.EnableAppswitch(-1)
+			if hasattr(MacOS, 'EnableAppswitch'):
+				MacOS.EnableAppswitch(-1)
 			status.close()
 	except KeyboardInterrupt:
 		pass
diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py
index 828b697..2117fc4 100644
--- a/Mac/Tools/IDE/PyEdit.py
+++ b/Mac/Tools/IDE/PyEdit.py
@@ -1128,7 +1128,8 @@
 			else:
 				PyDebugger.startfromhere()
 		elif not haveThreading:
-			MacOS.EnableAppswitch(0)
+			if hasattr(MacOS, 'EnableAppswitch'):
+				MacOS.EnableAppswitch(0)
 		try:
 			if profiling:
 				import profile, ProfileBrowser
@@ -1145,7 +1146,8 @@
 				exec code in globals, locals
 		finally:
 			if not haveThreading:
-				MacOS.EnableAppswitch(-1)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(-1)
 	except W.AlertError, detail:
 		raise W.AlertError, detail
 	except (KeyboardInterrupt, BdbQuit):
diff --git a/Mac/Tools/IDE/PythonIDE.py b/Mac/Tools/IDE/PythonIDE.py
index 5ebe97a..a2041e0 100644
--- a/Mac/Tools/IDE/PythonIDE.py
+++ b/Mac/Tools/IDE/PythonIDE.py
@@ -4,11 +4,13 @@
 # it like the "normal" interpreter.
 
 __version__ = '1.0.1'
-
+import sys
+import os
 
 def init():
 	import MacOS
-	MacOS.EnableAppswitch(-1)
+	if hasattr(MacOS, 'EnableAppswitch'):
+		MacOS.EnableAppswitch(-1)
 	
 	from Carbon import Qd, QuickDraw
 	Qd.SetCursor(Qd.GetCursor(QuickDraw.watchCursor).data)
@@ -16,11 +18,13 @@
 	import macresource
 	import sys, os
 	macresource.need('DITL', 468, "PythonIDE.rsrc")
-	widgetresfile = os.path.join(sys.exec_prefix, ":Mac:Tools:IDE:Widgets.rsrc")
+	widgetrespathsegs = [sys.exec_prefix, "Mac", "Tools", "IDE", "Widgets.rsrc"]
+	widgetresfile = os.path.join(*widgetrespathsegs)
 	refno = macresource.need('CURS', 468, widgetresfile)
 	if refno:
 		# We're not a fullblown application
-		ide_path = os.path.join(sys.exec_prefix, ":Mac:Tools:IDE")
+		idepathsegs = [sys.exec_prefix, "Mac", "Tools", "IDE"]
+		ide_path = os.path.join(*idepathsegs)
 	else:
 		# We are a fully frozen application
 		ide_path = sys.argv[0]
diff --git a/Mac/Tools/IDE/PythonIDEMain.py b/Mac/Tools/IDE/PythonIDEMain.py
index 680bd7b..f70f949 100644
--- a/Mac/Tools/IDE/PythonIDEMain.py
+++ b/Mac/Tools/IDE/PythonIDEMain.py
@@ -7,7 +7,12 @@
 import W
 import os
 import macfs
+import MacOS
 
+if MacOS.runtimemodel == 'macho':
+	ELIPSES = '...'
+else:
+	ELIPSES = '\xc9'
 
 class PythonIDE(Wapplication.Application):
 	
@@ -50,13 +55,13 @@
 	def makeusermenus(self):
 		m = Wapplication.Menu(self.menubar, "File")
 		newitem = FrameWork.MenuItem(m, "New", "N", 'new')
-		openitem = FrameWork.MenuItem(m, "Open\xc9", "O", 'open')
+		openitem = FrameWork.MenuItem(m, "Open"+ELIPSES, "O", 'open')
 		FrameWork.Separator(m)
 		closeitem = FrameWork.MenuItem(m, "Close", "W", 'close')
 		saveitem = FrameWork.MenuItem(m, "Save", "S", 'save')
-		saveasitem = FrameWork.MenuItem(m, "Save as\xc9", None, 'save_as')
+		saveasitem = FrameWork.MenuItem(m, "Save as"+ELIPSES, None, 'save_as')
 		FrameWork.Separator(m)
-		saveasappletitem = FrameWork.MenuItem(m, "Save as Applet\xc9", None, 'save_as_applet')
+		saveasappletitem = FrameWork.MenuItem(m, "Save as Applet"+ELIPSES, None, 'save_as_applet')
 		FrameWork.Separator(m)
 		quititem = FrameWork.MenuItem(m, "Quit", "Q", 'quit')
 		
@@ -71,7 +76,7 @@
 		selallitem = FrameWork.MenuItem(m, "Select all", "A", "selectall")
 		sellineitem = FrameWork.MenuItem(m, "Select line", "L", "selectline")
 		FrameWork.Separator(m)
-		finditem = FrameWork.MenuItem(m, "Find\xc9", "F", "find")
+		finditem = FrameWork.MenuItem(m, "Find"+ELIPSES, "F", "find")
 		findagainitem = FrameWork.MenuItem(m, "Find again", 'G', "findnext")
 		enterselitem = FrameWork.MenuItem(m, "Enter search string", "E", "entersearchstring")
 		replaceitem = FrameWork.MenuItem(m, "Replace", None, "replace")
@@ -84,12 +89,12 @@
 		runitem = FrameWork.MenuItem(m, "Run window", "R", 'run')
 		runselitem = FrameWork.MenuItem(m, "Run selection", None, 'runselection')
 		FrameWork.Separator(m)
-		moditem = FrameWork.MenuItem(m, "Module browser\xc9", "M", self.domenu_modulebrowser)
+		moditem = FrameWork.MenuItem(m, "Module browser"+ELIPSES, "M", self.domenu_modulebrowser)
 		FrameWork.Separator(m)
 		mm = FrameWork.SubMenu(m, "Preferences")
-		FrameWork.MenuItem(mm, "Set Scripts folder\xc9", None, self.do_setscriptsfolder)
-		FrameWork.MenuItem(mm, "Editor default settings\xc9", None, self.do_editorprefs)
-		FrameWork.MenuItem(mm, "Set default window font\xc9", None, self.do_setwindowfont)
+		FrameWork.MenuItem(mm, "Set Scripts folder"+ELIPSES, None, self.do_setscriptsfolder)
+		FrameWork.MenuItem(mm, "Editor default settings"+ELIPSES, None, self.do_editorprefs)
+		FrameWork.MenuItem(mm, "Set default window font"+ELIPSES, None, self.do_setwindowfont)
 		
 		self.openwindowsmenu = Wapplication.Menu(self.menubar, 'Windows')
 		self.makeopenwindowsmenu()
@@ -110,7 +115,7 @@
 				path = os.path.join(os.getcwd(), "Scripts")
 				if not os.path.exists(path):
 					os.mkdir(path)
-					f = open(os.path.join(path, "Place your scripts here\xc9"), "w")
+					f = open(os.path.join(path, "Place your scripts here"+ELIPSES), "w")
 					f.close()
 			fss = macfs.FSSpec(path)
 			self.scriptsfolder = fss.NewAlias()
@@ -159,7 +164,7 @@
 			W.Message("Can't open file of type '%s'." % ftype)
 	
 	def getabouttext(self):
-		return "About Python IDE\xc9"
+		return "About Python IDE"+ELIPSES
 	
 	def do_about(self, id, item, window, event):
 		Splash.about()
diff --git a/Mac/Tools/IDE/Wapplication.py b/Mac/Tools/IDE/Wapplication.py
index 8839c90..40eb0c6 100644
--- a/Mac/Tools/IDE/Wapplication.py
+++ b/Mac/Tools/IDE/Wapplication.py
@@ -28,27 +28,33 @@
 	def mainloop(self, mask=FrameWork.everyEvent, wait=None):
 		import W
 		self.quitting = 0
-		saveyield = MacOS.EnableAppswitch(-1)
+		if hasattr(MacOS, 'EnableAppswitch'):
+			saveyield = MacOS.EnableAppswitch(-1)
 		try:
 			while not self.quitting:
 				try:
 					self.do1event(mask, wait)
 				except W.AlertError, detail:
-					MacOS.EnableAppswitch(-1)
+					if hasattr(MacOS, 'EnableAppswitch'):
+						MacOS.EnableAppswitch(-1)
 					W.Message(detail)
 				except self.DebuggerQuit:
-					MacOS.EnableAppswitch(-1)
+					if hasattr(MacOS, 'EnableAppswitch'):
+						MacOS.EnableAppswitch(-1)
 				except:
-					MacOS.EnableAppswitch(-1)
+					if hasattr(MacOS, 'EnableAppswitch'):
+						MacOS.EnableAppswitch(-1)
 					import PyEdit
 					PyEdit.tracebackwindow.traceback()
 		finally:
-			MacOS.EnableAppswitch(1)
+			if hasattr(MacOS, 'EnableAppswitch'):
+				MacOS.EnableAppswitch(1)
 	
 	def debugger_mainloop(self, mask=FrameWork.everyEvent, wait=None):
 		import W
 		self.debugger_quitting = 0
-		saveyield = MacOS.EnableAppswitch(-1)
+		if hasattr(MacOS, 'EnableAppswitch'):
+			saveyield = MacOS.EnableAppswitch(-1)
 		try:
 			while not self.quitting and not self.debugger_quitting:
 				try:
@@ -59,7 +65,8 @@
 					import PyEdit
 					PyEdit.tracebackwindow.traceback()
 		finally:
-			MacOS.EnableAppswitch(saveyield)
+			if hasattr(MacOS, 'EnableAppswitch'):
+				MacOS.EnableAppswitch(saveyield)
 	
 	def breathe(self, wait=1):
 		import W
@@ -309,19 +316,24 @@
 				# exec in that window's namespace.
 				# xxx what to do when it's not saved???
 				# promt to save?
-				MacOS.EnableAppswitch(0)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(0)
 				execfile(path, {'__name__': '__main__', '__file__': path})
 			except W.AlertError, detail:
-				MacOS.EnableAppswitch(-1)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(-1)
 				raise W.AlertError, detail
 			except KeyboardInterrupt:
-				MacOS.EnableAppswitch(-1)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(-1)
 			except:
-				MacOS.EnableAppswitch(-1)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(-1)
 				import PyEdit
 				PyEdit.tracebackwindow.traceback(1)
 			else:
-				MacOS.EnableAppswitch(-1)
+				if hasattr(MacOS, 'EnableAppswitch'):
+					MacOS.EnableAppswitch(-1)
 			#os.chdir(cwd)
 	
 	def openscript(self, filename, lineno=None, charoffset=0, modname=""):
diff --git a/Mac/Tools/IDE/Wwindows.py b/Mac/Tools/IDE/Wwindows.py
index 20ed312..f0ac92b 100644
--- a/Mac/Tools/IDE/Wwindows.py
+++ b/Mac/Tools/IDE/Wwindows.py
@@ -455,7 +455,8 @@
 		Dialog.close(self)
 	
 	def mainloop(self):
-		saveyield = MacOS.EnableAppswitch(-1)
+		if hasattr(MacOS, 'EnableAppswitch'):
+			saveyield = MacOS.EnableAppswitch(-1)
 		while not self.done:
 			#self.do1event()
 			self.do1event(	Events.keyDownMask + 
@@ -465,7 +466,8 @@
 						Events.mDownMask +
 						Events.mUpMask, 
 						10)
-		MacOS.EnableAppswitch(saveyield)
+		if hasattr(MacOS, 'EnableAppswitch'):
+			MacOS.EnableAppswitch(saveyield)
 	
 	def do1event(self, mask = Events.everyEvent, wait = 0):
 		ok, event = self.app.getevent(mask, wait)
