 		 */
 		override public function getDataBoundsFromRecordKey(recordKey:IQualifiedKey, output:Array):void
 		{
-			initBoundsArray(output);
+			getBounds(recordKey, initBoundsArray(output));
+		}
+		
+		private function getBounds(recordKey:IQualifiedKey, output:IBounds2D):void
+		{
 			var x:Number = getCoordFromRecordKey(recordKey, true);
 			var y:Number = getCoordFromRecordKey(recordKey, false);
-			var width:Number = widthData.getValueFromKey(recordKey, Number);
-			var height:Number = heightData.getValueFromKey(recordKey, Number);
-			(output[0] as IBounds2D).setBounds(x, y, x + width, y + height);
+			var width:Number = widthData.getValueFromKey(recordKey, Number);
+			var height:Number = heightData.getValueFromKey(recordKey, Number);
+			
+			if (centerX.value)
+				output.setCenteredXRange(x, width);
+			else
+				output.setXRange(x, x + width);
+			
+			if (centerY.value)
+				output.setCenteredYRange(y, height);
+			else
+				output.setYRange(y, y + height);
 		}
 
 		/**

		/**
		 * This is the maximum Y data value associated with the rectangle.
		 */
		public const heightData:AlwaysDefinedColumn = registerSpatialProperty(new AlwaysDefinedColumn(0));

		// visual properties
		/**

			// save x+w,y+h screen coordinates
			tempBounds.setMaxPoint(tempPoint);
			
			// draw graphics
			tempBounds.makeSizePositive();
			line.beginLineStyle(recordKey, graphics);
			fill.beginFillStyle(recordKey, graphics);
			if (drawEllipse.value)
				graphics.drawEllipse(tempBounds.getXMin(), tempBounds.getYMin(), tempBounds.getWidth(), tempBounds.getHeight());
			else
				graphics.drawRect(tempBounds.getXMin(), tempBounds.getYMin(), tempBounds.getWidth(), tempBounds.getHeight());
			graphics.endFill();
		}
		
