diff --git a/Mac/Contrib/ImageHelpers/MovieUtils.py b/Mac/Contrib/ImageHelpers/MovieUtils.py
index 8250a82..89762f4 100644
--- a/Mac/Contrib/ImageHelpers/MovieUtils.py
+++ b/Mac/Contrib/ImageHelpers/MovieUtils.py
@@ -124,7 +124,7 @@
 		
 		#Qd.MoveTo(10,10)
 		#Qd.LineTo(200,150)
-		Qd.CopyBits(self.gw.portBits,Qd.GetPort().portBits,self.myRect,destRect,srcCopy,None)
+		Qd.CopyBits(self.gw.GetPortBitMapForCopyBits(),Qd.GetPort().GetPortBitMapForCopyBits(),self.myRect,destRect,srcCopy,None)
 
 class MovieWin(W.Window):
 	
diff --git a/Mac/Demo/PICTbrowse/ICONbrowse.py b/Mac/Demo/PICTbrowse/ICONbrowse.py
index 902b5c7..42ae96d 100644
--- a/Mac/Demo/PICTbrowse/ICONbrowse.py
+++ b/Mac/Demo/PICTbrowse/ICONbrowse.py
@@ -93,7 +93,7 @@
 	def fitrect(self):
 		"""Return self.pictrect scaled to fit in window"""
 		graf = self.wid.GetWindowPort()
-		screenrect = graf.portRect
+		screenrect = graf.GetPortBounds()
 		picwidth = self.pictrect[2] - self.pictrect[0]
 		picheight = self.pictrect[3] - self.pictrect[1]
 		if picwidth > screenrect[2] - screenrect[0]:
diff --git a/Mac/Demo/PICTbrowse/PICTbrowse2.py b/Mac/Demo/PICTbrowse/PICTbrowse2.py
index 0e11681..da389c0 100644
--- a/Mac/Demo/PICTbrowse/PICTbrowse2.py
+++ b/Mac/Demo/PICTbrowse/PICTbrowse2.py
@@ -93,7 +93,7 @@
 	def fitrect(self):
 		"""Return self.pictrect scaled to fit in window"""
 		graf = self.dlg.GetWindowPort()
-		screenrect = graf.portRect
+		screenrect = graf.GetPortBounds()
 		picwidth = self.pictrect[2] - self.pictrect[0]
 		picheight = self.pictrect[3] - self.pictrect[1]
 		if picwidth > screenrect[2] - screenrect[0]:
diff --git a/Mac/Demo/PICTbrowse/cicnbrowse.py b/Mac/Demo/PICTbrowse/cicnbrowse.py
index 561dcf9..b90143e 100644
--- a/Mac/Demo/PICTbrowse/cicnbrowse.py
+++ b/Mac/Demo/PICTbrowse/cicnbrowse.py
@@ -93,7 +93,7 @@
 	def fitrect(self):
 		"""Return self.pictrect scaled to fit in window"""
 		graf = self.wid.GetWindowPort()
-		screenrect = graf.portRect
+		screenrect = graf.GetPortBounds()
 		picwidth = self.pictrect[2] - self.pictrect[0]
 		picheight = self.pictrect[3] - self.pictrect[1]
 		if picwidth > screenrect[2] - screenrect[0]:
diff --git a/Mac/Demo/imgbrowse/imgbrowse.py b/Mac/Demo/imgbrowse/imgbrowse.py
index c67f4e8..b54f82b 100644
--- a/Mac/Demo/imgbrowse/imgbrowse.py
+++ b/Mac/Demo/imgbrowse/imgbrowse.py
@@ -1,4 +1,4 @@
-"""imgbrowse - Display pictures using img"""
+GetPortBounds()"""imgbrowse - Display pictures using img"""
 
 import FrameWork
 import EasyDialogs
@@ -88,16 +88,16 @@
 		currect = self.fitrect()
 		print 'PICT:', self.pictrect
 		print 'WIND:', currect
-		print 'ARGS:', (self.pixmap, self.wid.GetWindowPort().portBits, self.pictrect,
+		print 'ARGS:', (self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
 				currect, QuickDraw.srcCopy, None)
 		self.info()
-		Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().portBits, self.pictrect,
+		Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().GetPortBitMapForCopyBits(), self.pictrect,
 				currect, QuickDraw.srcCopy, None)
 		
 	def fitrect(self):
 		"""Return self.pictrect scaled to fit in window"""
 		graf = self.wid.GetWindowPort()
