 
 
 		/**
-		 * 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.

			if (destinationProjectionSRS == null || destinationProjectionSRS == '')
				return geometryColumn;
			
			// check the cache
			var worker:WorkerThread = _reprojectedColumnCache_d2d_col_srs.get(geometryColumn, destinationProjectionSRS);
			
			// if worker doesn't exist yet or was disposed, (re)create it
			if (!worker || objectWasDisposed(worker))
			{
				worker = new WorkerThread(this, geometryColumn, destinationProjectionSRS);
				_reprojectedColumnCache_d2d_col_srs.set(geometryColumn, destinationProjectionSRS, worker);
			}

			return worker.reprojectedColumn;
		}
		
		/**
