 			invalidateDisplayList();
 		}
 		
+		private function handleKeyboard():void
+		{
+			if (editMode)
+				toggleMouseEnabled();
+		}
+		
 		/**
 		 * Handle a mouse move event. 
-		 */		
+		 */
 		private function handleMouseMove():void
 		{
-			if (_drawing && editMode)// && !mouseOffscreen())
+			if (!editMode)
+				return;
+			
+			toggleMouseEnabled();
+			
+			if (_drawing)// && !mouseOffscreen())
 			{
 				// get the current line
 				var line:Array = _coordsArrays[_coordsArrays.length - 1];

			addEventListener(MouseEvent.DOUBLE_CLICK, handleDoubleClick);
			
			// add global event listener for mouse move and mouse up because user may move or release outside this display object
			WeaveAPI.StageUtils.addEventCallback(MouseEvent.MOUSE_MOVE, this, handleMouseMove);
			WeaveAPI.StageUtils.addEventCallback(MouseEvent.MOUSE_UP, this, handleMouseUp);
 

		 */
		private function handleMouseDown(event:MouseEvent):void
		{
			if (!_editMode)// || mouseOffscreen())
				return;
			
			if (drawingMode.value == POLYGON_DRAW_MODE)
			{
				if (!WeaveAPI.StageUtils.pointClicked)
					return;
			}
			else
			{
				if (event.type == MouseEvent.CLICK)
					return;
			}
			
			var line:Array;

			// project the point to data coordinates
			handleScreenCoordinate(mouseX, mouseY, _tempPoint);
			
