diff --git a/Mac/Modules/app/_Appmodule.c b/Mac/Modules/app/_Appmodule.c
index 062197a..0c124b9 100644
--- a/Mac/Modules/app/_Appmodule.c
+++ b/Mac/Modules/app/_Appmodule.c
@@ -29,6 +29,114 @@
 
 static PyObject *App_Error;
 
+/* ----------------- Object type ThemeDrawingState ------------------ */
+
+PyTypeObject ThemeDrawingState_Type;
+
+#define ThemeDrawingState_Check(x) ((x)->ob_type == &ThemeDrawingState_Type)
+
+typedef struct ThemeDrawingStateObject {
+	PyObject_HEAD
+	ThemeDrawingState ob_itself;
+} ThemeDrawingStateObject;
+
+PyObject *ThemeDrawingState_New(ThemeDrawingState itself)
+{
+	ThemeDrawingStateObject *it;
+	it = PyObject_NEW(ThemeDrawingStateObject, &ThemeDrawingState_Type);
+	if (it == NULL) return NULL;
+	it->ob_itself = itself;
+	return (PyObject *)it;
+}
+int ThemeDrawingState_Convert(PyObject *v, ThemeDrawingState *p_itself)
+{
+	if (!ThemeDrawingState_Check(v))
+	{
+		PyErr_SetString(PyExc_TypeError, "ThemeDrawingState required");
+		return 0;
+	}
+	*p_itself = ((ThemeDrawingStateObject *)v)->ob_itself;
+	return 1;
+}
+
+static void ThemeDrawingState_dealloc(ThemeDrawingStateObject *self)
+{
+	/* Cleanup of self->ob_itself goes here */
+	PyMem_DEL(self);
+}
+
+static PyObject *ThemeDrawingState_SetThemeDrawingState(ThemeDrawingStateObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	OSStatus _rv;
+	Boolean inDisposeNow;
+	if (!PyArg_ParseTuple(_args, "b",
+	                      &inDisposeNow))
+		return NULL;
+	_rv = SetThemeDrawingState(_self->ob_itself,
+	                           inDisposeNow);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyObject *ThemeDrawingState_DisposeThemeDrawingState(ThemeDrawingStateObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	OSStatus _rv;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_rv = DisposeThemeDrawingState(_self->ob_itself);
+	_res = Py_BuildValue("l",
+	                     _rv);
+	return _res;
+}
+
+static PyMethodDef ThemeDrawingState_methods[] = {
+	{"SetThemeDrawingState", (PyCFunction)ThemeDrawingState_SetThemeDrawingState, 1,
+	 "(Boolean inDisposeNow) -> (OSStatus _rv)"},
+	{"DisposeThemeDrawingState", (PyCFunction)ThemeDrawingState_DisposeThemeDrawingState, 1,
+	 "() -> (OSStatus _rv)"},
+	{NULL, NULL, 0}
+};
+
+PyMethodChain ThemeDrawingState_chain = { ThemeDrawingState_methods, NULL };
+
+static PyObject *ThemeDrawingState_getattr(ThemeDrawingStateObject *self, char *name)
+{
+	return Py_FindMethodInChain(&ThemeDrawingState_chain, (PyObject *)self, name);
+}
+
+#define ThemeDrawingState_setattr NULL
+
+#define ThemeDrawingState_compare NULL
+
+#define ThemeDrawingState_repr NULL
+
+#define ThemeDrawingState_hash NULL
+
+PyTypeObject ThemeDrawingState_Type = {
+	PyObject_HEAD_INIT(NULL)
+	0, /*ob_size*/
+	"_App.ThemeDrawingState", /*tp_name*/
+	sizeof(ThemeDrawingStateObject), /*tp_basicsize*/
+	0, /*tp_itemsize*/
+	/* methods */
+	(destructor) ThemeDrawingState_dealloc, /*tp_dealloc*/
+	0, /*tp_print*/
+	(getattrfunc) ThemeDrawingState_getattr, /*tp_getattr*/
+	(setattrfunc) ThemeDrawingState_setattr, /*tp_setattr*/
+	(cmpfunc) ThemeDrawingState_compare, /*tp_compare*/
+	(reprfunc) ThemeDrawingState_repr, /*tp_repr*/
+	(PyNumberMethods *)0, /* tp_as_number */
+	(PySequenceMethods *)0, /* tp_as_sequence */
+	(PyMappingMethods *)0, /* tp_as_mapping */
+	(hashfunc) ThemeDrawingState_hash, /*tp_hash*/
+};
+
+/* --------------- End object type ThemeDrawingState ---------------- */
+
+
 static PyObject *App_RegisterAppearanceClient(PyObject *_self, PyObject *_args)
 {
 	PyObject *_res = NULL;
@@ -1033,6 +1141,20 @@
 	return _res;
 }
 
+static PyObject *App_GetThemeDrawingState(PyObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+	OSStatus _err;
+	ThemeDrawingState outState;
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	_err = GetThemeDrawingState(&outState);
+	if (_err != noErr) return PyMac_Error(_err);
+	_res = Py_BuildValue("O&",
+	                     ThemeDrawingState_New, outState);
+	return _res;
+}
+
 static PyObject *App_ApplyThemeBackground(PyObject *_self, PyObject *_args)
 {
 	PyObject *_res = NULL;
@@ -1281,6 +1403,8 @@
 	 "(Point origin, ThemeGrowDirection growDirection, Boolean isSmall) -> (Rect bounds)"},
 	{"NormalizeThemeDrawingState", (PyCFunction)App_NormalizeThemeDrawingState, 1,
 	 "() -> None"},
+	{"GetThemeDrawingState", (PyCFunction)App_GetThemeDrawingState, 1,
+	 "() -> (ThemeDrawingState outState)"},
 	{"ApplyThemeBackground", (PyCFunction)App_ApplyThemeBackground, 1,
 	 "(ThemeBackgroundKind inKind, Rect bounds, ThemeDrawState inState, SInt16 inDepth, Boolean inColorDev) -> None"},
 	{"SetThemeTextColorForWindow", (PyCFunction)App_SetThemeTextColorForWindow, 1,
@@ -1316,6 +1440,10 @@
 	if (App_Error == NULL ||
 	    PyDict_SetItemString(d, "Error", App_Error) != 0)
 		return;
+	ThemeDrawingState_Type.ob_type = &PyType_Type;
+	Py_INCREF(&ThemeDrawingState_Type);
+	if (PyDict_SetItemString(d, "ThemeDrawingStateType", (PyObject *)&ThemeDrawingState_Type) != 0)
+		Py_FatalError("can't initialize ThemeDrawingStateType");
 }
 
 /* ======================== End module _App ========================= */
diff --git a/Mac/Modules/app/appscan.py b/Mac/Modules/app/appscan.py
index 5a7750a..c7fea17 100644
--- a/Mac/Modules/app/appscan.py
+++ b/Mac/Modules/app/appscan.py
@@ -9,7 +9,7 @@
 
 LONG = "Appearance"
 SHORT = "app"
-OBJECT = "NOTUSED"
+OBJECT = "ThemeDrawingState"
 
 def main():
 	input = LONG + ".h"
@@ -73,7 +73,7 @@
 			"ThemeTrackDrawInfo_ptr", 	# Too much work
 			"ThemeButtonDrawInfo_ptr",	# ditto
 			"ThemeWindowMetrics_ptr",	# ditto
-			"ThemeDrawingState",	# This is an opaque pointer, so it should be simple. Later.
+#			"ThemeDrawingState",	# This is an opaque pointer, so it should be simple. Later.
 			"Collection",		# No interface to collection mgr yet.
 			"BytePtr",		# Not yet.
 			]
