diff --git a/Include/pymactoolbox.h b/Include/pymactoolbox.h
index 16f7352..2286ebe 100644
--- a/Include/pymactoolbox.h
+++ b/Include/pymactoolbox.h
@@ -106,6 +106,7 @@
 
 /* AE exports */
 extern PyObject *AEDesc_New(AppleEvent *); /* XXXX Why passed by address?? */
+extern PyObject *AEDesc_NewBorrowed(AppleEvent *);
 extern int AEDesc_Convert(PyObject *, AppleEvent *);
 
 /* Cm exports */
diff --git a/Mac/Modules/ae/_AEmodule.c b/Mac/Modules/ae/_AEmodule.c
index bcb24a7..c5445dc 100644
--- a/Mac/Modules/ae/_AEmodule.c
+++ b/Mac/Modules/ae/_AEmodule.c
@@ -35,6 +35,7 @@
 extern int _AEDesc_Convert(PyObject *, AEDesc *);
 
 #define AEDesc_New _AEDesc_New
+#define AEDesc_NewBorrowed _AEDesc_NewBorrowed
 #define AEDesc_Convert _AEDesc_Convert
 #endif
 
@@ -70,6 +71,7 @@
 typedef struct AEDescObject {
 	PyObject_HEAD
 	AEDesc ob_itself;
+	int ob_owned;
 } AEDescObject;
 
 PyObject *AEDesc_New(AEDesc *itself)
@@ -78,6 +80,7 @@
 	it = PyObject_NEW(AEDescObject, &AEDesc_Type);
 	if (it == NULL) return NULL;
 	it->ob_itself = *itself;
+	it->ob_owned = 1;
 	return (PyObject *)it;
 }
 int AEDesc_Convert(PyObject *v, AEDesc *p_itself)
@@ -93,7 +96,7 @@
 
 static void AEDesc_dealloc(AEDescObject *self)
 {
-	AEDisposeDesc(&self->ob_itself);
+	if (self->ob_owned) AEDisposeDesc(&self->ob_itself);
 	self->ob_type->tp_free((PyObject *)self);
 }
 
@@ -759,6 +762,20 @@
 	return _res;
 }
 
+static PyObject *AEDesc_AutoDispose(AEDescObject *_self, PyObject *_args)
+{
+	PyObject *_res = NULL;
+
+	int onoff, old;
+	if (!PyArg_ParseTuple(_args, "i", &onoff))
+	        return NULL;
+	old = _self->ob_owned;
+	_self->ob_owned = onoff;
+	_res = Py_BuildValue("i", old);
+	return _res;
+
+}
+
 static PyMethodDef AEDesc_methods[] = {
 	{"AECoerceDesc", (PyCFunction)AEDesc_AECoerceDesc, 1,
 	 PyDoc_STR("(DescType toType) -> (AEDesc result)")},
@@ -816,6 +833,8 @@
 	 PyDoc_STR("() -> None")},
 	{"AEResolve", (PyCFunction)AEDesc_AEResolve, 1,
 	 PyDoc_STR("(short callbackFlags) -> (AEDesc theToken)")},
+	{"AutoDispose", (PyCFunction)AEDesc_AutoDispose, 1,
+	 PyDoc_STR("(int)->int. Automatically AEDisposeDesc the object on Python object cleanup")},
 	{NULL, NULL, 0}
 };
 
@@ -1413,6 +1432,17 @@
 	return noErr;
 }
 
+PyObject *AEDesc_NewBorrowed(AEDesc *itself)
+{
+	PyObject *it;
+	
+	it = AEDesc_New(itself);
+	if (it)
+		((AEDescObject *)it)->ob_owned = 0;
+	return (PyObject *)it;
+}
+
+
 
 void init_AE(void)
 {
@@ -1424,6 +1454,7 @@
 		upp_AEIdleProc = NewAEIdleUPP(AEIdleProc);
 		upp_GenericEventHandler = NewAEEventHandlerUPP(GenericEventHandler);
 		PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_New);
+		PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_NewBorrowed);
 		PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc, AEDesc_Convert);
 
 
diff --git a/Mac/Modules/ae/aesupport.py b/Mac/Modules/ae/aesupport.py
index 16b9c5d..89a571b 100644
--- a/Mac/Modules/ae/aesupport.py
+++ b/Mac/Modules/ae/aesupport.py
@@ -97,6 +97,7 @@
 extern int _AEDesc_Convert(PyObject *, AEDesc *);
 
 #define AEDesc_New _AEDesc_New
+#define AEDesc_NewBorrowed _AEDesc_NewBorrowed
 #define AEDesc_Convert _AEDesc_Convert
 #endif
 
@@ -155,12 +156,24 @@
 	Py_DECREF(res);
 	return noErr;
 }
+
+PyObject *AEDesc_NewBorrowed(AEDesc *itself)
+{
+	PyObject *it;
+	
+	it = AEDesc_New(itself);
+	if (it)
+		((AEDescObject *)it)->ob_owned = 0;
+	return (PyObject *)it;
+}
+
 """
 
 initstuff = initstuff + """
 	upp_AEIdleProc = NewAEIdleUPP(AEIdleProc);
 	upp_GenericEventHandler = NewAEEventHandlerUPP(GenericEventHandler);
 	PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_New);
+	PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_NewBorrowed);
 	PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc, AEDesc_Convert);
 """
 
@@ -197,8 +210,16 @@
 		GlobalObjectDefinition.__init__(self, name, prefix or name, itselftype or name)
 		self.argref = "*"
 
-	def outputFreeIt(self, name):
-		Output("AEDisposeDesc(&%s);", name)
+	def outputStructMembers(self):
+		GlobalObjectDefinition.outputStructMembers(self)
+		Output("int ob_owned;")
+		
+	def outputInitStructMembers(self):
+		GlobalObjectDefinition.outputInitStructMembers(self)
+		Output("it->ob_owned = 1;")
+		
+	def outputCleanupStructMembers(self):
+		Output("if (self->ob_owned) AEDisposeDesc(&self->ob_itself);")
 
 aedescobject = AEDescDefinition('AEDesc')
 module.addobject(aedescobject)
@@ -209,6 +230,20 @@
 execfile('aegen.py')
 ##execfile('aedatamodelgen.py')
 
+# Manual generator
+AutoDispose_body = """
+int onoff, old;
+if (!PyArg_ParseTuple(_args, "i", &onoff))
+        return NULL;
+old = _self->ob_owned;
+_self->ob_owned = onoff;
+_res = Py_BuildValue("i", old);
+return _res;
+"""
+f = ManualGenerator("AutoDispose", AutoDispose_body)
+f.docstring = lambda: "(int)->int. Automatically AEDisposeDesc the object on Python object cleanup"
+aedescmethods.append(f)
+
 for f in functions: module.add(f)
 for f in aedescmethods: aedescobject.add(f)
 
diff --git a/Python/mactoolboxglue.c b/Python/mactoolboxglue.c
index 3dfd699..16ed3b5 100644
--- a/Python/mactoolboxglue.c
+++ b/Python/mactoolboxglue.c
@@ -534,6 +534,7 @@
 GLUE_CONVERT(FSRef, PyMac_GetFSRef, "macfs")
 
 GLUE_NEW(AppleEvent *, AEDesc_New, "Carbon.AE") /* XXXX Why by address? */
+GLUE_NEW(AppleEvent *, AEDesc_NewBorrowed, "Carbon.AE")
 GLUE_CONVERT(AppleEvent, AEDesc_Convert, "Carbon.AE")
 
 GLUE_NEW(Component, CmpObj_New, "Carbon.Cm")
