List objects obtained through as_List(resource) are not auto-disposed upon
Python object freeing.
diff --git a/Mac/Modules/list/Listmodule.c b/Mac/Modules/list/Listmodule.c
index c9091e6..0993ad9 100644
--- a/Mac/Modules/list/Listmodule.c
+++ b/Mac/Modules/list/Listmodule.c
@@ -58,6 +58,7 @@
 typedef struct ListObject {
 	PyObject_HEAD
 	ListHandle ob_itself;
+	int ob_must_be_disposed;
 } ListObject;
 
 PyObject *ListObj_New(itself)
@@ -71,6 +72,7 @@
 	it = PyObject_NEW(ListObject, &List_Type);
 	if (it == NULL) return NULL;
 	it->ob_itself = itself;
+	it->ob_must_be_disposed = 1;
 	return (PyObject *)it;
 }
 ListObj_Convert(v, p_itself)
@@ -89,7 +91,7 @@
 static void ListObj_dealloc(self)
 	ListObject *self;
 {
-	LDispose(self->ob_itself);
+	if (self->ob_must_be_disposed && self->ob_itself) LDispose(self->ob_itself);
 	PyMem_DEL(self);
 }
 
@@ -686,22 +688,22 @@
 	PyObject *_args;
 {
 	PyObject *_res = NULL;
-	ListHandle _rv;
+
 	Handle h;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      ResObj_Convert, &h))
+	ListObject *l;
+	if (!PyArg_ParseTuple(_args, "O&", ResObj_Convert, &h))
 		return NULL;
-	_rv = as_List(h);
-	_res = Py_BuildValue("O&",
-	                     ListObj_New, _rv);
-	return _res;
+	l = (ListObject *)ListObj_New(as_List(h));
+	l->ob_must_be_disposed = 0;
+	return Py_BuildValue("O", l);
+
 }
 
 static PyMethodDef List_methods[] = {
 	{"LNew", (PyCFunction)List_LNew, 1,
 	 "(Rect rView, Rect dataBounds, Point cSize, short theProc, WindowPtr theWindow, Boolean drawIt, Boolean hasGrow, Boolean scrollHoriz, Boolean scrollVert) -> (ListHandle _rv)"},
 	{"as_List", (PyCFunction)List_as_List, 1,
-	 "(Handle h) -> (ListHandle _rv)"},
+	 "(Resource)->List.\nReturns List object (which is not auto-freed!)"},
 	{NULL, NULL, 0}
 };
 
diff --git a/Mac/Modules/list/listsupport.py b/Mac/Modules/list/listsupport.py
index 4fd7d7e..eca08cb 100644
--- a/Mac/Modules/list/listsupport.py
+++ b/Mac/Modules/list/listsupport.py
@@ -83,13 +83,23 @@
 
 
 class MyObjectDefinition(GlobalObjectDefinition):
+
+	def outputStructMembers(self):
+		ObjectDefinition.outputStructMembers(self)
+		Output("int ob_must_be_disposed;")
+
 	def outputCheckNewArg(self):
 		Output("""if (itself == NULL) {
 					PyErr_SetString(List_Error,"Cannot create null List");
 					return NULL;
 				}""")
+				
+	def outputInitStructMembers(self):
+		ObjectDefinition.outputInitStructMembers(self)
+		Output("it->ob_must_be_disposed = 1;")
+
 	def outputFreeIt(self, itselfname):
-		Output("LDispose(%s);", itselfname)
+		Output("if (self->ob_must_be_disposed && %s) LDispose(%s);", itselfname, itselfname)
 		
 	def outputGetattrHook(self):
 		Output(getattrHookCode)
@@ -114,7 +124,18 @@
 execfile(INPUTFILE)
 
 # Function to convert any handle to a list and vv.
-f = Function(ListHandle, 'as_List', (Handle, 'h', InMode))
+##f = Function(ListHandle, 'as_List', (Handle, 'h', InMode))
+as_List_body = """
+Handle h;
+ListObject *l;
+if (!PyArg_ParseTuple(_args, "O&", ResObj_Convert, &h))
+	return NULL;
+l = (ListObject *)ListObj_New(as_List(h));
+l->ob_must_be_disposed = 0;
+return Py_BuildValue("O", l);
+"""
+f = ManualGenerator("as_List", as_List_body)
+f.docstring = lambda: "(Resource)->List.\nReturns List object (which is not auto-freed!)"
 functions.append(f)
 
 f = Method(Handle, 'as_Resource', (ListHandle, 'lh', InMode))