diff --git a/Mac/Modules/ae/aegen.py b/Mac/Modules/ae/aegen.py
index 49f891e..070f8a0 100644
--- a/Mac/Modules/ae/aegen.py
+++ b/Mac/Modules/ae/aegen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:AppleEvents.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:AppleEvents.h'
 
 f = AEFunction(OSErr, 'AECreateDesc',
     (DescType, 'typeCode', InMode),
diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c
index 6af76a5..ed37de0 100644
--- a/Mac/Modules/ctl/Ctlmodule.c
+++ b/Mac/Modules/ctl/Ctlmodule.c
@@ -86,6 +86,172 @@
 	PyMem_DEL(self);
 }
 
+static PyObject *CtlObj_DisposeControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	DisposeControl(_self->ob_itself);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_ShowControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	ShowControl(_self->ob_itself);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_HideControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	HideControl(_self->ob_itself);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_Draw1Control(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	Draw1Control(_self->ob_itself);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_HiliteControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	ControlPartCode hiliteState;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &hiliteState))
+		return NULL;
+	HiliteControl(_self->ob_itself,
+	              hiliteState);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_TrackControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	ControlPartCode _rv;
+	Point thePoint;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      PyMac_GetPoint, &thePoint))
+		return NULL;
+	_rv = TrackControl(_self->ob_itself,
+	                   thePoint,
+	                   (ControlActionUPP)0);
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *CtlObj_DragControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	Point startPt;
+	Rect limitRect;
+	Rect slopRect;
+	DragConstraint axis;
+	if (!PyArg_ParseTuple(_args, "O&O&O&h",
+	                      PyMac_GetPoint, &startPt,
+	                      PyMac_GetRect, &limitRect,
+	                      PyMac_GetRect, &slopRect,
+	                      &axis))
+		return NULL;
+	DragControl(_self->ob_itself,
+	            startPt,
+	            &limitRect,
+	            &slopRect,
+	            axis);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_TestControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	ControlPartCode _rv;
+	Point thePt;
+	if (!PyArg_ParseTuple(_args, "O&",
+	                      PyMac_GetPoint, &thePt))
+		return NULL;
+	_rv = TestControl(_self->ob_itself,
+	                  thePt);
+	_res = Py_BuildValue("h",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *CtlObj_MoveControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	SInt16 h;
+	SInt16 v;
+	if (!PyArg_ParseTuple(_args, "hh",
+	                      &h,
+	                      &v))
+		return NULL;
+	MoveControl(_self->ob_itself,
+	            h,
+	            v);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_SizeControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	SInt16 w;
+	SInt16 h;
+	if (!PyArg_ParseTuple(_args, "hh",
+	                      &w,
+	                      &h))
+		return NULL;
+	SizeControl(_self->ob_itself,
+	            w,
+	            h);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
 static PyObject *CtlObj_SetControlTitle(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
@@ -118,134 +284,12 @@
 	return _res;
 }
 
-static PyObject *CtlObj_DisposeControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	DisposeControl(_self->ob_itself);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_HideControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	HideControl(_self->ob_itself);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_ShowControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	ShowControl(_self->ob_itself);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_Draw1Control(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	Draw1Control(_self->ob_itself);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_HiliteControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short hiliteState;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &hiliteState))
-		return NULL;
-	HiliteControl(_self->ob_itself,
-	              hiliteState);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_MoveControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short h;
-	short v;
-	if (!PyArg_ParseTuple(_args, "hh",
-	                      &h,
-	                      &v))
-		return NULL;
-	MoveControl(_self->ob_itself,
-	            h,
-	            v);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_SizeControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short w;
-	short h;
-	if (!PyArg_ParseTuple(_args, "hh",
-	                      &w,
-	                      &h))
-		return NULL;
-	SizeControl(_self->ob_itself,
-	            w,
-	            h);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *CtlObj_SetControlValue(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short theValue;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &theValue))
-		return NULL;
-	SetControlValue(_self->ob_itself,
-	                theValue);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *CtlObj_GetControlValue(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short _rv;
+	SInt16 _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
 	_rv = GetControlValue(_self->ob_itself);
@@ -254,17 +298,17 @@
 	return _res;
 }
 
-static PyObject *CtlObj_SetControlMinimum(_self, _args)
+static PyObject *CtlObj_SetControlValue(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short minValue;
+	SInt16 newValue;
 	if (!PyArg_ParseTuple(_args, "h",
-	                      &minValue))
+	                      &newValue))
 		return NULL;
-	SetControlMinimum(_self->ob_itself,
-	                  minValue);
+	SetControlValue(_self->ob_itself,
+	                newValue);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -275,7 +319,7 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short _rv;
+	SInt16 _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
 	_rv = GetControlMinimum(_self->ob_itself);
@@ -284,17 +328,17 @@
 	return _res;
 }
 
-static PyObject *CtlObj_SetControlMaximum(_self, _args)
+static PyObject *CtlObj_SetControlMinimum(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short maxValue;
+	SInt16 newMinimum;
 	if (!PyArg_ParseTuple(_args, "h",
-	                      &maxValue))
+	                      &newMinimum))
 		return NULL;
-	SetControlMaximum(_self->ob_itself,
-	                  maxValue);
+	SetControlMinimum(_self->ob_itself,
+	                  newMinimum);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
@@ -305,7 +349,7 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short _rv;
+	SInt16 _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
 	_rv = GetControlMaximum(_self->ob_itself);
@@ -314,32 +358,32 @@
 	return _res;
 }
 
-static PyObject *CtlObj_SetControlReference(_self, _args)
+static PyObject *CtlObj_SetControlMaximum(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	long data;
-	if (!PyArg_ParseTuple(_args, "l",
-	                      &data))
+	SInt16 newMaximum;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &newMaximum))
 		return NULL;
