 		/**
 		 * This is the maximum Y data value associated with the rectangle.
 		 */
-		public const heightData:AlwaysDefinedColumn = registerSpatialProperty(new AlwaysDefinedColumn(0));
+		public const heightData:AlwaysDefinedColumn = registerSpatialProperty(new AlwaysDefinedColumn(0));
+		
+		/**
+		 * If this is true, the rectangle will be centered on xData coordinates.
+		 */
+		public const centerX:LinkableBoolean = registerSpatialProperty(new LinkableBoolean(false));
+		/**
+		 * If this is true, the rectangle will be centered on yData coordinates.
+		 */
+		public const centerY:LinkableBoolean = registerSpatialProperty(new LinkableBoolean(false));
 
 		// visual properties
 		/**

			// save x+w,y+h screen coordinates
			tempBounds.setMaxPoint(tempPoint);
			
			// draw graphics
			line.beginLineStyle(recordKey, graphics);
			fill.beginFillStyle(recordKey, graphics);
			if (drawEllipse.value)
				graphics.drawEllipse(tempBounds.getXNumericMin(), tempBounds.getYNumericMin(), tempBounds.getXCoverage(), tempBounds.getYCoverage());
			else
				graphics.drawRect(tempBounds.getXNumericMin(), tempBounds.getYNumericMin(), tempBounds.getXCoverage(), tempBounds.getYCoverage());
			graphics.endFill();
		}
		

			var graphics:Graphics = tempShape.graphics;

			// project data coordinates to screen coordinates and draw graphics onto tempShape
			getBounds(recordKey, tempBounds);
			
			// project x,y data coordinates to screen coordinates
			tempBounds.getMinPoint(tempPoint);
			dataBounds.projectPointTo(tempPoint, screenBounds);
			// add screen offsets
			tempPoint.x += xMinScreenOffset.getValueFromKey(recordKey, Number);
