 			{
 				_searchString = value;
 				_searchRegExp = strToRegExp(value);
-				_cachedLookup = new Dictionary(true);
+				_xmlNodeLookup = new Dictionary(true);
 				getCallbackCollection(this).triggerCallbacks();
 			}
 		}

		private var _searchRegExp:RegExp = null; // used for local comparisons
		
		private var _entityCacheSearchResults:Dictionary = new Dictionary(true); // EntityCache -> SearchResults
		private var _cachedLookup:Dictionary = new Dictionary(true); // node -> true
		
		/**
		 * Set this to true to include all descendants of matching nodes

			}
			
			var xen:XMLEntityNode = node as XMLEntityNode;
			if (xen)
			{
				if (detectLinkableObjectChange(this, xen.getDataSource()))
					_xmlNodeLookup = new Dictionary(true);
				
				lookup = _xmlNodeLookup[xen];
				if (lookup)
					return !!(lookup & SearchResults.LOOKUP_MATCH_OR_ANCESTOR)
						|| (_includeAllDescendants && (lookup & SearchResults.LOOKUP_DESCENDANT));
			
				if (_searchRegExp.test(xen.xml.attribute(_searchField)))
				{
					_xmlNodeLookup[xen] |= SearchResults.LOOKUP_MATCH_OR_ANCESTOR;
					_cacheXMLDescendants(xen);
					return true;
				}
			}

			// see if there are any matching descendants
			if (!node.isBranch())
			{
				if (xen)
					_xmlNodeLookup[xen] |= SearchResults.LOOKUP_VISITED;
				return false;
			}
			var children:Array = xen ? xen.getChildrenExt() : node.getChildren();
			if (children && children.filter(arrayFilter).length)
			{
				if (xen)
					_xmlNodeLookup[xen] |= SearchResults.LOOKUP_MATCH_OR_ANCESTOR;
				return true;
			}
			if (xen)
				_xmlNodeLookup[xen] |= SearchResults.LOOKUP_VISITED;
			return false;
		}
		
		private function _cacheXMLDescendants(xen:XMLEntityNode):void
		{
			_xmlNodeLookup[xen] |= SearchResults.LOOKUP_DESCENDANT;
			for each (var child:IWeaveTreeNode in xen.getChildrenExt())
			{
				var xc:XMLEntityNode = child as XMLEntityNode;