-		screenrect = graf.portRect
+		screenrect = graf.GetPortBounds()
 		picwidth = self.pictrect[2] - self.pictrect[0]
 		picheight = self.pictrect[3] - self.pictrect[1]
 		if picwidth > screenrect[2] - screenrect[0]:
@@ -113,7 +113,7 @@
 				
 	def info(self):
 		graf = self.wid.GetWindowPort()
-		bits = graf.portBits
+		bits = graf.GetPortBitMapForCopyBits()
 		mac_image.dumppixmap(bits.pixmap_data)
 
 main()
diff --git a/Mac/Demo/mlte/mlted.py b/Mac/Demo/mlte/mlted.py
index 2ae77e7..3f77eee 100644
--- a/Mac/Demo/mlte/mlted.py
+++ b/Mac/Demo/mlte/mlted.py
@@ -362,7 +362,7 @@
 		if self.active:
 			self.active.do_idle(event)
 		else:
-			Qd.SetCursor(Qd.qd.arrow)
+			Qd.SetCursor(Qd.GetQDGlobalsArrow())
 
 def main():
 	Mlte.TXNInitTextension(0)
diff --git a/Mac/Demo/quicktime/MovieInWindow.py b/Mac/Demo/quicktime/MovieInWindow.py
index 9cd4e77..620c16c 100644
--- a/Mac/Demo/quicktime/MovieInWindow.py
+++ b/Mac/Demo/quicktime/MovieInWindow.py
@@ -31,7 +31,7 @@
 	Qd.SetPort(theWindow)
 	# XXXX Needed? SetGWorld((CGrafPtr)theWindow, nil)
 	
-	playMovieInWindow(theWindow, fss, theWindow.GetWindowPort().portRect)
+	playMovieInWindow(theWindow, fss, theWindow.GetWindowPort().GetPortBounds())
 	
 def playMovieInWindow(theWindow, theFile, movieBox):
 	"""Play a movie in a window"""
diff --git a/Mac/Demo/quicktime/VerySimplePlayer.py b/Mac/Demo/quicktime/VerySimplePlayer.py
index 4962ebb..aca977f 100644
--- a/Mac/Demo/quicktime/VerySimplePlayer.py
+++ b/Mac/Demo/quicktime/VerySimplePlayer.py
@@ -78,7 +78,7 @@
 			else:
 				Qd.SetPort(whichWindow)
 				whichWindow.BeginUpdate()
-				Qd.EraseRect(whichWindow.GetWindowPort().portRect)
+				Qd.EraseRect(whichWindow.GetWindowPort().GetPortBounds())
 				whichWindow.EndUpdate()
 			
 def loadMovie(theFile):
diff --git a/Mac/Demo/textedit/ped.py b/Mac/Demo/textedit/ped.py
index 6a0f882..6666158 100644
--- a/Mac/Demo/textedit/ped.py
+++ b/Mac/Demo/textedit/ped.py
@@ -21,7 +21,7 @@
 		r = windowbounds(400, 400)
 		w = Win.NewWindow(r, name, 1, 0, -1, 1, 0)
 		self.wid = w
-		x0, y0, x1, y1 = self.wid.GetWindowPort().portRect
+		x0, y0, x1, y1 = self.wid.GetWindowPort().GetPortBounds()
 		x0 = x0 + 4
 		y0 = y0 + 4
 		x1 = x1 - 20
@@ -87,8 +87,8 @@
 			self.ted.TEDeactivate()
 
 	def do_update(self, wid, event):
-		Qd.EraseRect(wid.GetWindowPort().portRect)
-		self.ted.TEUpdate(wid.GetWindowPort().portRect)
+		Qd.EraseRect(wid.GetWindowPort().GetPortBounds())
+		self.ted.TEUpdate(wid.GetWindowPort().GetPortBounds())
 		self.updatescrollbars()
 		
 	def do_contentclick(self, local, modifiers, evt):
@@ -350,7 +350,7 @@
 		if self.active:
 			self.active.do_idle()
 		else:
-			Qd.SetCursor(Qd.qd.arrow)
+			Qd.SetCursor(Qd.GetQDGlobalsArrow())
 
 def main():
 	App = Ped()
