diff --git a/Mac/Lib/lib-toolbox/AEDataModel.py b/Mac/Lib/lib-toolbox/AEDataModel.py
index f49134f..c68b67c 100644
--- a/Mac/Lib/lib-toolbox/AEDataModel.py
+++ b/Mac/Lib/lib-toolbox/AEDataModel.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AEDataModel.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AEDataModel.h'
 
 def FOUR_CHAR_CODE(x): return x
 typeBoolean = FOUR_CHAR_CODE('bool')
diff --git a/Mac/Lib/lib-toolbox/AEObjects.py b/Mac/Lib/lib-toolbox/AEObjects.py
index 048e0d2..974c836 100644
--- a/Mac/Lib/lib-toolbox/AEObjects.py
+++ b/Mac/Lib/lib-toolbox/AEObjects.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AEObjects.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AEObjects.h'
 
 def FOUR_CHAR_CODE(x): return x
 kAEAND = FOUR_CHAR_CODE('AND ')
diff --git a/Mac/Lib/lib-toolbox/AERegistry.py b/Mac/Lib/lib-toolbox/AERegistry.py
index 72b5167..f314ec5 100644
--- a/Mac/Lib/lib-toolbox/AERegistry.py
+++ b/Mac/Lib/lib-toolbox/AERegistry.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AERegistry.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AERegistry.h'
 
 def FOUR_CHAR_CODE(x): return x
 from AEDataModel import *
diff --git a/Mac/Lib/lib-toolbox/AppleEvents.py b/Mac/Lib/lib-toolbox/AppleEvents.py
index d4bec69..9f9c499 100644
--- a/Mac/Lib/lib-toolbox/AppleEvents.py
+++ b/Mac/Lib/lib-toolbox/AppleEvents.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AppleEvents.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:AppleEvents.h'
 
 def FOUR_CHAR_CODE(x): return x
 from AEDataModel import *
diff --git a/Mac/Lib/lib-toolbox/Controls.py b/Mac/Lib/lib-toolbox/Controls.py
index 18a9eb4..3d16b02 100644
--- a/Mac/Lib/lib-toolbox/Controls.py
+++ b/Mac/Lib/lib-toolbox/Controls.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Controls.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Controls.h'
 
 def FOUR_CHAR_CODE(x): return x
 from TextEdit import *
diff --git a/Mac/Lib/lib-toolbox/Dialogs.py b/Mac/Lib/lib-toolbox/Dialogs.py
index 2367135..5c7f6eb 100644
--- a/Mac/Lib/lib-toolbox/Dialogs.py
+++ b/Mac/Lib/lib-toolbox/Dialogs.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Dialogs.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Dialogs.h'
 
 def FOUR_CHAR_CODE(x): return x
 gestaltDialogMgrAttr = FOUR_CHAR_CODE('dlog')
diff --git a/Mac/Lib/lib-toolbox/Menus.py b/Mac/Lib/lib-toolbox/Menus.py
index 8ac0085..a89abac 100644
--- a/Mac/Lib/lib-toolbox/Menus.py
+++ b/Mac/Lib/lib-toolbox/Menus.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Menus.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Menus.h'
 
 def FOUR_CHAR_CODE(x): return x
 gestaltMenuMgrAttr = FOUR_CHAR_CODE('menu')
diff --git a/Mac/Lib/lib-toolbox/QuickDraw.py b/Mac/Lib/lib-toolbox/QuickDraw.py
index 1159e58..a8ce68c 100644
--- a/Mac/Lib/lib-toolbox/QuickDraw.py
+++ b/Mac/Lib/lib-toolbox/QuickDraw.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:QuickDraw.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:QuickDraw.h'
 
 
 def FOUR_CHAR_CODE(x): return x
@@ -141,7 +141,7 @@
 kYUV211PixelFormat = FOUR_CHAR_CODE('Y211')
 kCursorImageMajorVersion = 0x0001
 kCursorImageMinorVersion = 0x0000
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:QuickDrawText.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:QuickDrawText.h'
 
 
 def FOUR_CHAR_CODE(x): return x
diff --git a/Mac/Lib/lib-toolbox/Resources.py b/Mac/Lib/lib-toolbox/Resources.py
index 0549e9a..922fe71 100644
--- a/Mac/Lib/lib-toolbox/Resources.py
+++ b/Mac/Lib/lib-toolbox/Resources.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Resources.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:Resources.h'
 
 resSysHeap = 64
 resPurgeable = 32
diff --git a/Mac/Lib/lib-toolbox/Windows.py b/Mac/Lib/lib-toolbox/Windows.py
index 3152ed5..7d4fa7a 100644
--- a/Mac/Lib/lib-toolbox/Windows.py
+++ b/Mac/Lib/lib-toolbox/Windows.py
@@ -1,4 +1,4 @@
-# Generated from 'flap:CodeWarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:MacWindows.h'
+# Generated from 'Macintosh HD:SWDev:Codewarrior Pro 5:Metrowerks CodeWarrior:MacOS Support:Universal:Interfaces:CIncludes:MacWindows.h'
 
 def FOUR_CHAR_CODE(x): return x
 kAlertWindowClass = 1L
diff --git a/Mac/Modules/Nav.c b/Mac/Modules/Nav.c
index a7bc45c..85fae41 100644
--- a/Mac/Modules/Nav.c
+++ b/Mac/Modules/Nav.c
@@ -323,6 +323,8 @@
 	navrrobject *self;
 	char *name;
 {
+	FSSpec fss;
+	
 	if( strcmp(name, "__members__") == 0 )
 		return Py_BuildValue("sssssss", "version", "validRecord", "replacing",
 			"isStationery", "translationNeeded", "selection", "fileTranslation");
@@ -355,7 +357,16 @@
 				PyErr_Mac(ErrorObject, err);
 				return NULL;
 			}
-			rvitem = PyMac_BuildFSSpec((FSSpec *)*desc.dataHandle);
+#ifdef TARGET_API_MAC_CARBON
+			if (err=AEGetDescData(&desc, &fss, sizeof(FSSpec))) {
+				Py_DECREF(rv);
+				PyErr_Mac(ErrorObject, err);
+				return NULL;
+			}
+#else
+			memcpy((void *)&fss, (void *)*desc.dataHandle, sizeof(FSSpec));
+#endif
+			rvitem = PyMac_BuildFSSpec(&fss);
 			PyList_SetItem(rv, i, rvitem);
 			AEDisposeDesc(&desc);
 		}
diff --git a/Mac/Modules/ae/AEmodule.c b/Mac/Modules/ae/AEmodule.c
index 5bb7f9c..d540197 100644
--- a/Mac/Modules/ae/AEmodule.c
+++ b/Mac/Modules/ae/AEmodule.c
@@ -795,6 +795,7 @@
 		return PyMac_BuildOSType(self->ob_itself.descriptorType);
 	if (strcmp(name, "data") == 0) {
 		PyObject *res;
+#ifndef TARGET_API_MAC_CARBON
 		char state;
 		state = HGetState(self->ob_itself.dataHandle);
 		HLock(self->ob_itself.dataHandle);
@@ -803,6 +804,19 @@
 			GetHandleSize(self->ob_itself.dataHandle));
 		HUnlock(self->ob_itself.dataHandle);
 		HSetState(self->ob_itself.dataHandle, state);
+#else
+		Size size;
+		char *ptr;
+		OSErr err;
+		
+		size = AEGetDescDataSize(&self->ob_itself);
+		if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
+			return NULL;
+		if ( (ptr = PyString_AsString(res)) == NULL )
+			return NULL;
+		if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
+			return PyMac_Error(err);	
+#endif
 		return res;
 	}
 	if (strcmp(name, "__members__") == 0)
@@ -1145,7 +1159,7 @@
 
 
 static pascal OSErr
