diff --git a/Mac/Demo/waste/htmled.py b/Mac/Demo/waste/htmled.py
index ec6f58b..b66814a 100644
--- a/Mac/Demo/waste/htmled.py
+++ b/Mac/Demo/waste/htmled.py
@@ -194,7 +194,7 @@
 		l, t, r, b = self.ted.WEGetViewRect()
 		vr = (l, t, l+width-15, t+height-15)
 		self.ted.WESetViewRect(vr)
-		Win.InvalWindowRect(vr)
+		self.wid.InvalWindowRect(vr)
 		ScrolledWindow.do_postresize(self, width, height, window)
 		
 	def do_contentclick(self, local, modifiers, evt):
@@ -290,7 +290,7 @@
 		self.ted.WESetSelection(start, end)
 		self.ted.WESelView()
 		self.ted.WEFeatureFlag(WASTEconst.weFInhibitRecal, 0)
-		Win.InvalWindowRect(self.ted.WEGetViewRect())
+		self.wid.InvalWindowRect(self.ted.WEGetViewRect())
 
 		self.updatescrollbars()
 		self.parent.updatemenubar()
diff --git a/Mac/Demo/waste/swed.py b/Mac/Demo/waste/swed.py
index cfaae9d..035c97c 100644
--- a/Mac/Demo/waste/swed.py
+++ b/Mac/Demo/waste/swed.py
@@ -163,7 +163,7 @@
 		l, t, r, b = self.ted.WEGetViewRect()
 		vr = (l, t, l+width-15, t+height-15)
 		self.ted.WESetViewRect(vr)
-		Win.InvalWindowRect(vr)
+		self.wid.InvalWindowRect(vr)
 		ScrolledWindow.do_postresize(self, width, height, window)
 		
 	def do_contentclick(self, local, modifiers, evt):
diff --git a/Mac/Demo/waste/wed.py b/Mac/Demo/waste/wed.py
index 276bd72..7b40864 100644
--- a/Mac/Demo/waste/wed.py
+++ b/Mac/Demo/waste/wed.py
@@ -136,7 +136,7 @@
 		l, t, r, b = self.ted.WEGetViewRect()
 		vr = (l, t, l+width-15, t+height-15)
 		self.ted.WESetViewRect(vr)
-		Win.InvalWindowRect(vr)
+		self.wid.InvalWindowRect(vr)
 		ScrolledWindow.do_postresize(self, width, height, window)
 		
 	def do_contentclick(self, local, modifiers, evt):
diff --git a/Mac/Lib/FrameWork.py b/Mac/Lib/FrameWork.py
index 733e94e..780ee63 100644
--- a/Mac/Lib/FrameWork.py
+++ b/Mac/Lib/FrameWork.py
@@ -713,6 +713,9 @@
 	def SetPort(self):
 		# Convinience method
 		SetPort(self.wid)
+		
+	def GetWindow(self):
+		return self.wid
 	
 	def do_inDrag(self, partcode, window, event):
 		where = event[3]
@@ -753,13 +756,13 @@
 	def do_resize(self, width, height, window):
 		l, t, r, b = self.wid.GetWindowPort().portRect			# jvr, forGrowIcon
 		self.SetPort()							# jvr
-		InvalWindowRect((r - SCROLLBARWIDTH + 1, b - SCROLLBARWIDTH + 1, r, b))	# jvr
+		self.wid.InvalWindowRect((r - SCROLLBARWIDTH + 1, b - SCROLLBARWIDTH + 1, r, b))	# jvr
 		window.SizeWindow(width, height, 1)		# changed updateFlag to true jvr
 		self.do_postresize(width, height, window)
 	
 	def do_postresize(self, width, height, window):
 		SetPort(window)
-		InvalWindowRect(window.GetWindowPort().portRect)
+		self.wid.InvalWindowRect(window.GetWindowPort().portRect)
 	
 	def do_inContent(self, partcode, window, event):
 		#
@@ -853,12 +856,12 @@
 			rect = x0-1, y1-(SCROLLBARWIDTH-1), x1-(SCROLLBARWIDTH-2), y1+1
 			self.barx = NewControl(self.wid, rect, "", 1, vx, 0, 32767, 16, 0)
 			if not self.barx_enabled: self.barx.HiliteControl(255)
-##			InvalWindowRect(rect)
+##			self.wid.InvalWindowRect(rect)
 		if wanty:
 			rect = x1-(SCROLLBARWIDTH-1), y0-1, x1+1, y1-(SCROLLBARWIDTH-2)
 			self.bary = NewControl(self.wid, rect, "", 1, vy, 0, 32767, 16, 0)
 			if not self.bary_enabled: self.bary.HiliteControl(255)
