diff --git a/Mac/Lib/test/progressbar.py b/Mac/Lib/test/progressbar.py
index 59e0cc1..e165061 100644
--- a/Mac/Lib/test/progressbar.py
+++ b/Mac/Lib/test/progressbar.py
@@ -1,12 +1,12 @@
 # Progress dialog
 
 from addpack import addpack
-addpack('Demo')
+addpack('Tools')
 addpack('bgen')
 addpack('dlg')
 addpack('evt')
 
-from Dlg import GetNewDialog, ModalDialog, SetIText
+from Dlg import GetNewDialog, ModalDialog, SetDialogItemText
 
 count = 0
 
@@ -17,12 +17,12 @@
 
 def main():
 	d = GetNewDialog(256, -1)
-	tp, h, rect = d.GetDItem(2)
-	SetIText(h, "Progress...")
+	tp, h, rect = d.GetDialogItem(2)
+	SetDialogItemText(h, "Progress...")
 	for i in range(100):
 		if i%10 == 0:
 			str = "Progress...%d" % i
-			SetIText(h, str)
+			SetDialogItemText(h, str)
 			ModalDialog(filter)
 		for j in range(100): pass
 
diff --git a/Mac/Lib/test/tctl.py b/Mac/Lib/test/tctl.py
index 862eeb5..a255c56 100644
--- a/Mac/Lib/test/tctl.py
+++ b/Mac/Lib/test/tctl.py
@@ -5,6 +5,7 @@
 from Win import *
 from Evt import *
 import time
+import sys
 
 def main():
 	r = (40, 40, 400, 300)
@@ -12,6 +13,8 @@
 	w.DrawGrowIcon()
 	r = (40, 40, 100, 60)
 	c = NewControl(w, r, "SPAM!", 1, 0, 0, 1, 0, 0)
+	print 'Ok, try it...'
+	sys.exit(1)  # So we can see what happens...
 
 
 main()
diff --git a/Mac/Lib/test/tdlg.py b/Mac/Lib/test/tdlg.py
index d6fdd97..654a9a5 100644
--- a/Mac/Lib/test/tdlg.py
+++ b/Mac/Lib/test/tdlg.py
@@ -3,6 +3,9 @@
 # Python library.
 # The ID can be overridden by passing a second parameter.
 
+import addpack
+addpack.addpack(':Tools:bgen:evt')
+
 from Dlg import *
 from Events import *
 import string
@@ -17,8 +20,8 @@
 
 def message(str = "Hello, world!", id = ID):
 	d = GetNewDialog(id, -1)
-	tp, h, rect = d.GetDItem(2)
-	SetIText(h, str)
+	tp, h, rect = d.GetDialogItem(2)
+	SetDialogItemText(h, str)
 	while 1:
 		n = ModalDialog(f)
 		if n == 1: break
diff --git a/Mac/Lib/toolbox/Controls.py b/Mac/Lib/toolbox/Controls.py
index 0686580..af1747f 100644
--- a/Mac/Lib/toolbox/Controls.py
+++ b/Mac/Lib/toolbox/Controls.py
@@ -1,10 +1,14 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Controls.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Controls.h'
 
 pushButProc = 0
 checkBoxProc = 1
 radioButProc = 2
-useWFont = 8
 scrollBarProc = 16
+popupMenuProc = 1008
+useWFont = 8
+inLabel = 1
+inMenu = 2
+inTriangle = 4
 inButton = 10
 inCheckBox = 11
 inUpButton = 20
@@ -12,17 +16,34 @@
 inPageUp = 22
 inPageDown = 23
 inThumb = 129
-popupMenuProc = 1008
-inLabel = 1
-inMenu = 2
-inTriangle = 4
+kNoHiliteControlPart = 0
+kInLabelControlPart = 1
+kInMenuControlPart = 2
+kInTriangleControlPart = 4
+kInButtonControlPart = 10
+kInCheckBoxControlPart = 11
+kInUpButtonControlPart = 20
+kInDownButtonControlPart = 21
+kInPageUpControlPart = 22
+kInPageDownControlPart = 23
+kInIndicatorControlPart = 129
+kReservedControlPart = 254
+kControlInactiveControlPart = 255
+popupFixedWidth = 1 << 0
+popupVariableWidth = 1 << 1
+popupUseAddResMenu = 1 << 2
 popupUseWFont = 1 << 3
+popupTitleBold = 1 << 8
+popupTitleItalic = 1 << 9
+popupTitleUnderline = 1 << 10
 popupTitleOutline = 1 << 11
+popupTitleShadow = 1 << 12
+popupTitleCondense = 1 << 13
 popupTitleExtend = 1 << 14
+popupTitleNoStyle = 1 << 15
 popupTitleLeftJust = 0x00000000
 popupTitleCenterJust = 0x00000001
 popupTitleRightJust = 0x000000FF
-noConstraint = 0
 hAxisOnly = 1
 vAxisOnly = 2
 drawCntl = 0
@@ -36,6 +57,7 @@
 autoTrack = 8
 calcCntlRgn = 10
 calcThumbRgn = 11
+drawThumbOutline = 12
 cFrameColor = 0
 cBodyColor = 1
 cTextColor = 2
diff --git a/Mac/Lib/toolbox/Dialogs.py b/Mac/Lib/toolbox/Dialogs.py
index c31bfbe..66fea6b 100644
--- a/Mac/Lib/toolbox/Dialogs.py
+++ b/Mac/Lib/toolbox/Dialogs.py
@@ -1,4 +1,4 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Dialogs.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Dialogs.h'
 
 ctrlItem = 4
 btnCtrl = 0
@@ -16,6 +16,7 @@
 stopIcon = 0
 noteIcon = 1
 cautionIcon = 2
+kIDODialogItem = 24
 overlayDITL = 0
 appendDITLRight = 1
 appendDITLBottom = 2
diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c
index fb1459a..6af76a5 100644
--- a/Mac/Modules/ctl/Ctlmodule.c
+++ b/Mac/Modules/ctl/Ctlmodule.c
@@ -56,7 +56,7 @@
 } ControlObject;
 
 PyObject *CtlObj_New(itself)