diff --git a/Mac/Demo/waste/htmled.py b/Mac/Demo/waste/htmled.py
index b590b1d..3abbafa 100644
--- a/Mac/Demo/waste/htmled.py
+++ b/Mac/Demo/waste/htmled.py
@@ -95,7 +95,7 @@
 		self.ted.WEIdle()	
 		if self.ted.WEAdjustCursor(where, BIGREGION):
 			return
-		Qd.SetCursor(Qd.qd.arrow)
+		Qd.SetCursor(Qd.GetQDGlobalsArrow())
 		
 	def getscrollbarvalues(self):
 		dr = self.ted.WEGetDestRect()
@@ -780,7 +780,7 @@
 		if self.active:
 			self.active.do_idle(event)
 		else:
-			Qd.SetCursor(Qd.qd.arrow)
+			Qd.SetCursor(Qd.GetQDGlobalsArrow())
 			
 	def newRuler(self, obj):
 		"""Insert a new ruler. Make it as wide as the window minus 2 pxls"""
diff --git a/Mac/Demo/waste/swed.py b/Mac/Demo/waste/swed.py
index 62b027e..083a04c 100644
--- a/Mac/Demo/waste/swed.py
+++ b/Mac/Demo/waste/swed.py
@@ -83,7 +83,7 @@
 		self.ted.WEIdle()	
 		if self.ted.WEAdjustCursor(where, BIGREGION):
 			return
-		Qd.SetCursor(Qd.qd.arrow)
+		Qd.SetCursor(Qd.GetQDGlobalsArrow())
 		
 	def getscrollbarvalues(self):
 		dr = self.ted.WEGetDestRect()
@@ -609,7 +609,7 @@
 		if self.active:
 			self.active.do_idle(event)
 		else:
-			Qd.SetCursor(Qd.qd.arrow)
+			Qd.SetCursor(Qd.GetQDGlobalsArrow())
 			
 def getfontnames():
 	names = []
diff --git a/Mac/Demo/waste/wed.py b/Mac/Demo/waste/wed.py
index 14bee45..199201b 100644
--- a/Mac/Demo/waste/wed.py
+++ b/Mac/Demo/waste/wed.py
@@ -50,7 +50,7 @@
 		self.ted.WEIdle()	
 		if self.ted.WEAdjustCursor(where, BIGREGION):
 			return
-		Qd.SetCursor(Qd.qd.arrow)
+		Qd.SetCursor(Qd.GetQDGlobalsArrow())
 		
 	def getscrollbarvalues(self):
 		dr = self.ted.WEGetDestRect()
@@ -417,7 +417,7 @@
 		if self.active:
 			self.active.do_idle(event)
 		else:
-			Qd.SetCursor(Qd.qd.arrow)
+			Qd.SetCursor(Qd.GetQDGlobalsArrow())
 
 def main():
 	App = Wed()
diff --git a/Mac/Lib/EasyDialogs.py b/Mac/Lib/EasyDialogs.py
index 8b81063..8e1e056 100644
--- a/Mac/Lib/EasyDialogs.py
+++ b/Mac/Lib/EasyDialogs.py
@@ -222,7 +222,7 @@
 
 		
 
-screenbounds = Qd.qd.screenBits.bounds
+screenbounds = Qd.GetQDGlobalsScreenBits().bounds
 screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
 	screenbounds[2]-4, screenbounds[3]-4
 
diff --git a/Mac/Lib/FrameWork.py b/Mac/Lib/FrameWork.py
index f2f6fe2..24acd41 100644
--- a/Mac/Lib/FrameWork.py
+++ b/Mac/Lib/FrameWork.py
@@ -68,7 +68,7 @@
 #
 # The useable portion of the screen
 #	## but what happens with multiple screens? jvr
-screenbounds = qd.screenBits.bounds
+screenbounds = GetQDGlobalsScreenBits().bounds
 screenbounds = screenbounds[0]+4, screenbounds[1]+4, \
 	screenbounds[2]-4, screenbounds[3]-4
 	
@@ -97,7 +97,7 @@
 	SetCursor(_watch)
 	
 def setarrowcursor():
-	SetCursor(qd.arrow)
+	SetCursor(GetQDGlobalsArrow())
 
 class Application:
 	
@@ -808,7 +808,7 @@
 	growlimit = (50, 50, screenbounds[2] - screenbounds[0], screenbounds[3] - screenbounds[1])	# jvr
 	
 	def do_resize(self, width, height, window):
