 
 package weave.core
 {
-	import flash.utils.Dictionary;
-	
 	import weave.api.core.ICallbackCollection;
 	import weave.api.core.IDisposableObject;
+	import weave.api.core.ILinkableCompositeObject;
 	import weave.api.core.ILinkableDynamicObject;
 	import weave.api.core.ILinkableHashMap;
 	import weave.api.core.ILinkableObject;
 	import weave.api.core.ISessionManager;
 	import weave.compiler.StandardLib;
+	import weave.primitives.Dictionary2D;
 	
 	/**
 	 * This is used to dynamically attach a set of callbacks to different targets.

		private var _target:ILinkableObject; // the current target or ancestor of the to-be-target
		private var _foundTarget:Boolean = true; // false when _target is not the desired target
		protected var _targetPath:Array; // the path that is being watched
		private var _pathDependencies:Dictionary = new Dictionary(true); // Maps an ILinkableDynamicObject to its previous internalObject.
		
		/**
		 * This is the linkable object currently being watched.

			var subPath:Array = [];
			for each (var name:* in _targetPath)
			{
				if (node is ILinkableCompositeObject)
					addPathDependency(node as ILinkableCompositeObject, name);
				
				subPath[0] = name;
				var child:ILinkableObject = sm.getObject(node, subPath);
