 				}
 				for each (var name:String in names)
 				{
-					childObject = object[name || 'internalObject'];
+					if (object is ILinkableDynamicObject)
+						childObject = (object as ILinkableDynamicObject).internalObject;
+					else
+						childObject = object[name];
 					if (!childObject)
 						continue;
 					if (/* object is ILinkableDynamicObject ||  */childToParentDictionaryMap[childObject] && childToParentDictionaryMap[childObject][object])

						// get subtree
						tempObject = getSessionStateTree(childObject, name, objectTypeFilter);
						if (tempObject != null)
							result.children.push(tempObject);
					}
				}
			}
			
			if (result.children.length == 0)
				result.children = null;
			if (objectTypeFilter == null)
				return result;
			if (result.children == null && !(object is objectTypeFilter))
				return null;
			return result;
		}

		{
			return childToOwnerMap[child] as ILinkableObject;
		}
		
		public static const TREE_LABEL:String = 'label';
		public static const TREE_OBJECT:String = 'object';
		public static const TREE_CHILDREN:String = 'children';

		/**
		 * @param root The linkable object to be placed at the root node of the tree.
