diff --git a/Mac/Include/macglue.h b/Mac/Include/macglue.h
index 100c204..9b55a4f 100644
--- a/Mac/Include/macglue.h
+++ b/Mac/Include/macglue.h
@@ -22,10 +22,14 @@
 
 ******************************************************************/
 
+#ifdef WITHOUT_FRAMEWORKS
 #include <Types.h>
 #include <Files.h>
 #include <Events.h>
 #include <StandardFile.h>
+#else
+#include <Carbon/Carbon.h>
+#endif
 
 #ifdef __cplusplus
 	extern "C" {
@@ -47,6 +51,8 @@
 #endif
 
 char *PyMac_StrError(int);			/* strerror with mac errors */
+PyObject *PyErr_Mac(PyObject *, int);		/* Exception with a mac error */
+PyObject *PyMac_Error(OSErr);			/* Uses PyMac_GetOSErrException */
 unsigned char *Pstring(char *str);		/* Convert c-string to pascal-string in static buffer */
 
 #ifdef USE_GUSI
@@ -65,19 +71,20 @@
 extern PyObject *PyMac_OSErrException;		/* Exception for OSErr */
 PyObject *PyMac_GetOSErrException(void);	/* Initialize & return it */
 
+#if !TARGET_API_MAC_OSX
 void PyMac_GetSchedParams(PyMacSchedParams *);	/* Get schedulers params */
 void PyMac_SetSchedParams(PyMacSchedParams *);	/* Set schedulers params */
-PyObject *PyErr_Mac(PyObject *, int);		/* Exception with a mac error */
-PyObject *PyMac_Error(OSErr);			/* Uses PyMac_GetOSErrException */
 int PyMac_DoYield(int, int);	/* Yield cpu. First arg is maxtime, second ok to call python */
+#endif
 int PyMac_HandleEvent(EventRecord *);	/* Handle one event, possibly in Python */
 void PyMac_HandleEventIntern(EventRecord *); /* Handle one event internal only */
 int PyMac_SetEventHandler(PyObject *);	/* set python-coded event handler */
 
+#if !TARGET_API_MAC_OSX
 void PyMac_InitMenuBar(void);			/* Setup menu bar as we want it */
 void PyMac_RestoreMenuBar(void);		/* Restore menu bar for ease of exiting */
 void PyMac_RaiseConsoleWindow();		/* Bring console window to front, if it exists */
-
+#endif
 int PyMac_FindResourceModule(PyStringObject *, char *, char *); /* Test for 'PYC ' resource in a file */
 PyObject * PyMac_LoadResourceModule(char *, char *); /* Load 'PYC ' resource from file */
 int PyMac_FindCodeResourceModule(PyStringObject *, char *, char *); /* Test for 'PYD ' resource in a file */
diff --git a/Mac/Modules/gestaltmodule.c b/Mac/Modules/gestaltmodule.c
index 3cba45b..15a2c89 100644
--- a/Mac/Modules/gestaltmodule.c
+++ b/Mac/Modules/gestaltmodule.c
@@ -27,8 +27,12 @@
 #include "Python.h"
 #include "macglue.h"
 
+#ifdef WITHOUT_FRAMEWORKS
 #include <Types.h>
 #include <Gestalt.h>
+#else
+#include <Carbon/Carbon.h>
+#endif
 
 static PyObject *
 gestalt_gestalt(self, args)
diff --git a/Mac/Python/macglue.c b/Mac/Python/macglue.c
index 928b07f..844ee42 100644
--- a/Mac/Python/macglue.c
+++ b/Mac/Python/macglue.c
@@ -22,24 +22,6 @@
 
 ******************************************************************/
 
-#ifdef __CFM68K__
-/* cfm68k InterfaceLib exports GetEventQueue, but Events.h doesn't know this
-** and defines it as GetEvQHdr (which is correct for PPC). This fix is for
-** CW9, check that the workaround is still needed for the next release.
-*/
-#define GetEvQHdr GetEventQueue
-#endif /* __CFM68K__ */
-
-#include <Events.h>
-
-#if !TARGET_API_MAC_OS8
-/* Unfortunately this call is probably slower... */
-#define LMGetTicks() TickCount()
-#endif
-
-#ifdef __CFM68K__
-#undef GetEventQueue
-#endif /* __CFM68K__ */
 
 #include "Python.h"
 
@@ -50,6 +32,7 @@
 
 #include "pythonresources.h"
 
+#ifdef WITHOUT_FRAMEWORKS
 #include <OSUtils.h> /* for Set(Current)A5 */
 #include <Files.h>
 #include <StandardFile.h>
@@ -61,6 +44,29 @@
 #include <Fonts.h>
 #include <Menus.h>
 #include <TextUtils.h>
+#include <LowMem.h>
+#ifdef __CFM68K__
+/* cfm68k InterfaceLib exports GetEventQueue, but Events.h doesn't know this
+** and defines it as GetEvQHdr (which is correct for PPC). This fix is for
+** CW9, check that the workaround is still needed for the next release.
+*/
+#define GetEvQHdr GetEventQueue
+#endif /* __CFM68K__ */
+
+#include <Events.h>
+
+#ifdef __CFM68K__
+#undef GetEventQueue
+#endif /* __CFM68K__ */
+#else
+#include <Carbon/Carbon.h>
+#endif
+
+#if !TARGET_API_MAC_OS8
+/* Unfortunately this call is probably slower... */
+#define LMGetTicks() TickCount()
+#endif
+
 #ifdef __MWERKS__
 #include <SIOUX.h>
 extern void SIOUXSetupMenus(void);
@@ -80,7 +86,6 @@
 #include <TFileSpec.h> /* For Path2FSSpec */
 #include <GUSI.h>
 #endif
-#include <LowMem.h>
 
 /* The ID of the Sioux apple menu */
 #define SIOUX_APPLEID	32000
@@ -132,7 +137,9 @@
 static int interrupted;			/* Set to true when cmd-. seen */
 static RETSIGTYPE intcatcher(int);
 
+#if !TARGET_API_MAC_OSX
 static int PyMac_Yield(void);
+#endif
 
 /*
 ** These are the real scheduling parameters that control what we check
@@ -466,6 +473,7 @@
 }
 #endif /* USE_STACKCHECK */
 
+#if !TARGET_API_MAC_OSX
 /* The catcher routine (which may not be used for all compilers) */
 static RETSIGTYPE
 intcatcher(sig)
@@ -539,31 +547,13 @@
 	return 0;
 }
 
