 			// flag unused vertices by scanning the index buffer
 			var oldVertexIdToUsage : Vector.<Boolean> = new Vector.<Boolean>(oldNumVertices, true);
 			for (indexId = 0; indexId < numIndices; ++indexId)
-				oldVertexIdToUsage[indexData.readShort()] = true;
+				oldVertexIdToUsage[indexData.readUnsignedShort()] = true;
 			
 			// scan the flags, fix vertex buffer, and store old to new vertex id mapping
 			var oldVertexIdToNewVertexId : Vector.<uint> = new Vector.<uint>(oldNumVertices, true);

			var numVertices		: uint 	= vertexData.bytesAvailable / bytesPerVertex;
			
			for (var indexId : uint = 0; indexId < numIndices; ++indexId)
				if (indexData.readShort() >= numVertices)
					break;
			
			indexData.position = startPosition;

					for (localVertexId = 0; localVertexId < 3; ++localVertexId)
					{
						inIndices.position = (usedIndicesCount + localVertexId) << 2;
						oldVertexIds[localVertexId]	= inIndices.readUnsignedShort();
						
						var tmp : Object = usedVerticesDic[oldVertexIds[localVertexId]];
						