-		l, t, r, b = self.wid.GetWindowPort().portRect			# jvr, forGrowIcon
+		l, t, r, b = self.wid.GetWindowPort().GetPortBounds()			# jvr, forGrowIcon
 		self.SetPort()							# jvr
 		self.wid.InvalWindowRect((r - SCROLLBARWIDTH + 1, b - SCROLLBARWIDTH + 1, r, b))	# jvr
 		window.SizeWindow(width, height, 1)		# changed updateFlag to true jvr
@@ -816,7 +816,7 @@
 	
 	def do_postresize(self, width, height, window):
 		SetPort(window)
-		self.wid.InvalWindowRect(window.GetWindowPort().portRect)
+		self.wid.InvalWindowRect(window.GetWindowPort().GetPortBounds())
 	
 	def do_inContent(self, partcode, window, event):
 		#
@@ -849,7 +849,7 @@
 			for i in range(8):
 				time.sleep(0.1)
 				InvertRgn(window.GetWindowPort().visRgn)
-			FillRgn(window.GetWindowPort().visRgn, qd.gray)
+			FillRgn(window.GetWindowPort().visRgn, GetQDGlobalsGray())
 		else:
 			EraseRgn(window.GetWindowPort().visRgn)
 		
@@ -902,7 +902,7 @@
 		SetPort(self.wid)
 		self.barx = self.bary = None
 		self.barx_enabled = self.bary_enabled = 1
-		x0, y0, x1, y1 = self.wid.GetWindowPort().portRect
+		x0, y0, x1, y1 = self.wid.GetWindowPort().GetPortBounds()
 		vx, vy = self.getscrollbarvalues()
 		if vx == None: self.barx_enabled, vx = 0, 0
 		if vy == None: self.bary_enabled, vy = 0, 0
@@ -938,7 +938,7 @@
 		self.wid.DrawGrowIcon()			# jvr
 			
 	def do_postresize(self, width, height, window):
-		l, t, r, b = self.wid.GetWindowPort().portRect
+		l, t, r, b = self.wid.GetWindowPort().GetPortBounds()
 		self.SetPort()
 		if self.barx:
 			self.barx.HideControl()		# jvr
diff --git a/Mac/Lib/PixMapWrapper.py b/Mac/Lib/PixMapWrapper.py
index b167cc2..bcd3e07 100644
--- a/Mac/Lib/PixMapWrapper.py
+++ b/Mac/Lib/PixMapWrapper.py
@@ -151,7 +151,7 @@
 		if y2 == None:
 			dest[3] = y1 + src[3]-src[1]
 		if not port: port = Qd.GetPort()