-	const ControlHandle itself;
+	ControlHandle itself;
 {
 	ControlObject *it;
 	if (itself == NULL) return PyMac_Error(resNotFound);
@@ -86,7 +86,7 @@
 	PyMem_DEL(self);
 }
 
-static PyObject *CtlObj_SetCTitle(_self, _args)
+static PyObject *CtlObj_SetControlTitle(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -95,14 +95,14 @@
 	if (!PyArg_ParseTuple(_args, "O&",
 	                      PyMac_GetStr255, title))
 		return NULL;
-	SetCTitle(_self->ob_itself,
-	          title);
+	SetControlTitle(_self->ob_itself,
+	                title);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_GetCTitle(_self, _args)
+static PyObject *CtlObj_GetControlTitle(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -111,8 +111,8 @@
 	if (!PyArg_ParseTuple(_args, "O&",
 	                      PyMac_GetStr255, title))
 		return NULL;
-	GetCTitle(_self->ob_itself,
-	          title);
+	GetControlTitle(_self->ob_itself,
+	                title);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -224,7 +224,7 @@
 	return _res;
 }
 
-static PyObject *CtlObj_SetCtlValue(_self, _args)
+static PyObject *CtlObj_SetControlValue(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -233,14 +233,14 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &theValue))
 		return NULL;
-	SetCtlValue(_self->ob_itself,
-	            theValue);
+	SetControlValue(_self->ob_itself,
+	                theValue);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_GetCtlValue(_self, _args)
+static PyObject *CtlObj_GetControlValue(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -248,13 +248,13 @@
 	short _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = GetCtlValue(_self->ob_itself);
+	_rv = GetControlValue(_self->ob_itself);
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
 
-static PyObject *CtlObj_SetCtlMin(_self, _args)
+static PyObject *CtlObj_SetControlMinimum(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -263,14 +263,14 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &minValue))
 		return NULL;
-	SetCtlMin(_self->ob_itself,
-	          minValue);
+	SetControlMinimum(_self->ob_itself,
+	                  minValue);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_GetCtlMin(_self, _args)
+static PyObject *CtlObj_GetControlMinimum(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -278,13 +278,13 @@
 	short _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = GetCtlMin(_self->ob_itself);
+	_rv = GetControlMinimum(_self->ob_itself);
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
 
-static PyObject *CtlObj_SetCtlMax(_self, _args)
+static PyObject *CtlObj_SetControlMaximum(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -293,14 +293,14 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &maxValue))
 		return NULL;