diff --git a/Mac/Modules/app/appsupport.py b/Mac/Modules/app/appsupport.py
index 94361a9..acdc06f 100644
--- a/Mac/Modules/app/appsupport.py
+++ b/Mac/Modules/app/appsupport.py
@@ -8,8 +8,8 @@
 # Declarations that change for each manager
 MACHEADERFILE = 'Appearance.h'		# The Apple header file
 MODNAME = '_App'				# The name of the module
-OBJECTNAME = 'UNUSED'			# The basic name of the objects used here
-KIND = 'Record'				# Usually 'Ptr' or 'Handle'
+OBJECTNAME = 'ThemeDrawingState'			# The basic name of the objects used here
+KIND = ''				# Usually 'Ptr' or 'Handle'
 
 # The following is *usually* unchanged but may still require tuning
 MODPREFIX = 'App'			# The prefix for module-wide routines
@@ -82,7 +82,8 @@
 
 """
 
-## class MyObjectDefinition(GlobalObjectDefinition):
+class MyObjectDefinition(GlobalObjectDefinition):
+	pass
 ## 	def outputCheckNewArg(self):
 ## 		Output("if (itself == NULL) return PyMac_Error(resNotFound);")
 ## 	def outputCheckConvertArg(self):
@@ -99,8 +100,12 @@
 
 # Create the generator groups and link them
 module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
-##object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
-##module.addobject(object)
+object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
+module.addobject(object)
+
+ThemeDrawingState = OpaqueByValueType("ThemeDrawingState", "ThemeDrawingStateObj")
+Method = MethodGenerator
+
 
 # Create the generator classes used to populate the lists
 Function = OSErrFunctionGenerator
@@ -108,13 +113,13 @@
 
 # Create and populate the lists
 functions = []
-##methods = []
+methods = []
 execfile(INPUTFILE)
 
 # add the populated lists to the generator groups
 # (in a different wordl the scan program would generate this)
 for f in functions: module.add(f)
-##for f in methods: object.add(f)
+for f in methods: object.add(f)
 
 # generate output (open the output file as late as possible)
 SetOutputFileName(OUTPUTFILE)
