 					}		
 					break;
 				}
-				case InteractionController.ZOOM_OUT:						
-				{
-					zoom(2, mode);	
-					break;
-				}
 				case InteractionController.ZOOM_IN:
-				{
-					zoom(0.5, mode);			
-					break;
-				}
-			}
-			//trace(mode, str);
-			if(enableZoomAndPan.value && !event.buttonDown && mode == InteractionController.ZOOM && event.type != MouseEvent.MOUSE_MOVE)
-			{				
-				// 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);
-			}
+				case InteractionController.ZOOM_OUT:
+				{
+					if (enableZoomAndPan.value)
+					{
+						var multiplier:Number = 1;
+						if (mode == InteractionController.ZOOM_IN)
+							multiplier = 0.5; // zoom in 2x
+						else
+							multiplier = 2; // zoom out 2x
+						
+						projectDragBoundsToDataQueryBounds(null, false);
+						zoomBounds.getDataBounds(_tempBounds);
+						_tempBounds.setCenter(queryBounds.getXCenter(), queryBounds.getYCenter());
+						
+						_tempBounds.centeredResize(_tempBounds.getWidth() * multiplier, _tempBounds.getHeight() * multiplier);
+						
+						zoomBounds.setDataBounds(_tempBounds);
+					}
+					break;
+				}
+			}
+			
+			// finally, unset mouseDragActive if button was released
+			if (dragReleased)
+				mouseDragActive = false;
 			
 			updateSelectionRectangleGraphics();
 			interactions.clearEvents();
-			//updateMouseCursor();			
+		}
+		
+		//TODO - use this
+		private function selectAllVisibleRecords():void
+		{
+			// 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 var _selectionRectangleGraphicsCleared:Boolean = true;
 		protected function updateSelectionRectangleGraphics():void 
 		{
-			var mouseMode:String = _temporaryMouseMode ? _temporaryMouseMode : mouseModeDefault.value;
+			var mouseMode:String = _temporaryMouseMode || mouseModeDefault.value;
 			 
 			if (!Weave.properties.enableToolSelection.value || !enableSelection.value) return;
 			var g:Graphics = selectionRectangleCanvas.graphics;

		
		protected function handleMouseEvent(event:MouseEvent):void
		{
			var mode:String = _temporaryMouseMode ? _temporaryMouseMode : mouseModeDefault.value;
			var str:String;						
			var i:int;
			

				case InteractionController.ZOOM_TO_EXTENT:
				{
					if (enableZoomAndPan.value && mode != InteractionController.SELECT_ADD && mode != InteractionController.SELECT_REMOVE)
					{
						zoomBounds.setDataBounds(fullDataBounds, true); // zoom to full extent
					}
					else
					{
						// clear selection or select all