-GenericEventHandler(AppleEvent *request, AppleEvent *reply, long refcon)
+GenericEventHandler(const AppleEvent *request, AppleEvent *reply, unsigned long refcon)
 {
 	PyObject *handler = (PyObject *)refcon;
 	AEDescObject *requestObject, *replyObject;
diff --git a/Mac/Modules/ae/aesupport.py b/Mac/Modules/ae/aesupport.py
index 3695037..953b490 100644
--- a/Mac/Modules/ae/aesupport.py
+++ b/Mac/Modules/ae/aesupport.py
@@ -126,7 +126,7 @@
 
 finalstuff = finalstuff + """
 static pascal OSErr
-GenericEventHandler(AppleEvent *request, AppleEvent *reply, long refcon)
+GenericEventHandler(const AppleEvent *request, AppleEvent *reply, unsigned long refcon)
 {
 	PyObject *handler = (PyObject *)refcon;
 	AEDescObject *requestObject, *replyObject;
@@ -178,6 +178,7 @@
 	return PyMac_BuildOSType(self->ob_itself.descriptorType);
 if (strcmp(name, "data") == 0) {
 	PyObject *res;
+#ifndef TARGET_API_MAC_CARBON
 	char state;
 	state = HGetState(self->ob_itself.dataHandle);
 	HLock(self->ob_itself.dataHandle);
@@ -186,6 +187,19 @@
 		GetHandleSize(self->ob_itself.dataHandle));
 	HUnlock(self->ob_itself.dataHandle);
 	HSetState(self->ob_itself.dataHandle, state);
+#else
+	Size size;
+	char *ptr;
+	OSErr err;
+	
+	size = AEGetDescDataSize(&self->ob_itself);
+	if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
+		return NULL;
+	if ( (ptr = PyString_AsString(res)) == NULL )
+		return NULL;
+	if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
+		return PyMac_Error(err);	
+#endif
 	return res;
 }
 if (strcmp(name, "__members__") == 0)
diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c
index 3cdf377..37f8c5a 100644
--- a/Mac/Modules/ctl/Ctlmodule.c
+++ b/Mac/Modules/ctl/Ctlmodule.c
@@ -46,8 +46,11 @@
 
 #define as_Control(h) ((ControlHandle)h)
 #define as_Resource(ctl) ((Handle)ctl)
+#ifdef TARGET_API_MAC_CARBON
+#define GetControlRect(ctl, rectp) GetControlBounds(ctl, rectp)
+#else
 #define GetControlRect(ctl, rectp) (*(rectp) = ((*(ctl))->contrlRect))
-
+#endif
 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
 
 extern PyObject *CtlObj_WhichControl(ControlHandle); /* Forward */
@@ -85,10 +88,12 @@
 /* TrackControl and HandleControlClick callback support */
 static PyObject *tracker;
 static ControlActionUPP mytracker_upp;
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 static ControlUserPaneDrawUPP mydrawproc_upp;
 static ControlUserPaneIdleUPP myidleproc_upp;
 static ControlUserPaneHitTestUPP myhittestproc_upp;
 static ControlUserPaneTrackingUPP mytrackingproc_upp;
+#endif
 
 extern int settrackfunc(PyObject *); 	/* forward */
 extern void clrtrackfunc(void);	/* forward */
@@ -730,18 +735,19 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	OSStatus _rv;
+	OSStatus _err;
 	OSType propertyCreator;
 	OSType propertyTag;
 	if (!PyArg_ParseTuple(_args, "O&O&",
 	                      PyMac_GetOSType, &propertyCreator,
 	                      PyMac_GetOSType, &propertyTag))
 		return NULL;
-	_rv = RemoveControlProperty(_self->ob_itself,
-	                            propertyCreator,
-	                            propertyTag);
-	_res = Py_BuildValue("l",
-	                     _rv);
+	_err = RemoveControlProperty(_self->ob_itself,
+	                             propertyCreator,
+	                             propertyTag);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
 	return _res;
 }
 
@@ -750,18 +756,19 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	OSStatus _rv;
+	OSStatus _err;
 	ControlPartCode inPart;
 	RgnHandle outRegion;
 	if (!PyArg_ParseTuple(_args, "hO&",
 	                      &inPart,
 	                      ResObj_Convert, &outRegion))
 		return NULL;
-	_rv = GetControlRegion(_self->ob_itself,
-	                       inPart,
-	                       outRegion);
-	_res = Py_BuildValue("l",
-	                     _rv);
+	_err = GetControlRegion(_self->ob_itself,
+	                        inPart,
+	                        outRegion);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
 	return _res;
 }
 
@@ -809,6 +816,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *CtlObj_GetAuxiliaryControlRecord(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
@@ -825,6 +834,9 @@
 	                     ResObj_New, acHndl);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *CtlObj_SetControlColor(_self, _args)
 	ControlObject *_self;
@@ -841,6 +853,151 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+static PyObject *CtlObj_GetBevelButtonMenuValue(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	SInt16 outValue;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = GetBevelButtonMenuValue(_self->ob_itself,
+	                               &outValue);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("h",
+	                     outValue);
+	return _res;
+}
+
+static PyObject *CtlObj_SetBevelButtonMenuValue(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	SInt16 inValue;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &inValue))
+		return NULL;
+	_err = SetBevelButtonMenuValue(_self->ob_itself,
+	                               inValue);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_GetBevelButtonMenuHandle(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	MenuHandle outHandle;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = GetBevelButtonMenuHandle(_self->ob_itself,
+	                                &outHandle);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     MenuObj_New, outHandle);
+	return _res;
+}
+
+static PyObject *CtlObj_SetBevelButtonTransform(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	IconTransformType transform;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &transform))
+		return NULL;
+	_err = SetBevelButtonTransform(_self->ob_itself,
+	                               transform);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_SetImageWellTransform(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	IconTransformType inTransform;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &inTransform))
+		return NULL;
+	_err = SetImageWellTransform(_self->ob_itself,
+	                             inTransform);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_GetTabContentRect(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	Rect outContentRect;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = GetTabContentRect(_self->ob_itself,
+	                         &outContentRect);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     PyMac_BuildRect, &outContentRect);
+	return _res;
+}
+
+static PyObject *CtlObj_SetTabEnabled(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	SInt16 inTabToHilite;
+	Boolean inEnabled;
+	if (!PyArg_ParseTuple(_args, "hb",
+	                      &inTabToHilite,
+	                      &inEnabled))
+		return NULL;
+	_err = SetTabEnabled(_self->ob_itself,
+	                     inTabToHilite,
+	                     inEnabled);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
+
+static PyObject *CtlObj_SetDisclosureTriangleLastValue(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+	OSErr _err;
+	SInt16 inValue;
+	if (!PyArg_ParseTuple(_args, "h",
+	                      &inValue))
+		return NULL;
+	_err = SetDisclosureTriangleLastValue(_self->ob_itself,
+	                                      inValue);
+	if (_err != noErr) return PyMac_Error(_err);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+}
 
 static PyObject *CtlObj_SendControlMessage(_self, _args)
 	ControlObject *_self;
@@ -1276,6 +1433,8 @@
 
 }
 
+#ifndef TARGET_API_MAC_CARBON_NOTYET
+
 static PyObject *CtlObj_SetControlDataCallback(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
@@ -1308,6 +1467,9 @@
 	return _res;
 
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 
 static PyObject *CtlObj_GetPopupData(_self, _args)
 	ControlObject *_self;
@@ -1328,6 +1490,9 @@
 	return _res;
 
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 
 static PyObject *CtlObj_SetPopupData(_self, _args)
 	ControlObject *_self;
@@ -1352,6 +1517,7 @@
 	return Py_None;
 
 }
+#endif
 
 static PyMethodDef CtlObj_methods[] = {
 	{"HiliteControl", (PyCFunction)CtlObj_HiliteControl, 1,
@@ -1427,19 +1593,41 @@
 	{"IsValidControlHandle", (PyCFunction)CtlObj_IsValidControlHandle, 1,
 	 "() -> (Boolean _rv)"},
 	{"RemoveControlProperty", (PyCFunction)CtlObj_RemoveControlProperty, 1,
-	 "(OSType propertyCreator, OSType propertyTag) -> (OSStatus _rv)"},
+	 "(OSType propertyCreator, OSType propertyTag) -> None"},
 	{"GetControlRegion", (PyCFunction)CtlObj_GetControlRegion, 1,
-	 "(ControlPartCode inPart, RgnHandle outRegion) -> (OSStatus _rv)"},
+	 "(ControlPartCode inPart, RgnHandle outRegion) -> None"},
 	{"GetControlVariant", (PyCFunction)CtlObj_GetControlVariant, 1,
 	 "() -> (ControlVariant _rv)"},
 	{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
 	 "(SInt32 data) -> None"},
 	{"GetControlReference", (PyCFunction)CtlObj_GetControlReference, 1,
 	 "() -> (SInt32 _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetAuxiliaryControlRecord", (PyCFunction)CtlObj_GetAuxiliaryControlRecord, 1,
 	 "() -> (Boolean _rv, AuxCtlHandle acHndl)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SetControlColor", (PyCFunction)CtlObj_SetControlColor, 1,
 	 "(CCTabHandle newColorTable) -> None"},
+#endif
+	{"GetBevelButtonMenuValue", (PyCFunction)CtlObj_GetBevelButtonMenuValue, 1,
+	 "() -> (SInt16 outValue)"},
+	{"SetBevelButtonMenuValue", (PyCFunction)CtlObj_SetBevelButtonMenuValue, 1,
+	 "(SInt16 inValue) -> None"},
+	{"GetBevelButtonMenuHandle", (PyCFunction)CtlObj_GetBevelButtonMenuHandle, 1,
+	 "() -> (MenuHandle outHandle)"},
+	{"SetBevelButtonTransform", (PyCFunction)CtlObj_SetBevelButtonTransform, 1,
+	 "(IconTransformType transform) -> None"},
+	{"SetImageWellTransform", (PyCFunction)CtlObj_SetImageWellTransform, 1,
+	 "(IconTransformType inTransform) -> None"},
+	{"GetTabContentRect", (PyCFunction)CtlObj_GetTabContentRect, 1,
+	 "() -> (Rect outContentRect)"},
+	{"SetTabEnabled", (PyCFunction)CtlObj_SetTabEnabled, 1,
+	 "(SInt16 inTabToHilite, Boolean inEnabled) -> None"},
+	{"SetDisclosureTriangleLastValue", (PyCFunction)CtlObj_SetDisclosureTriangleLastValue, 1,
+	 "(SInt16 inValue) -> None"},
 	{"SendControlMessage", (PyCFunction)CtlObj_SendControlMessage, 1,
 	 "(SInt16 inMessage, SInt32 inParam) -> (SInt32 _rv)"},
 	{"EmbedControl", (PyCFunction)CtlObj_EmbedControl, 1,
@@ -1476,12 +1664,21 @@
 	 "(ResObj) -> None"},
 	{"GetControlDataHandle", (PyCFunction)CtlObj_GetControlDataHandle, 1,
 	 "(part, type) -> ResObj"},
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 	{"SetControlDataCallback", (PyCFunction)CtlObj_SetControlDataCallback, 1,
 	 "(callbackfunc) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 	{"GetPopupData", (PyCFunction)CtlObj_GetPopupData, 1,
 	 NULL},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 	{"SetPopupData", (PyCFunction)CtlObj_SetPopupData, 1,
 	 NULL},
+#endif
 	{NULL, NULL, 0}
 };
 
@@ -1954,9 +2151,7 @@
 }
 
 static pascal void
-mytracker(ctl, part)
-	ControlHandle ctl;
-	short part;
+mytracker(ControlHandle ctl, short part)
 {
 	PyObject *args, *rv=0;
 
@@ -1971,6 +2166,7 @@
 		PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\n");
 }
 
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 static int
 setcallback(self, which, callback, uppp)
 	ControlObject *self;
@@ -2086,7 +2282,7 @@
 	Py_XDECREF(rv);
 	return (ControlPartCode)c_rv;
 }
-
+#endif
 
 
 void initCtl()
@@ -2097,10 +2293,12 @@
 
 
 	mytracker_upp = NewControlActionProc(mytracker);
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 	mydrawproc_upp = NewControlUserPaneDrawProc(mydrawproc);
 	myidleproc_upp = NewControlUserPaneIdleProc(myidleproc);
 	myhittestproc_upp = NewControlUserPaneHitTestProc(myhittestproc);
 	mytrackingproc_upp = NewControlUserPaneTrackingProc(mytrackingproc);
+#endif
 
 
 	m = Py_InitModule("Ctl", Ctl_methods);
diff --git a/Mac/Modules/ctl/ctlscan.py b/Mac/Modules/ctl/ctlscan.py
index 63d32f3..0f46c0e 100644
--- a/Mac/Modules/ctl/ctlscan.py
+++ b/Mac/Modules/ctl/ctlscan.py
@@ -48,17 +48,17 @@
 			'kControlBevelButtonCenterPopupGlyphTag', # Constant with funny definition
 			'kControlProgressBarIndeterminateTag', # ditto
 			# The following are unavailable for static 68k (appearance manager)
-			'GetBevelButtonMenuValue',
-			'SetBevelButtonMenuValue',
-			'GetBevelButtonMenuHandle',
-			'SetBevelButtonTransform',
+##			'GetBevelButtonMenuValue',
+##			'SetBevelButtonMenuValue',
+##			'GetBevelButtonMenuHandle',
+##			'SetBevelButtonTransform',
 			'SetBevelButtonGraphicAlignment',
 			'SetBevelButtonTextAlignment',
 			'SetBevelButtonTextPlacement',
-			'SetImageWellTransform',
-			'GetTabContentRect',
-			'SetTabEnabled',
-			'SetDisclosureTriangleLastValue',
+##			'SetImageWellTransform',
+##			'GetTabContentRect',
+##			'SetTabEnabled',
+##			'SetDisclosureTriangleLastValue',
 ## 			# Unavailable in CW Pro 3 libraries
 ## 			'SetUpControlTextColor',
 ## 			# Unavailable in Jack's CW Pro 5.1 libraries
@@ -79,6 +79,13 @@
 			'GetControlPropertySize',
 			]
 
+	def makegreylist(self):
+		return [
+			('#ifndef TARGET_API_MAC_CARBON', [
+				'GetAuxiliaryControlRecord',
+				'SetControlColor',
+			])]
+			
 	def makeblacklisttypes(self):
 		return [
 			'ProcPtr',
diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py
index f2d4be1..a8c2d64 100644
--- a/Mac/Modules/ctl/ctlsupport.py
+++ b/Mac/Modules/ctl/ctlsupport.py
@@ -46,8 +46,11 @@
 
 #define as_Control(h) ((ControlHandle)h)
 #define as_Resource(ctl) ((Handle)ctl)
+#ifdef TARGET_API_MAC_CARBON
+#define GetControlRect(ctl, rectp) GetControlBounds(ctl, rectp)
+#else
 #define GetControlRect(ctl, rectp) (*(rectp) = ((*(ctl))->contrlRect))
-
+#endif
 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
 
 extern PyObject *CtlObj_WhichControl(ControlHandle); /* Forward */
@@ -85,10 +88,12 @@
 /* TrackControl and HandleControlClick callback support */
 static PyObject *tracker;
 static ControlActionUPP mytracker_upp;
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 static ControlUserPaneDrawUPP mydrawproc_upp;
 static ControlUserPaneIdleUPP myidleproc_upp;
 static ControlUserPaneHitTestUPP myhittestproc_upp;
 static ControlUserPaneTrackingUPP mytrackingproc_upp;
+#endif
 
 extern int settrackfunc(PyObject *); 	/* forward */
 extern void clrtrackfunc(void);	/* forward */
@@ -147,9 +152,7 @@
 }
 
 static pascal void
-mytracker(ctl, part)
-	ControlHandle ctl;
-	short part;
+mytracker(ControlHandle ctl, short part)
 {
 	PyObject *args, *rv=0;
 
@@ -164,6 +167,7 @@
 		PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n");
 }
 
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 static int
 setcallback(self, which, callback, uppp)
 	ControlObject *self;
@@ -279,15 +283,17 @@
 	Py_XDECREF(rv);
 	return (ControlPartCode)c_rv;
 }
-
+#endif
 """
 
 initstuff = initstuff + """
 mytracker_upp = NewControlActionProc(mytracker);
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 mydrawproc_upp = NewControlUserPaneDrawProc(mydrawproc);
 myidleproc_upp = NewControlUserPaneIdleProc(myidleproc);
 myhittestproc_upp = NewControlUserPaneHitTestProc(myhittestproc);
 mytrackingproc_upp = NewControlUserPaneTrackingProc(mytrackingproc);
+#endif
 """
 
 class MyObjectDefinition(ObjectIdentityMixin, GlobalObjectDefinition):
@@ -564,7 +570,7 @@
 return _res;
 """
 
-f = ManualGenerator("SetControlDataCallback", setcontroldatacallback_body);
+f = ManualGenerator("SetControlDataCallback", setcontroldatacallback_body, condition="#ifndef TARGET_API_MAC_CARBON_NOTYET");
 f.docstring = lambda: "(callbackfunc) -> None"
 object.add(f)
 
@@ -582,7 +588,7 @@
 HUnlock((Handle)hdl);
 return _res;
 """
-f = ManualGenerator("GetPopupData", getpopupdata_body)
+f = ManualGenerator("GetPopupData", getpopupdata_body, condition="#ifndef TARGET_API_MAC_CARBON_NOTYET")
 object.add(f)
 
 setpopupdata_body = """
@@ -602,7 +608,7 @@
 Py_INCREF(Py_None);
 return Py_None;
 """
-f = ManualGenerator("SetPopupData", setpopupdata_body)
+f = ManualGenerator("SetPopupData", setpopupdata_body, condition="#ifndef TARGET_API_MAC_CARBON_NOTYET")
 object.add(f)
 
 
diff --git a/Mac/Modules/dlg/Dlgmodule.c b/Mac/Modules/dlg/Dlgmodule.c
index fbbadd8..15f61f5 100644
--- a/Mac/Modules/dlg/Dlgmodule.c
+++ b/Mac/Modules/dlg/Dlgmodule.c
@@ -154,7 +154,7 @@
 	it = PyObject_NEW(DialogObject, &Dialog_Type);
 	if (it == NULL) return NULL;
 	it->ob_itself = itself;
-	SetWRefCon(itself, (long)it);
+	SetWRefCon(GetDialogWindow(itself), (long)it);
 	return (PyObject *)it;
 }
 DlgObj_Convert(v, p_itself)
