Index: branches/czw_branch/20101203/ippTools/src/dettool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/dettool.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/dettool.c	(revision 30118)
@@ -572,4 +572,6 @@
     PXOPT_COPY_F64(config->args, where, "-select_moon_phase_min", "moon_phase", ">=");
     PXOPT_COPY_F64(config->args, where, "-select_moon_phase_max", "moon_phase", "<=");
+
+    PXOPT_COPY_STR(config->args, where, "-select_state", "state", "=");
     PXOPT_COPY_STR(config->args, where, "-comment", "comment", "LIKE");
 
Index: branches/czw_branch/20101203/ippTools/src/dettoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/dettoolConfig.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/dettoolConfig.c	(revision 30118)
@@ -138,4 +138,5 @@
     psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_moon_phase_min",  0,          "define min moon phase", NAN);
     psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_moon_phase_max",  0,          "define max moon phase", NAN);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-select_state",           0,          "select by state (default is 'full')", "full");
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-comment",                0,          "search by comment field (LIKE comparison)", NULL);
 
Index: branches/czw_branch/20101203/ippTools/src/difftool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/difftool.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/difftool.c	(revision 30118)
@@ -483,5 +483,5 @@
     psFree(where);
 
-     psStringAppend(&query, "\nORDER by priority DESC, diff_id");
+     psStringAppend(&query, "\nORDER by priority DESC, diff_id, skycell_id");
 
     // treat limit == 0 as "no limit"
@@ -1978,4 +1978,5 @@
     PXOPT_COPY_STR(config->args, stack2Where, "-skycell_id", "stackRun.skycell_id", "==");
     PXOPT_COPY_STR(config->args, stack1Where, "-input_label", "stackRun.label","==");
+    PXOPT_COPY_STR(config->args, stack1Where, "-input_data_group", "stackRun.data_group","==");
     PXOPT_COPY_STR(config->args, stack2Where, "-template_label", "stackRun.label","==");
     PXOPT_COPY_F32(config->args, stack1Where, "-good_frac", "stackSumSkyfile.good_frac", ">=");
@@ -2042,8 +2043,4 @@
     }
 
-    psString queryCopy = psStringCopy(query);
-    psFree(query);
-    query = queryCopy;
-    
     psStringSubstitute(&query, stack1Query, "@STACK1_QUERY@");
     psStringSubstitute(&query, stack2Query, "@STACK2_QUERY@");
@@ -2120,9 +2117,4 @@
 	psStringAppend(&this_stack1Query,"AND %s", thisWhere);
 	psFree(thisWhere);
-
-	psString queryCopy = psStringCopy(query);
-	psFree(query);
-	query = queryCopy;
-    
 
 	psStringSubstitute(&query, this_stack1Query, "@STACK1_QUERY@");
Index: branches/czw_branch/20101203/ippTools/src/difftoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/difftoolConfig.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/difftoolConfig.c	(revision 30118)
@@ -336,4 +336,5 @@
     psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-input_label", 0, "search by stack label for input", NULL);
     psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-template_label", 0, "search by stack label for template", NULL);
+    psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-input_data_group", 0, "search by stack data_group for input", NULL);
     psMetadataAddF32(definestackstackArgs, PS_LIST_TAIL, "-good_frac", 0, "minimum good fraction of skycell", NAN);
     psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-set_workdir", 0, "define workdir (required)", NULL);
Index: branches/czw_branch/20101203/ippTools/src/magicdstool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/magicdstool.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/magicdstool.c	(revision 30118)
@@ -1155,6 +1155,6 @@
 
     psMetadata *where = psMetadataAlloc();
-    // new state
-    PXOPT_LOOKUP_STR(new_state, config->args, "-set_state", false, false);
+    // new state (required
+    PXOPT_LOOKUP_STR(new_state, config->args, "-set_state", true, false);
     // old state (required)
     PXOPT_LOOKUP_STR(state, config->args, "-state", true, false);
Index: branches/czw_branch/20101203/ippTools/src/magicdstoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/magicdstoolConfig.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/magicdstoolConfig.c	(revision 30118)
@@ -163,5 +163,5 @@
     // -clearstatefaults
     psMetadata *clearstatefaultsArgs = psMetadataAlloc();