-	SetControlReference(_self->ob_itself,
-	                    data);
+	SetControlMaximum(_self->ob_itself,
+	                  newMaximum);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_GetControlReference(_self, _args)
+static PyObject *CtlObj_GetControlVariant(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	long _rv;
+	SInt16 _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
-	_rv = GetControlReference(_self->ob_itself);
-	_res = Py_BuildValue("l",
+	_rv = GetControlVariant(_self->ob_itself);
+	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
@@ -358,125 +402,81 @@
 	return _res;
 }
 
-static PyObject *CtlObj_DragControl(_self, _args)
+static PyObject *CtlObj_SetControlReference(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	Point startPt;
-	Rect limitRect;
-	Rect slopRect;
-	short axis;
-	if (!PyArg_ParseTuple(_args, "O&O&O&h",
-	                      PyMac_GetPoint, &startPt,
-	                      PyMac_GetRect, &limitRect,
-	                      PyMac_GetRect, &slopRect,
-	                      &axis))
+	SInt32 data;
+	if (!PyArg_ParseTuple(_args, "l",
+	                      &data))
 		return NULL;
-	DragControl(_self->ob_itself,
-	            startPt,
-	            &limitRect,
-	            &slopRect,
-	            axis);
+	SetControlReference(_self->ob_itself,
+	                    data);
 	Py_INCREF(Py_None);
 	_res = Py_None;
 	return _res;
 }
 
-static PyObject *CtlObj_TestControl(_self, _args)
+static PyObject *CtlObj_GetControlReference(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short _rv;
-	Point thePt;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      PyMac_GetPoint, &thePt))
-		return NULL;
-	_rv = TestControl(_self->ob_itself,
-	                  thePt);
-	_res = Py_BuildValue("h",
-	                     _rv);
-	return _res;
-}
-
-static PyObject *CtlObj_GetControlVariant(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short _rv;
+	SInt32 _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;
-{
-	PyObject *_res = NULL;
-	short _rv;
-	Point thePoint;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      PyMac_GetPoint, &thePoint))
-		return NULL;
-	_rv = TrackControl(_self->ob_itself,
-	                   thePoint,
-	                   (ControlActionUPP)0);
-	_res = Py_BuildValue("h",
+	_rv = GetControlReference(_self->ob_itself);
+	_res = Py_BuildValue("l",
 	                     _rv);
 	return _res;
 }
 
 static PyMethodDef CtlObj_methods[] = {
-	{"SetControlTitle", (PyCFunction)CtlObj_SetControlTitle, 1,
-	 "(Str255 title) -> None"},
-	{"GetControlTitle", (PyCFunction)CtlObj_GetControlTitle, 1,
-	 "(Str255 title) -> None"},
 	{"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1,
 	 "() -> None"},
-	{"HideControl", (PyCFunction)CtlObj_HideControl, 1,
-	 "() -> None"},
 	{"ShowControl", (PyCFunction)CtlObj_ShowControl, 1,
 	 "() -> None"},
+	{"HideControl", (PyCFunction)CtlObj_HideControl, 1,
+	 "() -> None"},
 	{"Draw1Control", (PyCFunction)CtlObj_Draw1Control, 1,
 	 "() -> None"},
 	{"HiliteControl", (PyCFunction)CtlObj_HiliteControl, 1,
-	 "(short hiliteState) -> None"},
+	 "(ControlPartCode hiliteState) -> None"},
+	{"TrackControl", (PyCFunction)CtlObj_TrackControl, 1,
+	 "(Point thePoint) -> (ControlPartCode _rv)"},
+	{"DragControl", (PyCFunction)CtlObj_DragControl, 1,
+	 "(Point startPt, Rect limitRect, Rect slopRect, DragConstraint axis) -> None"},
+	{"TestControl", (PyCFunction)CtlObj_TestControl, 1,
+	 "(Point thePt) -> (ControlPartCode _rv)"},
 	{"MoveControl", (PyCFunction)CtlObj_MoveControl, 1,
-	 "(short h, short v) -> None"},
+	 "(SInt16 h, SInt16 v) -> None"},
 	{"SizeControl", (PyCFunction)CtlObj_SizeControl, 1,
-	 "(short w, short h) -> None"},
-	{"SetControlValue", (PyCFunction)CtlObj_SetControlValue, 1,
-	 "(short theValue) -> None"},
+	 "(SInt16 w, SInt16 h) -> None"},
+	{"SetControlTitle", (PyCFunction)CtlObj_SetControlTitle, 1,
+	 "(Str255 title) -> None"},
+	{"GetControlTitle", (PyCFunction)CtlObj_GetControlTitle, 1,
+	 "(Str255 title) -> None"},
 	{"GetControlValue", (PyCFunction)CtlObj_GetControlValue, 1,
-	 "() -> (short _rv)"},
-	{"SetControlMinimum", (PyCFunction)CtlObj_SetControlMinimum, 1,
-	 "(short minValue) -> None"},
+	 "() -> (SInt16 _rv)"},
+	{"SetControlValue", (PyCFunction)CtlObj_SetControlValue, 1,
+	 "(SInt16 newValue) -> None"},
 	{"GetControlMinimum", (PyCFunction)CtlObj_GetControlMinimum, 1,
-	 "() -> (short _rv)"},
-	{"SetControlMaximum", (PyCFunction)CtlObj_SetControlMaximum, 1,
-	 "(short maxValue) -> None"},
+	 "() -> (SInt16 _rv)"},
+	{"SetControlMinimum", (PyCFunction)CtlObj_SetControlMinimum, 1,
+	 "(SInt16 newMinimum) -> None"},
 	{"GetControlMaximum", (PyCFunction)CtlObj_GetControlMaximum, 1,
-	 "() -> (short _rv)"},
-	{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
-	 "(long data) -> None"},
-	{"GetControlReference", (PyCFunction)CtlObj_GetControlReference, 1,
-	 "() -> (long _rv)"},
+	 "() -> (SInt16 _rv)"},
+	{"SetControlMaximum", (PyCFunction)CtlObj_SetControlMaximum, 1,
+	 "(SInt16 newMaximum) -> None"},
+	{"GetControlVariant", (PyCFunction)CtlObj_GetControlVariant, 1,
+	 "() -> (SInt16 _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)"},
+	{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
+	 "(SInt32 data) -> None"},
+	{"GetControlReference", (PyCFunction)CtlObj_GetControlReference, 1,
+	 "() -> (SInt32 _rv)"},
 	{NULL, NULL, 0}
 };
 
