diff --git a/uk/ac/sanger/artemis/components/alignment/JamView.java b/uk/ac/sanger/artemis/components/alignment/JamView.java
index 1a2c96fb5b21f97148c07898cd1ad44f3f666aab..5c9c49f69783a530294c770bec95725d82d36ea6 100644
--- a/uk/ac/sanger/artemis/components/alignment/JamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/JamView.java
@@ -144,6 +144,8 @@ public class JamView extends JPanel
   private JPopupMenu popup;
   // use the picard library otherwise call samtools
   public static boolean PICARD = true;
+  
+  private boolean painting = true;
 
  
   public JamView(String bam, 
@@ -328,7 +330,7 @@ public class JamView extends JPanel
       }
     }
     inputSam.close();
-    //System.out.println("readFromBamPicard "+start+".."+end);
+    System.out.println("readFromBamPicard "+start+".."+end);
   }
   
   /**
@@ -336,12 +338,15 @@ public class JamView extends JPanel
    */
   protected void paintComponent(Graphics g)
   {
+    if(!painting)
+      return;
+    
 	super.paintComponent(g);
 	Graphics2D g2 = (Graphics2D)g;
 
 	String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
-	float pixPerBase = ((float)getWidth())/((float)seqLength);
+	float pixPerBase = getPixPerBaseByWidth();
 	
     int start;
     final int end;
@@ -351,7 +356,7 @@ public class JamView extends JPanel
     else
     {
       double x = jspView.getViewport().getViewRect().getX();
-      start = 1 + (int) (seqLength * ( (float)x / (float)getWidth()));
+      start = 1 + (int) (seqLength * ( (float)x / (float)getPreferredSize().getWidth()));
     }
     
     if(endBase > 0)
@@ -364,7 +369,8 @@ public class JamView extends JPanel
       end   = (int) (start + ((float)width / (float)pixPerBase));
     }
 
-    //System.out.println("paintComponent "+start+".."+end+"       "+startBase+".."+endBase+"  pixPerBase="+pixPerBase);
+    System.out.println("paintComponent "+start+".."+end+"       "+startBase+".."+endBase+
+       "  pixPerBase="+pixPerBase+"  getPreferredSize().getWidth()="+getPreferredSize().getWidth());
     
     if(laststart != start ||
        lastend   != end)
@@ -390,12 +396,30 @@ public class JamView extends JPanel
     
     laststart = start;
     lastend   = end;
-	if(pixPerBase*2 >= ALIGNMENT_PIX_PER_BASE)
+	if(pixPerBase*3 >= ALIGNMENT_PIX_PER_BASE)
 	  drawBaseAlignment(g2, seqLength, pixPerBase, start, end);
 	else
 	  drawLineView(g2, seqLength, pixPerBase, start, end);
   }
   
