 				}
 				case InteractionController.ZOOM:
 				{
-					if(enableZoomAndPan.value && mouseDragActive)
+					if (enableZoomAndPan.value && dragReleased)
 					{
-						updateMouseDragStageCoordinates();
+						// zoom to selected data bounds if area > 0
+						projectDragBoundsToDataQueryBounds(null, true); // data bounds in same direction when zooming
+						if (queryBounds.getArea() > 0)
+							zoomBounds.setDataBounds(queryBounds);
 					}
 					break;
 				}
 				case InteractionController.PROBE:
 				{
-					
-					if (mouseIsRolledOver && !event.buttonDown)
+					if (mouseIsRolledOver)
 					{
 						// probe when mouse is rolled over and selection is inactive
 						handleProbe();

		private function validateDashedLine():void
		{
			_dashedLine.lengthsString = Weave.properties.dashedSelectionBox.value;
		}
		
		private function zoom(multiplier:Number, mode:String):void
		{
			if (enableZoomAndPan.value && mode != InteractionController.SELECT_ADD && mode != InteractionController.SELECT_REMOVE)
			{								
				// zoom in 2x																	
				projectDragBoundsToDataQueryBounds(null, false);
				zoomBounds.getDataBounds(_tempBounds);
				_tempBounds.setCenter(queryBounds.getXCenter(), queryBounds.getYCenter());
				
				_tempBounds.centeredResize(_tempBounds.getWidth() * multiplier, _tempBounds.getHeight() * multiplier);
				
				zoomBounds.setDataBounds(_tempBounds);					
			}
			else
			{
				// clear selection or select all
				
				// set up mouse drag rectangle to select or deselect visible area
				zoomBounds.getScreenBounds(_screenBounds);
				_screenBounds.getMinPoint(tempPoint);
				mouseDragStageCoords.setMinPoint(localToGlobal(tempPoint));
				_screenBounds.getMaxPoint(tempPoint);
				mouseDragStageCoords.setMaxPoint(localToGlobal(tempPoint));
				
				immediateHandleSelection();
			}
		}
		
		private function handleSelection(event:MouseEvent,mode:String):void

					mouseDragStageCoords.setMaxCoords(stage.mouseX, stage.mouseY);
				}
			}
			else // not dragging -- ok to update mouse mode
			{
				updateTemporaryMouseMode();
			}
			
			var dragReleased:Boolean = mouseDragActive ? !event.buttonDown : false;
			var mode:String = _temporaryMouseMode || mouseModeDefault.value;
			switch(mode)//(interactions.determineAction())
			{
				case InteractionController.SELECT_ADD:
				{
					if (mouseDragActive)
						handleSelection(event, mode);
					break;
				}
				case InteractionController.SELECT:
				{
					if (mouseDragActive)
						handleSelection(event,mode);
					break;
				}
				case InteractionController.SELECT_REMOVE:
				{
					if (mouseDragActive)
						handleSelection(event, mode);
					break;
				}
				case InteractionController.PAN:
				{
					if (enableZoomAndPan.value && mouseDragActive)
					{
						// pan the dragged distance
						projectDragBoundsToDataQueryBounds(null, false);
						zoomBounds.getDataBounds(tempDataBounds);
