Index: /tags/ipp-20110622/ippTools/src/chiptool.c
===================================================================
--- /tags/ipp-20110622/ippTools/src/chiptool.c	(revision 31955)
+++ /tags/ipp-20110622/ippTools/src/chiptool.c	(revision 31956)
@@ -743,4 +743,5 @@
         faulted = false;
     }
+    PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false);
 
     psMetadata *where = psMetadataAlloc();
@@ -787,4 +788,10 @@
         // don't list faulted rows
         psStringAppend(&query, " %s", "AND chipProcessedImfile.fault = 0");
+    }
+
+    if (pstamp_order) {
+        // put runs in order of exposure id with newest chip Runs first
+        // The postage stamp parser depends on this behavior
+        psStringAppend(&query, "\nORDER by exp_id, chip_id DESC");
     }
 
Index: /tags/ipp-20110622/ippTools/src/chiptoolConfig.c
===================================================================
--- /tags/ipp-20110622/ippTools/src/chiptoolConfig.c	(revision 31955)
+++ /tags/ipp-20110622/ippTools/src/chiptoolConfig.c	(revision 31956)
@@ -210,4 +210,5 @@
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-data_group",  PS_META_DUPLICATE_OK, "search by chipRun data_group (LIKE comparison)", NULL);
     pxmagicAddArguments(processedimfileArgs);
+    psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-pstamp_order",  0,    "order results for postage stamp server", false);
 
     psMetadataAddU64(processedimfileArgs,  PS_LIST_TAIL, "-limit",  0,           "limit result set to N items", 0);
Index: /tags/ipp-20110622/ippTools/src/warptool.c
===================================================================
--- /tags/ipp-20110622/ippTools/src/warptool.c	(revision 31955)
+++ /tags/ipp-20110622/ippTools/src/warptool.c	(revision 31956)
@@ -1382,4 +1382,5 @@
     pxAddLabelSearchArgs (config, where, "-data_group",   "warpRun.data_group", "LIKE");
 
+    PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false);
     PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
 
@@ -1423,4 +1424,10 @@
     }
     psFree(where);
+
+    if (pstamp_order) {
+        // put runs in order of exposure id with newest warp Runs first
+        // The postage stamp parser depends on this behavior
+        psStringAppend(&query, "\nORDER by exp_id, warp_id DESC");
+    }
 
     // treat limit == 0 as "no limit"
@@ -2094,17 +2101,26 @@
 
     // warp_id, skycell_id, fault are required
-    PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false);
-    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", true, false);
-    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
     PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
 
     if (!state) {
-      psString query = pxDataGet("warptool_updateskyfile.sql");
-
-      if (!p_psDBRunQueryF(config->dbh, query, fault, warp_id, skycell_id)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
+      psMetadata *where = psMetadataAlloc();
+      PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
+      PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell_id", "==");
+      if (psListLength(where->list) == 0) {
+        // this won't happen because warptoolConfig requires these arguments
+        psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+        psFree(where);
         return false;
       }
-      psFree(query);
+ 
+      PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
+      PXOPT_LOOKUP_S16(quality, config->args, "-set_quality", false, false);
+
+      if (!pxSetFaultCode(config->dbh, "warpSkyfile", where, fault, quality)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
+        psFree(where);
+        return false;
+      }
+      psFree(where);
     }
     else {
@@ -2458,9 +2474,8 @@
 
     if (pstamp_order) {
-        // put runs in order of exposure id with newest chip Runs first
+        // put runs in order of exposure id with newest warp Runs first
         // The postage stamp parser depends on this behavior
         psStringAppend(&query, "\nORDER by exp_id, warp_id DESC");
     }
-
 
     // treat limit == 0 as "no limit"
Index: /tags/ipp-20110622/ippTools/src/warptoolConfig.c
===================================================================
--- /tags/ipp-20110622/ippTools/src/warptoolConfig.c	(revision 31955)
+++ /tags/ipp-20110622/ippTools/src/warptoolConfig.c	(revision 31956)
@@ -258,4 +258,5 @@
     // add arguments for spatial search
     pxspaceAddArguments(warpedArgs);
+    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-pstamp_order",  0,    "order results for postage stamp server", false);
 
     psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-all",  0,             "search without arguments", false);
@@ -398,7 +399,8 @@
     // -updateskyfile
     psMetadata *updateskyfileArgs = psMetadataAlloc();
-    psMetadataAddS64(updateskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,    "warptool ID to update", 0);
-    psMetadataAddStr(updateskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
+    psMetadataAddS64(updateskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,    "warptool ID to update (required)", 0);
+    psMetadataAddStr(updateskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update (required)", NULL);
     psMetadataAddS16(updateskyfileArgs, PS_LIST_TAIL, "-fault",  0,      "new fault code", 0);
+    psMetadataAddS16(updateskyfileArgs, PS_LIST_TAIL, "-set_quality",  0,"new quality value", 0);
     psMetadataAddStr(updateskyfileArgs, PS_LIST_TAIL, "-set_state", 0,   "set state", 0);
 