@@ -692,12 +692,12 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	DialogPtr _rv;
+	WindowPtr _rv;
 	if (!PyArg_ParseTuple(_args, ""))
 		return NULL;
 	_rv = GetDialogWindow(_self->ob_itself);
 	_res = Py_BuildValue("O&",
-	                     WinObj_WhichWindow, _rv);
+	                     WinObj_New, _rv);
 	return _res;
 }
 
@@ -743,6 +743,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *DlgObj_SetGrafPortOfDialog(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
@@ -755,6 +757,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyMethodDef DlgObj_methods[] = {
 	{"DrawDialog", (PyCFunction)DlgObj_DrawDialog, 1,
@@ -814,15 +817,18 @@
 	{"GetModalDialogEventMask", (PyCFunction)DlgObj_GetModalDialogEventMask, 1,
 	 "() -> (EventMask outMask)"},
 	{"GetDialogWindow", (PyCFunction)DlgObj_GetDialogWindow, 1,
-	 "() -> (DialogPtr _rv)"},
+	 "() -> (WindowPtr _rv)"},
 	{"GetDialogDefaultItem", (PyCFunction)DlgObj_GetDialogDefaultItem, 1,
 	 "() -> (SInt16 _rv)"},
 	{"GetDialogCancelItem", (PyCFunction)DlgObj_GetDialogCancelItem, 1,
 	 "() -> (SInt16 _rv)"},
 	{"GetDialogKeyboardFocusItem", (PyCFunction)DlgObj_GetDialogKeyboardFocusItem, 1,
 	 "() -> (SInt16 _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SetGrafPortOfDialog", (PyCFunction)DlgObj_SetGrafPortOfDialog, 1,
 	 "() -> None"},
+#endif
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/dlg/dlgscan.py b/Mac/Modules/dlg/dlgscan.py
index eb5bbfe..a9d6fc4 100644
--- a/Mac/Modules/dlg/dlgscan.py
+++ b/Mac/Modules/dlg/dlgscan.py
@@ -55,6 +55,12 @@
 			'GetDialogControlNotificationProc',
 			]
 
+	def makegreylist(self):
+		return [
+			('#ifndef TARGET_API_MAC_CARBON', [
+				'SetGrafPortOfDialog',
+			])]
+			
 	def makeblacklisttypes(self):
 		return [
 			"AlertStdAlertParamPtr",	# Too much work, for now
diff --git a/Mac/Modules/dlg/dlgsupport.py b/Mac/Modules/dlg/dlgsupport.py
index 4c44722..78b6be2 100644
--- a/Mac/Modules/dlg/dlgsupport.py
+++ b/Mac/Modules/dlg/dlgsupport.py
@@ -129,7 +129,7 @@
 		self.basechain = "&WinObj_chain"
 	def outputInitStructMembers(self):
 		GlobalObjectDefinition.outputInitStructMembers(self)
-		Output("SetWRefCon(itself, (long)it);")
+		Output("SetWRefCon(GetDialogWindow(itself), (long)it);")
 	def outputCheckNewArg(self):
 		Output("if (itself == NULL) return Py_None;")
 	def outputCheckConvertArg(self):
@@ -160,7 +160,7 @@
 # Some methods that are currently macro's in C, but will be real routines
 # in MacOS 8.
 
-f = Method(ExistingDialogPtr, 'GetDialogWindow', (DialogRef, 'dialog', InMode))
+f = Method(WindowPtr, 'GetDialogWindow', (DialogRef, 'dialog', InMode))
 object.add(f)
 f = Method(SInt16, 'GetDialogDefaultItem', (DialogRef, 'dialog', InMode))
 object.add(f)
@@ -168,7 +168,8 @@
 object.add(f)
 f = Method(SInt16, 'GetDialogKeyboardFocusItem', (DialogRef, 'dialog', InMode))
 object.add(f)
-f = Method(void, 'SetGrafPortOfDialog', (DialogRef, 'dialog', InMode))
+f = Method(void, 'SetGrafPortOfDialog', (DialogRef, 'dialog', InMode), 
+	condition='#ifndef TARGET_API_MAC_CARBON')
 object.add(f)
 
 setuseritembody = """
diff --git a/Mac/Modules/macconfig.c b/Mac/Modules/macconfig.c
index 5306764..9dc15c0 100644
--- a/Mac/Modules/macconfig.c
+++ b/Mac/Modules/macconfig.c
@@ -115,7 +115,6 @@
 extern void initColorPicker();
 extern void initPrinting();
 extern void initDrag();
-extern void initNav();
 #endif
 #ifdef USE_CORE_TOOLBOX
 extern void initCtl();
@@ -124,6 +123,7 @@
 extern void initQd();
 extern void initRes();
 extern void initWin();
+extern void initNav();
 #endif
 #ifdef USE_QT
 extern void initCm();
@@ -225,6 +225,7 @@
 	{"Ctl", initCtl},
 	{"Dlg", initDlg},
 	{"Menu", initMenu},
+	{"Nav", initNav},
 	{"Qd", initQd},
 	{"Win", initWin},
 	{"Res", initRes},
@@ -234,7 +235,6 @@
 	{"App", initApp},
 	{"Evt", initEvt},
 	{"Fm", initFm},
-	{"Help", initHelp},
 	{"Icn", initIcn},
 	{"List", initList},
 	{"Snd", initSnd},
@@ -242,9 +242,11 @@
 	{"Scrap", initScrap},
 	{"TE", initTE},
 	{"ColorPicker", initColorPicker},
+#ifndef TARGET_API_MAC_CARBON
+	{"Help", initHelp},
 	{"Printing", initPrinting},
+#endif
 	{"Drag", initDrag},
-	{"Nav", initNav},
 #endif
 #ifdef USE_QT
 	{"Cm", initCm},
@@ -302,4 +304,3 @@
 	/* Sentinel */
 	{0, 0}
 };
-
diff --git a/Mac/Modules/macfsmodule.c b/Mac/Modules/macfsmodule.c
index 0db4022..13dde93 100644
--- a/Mac/Modules/macfsmodule.c
+++ b/Mac/Modules/macfsmodule.c
@@ -713,6 +713,7 @@
 	return Py_BuildValue("Oii", newmfssobject(&fss), (int)isfolder, (int)wasaliased);
 }
 
+#ifndef TARGET_API_MAC_CARBON
 static PyObject *
 mfs_StandardGetFile(self, args)
 	PyObject *self;	/* Not used */
@@ -803,6 +804,7 @@
 	LMSetCurDirStore(spec.parID);
 	return (PyObject *)newmfssobject(&ospec);
 }
+#endif
 
 static PyObject *
 mfs_FSSpec(self, args)
@@ -950,11 +952,13 @@
 
 static struct PyMethodDef mfs_methods[] = {
 	{"ResolveAliasFile",	mfs_ResolveAliasFile,	1},
+#ifndef TARGET_API_MAC_CARBON
 	{"StandardGetFile",		mfs_StandardGetFile,	1},
 	{"PromptGetFile",		mfs_PromptGetFile,		1},
 	{"StandardPutFile",		mfs_StandardPutFile,	1},
 	{"GetDirectory",		mfs_GetDirectory,		1},
 	{"SetFolder",			mfs_SetFolder,			1},
+#endif
 	{"FSSpec",				mfs_FSSpec,				1},
 	{"RawFSSpec",			mfs_RawFSSpec,			1},
 	{"RawAlias",			mfs_RawAlias,			1},
diff --git a/Mac/Modules/macmodule.c b/Mac/Modules/macmodule.c
index c2224f0..74c1243 100644
--- a/Mac/Modules/macmodule.c
+++ b/Mac/Modules/macmodule.c
@@ -42,7 +42,11 @@
 #undef S_ISREG
 #endif /* THINK_C */
 
+#ifndef TARGET_API_MAC_CARBON_NOTYET
+/* XXXX Skip for Carbon, for now */
 #include "macstat.h"
+#endif
+
 #ifdef USE_GUSI
 /* Remove defines from macstat.h */
 #undef S_IFMT
@@ -58,7 +62,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #else /* USE_GUSI */
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 #define stat macstat
+#endif
 #endif /* USE_GUSI */
 
 #ifdef USE_GUSI2
@@ -70,6 +76,10 @@
 #else
 #define mode_t int
 #include <fcntl.h>
+#ifdef _POSIX
+#include <unistd.h>
+#include <stat.h>
+#endif
 #endif
 
 /* Optional routines, for some compiler/runtime combinations */
@@ -264,6 +274,7 @@
 }
 #endif
 
+#ifndef TARGET_API_MAC_CARBON
 static PyObject *
 mac_getbootvol(self, args)
 	PyObject *self;
@@ -279,6 +290,7 @@
 		return mac_error();
 	return PyString_FromString(res);
 }
+#endif
 
 static PyObject *
 mac_getcwd(self, args)
@@ -502,6 +514,7 @@
 }
 #endif /* WEHAVE_FSTAT */
 
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 static PyObject *
 mac_xstat(self, args)
 	PyObject *self;
@@ -543,6 +556,7 @@
 		    mst.st_creator, 4,
 		    mst.st_type, 4);
 }
+#endif
 
 static PyObject *
 mac_sync(self, args)
@@ -610,7 +624,9 @@
 #ifdef WEHAVE_FSTAT
 	{"fstat",	mac_fstat},
 #endif
+#ifndef TARGET_API_MAC_CARBON
 	{"getbootvol",	mac_getbootvol}, /* non-standard */
+#endif
 	{"getcwd",	mac_getcwd},
 	{"listdir",	mac_listdir, 0},
 	{"lseek",	mac_lseek},
@@ -620,7 +636,9 @@
 	{"rename",	mac_rename},
 	{"rmdir",	mac_rmdir},
 	{"stat",	mac_stat},
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 	{"xstat",	mac_xstat},
+#endif
 	{"sync",	mac_sync},
 	{"remove",	mac_unlink},
 	{"unlink",	mac_unlink},
diff --git a/Mac/Modules/macosmodule.c b/Mac/Modules/macosmodule.c
index ece75c9..4c7f2aa 100644
--- a/Mac/Modules/macosmodule.c
+++ b/Mac/Modules/macosmodule.c
@@ -31,6 +31,7 @@
 #include <Files.h>
 #include <LowMem.h>
 #include <Sound.h>
+#include <Events.h>
 
 static PyObject *MacOS_Error; /* Exception MacOS.Error */
 
@@ -312,14 +313,14 @@
 static PyObject *
 MacOS_GetCreatorAndType(PyObject *self, PyObject *args)
 {
-	Str255 name;
+	FSSpec fss;
 	FInfo info;
 	PyObject *creator, *type, *res;
 	OSErr err;
 	
-	if (!PyArg_ParseTuple(args, "O&", PyMac_GetStr255, &name))
+	if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss))
 		return NULL;
-	if ((err = GetFInfo(name, 0, &info)) != noErr)
+	if ((err = FSpGetFInfo(&fss, &info)) != noErr)
 		return PyErr_Mac(MacOS_Error, err);
 	creator = PyString_FromStringAndSize((char *)&info.fdCreator, 4);
 	type = PyString_FromStringAndSize((char *)&info.fdType, 4);
@@ -334,19 +335,19 @@
 static PyObject *
 MacOS_SetCreatorAndType(PyObject *self, PyObject *args)
 {
-	Str255 name;
+	FSSpec fss;
 	ResType creator, type;
 	FInfo info;
 	OSErr err;
 	
 	if (!PyArg_ParseTuple(args, "O&O&O&",
-			PyMac_GetStr255, &name, PyMac_GetOSType, &creator, PyMac_GetOSType, &type))
+			PyMac_GetFSSpec, &fss, PyMac_GetOSType, &creator, PyMac_GetOSType, &type))
 		return NULL;
-	if ((err = GetFInfo(name, 0, &info)) != noErr)
+	if ((err = FSpGetFInfo(&fss, &info)) != noErr)
 		return PyErr_Mac(MacOS_Error, err);
 	info.fdCreator = creator;
 	info.fdType = type;
-	if ((err = SetFInfo(name, 0, &info)) != noErr)
+	if ((err = FSpSetFInfo(&fss, &info)) != noErr)
 		return PyErr_Mac(MacOS_Error, err);
 	Py_INCREF(Py_None);
 	return Py_None;
@@ -413,6 +414,7 @@
 
 #endif /* USE_STDWIN */
 
+#ifndef TARGET_API_MAC_CARBON
 static char accepthle_doc[] = "Get arguments of pending high-level event";
 
 static PyObject *
@@ -447,7 +449,7 @@
 	free(buf);
 	return res;
 }
-
+#endif
 static char schedparams_doc[] = "Set/return mainloop interrupt check flag, etc";
 
 /*
@@ -559,7 +561,9 @@
 	DialogPtr olddialog;
 	WindowRef theWindow;
 	CGrafPtr thePort;
+#if 0
 	short xpos, ypos, width, height, swidth, sheight;
+#endif
 	
 	if (!PyArg_ParseTuple(args, "|i", &resid))
 		return NULL;
@@ -571,6 +575,7 @@
 		if ( curdialog ) {
 			theWindow = GetDialogWindow(curdialog);
 			thePort = GetWindowPort(theWindow);
+#if 0
 			width = thePort->portRect.right - thePort->portRect.left;
 			height = thePort->portRect.bottom - thePort->portRect.top;
 			swidth = qd.screenBits.bounds.right - qd.screenBits.bounds.left;
@@ -579,6 +584,7 @@
 			ypos = (sheight-height)/5 + LMGetMBarHeight();
 			MoveWindow(theWindow, xpos, ypos, 0);
 			ShowWindow(theWindow);
+#endif
 			DrawDialog(curdialog);
 		}
 	}
@@ -622,7 +628,7 @@
 static PyObject *
 MacOS_GetTicks(PyObject *self, PyObject *args)
 {
-	return Py_BuildValue("i", (int)LMGetTicks());
+	return Py_BuildValue("i", (int)TickCount());
 }
 
 static char openrf_doc[] = "Open resource fork of a file";
@@ -726,7 +732,9 @@
 }
 
 static PyMethodDef MacOS_Methods[] = {
+#ifndef TARGET_API_MAC_CARBON
 	{"AcceptHighLevelEvent",	MacOS_AcceptHighLevelEvent, 1,	accepthle_doc},
+#endif
 	{"GetCreatorAndType",		MacOS_GetCreatorAndType, 1,	getcrtp_doc},
 	{"SetCreatorAndType",		MacOS_SetCreatorAndType, 1,	setcrtp_doc},
 #ifdef USE_STDWIN
diff --git a/Mac/Modules/macspeechmodule.c b/Mac/Modules/macspeechmodule.c
index d0ee465..accb7b2 100644
--- a/Mac/Modules/macspeechmodule.c
+++ b/Mac/Modules/macspeechmodule.c
@@ -29,9 +29,14 @@
 #include "Speech.h"
 
 #ifdef __MWERKS__
+#define OLDP2C 1
 #include <TextUtils.h>
+#ifndef c2pstr
 #define c2pstr C2PStr
+#endif
+#ifndef p2cstr
 #define p2cstr P2CStr
+#endif
 #else
 #include "pascal.h"
 #endif /* __MWERKS__ */
diff --git a/Mac/Modules/menu/Menumodule.c b/Mac/Modules/menu/Menumodule.c
index e40ace7..0044c67 100644
--- a/Mac/Modules/menu/Menumodule.c
+++ b/Mac/Modules/menu/Menumodule.c
@@ -118,6 +118,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *MenuObj_CountMItems(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
@@ -131,6 +133,7 @@
 	                     _rv);
 	return _res;
 }
+#endif
 
 static PyObject *MenuObj_GetMenuFont(_self, _args)
 	MenuObject *_self;
@@ -410,6 +413,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *MenuObj_CheckItem(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
@@ -428,6 +433,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *MenuObj_SetMenuItemText(_self, _args)
 	MenuObject *_self;
@@ -614,6 +620,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *MenuObj_DisableItem(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
@@ -629,6 +637,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *MenuObj_EnableItem(_self, _args)
 	MenuObject *_self;
@@ -645,6 +656,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *MenuObj_SetMenuItemCommandID(_self, _args)
 	MenuObject *_self;
@@ -939,6 +951,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *MenuObj_SetMenuItemRefCon2(_self, _args)
 	MenuObject *_self;
 	PyObject *_args;
@@ -959,6 +973,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *MenuObj_GetMenuItemRefCon2(_self, _args)
 	MenuObject *_self;
@@ -979,6 +996,7 @@
 	                     outRefCon2);
 	return _res;
 }
+#endif
 
 static PyObject *MenuObj_SetMenuItemKeyGlyph(_self, _args)
 	MenuObject *_self;
@@ -1189,8 +1207,11 @@
 	 "() -> None"},
 	{"CalcMenuSize", (PyCFunction)MenuObj_CalcMenuSize, 1,
 	 "() -> None"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"CountMItems", (PyCFunction)MenuObj_CountMItems, 1,
 	 "() -> (short _rv)"},
+#endif
 	{"GetMenuFont", (PyCFunction)MenuObj_GetMenuFont, 1,
 	 "() -> (SInt16 outFontID, UInt16 outFontSize)"},
 	{"SetMenuFont", (PyCFunction)MenuObj_SetMenuFont, 1,
@@ -1221,8 +1242,11 @@
 	 "(short top, short left, short popUpItem) -> (long _rv)"},
 	{"MacInsertMenu", (PyCFunction)MenuObj_MacInsertMenu, 1,
 	 "(short beforeID) -> None"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"CheckItem", (PyCFunction)MenuObj_CheckItem, 1,
 	 "(short item, Boolean checked) -> None"},
+#endif
 	{"SetMenuItemText", (PyCFunction)MenuObj_SetMenuItemText, 1,
 	 "(short item, Str255 itemString) -> None"},
 	{"GetMenuItemText", (PyCFunction)MenuObj_GetMenuItemText, 1,
@@ -1243,10 +1267,16 @@
 	 "(short item, StyleParameter chStyle) -> None"},
 	{"GetItemStyle", (PyCFunction)MenuObj_GetItemStyle, 1,
 	 "(short item) -> (Style chStyle)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"DisableItem", (PyCFunction)MenuObj_DisableItem, 1,
 	 "(short item) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"EnableItem", (PyCFunction)MenuObj_EnableItem, 1,
 	 "(short item) -> None"},
+#endif
 	{"SetMenuItemCommandID", (PyCFunction)MenuObj_SetMenuItemCommandID, 1,
 	 "(SInt16 inItem, UInt32 inCommandID) -> None"},
 	{"GetMenuItemCommandID", (PyCFunction)MenuObj_GetMenuItemCommandID, 1,
@@ -1275,10 +1305,16 @@
 	 "(SInt16 inItem, UInt32 inRefCon) -> None"},
 	{"GetMenuItemRefCon", (PyCFunction)MenuObj_GetMenuItemRefCon, 1,
 	 "(SInt16 inItem) -> (UInt32 outRefCon)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SetMenuItemRefCon2", (PyCFunction)MenuObj_SetMenuItemRefCon2, 1,
 	 "(SInt16 inItem, UInt32 inRefCon2) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetMenuItemRefCon2", (PyCFunction)MenuObj_GetMenuItemRefCon2, 1,
 	 "(SInt16 inItem) -> (UInt32 outRefCon2)"},
+#endif
 	{"SetMenuItemKeyGlyph", (PyCFunction)MenuObj_SetMenuItemKeyGlyph, 1,
 	 "(SInt16 inItem, SInt16 inGlyph) -> None"},
 	{"GetMenuItemKeyGlyph", (PyCFunction)MenuObj_GetMenuItemKeyGlyph, 1,
@@ -1345,6 +1381,8 @@
 /* ---------------------- End object type Menu ---------------------- */
 
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Menu_InitProcMenu(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1359,6 +1397,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Menu_InitMenus(_self, _args)
 	PyObject *_self;
@@ -1372,6 +1413,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Menu_NewMenu(_self, _args)
 	PyObject *_self;
@@ -1614,6 +1656,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Menu_SetMenuFlash(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1628,6 +1672,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Menu_FlashMenuBar(_self, _args)
 	PyObject *_self;
@@ -1644,6 +1689,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Menu_SystemEdit(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1659,6 +1706,9 @@
 	                     _rv);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Menu_SystemMenu(_self, _args)
 	PyObject *_self;
@@ -1674,6 +1724,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Menu_IsMenuBarVisible(_self, _args)
 	PyObject *_self;
@@ -1764,6 +1815,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Menu_OpenDeskAcc(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1778,6 +1831,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Menu_as_Menu(_self, _args)
 	PyObject *_self;
@@ -1840,10 +1894,16 @@
 }
 
 static PyMethodDef Menu_methods[] = {
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InitProcMenu", (PyCFunction)Menu_InitProcMenu, 1,
 	 "(short resID) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InitMenus", (PyCFunction)Menu_InitMenus, 1,
 	 "() -> None"},
+#endif
 	{"NewMenu", (PyCFunction)Menu_NewMenu, 1,
 	 "(short menuID, Str255 menuTitle) -> (MenuHandle _rv)"},
 	{"MacGetMenu", (PyCFunction)Menu_MacGetMenu, 1,
@@ -1876,14 +1936,23 @@
 	 "(short menuID) -> None"},
 	{"ClearMenuBar", (PyCFunction)Menu_ClearMenuBar, 1,
 	 "() -> None"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SetMenuFlash", (PyCFunction)Menu_SetMenuFlash, 1,
 	 "(short count) -> None"},
+#endif
 	{"FlashMenuBar", (PyCFunction)Menu_FlashMenuBar, 1,
 	 "(short menuID) -> None"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SystemEdit", (PyCFunction)Menu_SystemEdit, 1,
 	 "(short editCmd) -> (Boolean _rv)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SystemMenu", (PyCFunction)Menu_SystemMenu, 1,
 	 "(long menuResult) -> None"},
+#endif
 	{"IsMenuBarVisible", (PyCFunction)Menu_IsMenuBarVisible, 1,
 	 "() -> (Boolean _rv)"},
 	{"ShowMenuBar", (PyCFunction)Menu_ShowMenuBar, 1,
@@ -1896,8 +1965,11 @@
 	 "() -> None"},
 	{"IsShowContextualMenuClick", (PyCFunction)Menu_IsShowContextualMenuClick, 1,
 	 "(EventRecord inEvent) -> (Boolean _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"OpenDeskAcc", (PyCFunction)Menu_OpenDeskAcc, 1,
 	 "(Str255 name) -> None"},
+#endif
 	{"as_Menu", (PyCFunction)Menu_as_Menu, 1,
 	 "(Handle h) -> (MenuHandle _rv)"},
 	{"GetMenu", (PyCFunction)Menu_GetMenu, 1,
diff --git a/Mac/Modules/menu/menuedit.py b/Mac/Modules/menu/menuedit.py
index 5409663..f4b5756 100644
--- a/Mac/Modules/menu/menuedit.py
+++ b/Mac/Modules/menu/menuedit.py
@@ -1,5 +1,6 @@
 f = Function(void, 'OpenDeskAcc',
 	(Str255, 'name', InMode),
+	condition='#ifndef TARGET_API_MAC_CARBON'
 )
 functions.append(f)
 
diff --git a/Mac/Modules/menu/menuscan.py b/Mac/Modules/menu/menuscan.py
index fa87ba3..2275683 100644
--- a/Mac/Modules/menu/menuscan.py
+++ b/Mac/Modules/menu/menuscan.py
@@ -40,6 +40,23 @@
 			"RemoveMenuItemProperty",
 			]
 
+	def makegreylist(self):
+		return [
+			('#ifndef TARGET_API_MAC_CARBON', [
+				'GetMenuItemRefCon2',
+				'SetMenuItemRefCon2',
+				'EnableItem',
+				'DisableItem',
+				'CheckItem',
+				'CountMItems',
+				'OpenDeskAcc',
+				'SystemEdit',
+				'SystemMenu',
+				'SetMenuFlash',
+				'InitMenus',
+				'InitProcMenu',
+			])]
+			
 	def makeblacklisttypes(self):
 		return [
 			'MCTableHandle',
diff --git a/Mac/Modules/qd/Qdmodule.c b/Mac/Modules/qd/Qdmodule.c
index 299c9ca..a5e6871 100644
--- a/Mac/Modules/qd/Qdmodule.c
+++ b/Mac/Modules/qd/Qdmodule.c
@@ -141,6 +141,7 @@
 	GrafPortObject *self;
 	char *name;
 {
+#ifndef TARGET_API_MAC_CARBON
 
 			{	CGrafPtr itself_color = (CGrafPtr)self->ob_itself;
 			
@@ -218,6 +219,7 @@
 				if ( strcmp(name, "_id") == 0 )
 					return Py_BuildValue("l", (long)self->ob_itself);
 			}
+#endif
 	return Py_FindMethodInChain(&GrafObj_chain, (PyObject *)self, name);
 }
 
@@ -424,6 +426,7 @@
 	QDGlobalsAccessObject *self;
 	char *name;
 {
+#ifndef TARGET_API_MAC_CARBON
 
 		if ( strcmp(name, "arrow") == 0 )
 			return PyString_FromStringAndSize((char *)&qd.arrow, sizeof(qd.arrow));
@@ -444,6 +447,7 @@
 		if ( strcmp(name, "randSeed") == 0 ) 
 			return Py_BuildValue("l", &qd.randSeed);
 			
+#endif
 	return Py_FindMethodInChain(&QDGA_chain, (PyObject *)self, name);
 }
 
diff --git a/Mac/Modules/qd/qdsupport.py b/Mac/Modules/qd/qdsupport.py
index 33e8832..671b359 100644
--- a/Mac/Modules/qd/qdsupport.py
+++ b/Mac/Modules/qd/qdsupport.py
@@ -132,6 +132,7 @@
 		Output("return 1;")
 		OutRbrace()
 	def outputGetattrHook(self):
+		Output("#ifndef TARGET_API_MAC_CARBON")
 		Output("""
 		{	CGrafPtr itself_color = (CGrafPtr)self->ob_itself;
 		
@@ -209,6 +210,7 @@
 			if ( strcmp(name, "_id") == 0 )
 				return Py_BuildValue("l", (long)self->ob_itself);
 		}""")
+		Output("#endif")
 
 class MyBMObjectDefinition(GlobalObjectDefinition):
 	def outputCheckNewArg(self):
@@ -259,6 +261,7 @@
 		pass
 
 	def outputGetattrHook(self):
+		Output("#ifndef TARGET_API_MAC_CARBON")
 		Output("""
 	if ( strcmp(name, "arrow") == 0 )
 		return PyString_FromStringAndSize((char *)&qd.arrow, sizeof(qd.arrow));
@@ -279,6 +282,7 @@
 	if ( strcmp(name, "randSeed") == 0 ) 
 		return Py_BuildValue("l", &qd.randSeed);
 		""")
+		Output("#endif")
 
 # Create the generator groups and link them
 module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff, variablestuff)
diff --git a/Mac/Modules/res/Resmodule.c b/Mac/Modules/res/Resmodule.c
index d0495e5..6db002f 100644
--- a/Mac/Modules/res/Resmodule.c
+++ b/Mac/Modules/res/Resmodule.c
@@ -311,6 +311,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *ResObj_RsrcMapEntry(_self, _args)
 	ResourceObject *_self;
 	PyObject *_args;
@@ -328,6 +330,7 @@
 	                     _rv);
 	return _res;
 }
+#endif
 
 static PyObject *ResObj_SetResAttrs(_self, _args)
 	ResourceObject *_self;
@@ -515,8 +518,11 @@
 	 "() -> (long _rv)"},
 	{"GetMaxResourceSize", (PyCFunction)ResObj_GetMaxResourceSize, 1,
 	 "() -> (long _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"RsrcMapEntry", (PyCFunction)ResObj_RsrcMapEntry, 1,
 	 "() -> (long _rv)"},
+#endif
 	{"SetResAttrs", (PyCFunction)ResObj_SetResAttrs, 1,
 	 "(short attrs) -> None"},
 	{"ChangedResource", (PyCFunction)ResObj_ChangedResource, 1,
@@ -622,6 +628,8 @@
 /* -------------------- End object type Resource -------------------- */
 
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Res_InitResources(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -639,6 +647,9 @@
 	                     _rv);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Res_RsrcZoneInit(_self, _args)
 	PyObject *_self;
@@ -656,6 +667,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Res_CloseResFile(_self, _args)
 	PyObject *_self;
@@ -712,6 +724,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Res_CreateResFile(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -730,6 +744,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Res_OpenResFile(_self, _args)
 	PyObject *_self;
@@ -750,6 +767,7 @@
 	                     _rv);
 	return _res;
 }
+#endif
 
 static PyObject *Res_UseResFile(_self, _args)
 	PyObject *_self;
@@ -1191,6 +1209,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Res_RGetResource(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -1213,6 +1233,7 @@
 	                     ResObj_New, _rv);
 	return _res;
 }
+#endif
 
 static PyObject *Res_HOpenResFile(_self, _args)
 	PyObject *_self;
@@ -1371,20 +1392,32 @@
 }
 
 static PyMethodDef Res_methods[] = {
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InitResources", (PyCFunction)Res_InitResources, 1,
 	 "() -> (short _rv)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"RsrcZoneInit", (PyCFunction)Res_RsrcZoneInit, 1,
 	 "() -> None"},
+#endif
 	{"CloseResFile", (PyCFunction)Res_CloseResFile, 1,
 	 "(short refNum) -> None"},
 	{"ResError", (PyCFunction)Res_ResError, 1,
 	 "() -> (OSErr _rv)"},
 	{"CurResFile", (PyCFunction)Res_CurResFile, 1,
 	 "() -> (short _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"CreateResFile", (PyCFunction)Res_CreateResFile, 1,
 	 "(Str255 fileName) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"OpenResFile", (PyCFunction)Res_OpenResFile, 1,
 	 "(Str255 fileName) -> (short _rv)"},
+#endif
 	{"UseResFile", (PyCFunction)Res_UseResFile, 1,
 	 "(short refNum) -> None"},
 	{"CountTypes", (PyCFunction)Res_CountTypes, 1,
@@ -1427,8 +1460,11 @@
 	 "(short refNum, short attrs) -> None"},
 	{"OpenRFPerm", (PyCFunction)Res_OpenRFPerm, 1,
 	 "(Str255 fileName, short vRefNum, SignedByte permission) -> (short _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"RGetResource", (PyCFunction)Res_RGetResource, 1,
 	 "(ResType theType, short theID) -> (Handle _rv)"},
+#endif
 	{"HOpenResFile", (PyCFunction)Res_HOpenResFile, 1,
 	 "(short vRefNum, long dirID, Str255 fileName, SignedByte permission) -> (short _rv)"},
 	{"HCreateResFile", (PyCFunction)Res_HCreateResFile, 1,
diff --git a/Mac/Modules/res/resscan.py b/Mac/Modules/res/resscan.py
index efb538c..18499e3 100644
--- a/Mac/Modules/res/resscan.py
+++ b/Mac/Modules/res/resscan.py
@@ -47,6 +47,17 @@
 ##			"SizeResource",		# GetResourceSizeOnDisk
 ##			"MaxSizeRsrc",		# GetMaxResourceSize
 			]
+			
+	def makegreylist(self):
+		return [
+			('#ifndef TARGET_API_MAC_CARBON', [
+				'RGetResource',
+				'OpenResFile',
+				'CreateResFile',
+				'RsrcZoneInit',
+				'InitResources',
+				'RsrcMapEntry',
+			])]
 
 	def makerepairinstructions(self):
 		return [
diff --git a/Mac/Modules/win/Winmodule.c b/Mac/Modules/win/Winmodule.c
index 9542447..a03d493 100644
--- a/Mac/Modules/win/Winmodule.c
+++ b/Mac/Modules/win/Winmodule.c
@@ -78,10 +78,12 @@
 	PyObject *v;
 	WindowPtr *p_itself;
 {
+#ifndef TARGET_API_MAC_CARBON
 	if (DlgObj_Check(v)) {
 		*p_itself = ((WindowObject *)v)->ob_itself;
 		return 1;
 	}
+#endif
 
 	if (v == Py_None) { *p_itself = NULL; return 1; }
 	if (PyInt_Check(v)) { *p_itself = (WindowPtr)PyInt_AsLong(v); return 1; }
@@ -102,19 +104,6 @@
 	PyMem_DEL(self);
 }
 
-static PyObject *WinObj_MacCloseWindow(_self, _args)
-	WindowObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	MacCloseWindow(_self->ob_itself);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *WinObj_GetWindowOwnerCount(_self, _args)
 	WindowObject *_self;
 	PyObject *_args;
@@ -181,6 +170,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *WinObj_SetWinColor(_self, _args)
 	WindowObject *_self;
 	PyObject *_args;
@@ -196,6 +187,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *WinObj_SetWindowContentColor(_self, _args)
 	WindowObject *_self;
@@ -280,6 +272,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *WinObj_SaveOld(_self, _args)
 	WindowObject *_self;
 	PyObject *_args;
@@ -292,6 +286,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *WinObj_DrawNew(_self, _args)
 	WindowObject *_self;
@@ -308,6 +305,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *WinObj_PaintOne(_self, _args)
 	WindowObject *_self;
@@ -713,7 +711,7 @@
 	                            &outFile);
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("O&",
-	                     PyMac_BuildFSSpec, &outFile);
+	                     PyMac_BuildFSSpec, outFile);
 	return _res;
 }
 
@@ -1319,6 +1317,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *WinObj_GetAuxWin(_self, _args)
 	WindowObject *_self;
 	PyObject *_args;
@@ -1335,6 +1335,7 @@
 	                     ResObj_New, awHndl);
 	return _res;
 }
+#endif
 
 static PyObject *WinObj_GetWindowPort(_self, _args)
 	WindowObject *_self;
@@ -1435,6 +1436,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *WinObj_GetWindowZoomFlag(_self, _args)
 	WindowObject *_self;
 	PyObject *_args;
@@ -1448,6 +1451,9 @@
 	                     _rv);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *WinObj_GetWindowStructureRgn(_self, _args)
 	WindowObject *_self;
@@ -1464,6 +1470,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *WinObj_GetWindowContentRgn(_self, _args)
 	WindowObject *_self;
@@ -1480,6 +1489,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *WinObj_GetWindowUpdateRgn(_self, _args)
 	WindowObject *_self;
@@ -1496,6 +1508,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *WinObj_GetWindowTitleWidth(_self, _args)
 	WindowObject *_self;
@@ -1510,6 +1525,7 @@
 	                     _rv);
 	return _res;
 }
+#endif
 
 static PyObject *WinObj_GetNextWindow(_self, _args)
 	WindowObject *_self;
@@ -1587,35 +1603,7 @@
 	return _res;
 }
 
-static PyObject *WinObj_GetWindowDataHandle(_self, _args)
-	WindowObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	Handle _rv;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	_rv = GetWindowDataHandle(_self->ob_itself);
-	_res = Py_BuildValue("O&",
-	                     ResObj_New, _rv);
-	return _res;
-}
-
-static PyObject *WinObj_SetWindowDataHandle(_self, _args)
-	WindowObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	Handle data;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      ResObj_Convert, &data))
-		return NULL;
-	SetWindowDataHandle(_self->ob_itself,
-	                    data);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *WinObj_CloseWindow(_self, _args)
 	WindowObject *_self;
@@ -1629,6 +1617,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *WinObj_MoveWindow(_self, _args)
 	WindowObject *_self;
@@ -1666,8 +1655,6 @@
 }
 
 static PyMethodDef WinObj_methods[] = {
-	{"MacCloseWindow", (PyCFunction)WinObj_MacCloseWindow, 1,
-	 "() -> None"},
 	{"GetWindowOwnerCount", (PyCFunction)WinObj_GetWindowOwnerCount, 1,
 	 "() -> (UInt32 outCount)"},
 	{"CloneWindow", (PyCFunction)WinObj_CloneWindow, 1,
@@ -1676,8 +1663,11 @@
 	 "() -> (WindowClass outClass)"},
 	{"GetWindowAttributes", (PyCFunction)WinObj_GetWindowAttributes, 1,
 	 "() -> (WindowAttributes outAttributes)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SetWinColor", (PyCFunction)WinObj_SetWinColor, 1,
 	 "(WCTabHandle newColorTable) -> None"},
+#endif
 	{"SetWindowContentColor", (PyCFunction)WinObj_SetWindowContentColor, 1,
 	 "() -> (RGBColor color)"},
 	{"GetWindowContentColor", (PyCFunction)WinObj_GetWindowContentColor, 1,
@@ -1688,10 +1678,16 @@
 	 "(PixPatHandle pixPat) -> None"},
 	{"ClipAbove", (PyCFunction)WinObj_ClipAbove, 1,
 	 "() -> None"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SaveOld", (PyCFunction)WinObj_SaveOld, 1,
 	 "() -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"DrawNew", (PyCFunction)WinObj_DrawNew, 1,
 	 "(Boolean update) -> None"},
+#endif
 	{"PaintOne", (PyCFunction)WinObj_PaintOne, 1,
 	 "(RgnHandle clobberedRgn) -> None"},
 	{"PaintBehind", (PyCFunction)WinObj_PaintBehind, 1,
@@ -1810,8 +1806,11 @@
 	 "(Point thePt, short partCode) -> (Boolean _rv)"},
 	{"TrackGoAway", (PyCFunction)WinObj_TrackGoAway, 1,
 	 "(Point thePt) -> (Boolean _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetAuxWin", (PyCFunction)WinObj_GetAuxWin, 1,
 	 "() -> (Boolean _rv, AuxWinHandle awHndl)"},
+#endif
 	{"GetWindowPort", (PyCFunction)WinObj_GetWindowPort, 1,
 	 "() -> (CGrafPtr _rv)"},
 	{"SetPortWindowPort", (PyCFunction)WinObj_SetPortWindowPort, 1,
@@ -1826,16 +1825,31 @@
 	 "() -> (Boolean _rv)"},
 	{"GetWindowGoAwayFlag", (PyCFunction)WinObj_GetWindowGoAwayFlag, 1,
 	 "() -> (Boolean _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetWindowZoomFlag", (PyCFunction)WinObj_GetWindowZoomFlag, 1,
 	 "() -> (Boolean _rv)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetWindowStructureRgn", (PyCFunction)WinObj_GetWindowStructureRgn, 1,
 	 "(RgnHandle r) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetWindowContentRgn", (PyCFunction)WinObj_GetWindowContentRgn, 1,
 	 "(RgnHandle r) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetWindowUpdateRgn", (PyCFunction)WinObj_GetWindowUpdateRgn, 1,
 	 "(RgnHandle r) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetWindowTitleWidth", (PyCFunction)WinObj_GetWindowTitleWidth, 1,
 	 "() -> (short _rv)"},
+#endif
 	{"GetNextWindow", (PyCFunction)WinObj_GetNextWindow, 1,
 	 "() -> (WindowPtr _rv)"},
 	{"GetWindowStandardState", (PyCFunction)WinObj_GetWindowStandardState, 1,
@@ -1846,12 +1860,11 @@
 	 "(Rect r) -> None"},
 	{"SetWindowUserState", (PyCFunction)WinObj_SetWindowUserState, 1,
 	 "(Rect r) -> None"},
-	{"GetWindowDataHandle", (PyCFunction)WinObj_GetWindowDataHandle, 1,
-	 "() -> (Handle _rv)"},
-	{"SetWindowDataHandle", (PyCFunction)WinObj_SetWindowDataHandle, 1,
-	 "(Handle data) -> None"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"CloseWindow", (PyCFunction)WinObj_CloseWindow, 1,
 	 "() -> None"},
+#endif
 	{"MoveWindow", (PyCFunction)WinObj_MoveWindow, 1,
 	 "(short hGlobal, short vGlobal, Boolean front) -> None"},
 	{"ShowWindow", (PyCFunction)WinObj_ShowWindow, 1,
@@ -2110,6 +2123,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Win_SetDeskCPat(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2124,6 +2139,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Win_CheckUpdate(_self, _args)
 	PyObject *_self;
@@ -2174,6 +2190,8 @@
 	return _res;
 }
 
+#ifndef TARGET_API_MAC_CARBON
+
 static PyObject *Win_InitWindows(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -2186,6 +2204,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_GetWMgrPort(_self, _args)
 	PyObject *_self;
@@ -2200,6 +2221,9 @@
 	                     GrafObj_New, wPort);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_GetCWMgrPort(_self, _args)
 	PyObject *_self;
@@ -2214,6 +2238,9 @@
 	                     GrafObj_New, wMgrCPort);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 
 static PyObject *Win_IsValidWindowPtr(_self, _args)
 	PyObject *_self;
@@ -2230,6 +2257,9 @@
 	                     _rv);
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_InitFloatingWindows(_self, _args)
 	PyObject *_self;
@@ -2245,6 +2275,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_InvalRect(_self, _args)
 	PyObject *_self;
@@ -2260,6 +2293,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_InvalRgn(_self, _args)
 	PyObject *_self;
@@ -2275,6 +2311,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_ValidRect(_self, _args)
 	PyObject *_self;
@@ -2290,6 +2329,9 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 
 static PyObject *Win_ValidRgn(_self, _args)
 	PyObject *_self;
@@ -2305,6 +2347,7 @@
 	_res = Py_None;
 	return _res;
 }
+#endif
 
 static PyObject *Win_CollapseAllWindows(_self, _args)
 	PyObject *_self;
@@ -2410,32 +2453,62 @@
 	 "() -> (Boolean _rv)"},
 	{"FrontNonFloatingWindow", (PyCFunction)Win_FrontNonFloatingWindow, 1,
 	 "() -> (WindowPtr _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"SetDeskCPat", (PyCFunction)Win_SetDeskCPat, 1,
 	 "(PixPatHandle deskPixPat) -> None"},
+#endif
 	{"CheckUpdate", (PyCFunction)Win_CheckUpdate, 1,
 	 "() -> (Boolean _rv, EventRecord theEvent)"},
 	{"MacFindWindow", (PyCFunction)Win_MacFindWindow, 1,
 	 "(Point thePoint) -> (short _rv, WindowPtr window)"},
 	{"FrontWindow", (PyCFunction)Win_FrontWindow, 1,
 	 "() -> (WindowPtr _rv)"},
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InitWindows", (PyCFunction)Win_InitWindows, 1,
 	 "() -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetWMgrPort", (PyCFunction)Win_GetWMgrPort, 1,
 	 "() -> (GrafPtr wPort)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"GetCWMgrPort", (PyCFunction)Win_GetCWMgrPort, 1,
 	 "() -> (CGrafPtr wMgrCPort)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON_NOTYET
 	{"IsValidWindowPtr", (PyCFunction)Win_IsValidWindowPtr, 1,
 	 "(GrafPtr grafPort) -> (Boolean _rv)"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InitFloatingWindows", (PyCFunction)Win_InitFloatingWindows, 1,
 	 "() -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InvalRect", (PyCFunction)Win_InvalRect, 1,
 	 "(Rect badRect) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"InvalRgn", (PyCFunction)Win_InvalRgn, 1,
 	 "(RgnHandle badRgn) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"ValidRect", (PyCFunction)Win_ValidRect, 1,
 	 "(Rect goodRect) -> None"},
+#endif
+
+#ifndef TARGET_API_MAC_CARBON
 	{"ValidRgn", (PyCFunction)Win_ValidRgn, 1,
 	 "(RgnHandle goodRgn) -> None"},
+#endif
 	{"CollapseAllWindows", (PyCFunction)Win_CollapseAllWindows, 1,
 	 "(Boolean collapse) -> None"},
 	{"PinRect", (PyCFunction)Win_PinRect, 1,
diff --git a/Mac/Modules/win/winedit.py b/Mac/Modules/win/winedit.py
index 6a81b9b..bf43a43 100644
--- a/Mac/Modules/win/winedit.py
+++ b/Mac/Modules/win/winedit.py
@@ -40,29 +40,34 @@
 
 f = Method(Boolean, 'GetWindowZoomFlag',
     (WindowRef, 'theWindow', InMode),
+    condition='#ifndef TARGET_API_MAC_CARBON'
 )
 methods.append(f)
 
 f = Method(void, 'GetWindowStructureRgn',
 	(WindowRef, 'theWindow', InMode),
 	(RgnHandle, 'r', InMode),
+    condition='#ifndef TARGET_API_MAC_CARBON'
 )
 methods.append(f)
 
 f = Method(void, 'GetWindowContentRgn',
 	(WindowRef, 'theWindow', InMode),
 	(RgnHandle, 'r', InMode),
+    condition='#ifndef TARGET_API_MAC_CARBON'
 )
 methods.append(f)
 
 f = Method(void, 'GetWindowUpdateRgn',
 	(WindowRef, 'theWindow', InMode),
 	(RgnHandle, 'r', InMode),
+    condition='#ifndef TARGET_API_MAC_CARBON'
 )
 methods.append(f)
 
 f = Method(short, 'GetWindowTitleWidth',
     (WindowRef, 'theWindow', InMode),
+    condition='#ifndef TARGET_API_MAC_CARBON'
 )
 methods.append(f)
 
@@ -96,20 +101,11 @@
 )
 methods.append(f)
 
-f = Method(Handle, 'GetWindowDataHandle',
-	(WindowRef, 'theWindow', InMode),
-)
-methods.append(f)
-f = Method(void, 'SetWindowDataHandle',
-	(WindowRef, 'theWindow', InMode),
-	(Handle, 'data', InMode),
-)
-methods.append(f)
-
 # These have Mac prefixed to their name in the 3.1 universal headers,
 # so we add the old/real names by hand.
 f = Method(void, 'CloseWindow',
     (WindowPtr, 'theWindow', InMode),
+    condition='#ifndef TARGET_API_MAC_CARBON'
 )
 methods.append(f)
 
diff --git a/Mac/Modules/win/winscan.py b/Mac/Modules/win/winscan.py
index 22f0d1a..b0f0fb3 100644
--- a/Mac/Modules/win/winscan.py
+++ b/Mac/Modules/win/winscan.py
@@ -41,10 +41,33 @@
 			'GetWindowProperty',
 			'GetWindowPropertySize',
 			'RemoveWindowProperty',
+			'MacCloseWindow',
 			# Constants with funny definitions
 			'kMouseUpOutOfSlop',
 			]
-
+			
+	def makegreylist(self):
+		return [
+			('#ifndef TARGET_API_MAC_CARBON', [
+				'GetAuxWin',
+				'GetWindowDataHandle',
+				'SaveOld',
+				'DrawNew',
+				'SetWinColor',
+				'SetDeskCPat',
+				'InitWindows',
+				'InitFloatingWindows',
+				'GetWMgrPort',
+				'GetCWMgrPort',
+				'ValidRgn',		# Use versions with Window in their name
+				'ValidRect',
+				'InvalRgn',
+				'InvalRect',
+			]),
+			('#ifndef TARGET_API_MAC_CARBON_NOTYET', [
+				'IsValidWindowPtr',
+			])]
+			
 	def makeblacklisttypes(self):
 		return [
 			'ProcPtr',
diff --git a/Mac/Modules/win/winsupport.py b/Mac/Modules/win/winsupport.py
index a6104d8..cc1c750 100644
--- a/Mac/Modules/win/winsupport.py
+++ b/Mac/Modules/win/winsupport.py
@@ -87,10 +87,12 @@
 		GlobalObjectDefinition.outputInitStructMembers(self)
 		Output("SetWRefCon(itself, (long)it);")
 	def outputCheckConvertArg(self):
+		Output("#ifndef TARGET_API_MAC_CARBON")
 		OutLbrace("if (DlgObj_Check(v))")
 		Output("*p_itself = ((WindowObject *)v)->ob_itself;")
 		Output("return 1;")
 		OutRbrace()
+		Output("#endif")
 		Out("""
 		if (v == Py_None) { *p_itself = NULL; return 1; }
 		if (PyInt_Check(v)) { *p_itself = (WindowPtr)PyInt_AsLong(v); return 1; }
