 			// delete marked entities
 			var deleted:Boolean = false;
 			var idsToRemove:Array = [];
-			for (id in delete_later)
+			for (id in idsToDelete)
 				idsToRemove.push(id);
 			
 			if (idsToRemove.length)
 			{
 				addAsyncResponder(Admin.service.removeEntities(idsToRemove), handleRemoveEntities);
-				delete_later = {};
+				idsToDelete = {};
 			}
 			
 			// request invalidated entities
 			var ids:Array = [];
-			for (id in cache_dirty)
+			for (id in idsToFetch)
 			{
 				// when requesting root, also request data table list
 				if (id == ROOT_ID)
 				{
-					delete cache_dirty[id];
+					delete idsToFetch[id];
 					addAsyncResponder(Admin.service.getEntityHierarchyInfo(EntityType.TABLE), handleEntityHierarchyInfo, null, EntityType.TABLE);
 					addAsyncResponder(Admin.service.getEntityHierarchyInfo(EntityType.HIERARCHY), handleEntityHierarchyInfo, null, EntityType.HIERARCHY);
 				}

			// remove from root not supported, but invalidate root anyway in case the child is added via add_child later
			if (parent_id == ROOT_ID)
			{
				delete_later[child_id] = true;
				invalidate(ROOT_ID);
			}
			else

		{
			callbacks.delayCallbacks();
			
			// trigger callbacks if we haven't previously decided to fetch this id
			if (!idsToFetch[id])
				callbacks.triggerCallbacks();
			
			idsDirty[id] = false;
			idsToFetch[id] = true;
			
			if (!entityCache[id])
			{
				var entity:Entity = new Entity();
				entityCache[id] = entity;
			}
			
			if (alsoInvalidateParents)
			{
				var parents:Array = (entityCache[id] as Entity).parentIds;
				if (parents && parents.length)
				{
					for each (var parentId:* in parents)