-    psMetadataAddStr(clearstatefaultsArgs, PS_LIST_TAIL, "-set_state", 0, "new value for state", NULL);
+    psMetadataAddStr(clearstatefaultsArgs, PS_LIST_TAIL, "-set_state", 0, "new value for state (required)", NULL);
     psMetadataAddStr(clearstatefaultsArgs, PS_LIST_TAIL, "-state", 0, "search by state (required)", NULL);
     psMetadataAddS64(clearstatefaultsArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magictool de-streak ID", 0);
Index: branches/czw_branch/20101203/ippTools/src/pstamptool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pstamptool.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/pstamptool.c	(revision 30118)
@@ -950,9 +950,12 @@
     PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     PXOPT_COPY_S64(config->args, where, "-dep_id", "dep_id", "==");
+
+    PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-component", "component", "==");
+
     PXOPT_COPY_S32(config->args, where, "-fault",  "pstampDependent.fault", "==");
+
     pxAddLabelSearchArgs(config, where, "-label", "pstampRequest.label", "LIKE");
-    // if (fault_count) {
-        PXOPT_COPY_S32(config->args, where, "-fault_count", "pstampDependent.fault_count", ">=");
-    // }
+    PXOPT_COPY_S32(config->args, where, "-fault_count", "pstampDependent.fault_count", ">=");
 
     // XXX: How about selecting by pstampRequest.label? No. That is too dangerous by itself.
Index: branches/czw_branch/20101203/ippTools/src/pstamptoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pstamptoolConfig.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/pstamptoolConfig.c	(revision 30118)
@@ -178,4 +178,6 @@
     psMetadataAddS64(stopdependentjobArgs, PS_LIST_TAIL,  "-job_id", 0,       "job_id of jobs to update", 0);
     psMetadataAddS64(stopdependentjobArgs, PS_LIST_TAIL,  "-dep_id", 0,       "dep_id of jobs to update", 0);
+    psMetadataAddS64(stopdependentjobArgs, PS_LIST_TAIL,  "-stage_id", 0,     "stage_id of jobs to update", 0);
+    psMetadataAddStr(stopdependentjobArgs, PS_LIST_TAIL,  "-component", 0,    "component of jobs to update", NULL);
     psMetadataAddS16(stopdependentjobArgs, PS_LIST_TAIL,  "-fault", 0,        "current value for dependent fault", 0);
     psMetadataAddS32(stopdependentjobArgs, PS_LIST_TAIL,  "-fault_count", 0,   "select by fault_count (>=)", 0);
Index: branches/czw_branch/20101203/ippTools/src/pubtool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pubtool.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/pubtool.c	(revision 30118)
@@ -96,6 +96,8 @@
     PXOPT_LOOKUP_STR(comment, config->args, "-comment",  false, false);
     PXOPT_LOOKUP_BOOL(unmagicked, config->args, "-unmagicked",  false);
-
-    if (!publishClientInsert(config->dbh, 0, 0, product, stage, !unmagicked, workdir, comment)) {
+    PXOPT_LOOKUP_STR(name, config->args, "-name",  false, false);
+    PXOPT_LOOKUP_S16(output_format, config->args, "-output_format",  false, false);
+
+    if (!publishClientInsert(config->dbh, 0, 0, product, stage, !unmagicked, workdir, comment, name, output_format)) {
         psError(PS_ERR_UNKNOWN, false, "Database error");
         return false;
@@ -313,4 +315,5 @@
     PXOPT_COPY_STR(config->args, where, "-stage", "publishClient.stage", "==");
     PXOPT_COPY_STR(config->args, where, "-comment", "publishClient.comment", "LIKE");
+    PXOPT_COPY_STR(config->args, where, "-name", "publishClient.name", "LIKE");
     pxAddLabelSearchArgs(config, where, "-label", "publishRun.label", "==");
 
Index: branches/czw_branch/20101203/ippTools/src/pubtoolConfig.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/pubtoolConfig.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/pubtoolConfig.c	(revision 30118)
@@ -83,4 +83,5 @@
     psMetadataAddBool(pendingArgs, PS_LIST_TAIL, "-simple",  0, "use simple output format?", false);
     psMetadataAddU64(pendingArgs, PS_LIST_TAIL, "-limit",  0, "limit result set", 0);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-name", 0, "search on client name", NULL);
 
     // -add
Index: branches/czw_branch/20101203/ippTools/src/regtool.c
===================================================================
--- branches/czw_branch/20101203/ippTools/src/regtool.c	(revision 30014)
+++ branches/czw_branch/20101203/ippTools/src/regtool.c	(revision 30118)
@@ -300,5 +300,5 @@
   psStringSubstitute(&query,date,"@DATE@");
 
-  fprintf(stderr,"%s",query);
+  //  fprintf(stderr,"%s",query);
 
   if (!p_psDBRunQuery(config->dbh, query)) {
@@ -349,5 +349,8 @@
       psMetadataAddStr(row,PS_LIST_TAIL,"previous_class_id",PS_META_REPLACE,"",previous_class_id);
     }
-    
+    // class_id = NULL sorts to the top of the list, so skip those (incomplete downloads)
+    if (!this_class_id) {
+      continue;
+    }
     // Determine if we've crossed a class_id boundary, as this resets the bits.
     if (previous_class_id) {
@@ -370,7 +373,9 @@
     if ((psMetadataLookupS32(NULL,row,"is_downloaded") != 1)||
 	(psMetadataLookupS32(NULL,row,"is_registered") != 1)) {
+      //      printf("I claim this isn't downloaded or registered? %s %s\n",this_uri,this_class_id);
       ok_to_burn = false;
     }
     if (already_burned == false) {
+      //      printf("already_burned looks false %s %s\n",this_uri,this_class_id);
       ok_to_burn = false;
     }
@@ -398,5 +403,5 @@
     }      
 
-    //    printf("STATUS: %s %s %s %s (%d %d)\n",this_uri,previous_uri,this_class_id,previous_class_id,ok_to_burn,already_burned);
+    //    printf("STATUS: %s %s %s %s (%d %d) %d %d %d\n",this_uri,previous_uri,this_class_id,previous_class_id,ok_to_burn,already_burned,psMetadataLookupS32(NULL,row,"burntool_state"),psMetadataLookupS32(NULL,row,"is_registered"),psMetadataLookupS32(NULL,row,"is_downloaded"));
 
     // If the state of this imfile is not "pending_burntool" then we can't burn it. 