-#if 0
-/*
-** This routine is called if we know that an external library yielded
-** to background tasks, so we shouldn't count that time in our computation
-** of how much CPU we used.
-** This happens with SIOUX, and the routine is called from our modified
-** GUSISIOUX.
-*/
-void
-PyMac_LibraryDidYield(int howlong)
-{
-	unsigned long maxnextcheck = (unsigned long)LMGetTicks() + schedparams.check_interval;
-	
-	schedparams.next_check = schedparams.next_check + howlong;
-	if (schedparams.next_check > maxnextcheck )
-		schedparams.next_check = maxnextcheck;
-}
-#endif
-
 int
 PyOS_InterruptOccurred()
 {
 	scan_event_queue(1);
 	return interrupted;
 }
+
 /* Check whether we are in the foreground */
 static int
 PyMac_InForeground(void)
@@ -582,8 +572,8 @@
 	else if ( SameProcess(&ours, &curfg, &eq) < 0 )
 		eq = 1;
 	return (int)eq;
-
 }
+#endif
 
 int
 PyMac_SetEventHandler(PyObject *evh)
@@ -655,6 +645,7 @@
 	return 0;
 }
 
+#if !TARGET_API_MAC_OSX
 /*
 ** Yield the CPU to other tasks without processing events.
 */
@@ -845,18 +836,9 @@
 	DisposeDialog(theDialog);
 }
 
-#if 0
-int
-PyMac_FileExists(char *name)
-{
-	FSSpec fss;
-	
-	if ( FSMakeFSSpec(0, 0, Pstring(name), &fss) == noErr )
-		return 1;
-	return 0;
-}
-#endif
+#endif /* !TARGET_API_MAC_OSX */
 
+#if TARGET_API_MAC_OS8
 /*
 ** Helper routine for GetDirectory
 */
@@ -878,7 +860,7 @@
 	}
 	return item;
 }	
-#if TARGET_API_MAC_OS8
+
 /*
 ** Ask the user for a directory. I still can't understand
 ** why Apple doesn't provide a standard solution for this...
@@ -1016,12 +998,15 @@
 	OSErr err;
 	FSSpec *fs2;
 
+#if !TARGET_API_MAC_OSX
+	/* XXX This #if is temporary */
 	/* first check whether it already is an FSSpec */
 	fs2 = mfs_GetFSSpecFSSpec(v);
 	if ( fs2 ) {
 		(void)FSMakeFSSpec(fs2->vRefNum, fs2->parID, fs2->name, fs);
 		return 1;
 	}
+#endif
 	if ( PyString_Check(v) ) {
 		/* It's a pathname */
 		if( !PyArg_Parse(v, "O&", PyMac_GetStr255, &path) )
@@ -1045,7 +1030,12 @@
 /* Convert FSSpec to PyObject */
 PyObject *PyMac_BuildFSSpec(FSSpec *v)
 {
+#if TARGET_API_MAC_OSX
+	PyErr_SetString(PyExc_NotImplementedError, "FSSpec not yet done for OSX");
+	return NULL;
+#else
 	return newmfssobject(v);
+#endif
 }
 
 /* Convert a Python object to a Rect.
