 			WeaveAPI.StageUtils.startTask(this, task.iterate, WeaveAPI.TASK_PRIORITY_RENDERING);
 		}
 		
+		private const _singleGeom:Array = []; // reusable array for holding one item
+		
 		private function generateTaskIterator(task:PlotTask):Function
 		{
 			return function():Number

					if (value is Array)
						geoms = value;
					else if (value is GeneralizedGeometry)
						geoms = [value as GeneralizedGeometry];
					
					if (geoms && geoms.length > 0)
					{
						var graphics:Graphics = tempShape.graphics;
						graphics.clear();
						
						fill.beginFillStyle(recordKey, graphics);
						line.beginLineStyle(recordKey, graphics);
						
						// draw the geom
						for (var i:int = 0; i < geoms.length; i++)

								// skip shapes that are considered unimportant at this zoom level
								if (geom.geomType == GeneralizedGeometry.GEOM_TYPE_POLYGON && geom.bounds.getArea() < task.minImportance)
									continue;
								if (!styleSet)
								{
									graphics.clear();
									fill.beginFillStyle(recordKey, graphics);
									line.beginLineStyle(recordKey, graphics);
									styleSet = true;
								}
								drawMultiPartShape(recordKey, geom.getSimplifiedGeometry(task.minImportance, task.dataBounds), geom.geomType, task.dataBounds, task.screenBounds, graphics, task.destination);
							}
						}
						try
						{
							if (styleSet)
							{
								graphics.endFill();
								task.destination.draw(tempShape);
							}
						}
						catch (e:Error)
						{
