 					_singleGeom[0] = value;
 				}
 				
-				if (geoms && geoms.length > 0)
-				{
-					var graphics:Graphics = tempShape.graphics;
-					var styleSet:Boolean = false;
+				for (var pass:int = 0; pass < 2; pass++)
+				{
+					if (pass == 1 && !drawImages)
+						break;
 					
-					// draw the geom
-					for (var i:int = 0; i < geoms.length; i++)
+					if (geoms && geoms.length > 0)
 					{
-						var geom:GeneralizedGeometry = geoms[i] as GeneralizedGeometry;
-						if (geom)
+						var graphics:Graphics = tempShape.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 == GeometryType.POLYGON && geom.bounds.getArea() < minImportance)
-								continue;
-							if (!styleSet)
+							var geom:GeneralizedGeometry = geoms[i] as GeneralizedGeometry;
+							if (geom)
 							{
-								graphics.clear();
-								fill.beginFillStyle(recordKey, graphics);
-								line.beginLineStyle(recordKey, graphics);
-								styleSet = true;
+								// skip shapes that are considered unimportant at this zoom level
+								if (geom.geomType == GeometryType.POLYGON && geom.bounds.getArea() < minImportance)
+									continue;
+								if (pass == 0)
+								{
+									if (!styleSet)
+									{
+										graphics.clear();
+										fill.beginFillStyle(recordKey, graphics);
+										line.beginLineStyle(recordKey, graphics);
+										styleSet = true;
+									}
+									drawMultiPartShape(recordKey, geom, geom.getSimplifiedGeometry(minImportance, simplifyDataBounds), task.dataBounds, task.screenBounds, graphics, task.buffer);
+								}
+								else
+								{
+									drawImage(recordKey, geom.bounds.getXCenter(), geom.bounds.getYCenter(), task.dataBounds, task.screenBounds, graphics, task.buffer);
+								}
 							}
-							drawMultiPartShape(recordKey, geom.getSimplifiedGeometry(minImportance, simplifyDataBounds), geom.geomType, task.dataBounds, task.screenBounds, graphics, task.buffer);
 						}
-					}
-					if (styleSet)
-					{
-						graphics.endFill();
-						task.buffer.draw(tempShape);
+						if (pass == 0 && styleSet)
+						{
+							graphics.endFill();
+							task.buffer.draw(tempShape);
+						}
 					}
 				}
 				

					// round coordinates for faster & more consistent rendering
					tempPoint.x = Math.round(tempPoint.x);
					tempPoint.y = Math.round(tempPoint.y);
					if (pointDataImageColumn.getInternalColumn())
					{
						var bitmapData:BitmapData = pointDataImageColumn.getValueFromKey(key) || _missingImage;
						var imgWidth:Number = useFixedImageSize.value ? iconSize.value : bitmapData.width;
						var imgHeight:Number = useFixedImageSize.value ? iconSize.value : bitmapData.height;
						tempMatrix.identity();
						if (useFixedImageSize.value)
							tempMatrix.scale(iconSize.value / bitmapData.width, iconSize.value / bitmapData.height);
						tempMatrix.translate(tempPoint.x - imgWidth / 2, tempPoint.y - imgHeight / 2);
						outputBitmapData.draw(bitmapData, tempMatrix, null, null, null, true);
					}
					else
					{
						drawCircle(outputBitmapData, fill.color.getValueFromKey(key, Number), tempPoint.x, tempPoint.y);
					}
				}
				return;
			}

			// prevent moveTo/lineTo from drawing a filled polygon if the shape type is line
			if (shapeType == GeometryType.LINE)
				outputGraphics.endFill();

			var numPoints:int = points.length;

				outputGraphics.lineTo(x, y);
			}
			
			if (!debug)
				if (geomType == GeometryType.POLYGON)
					outputGraphics.lineTo(firstX, firstY);
		}
		
		private function drawImage(key:IQualifiedKey, dataX:Number, dataY:Number, dataBounds:IBounds2D, screenBounds:IBounds2D, outputGraphics:Graphics, outputBitmapData:BitmapData):void
		{
			tempPoint.x = dataX;
			tempPoint.y = dataY;
			dataBounds.projectPointTo(tempPoint, screenBounds);
			// round coordinates for faster & more consistent rendering
			tempPoint.x = Math.round(tempPoint.x);
			tempPoint.y = Math.round(tempPoint.y);
			
			var bitmapData:BitmapData = pointDataImageColumn.getValueFromKey(key) || _missingImage;
			var w:Number = bitmapData.width;
			var h:Number = bitmapData.height;
			tempMatrix.identity();
			if (useFixedImageSize.value)
			{
				var maxSize:Number = Math.max(w, h);
				var scale:Number = iconSize.value / maxSize;
				tempMatrix.scale(scale, scale);
				tempMatrix.translate(Math.round(Math.abs(maxSize - w) / 2), Math.round(Math.abs(maxSize - h) / 2));
				w = h = iconSize.value;
			}
			tempMatrix.translate(Math.round(tempPoint.x - w / 2), Math.round(tempPoint.y - h / 2));
			outputBitmapData.draw(bitmapData, tempMatrix, null, null, null, true);
		}
		
		public function dispose():void
