 	import flash.geom.Point;
 	import flash.net.URLRequest;
 	
-	import mx.controls.Alert;
 	import mx.core.BitmapAsset;
 	import mx.rpc.events.FaultEvent;
 	import mx.rpc.events.ResultEvent;
 	
 	import weave.api.WeaveAPI;
+	import weave.api.data.IQualifiedKey;
+	import weave.api.data.ISimpleGeometry;
 	import weave.api.getCallbackCollection;
 	import weave.api.primitives.IBounds2D;
 	import weave.api.registerLinkableChild;
 	import weave.api.reportError;
-	import weave.core.ErrorManager;
+	import weave.api.ui.IPlotterWithGeometries;
 	import weave.core.LinkableNumber;
 	import weave.core.LinkableString;
 	import weave.core.SessionManager;
-	import weave.data.AttributeColumns.RunningTotalColumn;
-	import weave.primitives.Bounds2D;
+	import weave.primitives.SimpleGeometry;
 	import weave.utils.BitmapText;
-	import weave.utils.BitmapUtils;
-
-	public class SingleImagePlotter extends AbstractPlotter
+
+	/**
+	 * A plotter for drawing a single image onto a tool.
+	 *  
+	 * @author skolman
+	 * @author kmonico
+	 */	
+	public class SingleImagePlotter extends AbstractPlotter implements IPlotterWithGeometries
 	{
 		public function SingleImagePlotter()
 		{
 		}
 		
-		
-		public const horizontalAlign:LinkableString =  registerLinkableChild(this,new LinkableString(BitmapText.HORIZONTAL_ALIGN_LEFT));
+		/**
+		 * The horizontal alignment used for any text.
+		 */		
+		public const horizontalAlign:LinkableString =  registerLinkableChild(this, new LinkableString(BitmapText.HORIZONTAL_ALIGN_LEFT));
+		/**
+		 * The vertical alignment used for any text. 
+		 */		
 		public const verticalAlign:LinkableString = registerLinkableChild(this, new LinkableString(BitmapText.VERTICAL_ALIGN_TOP));		
 		
-		public const dataX:LinkableNumber = registerLinkableChild(this,new LinkableNumber());
-		public const dataY:LinkableNumber = registerLinkableChild(this,new LinkableNumber());
-		
-		public const dataWidth:LinkableNumber = registerLinkableChild(this,new LinkableNumber());
-		public const dataHeight:LinkableNumber = registerLinkableChild(this,new LinkableNumber());
-		
-		public const imageURL:LinkableString = registerLinkableChild(this,new LinkableString(),handleImageURLChange);
-		
-		private var _tempDataBounds:IBounds2D;
-		private var _tempScreenBounds:IBounds2D;
-		private var imageBitmapData:BitmapData;
-		private var translationMatrix:Matrix = new Matrix();
+		/**
+		 * The X coordinate in original unprojected data coordinates.
+		 */		
+		public const dataX:LinkableNumber = registerLinkableChild(this, new LinkableNumber());
+		/**
+		 * The Y coordinate in original unprojected data coordinates. 
+		 */		
+		public const dataY:LinkableNumber = registerLinkableChild(this, new LinkableNumber());
+		
+		/**
+		 * The width of the image in unprojected data coordinates. 
+		 */		
+		public const dataWidth:LinkableNumber = registerLinkableChild(this, new LinkableNumber());
+		/**
+		 * The height of the image in unprojected data coordinates. 
+		 */		
+		public const dataHeight:LinkableNumber = registerLinkableChild(this, new LinkableNumber());
+		
+		/**
+		 * The URL of the image to download.
+		 */		
+		public const imageURL:LinkableString = registerLinkableChild(this, new LinkableString(), handleImageURLChange);
 		
 		[Embed(source='/weave/resources/images/red-circle.png')]
 		private var defaultImageSource:Class;

		
		private function plotBitmapData(destination:BitmapData):void
		{
			var tempPoint:Point = new Point(dataX.value,dataY.value);
			_tempDataBounds.projectPointTo(tempPoint,_tempScreenBounds);
			
			
			translationMatrix.identity();
			
			
			var xOffset:Number=0;
			var yOffset:Number=0;
			
			
			switch (verticalAlign.value)
			{

			_tempDataBounds = dataBounds;
			_tempScreenBounds = screenBounds;
			
			if(isNaN(dataX.value) || isNaN(dataY.value))
				return;
			
			if(imageBitmapData == null)
			{
				if(imageURL.value)
					WeaveAPI.URLRequestUtils.getContent(new URLRequest(imageURL.value), handleImageRequest, handleImageFaultRequest, imageURL.value);
				else
				{
					var image:BitmapAsset = new defaultImageSource() as BitmapAsset;
