if (al instanceof VirtualNodeSet) return super.selectParentChild(al, mode, contextId);
    public NodeSet selectParentChild(NodeSet al, int mode, int contextId) {    	sort();    	return getDescendantsInSet(al, true, false, mode, contextId);//    	return hasChildrenInSet(al, mode, contextId);//        return super.selectParentChild(al, mode, contextId);    	//    	if (al instanceof VirtualNodeSet)//    		return super.selectParentChild(al, mode, contextId);//    	NodeSet result = new ExtArrayNodeSet();//		NodeSetIterator ia = al.iterator();//		NodeProxy na = (NodeProxy) ia.next();//		if (na == null || partCount == 0)//			return NodeSet.EMPTY_SET;//		int currentPart = 0;//		while (currentPart < partCount) {//			// first, try to find nodes belonging to the same doc//			if (na.getDocument().getDocId() < documentIds[currentPart]) {//				if (ia.hasNext()) {//					na = (NodeProxy) ia.next();//                } else//					break;//			} else if (na.getDocument().getDocId() > documentIds[currentPart]) {//				++currentPart;//			} else {//				parts[currentPart].selectParentChild(result, na, ia, mode, contextId);//				++currentPart;//			}//		}//		return result;    }