diff --git a/Mac/Lib/test/aete.py b/Mac/Lib/test/aete.py
index 205fbdb..21fff61 100644
--- a/Mac/Lib/test/aete.py
+++ b/Mac/Lib/test/aete.py
@@ -11,7 +11,7 @@
 from Res import *
 
 def main():
-	filename = raw_input("Listing file? (default stdout): ")
+	filename = ""
 	redirect(filename, realmain)
 
 def redirect(filename, func, *args):
@@ -27,14 +27,14 @@
 def realmain():
 	#list('C:System Folder:Extensions:AppleScript\252')
 	#list('C:Tao AppleScript:Finder Liaison:Finder Liaison 1.0')
-	#list('C:Tao AppleScript:Scriptable Text Editor')
+	list('C:Tao AppleScript:Scriptable Text Editor')
 	#list('C:Internet:Eudora 1.4.2:Eudora1.4.2')
 	#list('E:Excel 4.0:Microsoft Excel')
 	#list('C:Internet:Netscape 1.0N:Netscape 1.0N')
 	#find('C:')
-	find('D:')
-	find('E:')
-	find('F:')
+	#find('D:')
+	#find('E:')
+	#find('F:')
 
 def find(dir, maxlevel = 5):
 	hits = []
diff --git a/Mac/Lib/test/echo.py b/Mac/Lib/test/echo.py
index 12fbf92..616f712 100644
--- a/Mac/Lib/test/echo.py
+++ b/Mac/Lib/test/echo.py
@@ -6,14 +6,21 @@
 can have (without having to rely on Apple's implementation).
 """
 
+import addpack
+addpack.addpack('Demo')
+addpack.addpack('bgen')
+addpack.addpack('ae')
+addpack.addpack('evt')
+
+import sys
+sys.stdout = sys.stderr
+import traceback
+import MacOS
 import AE
 from AppleEvents import *
 import Evt
 from Events import *
 import aetools
-import sys
-import MacOS
-import traceback
 
 kHighLevelEvent = 23				# Not defined anywhere for Python yet?
 
@@ -49,6 +56,9 @@
 	
 	def mainloop(self, mask = everyEvent, timeout = 60*60):
 		while 1:
+			self.dooneevent(mask, timeout)
+	
+	def dooneevent(self, mask = everyEvent, timeout = 60*60):
 			got, event = Evt.WaitNextEvent(mask, timeout)
 			if got:
 				self.lowlevelhandler(event)
@@ -116,4 +126,3 @@
 
 if __name__ == '__main__':
 	main()
-else: main()
diff --git a/Mac/Lib/toolbox/aetools.py b/Mac/Lib/toolbox/aetools.py
index ae8b71a..e91449a 100644
--- a/Mac/Lib/toolbox/aetools.py
+++ b/Mac/Lib/toolbox/aetools.py
@@ -136,8 +136,10 @@
 
 
 def mkfss(data):
+	print "mkfss data =", `data`
 	vol, dir, fnlen = struct.unpack('hlb', data[:7])
 	filename = data[7:7+fnlen]
+	print (vol, dir, fnlen, filename)
 	return macfs.FSSpec((vol, dir, filename))
 
 
diff --git a/Mac/Modules/ae/AEmodule.c b/Mac/Modules/ae/AEmodule.c
index 58b4d13..dc2fc7d 100644
--- a/Mac/Modules/ae/AEmodule.c
+++ b/Mac/Modules/ae/AEmodule.c
@@ -82,7 +82,7 @@
 } AEDescObject;
 
 static PyObject *AEDesc_New(itself)
-	const AEDesc *itself;
+	AEDesc *itself;
 {
 	AEDescObject *it;
 	it = PyObject_NEW(AEDescObject, &AEDesc_Type);
@@ -174,11 +174,13 @@
 	DescType typeCode;
 	char *dataPtr__in__;
 	long dataPtr__len__;
+	int dataPtr__in_len__;
 	if (!PyArg_ParseTuple(_args, "lO&s#",
 	                      &index,
 	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__len__))
+	                      &dataPtr__in__, &dataPtr__in_len__))
 		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEPutPtr(&_self->ob_itself,
 	                index,
 	                typeCode,
@@ -223,16 +225,18 @@
 	DescType typeCode;
 	char *dataPtr__out__;
 	long dataPtr__len__;
-	if (!PyArg_ParseTuple(_args, "lO&l",
+	int dataPtr__in_len__;
+	if (!PyArg_ParseTuple(_args, "lO&i",
 	                      &index,
 	                      PyMac_GetOSType, &desiredType,
-	                      &dataPtr__len__))
+	                      &dataPtr__in_len__))
 		return NULL;
-	if ((dataPtr__out__ = malloc(dataPtr__len__)) == NULL)
+	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto dataPtr__error__;
 	}
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEGetNthPtr(&_self->ob_itself,
 	                   index,
 	                   desiredType,
@@ -243,7 +247,7 @@
 	_res = Py_BuildValue("O&O&s#",
 	                     PyMac_BuildOSType, theAEKeyword,
 	                     PyMac_BuildOSType, typeCode,
-	                     dataPtr__out__, dataPtr__len__);
+	                     dataPtr__out__, (int)dataPtr__len__);
 	free(dataPtr__out__);
  dataPtr__error__: ;
 	return _res;
@@ -326,11 +330,13 @@
 	DescType typeCode;
 	char *dataPtr__in__;
 	long dataPtr__len__;
+	int dataPtr__in_len__;
 	if (!PyArg_ParseTuple(_args, "O&O&s#",
 	                      PyMac_GetOSType, &theAEKeyword,
 	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__len__))
+	                      &dataPtr__in__, &dataPtr__in_len__))
 		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEPutKeyPtr(&_self->ob_itself,
 	                   theAEKeyword,
 	                   typeCode,
@@ -374,16 +380,18 @@
 	DescType typeCode;
 	char *dataPtr__out__;
 	long dataPtr__len__;
-	if (!PyArg_ParseTuple(_args, "O&O&l",
+	int dataPtr__in_len__;
+	if (!PyArg_ParseTuple(_args, "O&O&i",
 	                      PyMac_GetOSType, &theAEKeyword,
 	                      PyMac_GetOSType, &desiredType,
-	                      &dataPtr__len__))
+	                      &dataPtr__in_len__))
 		return NULL;
-	if ((dataPtr__out__ = malloc(dataPtr__len__)) == NULL)
+	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto dataPtr__error__;
 	}
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEGetKeyPtr(&_self->ob_itself,
 	                   theAEKeyword,
 	                   desiredType,
@@ -392,7 +400,7 @@
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("O&s#",
 	                     PyMac_BuildOSType, typeCode,
-	                     dataPtr__out__, dataPtr__len__);
+	                     dataPtr__out__, (int)dataPtr__len__);
 	free(dataPtr__out__);
  dataPtr__error__: ;
 	return _res;
@@ -472,11 +480,13 @@
 	DescType typeCode;
 	char *dataPtr__in__;
 	long dataPtr__len__;
+	int dataPtr__in_len__;
 	if (!PyArg_ParseTuple(_args, "O&O&s#",
 	                      PyMac_GetOSType, &theAEKeyword,
 	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__len__))
+	                      &dataPtr__in__, &dataPtr__in_len__))
 		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEPutParamPtr(&_self->ob_itself,
 	                     theAEKeyword,
 	                     typeCode,
@@ -520,16 +530,18 @@
 	DescType typeCode;
 	char *dataPtr__out__;
 	long dataPtr__len__;
-	if (!PyArg_ParseTuple(_args, "O&O&l",
+	int dataPtr__in_len__;
+	if (!PyArg_ParseTuple(_args, "O&O&i",
 	                      PyMac_GetOSType, &theAEKeyword,
 	                      PyMac_GetOSType, &desiredType,
-	                      &dataPtr__len__))
+	                      &dataPtr__in_len__))
 		return NULL;
-	if ((dataPtr__out__ = malloc(dataPtr__len__)) == NULL)
+	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto dataPtr__error__;
 	}
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEGetParamPtr(&_self->ob_itself,
 	                     theAEKeyword,
 	                     desiredType,
@@ -538,7 +550,7 @@
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("O&s#",
 	                     PyMac_BuildOSType, typeCode,
-	                     dataPtr__out__, dataPtr__len__);
+	                     dataPtr__out__, (int)dataPtr__len__);
 	free(dataPtr__out__);
  dataPtr__error__: ;
 	return _res;
@@ -619,16 +631,18 @@
 	DescType typeCode;
 	char *dataPtr__out__;
 	long dataPtr__len__;
-	if (!PyArg_ParseTuple(_args, "O&O&l",
+	int dataPtr__in_len__;
+	if (!PyArg_ParseTuple(_args, "O&O&i",
 	                      PyMac_GetOSType, &theAEKeyword,
 	                      PyMac_GetOSType, &desiredType,
-	                      &dataPtr__len__))
+	                      &dataPtr__in_len__))
 		return NULL;
-	if ((dataPtr__out__ = malloc(dataPtr__len__)) == NULL)
+	if ((dataPtr__out__ = malloc(dataPtr__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto dataPtr__error__;
 	}
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEGetAttributePtr(&_self->ob_itself,
 	                         theAEKeyword,
 	                         desiredType,
@@ -637,7 +651,7 @@
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("O&s#",
 	                     PyMac_BuildOSType, typeCode,
-	                     dataPtr__out__, dataPtr__len__);
+	                     dataPtr__out__, (int)dataPtr__len__);
 	free(dataPtr__out__);
  dataPtr__error__: ;
 	return _res;
@@ -699,11 +713,13 @@
 	DescType typeCode;
 	char *dataPtr__in__;
 	long dataPtr__len__;
+	int dataPtr__in_len__;
 	if (!PyArg_ParseTuple(_args, "O&O&s#",
 	                      PyMac_GetOSType, &theAEKeyword,
 	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__len__))
+	                      &dataPtr__in__, &dataPtr__in_len__))
 		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AEPutAttributePtr(&_self->ob_itself,
 	                         theAEKeyword,
 	                         typeCode,
@@ -927,7 +943,7 @@
 
 #define AEDesc_setattr NULL
 
-static PyTypeObject AEDesc_Type = {
+staticforward PyTypeObject AEDesc_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0, /*ob_size*/
 	"AEDesc", /*tp_name*/
@@ -952,11 +968,13 @@
 	DescType typeCode;
 	char *dataPtr__in__;
 	long dataPtr__len__;
+	int dataPtr__in_len__;
 	AEDesc result;
 	if (!PyArg_ParseTuple(_args, "O&s#",
 	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__len__))
+	                      &dataPtr__in__, &dataPtr__in_len__))
 		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AECreateDesc(typeCode,
 	                    dataPtr__in__, dataPtr__len__,
 	                    &result);
@@ -976,13 +994,15 @@
 	DescType typeCode;
 	char *dataPtr__in__;
 	long dataPtr__len__;
+	int dataPtr__in_len__;
 	DescType toType;
 	AEDesc result;
 	if (!PyArg_ParseTuple(_args, "O&s#O&",
 	                      PyMac_GetOSType, &typeCode,
-	                      &dataPtr__in__, &dataPtr__len__,
+	                      &dataPtr__in__, &dataPtr__in_len__,
 	                      PyMac_GetOSType, &toType))
 		return NULL;
+	dataPtr__len__ = dataPtr__in_len__;
 	_err = AECoercePtr(typeCode,
 	                   dataPtr__in__, dataPtr__len__,
 	                   toType,
@@ -1002,12 +1022,14 @@
 	OSErr _err;
 	char *factoringPtr__in__;
 	long factoringPtr__len__;
+	int factoringPtr__in_len__;
 	Boolean isRecord;
 	AEDescList resultList;
 	if (!PyArg_ParseTuple(_args, "s#b",
-	                      &factoringPtr__in__, &factoringPtr__len__,
+	                      &factoringPtr__in__, &factoringPtr__in_len__,
 	                      &isRecord))
 		return NULL;
+	factoringPtr__len__ = factoringPtr__in_len__;
 	_err = AECreateList(factoringPtr__in__, factoringPtr__len__,
 	                    isRecord,
 	                    &resultList);
@@ -1232,7 +1254,7 @@
 
 
 static pascal OSErr
-GenericEventHandler(const AppleEvent *request, AppleEvent *reply, long refcon)
+GenericEventHandler(AppleEvent *request, AppleEvent *reply, long refcon)
 {
 	PyObject *handler = (PyObject *)refcon;
 	AEDescObject *requestObject, *replyObject;
diff --git a/Mac/Modules/ae/aesupport.py b/Mac/Modules/ae/aesupport.py
index 3e63656..7c69f3e 100644
--- a/Mac/Modules/ae/aesupport.py
+++ b/Mac/Modules/ae/aesupport.py
@@ -115,7 +115,7 @@
 
 finalstuff = finalstuff + """
 static pascal OSErr
-GenericEventHandler(const AppleEvent *request, AppleEvent *reply, long refcon)
+GenericEventHandler(AppleEvent *request, AppleEvent *reply, long refcon)
 {
 	PyObject *handler = (PyObject *)refcon;
 	AEDescObject *requestObject, *replyObject;
diff --git a/Mac/Modules/dlg/Dlgmodule.c b/Mac/Modules/dlg/Dlgmodule.c
index b03f24f..0cd9dbb 100644
--- a/Mac/Modules/dlg/Dlgmodule.c
+++ b/Mac/Modules/dlg/Dlgmodule.c
@@ -34,6 +34,10 @@
 
 #include <Dialogs.h>
 
+#ifndef HAVE_UNIVERSAL_HEADERS
+#define NewModalFilterProc(x) (x)
+#endif
+
 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
 
 /* XXX Shouldn't this be a stack? */
@@ -51,7 +55,7 @@
 	if (callback == NULL)
 		return 0; /* Default behavior */
 	Dlg_FilterProc_callback = NULL; /* We'll restore it when call successful */
-	args = Py_BuildValue("O&s#", DlgObj_New, dialog, event, sizeof(EventRecord));
+	args = Py_BuildValue("O&s#", DlgObj_New, dialog, event, (int)sizeof(EventRecord));
 	if (args == NULL)
 		res = NULL;
 	else {
@@ -108,7 +112,7 @@
 } DialogObject;
 
 PyObject *DlgObj_New(itself)
-	const DialogPtr itself;
+	DialogPtr itself;
 {
 	DialogObject *it;
 	if (itself == NULL) return Py_None;
@@ -154,20 +158,6 @@
 	return _res;
 }
 
-static PyObject *DlgObj_UpdtDialog(_self, _args)
-	DialogObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	UpdtDialog(_self->ob_itself,
-	           _self->ob_itself->visRgn);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *DlgObj_UpdateDialog(_self, _args)
 	DialogObject *_self;
 	PyObject *_args;
@@ -406,8 +396,6 @@
 static PyMethodDef DlgObj_methods[] = {
 	{"DrawDialog", (PyCFunction)DlgObj_DrawDialog, 1,
 	 "() -> None"},
-	{"UpdtDialog", (PyCFunction)DlgObj_UpdtDialog, 1,
-	 "() -> None"},
 	{"UpdateDialog", (PyCFunction)DlgObj_UpdateDialog, 1,
 	 "() -> None"},
 	{"GetDItem", (PyCFunction)DlgObj_GetDItem, 1,
@@ -524,36 +512,6 @@
 	return _res;
 }
 
-static PyObject *Dlg_CouldDialog(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short dialogID;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &dialogID))
-		return NULL;
-	CouldDialog(dialogID);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Dlg_FreeDialog(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short dialogID;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &dialogID))
-		return NULL;
-	FreeDialog(dialogID);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Dlg_ParamText(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -588,7 +546,7 @@
 	if (!PyArg_ParseTuple(_args, "O",
 	                      &filterProc))
 		return NULL;
-	ModalDialog(Dlg_PassFilterProc(filterProc),
+	ModalDialog(NewModalFilterProc(Dlg_PassFilterProc(filterProc)),
 	            &itemHit);
 	_res = Py_BuildValue("h",
 	                     itemHit);
@@ -646,7 +604,7 @@
 	                      &filterProc))
 		return NULL;
 	_rv = Alert(alertID,
-	            Dlg_PassFilterProc(filterProc));
+	            NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
@@ -665,7 +623,7 @@
 	                      &filterProc))
 		return NULL;
 	_rv = StopAlert(alertID,
-	                Dlg_PassFilterProc(filterProc));
+	                NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
@@ -684,7 +642,7 @@
 	                      &filterProc))
 		return NULL;
 	_rv = NoteAlert(alertID,
-	                Dlg_PassFilterProc(filterProc));
+	                NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
@@ -703,42 +661,12 @@
 	                      &filterProc))
 		return NULL;
 	_rv = CautionAlert(alertID,
-	                   Dlg_PassFilterProc(filterProc));
+	                   NewModalFilterProc(Dlg_PassFilterProc(filterProc)));
 	_res = Py_BuildValue("h",
 	                     _rv);
 	return _res;
 }
 
