 			
 			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);
-			}
+			// objectWasDisposed() will call async instance handler if the object hasn't been seen before
+			if (objectWasDisposed(disposableParent))
+				throw new Error("registerDisposableChild(): Parent was previously disposed");
 			
 			// if this child has no owner yet...
 			if (!map_child_owner.has(disposableChild))

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

		{
			if (object == null)
				return false;
			
			// if the object has not been registered yet
			if (!d2d_owner_child.map.has(object))
			{
				// create a placeholder to prevent this code from running again
				d2d_owner_child.map.set(object, new JS.Map());
				
				// if this is an instance of an async class, call the async instance handler
				var handler:Function = Weave.getAsyncInstanceHandler(object.constructor);
				if (handler != null)
					handler(object);
			}
			
			if (object is ILinkableObject)
			{
				var cc:CallbackCollection = getCallbackCollection(object as ILinkableObject) as CallbackCollection;
				if (cc)
					return cc.wasDisposed;
			}
			
			return map_disposed.has(object);
		}
		
