 
 
 		/**
-		 * This is a multi-dimensional lookup:   unprojectedColumn -> Object, destinationSRS -> ProxyColumn
-		 * Example: _reprojectedColumnCache[column][destinationSRS] is a ProxyColumn containing geometries reprojected to the given SRS.
+		 * This is a multi-dimensional lookup for ProxyColumn objects containing reprojected geometries:   (unprojectedColumn, destinationSRS) -> ProxyColumn
 		 */		
-		private const _reprojectedColumnCache:Dictionary = new Dictionary(true); // weak links to be gc-friendly
+		private const _reprojectedColumnCache_d2d_col_srs:Dictionary2D = new Dictionary2D(true); // weak links to be gc-friendly
 		
 		/**
 		 * @inheritDoc

import weave.utils.BLGTreeUtils;
import weave.utils.ColumnUtils;
	
internal class WorkerThread
{
	public function WorkerThread(projectionManager:ProjectionManager, unprojectedColumn:IAttributeColumn, reprojectedColumn:ProxyColumn, destinationProjectionSRS:String)
	{
		this.projectionManager = projectionManager;
		this.unprojectedColumn = unprojectedColumn;
		this.reprojectedColumn = reprojectedColumn;
		this.destinationProjSRS = destinationProjectionSRS;
		unprojectedColumn.addImmediateCallback(this, asyncStart, true);
	}
	
	// values passed to the constructor -- these will not change.
	private var projectionManager:ProjectionManager;
	private var unprojectedColumn:IAttributeColumn;
	private var reprojectedColumn:ProxyColumn;
	private var destinationProjSRS:String;
	
	// these values may change as the geometries are processed.

	import weave.api.data.IProjectionManager;
	import weave.api.data.IProjector;
	import weave.api.newDisposableChild;
	import weave.api.objectWasDisposed;
	import weave.api.primitives.IBounds2D;
	import weave.data.AttributeColumns.ProxyColumn;
	import weave.primitives.Bounds2D;
	import weave.utils.Dictionary2D;
	
	/**
	 * An interface for reprojecting columns of geometries and individual coordinates.