-static PyObject *Dlg_CouldAlert(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short alertID;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &alertID))
-		return NULL;
-	CouldAlert(alertID);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Dlg_FreeAlert(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short alertID;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &alertID))
-		return NULL;
-	FreeAlert(alertID);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Dlg_GetIText(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -845,10 +773,6 @@
 	 "(Rect boundsRect, Str255 title, Boolean visible, short procID, WindowPtr behind, Boolean goAwayFlag, long refCon, Handle itmLstHndl) -> (DialogPtr _rv)"},
 	{"GetNewDialog", (PyCFunction)Dlg_GetNewDialog, 1,
 	 "(short dialogID, WindowPtr behind) -> (DialogPtr _rv)"},
-	{"CouldDialog", (PyCFunction)Dlg_CouldDialog, 1,
-	 "(short dialogID) -> None"},
-	{"FreeDialog", (PyCFunction)Dlg_FreeDialog, 1,
-	 "(short dialogID) -> None"},
 	{"ParamText", (PyCFunction)Dlg_ParamText, 1,
 	 "(Str255 param0, Str255 param1, Str255 param2, Str255 param3) -> None"},
 	{"ModalDialog", (PyCFunction)Dlg_ModalDialog, 1,
@@ -865,10 +789,6 @@
 	 "(short alertID, PyObject* filterProc) -> (short _rv)"},
 	{"CautionAlert", (PyCFunction)Dlg_CautionAlert, 1,
 	 "(short alertID, PyObject* filterProc) -> (short _rv)"},
