 			handleMouseEvent(event);
 		}
 		
-		private var hack_mouseDownSelectionState:Object = null;
+		private var mouseDownSelectionState:Object = null; // layer name -> selection state
+		private function getAllLayerSelectionState():Object
+		{
+			var result:Object = {};
+			for each (var name:String in plotManager.layerSettings.getNames())
+			{
+				var idkf:IDynamicKeyFilter = (plotManager.layerSettings.getObject(name) as LayerSettings).selectionFilter;
+				result[name] = idkf.internalObject ? getSessionState(idkf.internalObject) : null;
+			}
+			return result;
+		}
+		
 		protected function handleMouseDown(event:MouseEvent):void
 		{			
 			updateMouseMode(InteractionController.INPUT_DRAG); // modifier keys may have changed just prior to pressing mouse button, so update mode now
-			
-			//for detecting change between drag start and drag end
-			// TEMPORARY HACK - Weave.defaultSelectionKeySet
-			hack_mouseDownSelectionState = getSessionState(Weave.defaultSelectionKeySet);
+			
+			//for detecting change between drag start and drag end
+			mouseDownSelectionState = getAllLayerSelectionState();
 			
 			mouseDragActive = true;
 			// clear probe when drag starts

	import spark.components.Group;
	
	import weave.Weave;
	import weave.api.data.IQualifiedKey;
	import weave.api.getSessionState;
	import weave.api.primitives.IBounds2D;
	import weave.api.registerLinkableChild;
	import weave.api.ui.IPlotter;
	import weave.compiler.StandardLib;
	import weave.core.LinkableBoolean;

				break; // select only one layer at a time
			}
			
			var noSelectionChangeSinceMouseDown:Boolean = StandardLib.compare(mouseDownSelectionState, getAllLayerSelectionState()) == 0;
			
			// if mouse is released and selection hasn't changed since mouse down, clear selection
			if (_mouseMode == InteractionController.SELECT && !WeaveAPI.StageUtils.mouseButtonDown && noSelectionChangeSinceMouseDown)
			{
				clearSelection();
			}
