diff --git a/Mac/Modules/ctl/_Ctlmodule.c b/Mac/Modules/ctl/_Ctlmodule.c
index d15ed90..f379d32 100644
--- a/Mac/Modules/ctl/_Ctlmodule.c
+++ b/Mac/Modules/ctl/_Ctlmodule.c
@@ -128,8 +128,10 @@
 }
 
 /* TrackControl and HandleControlClick callback support */
+#define kMyControlActionProcTag 'ACTN'  /* not an official tag, only for internal use */
 static PyObject *tracker;
 static ControlActionUPP mytracker_upp;
+static ControlActionUPP myactionproc_upp;
 static ControlUserPaneDrawUPP mydrawproc_upp;
 static ControlUserPaneIdleUPP myidleproc_upp;
 static ControlUserPaneHitTestUPP myhittestproc_upp;
@@ -1183,6 +1185,25 @@
 	return _res;
 }
 
+static PyObject *CtlObj_SetControlAction(ControlObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	PyObject* actionProc;
+	UniversalProcPtr c_callback;
+#ifndef SetControlAction
+	PyMac_PRECHECK(SetControlAction);
+#endif
+	if (!PyArg_ParseTuple(_args, "O",
+	                      &actionProc))
+		return NULL;
+	SetControlAction(_self->ob_itself,
+	                 myactionproc_upp);
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	setcallback((PyObject*)_self, kMyControlActionProcTag, actionProc, &c_callback);
+	return _res;
+}
+
 static PyObject *CtlObj_SetControlReference(ControlObject *_self, PyObject *_args)
 {
 	PyObject *_res = NULL;
@@ -4004,6 +4025,8 @@
 	 "(ControlPartCode inPart, RgnHandle outRegion) -> None"},
 	{"GetControlVariant", (PyCFunction)CtlObj_GetControlVariant, 1,
 	 "() -> (ControlVariant _rv)"},
+	{"SetControlAction", (PyCFunction)CtlObj_SetControlAction, 1,
+	 "(PyObject* actionProc) -> None"},
 	{"SetControlReference", (PyCFunction)CtlObj_SetControlReference, 1,
 	 "(SInt32 data) -> None"},
 	{"GetControlReference", (PyCFunction)CtlObj_GetControlReference, 1,
@@ -4989,6 +5012,52 @@
 }
 #endif
 
+static PyObject *Ctl_CreateSliderControl(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	OSStatus _err;
+	WindowPtr window;
+	Rect boundsRect;
+	SInt32 value;
+	SInt32 minimum;
+	SInt32 maximum;
+	UInt16 orientation;
+	UInt16 numTickMarks;
+	Boolean liveTracking;
+	PyObject* liveTrackingProc;
+	UniversalProcPtr c_callback;
+	ControlHandle outControl;
+#ifndef CreateSliderControl
+	PyMac_PRECHECK(CreateSliderControl);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&lllHHbO",
+	                      WinObj_Convert, &window,
+	                      PyMac_GetRect, &boundsRect,
+	                      &value,
+	                      &minimum,
+	                      &maximum,
+	                      &orientation,
+	                      &numTickMarks,
+	                      &liveTracking,
+	                      &liveTrackingProc))
+		return NULL;
+	_err = CreateSliderControl(window,
+	                           &boundsRect,
+	                           value,
+	                           minimum,
+	                           maximum,
+	                           orientation,
+	                           numTickMarks,
+	                           liveTracking,
+	                           myactionproc_upp,
+	                           &outControl);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     CtlObj_New, outControl);
+	setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);
+	return _res;
+}
+
 #if TARGET_API_MAC_CARBON
 
 static PyObject *Ctl_CreateDisclosureTriangleControl(PyObject *_self, PyObject *_args)
@@ -5755,6 +5824,49 @@
 }
 #endif
 
+static PyObject *Ctl_CreateScrollBarControl(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	OSStatus _err;
+	WindowPtr window;
+	Rect boundsRect;
+	SInt32 value;
+	SInt32 minimum;
+	SInt32 maximum;
+	SInt32 viewSize;
+	Boolean liveTracking;
+	PyObject* liveTrackingProc;
+	UniversalProcPtr c_callback;
+	ControlHandle outControl;
+#ifndef CreateScrollBarControl
+	PyMac_PRECHECK(CreateScrollBarControl);
+#endif
+	if (!PyArg_ParseTuple(_args, "O&O&llllbO",
+	                      WinObj_Convert, &window,
+	                      PyMac_GetRect, &boundsRect,
+	                      &value,
+	                      &minimum,
+	                      &maximum,
+	                      &viewSize,
+	                      &liveTracking,
+	                      &liveTrackingProc))
+		return NULL;
+	_err = CreateScrollBarControl(window,
+	                              &boundsRect,
+	                              value,
+	                              minimum,
+	                              maximum,
+	                              viewSize,
+	                              liveTracking,
+	                              myactionproc_upp,
+	                              &outControl);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     CtlObj_New, outControl);
+	setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);
+	return _res;
+}
+
 #if TARGET_API_MAC_CARBON
 
 static PyObject *Ctl_CreatePopupButtonControl(PyObject *_self, PyObject *_args)