+  
+  private float getPixPerBaseByWidth()
+  {
+    String refName = (String) combo.getSelectedItem();
+    int seqLength = seqLengths.get(refName);
+    return ((float)getPreferredSize().getWidth())/((float)seqLength);
+  }
+  
+  private float getPixPerBaseByBasesInView()
+  {
+    int width = jspView.getViewport().getViewRect().width;
+    if(jspView.getVerticalScrollBar() != null)
+      width += jspView.getVerticalScrollBar().getWidth();
+    
+    return ((float)width)/(float)(nbasesInView); 
+  }
+  
+  
   /**
    * Draw the zoomed-in base view.
    * @param g2
@@ -493,7 +517,9 @@ public class JamView extends JPanel
     
     if(ypos > getHeight())
     {
-      setPreferredSize(new Dimension(getWidth(), ypos));
+      Dimension d = getPreferredSize();
+      d.setSize(getPreferredSize().getWidth(), ypos);
+      setPreferredSize(d);
       revalidate();
     }
   }
@@ -937,7 +963,6 @@ public class JamView extends JPanel
         {
           int startBase = getBaseAtStartOfView();
           setZoomLevel((int) (JamView.this.nbasesInView * 1.1));
-          revalidate();
           goToBasePosition(startBase);
         }
       });
@@ -952,7 +977,6 @@ public class JamView extends JPanel
             return;
           int startBase = getBaseAtStartOfView();
           setZoomLevel((int) (JamView.this.nbasesInView * .9));
-          revalidate();
           goToBasePosition(startBase);
         }
       });
@@ -962,7 +986,9 @@ public class JamView extends JPanel
     topPanel.add(buttonAutoHide, gc);
 
     mainPanel.setPreferredSize(new Dimension(900, 400));
-    jspView = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+    
+    jspView = new JScrollPane(this, 
+        JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
         JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
 
     setDisplay(1, nbasesInView, null);
@@ -985,7 +1011,6 @@ public class JamView extends JPanel
           case KeyEvent.VK_UP:
             int startBase = getBaseAtStartOfView();
             setZoomLevel((int) (JamView.this.nbasesInView * 1.1));
-            revalidate();
             goToBasePosition(startBase);
             break;
           case KeyEvent.VK_DOWN:
@@ -1051,18 +1076,13 @@ public class JamView extends JPanel
   private void setZoomLevel(final int nbasesInView)
   {
     this.nbasesInView = nbasesInView;
-    int start = getBaseAtStartOfView();
 
-    System.out.println("setZoomLevel "+start);
+    System.out.println("setZoomLevel "+nbasesInView+"  "+getBaseAtStartOfView());
     String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
-    int width = jspView.getViewport().getViewRect().width;
-    if(jspView.getVerticalScrollBar() != null)
-      width += jspView.getVerticalScrollBar().getWidth();
-    
-    float pixPerBase = ((float)width)/(float)(nbasesInView); 
-    
-    if(pixPerBase*2 > ALIGNMENT_PIX_PER_BASE)
+    float pixPerBase = getPixPerBaseByBasesInView(); 
+
+    if(pixPerBase*3 > ALIGNMENT_PIX_PER_BASE)
     {
       pixPerBase = ALIGNMENT_PIX_PER_BASE;
       checkBoxSingle.setVisible(false);
@@ -1080,9 +1100,9 @@ public class JamView extends JPanel
     Dimension d = new Dimension();
     d.setSize((seqLength*pixPerBase), 800.d);
     setPreferredSize(d);
+    painting = false;
     revalidate();
-
-    repaint();
+    painting = true;
   }
   
   /**
@@ -1095,9 +1115,10 @@ public class JamView extends JPanel
     String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
     
-    int width = getPreferredSize().width;
+    float width = (float) getPreferredSize().getWidth();
     
-    p.x = Math.round((float)width*((float)(base-1)/(float)seqLength));
+    p.x = Math.round(width*((float)(base-1)/(float)seqLength));
+    System.out.println("goToBasePosition "+base);
     jspView.getViewport().setViewPosition(p);
   }
   
@@ -1113,12 +1134,23 @@ public class JamView extends JPanel
   {
     this.startBase = start;
     this.endBase   = end;
+    this.nbasesInView = end-start+1;
     
     String refName = (String) combo.getSelectedItem();
     int seqLength = seqLengths.get(refName);
 
-    double pixPerBase = getPixPerBase(start, end);
-    if(pixPerBase*2 > ALIGNMENT_PIX_PER_BASE)
+    float pixPerBase;
+    if(jspView.getViewport().getViewRect().width > 0)
+      pixPerBase = getPixPerBaseByBasesInView();
+    else
+    {
+      if(feature_display == null)
+        pixPerBase = 1000.f/(float)(end-start+1);
+      else
+        pixPerBase = feature_display.getWidth()/(float)(end-start+1);
+    }
+
+    if(pixPerBase*3 > ALIGNMENT_PIX_PER_BASE)
     {
       pixPerBase = ALIGNMENT_PIX_PER_BASE;
       checkBoxSingle.setVisible(false);
@@ -1145,13 +1177,7 @@ public class JamView extends JPanel
     }
   }
   
-  private double getPixPerBase(int start, int end)
-  {
-    if(feature_display == null)
-      return 1000.d/(double)(end-start+1);
-    else
-      return feature_display.getWidth()/(double)(end-start+1);
-  }
+
 
   /**
    * Return an Artemis entry from a file 
@@ -1292,7 +1318,7 @@ public class JamView extends JPanel
 
       for(int i=startMark; i<end; i+=10)
       {
-        int xpos = (i-1-start)*ALIGNMENT_PIX_PER_BASE;
+        int xpos = (i-start)*ALIGNMENT_PIX_PER_BASE;
         g2.drawString(Integer.toString(i), xpos, ypos);
         
         xpos+=(ALIGNMENT_PIX_PER_BASE/2);
@@ -1410,14 +1436,23 @@ public class JamView extends JPanel
   {
     if(event.getType() == DisplayAdjustmentEvent.SCALE_ADJUST_EVENT)
     {
-      this.nbasesInView = event.getWidthInBases();
+      laststart = -1;
+      lastend = -1;
+      this.startBase = event.getStart();
+      this.endBase   = event.getEnd();
+      
+      int width = event.getEnd()-event.getStart()+1;
+      System.out.println("displayAdjustmentValueChanged() "+event.getStart()+".."+event.getEnd()+"  +width");
+
+      setZoomLevel(width);
+      goToBasePosition(event.getStart());
       setDisplay(event.getStart(), event.getEnd(), event);
-      revalidate();
       repaint();
     }
     else
     {
       setDisplay(event.getStart(), event.getEnd(), event);
+      repaint();
     }
   }