diff --git a/vtm/src/org/oscim/layers/tile/TileRenderer.java b/vtm/src/org/oscim/layers/tile/TileRenderer.java
index 8e948511..bb631aa2 100644
--- a/vtm/src/org/oscim/layers/tile/TileRenderer.java
+++ b/vtm/src/org/oscim/layers/tile/TileRenderer.java
@@ -349,31 +349,41 @@ public abstract class TileRenderer extends LayerRenderer {
 		}
 	};
 
-	protected long getMinFade(MapTile t) {
+	protected long getMinFade(MapTile t, int proxyLevel) {
 		long minFade = MapRenderer.frametime - 50;
+		if (proxyLevel <= 0) {
+			for (int c = 0; c < 4; c++) {
+				MapTile ci = t.node.child(c);
+				if (ci == null)
+					continue;
 
-		for (int c = 0; c < 4; c++) {
-			MapTile ci = t.node.child(c);
-			if (ci == null)
-				continue;
+				if (ci.fadeTime > 0 && ci.fadeTime < minFade)
+					minFade = ci.fadeTime;
 
-			if (ci.state == READY || ci.fadeTime > 0)
-				minFade = Math.min(minFade, ci.fadeTime);
+				/* when drawing the parent of the current level
+				 * we also check if the children of current level
+				 * are visible */
+				if (proxyLevel > -2) {
+					long m = getMinFade(ci, proxyLevel - 1);
+					if (m < minFade)
+						minFade = m;
+				}
+			}
 		}
-		MapTile p = t.node.parent();
-
-		if (p == null)
-			return minFade;
-		if (p.state == READY || p.fadeTime > 0)
-			minFade = Math.min(minFade, p.fadeTime);
-
-		p = p.node.parent();
-		if (p == null)
-			return minFade;
-
-		if (p.state == READY || p.fadeTime > 0)
-			minFade = Math.min(minFade, p.fadeTime);
+		if (proxyLevel >= -1) {
+			MapTile p = t.node.parent();
+			if (p != null) {
+				if (p.fadeTime > 0 && p.fadeTime < minFade)
+					minFade = p.fadeTime;
 
+				if (proxyLevel >= 0) {
+					if ((p = p.node.parent()) != null) {
+						if (p.fadeTime > 0 && p.fadeTime < minFade)
+							minFade = p.fadeTime;
+					}
+				}
+			}
+		}
 		return minFade;
 	}
 }
diff --git a/vtm/src/org/oscim/layers/tile/VectorTileRenderer.java b/vtm/src/org/oscim/layers/tile/VectorTileRenderer.java
index 48f95ce9..c9ee7c2a 100644
--- a/vtm/src/org/oscim/layers/tile/VectorTileRenderer.java
+++ b/vtm/src/org/oscim/layers/tile/VectorTileRenderer.java
@@ -70,7 +70,7 @@ public class VectorTileRenderer extends TileRenderer {
 		for (int i = 0; i < tileCnt; i++) {
 			MapTile t = tiles[i];
 			if (t.isVisible && t.state == READY)
-				drawTile(t, v);
+				drawTile(t, v, 0);
 
 		}
 
@@ -111,7 +111,7 @@ public class VectorTileRenderer extends TileRenderer {
 
 	}
 
-	private void drawTile(MapTile tile, GLViewport v) {
+	private void drawTile(MapTile tile, GLViewport v, int proxyLevel) {
 		/* ensure to draw parents only once */
 		if (tile.lastDraw == mDrawSerial)
 			return;
@@ -188,7 +188,7 @@ public class VectorTileRenderer extends TileRenderer {
 		}
 
 		if (t.fadeTime == 0)
-			t.fadeTime = getMinFade(t);
+			t.fadeTime = getMinFade(t, proxyLevel);
 
 		if (debugOverdraw) {
 			if (t.zoomLevel > pos.zoomLevel)
@@ -219,7 +219,7 @@ public class VectorTileRenderer extends TileRenderer {
 			MapTile c = tile.node.child(i);
 
 			if (c.state == READY) {
-				drawTile(c, v);
+				drawTile(c, v, 1);
 				drawn++;
 			}
 		}
@@ -243,7 +243,7 @@ public class VectorTileRenderer extends TileRenderer {
 					proxy = r.parent.item;
 					if (proxy.state == READY) {
 						//log.debug("1. draw parent " + proxy);
-						drawTile(proxy, v);
+						drawTile(proxy, v, -1);
 					}
 				}
 			} else if ((tile.proxies & MapTile.PROXY_GRAMPA) != 0) {
@@ -256,7 +256,7 @@ public class VectorTileRenderer extends TileRenderer {
 
 				proxy = r.parent.parent.item;
 				if (proxy.state == READY)
-					drawTile(proxy, v);
+					drawTile(proxy, v, -2);
 			}
 		} else {
 			/* prefer drawing parent */
@@ -265,7 +265,7 @@ public class VectorTileRenderer extends TileRenderer {
 					proxy = r.parent.item;
 					if (proxy != null && proxy.state == READY) {
 						//log.debug("2. draw parent " + proxy);
-						drawTile(proxy, v);
+						drawTile(proxy, v, -1);
 						return;
 
 					}
@@ -285,7 +285,7 @@ public class VectorTileRenderer extends TileRenderer {
 
 				proxy = r.parent.parent.item;
 				if (proxy.state == READY)
-					drawTile(proxy, v);
+					drawTile(proxy, v, -2);
 			}
 		}
 	}