@@ -6144,6 +6256,8 @@
 	{"CreateBevelButtonControl", (PyCFunction)Ctl_CreateBevelButtonControl, 1,
 	 "(WindowPtr window, Rect boundsRect, CFStringRef title, UInt16 thickness, UInt16 behavior, ControlButtonContentInfo info, SInt16 menuID, UInt16 menuBehavior, UInt16 menuPlacement) -> (ControlHandle outControl)"},
 #endif
+	{"CreateSliderControl", (PyCFunction)Ctl_CreateSliderControl, 1,
+	 "(WindowPtr window, Rect boundsRect, SInt32 value, SInt32 minimum, SInt32 maximum, UInt16 orientation, UInt16 numTickMarks, Boolean liveTracking, PyObject* liveTrackingProc) -> (ControlHandle outControl)"},
 
 #if TARGET_API_MAC_CARBON
 	{"CreateDisclosureTriangleControl", (PyCFunction)Ctl_CreateDisclosureTriangleControl, 1,
@@ -6259,6 +6373,8 @@
 	{"CreateCheckBoxControl", (PyCFunction)Ctl_CreateCheckBoxControl, 1,
 	 "(WindowPtr window, Rect boundsRect, CFStringRef title, SInt32 initialValue, Boolean autoToggle) -> (ControlHandle outControl)"},
 #endif
+	{"CreateScrollBarControl", (PyCFunction)Ctl_CreateScrollBarControl, 1,
+	 "(WindowPtr window, Rect boundsRect, SInt32 value, SInt32 minimum, SInt32 maximum, SInt32 viewSize, Boolean liveTracking, PyObject* liveTrackingProc) -> (ControlHandle outControl)"},
 
 #if TARGET_API_MAC_CARBON
 	{"CreatePopupButtonControl", (PyCFunction)Ctl_CreatePopupButtonControl, 1,
@@ -6371,8 +6487,10 @@
 	}
 	if (rv)
 		Py_DECREF(rv);
-	else
+	else {
 		PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\n");
+		PyErr_Print();
+	}
 }
 
 static int
@@ -6381,7 +6499,9 @@
 	ControlObject *self = (ControlObject *)myself;
 	char keybuf[9];
 	
-	if ( which == kControlUserPaneDrawProcTag )
+	if ( which == kMyControlActionProcTag )
+		*uppp = (UniversalProcPtr)myactionproc_upp;
+	else if ( which == kControlUserPaneDrawProcTag )
 		*uppp = (UniversalProcPtr)mydrawproc_upp;
 	else if ( which == kControlUserPaneIdleProcTag )
 		*uppp = (UniversalProcPtr)myidleproc_upp;
@@ -6418,12 +6538,27 @@
 		return NULL;
 	}
 	rv = PyEval_CallObject(func, arglist);
-	if ( rv == NULL )
+	if ( rv == NULL ) {
 		PySys_WriteStderr("Exception in control callback %x handler\n", (unsigned)which);
+		PyErr_Print();
+	}
 	return rv;
 }
 
 static pascal void
