diff --git a/Mac/Tools/IDE/Wmenus.py b/Mac/Tools/IDE/Wmenus.py
index 387590b..6cbd41d 100644
--- a/Mac/Tools/IDE/Wmenus.py
+++ b/Mac/Tools/IDE/Wmenus.py
@@ -1,6 +1,6 @@
 import FrameWork
 import Qd
-import Wbase
+import Wbase, Wcontrols, Ctl, Controls
 from types import *
 import Wapplication
 
@@ -8,21 +8,77 @@
 _arrowdown = Qd.GetPicture(473)
 
 
+class PopupControl(Wcontrols.ControlWidget):
+	
+	def __init__(self, possize, items=None, callback=None):
+		if items is None:
+			items = []
+		procID = Controls.popupMenuProc|Controls.popupFixedWidth|Controls.useWFont
+		Wcontrols.ControlWidget.__init__(self, possize, "", procID, callback, 0, 0, 0)
+		self._items = items[:]
+	
+	def set(self, value):
+		self._control.SetControlValue(value+1)
+	
+	def get(self):
+		return self._control.GetControlValue() - 1
+	
+	def open(self):
+		self.menu = menu = FrameWork.Menu(self._parentwindow.parent.menubar, 'Foo', -1)
+		
+		for i in range(len(self._items)):
+			item = self._items[i]
+			if type(item) == StringType:
+				menuitemtext = object = item
+			elif type(item) == TupleType and len(item) == 2:
+				menuitemtext, object = item
+				self._items[i] = object
+			else:
+				raise Wbase.WidgetsError, "illegal itemlist for popup menu"
+			menuitem = FrameWork.MenuItem(menu, menuitemtext, None, None)
+		
+		self._calcbounds()
+		self._control = Ctl.NewControl(self._parentwindow.wid, 
+						self._bounds, 
+						self._title, 
+						1, 
+						self._value, 
+						self.menu.id, 
+						self._max, 
+						self._procID, 
+						0)
+		self.SetPort()
+		self.enable(self._enabled)
+	
+	def close(self):
+		self.menu.delete()
+		return Wcontrols.ControlWidget.close(self)
+	
+	def click(self, point, modifiers):
+		if not self._enabled:
+			return
+		part = self._control.TrackControl(point, -1)
+		if part:
+			if self._callback:
+				Wbase.CallbackCall(self._callback, 0, self._items[self.get()])
+
 
 class PopupWidget(Wbase.ClickableWidget):
 	
 	"""Simple title-less popup widget. Should be 16x16 pixels. 
 	Builds the menu items on the fly, good for dynamic popup menus."""
 	
-	def __init__(self, possize, items = [], callback = None):
-		Wbase.Widget.__init__(self, possize)
+	def __init__(self, possize, items=None, callback=None):
+		Wbase.ClickableWidget.__init__(self, possize)
+		if items is None:
+			items = []
 		self._items = items
 		self._itemsdict = {}
 		self._callback = callback
 		self._enabled = 1
 	
 	def close(self):
-		Wbase.Widget.close(self)
+		Wbase.ClickableWidget.close(self)
 		self._items = None
 		self._itemsdict = {}
 	
