 					if (value is Array)
 						geoms = value;
 					else if (value is GeneralizedGeometry)
-						geoms = [value as GeneralizedGeometry];
+					{
+						geoms = _singleGeom;
+						_singleGeom[0] = value;
+					}
 					
 					if (geoms && geoms.length > 0)
 					{
 						var graphics:Graphics = tempShape.graphics;
-						graphics.clear();
-						
-						fill.beginFillStyle(recordKey, graphics);
-						line.beginLineStyle(recordKey, graphics);
+						var styleSet:Boolean = false;
 						
 						// 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;
								drawMultiPartShape(recordKey, geom.getSimplifiedGeometry(task.minImportance, task.dataBounds), geom.geomType, task.dataBounds, task.screenBounds, graphics, task.destination);
							}
						}
						graphics.endFill();
						try
						{
							task.destination.draw(tempShape);
						}
						catch (e:Error)
						{

			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
