Index: /tags/ipp-20100610/ippTools/share/chiptool_processedimfile.sql
===================================================================
--- /tags/ipp-20100610/ippTools/share/chiptool_processedimfile.sql	(revision 28311)
+++ /tags/ipp-20100610/ippTools/share/chiptool_processedimfile.sql	(revision 28312)
@@ -29,5 +29,6 @@
     rawImfile.magicked AS raw_magicked,
     rawImfile.burntool_state,
-    magicDSRun.state AS dsRun_state
+    magicDSRun.state AS dsRun_state,
+    magicDSRun.magic_ds_id
 FROM chipRun
 JOIN chipImfile
Index: /tags/ipp-20100610/ippTools/src/pstamptool.c
===================================================================
--- /tags/ipp-20100610/ippTools/src/pstamptool.c	(revision 28311)
+++ /tags/ipp-20100610/ippTools/src/pstamptool.c	(revision 28312)
@@ -870,8 +870,9 @@
 
     PXOPT_LOOKUP_S64(job_id,    config->args, "-job_id", false, false);
+    PXOPT_LOOKUP_S64(req_id,    config->args, "-req_id", false, false);
     PXOPT_LOOKUP_S64(dep_id,    config->args, "-dep_id", false, false);
 
-    if (!job_id && !dep_id) {
-        psError(PS_ERR_UNKNOWN, true, "at least -job_id or -dep_id is required");
+    if (!job_id && !req_id && !dep_id) {
+        psError(PS_ERR_UNKNOWN, true, "at least one of -job_id -req_id or -dep_id is required");
         return false;
     }
@@ -888,5 +889,7 @@
 
     PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     PXOPT_COPY_S64(config->args, where, "-dep_id", "dep_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-state",  "pstampJob.state", "==");
 
     psString query = pxDataGet("pstamptool_updatejob.sql");
Index: /tags/ipp-20100610/ippTools/src/pstamptoolConfig.c
===================================================================
--- /tags/ipp-20100610/ippTools/src/pstamptoolConfig.c	(revision 28311)
+++ /tags/ipp-20100610/ippTools/src/pstamptoolConfig.c	(revision 28312)
@@ -160,6 +160,8 @@
     // -updatejob
     psMetadata *updatejobArgs = psMetadataAlloc();
-    psMetadataAddS64(updatejobArgs, PS_LIST_TAIL, "-job_id", 0,            "req_id for which to change state", 0);
-    psMetadataAddS64(updatejobArgs, PS_LIST_TAIL, "-dep_id", 0,            "dep_id for which to change state", 0);
+    psMetadataAddS64(updatejobArgs, PS_LIST_TAIL, "-req_id", 0,            "req_id of jobs to update", 0);
+    psMetadataAddS64(updatejobArgs, PS_LIST_TAIL, "-job_id", 0,            "job_id of jobs to update", 0);
+    psMetadataAddS64(updatejobArgs, PS_LIST_TAIL, "-dep_id", 0,            "dep_id of jobs to update", 0);
+    psMetadataAddStr(updatejobArgs, PS_LIST_TAIL, "-state", 0,            "current state of jobs to update", 0);
     psMetadataAddStr(updatejobArgs, PS_LIST_TAIL, "-set_state", 0,            "new state", NULL);
     psMetadataAddS16(updatejobArgs, PS_LIST_TAIL, "-set_fault", 0,            "new result", 0);
Index: /tags/ipp-20100610/magic/remove/src/streaksio.c
===================================================================
--- /tags/ipp-20100610/magic/remove/src/streaksio.c	(revision 28311)
+++ /tags/ipp-20100610/magic/remove/src/streaksio.c	(revision 28312)
@@ -1294,5 +1294,12 @@
         }
     }
-    sfiles->maskMask = ~convPoor;
+    // preserve pixels that are only suspect
+    psU32 suspect = (double) psMetadataLookupU32(&status, masks, "SUSPECT");
+    if (!status) {
+        psError(PM_ERR_CONFIG, false, "failed to lookup mask value for SUSPECT in recipes\n");
+        streaksExit("", PS_EXIT_CONFIG_ERROR);
+    }
+
+    sfiles->maskMask = ~(convPoor | suspect);
 }
 
Index: /tags/ipp-20100610/pstamp/src/ppstampMakeStamp.c
===================================================================
--- /tags/ipp-20100610/pstamp/src/ppstampMakeStamp.c	(revision 28311)
+++ /tags/ipp-20100610/pstamp/src/ppstampMakeStamp.c	(revision 28312)
@@ -688,5 +688,10 @@
         }
     }
-    psU32 maskMask = ~convPoor;
+    psU32 suspect = psMetadataLookupU32(&status, masks, "SUSPECT");
+    if (!status) {
+        psError(PM_ERR_CONFIG, false, "failed to lookup mask value for SUSPECT in recipes\n");
+        return false;
+    }
+    psU32 maskMask = ~(convPoor | suspect);
 
     double exciseValue;
