diff --git a/uk/ac/sanger/artemis/components/alignment/SAMRecordFilter.java b/uk/ac/sanger/artemis/components/alignment/SAMRecordFilter.java
index ecca4ee92bbc16fe98765c5fd879dea3936592c3..db00c329fc06397e403890b8944340ff27697b18 100644
--- a/uk/ac/sanger/artemis/components/alignment/SAMRecordFilter.java
+++ b/uk/ac/sanger/artemis/components/alignment/SAMRecordFilter.java
@@ -1,13 +1,19 @@
 package uk.ac.sanger.artemis.components.alignment;
 
 import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 
+import javax.swing.JButton;
 import javax.swing.JCheckBox;
+import javax.swing.JFrame;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 
+import uk.ac.sanger.artemis.components.Utilities;
+
 
 class SAMRecordFilter extends JPanel
 {
@@ -17,13 +23,20 @@ class SAMRecordFilter extends JPanel
   {
     super();
     int nflags = SAMRecordFlagPredicate.FLAGS.length;
-    setLayout(new GridLayout(nflags, 2));
+    setLayout(new GridLayout(nflags+1, 2));
 
     final JCheckBox flagCheck[] = new JCheckBox[nflags];
+    final SAMRecordFlagPredicate predicate = bamView.getSamRecordFlagPredicate();
+    
     for(int j=0; j<nflags; j++)
     {
       flagCheck[j] = new JCheckBox(
           SAMRecordFlagPredicate.FLAGS_DESCRUIPTION[j], false);
+      
+      if(predicate != null &&
+         predicate.isFlagSet(SAMRecordFlagPredicate.FLAGS[j]))
+        flagCheck[j].setSelected(true);
+      
       flagCheck[j].addChangeListener(new ChangeListener()
       {
         public void stateChanged(ChangeEvent e)
@@ -33,43 +46,39 @@ class SAMRecordFilter extends JPanel
       });
       add(flagCheck[j]);
     }
-    
-    int status = JOptionPane.showConfirmDialog(bamView, 
-        this, "Filter Out Reads Based on Flag", 
-        JOptionPane.OK_CANCEL_OPTION);
 
-    if(status != JOptionPane.OK_OPTION)
-      return;
+    final JFrame f = new JFrame("Filter Out Reads Based on Flag");
+    JButton closeFrame = new JButton("Close");
+    closeFrame.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        f.dispose();
+      }
+    });
+    add(closeFrame);
+
+    f.getContentPane().add(this);
+    f.pack();
+    Utilities.centreFrame(f);
+    f.setVisible(true);
   } 
   
   private void filterChange(final BamView bamView,
                             final JCheckBox flagCheck[])
   {
     int nflags = SAMRecordFlagPredicate.FLAGS.length;
-    int flagsChecked = 0;
+    int flagCombined = 0;
     for(int j=0; j<nflags; j++)
     {
       if(flagCheck[j].isSelected())
-        flagsChecked++;
+        flagCombined = flagCombined | SAMRecordFlagPredicate.FLAGS[j];
     }
-    
-    bamView.setSamRecordFlagPredicate(null);
-    
-    if(flagsChecked == 0)
-    {
-      bamView.repaint();
-      return;
-    }
-    
-    int flagsOn[] = new int[flagsChecked];
-    int num = 0;
-    for(int j=0; j<nflags; j++)
-    {
-      if(flagCheck[j].isSelected())
-        flagsOn[num++] = SAMRecordFlagPredicate.FLAGS[j];
-    }
-    
-    bamView.setSamRecordFlagPredicate(new SAMRecordFlagPredicate(flagsOn));
+
+    if(flagCombined == 0)
+      bamView.setSamRecordFlagPredicate(null);
+    else
+      bamView.setSamRecordFlagPredicate(new SAMRecordFlagPredicate(flagCombined));
     bamView.repaint();
   }
   
diff --git a/uk/ac/sanger/artemis/components/alignment/SAMRecordFlagPredicate.java b/uk/ac/sanger/artemis/components/alignment/SAMRecordFlagPredicate.java
index dfd71f73e895f7ec02c7372fed887b19a35b94b3..29beb88bfea9e46a804eccec6248c319b8d496c1 100644
--- a/uk/ac/sanger/artemis/components/alignment/SAMRecordFlagPredicate.java
+++ b/uk/ac/sanger/artemis/components/alignment/SAMRecordFlagPredicate.java
@@ -28,7 +28,7 @@ import net.sf.samtools.SAMRecord;
  **/
 public class SAMRecordFlagPredicate implements SAMRecordPredicate
 {
-  private int flag[];
+  private int flag;
   
   private static final int READ_PAIRED_FLAG = 0x1;
   private static final int PROPER_PAIR_FLAG = 0x2;
@@ -73,7 +73,7 @@ public class SAMRecordFlagPredicate implements SAMRecordPredicate
   };
 
   
-  public SAMRecordFlagPredicate(int flag[])
+  public SAMRecordFlagPredicate(int flag)
   {
     this.flag = flag;
   }
@@ -86,11 +86,20 @@ public class SAMRecordFlagPredicate implements SAMRecordPredicate
    **/
   public boolean testPredicate (final SAMRecord samRecord)
   {
-    for(int i=0; i<flag.length; i++)
+    return isFlagSet(samRecord.getFlags());
+  }
+  
+  protected boolean isFlagSet(int thisFlag)
+  {
+    for(int i=0; i<FLAGS.length; i++)
     {
-      if((samRecord.getFlags() & flag[i]) == flag[i])
-        return true;
+      if((flag & FLAGS[i]) == FLAGS[i])
+      {
+        if((thisFlag & FLAGS[i]) == FLAGS[i])
+          return true;
+      }
     }
+
     return false;
   }
 }