diff --git a/uk/ac/sanger/artemis/components/alignment/JamView.java b/uk/ac/sanger/artemis/components/alignment/JamView.java
index 6025eb1817a1ecd41c62b21d507547c40a550bb0..deb6b14b24dcbbf0eb36507aea90ec194f17092e 100644
--- a/uk/ac/sanger/artemis/components/alignment/JamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/JamView.java
@@ -161,6 +161,8 @@ public class JamView extends JPanel
   
   private Point lastMousePoint = null;
   private SAMRecord mouseOverSAMRecord = null;
+  // record of where a mouse drag starts
+  private int dragStart = -1;
   
   private int maxHeight = 800;
   
@@ -376,6 +378,7 @@ public class JamView extends JPanel
 	super.paintComponent(g);
 	Graphics2D g2 = (Graphics2D)g;
 
+	mouseOverSAMRecord = null;
 	String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
 	float pixPerBase = getPixPerBaseByWidth();
@@ -719,7 +722,7 @@ public class JamView extends JPanel
       }
     }
     
-    drawYScale(g2, start, pixPerBase);
+    drawYScale(g2, start, pixPerBase, scaleHeight);
   }
   
   /**
@@ -1032,21 +1035,35 @@ public class JamView extends JPanel
     }
   }
   
-  
-  private void drawYScale(Graphics2D g2, int start, float pixPerBase)
+  /**
+   * Draw a y-scale for inferred size (isize) of reads.
+   * @param g2
+   * @param start
+   * @param pixPerBase
+   * @param xScaleHeight
+   */
+  private void drawYScale(Graphics2D g2, int start, float pixPerBase, int xScaleHeight)
   {
     g2.setColor(Color.black);
-    int maxY = getPreferredSize().height;
+    int maxY = getPreferredSize().height-xScaleHeight;
     int xpos = (int) (pixPerBase*start);
     
     for(int i=100; i<maxY; i+=100)
     {
-      g2.drawLine(xpos, getHeight()-i, xpos+2, getHeight()-i);
-      g2.drawString(Integer.toString(i), xpos+3, getHeight()-i);
+      int ypos = getHeight()-i-xScaleHeight;
+      g2.drawLine(xpos, ypos, xpos+2, ypos);
+      g2.drawString(Integer.toString(i), xpos+3, ypos);
     }
   }
   
-  
+  /**
+   * Draw a given read.
+   * @param g2
+   * @param thisRead
+   * @param pixPerBase
+   * @param stroke
+   * @param ypos
+   */
   private void drawRead(Graphics2D g2, SAMRecord thisRead,
 		                float pixPerBase, Stroke stroke, int ypos)
   {
@@ -1056,7 +1073,7 @@ public class JamView extends JPanel
     g2.drawLine((int)(thisStart * pixPerBase), ypos,
                 (int)(thisEnd * pixPerBase), ypos);
 
-    
+    // test if the mouse is over this read
     if(lastMousePoint != null)
     {
       if(lastMousePoint.getY()+2 > ypos && lastMousePoint.getY()-2 < ypos)
@@ -1687,13 +1704,28 @@ public class JamView extends JPanel
    **/
   private void handleCanvasMouseDragOrClick(final MouseEvent event)
   {
-    if(!showBaseAlignment || event.isShiftDown()) 
+    if(event.isShiftDown()) 
       return;
 
+    if(event.getClickCount() > 1)
+    {
+      getSelection().clear();
+      repaint();
+      return;  
+    }
+    
+    int onmask = MouseEvent.BUTTON1_DOWN_MASK;
+    
     String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
     float pixPerBase = ((float)getWidth())/(float)(seqLength);    
     int start = (int) Math.round(event.getPoint().getX()/pixPerBase);
+    
+    if (dragStart < 0 && (event.getModifiersEx() & onmask) == onmask)
+      dragStart = start;
+    else if((event.getModifiersEx() & onmask) != onmask)
+      dragStart = -1;
+
     if(start < 1)
       start = 1;
     if(start > seqLength)
@@ -1702,7 +1734,10 @@ public class JamView extends JPanel
     MarkerRange drag_range;
     try
     {
-      drag_range = new MarkerRange (bases.getForwardStrand(), start, start);
+      if(dragStart < 0)
+        drag_range = new MarkerRange (bases.getForwardStrand(), start, start);
+      else
+        drag_range = new MarkerRange (bases.getForwardStrand(), dragStart, start);
       getSelection().setMarkerRange(drag_range);
       repaint();
     }
@@ -1852,6 +1887,7 @@ public class JamView extends JPanel
 
     public void mouseReleased(MouseEvent e)
     {
+      dragStart = -1;
       maybeShowPopup(e);
     }