 			var objectCC:ICallbackCollection = map_ILinkableObject_ICallbackCollection.get(linkableObject);
 			if (objectCC == null)
 			{
-				objectCC = registerDisposableChild(linkableObject, new CallbackCollection());
+				objectCC = new CallbackCollection();
 				if (WeaveAPI.debugAsyncStack)
 					(objectCC as CallbackCollection)._linkableObject = linkableObject;
 				map_ILinkableObject_ICallbackCollection.set(linkableObject, objectCC);
 				map_ICallbackCollection_ILinkableObject.set(objectCC, linkableObject);
+				
+				registerDisposableChild(linkableObject, objectCC);
 			}
 			return objectCC;
 		}

			
			var handler:Function;
			
			// if the parent has not been registered yet
			if (!d2d_owner_child.map.has(disposableParent))
			{
				// if this is an instance of an async class, call the async instance handler
				handler = Weave.getAsyncInstanceHandler(disposableParent.constructor);
				if (handler != null)
					handler(disposableParent);
			}
			
			// if this child has no owner yet...
			if (!map_child_owner.has(disposableChild))

				// make this first parent the owner
				map_child_owner.set(disposableChild, disposableParent);
				d2d_owner_child.set(disposableParent, disposableChild, true);
				
				// objectWasDisposed() will call async instance handler if the object hasn't been seen before
				if (objectWasDisposed(disposableChild))
					throw new Error("registerDisposableChild(): Child was previously disposed");
				
				// if this is an instance of an async class, call the async instance handler
				handler = Weave.getAsyncInstanceHandler(disposableChild.constructor);