@@ -517,11 +517,11 @@
 	Rect boundsRect;
 	Str255 title;
 	Boolean visible;
-	short value;
-	short min;
-	short max;
-	short procID;
-	long refCon;
+	SInt16 value;
+	SInt16 min;
+	SInt16 max;
+	SInt16 procID;
+	SInt32 refCon;
 	if (!PyArg_ParseTuple(_args, "O&O&O&bhhhhl",
 	                      WinObj_Convert, &theWindow,
 	                      PyMac_GetRect, &boundsRect,
@@ -553,7 +553,7 @@
 {
 	PyObject *_res = NULL;
 	ControlHandle _rv;
-	short controlID;
+	SInt16 controlID;
 	WindowPtr owner;
 	if (!PyArg_ParseTuple(_args, "hO&",
 	                      &controlID,
@@ -617,7 +617,7 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short _rv;
+	ControlPartCode _rv;
 	Point thePoint;
 	WindowPtr theWindow;
 	ControlHandle theControl;
@@ -636,9 +636,9 @@
 
 static PyMethodDef Ctl_methods[] = {
 	{"NewControl", (PyCFunction)Ctl_NewControl, 1,
-	 "(WindowPtr theWindow, Rect boundsRect, Str255 title, Boolean visible, short value, short min, short max, short procID, long refCon) -> (ControlHandle _rv)"},
+	 "(WindowPtr theWindow, Rect boundsRect, Str255 title, Boolean visible, SInt16 value, SInt16 min, SInt16 max, SInt16 procID, SInt32 refCon) -> (ControlHandle _rv)"},
 	{"GetNewControl", (PyCFunction)Ctl_GetNewControl, 1,
-	 "(short controlID, WindowPtr owner) -> (ControlHandle _rv)"},
+	 "(SInt16 controlID, WindowPtr owner) -> (ControlHandle _rv)"},
 	{"KillControls", (PyCFunction)Ctl_KillControls, 1,
 	 "(WindowPtr theWindow) -> None"},
 	{"DrawControls", (PyCFunction)Ctl_DrawControls, 1,
@@ -646,7 +646,7 @@
 	{"UpdateControls", (PyCFunction)Ctl_UpdateControls, 1,
 	 "(WindowPtr theWindow) -> None"},
 	{"FindControl", (PyCFunction)Ctl_FindControl, 1,
-	 "(Point thePoint, WindowPtr theWindow) -> (short _rv, ControlHandle theControl)"},
+	 "(Point thePoint, WindowPtr theWindow) -> (ControlPartCode _rv, ControlHandle theControl)"},
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/ctl/ctlgen.py b/Mac/Modules/ctl/ctlgen.py
index 85fc6c7..683e26b 100644
--- a/Mac/Modules/ctl/ctlgen.py
+++ b/Mac/Modules/ctl/ctlgen.py
@@ -1,32 +1,20 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Controls.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Controls.h'
 
 f = Function(ControlRef, 'NewControl',
     (WindowRef, 'theWindow', InMode),
     (Rect_ptr, 'boundsRect', InMode),
     (ConstStr255Param, 'title', InMode),
     (Boolean, 'visible', InMode),
-    (short, 'value', InMode),
-    (short, 'min', InMode),
-    (short, 'max', InMode),
-    (short, 'procID', InMode),
-    (long, 'refCon', InMode),
+    (SInt16, 'value', InMode),
+    (SInt16, 'min', InMode),
+    (SInt16, 'max', InMode),
+    (SInt16, 'procID', InMode),
+    (SInt32, 'refCon', InMode),
 )
 functions.append(f)
 
-f = Method(void, 'SetControlTitle',
-    (ControlRef, 'theControl', InMode),
-    (ConstStr255Param, 'title', InMode),
-)
-methods.append(f)
-
-f = Method(void, 'GetControlTitle',
-    (ControlRef, 'theControl', InMode),
-    (Str255, 'title', InMode),
-)
-methods.append(f)
-
 f = Function(ControlRef, 'GetNewControl',
-    (short, 'controlID', InMode),
+    (SInt16, 'controlID', InMode),
     (WindowRef, 'owner', InMode),
 )
 functions.append(f)
@@ -41,12 +29,12 @@
 )
 functions.append(f)
 
-f = Method(void, 'HideControl',
+f = Method(void, 'ShowControl',
     (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
-f = Method(void, 'ShowControl',
+f = Method(void, 'HideControl',
     (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
@@ -61,72 +49,107 @@
 )
 methods.append(f)
 
-f = Method(void, 'HiliteControl',
-    (ControlRef, 'theControl', InMode),
-    (short, 'hiliteState', InMode),
-)
-methods.append(f)
-
 f = Function(void, 'UpdateControls',
     (WindowRef, 'theWindow', InMode),
     (RgnHandle, 'updateRgn', InMode),
 )
 functions.append(f)
 
+f = Method(void, 'HiliteControl',
+    (ControlRef, 'theControl', InMode),
+    (ControlPartCode, 'hiliteState', InMode),
+)
+methods.append(f)
+
+f = Method(ControlPartCode, 'TrackControl',
+    (ControlRef, 'theControl', InMode),
+    (Point, 'thePoint', InMode),
+    (FakeType('(ControlActionUPP)0'), 'actionProc', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'DragControl',
+    (ControlRef, 'theControl', InMode),
+    (Point, 'startPt', InMode),
+    (Rect_ptr, 'limitRect', InMode),
+    (Rect_ptr, 'slopRect', InMode),
+    (DragConstraint, 'axis', InMode),
+)
+methods.append(f)
+
+f = Method(ControlPartCode, 'TestControl',
+    (ControlRef, 'theControl', InMode),
+    (Point, 'thePt', InMode),
+)
+methods.append(f)
+
+f = Function(ControlPartCode, 'FindControl',
+    (Point, 'thePoint', InMode),
+    (WindowRef, 'theWindow', InMode),
+    (ExistingControlHandle, 'theControl', OutMode),
+)
+functions.append(f)
+
 f = Method(void, 'MoveControl',
     (ControlRef, 'theControl', InMode),
-    (short, 'h', InMode),
-    (short, 'v', InMode),
+    (SInt16, 'h', InMode),
+    (SInt16, 'v', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SizeControl',
     (ControlRef, 'theControl', InMode),
-    (short, 'w', InMode),
-    (short, 'h', InMode),
+    (SInt16, 'w', InMode),
+    (SInt16, 'h', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'SetControlTitle',
+    (ControlRef, 'theControl', InMode),
+    (ConstStr255Param, 'title', InMode),
+)
+methods.append(f)
+
+f = Method(void, 'GetControlTitle',
+    (ControlRef, 'theControl', InMode),
+    (Str255, 'title', InMode),
+)
+methods.append(f)
+
+f = Method(SInt16, 'GetControlValue',
+    (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetControlValue',
     (ControlRef, 'theControl', InMode),
-    (short, 'theValue', InMode),
+    (SInt16, 'newValue', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'GetControlValue',
+f = Method(SInt16, 'GetControlMinimum',
     (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetControlMinimum',
     (ControlRef, 'theControl', InMode),
-    (short, 'minValue', InMode),
+    (SInt16, 'newMinimum', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'GetControlMinimum',
+f = Method(SInt16, 'GetControlMaximum',
     (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
 
 f = Method(void, 'SetControlMaximum',
     (ControlRef, 'theControl', InMode),
-    (short, 'maxValue', InMode),
+    (SInt16, 'newMaximum', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'GetControlMaximum',
-    (ControlRef, 'theControl', InMode),
-)
-methods.append(f)
-
-f = Method(void, 'SetControlReference',
-    (ControlRef, 'theControl', InMode),
-    (long, 'data', InMode),
-)
-methods.append(f)
-
-f = Method(long, 'GetControlReference',
+f = Method(SInt16, 'GetControlVariant',
     (ControlRef, 'theControl', InMode),
 )
 methods.append(f)
@@ -137,37 +160,14 @@
 )
 methods.append(f)
 
-f = Method(void, 'DragControl',
+f = Method(void, 'SetControlReference',
     (ControlRef, 'theControl', InMode),
-    (Point, 'startPt', InMode),
-    (Rect_ptr, 'limitRect', InMode),
-    (Rect_ptr, 'slopRect', InMode),
-    (short, 'axis', InMode),
+    (SInt32, 'data', InMode),
 )
 methods.append(f)
 
-f = Method(short, 'TestControl',
+f = Method(SInt32, 'GetControlReference',
     (ControlRef, 'theControl', InMode),
-    (Point, 'thePt', InMode),
-)
-methods.append(f)
-
-f = Function(short, 'FindControl',
-    (Point, 'thePoint', InMode),
-    (WindowRef, 'theWindow', InMode),
-    (ExistingControlHandle, 'theControl', OutMode),
-)
-functions.append(f)
-
-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/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py
index 9846631..245a725 100644
--- a/Mac/Modules/ctl/ctlsupport.py
+++ b/Mac/Modules/ctl/ctlsupport.py
@@ -29,6 +29,8 @@
 ExistingControlHandle = OpaqueByValueType(OBJECTTYPE, "CtlObj_WhichControl", "BUG")
 
 RgnHandle = FakeType("theWindow->visRgn") # XXX
+ControlPartCode = Type("ControlPartCode", "h")
+DragConstraint = Type("DragConstraint", "h")
 
 includestuff = includestuff + """
 #include <%s>""" % MACHEADERFILE + """
diff --git a/Mac/Modules/dlg/dlggen.py b/Mac/Modules/dlg/dlggen.py
index c6ae362..80650fd 100644
--- a/Mac/Modules/dlg/dlggen.py
+++ b/Mac/Modules/dlg/dlggen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Dialogs.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Dialogs.h'
 
 f = Function(DialogRef, 'NewDialog',
     (NullStorage, 'wStorage', InMode),
diff --git a/Mac/Modules/evt/Evtmodule.c b/Mac/Modules/evt/Evtmodule.c
index 7169b59..7732d09 100644
--- a/Mac/Modules/evt/Evtmodule.c
+++ b/Mac/Modules/evt/Evtmodule.c
@@ -39,26 +39,12 @@
 
 static PyObject *Evt_Error;
 
-static PyObject *Evt_GetDblTime(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	long _rv;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	_rv = GetDblTime();
-	_res = Py_BuildValue("l",
-	                     _rv);
-	return _res;
-}
-
 static PyObject *Evt_GetCaretTime(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	long _rv;
+	UInt32 _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
 	_rv = GetCaretTime();
@@ -72,7 +58,7 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short value;
+	MacOSEventMask value;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &value))
 		return NULL;
@@ -82,13 +68,27 @@
 	return _res;
 }
 
+static PyObject *Evt_GetDblTime(_self, _args)
+	PyObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	UInt32 _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = GetDblTime();
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
 static PyObject *Evt_GetNextEvent(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
 	Boolean _rv;
-	short eventMask;
+	MacOSEventMask eventMask;
 	EventRecord theEvent;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &eventMask))
@@ -107,9 +107,9 @@
 {
 	PyObject *_res = NULL;
 	Boolean _rv;
-	short eventMask;
+	MacOSEventMask eventMask;
 	EventRecord theEvent;
-	unsigned long sleep;
+	UInt32 sleep;
 	if (!PyArg_ParseTuple(_args, "hl",
 	                      &eventMask,
 	                      &sleep))
@@ -130,7 +130,7 @@
 {
 	PyObject *_res = NULL;
 	Boolean _rv;
-	short eventMask;
+	MacOSEventMask eventMask;
 	EventRecord theEvent;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &eventMask))
@@ -219,7 +219,7 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	unsigned long _rv;
+	UInt32 _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
 	_rv = TickCount();
@@ -234,8 +234,8 @@
 {
 	PyObject *_res = NULL;
 	OSErr _err;
-	short eventNum;
-	long eventMsg;
+	MacOSEventKind eventNum;
+	UInt32 eventMsg;
 	if (!PyArg_ParseTuple(_args, "hl",
 	                      &eventNum,
 	                      &eventMsg))
@@ -254,7 +254,7 @@
 {
 	PyObject *_res = NULL;
 	Boolean _rv;
-	short mask;
+	MacOSEventMask mask;
 	EventRecord theEvent;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &mask))
@@ -273,7 +273,7 @@
 {
 	PyObject *_res = NULL;
 	Boolean _rv;
-	short mask;
+	MacOSEventMask mask;
 	EventRecord theEvent;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &mask))
@@ -291,8 +291,8 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	short whichMask;
-	short stopMask;
+	MacOSEventMask whichMask;
+	MacOSEventMask stopMask;
 	if (!PyArg_ParseTuple(_args, "hh",
 	                      &whichMask,
 	                      &stopMask))
@@ -352,18 +352,18 @@
 }
 
 static PyMethodDef Evt_methods[] = {
-	{"GetDblTime", (PyCFunction)Evt_GetDblTime, 1,
-	 "() -> (long _rv)"},
 	{"GetCaretTime", (PyCFunction)Evt_GetCaretTime, 1,
-	 "() -> (long _rv)"},
+	 "() -> (UInt32 _rv)"},
 	{"SetEventMask", (PyCFunction)Evt_SetEventMask, 1,
-	 "(short value) -> None"},
+	 "(MacOSEventMask value) -> None"},
+	{"GetDblTime", (PyCFunction)Evt_GetDblTime, 1,
+	 "() -> (UInt32 _rv)"},
 	{"GetNextEvent", (PyCFunction)Evt_GetNextEvent, 1,
-	 "(short eventMask) -> (Boolean _rv, EventRecord theEvent)"},
+	 "(MacOSEventMask eventMask) -> (Boolean _rv, EventRecord theEvent)"},
 	{"WaitNextEvent", (PyCFunction)Evt_WaitNextEvent, 1,
-	 "(short eventMask, unsigned long sleep) -> (Boolean _rv, EventRecord theEvent)"},
+	 "(MacOSEventMask eventMask, UInt32 sleep) -> (Boolean _rv, EventRecord theEvent)"},
 	{"EventAvail", (PyCFunction)Evt_EventAvail, 1,
-	 "(short eventMask) -> (Boolean _rv, EventRecord theEvent)"},
+	 "(MacOSEventMask eventMask) -> (Boolean _rv, EventRecord theEvent)"},
 	{"GetMouse", (PyCFunction)Evt_GetMouse, 1,
 	 "() -> (Point mouseLoc)"},
 	{"Button", (PyCFunction)Evt_Button, 1,
@@ -375,15 +375,15 @@
 	{"GetKeys", (PyCFunction)Evt_GetKeys, 1,
 	 "() -> (KeyMap theKeys)"},
 	{"TickCount", (PyCFunction)Evt_TickCount, 1,
-	 "() -> (unsigned long _rv)"},
+	 "() -> (UInt32 _rv)"},
 	{"PostEvent", (PyCFunction)Evt_PostEvent, 1,
-	 "(short eventNum, long eventMsg) -> None"},
+	 "(MacOSEventKind eventNum, UInt32 eventMsg) -> None"},
 	{"OSEventAvail", (PyCFunction)Evt_OSEventAvail, 1,
-	 "(short mask) -> (Boolean _rv, EventRecord theEvent)"},
+	 "(MacOSEventMask mask) -> (Boolean _rv, EventRecord theEvent)"},
 	{"GetOSEvent", (PyCFunction)Evt_GetOSEvent, 1,
-	 "(short mask) -> (Boolean _rv, EventRecord theEvent)"},
+	 "(MacOSEventMask mask) -> (Boolean _rv, EventRecord theEvent)"},
 	{"FlushEvents", (PyCFunction)Evt_FlushEvents, 1,
-	 "(short whichMask, short stopMask) -> None"},
+	 "(MacOSEventMask whichMask, MacOSEventMask stopMask) -> None"},
 	{"SystemClick", (PyCFunction)Evt_SystemClick, 1,
 	 "(EventRecord theEvent, WindowPtr theWindow) -> None"},
 	{"SystemTask", (PyCFunction)Evt_SystemTask, 1,
diff --git a/Mac/Modules/evt/evtgen.py b/Mac/Modules/evt/evtgen.py
index deac64e..1ca2962 100644
--- a/Mac/Modules/evt/evtgen.py
+++ b/Mac/Modules/evt/evtgen.py
@@ -1,34 +1,34 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Events.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Events.h'
 
-f = Function(long, 'GetDblTime',
-)
-functions.append(f)
-
-f = Function(long, 'GetCaretTime',
+f = Function(UInt32, 'GetCaretTime',
 )
 functions.append(f)
 
 f = Function(void, 'SetEventMask',
-    (short, 'value', InMode),
+    (MacOSEventMask, 'value', InMode),
+)
+functions.append(f)
+
+f = Function(UInt32, 'GetDblTime',
 )
 functions.append(f)
 
 f = Function(Boolean, 'GetNextEvent',
-    (short, 'eventMask', InMode),
+    (MacOSEventMask, 'eventMask', InMode),
     (EventRecord, 'theEvent', OutMode),
 )
 functions.append(f)
 
 f = Function(Boolean, 'WaitNextEvent',
-    (short, 'eventMask', InMode),
+    (MacOSEventMask, 'eventMask', InMode),
     (EventRecord, 'theEvent', OutMode),
-    (unsigned_long, 'sleep', InMode),
+    (UInt32, 'sleep', InMode),
     (RgnHandle, 'mouseRgn', InMode),
 )
 functions.append(f)
 
 f = Function(Boolean, 'EventAvail',
-    (short, 'eventMask', InMode),
+    (MacOSEventMask, 'eventMask', InMode),
     (EventRecord, 'theEvent', OutMode),
 )
 functions.append(f)
@@ -55,31 +55,31 @@
 )
 functions.append(f)
 
-f = Function(unsigned_long, 'TickCount',
+f = Function(UInt32, 'TickCount',
 )
 functions.append(f)
 
 f = Function(OSErr, 'PostEvent',
-    (short, 'eventNum', InMode),
-    (long, 'eventMsg', InMode),
+    (MacOSEventKind, 'eventNum', InMode),
+    (UInt32, 'eventMsg', InMode),
 )
 functions.append(f)
 
 f = Function(Boolean, 'OSEventAvail',
-    (short, 'mask', InMode),
+    (MacOSEventMask, 'mask', InMode),
     (EventRecord, 'theEvent', OutMode),
 )
 functions.append(f)
 
 f = Function(Boolean, 'GetOSEvent',
-    (short, 'mask', InMode),
+    (MacOSEventMask, 'mask', InMode),
     (EventRecord, 'theEvent', OutMode),
 )
 functions.append(f)
 
 f = Function(void, 'FlushEvents',
-    (short, 'whichMask', InMode),
-    (short, 'stopMask', InMode),
+    (MacOSEventMask, 'whichMask', InMode),
+    (MacOSEventMask, 'stopMask', InMode),
 )
 functions.append(f)
 
diff --git a/Mac/Modules/evt/evtscan.py b/Mac/Modules/evt/evtscan.py
index 70a9df9..dc3b6ce 100644
--- a/Mac/Modules/evt/evtscan.py
+++ b/Mac/Modules/evt/evtscan.py
@@ -34,7 +34,8 @@
 
 	def makeblacklistnames(self):
 		return [
-			"KeyTranslate"
+			"KeyTranslate",
+			"GetEventMask",		# I cannot seem to find this routine...
 			]
 
 	def makeblacklisttypes(self):
diff --git a/Mac/Modules/evt/evtsupport.py b/Mac/Modules/evt/evtsupport.py
index 0a6950b..39ddaa9 100644
--- a/Mac/Modules/evt/evtsupport.py
+++ b/Mac/Modules/evt/evtsupport.py
@@ -27,6 +27,8 @@
 RgnHandle = FakeType("(RgnHandle)0") # XXX
 
 KeyMap = ArrayOutputBufferType("KeyMap")
+MacOSEventKind = Type("MacOSEventKind", "h")
+MacOSEventMask = Type("MacOSEventMask", "h")
 
 includestuff = includestuff + """
 #include <%s>""" % MACHEADERFILE + """
diff --git a/Mac/Modules/menu/Menumodule.c b/Mac/Modules/menu/Menumodule.c
index bb1cb79..3712691 100644
--- a/Mac/Modules/menu/Menumodule.c
+++ b/Mac/Modules/menu/Menumodule.c
@@ -382,7 +382,7 @@
 {
 	PyObject *_res = NULL;
 	short item;
-	unsigned char chStyle;
+	Style chStyle;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &item))
 		return NULL;
@@ -558,7 +558,7 @@
 	{"SetItemStyle", (PyCFunction)MenuObj_SetItemStyle, 1,
 	 "(short item, short chStyle) -> None"},
 	{"GetItemStyle", (PyCFunction)MenuObj_GetItemStyle, 1,
-	 "(short item) -> (unsigned char chStyle)"},
+	 "(short item) -> (Style chStyle)"},
 	{"CalcMenuSize", (PyCFunction)MenuObj_CalcMenuSize, 1,
 	 "() -> None"},
 	{"CountMItems", (PyCFunction)MenuObj_CountMItems, 1,
diff --git a/Mac/Modules/menu/menugen.py b/Mac/Modules/menu/menugen.py
index c3f9636..2445d1e 100644
--- a/Mac/Modules/menu/menugen.py
+++ b/Mac/Modules/menu/menugen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Menus.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Menus.h'
 
 f = Function(short, 'GetMBarHeight',
 )
@@ -174,7 +174,7 @@
 f = Method(void, 'GetItemStyle',
     (MenuRef, 'theMenu', InMode),
     (short, 'item', InMode),
-    (unsigned_char, 'chStyle', OutMode),
+    (Style, 'chStyle', OutMode),
 )
 methods.append(f)
 
diff --git a/Mac/Modules/qd/qdgen.py b/Mac/Modules/qd/qdgen.py
index 612b9e7..cc12de4 100644
--- a/Mac/Modules/qd/qdgen.py
+++ b/Mac/Modules/qd/qdgen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:QuickDraw.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:QuickDraw.h'
 
 f = Function(void, 'OpenPort',
     (GrafPtr, 'port', InMode),
@@ -713,7 +713,7 @@
 )
 functions.append(f)
 
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:QuickDrawText.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:QuickDrawText.h'
 
 f = Function(void, 'TextFont',
     (short, 'font', InMode),
diff --git a/Mac/Modules/qd/qdscan.py b/Mac/Modules/qd/qdscan.py
index 48766f2..0e03d77 100644
--- a/Mac/Modules/qd/qdscan.py
+++ b/Mac/Modules/qd/qdscan.py
@@ -78,6 +78,7 @@
 			'ColorSearchProcPtr',
 			'ColorSearchUPP',
 			'ConstPatternParam',
+			'Pattern_ptr',
 			'Cursor_ptr',
 			'DeviceLoopDrawingProcPtr',
 			'DeviceLoopFlags',
diff --git a/Mac/Modules/res/Resmodule.c b/Mac/Modules/res/Resmodule.c
index 024d4d2..3c5b23d 100644
--- a/Mac/Modules/res/Resmodule.c
+++ b/Mac/Modules/res/Resmodule.c
@@ -1183,25 +1183,6 @@
 	return _res;
 }
 
-static PyObject *Res_TempInsertROMMap(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	Boolean tempResLoad;
-	if (!PyArg_ParseTuple(_args, "b",
-	                      &tempResLoad))
-		return NULL;
-	TempInsertROMMap(tempResLoad);
-	{
-		OSErr _err = ResError();
-		if (_err != noErr) return PyMac_Error(_err);
-	}
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Res_Resource(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1293,8 +1274,6 @@
 	 "(FSSpec spec, SignedByte permission) -> (short _rv)"},
 	{"FSpCreateResFile", (PyCFunction)Res_FSpCreateResFile, 1,
 	 "(FSSpec spec, OSType creator, OSType fileType, ScriptCode scriptTag) -> None"},
-	{"TempInsertROMMap", (PyCFunction)Res_TempInsertROMMap, 1,
-	 "(Boolean tempResLoad) -> None"},
 	{"Resource", (PyCFunction)Res_Resource, 1,
 	 "Convert a string to a resource object.\n\nThe created resource object is actually just a handle.\nApply AddResource() to write it to a resource file.\n"},
 	{NULL, NULL, 0}
diff --git a/Mac/Modules/res/resgen.py b/Mac/Modules/res/resgen.py
index b5e15de..28b9015 100644
--- a/Mac/Modules/res/resgen.py
+++ b/Mac/Modules/res/resgen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Resources.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Resources.h'
 
 f = ResFunction(short, 'InitResources',
 )
@@ -275,8 +275,3 @@
 )
 resmethods.append(f)
 
-f = ResFunction(void, 'TempInsertROMMap',
-    (Boolean, 'tempResLoad', InMode),
-)
-functions.append(f)
-
diff --git a/Mac/Modules/res/resscan.py b/Mac/Modules/res/resscan.py
index ba860b4..9420a03 100644
--- a/Mac/Modules/res/resscan.py
+++ b/Mac/Modules/res/resscan.py
@@ -40,6 +40,7 @@
 		return [
 			"ReadPartialResource",
 			"WritePartialResource",
+			"TempInsertROMMap",
 ##			"RmveResource",		# RemoveResource
 ##			"SizeResource",		# GetResourceSizeOnDisk
 ##			"MaxSizeRsrc",		# GetMaxResourceSize
diff --git a/Mac/Modules/snd/Sndmodule.c b/Mac/Modules/snd/Sndmodule.c
index 62e9d85..fbc8ff2 100644
--- a/Mac/Modules/snd/Sndmodule.c
+++ b/Mac/Modules/snd/Sndmodule.c
@@ -496,15 +496,14 @@
 	char *buffer__out__;
 	long buffer__len__;
 	int buffer__in_len__;
-	char *state__in__;
-	char state__out__[128];
-	int state__len__;
+	StateBlock *state__in__;
+	StateBlock state__out__;
 	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
 	                      &buffer__in__, &buffer__in_len__,
-	                      &state__in__, &state__in_len__,
+	                      (char **)&state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
@@ -514,19 +513,18 @@
 		goto buffer__error__;
 	}
 	buffer__len__ = buffer__in_len__;
-	if (state__in_len__ != 128)
+	if (state__in_len__ != sizeof(StateBlock))
 	{
-		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
+		PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)");
 		goto state__error__;
 	}
-	state__len__ = state__in_len__;
 	Comp3to1(buffer__in__, buffer__out__, (long)buffer__len__,
-	         state__in__, state__out__,
+	         state__in__, &state__out__,
 	         numChannels,
 	         whichChannel);
 	_res = Py_BuildValue("s#s#",
 	                     buffer__out__, (int)buffer__len__,
-	                     state__out__, (int)128);
+	                     (char *)&state__out__, (int)sizeof(StateBlock));
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -542,15 +540,14 @@
 	char *buffer__out__;
 	long buffer__len__;
 	int buffer__in_len__;
-	char *state__in__;
-	char state__out__[128];
-	int state__len__;
+	StateBlock *state__in__;
+	StateBlock state__out__;
 	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
 	                      &buffer__in__, &buffer__in_len__,
-	                      &state__in__, &state__in_len__,
+	                      (char **)&state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
@@ -560,19 +557,18 @@
 		goto buffer__error__;
 	}
 	buffer__len__ = buffer__in_len__;
-	if (state__in_len__ != 128)
+	if (state__in_len__ != sizeof(StateBlock))
 	{
-		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
+		PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)");
 		goto state__error__;
 	}
-	state__len__ = state__in_len__;
 	Exp1to3(buffer__in__, buffer__out__, (long)buffer__len__,
-	        state__in__, state__out__,
+	        state__in__, &state__out__,
 	        numChannels,
 	        whichChannel);
 	_res = Py_BuildValue("s#s#",
 	                     buffer__out__, (int)buffer__len__,
-	                     state__out__, (int)128);
+	                     (char *)&state__out__, (int)sizeof(StateBlock));
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -588,15 +584,14 @@
 	char *buffer__out__;
 	long buffer__len__;
 	int buffer__in_len__;
-	char *state__in__;
-	char state__out__[128];
-	int state__len__;
+	StateBlock *state__in__;
+	StateBlock state__out__;
 	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
 	                      &buffer__in__, &buffer__in_len__,
-	                      &state__in__, &state__in_len__,
+	                      (char **)&state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
@@ -606,19 +601,18 @@
 		goto buffer__error__;
 	}
 	buffer__len__ = buffer__in_len__;
-	if (state__in_len__ != 128)
+	if (state__in_len__ != sizeof(StateBlock))
 	{
-		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
+		PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)");
 		goto state__error__;
 	}
-	state__len__ = state__in_len__;
 	Comp6to1(buffer__in__, buffer__out__, (long)buffer__len__,
-	         state__in__, state__out__,
+	         state__in__, &state__out__,
 	         numChannels,
 	         whichChannel);
 	_res = Py_BuildValue("s#s#",
 	                     buffer__out__, (int)buffer__len__,
-	                     state__out__, (int)128);
+	                     (char *)&state__out__, (int)sizeof(StateBlock));
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -634,15 +628,14 @@
 	char *buffer__out__;
 	long buffer__len__;
 	int buffer__in_len__;
-	char *state__in__;
-	char state__out__[128];
-	int state__len__;
+	StateBlock *state__in__;
+	StateBlock state__out__;
 	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
 	                      &buffer__in__, &buffer__in_len__,
-	                      &state__in__, &state__in_len__,
+	                      (char **)&state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
@@ -652,19 +645,18 @@
 		goto buffer__error__;
 	}
 	buffer__len__ = buffer__in_len__;
-	if (state__in_len__ != 128)
+	if (state__in_len__ != sizeof(StateBlock))
 	{
-		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
+		PyErr_SetString(PyExc_TypeError, "buffer length should be sizeof(StateBlock)");
 		goto state__error__;
 	}
-	state__len__ = state__in_len__;
 	Exp1to6(buffer__in__, buffer__out__, (long)buffer__len__,
-	        state__in__, state__out__,
+	        state__in__, &state__out__,
 	        numChannels,
 	        whichChannel);
 	_res = Py_BuildValue("s#s#",
 	                     buffer__out__, (int)buffer__len__,
-	                     state__out__, (int)128);
+	                     (char *)&state__out__, (int)sizeof(StateBlock));
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -776,13 +768,13 @@
 	{"MACEVersion", (PyCFunction)Snd_MACEVersion, 1,
 	 "() -> (NumVersion _rv)"},
 	{"Comp3to1", (PyCFunction)Snd_Comp3to1, 1,
-	 "(Buffer buffer, Buffer state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, Buffer state)"},
+	 "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"},
 	{"Exp1to3", (PyCFunction)Snd_Exp1to3, 1,
-	 "(Buffer buffer, Buffer state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, Buffer state)"},
+	 "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"},
 	{"Comp6to1", (PyCFunction)Snd_Comp6to1, 1,
-	 "(Buffer buffer, Buffer state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, Buffer state)"},
+	 "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"},
 	{"Exp1to6", (PyCFunction)Snd_Exp1to6, 1,
-	 "(Buffer buffer, Buffer state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, Buffer state)"},
+	 "(Buffer buffer, StateBlock state, unsigned long numChannels, unsigned long whichChannel) -> (Buffer buffer, StateBlock state)"},
 	{"GetSysBeepVolume", (PyCFunction)Snd_GetSysBeepVolume, 1,
 	 "() -> (long level)"},
 	{"SetSysBeepVolume", (PyCFunction)Snd_SetSysBeepVolume, 1,
diff --git a/Mac/Modules/snd/sndgen.py b/Mac/Modules/snd/sndgen.py
index a980338..827b263 100644
--- a/Mac/Modules/snd/sndgen.py
+++ b/Mac/Modules/snd/sndgen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Sound.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Sound.h'
 
 f = SndFunction(void, 'SetSoundVol',
     (short, 'level', InMode),
@@ -100,7 +100,7 @@
 
 f = SndFunction(void, 'Comp3to1',
     (InOutBuffer, 'buffer', InOutMode),
-    (InOutBuf128, 'state', InOutMode),
+    (StateBlock, 'state', InOutMode),
     (unsigned_long, 'numChannels', InMode),
     (unsigned_long, 'whichChannel', InMode),
 )
@@ -108,7 +108,7 @@
 
 f = SndFunction(void, 'Exp1to3',
     (InOutBuffer, 'buffer', InOutMode),
-    (InOutBuf128, 'state', InOutMode),
+    (StateBlock, 'state', InOutMode),
     (unsigned_long, 'numChannels', InMode),
     (unsigned_long, 'whichChannel', InMode),
 )
@@ -116,7 +116,7 @@
 
 f = SndFunction(void, 'Comp6to1',
     (InOutBuffer, 'buffer', InOutMode),
-    (InOutBuf128, 'state', InOutMode),
+    (StateBlock, 'state', InOutMode),
     (unsigned_long, 'numChannels', InMode),
     (unsigned_long, 'whichChannel', InMode),
 )
@@ -124,7 +124,7 @@
 
 f = SndFunction(void, 'Exp1to6',
     (InOutBuffer, 'buffer', InOutMode),
-    (InOutBuf128, 'state', InOutMode),
+    (StateBlock, 'state', InOutMode),
     (unsigned_long, 'numChannels', InMode),
     (unsigned_long, 'whichChannel', InMode),
 )
diff --git a/Mac/Modules/snd/sndscan.py b/Mac/Modules/snd/sndscan.py
index 8201b2c..ae52593 100644
--- a/Mac/Modules/snd/sndscan.py
+++ b/Mac/Modules/snd/sndscan.py
@@ -43,6 +43,9 @@
 			'GetSoundPreference',
 			'SetSoundPreference',
 			'GetCompressionInfo',
+			# And 3.1 calls, ditto...
+			'SndGetInfo',
+			'SndSetInfo',
 
 			]
 
@@ -89,8 +92,11 @@
 			 [("InOutBuffer", "buffer", "InOutMode")]),
 			
 			# Ditto
-			([("void_ptr", "inState", "InMode"), ("void", "outState", "OutMode")],
-			 [("InOutBuf128", "state", "InOutMode")]),
+##			([("void_ptr", "inState", "InMode"), ("void", "outState", "OutMode")],
+##			 [("InOutBuf128", "state", "InOutMode")]),
+			([("StateBlockPtr", "inState", "InMode"), ("StateBlockPtr", "outState", "InMode")],
+			 [("StateBlock", "state", "InOutMode")]),
+
 			]
 
 if __name__ == "__main__":
diff --git a/Mac/Modules/snd/sndsupport.py b/Mac/Modules/snd/sndsupport.py
index af1908a..97a23ad 100644
--- a/Mac/Modules/snd/sndsupport.py
+++ b/Mac/Modules/snd/sndsupport.py
@@ -81,7 +81,8 @@
 
 NumVersion = OpaqueByValueType('NumVersion', 'NumVer')
 
-InOutBuf128 = FixedInputOutputBufferType(128)
+##InOutBuf128 = FixedInputOutputBufferType(128)
+StateBlock = StructInputOutputBufferType('StateBlock')
 
 AudioSelectionPtr = FakeType('0') # XXX
 
diff --git a/Mac/Modules/win/wingen.py b/Mac/Modules/win/wingen.py
index f0f7633..25931e8 100644
--- a/Mac/Modules/win/wingen.py
+++ b/Mac/Modules/win/wingen.py
@@ -1,4 +1,4 @@
-# Generated from 'Moes:CW5 GOLD \304:Metrowerks C/C++ \304:Headers \304:Universal Headers 2.0a3 \304:Windows.h'
+# Generated from 'Moes:CodeWarrior6:Metrowerks C/C++:Headers:Universal Headers 2.0.1f:Windows.h'
 
 f = Function(void, 'InitWindows',
 )