-##			InvalWindowRect(rect)
+##			self.wid.InvalWindowRect(rect)
 			
 	def do_postclose(self):
 		self.barx = self.bary = None
@@ -893,11 +896,11 @@
 			self.bary.SizeControl(SCROLLBARWIDTH, (b-t)-(SCROLLBARWIDTH-3))	# jvr
 		if self.barx:
 			self.barx.ShowControl()		# jvr
-			ValidWindowRect((l, b - SCROLLBARWIDTH + 1, r - SCROLLBARWIDTH + 2, b))	# jvr
+			self.wid.ValidWindowRect((l, b - SCROLLBARWIDTH + 1, r - SCROLLBARWIDTH + 2, b))	# jvr
 		if self.bary:
 			self.bary.ShowControl()		# jvr
-			ValidWindowRect((r - SCROLLBARWIDTH + 1, t, r, b - SCROLLBARWIDTH + 2))	# jvr
-		InvalWindowRect((r - SCROLLBARWIDTH + 1, b - SCROLLBARWIDTH + 1, r, b))	# jvr, growicon
+			self.wid.ValidWindowRect((r - SCROLLBARWIDTH + 1, t, r, b - SCROLLBARWIDTH + 2))	# jvr
+		self.wid.InvalWindowRect((r - SCROLLBARWIDTH + 1, b - SCROLLBARWIDTH + 1, r, b))	# jvr, growicon
 
 			
 	def do_rawcontrolhit(self, window, control, pcode, local, event):
diff --git a/Mac/Lib/test/tscrollwin.py b/Mac/Lib/test/tscrollwin.py
index d91f6b9..661ad2b 100644
--- a/Mac/Lib/test/tscrollwin.py
+++ b/Mac/Lib/test/tscrollwin.py
@@ -47,7 +47,7 @@
 				self.vy = value
 			else:
 				self.vy = self.vy + delta
-		Win.InvalWindowRect(self.ourrect)
+		self.wid.InvalWindowRect(self.ourrect)
 
 	def do_update(self, wid, event):
 		Qd.EraseRect(self.ourrect)
diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py
index c18e31f..3f1e9c8 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.InvalWindowRect(editor._bounds)
+			editor.GetWindow().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 1544b67..b71e0ca 100644
--- a/Mac/Tools/IDE/Splash.py
+++ b/Mac/Tools/IDE/Splash.py
@@ -100,7 +100,7 @@
 	if drawdialog:
 		splash.DrawDialog()
 	drawtext(what)
-	Win.ValidWindowRect(splash.GetWindowPort().portRect)
+	splash.GetDialogWindow().ValidWindowRect(splash.GetDialogPort().portRect)
 
 def drawtext(what = 0):
 	Qd.SetPort(splash)
diff --git a/Mac/Tools/IDE/Wbase.py b/Mac/Tools/IDE/Wbase.py
index 0a987c6..3c5ab60 100644
--- a/Mac/Tools/IDE/Wbase.py
+++ b/Mac/Tools/IDE/Wbase.py
@@ -104,8 +104,8 @@
 	
 	def adjust(self, oldbounds):
 		self.SetPort()
-		Win.InvalWindowRect(oldbounds)
-		Win.InvalWindowRect(self._bounds)
+		self.GetWindow().InvalWindowRect(oldbounds)
+		self.GetWindow().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.InvalWindowRect(widget._bounds)
+			self.GetWindow().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.InvalWindowRect(widget._bounds)
+		self.GetWindow().InvalWindowRect(widget._bounds)
 		widget.close()
 		del self._widgetsdict[key]
 		self._widgets.remove(widget)
@@ -274,7 +274,11 @@
 	
 	def SetPort(self):
 		self._parentwindow.SetPort()
-	
+		
+
+	def GetWindow(self):
+		return self._parentwindow.GetWindow()
+		
 	def __del__(self):
 		if DEBUG:
 			print "%s instance deleted" % self.__class__.__name__
@@ -340,11 +344,11 @@
 	def adjust(self, oldbounds):
 		self.SetPort()
 		if self._selected:
-			Win.InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
-			Win.InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
+			self.GetWindow().InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
+			self.GetWindow().InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
 		else:
-			Win.InvalWindowRect(oldbounds)
-			Win.InvalWindowRect(self._bounds)
+			self.GetWindow().InvalWindowRect(oldbounds)
+			self.GetWindow().InvalWindowRect(self._bounds)
 
 
 class _Line(Widget):
diff --git a/Mac/Tools/IDE/Wcontrols.py b/Mac/Tools/IDE/Wcontrols.py
index 1a0fe88..7a88cca 100644
--- a/Mac/Tools/IDE/Wcontrols.py
+++ b/Mac/Tools/IDE/Wcontrols.py
@@ -32,7 +32,7 @@
 						self._procID, 
 						0)
 		self.SetPort()
