 				return;
 			}
 			
-			var weave:Weave = Weave.getWeave(this);
-			var root:ILinkableObject = weave ? weave.root : Weave.getRoot(this);
 			_foundRoot = root != null;
 			if (!_foundRoot && !_warned)
 			{
-				var error:Error = new Error("LinkableWatcher has a targetPath but has not been registered with an instance of Weave");
+				var error:Error = new Error("LinkableWatcher has a targetPath but no root");
 				WeaveAPI.Scheduler.callLater(this, function():void {
-					if (!_foundRoot && !Weave.getWeave(this))
+					if (!_foundRoot && !root)
 						JS.error("Warning:", error);
 				});
 				_warned = true;
 			}
-			var node:ILinkableObject = Weave.followPath(root, _targetPath);
+			var node:ILinkableObject = Weave.followPath(_root, _targetPath);
 			if (!node)
 			{
 				// traverse the path, finding ILinkableDynamicObject path dependencies along the way
-				node = root;
+				node = _root;
 				var subPath:Array = [];
 				for each (var name:* in _targetPath)
 				{

		private var _warned:Boolean = false; // true after warning has been shown
		
		/**
		 * This is the linkable object currently being watched.
		 * Setting this will unset the targetPath.
		 */		
		public function get target():ILinkableObject
		{
			if (!_foundRoot && !_foundTarget)

		 */
		public function set targetPath(path:Array/*/<string|number>/*/):void
		{
			// do not allow watching the root object
			if (path && path.length == 0)
				path = null;
			if (StandardLib.compare(_targetPath, path) != 0)
