 						if (_target != null)
 						{
 							// path dependency code will detect changes to this node
-							target = null;
+							internalSetTarget(null);
 							// must trigger here because _foundtarget is false
 							sm.getCallbackCollection(this).triggerCallbacks();
 						}
 					}
 					else
-						target = node;
+						internalSetTarget(node);
 					return;
 				}
 			}
 			
 			// we found a desired target if there is no type restriction or the object fits the restriction
 			_foundTarget = !_typeRestriction || node is _typeRestriction;
-			target = node;
+			internalSetTarget(node);
 		}
 		
 		/**

		
		/**
		 * This is the linkable object currently being watched.
		 */		
		public function get target():ILinkableObject
		{
			return _foundTarget ? _target : null;
		}
		
		/**
		 * This sets the new target to which should be watched.
		 * Callbacks will be triggered immediately if the new target is different from the old one.
		 */
		public function set target(newTarget:ILinkableObject):void
		{
			if (_foundTarget && _typeRestriction)
				newTarget = newTarget as _typeRestriction as ILinkableObject;

{
	import flash.utils.Dictionary;
	
	import weave.api.core.ICallbackCollection;
	import weave.api.core.IDisposableObject;
	import weave.api.core.ILinkableDynamicObject;
	import weave.api.core.ILinkableHashMap;