-	{"CouldAlert", (PyCFunction)Dlg_CouldAlert, 1,
-	 "(short alertID) -> None"},
-	{"FreeAlert", (PyCFunction)Dlg_FreeAlert, 1,
-	 "(short alertID) -> None"},
 	{"GetIText", (PyCFunction)Dlg_GetIText, 1,
 	 "(Handle item) -> (Str255 text)"},
 	{"SetIText", (PyCFunction)Dlg_SetIText, 1,
diff --git a/Mac/Modules/dlg/dlgscan.py b/Mac/Modules/dlg/dlgscan.py
index 2a410f6..d0cf144 100644
--- a/Mac/Modules/dlg/dlgscan.py
+++ b/Mac/Modules/dlg/dlgscan.py
@@ -37,6 +37,11 @@
 			'CloseDialog',
 			'DisposDialog',
 			'DisposeDialog',
+			'UpdtDialog',
+			'CouldAlert',
+			'FreeAlert',
+			'CouldDialog',
+			'FreeDialog',
 			]
 
 	def makeblacklisttypes(self):
diff --git a/Mac/Modules/dlg/dlgsupport.py b/Mac/Modules/dlg/dlgsupport.py
index 85e72bb..1eb5576 100644
--- a/Mac/Modules/dlg/dlgsupport.py
+++ b/Mac/Modules/dlg/dlgsupport.py
@@ -10,7 +10,7 @@
 DialogPtr = OpaqueByValueType("DialogPtr", "DlgObj")
 
 ModalFilterProcPtr = InputOnlyType("PyObject*", "O")
