Index: branches/pap/ippTools/src/bgtool.c
===================================================================
--- branches/pap/ippTools/src/bgtool.c	(revision 28199)
+++ branches/pap/ippTools/src/bgtool.c	(revision 28458)
@@ -317,5 +317,6 @@
     }
 
-    PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false);
+    PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
+    PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", false, false);
     PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
     PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false);
@@ -338,8 +339,30 @@
     if (psListLength(where->list)) {
         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
-        psStringAppend(&query, "AND %s", whereClause);
+        psStringAppend(&query, "\nAND %s", whereClause);
         psFree(whereClause);
     }
     psFree(where);
+
+    if (!rerun) {
+        psStringAppend(&query, "\nAND chipBackgroundRun.chip_bg_id IS NULL");
+        if (label) {
+            psStringAppend(&query,
+                           "\nAND (chipBackgroundRun.label = '%s'"
+                           " OR chipBackgroundRun.label IS NULL",
+                           label);
+        }
+        if (data_group) {
+            psStringAppend(&query,
+                           "\nAND (chipBackgroundRun.data_group = '%s'"
+                           " OR chipBackgroundRun.data_group IS NULL",
+                           data_group);
+        }
+        if (dist_group) {
+            psStringAppend(&query,
+                           "\nAND (chipBackgroundRun.dist_group = '%s'"
+                           " OR chipBackgroundRun.dist_group IS NULL",
+                           dist_group);
+        }
+    }
 
     if (!psDBTransaction(config->dbh)) {
@@ -1057,4 +1080,5 @@
     }
 
+    PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
     PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", true, false);
     PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
@@ -1082,4 +1106,26 @@
     }
     psFree(where);
+
+    if (!rerun) {
+        psStringAppend(&query, "\nAND warpBackgroundRun.warp_bg_id IS NULL");
+        if (label) {
+            psStringAppend(&query,
+                           "\nAND (warpBackgroundRun.label = '%s'"
+                           " OR warpBackgroundRun.label IS NULL",
+                           label);
+        }
+        if (data_group) {
+            psStringAppend(&query,
+                           "\nAND (warpBackgroundRun.data_group = '%s'"
+                           " OR warpBackgroundRun.data_group IS NULL",
+                           data_group);
+        }
+        if (dist_group) {
+            psStringAppend(&query,
+                           "\nAND (warpBackgroundRun.dist_group = '%s'"
+                           " OR warpBackgroundRun.dist_group IS NULL",
+                           dist_group);
+        }
+    }
 
     if (!psDBTransaction(config->dbh)) {
