diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py
index 59cf7ad..c18e31f 100644
--- a/Mac/Tools/IDE/PyEdit.py
+++ b/Mac/Tools/IDE/PyEdit.py
@@ -957,7 +957,7 @@
 			editor.ted.WEUseText(Res.Resource(Text))
 			editor.ted.WECalText()
 			editor.SetPort()
-			Win.InvalRect(editor._bounds)
+			Win.InvalWindowRect(editor._bounds)
 			#editor.ted.WEUpdate(self.w.wid.GetWindowPort().visRgn)
 			EasyDialogs.Message("Replaced %d occurrences" % counter)
 	
diff --git a/Mac/Tools/IDE/Splash.py b/Mac/Tools/IDE/Splash.py
index 21acd6d..1544b67 100644
--- a/Mac/Tools/IDE/Splash.py
+++ b/Mac/Tools/IDE/Splash.py
@@ -100,7 +100,7 @@
 	if drawdialog:
 		splash.DrawDialog()
 	drawtext(what)
-	Win.ValidRect(splash.GetWindowPort().portRect)
+	Win.ValidWindowRect(splash.GetWindowPort().portRect)
 
 def drawtext(what = 0):
 	Qd.SetPort(splash)
diff --git a/Mac/Tools/IDE/Wbase.py b/Mac/Tools/IDE/Wbase.py
index e1e71b2..0a987c6 100644
--- a/Mac/Tools/IDE/Wbase.py
+++ b/Mac/Tools/IDE/Wbase.py
@@ -104,8 +104,8 @@
 	
 	def adjust(self, oldbounds):
 		self.SetPort()
-		Win.InvalRect(oldbounds)
-		Win.InvalRect(self._bounds)
+		Win.InvalWindowRect(oldbounds)
+		Win.InvalWindowRect(self._bounds)
 	
 	def _calcbounds(self):
 		# calculate absolute bounds relative to the window origin from our
@@ -218,7 +218,7 @@
 		self._setparentwindow(widget)
 		if self._parentwindow and self._parentwindow.wid:
 			widget.forall_frombottom("open")
-			Win.InvalRect(widget._bounds)
+			Win.InvalWindowRect(widget._bounds)
 	
 	def _setparentwindow(self, widget):
 		widget._parentwindow = self._parentwindow
@@ -235,7 +235,7 @@
 			widget.select(0)
 			self._parentwindow._currentwidget = None
 		self.SetPort()
-		Win.InvalRect(widget._bounds)
+		Win.InvalWindowRect(widget._bounds)
 		widget.close()
 		del self._widgetsdict[key]
 		self._widgets.remove(widget)
@@ -340,11 +340,11 @@
 	def adjust(self, oldbounds):
 		self.SetPort()
 		if self._selected:
-			Win.InvalRect(Qd.InsetRect(oldbounds, -3, -3))
-			Win.InvalRect(Qd.InsetRect(self._bounds, -3, -3))
+			Win.InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
+			Win.InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
 		else:
-			Win.InvalRect(oldbounds)
-			Win.InvalRect(self._bounds)
+			Win.InvalWindowRect(oldbounds)
+			Win.InvalWindowRect(self._bounds)
 
 
 class _Line(Widget):
diff --git a/Mac/Tools/IDE/Wcontrols.py b/Mac/Tools/IDE/Wcontrols.py
index 7add904..1a0fe88 100644
--- a/Mac/Tools/IDE/Wcontrols.py
+++ b/Mac/Tools/IDE/Wcontrols.py
@@ -32,7 +32,7 @@
 						self._procID, 
 						0)
 		self.SetPort()
-		#Win.ValidRect(self._bounds)
+		#Win.ValidWindowRect(self._bounds)
 		self.enable(self._enabled)
 	
 	def adjust(self, oldbounds):
@@ -43,7 +43,7 @@
 		if self._visible:
 			Qd.EraseRect(self._bounds)
 			self._control.ShowControl()
-			Win.ValidRect(self._bounds)
+			Win.ValidWindowRect(self._bounds)
 	
 	def close(self):
 		self._control.HideControl()
@@ -162,8 +162,8 @@
 			old = Qd.InsetRect(oldbounds, -4, -4)
 			new = Qd.InsetRect(self._bounds, -4, -4)
 			Qd.EraseRect(old)
-			Win.InvalRect(old)
-			Win.InvalRect(new)
+			Win.InvalWindowRect(old)
+			Win.InvalWindowRect(new)
 		ControlWidget.adjust(self, oldbounds)
 
 
@@ -346,7 +346,7 @@
 	
 	def adjust(self, oldbounds):
 		self.SetPort()
-		Win.InvalRect(oldbounds)
+		Win.InvalWindowRect(oldbounds)
 		self._control.HideControl()
 		self._control.MoveControl(self._bounds[0], self._bounds[1])
 		self._control.SizeControl(self._bounds[2] - self._bounds[0], self._bounds[3] - self._bounds[1])
@@ -356,7 +356,7 @@
 				self._control.ShowControl()
 			else:
 				Qd.FrameRect(self._bounds)
-			Win.ValidRect(self._bounds)
+			Win.ValidWindowRect(self._bounds)
 	
 	def activate(self, onoff):
 		self._activated = onoff
@@ -366,7 +366,7 @@
 			else:
 				self._control.HideControl()
 				self.draw(None)
-				Win.ValidRect(self._bounds)
+				Win.ValidWindowRect(self._bounds)
 		
 	def set(self, value):
 		if self._control:
