public Iterator<BxTreeEntry> find(int from, final int to, boolean includeFrom, final boolean includeTo) {
		final Iterator<BxTreeEntry> baseIter = root.find(from, includeFrom); // >(or >=) from iterator
		
		return new Iterator<BxTreeEntry>() {
			private BxTreeEntry entry = getNext();
			@Override
			public BxTreeEntry next() {
				if(!hasNext()) {
					throw new IllegalStateException();
				}
				BxTreeEntry old = entry;
				entry = getNext();
				return old;
			}
			
			private BxTreeEntry getNext() {
				if(baseIter.hasNext()) {
					BxTreeEntry val = baseIter.next();
					if((includeTo && val.key <= to) || (!includeTo && val.key < to)) {
						return val;
					}
				}
				return null;
			}

			@Override
			public boolean hasNext() {
				return entry != null;
			}

			@Override
			public void remove() {
				throw new RuntimeException();
			}
		};
	}