 			if (debug)
 				debugTrace(_plotter,this,'keys',_keysArray.length);
 			
-			// insert bounds-to-key mappings in the kdtree
-			_prevTriggerCounter = callbacks.triggerCounter; // used to detect change during iterations
-			_iterateAll(-1); // restart from first task
-			// normal priority because some things can be done without having a fully populated spatial index (?)
-			WeaveAPI.StageUtils.startTask(this, _iterateAll, WeaveAPI.TASK_PRIORITY_NORMAL, callbacks.triggerCallbacks);
-		}
-		
-		private const _iterateAll:Function = StageUtils.generateCompoundIterativeTask(_iterate1, _iterate2);
+			return 1;
+		}
 		
 		private function _iterate1(stopTime:int):Number
 		{
-			// stop if callbacks were triggered since the iterations started
-			if (callbacks.triggerCounter != _prevTriggerCounter)
-			{
-				if (debug)
-					debugTrace(_plotter,this,'trigger counter changed');
-				return 0;
-			}
-			
 			for (; _keysIndex < _keysArray.length; _keysIndex++)
 			{
+				if (_restarted)
+					return 0;
 				if (getTimer() > stopTime)
 					return _keysIndex / _keysArray.length;
 				

		private var callbacks:ICallbackCollection;
		
		private var _kdTree:KDTree = new KDTree(5);
		private var _prevTriggerCounter:uint = 0; // used by iterative tasks & clear()
		private const _keysArray:Array = []; // of IQualifiedKey
		private var _keyToBoundsMap:Dictionary = new Dictionary(); // IQualifiedKey -> Array of IBounds2D
		private var _keyToGeometriesMap:Dictionary = new Dictionary(); // IQualifiedKey -> Array of GeneralizedGeometry or ISimpleGeometry
		
		private var _queryMissingBounds:Boolean; // used by async code
		private var _keysArrayIndex:int; // used by async code
		private var _keysIndex:int; // used by async code

					_keyToGeometriesMap[key] = geoms;
				}
			}
			
			return _restarted ? 0 : 1;
		}
			
		private function _iterate2(stopTime:int):Number
