diff --git a/vtm/src/org/oscim/utils/quadtree/BoxTree.java b/vtm/src/org/oscim/utils/quadtree/BoxTree.java
index 2fd4c468..cde709cc 100644
--- a/vtm/src/org/oscim/utils/quadtree/BoxTree.java
+++ b/vtm/src/org/oscim/utils/quadtree/BoxTree.java
@@ -12,34 +12,32 @@ import org.slf4j.LoggerFactory;
  * 
  * ... in case this generic isnt obvious at first sight.
  * */
-public abstract class BoxTree<Box extends BoxItem<E>, E>
-        extends QuadTree<BoxNode<Box>, Box> {
+public abstract class BoxTree<Box extends BoxItem<E>, E> extends QuadTree<BoxNode<Box>, Box> {
 
 	final static Logger log = LoggerFactory.getLogger(BoxTree.class);
 	static boolean dbg = false;
 
-	int extents;
-	int maxDepth;
+	protected final int extents;
+	protected final int maxDepth;
 
 	public static class BoxNode<T extends BoxItem<?>> extends Node<BoxNode<T>, T> {
 		// for non-recursive traversal
 		BoxNode<T> next;
-		public int x;
-		public int y;
-		public int size;
+		// TODO make final? or update to the actual used extent?
+		public int x1;
+		public int y1;
+		public int x2;
+		public int y2;
 
 		//BoxItem<T> list;
 
 		public boolean overlaps(T it) {
-			return (x < it.x2) &&
-			        (y < it.y2) &&
-			        (it.x1 < x + size) &&
-			        (it.y1 < y + size);
+			return (x1 < it.x2) && (y1 < it.y2) && (it.x1 < x2) && (it.y1 < y2);
 		}
 
 		@Override
 		public String toString() {
-			return x + ":" + y + ":" + size;
+			return x1 + ":" + y1 + ":" + (x2 - x1);
 		}
 	}
 
@@ -68,10 +66,7 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 		public int y2;
 
 		public boolean overlaps(BoxItem<T> it) {
-			return (x1 < it.x2)
-			        && (it.x1 < x2)
-			        && (y1 < it.y2)
-			        && (it.y1 < y2);
+			return (x1 < it.x2) && (it.x1 < x2) && (y1 < it.y2) && (it.y1 < y2);
 		}
 	}
 
@@ -92,9 +87,10 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 	public BoxTree(int extents, int maxDepth) {
 		super();
 		// size is -extents to +extents
-		this.root.size = extents * 2;
-		this.root.x = -extents;
-		this.root.y = -extents;
+		this.root.x1 = -extents;
+		this.root.y1 = -extents;
+		this.root.x2 = extents;
+		this.root.y2 = extents;
 
 		this.extents = extents;
 		this.maxDepth = maxDepth;
@@ -132,7 +128,6 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 
 		boolean drop = false;
 
-		//O: 
 		while (stack != null) {
 
 			/** pop cur from stack */
@@ -173,30 +168,36 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 			}
 
 			/** put children on stack which overlap with box */
-			if ((c = cur.child00) != null && c.overlaps(box)) {
+			if ((c = cur.child00) != null &&
+			        (x1 < c.x2) && (y1 < c.y2) &&
+			        (c.x1 < x2) && (c.y1 < y2)) {
 				c.next = stack;
 				stack = c;
 			}
-
-			if ((c = cur.child01) != null && c.overlaps(box)) {
+			if ((c = cur.child01) != null &&
+			        (x1 < c.x2) && (y1 < c.y2) &&
+			        (c.x1 < x2) && (c.y1 < y2)) {
 				c.next = stack;
 				stack = c;
 			}
-
-			if ((c = cur.child10) != null && c.overlaps(box)) {
+			if ((c = cur.child10) != null &&
+			        (x1 < c.x2) && (y1 < c.y2) &&
+			        (c.x1 < x2) && (c.y1 < y2)) {
 				c.next = stack;
 				stack = c;
 			}
-
-			if ((c = cur.child11) != null && c.overlaps(box)) {
+			if ((c = cur.child11) != null &&
+			        (x1 < c.x2) && (y1 < c.y2) &&
+			        (c.x1 < x2) && (c.y1 < y2)) {
 				c.next = stack;
 				stack = c;
 			}
 		}
 
 		/** dont keep dangling references */
-		while (stack != null)
-			stack = stack.next;
+		/* gwt optimizer found this cannot be reached :) */
+		//while (stack != null)
+		//	stack = stack.next;
 
 		return drop ? 1 : 0;
 	}
@@ -248,10 +249,9 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 
 	public BoxNode<Box> create(BoxNode<Box> parent, int i) {
 		BoxNode<Box> node = new BoxNode<Box>();
-		int size = parent.size >> 1;
-		node.x = parent.x;
-		node.y = parent.y;
-		node.size = size;
+		int size = (parent.x2 - parent.x1) >> 1;
+		node.x1 = parent.x1;
+		node.y1 = parent.y1;
 
 		if (i == 0) {
 			// top-left
@@ -259,18 +259,21 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 		} else if (i == 1) {
 			// bottom-left
 			parent.child10 = node;
-			node.y += size;
+			node.y1 += size;
 		} else if (i == 2) {
 			// top-right
 			parent.child01 = node;
-			node.x += size;
+			node.x1 += size;
 		} else {
 			// bottom-right
 			parent.child11 = node;
-			node.x += size;
-			node.y += size;
+			node.x1 += size;
+			node.y1 += size;
 		}
 
+		node.x2 = node.x1 + size;
+		node.y2 = node.y1 + size;
+
 		node.parent = parent;
 
 		return node;
@@ -294,13 +297,13 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 		for (int level = 0; level <= maxDepth; level++) {
 			// half size of tile at current z
 			//int hsize = (extents >> level);
-			int hsize = cur.size >> 1;
+			int hsize = (cur.x2 - cur.x1) >> 1;
 
 			// center of tile (shift by -extents)
 			//int cx = px + hsize - extents;
 			//int cy = py + hsize - extents;
-			int cx = cur.x + hsize;
-			int cy = cur.y + hsize;
+			int cx = cur.x1 + hsize;
+			int cy = cur.y1 + hsize;
 
 			child = null;
 			//int childPos = -1;
@@ -330,9 +333,11 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 					idY++;
 				}
 			}
-
 			//log.debug("child {}", child);
 
+			if (cur == minNode && child != null)
+				minNode = cur;
+
 			if (child == null || level == maxDepth) {
 				// push item onto list of this node
 				box.next = cur.item;
@@ -342,7 +347,6 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 					log.debug("insert at: " + level + " / " + idX + ":"
 					        + idY + " -- " + x1 + ":" + y1
 					        + " /" + (x2) + "x" + (y2));
-
 				break;
 			}
 			cur = child;
@@ -350,6 +354,11 @@ public abstract class BoxTree<Box extends BoxItem<E>, E>
 
 	}
 
+	public void setMinNode(int x1, int y1, int x2, int y2) {
+		/* TODO find lowest node that fully contains the region
+		 * and set it as start for following queries */
+	}
+
 	public abstract boolean process(BoxNode<Box> nodes);
 
 	public void clear() {
diff --git a/vtm/src/org/oscim/utils/quadtree/QuadTree.java b/vtm/src/org/oscim/utils/quadtree/QuadTree.java
index 6029f2df..37d59e0b 100644
--- a/vtm/src/org/oscim/utils/quadtree/QuadTree.java
+++ b/vtm/src/org/oscim/utils/quadtree/QuadTree.java
@@ -23,6 +23,8 @@ public abstract class QuadTree<T extends Node<T, E>, E> {
 
 	protected final T root;
 
+	protected T minNode;
+
 	protected T pool;
 
 	public QuadTree() {