 		
 		private function asyncComplete():void
 		{
+			// if the plotter is busy, the graphics aren't ready, so don't trigger callbacks
 			if (!WeaveAPI.SessionManager.linkableObjectIsBusy(_plotter))
 				getCallbackCollection(this).triggerCallbacks();
-		}
-		
-		public function setRecordKeys(keys:Array):void
-		{
-			_recordKeys = keys;
-			asyncStart();
 		}
 		
 		

	import weave.api.WeaveAPI;
	import weave.api.core.IDisposableObject;
	import weave.api.core.ILinkableObject;
	import weave.api.detectLinkableObjectChange;
	import weave.api.disposeObjects;
	import weave.api.getCallbackCollection;
	import weave.api.primitives.IBounds2D;
	import weave.api.registerLinkableChild;
	import weave.api.ui.IPlotTask;
	import weave.api.ui.IPlotter;
	import weave.primitives.Bounds2D;

	 */
	public class PlotTask implements IPlotTask, ILinkableObject, IDisposableObject
	{
		public function PlotTask(zoomBounds:ZoomBounds, plotter:IPlotter, keyFilter:IDynamicKeyFilter)
		{
			_plotter = plotter;
			_keyFilter = keyFilter;
			_zoomBounds = zoomBounds;
			
			getCallbackCollection(_keyFilter).addImmediateCallback(this, asyncStart);
			getCallbackCollection(_plotter).addImmediateCallback(this, asyncStart);
		}
		
		public function dispose():void
