diff --git a/uk/ac/sanger/artemis/components/alignment/JamView.java b/uk/ac/sanger/artemis/components/alignment/JamView.java
index d39984e80c606c8f10093e5fa66b3e23cb8d1674..179a66b64d0ca3d4c0f08681c889bd435cecf2fe 100644
--- a/uk/ac/sanger/artemis/components/alignment/JamView.java
+++ b/uk/ac/sanger/artemis/components/alignment/JamView.java
@@ -49,6 +49,7 @@ import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
 import java.awt.event.WindowEvent;
 import java.awt.event.WindowFocusListener;
+import java.awt.geom.GeneralPath;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -122,10 +123,12 @@ public class JamView extends JPanel
   private boolean isSingle = false;
   private boolean isSNPs = false;
   private boolean isStackView = false;
+  private boolean isCoverage = false;
   
   private FeatureDisplay feature_display;
   private Selection selection;
   private JPanel mainPanel;
+  private CoveragePanel coveragePanel;
   private boolean showScale = true;
   private Ruler ruler = new Ruler();
   private int nbasesInView;
@@ -404,6 +407,13 @@ public class JamView extends JPanel
 	    drawLineView(g2, seqLength, pixPerBase, start, end);
 	  else
 	    drawStackView(g2, seqLength, pixPerBase, start, end);
+	  
+	  if(isCoverage)
+	  {
+	    coveragePanel.setStartAndEnd(start, end);
+	    coveragePanel.setPixPerBase(pixPerBase);
+	    coveragePanel.repaint();
+	  }
 	}
   }
   
@@ -956,8 +966,6 @@ public class JamView extends JPanel
                             final FeatureDisplay feature_display)
   {
     this.mainPanel = mainPanel;
-
- 
     final JComponent topPanel;
     if(feature_display != null)
     {
@@ -1085,7 +1093,12 @@ public class JamView extends JPanel
     if(topPanel instanceof JPanel)
       mainPanel.add(topPanel, BorderLayout.NORTH);
     mainPanel.add(jspView, BorderLayout.CENTER);
-
+    
+    coveragePanel = new CoveragePanel();
+    mainPanel.add(coveragePanel, BorderLayout.SOUTH);
+    coveragePanel.setPreferredSize(new Dimension(900, 100));
+    coveragePanel.setVisible(false);
+    
     jspView.getVerticalScrollBar().setValue(
         jspView.getVerticalScrollBar().getMaximum());
 
@@ -1168,6 +1181,19 @@ public class JamView extends JPanel
       }
     });
     view.add(checkBoxStackView);
+    
+    
+    JCheckBoxMenuItem checkBoxCoverage = new JCheckBoxMenuItem("Coverage");
+    checkBoxCoverage.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        isCoverage = !isCoverage;
+        coveragePanel.setVisible(isCoverage);
+        repaint();
+      }
+    });
+    view.add(checkBoxCoverage);
   }
   
   public void setVisible(boolean visible)
@@ -1403,6 +1429,83 @@ public class JamView extends JPanel
     return selection;
   }
   
+  private class CoveragePanel extends JPanel
+  {
+	private static final long serialVersionUID = 1L;
+
+    private int start;
+	private int end;
+	private float pixPerBase;
+    
+    public CoveragePanel()
+    {
+      super();
+      setBackground(Color.white);
+    }
+    
+	/**
+	 * Override
+	 */
+	protected void paintComponent(Graphics g)
+	{
+	  super.paintComponent(g);
+	  Graphics2D g2 = (Graphics2D)g;
+	  
+	  if(readsInView == null)
+	    return;
+	  
+	  int windowSize = 10;
+	  int nBins = Math.round((end-start+1.f)/windowSize);
+	  float coverage[] = new float[nBins];
+	  for(int i=0; i<coverage.length; i++)
+	    coverage[i] = 0.f;
+	  
+	  float max = 0.f;
+	  for(int i=0; i<readsInView.size(); i++)
+	  {
+	    SAMRecord thisRead = readsInView.get(i);
+	    int length = thisRead.getReadLength();
+	    
+	    for(int j=0; j<length;j++)
+	    {
+	      int bin = 
+	        Math.round(((thisRead.getAlignmentStart()-start) + j) / windowSize);
+
+	      if(bin < 0 || bin > coverage.length-1)
+	        continue;   
+	      coverage[bin]+=1;
+	      if(coverage[bin] > max)
+	        max = coverage[bin];
+	    }
+	  }
+	  
+	  g2.setColor(Color.blue);
+	  GeneralPath shape = new GeneralPath();
+	  shape.moveTo(0,getHeight());
+	  for(int i=0; i<coverage.length; i++)
+	  {
+	    float xpos = ((i*(windowSize)) - windowSize/2.f)*pixPerBase;
+	    shape.lineTo(xpos,
+	        getHeight() - ((coverage[i]/max)*getHeight()));
+	  }
+	        
+
+	  shape.lineTo(getWidth(),getHeight());
+	  g2.fill(shape);
+	}
+	
+	protected void setStartAndEnd(int start, int end)
+	{
+	  this.start = start;
+	  this.end = end;
+	}
+
+	public void setPixPerBase(float pixPerBase)
+	{
+	  this.pixPerBase = pixPerBase;
+	}
+  }
+  
   private class Ruler extends JPanel
   {
     private static final long serialVersionUID = 1L;
@@ -1575,6 +1678,13 @@ public class JamView extends JPanel
     }
   }
   
+  public void selectionChanged(SelectionChangeEvent event)
+  {
+    repaint();
+  }
+  
+  
+  
   public static void main(String[] args)
   {
     String bam = args[0];
@@ -1624,8 +1734,5 @@ public class JamView extends JPanel
     frame.setVisible(true);
   }
 
-  public void selectionChanged(SelectionChangeEvent event)
-  {
-    repaint();
-  }
+
 }