 			}
 			
 			// now determine the data bounds we need to covert in lat/lon
-			copyDataBounds.copyFrom(dataBounds);
+			tempDataBounds.copyFrom(dataBounds);
 			getAllowedBounds(_tempBounds);
-			_tempBounds.constrainBounds(copyDataBounds, false);
-			setReprojectedBounds(copyDataBounds, latLonCopyDataBounds, tileProjectionSRS.value, "EPSG:4326");
-			
-			var latLonViewingDataBounds:Bounds2D = latLonCopyDataBounds;
-			var tileXYBounds:Bounds2D = _tempBounds2;
+			_tempBounds.constrainBounds(tempDataBounds, false);
+			setReprojectedBounds(tempDataBounds, latLonCopyDataBounds, tileProjectionSRS.value, "EPSG:4326");
+			
 			// calculate min and max tile x and y for the zoom level
 			var zoomScale:Number = Math.pow(2, _tempCoord.zoom);
-			dataBoundsToTileXY(latLonViewingDataBounds, tileXYBounds, zoomScale);
+			dataBoundsToTileXY(latLonCopyDataBounds, thisTile, zoomScale);
 
-			var xTileMin:Number = tileXYBounds.xMin;
-			var yTileMin:Number = tileXYBounds.yMin;
-			var xTileMax:Number = tileXYBounds.xMax;
-			var yTileMax:Number = tileXYBounds.yMax;
-			
-			var mercatorTileXYBounds:Bounds2D = _tempBounds2;
-			var latLonTileXYBounds:Bounds2D = _tempBounds3;
-			tileXYToDataBounds(tileXYBounds, latLonTileXYBounds, zoomScale);
-			setReprojectedBounds(latLonTileXYBounds, mercatorTileXYBounds, "EPSG:4326", tileProjectionSRS.value);
+			var xTileMin:Number = thisTile.xMin;
+			var yTileMin:Number = thisTile.yMin;
+			var xTileMax:Number = thisTile.xMax;
+			var yTileMax:Number = thisTile.yMax;
+			
+			tileXYToDataBounds(thisTile, tempDataBounds, zoomScale);
+			setReprojectedBounds(tempDataBounds, thisTile, "EPSG:4326", tileProjectionSRS.value);
 			getAllowedBounds(_tempBounds);
-			_tempBounds.constrainBounds(mercatorTileXYBounds);
+			_tempBounds.constrainBounds(thisTile);
 			
 			
 			// get tiles we need using the map's mercator projection because the tiles' bounds must be in this projection
-			var lowerQualTiles:Array = _currentTileIndex.getTiles(mercatorTileXYBounds, 0, _tempCoord.zoom - 1);
-			var completedTiles:Array = _currentTileIndex.getTiles(mercatorTileXYBounds, _tempCoord.zoom, _tempCoord.zoom);
+			var lowerQualTiles:Array = _currentTileIndex.getTiles(thisTile, 0, _tempCoord.zoom - 1);
+			var completedTiles:Array = _currentTileIndex.getTiles(thisTile, _tempCoord.zoom, _tempCoord.zoom);
 			for (var x:int = xTileMin; x < xTileMax; ++x)
 			{
 				for (var y:int = yTileMin; y < yTileMax; ++y)
 				{
-					var thisTileXY:Bounds2D = _tempBounds2;
-					var thisTileLatLon:Bounds2D = _tempBounds3;
-					var thisTileMercator:Bounds2D = _tempBounds2;
-					thisTileXY.setBounds(x, y, x + 1, y + 1);
-					tileXYToDataBounds(thisTileXY, thisTileLatLon, zoomScale);
-					setReprojectedBounds(thisTileLatLon, thisTileMercator, "EPSG:4326", tileProjectionSRS.value);
+					thisTile.setBounds(x, y, x + 1, y + 1);
+					tileXYToDataBounds(thisTile, tempDataBounds, zoomScale);
+					setReprojectedBounds(tempDataBounds, thisTile, "EPSG:4326", tileProjectionSRS.value);
 					
 					_tempCoord.row = y;
 					_tempCoord.column = x;

				_tempCoord.zoom = higherQualZoomLevel;
		}
		
		private function getTileUrls(coord:Coordinate):String
		{
			if(!wmsURL || !wmsURL.value)
				return null;
			
			var url:String = wmsURL.value;
			
			url= url.replace('{z}','{0}');
			url= url.replace('{x}','{1}');
			url= url.replace('{y}','{2}');
			
			url = StringUtil.substitute(url,coord.zoom.toString(),coord.column.toString(),coord.row.toString());
			
			return url;
		}
		
		/**

					
					var urlRequest:URLRequest = new URLRequest(requestString);
					// note that thisTileMercator is still in Mercator coords
					var newTile:WMSTile = registerLinkableChild(this, new WMSTile(thisTile, _imageWidth, _imageHeight, urlRequest));
					newTile.zoomLevel = _tempCoord.zoom; // need to manually set it so tileIndex queries work
					_urlToTile[requestString] = newTile;
					_pendingTiles.push(newTile);