-		Qd.CopyBits(self.PixMap(), port.portBits, src, tuple(dest),
+		Qd.CopyBits(self.PixMap(), port.GetPortBitMapForCopyBits(), src, tuple(dest),
 				QuickDraw.srcCopy, None)
 	
 	def fromstring(self,s,width,height,format=imgformat.macrgb):
diff --git a/Mac/Lib/bgenlocations.py b/Mac/Lib/bgenlocations.py
index 28792ba..84f3587 100644
--- a/Mac/Lib/bgenlocations.py
+++ b/Mac/Lib/bgenlocations.py
@@ -28,7 +28,7 @@
 if sys.platform == 'mac':
 	_MWERKSDIR="Macintosh HD:Applications (Mac OS 9):Metrowerks CodeWarrior 7.0:Metrowerks CodeWarrior"
 else:
-	_MWERKSDIR="/Volumes/Sap/Applications (Mac OS 9)/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/"
+	_MWERKSDIR="/Volumes/Moes/Applications (Mac OS 9)/Metrowerks CodeWarrior 7.0/Metrowerks CodeWarrior/"
 INCLUDEDIR=os.path.join(_MWERKSDIR, "MacOS Support", "Universal", "Interfaces", "CIncludes")
 
 #
diff --git a/Mac/Tools/IDE/MacPrefs.py b/Mac/Tools/IDE/MacPrefs.py
index b1fa7ca..716c828 100644
--- a/Mac/Tools/IDE/MacPrefs.py
+++ b/Mac/Tools/IDE/MacPrefs.py
@@ -70,7 +70,7 @@
 			else:
 				prefdict[key] = value
 		marshal.dump(prefdict, open(self.__path, 'wb'))
-		fss = macfs.FSSpec(self.__path)
+		fss = macfs.FSSpec(macfs.FSRef(self.__path))
 		fss.SetCreatorType(self.__creator, 'pref')
 	
 	def __getattr__(self, attr):
@@ -97,7 +97,7 @@
 	# Find the preferences folder and our prefs file, create if needed.
 	vrefnum, dirid = macfs.FindFolder(kOnSystemDisk, 'pref', 0)
 	prefsfolder_fss = macfs.FSSpec((vrefnum, dirid, ''))
-	prefsfolder = prefsfolder_fss.as_pathname()
+	prefsfolder = macfs.FSRef(prefsfolder_fss).as_fsspec().as_pathname()
 	path = os.path.join(prefsfolder, prefname)
 	head, tail = os.path.split(path)
 	# make sure the folder(s) exist
diff --git a/Mac/Tools/IDE/PyBrowser.py b/Mac/Tools/IDE/PyBrowser.py
index 2bb1686..fab577a 100644
--- a/Mac/Tools/IDE/PyBrowser.py
+++ b/Mac/Tools/IDE/PyBrowser.py
@@ -5,7 +5,6 @@
 import types
 import re
 from Carbon import Qd, Icn, Fm, QuickDraw
-from Carbon.List import GetListPort
 from Carbon.QuickDraw import hilitetransfermode
 
 
@@ -211,7 +210,7 @@
 				Qd.PaintRect(rect)
 				lastpoint = (x, y)
 		Qd.PaintRect(rect)
-		Qd.PenPat(Qd.qd.black)
+		Qd.PenPat(Qd.GetQDGlobalsBlack())
 		Qd.PenNormal()
 		if newcol > 0 and newcol <> abscol:
 			self.setcolumn(newcol - l)
@@ -369,7 +368,7 @@
 	def myDrawCell(self, onlyHilite, selected, cellRect, theCell, 
 			dataOffset, dataLen, theList):
 		savedPort = Qd.GetPort()
-		Qd.SetPort(GetListPort(theList))
+		Qd.SetPort(theList.GetListPort())
 		savedClip = Qd.NewRgn()
 		Qd.GetClip(savedClip)
 		Qd.ClipRect(cellRect)
diff --git a/Mac/Tools/IDE/PyConsole.py b/Mac/Tools/IDE/PyConsole.py
index 23f301b..9a4a44b 100644
--- a/Mac/Tools/IDE/PyConsole.py
+++ b/Mac/Tools/IDE/PyConsole.py
@@ -108,8 +108,8 @@
 		self._buf = ""
 		self.ted.WEClearUndo()
 		self.updatescrollbars()
-		if Qd.QDIsPortBuffered(self._parentwindow.wid):
-			Qd.QDFlushPortBuffer(self._parentwindow.wid, None)
+		if self._parentwindow.wid.GetWindowPort().QDIsPortBuffered():
+			self._parentwindow.wid.GetWindowPort().QDFlushPortBuffer(None)
 	
 	def selection_ok(self):
 		selstart, selend = self.getselection()
@@ -300,8 +300,8 @@
 		self._buf = ""
 		self.w.outputtext.updatescrollbars()
 		self.w.outputtext.ted.WEFeatureFlag(WASTEconst.weFReadOnly, 1)
-		if Qd.QDIsPortBuffered(self.w.wid):
-			Qd.QDFlushPortBuffer(self.w.wid, None)
+		if self.w.wid.GetWindowPort().QDIsPortBuffered():
+			self.w.wid.GetWindowPort().QDFlushPortBuffer(None)
 	
 	def show(self):
 		if self.closed:
diff --git a/Mac/Tools/IDE/Splash.py b/Mac/Tools/IDE/Splash.py
index 302053f..86009d2 100644
--- a/Mac/Tools/IDE/Splash.py
+++ b/Mac/Tools/IDE/Splash.py
@@ -48,8 +48,8 @@
 	if drawdialog:
 		splash.DrawDialog()
 	drawtext(what)
-	splash.GetDialogWindow().ValidWindowRect(splash.GetDialogPort().portRect)
-	Qd.QDFlushPortBuffer(splash.GetDialogWindow().GetWindowPort(), None)
+	splash.GetDialogWindow().ValidWindowRect(splash.GetDialogPort().GetPortBounds())
+	splash.GetDialogWindow().GetWindowPort().QDFlushPortBuffer(None)
 
 def drawtext(what = 0):
 	Qd.SetPort(splash)
diff --git a/Mac/Tools/IDE/Wbase.py b/Mac/Tools/IDE/Wbase.py
index c63aa77..f988ce7 100644
--- a/Mac/Tools/IDE/Wbase.py
+++ b/Mac/Tools/IDE/Wbase.py
@@ -376,7 +376,7 @@
 
 class Frame(Widget):
 	
-	def __init__(self, possize, pattern = Qd.qd.black, color = (0, 0, 0)):
+	def __init__(self, possize, pattern = Qd.GetQDGlobalsBlack(), color = (0, 0, 0)):
 		Widget.__init__(self, possize)
 		self._framepattern = pattern
 		self._framecolor = color
@@ -570,7 +570,7 @@
 		
 		# track mouse --- XXX  move to separate method?
 		Qd.PenMode(QuickDraw.srcXor)
-		Qd.PenPat(Qd.qd.gray)
+		Qd.PenPat(Qd.GetQDGlobalsGray())
 		Qd.PaintRect(rect)
 		lastpos = None
 		while Evt.Button():
@@ -579,16 +579,16 @@
 			pos = min(pos, maxpos)
 			if pos == lastpos:
 				continue
-			Qd.PenPat(Qd.qd.gray)
+			Qd.PenPat(Qd.GetQDGlobalsGray())
 			Qd.PaintRect(rect)
 			if self._direction:
 				rect = l, pos - 1, r, pos
 			else:
 				rect = pos - 1, t, pos, b
-			Qd.PenPat(Qd.qd.gray)
+			Qd.PenPat(Qd.GetQDGlobalsGray())
 			Qd.PaintRect(rect)
 			lastpos = pos
-			Qd.QDFlushPortBuffer(self._parentwindow.wid, None)
+			self._parentwindow.wid.GetWindowPort().QDFlushPortBuffer(None)
 			Evt.WaitNextEvent(0, 3)
 		Qd.PaintRect(rect)
 		Qd.PenNormal()
@@ -643,7 +643,7 @@
 		if self._visible:
 			if not visRgn:
 				visRgn = self._parentwindow.wid.GetWindowPort().visRgn
-			Qd.PenPat(Qd.qd.gray)
+			Qd.PenPat(Qd.GetQDGlobalsGray())
 			rect = self._bounds
 			Qd.FrameRect(rect)
 			rect = Qd.InsetRect(rect, 3, 3)
@@ -700,7 +700,7 @@
 # data below.
 #_cursors = {
 #	"watch"	: Qd.GetCursor(QuickDraw.watchCursor).data,
-#	"arrow"	: Qd.qd.arrow,
+#	"arrow"	: Qd.GetQDGlobalsArrow(),
 #	"iBeam"	: Qd.GetCursor(QuickDraw.iBeamCursor).data,
 #	"cross"	: Qd.GetCursor(QuickDraw.crossCursor).data,
 #	"plus"		: Qd.GetCursor(QuickDraw.plusCursor).data,
diff --git a/Mac/Tools/IDE/Wcontrols.py b/Mac/Tools/IDE/Wcontrols.py
index ab6ae96..3d52383 100644
--- a/Mac/Tools/IDE/Wcontrols.py
+++ b/Mac/Tools/IDE/Wcontrols.py
@@ -170,7 +170,7 @@
 		# emulate the pushing of the button
 		import time
 		self._control.HiliteControl(Controls.kControlButtonPart)
-		Qd.QDFlushPortBuffer(self._parentwindow.wid, None)  # needed under OSX
+		self._parentwindow.wid.GetWindowPort().QDFlushPortBuffer(None)  # needed under OSX
 		time.sleep(0.1)
 		self._control.HiliteControl(0)
 		if self._callback:
diff --git a/Mac/Tools/IDE/Wlists.py b/Mac/Tools/IDE/Wlists.py
index 2be1a9c..4f0e49b 100644
--- a/Mac/Tools/IDE/Wlists.py
+++ b/Mac/Tools/IDE/Wlists.py
@@ -2,7 +2,7 @@
 import Wkeys
 import string
 from Carbon import Evt, Events, Fm, Lists, Qd, Scrap, Win
-from Carbon.List import LNew, CreateCustomList, GetListPort
+from Carbon.List import LNew, CreateCustomList
 from Carbon.Lists import kListDefUserProcType, lInitMsg, lDrawMsg, lHiliteMsg, lCloseMsg
 from Carbon.QuickDraw import hilitetransfermode
 from Carbon import App
@@ -435,7 +435,7 @@
 	def listDefDraw(self, selected, cellRect, theCell,
 			dataOffset, dataLen, theList):
 		savedPort = Qd.GetPort()
-		Qd.SetPort(GetListPort(theList))
+		Qd.SetPort(theList.GetListPort())
 		savedClip = Qd.NewRgn()
 		Qd.GetClip(savedClip)
 		Qd.ClipRect(cellRect)
@@ -477,7 +477,7 @@
 	def listDefHighlight(self, selected, cellRect, theCell,
 			dataOffset, dataLen, theList):
 		savedPort = Qd.GetPort()
-		Qd.SetPort(GetListPort(theList))
+		Qd.SetPort(theList.GetListPort())
 		savedClip = Qd.NewRgn()
 		Qd.GetClip(savedClip)
 		Qd.ClipRect(cellRect)
diff --git a/Mac/Tools/IDE/Wtext.py b/Mac/Tools/IDE/Wtext.py
index 86c79c3..d611c73 100644
--- a/Mac/Tools/IDE/Wtext.py
+++ b/Mac/Tools/IDE/Wtext.py
@@ -965,7 +965,7 @@
 					if autoscroll:
 						self.ted.WEFeatureFlag(WASTEconst.weFAutoScroll, 0)
 					self.ted.WESetSelection(count, count + 1)
-					Qd.QDFlushPortBuffer(self._parentwindow.wid, None)  # needed under OSX
+					self._parentwindow.wid.GetWindowPort().QDFlushPortBuffer(None)  # needed under OSX
 					time.sleep(0.2)
 					self.ted.WESetSelection(selstart, selend)
 					if autoscroll:
@@ -1042,7 +1042,7 @@
 		breakrect = bl, bt, br, bb = self._getbreakrect()
 		br = br - 1
 		self.SetPort()
-		Qd.PenPat(Qd.qd.gray)
+		Qd.PenPat(Qd.GetQDGlobalsGray())
 		Qd.PaintRect((br, bt, br + 1, bb))
 		Qd.PenNormal()
 		self._parentwindow.tempcliprect(breakrect)
@@ -1123,7 +1123,7 @@
 GetFName = Fm.GetFontName
 
 def GetPortFontSettings(port):
-	return Fm.GetFontName(port.txFont), port.txFace, port.txSize
+	return Fm.GetFontName(port.GetPortTextFont()), port.GetPortTextFace(), port.GetPortTextSize()
 
 def SetPortFontSettings(port, (font, face, size)):
 	saveport = Qd.GetPort()
diff --git a/Mac/Tools/IDE/Wwindows.py b/Mac/Tools/IDE/Wwindows.py
index ffab76c..d646bcf 100644
--- a/Mac/Tools/IDE/Wwindows.py
+++ b/Mac/Tools/IDE/Wwindows.py
@@ -270,7 +270,7 @@
 			self._collectselectablewidgets(w._widgets)
 	
 	def _calcbounds(self):
-		self._possize = self.wid.GetWindowPort().portRect[2:]
+		self._possize = self.wid.GetWindowPort().GetPortBounds()[2:]
 		w, h = self._possize
 		self._bounds = (0, 0, w, h)
 		self.wid.GetWindowContentRgn(scratchRegion)
@@ -387,7 +387,7 @@
 		del self.saveclip[-1]
 	
 	def getgrowrect(self):
-		l, t, r, b = self.wid.GetWindowPort().portRect
+		l, t, r, b = self.wid.GetWindowPort().GetPortBounds()
 		return (r - 15, b - 15, r, b)
 	
 	def has_key(self, key):
@@ -423,7 +423,7 @@
 		return 0
 	
 	def getwindowbounds(self, size, minsize = None):
-		screenbounds = sl, st, sr, sb = Qd.qd.screenBits.bounds
+		screenbounds = sl, st, sr, sb = Qd.GetQDGlobalsScreenBits().bounds
 		w, h = size
 		l = sl + (sr - sl - w) / 2
 		t = st + (sb - st - h) / 3
@@ -615,7 +615,7 @@
 	minwidth, minheight = minsize
 	width, height = preferredsize
 	
-	sl, st, sr, sb = screenbounds = Qd.InsetRect(Qd.qd.screenBits.bounds, 4, 4)
+	sl, st, sr, sb = screenbounds = Qd.InsetRect(Qd.GetQDGlobalsScreenBits().bounds, 4, 4)
 	l, t = getnextwindowpos()
 	if (l + width) > sr:
 		_windowcounter = 0
