 	import mx.rpc.events.ResultEvent;
 	
 	import weave.Weave;
+	import weave.api.getCallbackCollection;
+	import weave.api.newDisposableChild;
 	import weave.api.newLinkableChild;
 	import weave.api.registerLinkableChild;
 	import weave.api.reportError;

	import weave.api.ui.IPlotter;
	import weave.core.LinkableBoolean;
	import weave.core.LinkableNumber;
	import weave.data.AttributeColumns.AlwaysDefinedColumn;
	import weave.data.AttributeColumns.DynamicColumn;
	
	/**
	 * ImagePlotter

		private static var _missingImageClass:Class;
		private static const _missingImage:BitmapData = Bitmap(new _missingImageClass()).bitmapData;

		private const colorDataWatcher:LinkableWatcher = newDisposableChild(this, LinkableWatcher);
		
		private function handleColor():void
		{
			var cc:ColorColumn = color.getInternalColumn() as ColorColumn;
			var bc:BinnedColumn = cc ? cc.getInternalColumn() as BinnedColumn : null;
			var fc:FilteredColumn = bc ? bc.getInternalColumn() as FilteredColumn : null;
			var dc:DynamicColumn = fc ? fc.internalDynamicColumn : null;
			colorDataWatcher.target = dc || fc || bc || cc;
		}
		
		private function updateKeySources():void
		{
			var columns:Array = [imageSize];
			var sortDirections:Array = [-1];
			
			if (colorDataWatcher.target)
			{
				columns.push(colorDataWatcher.target);
				sortDirections.push(1);
			}
			
			columns.push(dataX, dataY);
			sortDirections.push(1, 1);
			
			setColumnKeySources(columns, sortDirections);
		}
		
		/**
		 * Draws the graphics onto BitmapData.
		 */
