 		/**
 		 * Cached WeaveTreeItems that are auto-generated when they are accessed
 		 */
-		private var d2d_object_name_tree:Dictionary2D = new Dictionary2D(true, false, WeaveTreeItemExt);
+		private var d2d_object_name_tree:Dictionary2D = new Dictionary2D(true, false, WeaveTreeItem);
 		
 		/**
 		 * @param root The linkable object to be placed at the root node of the tree.
 		 * @param objectName The label for the root node.
 		 * @return A tree of nodes with the properties "data", "label", "children"
 		 */
-		public function getSessionStateTree(root:ILinkableObject, objectName:String):/*/WeaveTreeItem & IWeaveTreeNode/*/WeaveTreeItem
+		public function getSessionStateTree(root:ILinkableObject, objectName:String):WeaveTreeItem
 		{
 			if (!root)
 				return null;

		}
	}
}

import weavejs.api.data.IWeaveTreeNode;
import weavejs.util.WeaveTreeItem;

internal class WeaveTreeItemExt extends WeaveTreeItem implements IWeaveTreeNode
{
	public function equals(other:IWeaveTreeNode):Boolean
	{
		var otherExt:WeaveTreeItemExt = other as WeaveTreeItemExt;
		return this.data == otherExt.data;
	}

	public function getLabel():String
	{
		return this.label;
	}

	public function isBranch():Boolean
	{
		return this.children != null;
	}

	public function hasChildBranches():Boolean
	{
		for each (var child:WeaveTreeItemExt in this.children)
			if (child.isBranch())
				return true;
		return false;
	}

	public function getChildren():Array/*/<IWeaveTreeNode>/*/
	{
		return this.children;
	}
}

	import weavejs.api.core.ILinkableObjectWithNewProperties;
	import weavejs.api.core.ILinkableVariable;
	import weavejs.api.core.ISessionManager;
	import weavejs.util.Dictionary2D;
	import weavejs.util.JS;
	import weavejs.util.StandardLib;
	import weavejs.util.WeavePromise;