diff --git a/Mac/Tools/IDE/Wlists.py b/Mac/Tools/IDE/Wlists.py
index d9470a8..08853f4 100644
--- a/Mac/Tools/IDE/Wlists.py
+++ b/Mac/Tools/IDE/Wlists.py
@@ -57,11 +57,11 @@
 	def adjust(self, oldbounds):
 		self.SetPort()
 		if self._selected:
-			Win.InvalRect(Qd.InsetRect(oldbounds, -3, -3))
-			Win.InvalRect(Qd.InsetRect(self._bounds, -3, -3))
+			Win.InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
+			Win.InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
 		else:
-			Win.InvalRect(oldbounds)
-			Win.InvalRect(self._bounds)
+			Win.InvalWindowRect(oldbounds)
+			Win.InvalWindowRect(self._bounds)
 		if oldbounds[:2] == self._bounds[:2]:
 			# set visRgn to empty, to prevent nasty drawing side effect of LSize()
 			Qd.RectRgn(self._parentwindow.wid.GetWindowPort().visRgn, (0, 0, 0, 0))
@@ -359,7 +359,7 @@
 						self.SetPort()
 						Qd.EraseRect((l, cb, cr, b))
 					self._list.LUpdate(self._parentwindow.wid.GetWindowPort().visRgn)
-					Win.ValidRect(bounds)
+					Win.ValidWindowRect(bounds)
 		else:
 			if self.drawingmode == 0 and self._list is not None:
 				self._list.LSetDrawingMode(0)
diff --git a/Mac/Tools/IDE/Wquicktime.py b/Mac/Tools/IDE/Wquicktime.py
index a33462a..224fd5f 100644
--- a/Mac/Tools/IDE/Wquicktime.py
+++ b/Mac/Tools/IDE/Wquicktime.py
@@ -24,14 +24,14 @@
 	
 	def adjust(self, oldbounds):
 		self.SetPort()
-		Win.InvalRect(oldbounds)
-		Win.InvalRect(self._bounds)
+		Win.InvalWindowRect(oldbounds)
+		Win.InvalWindowRect(self._bounds)
 		self.calcmoviebox()
 	
 	def set(self, path_or_fss, start = 0):
 		self.SetPort()
 		if self.movie:
-			#Win.InvalRect(self.movie.GetMovieBox())
+			#Win.InvalWindowRect(self.movie.GetMovieBox())
 			Qd.PaintRect(self.movie.GetMovieBox())
 		if type(path_or_fss) == type(''):
 			path = path_or_fss
@@ -106,7 +106,7 @@
 			elif self.running:
 				box = self.movie.GetMovieBox()
 				self.SetPort()
-				Win.InvalRect(box)
+				Win.InvalWindowRect(box)
 				self.movie = None
 				self.running = 0
 	
diff --git a/Mac/Tools/IDE/Wtext.py b/Mac/Tools/IDE/Wtext.py
index ac9d48e..759a9ea 100644
--- a/Mac/Tools/IDE/Wtext.py
+++ b/Mac/Tools/IDE/Wtext.py
@@ -213,11 +213,11 @@
 	def adjust(self, oldbounds):
 		self.SetPort()
 		if self._selected and self._parentwindow._hasselframes:
-			Win.InvalRect(Qd.InsetRect(oldbounds, -3, -3))
-			Win.InvalRect(Qd.InsetRect(self._bounds, -3, -3))
+			Win.InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
+			Win.InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
 		else:
-			Win.InvalRect(oldbounds)
-			Win.InvalRect(self._bounds)
+			Win.InvalWindowRect(oldbounds)
+			Win.InvalWindowRect(self._bounds)
 		viewrect, destrect = self._calctextbounds()
 		self.ted.WESetViewRect(viewrect)
 		self.ted.WESetDestRect(destrect)
@@ -305,7 +305,7 @@
 			Qd.RectRgn(rgn, viewrect)
 			Qd.EraseRect(viewrect)
 			self.draw(rgn)
-			#Win.InvalRect(self.ted.WEGetViewRect())
+			#Win.InvalWindowRect(self.ted.WEGetViewRect())
 			self.updatescrollbars()
 	
 	def get(self):
diff --git a/Mac/Tools/IDE/Wwindows.py b/Mac/Tools/IDE/Wwindows.py
index 37ad47e..1ab5056 100644
--- a/Mac/Tools/IDE/Wwindows.py
+++ b/Mac/Tools/IDE/Wwindows.py
@@ -157,7 +157,7 @@
 		if y == None:
 			x, y = x
 		self.SetPort()
-		Win.InvalRect(self.getgrowrect())
+		Win.InvalWindowRect(self.getgrowrect())
 		self.wid.SizeWindow(x, y, 1)
 		self._calcbounds()
 	
@@ -247,7 +247,7 @@
 	def drawwidgetbounds(self, onoff):
 		self._drawwidgetbounds = onoff
 		self.SetPort()
-		Win.InvalRect(self._bounds)
+		Win.InvalWindowRect(self._bounds)
 	
 	def _drawbounds(self):
 		pass
@@ -353,7 +353,7 @@
 		self.draw()
 	
 	def do_postresize(self, width, height, window):
-		Win.InvalRect(self.getgrowrect())
+		Win.InvalWindowRect(self.getgrowrect())
 		self._calcbounds()
 	
 	def do_inGoAway(self, partcode, window, event):
