diff --git a/vtm-extras/src/org/oscim/tiling/source/oscimap/TileDecoder.java b/vtm-extras/src/org/oscim/tiling/source/oscimap/TileDecoder.java
index 82a1e0ad..1964eccb 100644
--- a/vtm-extras/src/org/oscim/tiling/source/oscimap/TileDecoder.java
+++ b/vtm-extras/src/org/oscim/tiling/source/oscimap/TileDecoder.java
@@ -384,7 +384,7 @@ public class TileDecoder extends PbfDecoder {
 		return coordCnt;
 	}
 
-	@Override
+	//@Override
 	protected int decodeInterleavedPoints(float[] coords, float scale)
 	        throws IOException {
 
diff --git a/vtm-extras/src/org/oscim/tiling/source/oscimap2/OSciMap2TileSource.java b/vtm-extras/src/org/oscim/tiling/source/oscimap2/OSciMap2TileSource.java
index e9cf2405..63b1ce50 100644
--- a/vtm-extras/src/org/oscim/tiling/source/oscimap2/OSciMap2TileSource.java
+++ b/vtm-extras/src/org/oscim/tiling/source/oscimap2/OSciMap2TileSource.java
@@ -229,7 +229,7 @@ public class OSciMap2TileSource extends UrlTileSource {
 						}
 
 						mElem.ensurePointSize(coordCnt, false);
-						int cnt = decodeInterleavedPoints(mElem.points, mScale);
+						int cnt = decodeInterleavedPoints(mElem, mScale);
 
 						if (cnt != coordCnt) {
 							log.debug(mTile + " wrong number of coordintes");
diff --git a/vtm/src/org/oscim/core/GeometryBuffer.java b/vtm/src/org/oscim/core/GeometryBuffer.java
index 5d741e68..8593de14 100644
--- a/vtm/src/org/oscim/core/GeometryBuffer.java
+++ b/vtm/src/org/oscim/core/GeometryBuffer.java
@@ -98,7 +98,7 @@ public class GeometryBuffer {
 	}
 
 	public int getNumPoints() {
-		return index[0] >> 1;
+		return pointPos >> 1;
 	}
 
 	/**
diff --git a/vtm/src/org/oscim/tiling/source/common/PbfDecoder.java b/vtm/src/org/oscim/tiling/source/common/PbfDecoder.java
index ab7931e8..16a1b015 100644
--- a/vtm/src/org/oscim/tiling/source/common/PbfDecoder.java
+++ b/vtm/src/org/oscim/tiling/source/common/PbfDecoder.java
@@ -19,6 +19,7 @@ package org.oscim.tiling.source.common;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.oscim.core.GeometryBuffer;
 import org.oscim.tiling.source.ITileDecoder;
 import org.oscim.utils.UTF8Decoder;
 import org.slf4j.Logger;
@@ -187,9 +188,10 @@ public abstract class PbfDecoder implements ITileDecoder {
 		return buffer[bufferPos++] != 0;
 	}
 
-	protected int decodeInterleavedPoints(float[] coords, float scale)
+	protected int decodeInterleavedPoints(GeometryBuffer geom, float scale)
 	        throws IOException {
 
+		float[] points = geom.points;
 		int bytes = decodeVarint32();
 		fillBuffer(bytes);
 
@@ -229,11 +231,11 @@ public abstract class PbfDecoder implements ITileDecoder {
 
 			if (even) {
 				lastX = lastX + s;
-				coords[cnt++] = lastX / scale;
+				points[cnt++] = lastX / scale;
 				even = false;
 			} else {
 				lastY = lastY + s;
-				coords[cnt++] = lastY / scale;
+				points[cnt++] = lastY / scale;
 				even = true;
 			}
 		}
@@ -243,6 +245,8 @@ public abstract class PbfDecoder implements ITileDecoder {
 
 		bufferPos = pos;
 
+		geom.pointPos = cnt;
+
 		// return number of points read
 		return (cnt >> 1);
 	}
diff --git a/vtm/src/org/oscim/tiling/source/oscimap4/TileDecoder.java b/vtm/src/org/oscim/tiling/source/oscimap4/TileDecoder.java
index f0190751..4a5b5b58 100644
--- a/vtm/src/org/oscim/tiling/source/oscimap4/TileDecoder.java
+++ b/vtm/src/org/oscim/tiling/source/oscimap4/TileDecoder.java
@@ -298,8 +298,7 @@ public class TileDecoder extends PbfDecoder {
 					}
 
 					mElem.ensurePointSize(coordCnt, false);
-					int cnt = decodeInterleavedPoints(mElem.points,
-					                                  mScaleFactor);
+					int cnt = decodeInterleavedPoints(mElem, mScaleFactor);
 
 					if (cnt != coordCnt) {
 						log.debug("{} wrong number of coordintes {}/{}", mTile,