diff --git a/uk/ac/sanger/artemis/components/alignment/BamView.java b/uk/ac/sanger/artemis/components/alignment/BamView.java
index 93193d7684e69831734b6f8acce3234e82eb1dde..27706454899a9178a91d7bd514439a67c8e6b6f2 100644
--- a/uk/ac/sanger/artemis/components/alignment/BamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/BamView.java
@@ -971,21 +971,25 @@ public class BamView extends JPanel
     laststart = start;
     lastend   = end;
     
-    if(showBaseAlignment)
-	  drawBaseAlignment(g2, seqLength, pixPerBase, start, end);
-	else
-	{
-	  if(isCoverageView(pixPerBase))
-	    drawCoverage(g2,start, end, pixPerBase);
-	  else if(isStackView())  
-	    drawStackView(g2, seqLength, pixPerBase, start, end);
-	  else if(isPairedStackView())
-	    drawPairedStackView(g2, seqLength, pixPerBase, start, end);
-	  else if(isStrandStackView())
-	    drawStrandStackView(g2, seqLength, pixPerBase, start, end);
+    // this needs to be synchronized when cloning BAM window
+    synchronized(this)
+    {
+      if(showBaseAlignment)
+	    drawBaseAlignment(g2, seqLength, pixPerBase, start, end);
 	  else
-	    drawLineView(g2, seqLength, pixPerBase, start, end);
-	}
+	  {
+	    if(isCoverageView(pixPerBase))
+	      drawCoverage(g2,start, end, pixPerBase);
+  	    else if(isStackView())  
+	      drawStackView(g2, seqLength, pixPerBase, start, end);
+	    else if(isPairedStackView())
+	      drawPairedStackView(g2, seqLength, pixPerBase, start, end);
+	    else if(isStrandStackView())
+	      drawStrandStackView(g2, seqLength, pixPerBase, start, end);
+	    else
+	      drawLineView(g2, seqLength, pixPerBase, start, end);
+	  }
+    }
     
     if(isCoverage)
       coveragePanel.repaint();
@@ -2861,21 +2865,7 @@ public class BamView extends JPanel
     {
       public void actionPerformed(ActionEvent e)
       {
-        BamView bamView = new BamView(new Vector<String>(bamList), 
-            null, nbasesInView, entry_edit,
-            feature_display, bases, (JPanel) mainPanel.getParent(), null);
-        bamView.getJspView().getVerticalScrollBar().setValue(
-            bamView.getJspView().getVerticalScrollBar().getMaximum());
-        getJspView().getVerticalScrollBar().setValue(
-            bamView.getJspView().getVerticalScrollBar().getMaximum());
-
-        int start = getBaseAtStartOfView();
-        setDisplay(start, nbasesInView+start, null);
-        if(feature_display != null)
-        {
-          feature_display.addDisplayAdjustmentListener(bamView);
-          feature_display.getSelection().addSelectionChangeListener(bamView);
-        }
+        cloneBamView();
       } 
     });
     menu.add(new JSeparator());
@@ -3505,6 +3495,28 @@ public class BamView extends JPanel
     return null;
   }
   
+  /**
+   * Open another BamView window
+   */
+  public void cloneBamView()
+  {
+    BamView bamView = new BamView(new Vector<String>(bamList), 
+        null, nbasesInView, entry_edit,
+        feature_display, bases, (JPanel) mainPanel.getParent(), null);
+    bamView.getJspView().getVerticalScrollBar().setValue(
+        bamView.getJspView().getVerticalScrollBar().getMaximum());
+    getJspView().getVerticalScrollBar().setValue(
+        bamView.getJspView().getVerticalScrollBar().getMaximum());
+
+    int start = getBaseAtStartOfView();
+    setDisplay(start, nbasesInView+start, null);
+    if(feature_display != null)
+    {
+      feature_display.addDisplayAdjustmentListener(bamView);
+      feature_display.getSelection().addSelectionChangeListener(bamView);
+    }
+  }
+  
   /**
    * Artemis event notification
    */