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))