-		#Win.ValidWindowRect(self._bounds)
+		#self.GetWindow().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.ValidWindowRect(self._bounds)
+			self.GetWindow().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.InvalWindowRect(old)
-			Win.InvalWindowRect(new)
+			self.GetWindow().InvalWindowRect(old)
+			self.GetWindow().InvalWindowRect(new)
 		ControlWidget.adjust(self, oldbounds)
 
 
@@ -346,7 +346,7 @@
 	
 	def adjust(self, oldbounds):
 		self.SetPort()
-		Win.InvalWindowRect(oldbounds)
+		self.GetWindow().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.ValidWindowRect(self._bounds)
+			self.GetWindow().ValidWindowRect(self._bounds)
 	
 	def activate(self, onoff):
 		self._activated = onoff
@@ -366,7 +366,7 @@
 			else:
 				self._control.HideControl()
 				self.draw(None)
-				Win.ValidWindowRect(self._bounds)
+				self.GetWindow().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 08853f4..dd43a2d 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.InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
-			Win.InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
+			self.GetWindow().InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
+			self.GetWindow().InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
 		else:
-			Win.InvalWindowRect(oldbounds)
-			Win.InvalWindowRect(self._bounds)
+			self.GetWindow().InvalWindowRect(oldbounds)
+			self.GetWindow().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.ValidWindowRect(bounds)
+					self.GetWindow().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 224fd5f..79adc110 100644
--- a/Mac/Tools/IDE/Wquicktime.py
+++ b/Mac/Tools/IDE/Wquicktime.py
@@ -24,14 +24,14 @@
 	
 	def adjust(self, oldbounds):
 		self.SetPort()
-		Win.InvalWindowRect(oldbounds)
-		Win.InvalWindowRect(self._bounds)
+		self.GetWindow().InvalWindowRect(oldbounds)
+		self.GetWindow().InvalWindowRect(self._bounds)
 		self.calcmoviebox()
 	
 	def set(self, path_or_fss, start = 0):
 		self.SetPort()
 		if self.movie:
-			#Win.InvalWindowRect(self.movie.GetMovieBox())
+			#self.GetWindow().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.InvalWindowRect(box)
+				self.GetWindow().InvalWindowRect(box)
 				self.movie = None
 				self.running = 0
 	
diff --git a/Mac/Tools/IDE/Wtext.py b/Mac/Tools/IDE/Wtext.py
index 759a9ea..8c1662d 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.InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
-			Win.InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
+			self.GetWindow().InvalWindowRect(Qd.InsetRect(oldbounds, -3, -3))
+			self.GetWindow().InvalWindowRect(Qd.InsetRect(self._bounds, -3, -3))
 		else:
-			Win.InvalWindowRect(oldbounds)
-			Win.InvalWindowRect(self._bounds)
+			self.GetWindow().InvalWindowRect(oldbounds)
+			self.GetWindow().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.InvalWindowRect(self.ted.WEGetViewRect())
+			#self.GetWindow().InvalWindowRect(self.ted.WEGetViewRect())
 			self.updatescrollbars()
 	
 	def get(self):
diff --git a/Mac/Tools/IDE/Wwindows.py b/Mac/Tools/IDE/Wwindows.py
index 1ab5056..2d449c7 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.InvalWindowRect(self.getgrowrect())
+		self.GetWindow().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.InvalWindowRect(self._bounds)
+		self.GetWindow().InvalWindowRect(self._bounds)
 	
 	def _drawbounds(self):
 		pass
@@ -353,7 +353,7 @@
 		self.draw()
 	
 	def do_postresize(self, width, height, window):
-		Win.InvalWindowRect(self.getgrowrect())
+		self.GetWindow().InvalWindowRect(self.getgrowrect())
 		self._calcbounds()
 	
 	def do_inGoAway(self, partcode, window, event):
diff --git a/Mac/scripts/MkDistr_ui.py b/Mac/scripts/MkDistr_ui.py
index 6d2f2c2..88c87f9 100644
--- a/Mac/scripts/MkDistr_ui.py
+++ b/Mac/scripts/MkDistr_ui.py
@@ -115,7 +115,7 @@
 				self.list.LSetCell(contents[i], (0, i))
 		self.list.LSetDrawingMode(1)
 		##self.list.LUpdate(self.wid.GetWindowPort().visRgn)
-		Win.InvalWindowRect(self.listrect)
+		self.wid.InvalWindowRect(self.listrect)
 		
 	def additem(self, item):
 		where = self.list.LAddRow(1, 0)