-ModalFilterProcPtr.passInput = lambda name: "Dlg_PassFilterProc(%s)" % name
+ModalFilterProcPtr.passInput = lambda name: "NewModalFilterProc(Dlg_PassFilterProc(%s))" % name
 
 RgnHandle = FakeType("_self->ob_itself->visRgn") # XXX
 
@@ -19,6 +19,10 @@
 includestuff = includestuff + """
 #include <Dialogs.h>
 
+#ifndef HAVE_UNIVERSAL_HEADERS
+#define NewModalFilterProc(x) (x)
+#endif
+
 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
 
 /* XXX Shouldn't this be a stack? */
@@ -36,7 +40,7 @@
 	if (callback == NULL)
 		return 0; /* Default behavior */
 	Dlg_FilterProc_callback = NULL; /* We'll restore it when call successful */
-	args = Py_BuildValue("O&s#", DlgObj_New, dialog, event, sizeof(EventRecord));
+	args = Py_BuildValue("O&s#", DlgObj_New, dialog, event, (int)sizeof(EventRecord));
 	if (args == NULL)
 		res = NULL;
 	else {
diff --git a/Mac/Modules/snd/Sndmodule.c b/Mac/Modules/snd/Sndmodule.c
index d2511cf..7836cf1 100644
--- a/Mac/Modules/snd/Sndmodule.c
+++ b/Mac/Modules/snd/Sndmodule.c
@@ -30,9 +30,11 @@
 extern PyObject *CtlObj_New(ControlHandle);
 extern int CtlObj_Convert(PyObject *, ControlHandle *);
 
+extern PyObject *WinObj_WhichWindow(WindowPtr);
+
 #include <Sound.h>
 
-#ifndef __MWERKS__
+#ifndef HAVE_UNIVERSAL_HEADERS
 #define SndCallBackUPP ProcPtr
 #define NewSndCallBackProc(x) (x)
 #define SndListHandle Handle
@@ -100,7 +102,7 @@
 } SndChannelObject;
 
 static PyObject *SndCh_New(itself)
-	const SndChannelPtr itself;
+	SndChannelPtr itself;
 {
 	SndChannelObject *it;
 	it = PyObject_NEW(SndChannelObject, &SndChannel_Type);
@@ -262,7 +264,6 @@
 	OSErr _err;
 	short theLength;
 	SCStatus theStatus__out__;
-	int theStatus__len__;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &theLength))
 		return NULL;
@@ -271,7 +272,7 @@
 	                        &theStatus__out__);
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("s#",
-	                     (char *)&theStatus__out__, sizeof(SCStatus));
+	                     (char *)&theStatus__out__, (int)sizeof(SCStatus));
  theStatus__error__: ;
 	return _res;
 }
@@ -305,7 +306,7 @@
 
 #define SndCh_setattr NULL
 
-static PyTypeObject SndChannel_Type = {
+staticforward PyTypeObject SndChannel_Type = {
 	PyObject_HEAD_INIT(&PyType_Type)
 	0, /*ob_size*/
 	"SndChannel", /*tp_name*/
@@ -344,7 +345,7 @@
 	_err = SndNewChannel(&chan,
 	                     synth,
 	                     init,
-	                     (SndCallBackProcPtr)&SndCh_UserRoutine);
+	                     NewSndCallBackProc(SndCh_UserRoutine));
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("O&",
 	                     SndCh_New, chan);
@@ -378,35 +379,6 @@
 	return _res;
 }
 
-static PyObject *Snd_SetSoundVol(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short level;
-	if (!PyArg_ParseTuple(_args, "h",
-	                      &level))
-		return NULL;
-	SetSoundVol(level);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
-static PyObject *Snd_GetSoundVol(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	short level;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	GetSoundVol(&level);
-	_res = Py_BuildValue("h",
-	                     level);
-	return _res;
-}
-
 static PyObject *Snd_SndSoundManagerVersion(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -429,7 +401,6 @@
 	OSErr _err;
 	short theLength;
 	SMStatus theStatus__out__;
-	int theStatus__len__;
 	if (!PyArg_ParseTuple(_args, "h",
 	                      &theLength))
 		return NULL;
@@ -437,7 +408,7 @@
 	                        &theStatus__out__);
 	if (_err != noErr) return PyMac_Error(_err);
 	_res = Py_BuildValue("s#",
-	                     (char *)&theStatus__out__, sizeof(SMStatus));
+	                     (char *)&theStatus__out__, (int)sizeof(SMStatus));
  theStatus__error__: ;
 	return _res;
 }
@@ -495,34 +466,38 @@
 	char *buffer__in__;
 	char *buffer__out__;
 	long buffer__len__;
+	int buffer__in_len__;
 	char *state__in__;
 	char state__out__[128];
 	int state__len__;
+	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
-	                      &buffer__in__, &buffer__len__,
-	                      &state__in__, &state__len__,
+	                      &buffer__in__, &buffer__in_len__,
+	                      &state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
-	if ((buffer__out__ = malloc(buffer__len__)) == NULL)
+	if ((buffer__out__ = malloc(buffer__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto buffer__error__;
 	}
-	if (state__len__ != 128)
+	buffer__len__ = buffer__in_len__;
+	if (state__in_len__ != 128)
 	{
 		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
 		goto state__error__;
 	}
-	Comp3to1(buffer__in__, buffer__out__, buffer__len__,
+	state__len__ = state__in_len__;
+	Comp3to1(buffer__in__, buffer__out__, (long)buffer__len__,
 	         state__in__, state__out__,
 	         numChannels,
 	         whichChannel);
 	_res = Py_BuildValue("s#s#",
-	                     buffer__out__, buffer__len__,
-	                     state__out__, 128);
+	                     buffer__out__, (int)buffer__len__,
+	                     state__out__, (int)128);
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -537,34 +512,38 @@
 	char *buffer__in__;
 	char *buffer__out__;
 	long buffer__len__;
+	int buffer__in_len__;
 	char *state__in__;
 	char state__out__[128];
 	int state__len__;
+	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
-	                      &buffer__in__, &buffer__len__,
-	                      &state__in__, &state__len__,
+	                      &buffer__in__, &buffer__in_len__,
+	                      &state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
-	if ((buffer__out__ = malloc(buffer__len__)) == NULL)
+	if ((buffer__out__ = malloc(buffer__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto buffer__error__;
 	}
-	if (state__len__ != 128)
+	buffer__len__ = buffer__in_len__;
+	if (state__in_len__ != 128)
 	{
 		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
 		goto state__error__;
 	}
-	Exp1to3(buffer__in__, buffer__out__, buffer__len__,
+	state__len__ = state__in_len__;
+	Exp1to3(buffer__in__, buffer__out__, (long)buffer__len__,
 	        state__in__, state__out__,
 	        numChannels,
 	        whichChannel);
 	_res = Py_BuildValue("s#s#",
-	                     buffer__out__, buffer__len__,
-	                     state__out__, 128);
+	                     buffer__out__, (int)buffer__len__,
+	                     state__out__, (int)128);
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -579,34 +558,38 @@
 	char *buffer__in__;
 	char *buffer__out__;
 	long buffer__len__;
+	int buffer__in_len__;
 	char *state__in__;
 	char state__out__[128];
 	int state__len__;
+	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
-	                      &buffer__in__, &buffer__len__,
-	                      &state__in__, &state__len__,
+	                      &buffer__in__, &buffer__in_len__,
+	                      &state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
-	if ((buffer__out__ = malloc(buffer__len__)) == NULL)
+	if ((buffer__out__ = malloc(buffer__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto buffer__error__;
 	}
-	if (state__len__ != 128)
+	buffer__len__ = buffer__in_len__;
+	if (state__in_len__ != 128)
 	{
 		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
 		goto state__error__;
 	}
-	Comp6to1(buffer__in__, buffer__out__, buffer__len__,
+	state__len__ = state__in_len__;
+	Comp6to1(buffer__in__, buffer__out__, (long)buffer__len__,
 	         state__in__, state__out__,
 	         numChannels,
 	         whichChannel);
 	_res = Py_BuildValue("s#s#",
-	                     buffer__out__, buffer__len__,
-	                     state__out__, 128);
+	                     buffer__out__, (int)buffer__len__,
+	                     state__out__, (int)128);
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -621,34 +604,38 @@
 	char *buffer__in__;
 	char *buffer__out__;
 	long buffer__len__;
+	int buffer__in_len__;
 	char *state__in__;
 	char state__out__[128];
 	int state__len__;
+	int state__in_len__;
 	unsigned long numChannels;
 	unsigned long whichChannel;
 	if (!PyArg_ParseTuple(_args, "s#s#ll",
-	                      &buffer__in__, &buffer__len__,
-	                      &state__in__, &state__len__,
+	                      &buffer__in__, &buffer__in_len__,
+	                      &state__in__, &state__in_len__,
 	                      &numChannels,
 	                      &whichChannel))
 		return NULL;
-	if ((buffer__out__ = malloc(buffer__len__)) == NULL)
+	if ((buffer__out__ = malloc(buffer__in_len__)) == NULL)
 	{
 		PyErr_NoMemory();
 		goto buffer__error__;
 	}
-	if (state__len__ != 128)
+	buffer__len__ = buffer__in_len__;
+	if (state__in_len__ != 128)
 	{
 		PyErr_SetString(PyExc_TypeError, "buffer length should be 128");
 		goto state__error__;
 	}
-	Exp1to6(buffer__in__, buffer__out__, buffer__len__,
+	state__len__ = state__in_len__;
+	Exp1to6(buffer__in__, buffer__out__, (long)buffer__len__,
 	        state__in__, state__out__,
 	        numChannels,
 	        whichChannel);
 	_res = Py_BuildValue("s#s#",
-	                     buffer__out__, buffer__len__,
-	                     state__out__, 128);
+	                     buffer__out__, (int)buffer__len__,
+	                     state__out__, (int)128);
  state__error__: ;
 	free(buffer__out__);
  buffer__error__: ;
@@ -660,10 +647,6 @@
 	 "(short synth, long init, PyObject* userRoutine) -> (SndChannelPtr chan)"},
 	{"SndControl", (PyCFunction)Snd_SndControl, 1,
 	 "(short id) -> (SndCommand cmd)"},
-	{"SetSoundVol", (PyCFunction)Snd_SetSoundVol, 1,
-	 "(short level) -> None"},
-	{"GetSoundVol", (PyCFunction)Snd_GetSoundVol, 1,
-	 "() -> (short level)"},
 	{"SndSoundManagerVersion", (PyCFunction)Snd_SndSoundManagerVersion, 1,
 	 "() -> (NumVersion _rv)"},
 	{"SndManagerStatus", (PyCFunction)Snd_SndManagerStatus, 1,
diff --git a/Mac/Modules/snd/sndscan.py b/Mac/Modules/snd/sndscan.py
index b63691b..02c9177 100644
--- a/Mac/Modules/snd/sndscan.py
+++ b/Mac/Modules/snd/sndscan.py
@@ -41,6 +41,8 @@
 
 	def makeblacklisttypes(self):
 		return [
+			"GetSoundVol",
+			"SetSoundVol",
 			]
 
 	def makerepairinstructions(self):
diff --git a/Mac/Modules/snd/sndsupport.py b/Mac/Modules/snd/sndsupport.py
index 3516fa6..2181cd1 100644
--- a/Mac/Modules/snd/sndsupport.py
+++ b/Mac/Modules/snd/sndsupport.py
@@ -19,7 +19,7 @@
 includestuff = includestuff + """
 #include <Sound.h>
 
