Index: trunk/ippTools/scripts/warptest.sh
===================================================================
--- trunk/ippTools/scripts/warptest.sh	(revision 17142)
+++ trunk/ippTools/scripts/warptest.sh	(revision 17145)
@@ -16,4 +16,6 @@
 warptool -tooverlap -warp_id 1 || exit 1
 
+exit 1
+
 warptool -addoverlap -mapfile mapfile.txt || exit 1
 
Index: trunk/ippTools/share/warptool_tooverlap.sql
===================================================================
--- trunk/ippTools/share/warptool_tooverlap.sql	(revision 17142)
+++ trunk/ippTools/share/warptool_tooverlap.sql	(revision 17145)
@@ -1,9 +1,11 @@
 SELECT
     warpRun.warp_id,
-    camProcessedExp.cam_id,
+    warpRun.cam_id,
+    warpRun.workdir,
     warpRun.tess_id,
-    warpRun.workdir,
+    warpRun.label,
     rawExp.camera,
-    exp_id
+    exp_id,
+    warpRun.magiced
 FROM warpRun
 JOIN camProcessedExp
@@ -15,4 +17,6 @@
 LEFT JOIN warpSkyCellMap
     USING(warp_id, cam_id)
+LEFT JOIN warpMask
+    ON warpRun.label = warpMask.label
 WHERE
     warpRun.state = 'run'
@@ -20,2 +24,3 @@
     AND warpSkyCellMap.warp_id IS NULL
     AND warpSkyCellMap.cam_id IS NULL
+    AND warpMask.label IS NULL
Index: trunk/ippTools/share/warptool_towarped.sql
===================================================================
--- trunk/ippTools/share/warptool_towarped.sql	(revision 17142)
+++ trunk/ippTools/share/warptool_towarped.sql	(revision 17145)
@@ -21,4 +21,6 @@
     AND warpSkyCellMap.skycell_id = warpSkyfile.skycell_id
     AND warpSkyCellMap.tess_id = warpSkyfile.tess_id
+LEFT JOIN warpMask
+    ON warpRun.label = warpMask.label
 WHERE
     warpRun.state = 'run'
@@ -27,3 +29,3 @@
     AND warpSkyfile.tess_id IS NULL
     AND warpSkyCellMap.fault = 0
-
+    AND warpMask.label IS NULL
Index: trunk/ippTools/src/pxtables.c
===================================================================
--- trunk/ippTools/src/pxtables.c	(revision 17142)
+++ trunk/ippTools/src/pxtables.c	(revision 17145)
@@ -86,4 +86,5 @@
     CREATE_TABLE(warpSkyCellMapCreateTable);
     CREATE_TABLE(warpSkyfileCreateTable);
+    CREATE_TABLE(warpMaskCreateTable);
     CREATE_TABLE(stackRunCreateTable);
     CREATE_TABLE(stackInputSkyfileCreateTable);
@@ -185,4 +186,5 @@
     DROP_TABLE(warpSkyCellMapDropTable);
     DROP_TABLE(warpSkyfileDropTable);
+    DROP_TABLE(warpMaskDropTable);
     DROP_TABLE(diffRunDropTable);
     DROP_TABLE(diffInputSkyfileDropTable);
Index: trunk/ippTools/src/warptool.c
===================================================================
--- trunk/ippTools/src/warptool.c	(revision 17142)
+++ trunk/ippTools/src/warptool.c	(revision 17145)
@@ -43,4 +43,7 @@
 static bool warpedMode(pxConfig *config);
 static bool revertwarpedMode(pxConfig *config);
+static bool blockMode(pxConfig *config);
+static bool maskedMode(pxConfig *config);
+static bool unblockMode(pxConfig *config);
 
 static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
@@ -77,4 +80,8 @@
         MODECASE(WARPTOOL_MODE_WARPED,            warpedMode);
         MODECASE(WARPTOOL_MODE_REVERTWARPED,      revertwarpedMode);
