diff --git a/uk/ac/sanger/artemis/components/FeatureDisplay.java b/uk/ac/sanger/artemis/components/FeatureDisplay.java
index 75e3ab08691c6a6a4f00a9706893a1b1a71e23e0..323bce3f7bed5b5bd65a4ae548dc67bd4b0254eb 100644
--- a/uk/ac/sanger/artemis/components/FeatureDisplay.java
+++ b/uk/ac/sanger/artemis/components/FeatureDisplay.java
@@ -3675,13 +3675,13 @@ public class FeatureDisplay extends EntryGroupPanel
     int count = 0;
     if((event.getModifiers() & InputEvent.BUTTON1_MASK) > 0) 
       ++count;
-    
-    if((event.getModifiers() & InputEvent.BUTTON2_MASK) > 0) 
+
+    if((event.getModifiers() & InputEvent.BUTTON2_DOWN_MASK) > 0) 
       ++count;
-    
+
     if((event.getModifiers() & InputEvent.BUTTON3_MASK) > 0) 
       ++count;
-    
+
     return count;
   }
 
@@ -3885,11 +3885,12 @@ public class FeatureDisplay extends EntryGroupPanel
 
     final Selectable clicked_thing = getThingAtPoint(event.getPoint());
 
-    // treate alt modifier like pressing button 2
-    if(clicked_thing == null ||
-       (event.getModifiers() & InputEvent.BUTTON2_MASK) != 0) 
+    // note: ALT_MASK and BUTTON2_MASK are the same value
+    // so check this is not BUTTON1 to allow BUTTON1+ALT to drag
+    if(  clicked_thing == null ||
+       ((event.getModifiers() & InputEvent.BUTTON1_MASK) == 0 && 
+        (event.getModifiers() & InputEvent.BUTTON2_MASK) != 0)) 
     {
-
       // if the user presses the mouse button 2 on feature or segment we treat
       // it like the feature/segment isn't there
 
@@ -4033,24 +4034,50 @@ public class FeatureDisplay extends EntryGroupPanel
         {
           final FeatureSegment this_segment = segments.elementAt(i);
 
-          if(new_click_range.getStart().equals(this_segment.getStart()) &&
-              this_segment.canDirectEdit()) 
+          if(this_segment.getStart().getStrand() ==  new_click_range.getStrand() &&
+             this_segment.canDirectEdit())
           {
-            click_segment_marker = this_segment.getStart();
-            click_segment_marker_is_start_marker = true;
-            other_end_of_segment_marker = this_segment.getEnd();
-            getEntryGroup().getActionController().startAction();
-            break;
-          }
+            if(event.isAltDown())
+            {
+              if(new_click_range.getStart().getPosition() >= this_segment.getStart().getPosition() &&
+                 new_click_range.getStart().getPosition() <= this_segment.getStart().getPosition()+60)
+              {
+                click_segment_marker = this_segment.getStart();
+                click_segment_marker_is_start_marker = true;
+                other_end_of_segment_marker = this_segment.getEnd();
+                getEntryGroup().getActionController().startAction();
+                break;
+              }
+              else if(new_click_range.getEnd().getPosition() <= this_segment.getEnd().getPosition() &&
+                      new_click_range.getEnd().getPosition() >= this_segment.getEnd().getPosition()-60)
+              {
+                click_segment_marker = this_segment.getEnd();
+                click_segment_marker_is_start_marker = false;
+                other_end_of_segment_marker = this_segment.getStart();
+                getEntryGroup().getActionController().startAction();
+                break;
+              }
+            }
+            else
+            {
+              if (new_click_range.getStart().equals(this_segment.getStart()))
+              {
+                click_segment_marker = this_segment.getStart();
+                click_segment_marker_is_start_marker = true;
+                other_end_of_segment_marker = this_segment.getEnd();
+                getEntryGroup().getActionController().startAction();
+                break;
+              }
 
-          if(new_click_range.getEnd().equals(this_segment.getEnd()) &&
-              this_segment.canDirectEdit()) 
-          {
-            click_segment_marker = this_segment.getEnd();
-            click_segment_marker_is_start_marker = false;
-            other_end_of_segment_marker = this_segment.getStart();
-            getEntryGroup().getActionController().startAction();
-            break;
+              if (new_click_range.getEnd().equals(this_segment.getEnd()))
+              {
+                click_segment_marker = this_segment.getEnd();
+                click_segment_marker_is_start_marker = false;
+                other_end_of_segment_marker = this_segment.getStart();
+                getEntryGroup().getActionController().startAction();
+                break;
+              }
+            }
           }
         }
       }