-	SetCtlMax(_self->ob_itself,
-	          maxValue);
+	SetControlMaximum(_self->ob_itself,
+	                  maxValue);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_GetCtlMax(_self, _args)
+static PyObject *CtlObj_GetControlMaximum(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -308,13 +308,13 @@
 	short _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = GetCtlMax(_self->ob_itself);
+	_rv = GetControlMaximum(_self->ob_itself);
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
 
-static PyObject *CtlObj_SetCRefCon(_self, _args)
+static PyObject *CtlObj_SetControlReference(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -323,14 +323,14 @@
 	if (!PyArg_ParseTuple(_args, "l",
 	                      &data))
 		return NULL;
-	SetCRefCon(_self->ob_itself,
-	           data);
+	SetControlReference(_self->ob_itself,
+	                    data);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_GetCRefCon(_self, _args)
+static PyObject *CtlObj_GetControlReference(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
@@ -338,12 +338,26 @@
 	long _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = GetCRefCon(_self->ob_itself);
+	_rv = GetControlReference(_self->ob_itself);
 	_res = Py_BuildValue("l",
 	                     _rv);
 	return _res;
 }
 
+static PyObject *CtlObj_SetControlAction(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	SetControlAction(_self->ob_itself,
+	                 (ControlActionUPP)0);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyObject *CtlObj_DragControl(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
@@ -386,6 +400,20 @@
 	return _res;
 }
 
+static PyObject *CtlObj_GetControlVariant(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetControlVariant(_self->ob_itself);
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
 static PyObject *CtlObj_TrackControl(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
@@ -404,24 +432,10 @@
 	return _res;
 }
 
-static PyObject *CtlObj_GetCVariant(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short _rv;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	_rv = GetCVariant(_self->ob_itself);
-	_res = Py_BuildValue("h",
-	                     _rv);
-	return _res;
-}
-
 static PyMethodDef CtlObj_methods[] = {
-	{"SetCTitle", (PyCFunction)CtlObj_SetCTitle, 1,
+	{"SetControlTitle", (PyCFunction)CtlObj_SetControlTitle, 1,
 	 "(Str255 title) -> None"},
-	{"GetCTitle", (PyCFunction)CtlObj_GetCTitle, 1,
+	{"GetControlTitle", (PyCFunction)CtlObj_GetControlTitle, 1,
 	 "(Str255 title) -> None"},
 	{"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1,
 	 "() -> None"},
@@ -437,30 +451,32 @@
 	 "(short h, short v) -> None"},
 	{"SizeControl", (PyCFunction)CtlObj_SizeControl, 1,
 	 "(short w, short h) -> None"},
-	{"SetCtlValue", (PyCFunction)CtlObj_SetCtlValue, 1,
+	{"SetControlValue", (PyCFunction)CtlObj_SetControlValue, 1,
 	 "(short theValue) -> None"},
-	{"GetCtlValue", (PyCFunction)CtlObj_GetCtlValue, 1,
+	{"GetControlValue", (PyCFunction)CtlObj_GetControlValue, 1,
 	 "() -> (short _rv)"},
-	{"SetCtlMin", (PyCFunction)CtlObj_SetCtlMin, 1,
+	{"SetControlMinimum", (PyCFunction)CtlObj_SetControlMinimum, 1,
 	 "(short minValue) -> None"},
-	{"GetCtlMin", (PyCFunction)CtlObj_GetCtlMin, 1,
+	{"GetControlMinimum", (PyCFunction)CtlObj_GetControlMinimum, 1,
 	 "() -> (short _rv)"},
-	{"SetCtlMax", (PyCFunction)CtlObj_SetCtlMax, 1,
+	{"SetControlMaximum", (PyCFunction)CtlObj_SetControlMaximum, 1,
 	 "(short maxValue) -> None"},
-	{"GetCtlMax", (PyCFunction)CtlObj_GetCtlMax, 1,
+	{"GetControlMaximum", (PyCFunction)CtlObj_GetControlMaximum, 1,
 	 "() -> (short _rv)"},
-	{"SetCRefCon", (PyCFunction)CtlObj_SetCRefCon, 1,
+	{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
 	 "(long data) -> None"},
-	{"GetCRefCon", (PyCFunction)CtlObj_GetCRefCon, 1,
+	{"GetControlReference", (PyCFunction)CtlObj_GetControlReference, 1,
 	 "() -> (long _rv)"},
+	{"SetControlAction", (PyCFunction)CtlObj_SetControlAction, 1,
+	 "() -> None"},
 	{"DragControl", (PyCFunction)CtlObj_DragControl, 1,
 	 "(Point startPt, Rect limitRect, Rect slopRect, short axis) -> None"},
 	{"TestControl", (PyCFunction)CtlObj_TestControl, 1,
 	 "(Point thePt) -> (short _rv)"},
+	{"GetControlVariant", (PyCFunction)CtlObj_GetControlVariant, 1,
+	 "() -> (short _rv)"},
 	{"TrackControl", (PyCFunction)CtlObj_TrackControl, 1,
 	 "(Point thePoint) -> (short _rv)"},
-	{"GetCVariant", (PyCFunction)CtlObj_GetCVariant, 1,
-	 "() -> (short _rv)"},
 	{NULL, NULL, 0}
 };
 
@@ -580,22 +596,6 @@
 	return _res;
 }
 
-static PyObject *Ctl_UpdtControl(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	WindowPtr theWindow;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      WinObj_Convert, &theWindow))
-		return NULL;
-	UpdtControl(theWindow,
-	            theWindow->visRgn);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Ctl_UpdateControls(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -643,8 +643,6 @@
 	 "(WindowPtr theWindow) -> None"},
 	{"DrawControls", (PyCFunction)Ctl_DrawControls, 1,
 	 "(WindowPtr theWindow) -> None"},
-	{"UpdtControl", (PyCFunction)Ctl_UpdtControl, 1,
-	 "(WindowPtr theWindow) -> None"},
 	{"UpdateControls", (PyCFunction)Ctl_UpdateControls, 1,
 	 "(WindowPtr theWindow) -> None"},
 	{"FindControl", (PyCFunction)Ctl_FindControl, 1,
diff --git a/Mac/Modules/ctl/ctlgen.py b/Mac/Modules/ctl/ctlgen.py
index 0a355cf..85fc6c7 100644
--- a/Mac/Modules/ctl/ctlgen.py
+++ b/Mac/Modules/ctl/ctlgen.py
@@ -1,7 +1,7 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Controls.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Controls.h'
 
-f = Function(ControlHandle, 'NewControl',
-    (WindowPtr, 'theWindow', InMode),
+f = Function(ControlRef, 'NewControl',
+    (WindowRef, 'theWindow', InMode),
     (Rect_ptr, 'boundsRect', InMode),
     (ConstStr255Param, 'title', InMode),
     (Boolean, 'visible', InMode),
@@ -13,132 +13,132 @@
 )
 functions.append(f)
 
-f = Method(void, 'SetCTitle',
-    (ControlHandle, 'theControl', InMode),
+f = Method(void, 'SetControlTitle',
+    (ControlRef, 'theControl', InMode),
     (ConstStr255Param, 'title', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'GetCTitle',
-    (ControlHandle, 'theControl', InMode),
+f = Method(void, 'GetControlTitle',
+    (ControlRef, 'theControl', InMode),
     (Str255, 'title', InMode),
 )
 methods.append(f)
 
-f = Function(ControlHandle, 'GetNewControl',
+f = Function(ControlRef, 'GetNewControl',
     (short, 'controlID', InMode),
-    (WindowPtr, 'owner', InMode),
+    (WindowRef, 'owner', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'DisposeControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Function(void, 'KillControls',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'HideControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'ShowControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Function(void, 'DrawControls',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'Draw1Control',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'HiliteControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
     (short, 'hiliteState', InMode),
 )
 methods.append(f)
 
-f = Function(void, 'UpdtControl',
-    (WindowPtr, 'theWindow', InMode),
-    (RgnHandle, 'updateRgn', InMode),
-)
-functions.append(f)
-
 f = Function(void, 'UpdateControls',
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (RgnHandle, 'updateRgn', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'MoveControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
     (short, 'h', InMode),
     (short, 'v', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SizeControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
     (short, 'w', InMode),
     (short, 'h', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'SetCtlValue',
-    (ControlHandle, 'theControl', InMode),
+f = Method(void, 'SetControlValue',
+    (ControlRef, 'theControl', InMode),
     (short, 'theValue', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'GetCtlValue',
-    (ControlHandle, 'theControl', InMode),
+f = Method(short, 'GetControlValue',
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'SetCtlMin',
-    (ControlHandle, 'theControl', InMode),
+f = Method(void, 'SetControlMinimum',
+    (ControlRef, 'theControl', InMode),
     (short, 'minValue', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'GetCtlMin',
-    (ControlHandle, 'theControl', InMode),
+f = Method(short, 'GetControlMinimum',
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'SetCtlMax',
-    (ControlHandle, 'theControl', InMode),
+f = Method(void, 'SetControlMaximum',
+    (ControlRef, 'theControl', InMode),
     (short, 'maxValue', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'GetCtlMax',
-    (ControlHandle, 'theControl', InMode),
+f = Method(short, 'GetControlMaximum',
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'SetCRefCon',
-    (ControlHandle, 'theControl', InMode),
+f = Method(void, 'SetControlReference',
+    (ControlRef, 'theControl', InMode),
     (long, 'data', InMode),
 )
 methods.append(f)
 
-f = Method(long, 'GetCRefCon',
-    (ControlHandle, 'theControl', InMode),
+f = Method(long, 'GetControlReference',
+    (ControlRef, 'theControl', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'SetControlAction',
+    (ControlRef, 'theControl', InMode),
+    (FakeType('(ControlActionUPP)0'), 'actionProc', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'DragControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
     (Point, 'startPt', InMode),
     (Rect_ptr, 'limitRect', InMode),
     (Rect_ptr, 'slopRect', InMode),
@@ -147,27 +147,27 @@
 methods.append(f)
 
 f = Method(short, 'TestControl',
-    (ControlHandle, 'theControl', InMode),
+    (ControlRef, 'theControl', InMode),
     (Point, 'thePt', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'TrackControl',
-    (ControlHandle, 'theControl', InMode),
-    (Point, 'thePoint', InMode),
-    (FakeType('(ControlActionUPP)0'), 'actionProc', InMode),
-)
-methods.append(f)
-
 f = Function(short, 'FindControl',
     (Point, 'thePoint', InMode),
-    (WindowPtr, 'theWindow', InMode),
+    (WindowRef, 'theWindow', InMode),
     (ExistingControlHandle, 'theControl', OutMode),
 )
 functions.append(f)
 
-f = Method(short, 'GetCVariant',
-    (ControlHandle, 'theControl', InMode),
+f = Method(short, 'GetControlVariant',
+    (ControlRef, 'theControl', InMode),
+)
+methods.append(f)
+
+f = Method(short, 'TrackControl',
+    (ControlRef, 'theControl', InMode),
+    (Point, 'thePoint', InMode),
+    (FakeType('(ControlActionUPP)0'), 'actionProc', InMode),
 )
 methods.append(f)
 
diff --git a/Mac/Modules/ctl/ctlscan.py b/Mac/Modules/ctl/ctlscan.py
index f104e8d..e36db2c 100644
--- a/Mac/Modules/ctl/ctlscan.py
+++ b/Mac/Modules/ctl/ctlscan.py
@@ -1,4 +1,6 @@
 # Scan <Controls.h>, generating ctlgen.py.
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
 
 from scantools import Scanner
 
@@ -20,7 +22,7 @@
 		listname = "functions"
 		if arglist:
 			t, n, m = arglist[0]
-			if t == "ControlHandle" and m == "InMode":
+			if t in ("ControlHandle", "ControlRef") and m == "InMode":
 				classname = "Method"
 				listname = "methods"
 		return classname, listname
@@ -35,6 +37,7 @@
 	def makeblacklisttypes(self):
 		return [
 			'ProcPtr',
+			'ControlActionUPP',
 			'CCTabHandle',
 			'AuxCtlHandle',
 			]
@@ -51,9 +54,13 @@
 			# For TrackControl
 			([("ProcPtr", "actionProc", "InMode")],
 			 [("FakeType('(ControlActionUPP)0')", "*", "*")]),
+			([("ControlActionUPP", "actionProc", "InMode")],
+			 [("FakeType('(ControlActionUPP)0')", "*", "*")]),
 			
 			([("ControlHandle", "*", "OutMode")],
 			 [("ExistingControlHandle", "*", "*")]),
+			([("ControlRef", "*", "OutMode")],	# Ditto, for Universal Headers
+			 [("ExistingControlHandle", "*", "*")]),
 			]
 
 if __name__ == "__main__":
diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py
index 97b1f33..9846631 100644
--- a/Mac/Modules/ctl/ctlsupport.py
+++ b/Mac/Modules/ctl/ctlsupport.py
@@ -5,6 +5,9 @@
 
 import string
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 # Declarations that change for each manager
 MACHEADERFILE = 'Controls.h'		# The Apple header file
 MODNAME = 'Ctl'				# The name of the module
@@ -22,6 +25,7 @@
 # Create the type objects
 
 ControlHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
+ControlRef = ControlHandle
 ExistingControlHandle = OpaqueByValueType(OBJECTTYPE, "CtlObj_WhichControl", "BUG")
 
 RgnHandle = FakeType("theWindow->visRgn") # XXX
diff --git a/Mac/Modules/dlg/Dlgmodule.c b/Mac/Modules/dlg/Dlgmodule.c
index b297e1c..f1010a2 100644
--- a/Mac/Modules/dlg/Dlgmodule.c
+++ b/Mac/Modules/dlg/Dlgmodule.c
@@ -172,7 +172,7 @@
 	return _res;
 }
 
-static PyObject *DlgObj_GetDItem(_self, _args)
+static PyObject *DlgObj_GetDialogItem(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
@@ -184,11 +184,11 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &itemNo))
 		return NULL;
-	GetDItem(_self->ob_itself,
-	         itemNo,
-	         &itemType,
-	         &item,
-	         &box);
+	GetDialogItem(_self->ob_itself,
+	              itemNo,
+	              &itemType,
+	              &item,
+	              &box);
 	_res = Py_BuildValue("hO&O&",
 	                     itemType,
 	                     ResObj_New, item,
@@ -196,7 +196,7 @@
 	return _res;
 }
 
-static PyObject *DlgObj_SetDItem(_self, _args)
+static PyObject *DlgObj_SetDialogItem(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
@@ -211,17 +211,17 @@
 	                      ResObj_Convert, &item,
 	                      PyMac_GetRect, &box))
 		return NULL;
-	SetDItem(_self->ob_itself,
-	         itemNo,
-	         itemType,
-	         item,
-	         &box);
+	SetDialogItem(_self->ob_itself,
+	              itemNo,
+	              itemType,
+	              item,
+	              &box);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_HideDItem(_self, _args)
+static PyObject *DlgObj_HideDialogItem(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
@@ -230,14 +230,14 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &itemNo))
 		return NULL;
-	HideDItem(_self->ob_itself,
-	          itemNo);
+	HideDialogItem(_self->ob_itself,
+	               itemNo);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_ShowDItem(_self, _args)
+static PyObject *DlgObj_ShowDialogItem(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
@@ -246,14 +246,14 @@
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &itemNo))
 		return NULL;
-	ShowDItem(_self->ob_itself,
-	          itemNo);
+	ShowDialogItem(_self->ob_itself,
+	               itemNo);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_SelIText(_self, _args)
+static PyObject *DlgObj_SelectDialogItemText(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
@@ -266,16 +266,16 @@
 	                      &strtSel,
 	                      &endSel))
 		return NULL;
-	SelIText(_self->ob_itself,
-	         itemNo,
-	         strtSel,
-	         endSel);
+	SelectDialogItemText(_self->ob_itself,
+	                     itemNo,
+	                     strtSel,
+	                     endSel);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_FindDItem(_self, _args)
+static PyObject *DlgObj_FindDialogItem(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
@@ -285,60 +285,60 @@
 	if (!PyArg_ParseTuple(_args, "O&",
 	                      PyMac_GetPoint, &thePt))
 		return NULL;
-	_rv = FindDItem(_self->ob_itself,
-	                thePt);
+	_rv = FindDialogItem(_self->ob_itself,
+	                     thePt);
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
 
-static PyObject *DlgObj_DlgCut(_self, _args)
+static PyObject *DlgObj_DialogCut(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	DlgCut(_self->ob_itself);
+	DialogCut(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_DlgPaste(_self, _args)
+static PyObject *DlgObj_DialogPaste(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	DlgPaste(_self->ob_itself);
+	DialogPaste(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_DlgCopy(_self, _args)
+static PyObject *DlgObj_DialogCopy(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	DlgCopy(_self->ob_itself);
+	DialogCopy(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *DlgObj_DlgDelete(_self, _args)
+static PyObject *DlgObj_DialogDelete(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	DlgDelete(_self->ob_itself);
+	DialogDelete(_self->ob_itself);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -393,30 +393,104 @@
 	return _res;
 }
 
+static PyObject *DlgObj_StdFilterProc(_self, _args)
+	DialogObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Boolean _rv;
+	EventRecord event;
+	short itemHit;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = StdFilterProc(_self->ob_itself,
+	                    &event,
+	                    &itemHit);
+	_res = Py_BuildValue("bO&h",
+	                     _rv,
+	                     PyMac_BuildEventRecord, &event,
+	                     itemHit);
+	return _res;
+}
+
+static PyObject *DlgObj_SetDialogDefaultItem(_self, _args)
+	DialogObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	short newItem;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &newItem))
+		return NULL;
+	_err = SetDialogDefaultItem(_self->ob_itself,
+	                            newItem);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *DlgObj_SetDialogCancelItem(_self, _args)
+	DialogObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	short newItem;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &newItem))
+		return NULL;
+	_err = SetDialogCancelItem(_self->ob_itself,
+	                           newItem);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *DlgObj_SetDialogTracksCursor(_self, _args)
+	DialogObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	Boolean tracks;
+	if (!PyArg_ParseTuple(_args, "b",
+	                      &tracks))
+		return NULL;
+	_err = SetDialogTracksCursor(_self->ob_itself,
+	                             tracks);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyMethodDef DlgObj_methods[] = {
 	{"DrawDialog", (PyCFunction)DlgObj_DrawDialog, 1,
 	 "() -> None"},
 	{"UpdateDialog", (PyCFunction)DlgObj_UpdateDialog, 1,
 	 "() -> None"},
-	{"GetDItem", (PyCFunction)DlgObj_GetDItem, 1,
+	{"GetDialogItem", (PyCFunction)DlgObj_GetDialogItem, 1,
 	 "(short itemNo) -> (short itemType, Handle item, Rect box)"},
-	{"SetDItem", (PyCFunction)DlgObj_SetDItem, 1,
+	{"SetDialogItem", (PyCFunction)DlgObj_SetDialogItem, 1,
 	 "(short itemNo, short itemType, Handle item, Rect box) -> None"},
-	{"HideDItem", (PyCFunction)DlgObj_HideDItem, 1,
+	{"HideDialogItem", (PyCFunction)DlgObj_HideDialogItem, 1,
 	 "(short itemNo) -> None"},
-	{"ShowDItem", (PyCFunction)DlgObj_ShowDItem, 1,
+	{"ShowDialogItem", (PyCFunction)DlgObj_ShowDialogItem, 1,
 	 "(short itemNo) -> None"},
-	{"SelIText", (PyCFunction)DlgObj_SelIText, 1,
+	{"SelectDialogItemText", (PyCFunction)DlgObj_SelectDialogItemText, 1,
 	 "(short itemNo, short strtSel, short endSel) -> None"},
-	{"FindDItem", (PyCFunction)DlgObj_FindDItem, 1,
+	{"FindDialogItem", (PyCFunction)DlgObj_FindDialogItem, 1,
 	 "(Point thePt) -> (short _rv)"},
-	{"DlgCut", (PyCFunction)DlgObj_DlgCut, 1,
+	{"DialogCut", (PyCFunction)DlgObj_DialogCut, 1,
 	 "() -> None"},
-	{"DlgPaste", (PyCFunction)DlgObj_DlgPaste, 1,
+	{"DialogPaste", (PyCFunction)DlgObj_DialogPaste, 1,
 	 "() -> None"},
-	{"DlgCopy", (PyCFunction)DlgObj_DlgCopy, 1,
+	{"DialogCopy", (PyCFunction)DlgObj_DialogCopy, 1,
 	 "() -> None"},
-	{"DlgDelete", (PyCFunction)DlgObj_DlgDelete, 1,
+	{"DialogDelete", (PyCFunction)DlgObj_DialogDelete, 1,
 	 "() -> None"},
 	{"AppendDITL", (PyCFunction)DlgObj_AppendDITL, 1,
 	 "(Handle theHandle, DITLMethod method) -> None"},
@@ -424,6 +498,14 @@
 	 "() -> (short _rv)"},
 	{"ShortenDITL", (PyCFunction)DlgObj_ShortenDITL, 1,
 	 "(short numberItems) -> None"},
+	{"StdFilterProc", (PyCFunction)DlgObj_StdFilterProc, 1,
+	 "() -> (Boolean _rv, EventRecord event, short itemHit)"},
+	{"SetDialogDefaultItem", (PyCFunction)DlgObj_SetDialogDefaultItem, 1,
+	 "(short newItem) -> None"},
+	{"SetDialogCancelItem", (PyCFunction)DlgObj_SetDialogCancelItem, 1,
+	 "(short newItem) -> None"},
+	{"SetDialogTracksCursor", (PyCFunction)DlgObj_SetDialogTracksCursor, 1,
+	 "(Boolean tracks) -> None"},
 	{NULL, NULL, 0}
 };
 
@@ -541,12 +623,12 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	PyObject* filterProc;
+	PyObject* modalFilter;
 	short itemHit;
 	if (!PyArg_ParseTuple(_args, "O",
-	                      &filterProc))
+	                      &modalFilter))
 		return NULL;
-	ModalDialog(NewModalFilterProc(Dlg_PassFilterProc(filterProc)),
+	ModalDialog(NewModalFilterProc(Dlg_PassFilterProc(modalFilter)),
 	            &itemHit);
 	_res = Py_BuildValue("h",
 	                     itemHit);
@@ -598,13 +680,13 @@
 	PyObject *_res = NULL;
 	short _rv;
 	short alertID;
-	PyObject* filterProc;
+	PyObject* modalFilter;
 	if (!PyArg_ParseTuple(_args, "hO",
 	                      &alertID,
-	                      &filterProc))
+	                      &modalFilter))
 		return NULL;
 	_rv = Alert(alertID,
-	            NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
+	            NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
@@ -617,13 +699,13 @@
 	PyObject *_res = NULL;
 	short _rv;
 	short alertID;
-	PyObject* filterProc;
+	PyObject* modalFilter;
 	if (!PyArg_ParseTuple(_args, "hO",
 	                      &alertID,
-	                      &filterProc))
+	                      &modalFilter))
 		return NULL;
 	_rv = StopAlert(alertID,
-	                NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
+	                NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
@@ -636,13 +718,13 @@
 	PyObject *_res = NULL;
 	short _rv;
 	short alertID;
-	PyObject* filterProc;
+	PyObject* modalFilter;
 	if (!PyArg_ParseTuple(_args, "hO",
 	                      &alertID,
-	                      &filterProc))
+	                      &modalFilter))
 		return NULL;
 	_rv = NoteAlert(alertID,
-	                NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
+	                NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
@@ -655,19 +737,19 @@
 	PyObject *_res = NULL;
 	short _rv;
 	short alertID;
-	PyObject* filterProc;
+	PyObject* modalFilter;
 	if (!PyArg_ParseTuple(_args, "hO",
 	                      &alertID,
-	                      &filterProc))
+	                      &modalFilter))
 		return NULL;
 	_rv = CautionAlert(alertID,
-	                   NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
+	                   NewModalFilterProc(Dlg_PassFilterProc(modalFilter)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
 
-static PyObject *Dlg_GetIText(_self, _args)
+static PyObject *Dlg_GetDialogItemText(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
@@ -677,14 +759,14 @@
 	if (!PyArg_ParseTuple(_args, "O&",
 	                      ResObj_Convert, &item))
 		return NULL;
-	GetIText(item,
-	         text);
+	GetDialogItemText(item,
+	                  text);
 	_res = Py_BuildValue("O&",
 	                     PyMac_BuildStr255, text);
 	return _res;
 }
 
-static PyObject *Dlg_SetIText(_self, _args)
+static PyObject *Dlg_SetDialogItemText(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
@@ -695,14 +777,14 @@
 	                      ResObj_Convert, &item,
 	                      PyMac_GetStr255, text))
 		return NULL;
-	SetIText(item,
-	         text);
+	SetDialogItemText(item,
+	                  text);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *Dlg_NewCDialog(_self, _args)
+static PyObject *Dlg_NewColorDialog(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
@@ -726,43 +808,57 @@
 	                      &refCon,
 	                      ResObj_Convert, &items))
 		return NULL;
-	_rv = NewCDialog((void *)0,
-	                 &boundsRect,
-	                 title,
-	                 visible,
-	                 procID,
-	                 behind,
-	                 goAwayFlag,
-	                 refCon,
-	                 items);
+	_rv = NewColorDialog((void *)0,
+	                     &boundsRect,
+	                     title,
+	                     visible,
+	                     procID,
+	                     behind,
+	                     goAwayFlag,
+	                     refCon,
+	                     items);
 	_res = Py_BuildValue("O&",
 	                     DlgObj_New, _rv);
 	return _res;
 }
 
-static PyObject *Dlg_ResetAlrtStage(_self, _args)
+static PyObject *Dlg_GetAlertStage(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	short _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetAlertStage();
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *Dlg_ResetAlertStage(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	ResetAlrtStage();
+	ResetAlertStage();
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *Dlg_SetDAFont(_self, _args)
+static PyObject *Dlg_SetDialogFont(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short fontNum;
+	short value;
 	if (!PyArg_ParseTuple(_args, "h",
-	                      &fontNum))
+	                      &value))
 		return NULL;
-	SetDAFont(fontNum);
+	SetDialogFont(value);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -776,29 +872,31 @@
 	{"ParamText", (PyCFunction)Dlg_ParamText, 1,
 	 "(Str255 param0, Str255 param1, Str255 param2, Str255 param3) -> None"},
 	{"ModalDialog", (PyCFunction)Dlg_ModalDialog, 1,
-	 "(PyObject* filterProc) -> (short itemHit)"},
+	 "(PyObject* modalFilter) -> (short itemHit)"},
 	{"IsDialogEvent", (PyCFunction)Dlg_IsDialogEvent, 1,
 	 "(EventRecord theEvent) -> (Boolean _rv)"},
 	{"DialogSelect", (PyCFunction)Dlg_DialogSelect, 1,
 	 "(EventRecord theEvent) -> (Boolean _rv, DialogPtr theDialog, short itemHit)"},
 	{"Alert", (PyCFunction)Dlg_Alert, 1,
-	 "(short alertID, PyObject* filterProc) -> (short _rv)"},
+	 "(short alertID, PyObject* modalFilter) -> (short _rv)"},
 	{"StopAlert", (PyCFunction)Dlg_StopAlert, 1,
-	 "(short alertID, PyObject* filterProc) -> (short _rv)"},
+	 "(short alertID, PyObject* modalFilter) -> (short _rv)"},
 	{"NoteAlert", (PyCFunction)Dlg_NoteAlert, 1,
-	 "(short alertID, PyObject* filterProc) -> (short _rv)"},
+	 "(short alertID, PyObject* modalFilter) -> (short _rv)"},
 	{"CautionAlert", (PyCFunction)Dlg_CautionAlert, 1,
-	 "(short alertID, PyObject* filterProc) -> (short _rv)"},
-	{"GetIText", (PyCFunction)Dlg_GetIText, 1,
+	 "(short alertID, PyObject* modalFilter) -> (short _rv)"},
+	{"GetDialogItemText", (PyCFunction)Dlg_GetDialogItemText, 1,
 	 "(Handle item) -> (Str255 text)"},
-	{"SetIText", (PyCFunction)Dlg_SetIText, 1,
+	{"SetDialogItemText", (PyCFunction)Dlg_SetDialogItemText, 1,
 	 "(Handle item, Str255 text) -> None"},
-	{"NewCDialog", (PyCFunction)Dlg_NewCDialog, 1,
+	{"NewColorDialog", (PyCFunction)Dlg_NewColorDialog, 1,
 	 "(Rect boundsRect, Str255 title, Boolean visible, short procID, WindowPtr behind, Boolean goAwayFlag, long refCon, Handle items) -> (DialogPtr _rv)"},
-	{"ResetAlrtStage", (PyCFunction)Dlg_ResetAlrtStage, 1,
+	{"GetAlertStage", (PyCFunction)Dlg_GetAlertStage, 1,
+	 "() -> (short _rv)"},
+	{"ResetAlertStage", (PyCFunction)Dlg_ResetAlertStage, 1,
 	 "() -> None"},
-	{"SetDAFont", (PyCFunction)Dlg_SetDAFont, 1,
-	 "(short fontNum) -> None"},
+	{"SetDialogFont", (PyCFunction)Dlg_SetDialogFont, 1,
+	 "(short value) -> None"},
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/dlg/dlggen.py b/Mac/Modules/dlg/dlggen.py
index bd65cd0..c6ae362 100644
--- a/Mac/Modules/dlg/dlggen.py
+++ b/Mac/Modules/dlg/dlggen.py
@@ -1,22 +1,22 @@
-# Generated from 'D:Development:THINK C:Mac #includes:Apple #includes:Dialogs.h'
+# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Dialogs.h'
 
-f = Function(DialogPtr, 'NewDialog',
+f = Function(DialogRef, 'NewDialog',
     (NullStorage, 'wStorage', InMode),
     (Rect_ptr, 'boundsRect', InMode),
     (ConstStr255Param, 'title', InMode),
     (Boolean, 'visible', InMode),
     (short, 'procID', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
     (Boolean, 'goAwayFlag', InMode),
     (long, 'refCon', InMode),
     (Handle, 'itmLstHndl', InMode),
 )
 functions.append(f)
 
-f = Function(DialogPtr, 'GetNewDialog',
+f = Function(DialogRef, 'GetNewDialog',
     (short, 'dialogID', InMode),
     (NullStorage, 'dStorage', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
 )
 functions.append(f)
 
@@ -29,7 +29,7 @@
 functions.append(f)
 
 f = Function(void, 'ModalDialog',
-    (ModalFilterProcPtr, 'filterProc', InMode),
+    (ModalFilterUPP, 'modalFilter', InMode),
     (short, 'itemHit', OutMode),
 )
 functions.append(f)
@@ -47,42 +47,42 @@
 functions.append(f)
 
 f = Method(void, 'DrawDialog',
-    (DialogPtr, 'theDialog', InMode),
+    (DialogRef, 'theDialog', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'UpdateDialog',
-    (DialogPtr, 'theDialog', InMode),
+    (DialogRef, 'theDialog', InMode),
     (RgnHandle, 'updateRgn', InMode),
 )
 methods.append(f)
 
 f = Function(short, 'Alert',
     (short, 'alertID', InMode),
-    (ModalFilterProcPtr, 'filterProc', InMode),
+    (ModalFilterUPP, 'modalFilter', InMode),
 )
 functions.append(f)
 
 f = Function(short, 'StopAlert',
     (short, 'alertID', InMode),
-    (ModalFilterProcPtr, 'filterProc', InMode),
+    (ModalFilterUPP, 'modalFilter', InMode),
 )
 functions.append(f)
 
 f = Function(short, 'NoteAlert',
     (short, 'alertID', InMode),
-    (ModalFilterProcPtr, 'filterProc', InMode),
+    (ModalFilterUPP, 'modalFilter', InMode),
 )
 functions.append(f)
 
 f = Function(short, 'CautionAlert',
     (short, 'alertID', InMode),
-    (ModalFilterProcPtr, 'filterProc', InMode),
+    (ModalFilterUPP, 'modalFilter', InMode),
 )
 functions.append(f)
 
-f = Method(void, 'GetDItem',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'GetDialogItem',
+    (DialogRef, 'theDialog', InMode),
     (short, 'itemNo', InMode),
     (short, 'itemType', OutMode),
     (Handle, 'item', OutMode),
@@ -90,8 +90,8 @@
 )
 methods.append(f)
 
-f = Method(void, 'SetDItem',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'SetDialogItem',
+    (DialogRef, 'theDialog', InMode),
     (short, 'itemNo', InMode),
     (short, 'itemType', InMode),
     (Handle, 'item', InMode),
@@ -99,101 +99,130 @@
 )
 methods.append(f)
 
-f = Method(void, 'HideDItem',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'HideDialogItem',
+    (DialogRef, 'theDialog', InMode),
     (short, 'itemNo', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'ShowDItem',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'ShowDialogItem',
+    (DialogRef, 'theDialog', InMode),
     (short, 'itemNo', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'SelIText',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'SelectDialogItemText',
+    (DialogRef, 'theDialog', InMode),
     (short, 'itemNo', InMode),
     (short, 'strtSel', InMode),
     (short, 'endSel', InMode),
 )
 methods.append(f)
 
-f = Function(void, 'GetIText',
+f = Function(void, 'GetDialogItemText',
     (Handle, 'item', InMode),
     (Str255, 'text', OutMode),
 )
 functions.append(f)
 
-f = Function(void, 'SetIText',
+f = Function(void, 'SetDialogItemText',
     (Handle, 'item', InMode),
     (ConstStr255Param, 'text', InMode),
 )
 functions.append(f)
 
-f = Method(short, 'FindDItem',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(short, 'FindDialogItem',
+    (DialogRef, 'theDialog', InMode),
     (Point, 'thePt', InMode),
 )
 methods.append(f)
 
-f = Function(DialogPtr, 'NewCDialog',
+f = Function(DialogRef, 'NewColorDialog',
     (NullStorage, 'dStorage', InMode),
     (Rect_ptr, 'boundsRect', InMode),
     (ConstStr255Param, 'title', InMode),
     (Boolean, 'visible', InMode),
     (short, 'procID', InMode),
-    (WindowPtr, 'behind', InMode),
+    (WindowRef, 'behind', InMode),
     (Boolean, 'goAwayFlag', InMode),
     (long, 'refCon', InMode),
     (Handle, 'items', InMode),
 )
 functions.append(f)
 
-f = Function(void, 'ResetAlrtStage',
+f = Function(short, 'GetAlertStage',
 )
 functions.append(f)
 
-f = Method(void, 'DlgCut',
-    (DialogPtr, 'theDialog', InMode),
+f = Function(void, 'ResetAlertStage',
+)
+functions.append(f)
+
+f = Method(void, 'DialogCut',
+    (DialogRef, 'theDialog', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'DlgPaste',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'DialogPaste',
+    (DialogRef, 'theDialog', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'DlgCopy',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'DialogCopy',
+    (DialogRef, 'theDialog', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'DlgDelete',
-    (DialogPtr, 'theDialog', InMode),
+f = Method(void, 'DialogDelete',
+    (DialogRef, 'theDialog', InMode),
 )
 methods.append(f)
 
-f = Function(void, 'SetDAFont',
-    (short, 'fontNum', InMode),
+f = Function(void, 'SetDialogFont',
+    (short, 'value', InMode),
 )
 functions.append(f)
 
 f = Method(void, 'AppendDITL',
-    (DialogPtr, 'theDialog', InMode),
+    (DialogRef, 'theDialog', InMode),
     (Handle, 'theHandle', InMode),
     (DITLMethod, 'method', InMode),
 )
 methods.append(f)
 
 f = Method(short, 'CountDITL',
-    (DialogPtr, 'theDialog', InMode),
+    (DialogRef, 'theDialog', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'ShortenDITL',
-    (DialogPtr, 'theDialog', InMode),
+    (DialogRef, 'theDialog', InMode),
     (short, 'numberItems', InMode),
 )
 methods.append(f)
 
+f = Method(Boolean, 'StdFilterProc',
+    (DialogRef, 'theDialog', InMode),
+    (EventRecord, 'event', OutMode),
+    (short, 'itemHit', OutMode),
+)
+methods.append(f)
+
+f = Method(OSErr, 'SetDialogDefaultItem',
+    (DialogRef, 'theDialog', InMode),
+    (short, 'newItem', InMode),
+)
+methods.append(f)
+
+f = Method(OSErr, 'SetDialogCancelItem',
+    (DialogRef, 'theDialog', InMode),
+    (short, 'newItem', InMode),
+)
+methods.append(f)
+
+f = Method(OSErr, 'SetDialogTracksCursor',
+    (DialogRef, 'theDialog', InMode),
+    (Boolean, 'tracks', InMode),
+)
+methods.append(f)
+
diff --git a/Mac/Modules/dlg/dlgscan.py b/Mac/Modules/dlg/dlgscan.py
index d0cf144..6738828 100644
--- a/Mac/Modules/dlg/dlgscan.py
+++ b/Mac/Modules/dlg/dlgscan.py
@@ -1,5 +1,8 @@
 # Scan an Apple header file, generating a Python file of generator calls.
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 from scantools import Scanner
 
 LONG = "Dialogs"
@@ -24,7 +27,7 @@
 		listname = "functions"
 		if arglist:
 			t, n, m = arglist[0]
-			if t == "DialogPtr" and m == "InMode":
+			if t in ("DialogPtr", "DialogRef") and m == "InMode":
 				classname = "Method"
 				listname = "methods"
 		return classname, listname
@@ -42,6 +45,7 @@
 			'FreeAlert',
 			'CouldDialog',
 			'FreeDialog',
+			'GetStdFilterProc',
 			]
 
 	def makeblacklisttypes(self):
@@ -66,6 +70,8 @@
 			
 			([("DialogPtr", "*", "OutMode")],
 			 [("ExistingDialogPtr", "*", "*")]),
+			([("DialogRef", "*", "OutMode")],
+			 [("ExistingDialogPtr", "*", "*")]),
 			]
 
 if __name__ == "__main__":
diff --git a/Mac/Modules/dlg/dlgsupport.py b/Mac/Modules/dlg/dlgsupport.py
index d3491fe..8761ea8 100644
--- a/Mac/Modules/dlg/dlgsupport.py
+++ b/Mac/Modules/dlg/dlgsupport.py
@@ -3,14 +3,19 @@
 # It execs the file dlggen.py which contain the function definitions
 # (dlggen.py was generated by dlgscan.py, scanning the <Dialogs.h> header file).
 
+import addpack
+addpack.addpack(':Tools:bgen:bgen')
+
 from macsupport import *
 
 # Create the type objects
 
 DialogPtr = OpaqueByValueType("DialogPtr", "DlgObj")
+DialogRef = DialogPtr
 
 ModalFilterProcPtr = InputOnlyType("PyObject*", "O")
 ModalFilterProcPtr.passInput = lambda name: "NewModalFilterProc(Dlg_PassFilterProc(%s))" % name
+ModalFilterUPP = ModalFilterProcPtr
 
 RgnHandle = FakeType("_self->ob_itself->visRgn") # XXX
 