+myactionproc(ControlHandle control, SInt16 part)
+{
+	ControlObject *ctl_obj;
+	PyObject *arglist, *rv;
+	
+	ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
+	arglist = Py_BuildValue("Oh", ctl_obj, part);
+	rv = callcallback(ctl_obj, kMyControlActionProcTag, arglist);
+	Py_XDECREF(arglist);
+	Py_XDECREF(rv);
+}
+
+static pascal void
 mydrawproc(ControlHandle control, SInt16 part)
 {
 	ControlObject *ctl_obj;
@@ -6494,6 +6629,7 @@
 
 
 	mytracker_upp = NewControlActionUPP(mytracker);
+	myactionproc_upp = NewControlActionUPP(myactionproc);
 	mydrawproc_upp = NewControlUserPaneDrawUPP(mydrawproc);
 	myidleproc_upp = NewControlUserPaneIdleUPP(myidleproc);
 	myhittestproc_upp = NewControlUserPaneHitTestUPP(myhittestproc);
diff --git a/Mac/Modules/ctl/ctlscan.py b/Mac/Modules/ctl/ctlscan.py
index 61f79eb..2677f73 100644
--- a/Mac/Modules/ctl/ctlscan.py
+++ b/Mac/Modules/ctl/ctlscan.py
@@ -88,6 +88,7 @@
 			'GetControlPropertySize',
 			'SendControlMessage', # Parameter changed from long to void* from UH3.3 to UH3.4
 			'CreateTabsControl',  # wrote manually
+			'GetControlAction',  # too much effort for too little usefulness
 			
 			# too lazy for now
 			'GetImageWellContentInfo',
@@ -259,7 +260,7 @@
 	def makeblacklisttypes(self):
 		return [
 			'ProcPtr',
-			'ControlActionUPP',
+#			'ControlActionUPP',
 			'Ptr',
 			'ControlDefSpec', # Don't know how to do this yet
 			'ControlDefSpec_ptr', # ditto
@@ -319,6 +320,9 @@
 			 
 			([("ControlButtonContentInfo", '*', "OutMode")],
 			 [("ControlButtonContentInfo", '*', "InMode")]),
+			
+			([("ControlActionUPP", 'liveTrackingProc', "InMode")],
+			 [("ControlActionUPPNewControl", 'liveTrackingProc', "InMode")]),
 			]
 
 if __name__ == "__main__":
diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py
index 5538608..37422ed 100644
--- a/Mac/Modules/ctl/ctlsupport.py
+++ b/Mac/Modules/ctl/ctlsupport.py
@@ -94,6 +94,24 @@
 ControlBevelButtonMenuPlacement = UInt16
 ControlPushButtonIconAlignment = UInt16
 
+class ControlActionDefinition(Type):
+	def declare(self, name):
+		Output("%s %s;", self.typeName, name)
+		Output("UniversalProcPtr c_callback;")
+	def passInput(self, name):
+		return "myactionproc_upp"
+	def cleanup(self, name):
+		Output("setcallback((PyObject*)_self, kMyControlActionProcTag, actionProc, &c_callback);")
+
+class ControlActionDefinitionNewControl(ControlActionDefinition):
+	def cleanup(self, name):
+		Output("setcallback(_res, kMyControlActionProcTag, liveTrackingProc, &c_callback);")
+
+ControlActionUPP = ControlActionDefinition("PyObject*", "O")
+ControlActionUPPNewControl = ControlActionDefinitionNewControl("PyObject*", "O")
+ControlSliderOrientation = UInt16
+
+
 includestuff = includestuff + """
 #ifdef WITHOUT_FRAMEWORKS
 #include <Controls.h>
@@ -203,8 +221,10 @@
 }
 
 /* TrackControl and HandleControlClick callback support */
+#define kMyControlActionProcTag 'ACTN'  /* not an official tag, only for internal use */
 static PyObject *tracker;
 static ControlActionUPP mytracker_upp;
+static ControlActionUPP myactionproc_upp;
 static ControlUserPaneDrawUPP mydrawproc_upp;
 static ControlUserPaneIdleUPP myidleproc_upp;
 static ControlUserPaneHitTestUPP myhittestproc_upp;
@@ -279,8 +299,10 @@
 	}
 	if (rv)
 		Py_DECREF(rv);
-	else
+	else {
 		PySys_WriteStderr("TrackControl or HandleControlClick: exception in tracker function\\n");
+		PyErr_Print();
+	}
 }
 
 static int
@@ -289,7 +311,9 @@
 	ControlObject *self = (ControlObject *)myself;
 	char keybuf[9];
 	
-	if ( which == kControlUserPaneDrawProcTag )
+	if ( which == kMyControlActionProcTag )
+		*uppp = (UniversalProcPtr)myactionproc_upp;
+	else if ( which == kControlUserPaneDrawProcTag )
 		*uppp = (UniversalProcPtr)mydrawproc_upp;
 	else if ( which == kControlUserPaneIdleProcTag )
 		*uppp = (UniversalProcPtr)myidleproc_upp;
@@ -326,12 +350,27 @@
 		return NULL;
 	}
 	rv = PyEval_CallObject(func, arglist);
-	if ( rv == NULL )
+	if ( rv == NULL ) {
 		PySys_WriteStderr("Exception in control callback %x handler\\n", (unsigned)which);
+		PyErr_Print();
+	}
 	return rv;
 }
 
 static pascal void
+myactionproc(ControlHandle control, SInt16 part)
+{
+	ControlObject *ctl_obj;
+	PyObject *arglist, *rv;
+	
+	ctl_obj = (ControlObject *)CtlObj_WhichControl(control);
+	arglist = Py_BuildValue("Oh", ctl_obj, part);
+	rv = callcallback(ctl_obj, kMyControlActionProcTag, arglist);
+	Py_XDECREF(arglist);
+	Py_XDECREF(rv);
+}
+
+static pascal void
 mydrawproc(ControlHandle control, SInt16 part)
 {
 	ControlObject *ctl_obj;
@@ -396,6 +435,7 @@
 
 initstuff = initstuff + """
 mytracker_upp = NewControlActionUPP(mytracker);
+myactionproc_upp = NewControlActionUPP(myactionproc);
 mydrawproc_upp = NewControlUserPaneDrawUPP(mydrawproc);
 myidleproc_upp = NewControlUserPaneIdleUPP(myidleproc);
 myhittestproc_upp = NewControlUserPaneHitTestUPP(myhittestproc);
