 					kdKey[XMAX_INDEX] = stream.readDouble();
 					kdKey[YMAX_INDEX] = stream.readDouble();
 					kdKey[IMAX_INDEX] = stream.readFloat();
-					//trace((tileTree == metadataTiles ? "metadata tile" : "geometry tile") + " " + tileID + "[" + kdKey + "]");
-					tile = new TileDescriptor(kdKey, tileID);
-					tiles.push(tile);
+					if (debug)
+						trace((tileTree == metadataTiles ? "metadata tile" : "geometry tile") + " " + tileID + "[" + kdKey + "]");
+					tiles.push(new TileDescriptor(kdKey, tileID));
 					collectiveBounds.includeCoords(kdKey[XMIN_INDEX], kdKey[YMIN_INDEX]);
 					collectiveBounds.includeCoords(kdKey[XMAX_INDEX], kdKey[YMAX_INDEX]);
 					tileID++;

			// poorly-performing KDTree structure due to the given ordering.
			VectorUtils.randomSort(tiles);
			// insert tileDescriptors into tree
			var node:KDNode;
			var tileDescriptor:TileDescriptor;
			for each (tile in tiles)
			{
				// insert a new node in the tree, mapping kdKey to tile
				tileTree.insert(tile.kdKey, tile);
				// save mapping from tile ID to TileDescriptor so it can be excluded later
				tileLookup.set(tileTree, tileID, tile);
			}

			// collective bounds changed

	 */
	public class GeometryStreamDecoder implements ILinkableObject
	{
		public static var debug:Boolean = true;
		public var totalGeomTiles:int = 0;
		public var totalVertices:int = 0;
		
