public List<FsNode> getNodesFilteredAndSorted(String searchkey,String sortkey,String direction) {
		List<FsNode> cresult = QueryCache.get(searchkey+sortkey+direction);
		if (cresult!=null) return cresult;
		
		ArrayList<FSSortNode> result = new ArrayList<FSSortNode>();
		List<String> searchkeys = smartSplit(searchkey);
		
		for(Iterator<FsNode> iter = nodes.iterator() ; iter.hasNext(); ) {
			FsNode n = (FsNode)iter.next();	
						
			if (matcher(n,searchkeys)) {
				String sv=n.getProperty(sortkey);
				if (sv==null) sv = "";
				result.add(new FSSortNode(n,sv,direction));
			}
		}
		Collections.sort(result);
		
		List<FsNode> endresult = new ArrayList<FsNode>();
		for(Iterator<FSSortNode> iter = result.iterator() ; iter.hasNext(); ) {
			FSSortNode n = (FSSortNode)iter.next();	
			endresult.add(n.node);
		}
		QueryCache.put(searchkey+sortkey+direction, endresult);
		return endresult;
	}