-#ifndef __MWERKS__
+#ifndef HAVE_UNIVERSAL_HEADERS
 #define SndCallBackUPP ProcPtr
 #define NewSndCallBackProc(x) (x)
 #define SndListHandle Handle
@@ -50,13 +50,13 @@
 	def __init__(self):
 		Type.__init__(self, 'PyObject*', 'O')
 	def getargsCheck(self, name):
-		Output("if (%s != Py_None && !callable(%s))", name, name)
+		Output("if (%s != Py_None && !PyCallable_Check(%s))", name, name)
 		OutLbrace()
 		Output('PyErr_SetString(PyExc_TypeError, "callback must be callable");')
 		Output("goto %s__error__;", name)
 		OutRbrace()
 	def passInput(self, name):
-		return "(SndCallBackProcPtr)&SndCh_UserRoutine"
+		return "NewSndCallBackProc(SndCh_UserRoutine)"
 	def cleanup(self, name):
 		# XXX This knows it is executing inside the SndNewChannel wrapper
 		Output("if (_res != NULL && %s != Py_None)", name)
diff --git a/Mac/Modules/win/Winmodule.c b/Mac/Modules/win/Winmodule.c
index 3f60d37..181cf77 100644
--- a/Mac/Modules/win/Winmodule.c
+++ b/Mac/Modules/win/Winmodule.c
@@ -36,12 +36,10 @@
 
 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
 