+        MODECASE(WARPTOOL_MODE_BLOCK,             blockMode);
+        MODECASE(WARPTOOL_MODE_MASKED,            maskedMode);
+        MODECASE(WARPTOOL_MODE_UNBLOCK,           unblockMode);
+
         default:
             psAbort("invalid option (this should not happen)");
@@ -926,4 +933,81 @@
 
 
+static bool blockMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(label, config->args, "-label", true, false);
+
+    if (!warpMaskInsert(config->dbh, label)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+    return true;
+}
+
+
+static bool maskedMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    psString query = psStringCopy("SELECT * FROM warpMask");
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+    if (!psArrayLength(output)) {
+        psTrace("warpool", PS_LOG_INFO, "no rows found");
+        psFree(output);
+        return true;
+    }
+
+    if (!convertIdToStr(output)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to convert id fields into a strings");
+        psFree(output);
+        return false;
+    }
+
+    // negative simple so the default is true
+    if (!ippdbPrintMetadatas(stdout, output, "warpMask", !simple)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print array");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
+
+    return true;
+}
+
+
+static bool unblockMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(label, config->args, "-label", true, false);
+
+    char *query = "DELETE FROM warpMask WHERE label = '%s'";
+
+    if (!p_psDBRunQuery(config->dbh, query, label)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+    return true;
+}
+
+
 static bool isValidMode(pxConfig *config, const char *mode)
 {
Index: trunk/ippTools/src/warptool.h
===================================================================
--- trunk/ippTools/src/warptool.h	(revision 17142)
+++ trunk/ippTools/src/warptool.h	(revision 17145)
@@ -38,4 +38,7 @@
     WARPTOOL_MODE_WARPED,
     WARPTOOL_MODE_REVERTWARPED,
+    WARPTOOL_MODE_BLOCK,
+    WARPTOOL_MODE_MASKED,
+    WARPTOOL_MODE_UNBLOCK,
 } warptoolMode;
 
Index: trunk/ippTools/src/warptoolConfig.c
===================================================================
--- trunk/ippTools/src/warptoolConfig.c	(revision 17142)
+++ trunk/ippTools/src/warptoolConfig.c	(revision 17145)
@@ -196,7 +196,20 @@
             "search by fault code", 0);
 
+    // -block
+    psMetadata *blockArgs = psMetadataAlloc();
+    psMetadataAddStr(blockArgs, PS_LIST_TAIL, "-label",  0,
+            "name of a label to mask out (required)", NULL);
+
+    // -masked
+    psMetadata *maskedArgs = psMetadataAlloc();
+    psMetadataAddBool(maskedArgs, PS_LIST_TAIL, "-simple",  0,
+            "use the simple output format", false);
+
+    // -unblock
+    psMetadata *unblockArgs = psMetadataAlloc();
+    psMetadataAddStr(unblockArgs, PS_LIST_TAIL, "-label",  0,
+            "name of a label to unmask (required)", NULL);
 
     psFree(now);
-
     psMetadata *argSets = psMetadataAlloc();
     psMetadata *modes   = psMetadataAlloc();
@@ -213,4 +226,7 @@
     PXOPT_ADD_MODE("-warped",          "", WARPTOOL_MODE_WARPED,         warpedArgs);
     PXOPT_ADD_MODE("-revertwarped",    "", WARPTOOL_MODE_REVERTWARPED,   revertwarpedArgs);
+    PXOPT_ADD_MODE("-block",           "set a label block", WARPTOOL_MODE_BLOCK,          blockArgs);
+    PXOPT_ADD_MODE("-masked",          "show blocked lables", WARPTOOL_MODE_MASKED,         maskedArgs);
+    PXOPT_ADD_MODE("-unblock",         "remove a label block", WARPTOOL_MODE_UNBLOCK,        unblockArgs);
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
