 		for (; coordsVectorIndex < coordsVector.length; coordsVectorIndex++)
 		{
 			// continue later if necessary
-			if (StageUtils.shouldCallLater)
-			{
+			if (StageUtils.shouldCallLater)
+			{
+				WeaveAPI.ProgressIndicator.updateTask(coordsVector, coordsVectorIndex / (coordsVector.length - 1));
 				StageUtils.callLater(unprojectedColumn, processGeometries, arguments);
 				return;
 			}
 			newGeometry = geomVector[coordsVectorIndex];
 			newGeometry.setCoordinates(coordsVector[coordsVectorIndex], BLGTreeUtils.METHOD_SAMPLE);
-		}
-								
+		}
+		WeaveAPI.ProgressIndicator.removeTask(coordsVector);
+		WeaveAPI.ProgressIndicator.removeTask(this);
+		
 		// after all geometries have been reprojected, update the reprojected column
 		var reprojectedColumn:GeometryColumn = proxyColumn.internalColumn as GeometryColumn;
-		reprojectedColumn.setGeometries(keysVector, geomVector);
+		reprojectedColumn.setGeometries(keysVector, geomVector);
 	}
 }
 

import org.openscales.proj4as.ProjPoint;
import org.openscales.proj4as.ProjProjection;

import weave.api.data.AttributeColumnMetadata;
import weave.api.data.DataTypes;
import weave.api.data.IAttributeColumn;

	 */
	private function startNewTask():void
	{
		taskID++; // incrementing this variable will stop all old tasks from continuing
		
		// if the source and destination projection are the same, we don't need to reproject.
		// if we don't know the projection of the original column, we can't reproject.