-#ifdef __MWERKS__
+#ifdef HAVE_UNIVERSAL_HEADERS
 #define WindowPeek WindowPtr
 #endif
 
-extern PyObject *WinObj_WhichWindow(WindowPtr w); /* Forward */
-
 static PyObject *Win_Error;
 
 /* ----------------------- Object type Window ----------------------- */
@@ -56,7 +54,7 @@
 } WindowObject;
 
 PyObject *WinObj_New(itself)
-	const WindowPtr itself;
+	WindowPtr itself;
 {
 	WindowObject *it;
 	if (itself == NULL) return PyMac_Error(resNotFound);
@@ -844,7 +842,10 @@
 	
 	/* XXX What if we find a stdwin window or a window belonging
 	       to some other package? */
-	it = (PyObject *) GetWRefCon(w);
+	if (w == NULL)
+		it = NULL;
+	else
+		it = (PyObject *) GetWRefCon(w);
 	if (it == NULL || ((WindowObject *)it)->ob_itself != w)
 		it = Py_None;
 	Py_INCREF(it);
diff --git a/Mac/Modules/win/winsupport.py b/Mac/Modules/win/winsupport.py
index c1057e2..a7f1ebd 100644
--- a/Mac/Modules/win/winsupport.py
+++ b/Mac/Modules/win/winsupport.py
@@ -32,7 +32,7 @@
 
 #define resNotFound -192 /* Can't include <Errors.h> because of Python's "errors.h" */
 
-#ifdef __MWERKS__
+#ifdef HAVE_UNIVERSAL_HEADERS
 #define WindowPeek WindowPtr
 #endif
 """
