Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 26676)
+++ trunk/ippTools/src/dettool.c	(revision 26815)
@@ -94,4 +94,5 @@
         MODECASE(DETTOOL_MODE_PENDINGCLEANUP_PROCESSEDEXP, pendingcleanup_processedexpMode);
         MODECASE(DETTOOL_MODE_DONECLEANUP_PROCESSEDEXP, donecleanup_processedexpMode);
+	MODECASE(DETTOOL_MODE_UPDATESTATE_PROCESSED, updatestateprocessedMode);
         // stacked
         MODECASE(DETTOOL_MODE_TOSTACKED,        tostackedMode);
@@ -142,4 +143,5 @@
         MODECASE(DETTOOL_MODE_PENDINGCLEANUP_RESIDEXP, pendingcleanup_residexpMode);
         MODECASE(DETTOOL_MODE_DONECLEANUP_RESIDEXP, donecleanup_residexpMode);
+	MODECASE(DETTOOL_MODE_UPDATESTATE_RESID, updatestateresidMode);
         // detrunsummary
         MODECASE(DETTOOL_MODE_TODETRUNSUMMARY,  todetrunsummaryMode);
@@ -1859,47 +1861,113 @@
 
 
-bool setProcessedImfileDataState(pxConfig *config, psS64 det_id, psS64 exp_id, const char *class_id, const char *data_state)
+bool setProcessedImfileDataState(pxConfig *config, psMetadata *where, const char *data_state)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where, false);
     PS_ASSERT_PTR_NON_NULL(data_state, false);
-    PS_ASSERT_PTR_NON_NULL(class_id, false);
 
     if (!isValidDataState (data_state)) return false;
-    
-    char *query = "UPDATE detProcessedImfile SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND exp_id = %" PRId64 
-	" AND class_id = '%s'";
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, exp_id, class_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", exp_id %" PRId64 ", class_id %s", 
-		det_id, exp_id, class_id);
-        return false;
-    }
-
-    return true;
-}
-
-bool setProcessedExpDataState(pxConfig *config, psS64 det_id, psS64 exp_id, const char *data_state)
+
+    psString query = psStringCopy("UPDATE detProcessedImfile SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+
+bool setProcessedExpDataState(pxConfig *config, psMetadata *where, const char *data_state)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where, false);
     PS_ASSERT_PTR_NON_NULL(data_state, false);
 
     if (!isValidDataState (data_state)) return false;
 
-    char *query = "UPDATE detProcessedExp SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND exp_id = %" PRId64;
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, exp_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", exp_id %" PRId64, 
-		det_id, exp_id);
-        return false;
-    }
-
-    return true;
-}
-
-
+    psString query = psStringCopy("UPDATE detProcessedExp SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+
+bool setResidImfileDataState(pxConfig *config, psMetadata *where, const char *data_state)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where,false);
+    PS_ASSERT_PTR_NON_NULL(data_state, false);
+
+    if (!isValidDataState (data_state)) return false;
+
+    psString query = psStringCopy("UPDATE detResidImfile SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+// This function apparently not used anymore.
+bool setResidExpDataState(pxConfig *config, psMetadata *where, const char *data_state)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where,false);
+    PS_ASSERT_PTR_NON_NULL(data_state, false);
+
+    if (!isValidDataState (data_state)) return false;
+
+    psString query = psStringCopy("UPDATE detResidExp SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+
+// Not yet updated for cleaning
 bool setStackedImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, const char *class_id, const char *data_state)
 {
@@ -1988,48 +2056,5 @@
     return true;
 }
-
-bool setResidImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, psS64 exp_id, const char *class_id, const char *data_state)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-    PS_ASSERT_PTR_NON_NULL(data_state, false);
-    PS_ASSERT_PTR_NON_NULL(class_id, false);
-
-    if (!isValidDataState (data_state)) return false;
-
-    char *query = "UPDATE detResidImfile SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND iteration = %" PRId32 
-	" AND exp_id = %" PRId64 
-	" AND class_id = '%s'";
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration, exp_id, class_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", iteration %" PRId32 ", exp_id %" PRId64 ", class_id %s", 
-		det_id, iteration, exp_id, class_id);
-        return false;
-    }
-
-    return true;
-}
-
-bool setResidExpDataState(pxConfig *config, psS64 det_id, psS32 iteration, psS64 exp_id, const char *data_state)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-    PS_ASSERT_PTR_NON_NULL(data_state, false);
-
-    if (!isValidDataState (data_state)) return false;
-
-    char *query = "UPDATE detResidExp SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND iteration = %" PRId32 
-	" AND exp_id = %" PRId64;
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration, exp_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", iteration %" PRId32 ", exp_id %" PRId64, 
-		det_id, iteration, exp_id);
-        return false;
-    }
-
-    return true;
-}
+// End not yet modified for cleanup.
 
 bool exportrunMode(pxConfig *config)
Index: trunk/ippTools/src/dettool.h
===================================================================
--- trunk/ippTools/src/dettool.h	(revision 26676)
+++ trunk/ippTools/src/dettool.h	(revision 26815)
@@ -57,4 +57,5 @@
     DETTOOL_MODE_PENDINGCLEANUP_PROCESSEDEXP,
     DETTOOL_MODE_DONECLEANUP_PROCESSEDEXP,
+    DETTOOL_MODE_UPDATESTATE_PROCESSED,
 
     DETTOOL_MODE_TOSTACKED,
@@ -105,4 +106,5 @@
     DETTOOL_MODE_PENDINGCLEANUP_RESIDEXP,
     DETTOOL_MODE_DONECLEANUP_RESIDEXP,
+    DETTOOL_MODE_UPDATESTATE_RESID,
 
     DETTOOL_MODE_TODETRUNSUMMARY,
@@ -149,4 +151,5 @@
 bool pendingcleanup_processedexpMode(pxConfig *config);
 bool donecleanup_processedexpMode(pxConfig *config);
+bool updatestateprocessedMode(pxConfig *config);
 
 // stackedimfile
@@ -203,4 +206,5 @@
 bool pendingcleanup_residexpMode(pxConfig *config);
 bool donecleanup_residexpMode(pxConfig *config);
+bool updatestateresidMode(pxConfig *config);
 
 // detrunsummary
@@ -220,12 +224,13 @@
 
 // functions to set the 'data_state' for stages
-bool setProcessedImfileDataState(pxConfig *config, psS64 det_id, psS64 exp_id, const char *class_id, const char *data_state);
-bool setProcessedExpDataState(pxConfig *config, psS64 det_id, psS64 exp_id, const char *data_state);
+bool setProcessedImfileDataState(pxConfig *config, psMetadata *where, const char *data_state);
+bool setProcessedExpDataState(pxConfig *config, psMetadata *where, const char *data_state);
+bool setResidImfileDataState(pxConfig *config, psMetadata *where, const char *data_state);
+bool setResidExpDataState(pxConfig *config, psMetadata *where, const char *data_state);
+
 bool setStackedImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, const char *class_id, const char *data_state);
 bool setNormStatImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, const char *class_id, const char *data_state);
 bool setNormImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, const char *class_id, const char *data_state);
 bool setNormExpDataState(pxConfig *config, psS64 det_id, psS32 iteration, const char *data_state);
-bool setResidImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, psS64 exp_id, const char *class_id, const char *data_state);
-bool setResidExpDataState(pxConfig *config, psS64 det_id, psS32 iteration, psS64 exp_id, const char *data_state);
 
 #endif // DETTOOL_H
Index: trunk/ippTools/src/dettoolConfig.c
===================================================================
--- trunk/ippTools/src/dettoolConfig.c	(revision 26676)
+++ trunk/ippTools/src/dettoolConfig.c	(revision 26815)
@@ -306,5 +306,5 @@
     // -updateprocessedimfile
     psMetadata *updateprocessedimfileArgs = psMetadataAlloc();
-    psMetadataAddS64(updateprocessedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updateprocessedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS64(updateprocessedimfileArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
     psMetadataAddStr(updateprocessedimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -315,5 +315,5 @@
     psMetadataAddBool(pendingcleanup_processedimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_processedimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_processedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_processedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS64(pendingcleanup_processedimfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "search by exposure ID", 0);
     psMetadataAddStr(pendingcleanup_processedimfileArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
@@ -323,5 +323,5 @@
     psMetadataAddBool(donecleanup_processedimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_processedimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_processedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_processedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS64(donecleanup_processedimfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "search by exposure ID", 0);
     psMetadataAddStr(donecleanup_processedimfileArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
@@ -367,5 +367,5 @@
     // -updateprocessedexp
     psMetadata *updateprocessedexpArgs = psMetadataAlloc();
-    psMetadataAddS64(updateprocessedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updateprocessedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS64(updateprocessedexpArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
     psMetadataAddStr(updateprocessedexpArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
@@ -375,5 +375,5 @@
     psMetadataAddBool(pendingcleanup_processedexpArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_processedexpArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_processedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_processedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS64(pendingcleanup_processedexpArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
 
@@ -382,6 +382,12 @@
     psMetadataAddBool(donecleanup_processedexpArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_processedexpArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_processedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_processedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS64(donecleanup_processedexpArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
+
+    // -updatestate_processed
+    psMetadata *updatestateprocessedArgs = psMetadataAlloc();
+    psMetadataAddS64(updatestateprocessedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
+    psMetadataAddS64(updatestateprocessedArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
+    psMetadataAddStr(updatestateprocessedArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
 
     // -tostacked
@@ -426,5 +432,5 @@
     // -updatestacked
     psMetadata *updatestackedArgs = psMetadataAlloc();
-    psMetadataAddS64(updatestackedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updatestackedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(updatestackedArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
     psMetadataAddStr(updatestackedArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
@@ -435,5 +441,5 @@
     psMetadataAddBool(pendingcleanup_stackedArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_stackedArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_stackedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_stackedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(pendingcleanup_stackedArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
     psMetadataAddStr(pendingcleanup_stackedArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
@@ -443,5 +449,5 @@
     psMetadataAddBool(donecleanup_stackedArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_stackedArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_stackedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_stackedArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(donecleanup_stackedArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
     psMetadataAddStr(donecleanup_stackedArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
@@ -478,5 +484,5 @@
     // -updatenormalizedstat
     psMetadata *updatenormalizedstatArgs = psMetadataAlloc();
-    psMetadataAddS64(updatenormalizedstatArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updatenormalizedstatArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(updatenormalizedstatArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
     psMetadataAddStr(updatenormalizedstatArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -487,5 +493,5 @@
     psMetadataAddBool(pendingcleanup_normalizedstatArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_normalizedstatArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_normalizedstatArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_normalizedstatArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(pendingcleanup_normalizedstatArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
     psMetadataAddStr(pendingcleanup_normalizedstatArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -495,5 +501,5 @@
     psMetadataAddBool(donecleanup_normalizedstatArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_normalizedstatArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_normalizedstatArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_normalizedstatArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(donecleanup_normalizedstatArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
     psMetadataAddStr(donecleanup_normalizedstatArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -540,5 +546,5 @@
     // -updatenormalizedimfile
     psMetadata *updatenormalizedimfileArgs = psMetadataAlloc();
-    psMetadataAddS64(updatenormalizedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updatenormalizedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(updatenormalizedimfileArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
     psMetadataAddStr(updatenormalizedimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -549,5 +555,5 @@
     psMetadataAddBool(pendingcleanup_normalizedimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_normalizedimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_normalizedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_normalizedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(pendingcleanup_normalizedimfileArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
     psMetadataAddStr(pendingcleanup_normalizedimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -557,5 +563,5 @@
     psMetadataAddBool(donecleanup_normalizedimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_normalizedimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_normalizedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_normalizedimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(donecleanup_normalizedimfileArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
     psMetadataAddStr(donecleanup_normalizedimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
@@ -599,5 +605,5 @@
     // -updatenormalizedexp
     psMetadata *updatenormalizedexpArgs = psMetadataAlloc();
-    psMetadataAddS64(updatenormalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updatenormalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(updatenormalizedexpArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
     psMetadataAddStr(updatenormalizedexpArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
@@ -607,5 +613,5 @@
     psMetadataAddBool(pendingcleanup_normalizedexpArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_normalizedexpArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_normalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_normalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(pendingcleanup_normalizedexpArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
 
@@ -614,5 +620,5 @@
     psMetadataAddBool(donecleanup_normalizedexpArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_normalizedexpArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_normalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_normalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(donecleanup_normalizedexpArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
 
@@ -677,5 +683,5 @@
     // -updateresidimfile
     psMetadata *updateresidimfileArgs = psMetadataAlloc();
-    psMetadataAddS64(updateresidimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(updateresidimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(updateresidimfileArgs, PS_LIST_TAIL, "-iteration", 0,       "search by iteration number", 0);
     psMetadataAddS64(updateresidimfileArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
@@ -687,5 +693,5 @@
     psMetadataAddBool(pendingcleanup_residimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(pendingcleanup_residimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(pendingcleanup_residimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(pendingcleanup_residimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(pendingcleanup_residimfileArgs, PS_LIST_TAIL, "-iteration", 0,       "search by iteration number", 0);
     psMetadataAddS64(pendingcleanup_residimfileArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
@@ -696,5 +702,5 @@
     psMetadataAddBool(donecleanup_residimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     psMetadataAddU64(donecleanup_residimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
-    psMetadataAddS64(donecleanup_residimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
+    psMetadataAddS64(donecleanup_residimfileArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
     psMetadataAddS32(donecleanup_residimfileArgs, PS_LIST_TAIL, "-iteration", 0,       "search by iteration number", 0);
     psMetadataAddS64(donecleanup_residimfileArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
@@ -779,4 +785,10 @@
     psMetadataAddS32(donecleanup_residexpArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
     psMetadataAddS64(donecleanup_residexpArgs, PS_LIST_TAIL, "-exp_id",  0,            "search by detrend ID", 0);
+
+    // -updatestate_resid
+    psMetadata *updatestateresidArgs = psMetadataAlloc();
+    psMetadataAddS64(updatestateresidArgs, PS_LIST_TAIL, "-det_id",               0,            "search by det ID", 0);
+    psMetadataAddS64(updatestateresidArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
+    psMetadataAddStr(updatestateresidArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
 
     // -todetrunsummary
@@ -925,5 +937,6 @@
     PXOPT_ADD_MODE("-pendingcleanup_processedexp", "", DETTOOL_MODE_PENDINGCLEANUP_PROCESSEDEXP, pendingcleanup_processedexpArgs);
     PXOPT_ADD_MODE("-donecleanup_processedexp", "",    DETTOOL_MODE_DONECLEANUP_PROCESSEDEXP, donecleanup_processedexpArgs);
-
+    PXOPT_ADD_MODE("-updatestate_processed", "", DETTOOL_MODE_UPDATESTATE_PROCESSED, updatestateprocessedArgs);
+    
     PXOPT_ADD_MODE("-tostacked",       "", DETTOOL_MODE_TOSTACKED,     tostackedArgs);
     PXOPT_ADD_MODE("-addstacked",      "", DETTOOL_MODE_ADDSTACKED,    addstackedArgs);
@@ -973,4 +986,5 @@
     PXOPT_ADD_MODE("-pendingcleanup_residexp", "", DETTOOL_MODE_PENDINGCLEANUP_RESIDEXP, pendingcleanup_residexpArgs);
     PXOPT_ADD_MODE("-donecleanup_residexp", "",    DETTOOL_MODE_DONECLEANUP_RESIDEXP, donecleanup_residexpArgs);
+    PXOPT_ADD_MODE("-updatestate_resid", "", DETTOOL_MODE_UPDATESTATE_RESID, updatestateresidArgs);
 
     PXOPT_ADD_MODE("-todetrunsummary",  "", DETTOOL_MODE_TODETRUNSUMMARY,  todetrunsummaryArgs);
Index: trunk/ippTools/src/dettool_processedexp.c
===================================================================
--- trunk/ippTools/src/dettool_processedexp.c	(revision 26676)
+++ trunk/ippTools/src/dettool_processedexp.c	(revision 26815)
@@ -266,10 +266,36 @@
 
     PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false);
-    PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", true, false);
     PXOPT_LOOKUP_STR(data_state, config->args, "-data_state", true, false);
-    if (!setProcessedExpDataState(config, det_id, exp_id, data_state)) {
-        return false;
-    }
-    return true;
+
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S64(config->args,where,"-det_id","det_id","==");
+    PXOPT_COPY_S64(config->args,where,"-exp_id","exp_id","==");
+
+    if (!setProcessedExpDataState(config, where, data_state)) {
+        return false;
+    }
+    psFree(where);
+    return true;
+}
+
+bool updatestateprocessedMode(pxConfig *config) {
+  PS_ASSERT_PTR_NON_NULL(config, NULL);
+  PXOPT_LOOKUP_S64(det_id,config->args, "-det_id",true,false);
+  PXOPT_LOOKUP_STR(data_state,config->args, "-data_state", true, false);
+
+  psMetadata *where = psMetadataAlloc();
+
+  PXOPT_COPY_S64(config->args,where,"-det_id","det_id","==");
+  PXOPT_COPY_S64(config->args,where,"-exp_id","exp_id","==");
+
+  if (!setProcessedExpDataState(config,where,data_state)) {
+    return(false);
+  }
+  if (!setProcessedImfileDataState(config,where,data_state)) {
+    return(false);
+  }
+  psFree(where);
+  return(true);
 }
 
Index: trunk/ippTools/src/dettool_processedimfile.c
===================================================================
--- trunk/ippTools/src/dettool_processedimfile.c	(revision 26676)
+++ trunk/ippTools/src/dettool_processedimfile.c	(revision 26815)
@@ -298,11 +298,16 @@
 
     PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false);
-    PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", true, false);
-    PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
     PXOPT_LOOKUP_STR(data_state, config->args, "-data_state", true, false);
-
-    if (!setProcessedImfileDataState(config, det_id, exp_id, class_id, data_state)) {
-        return false;
-    }
+    
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S64(config->args,where,"-det_id", "det_id","==");
+    PXOPT_COPY_S64(config->args,where,"-exp_id", "exp_id","==");
+    PXOPT_COPY_STR(config->args,where,"-class_id","class_id","==");
+
+    if (!setProcessedImfileDataState(config, where, data_state)) {
+        return false;
+    }
+    psFree(where);
     return true;
 }
Index: trunk/ippTools/src/dettool_residexp.c
===================================================================
--- trunk/ippTools/src/dettool_residexp.c	(revision 26676)
+++ trunk/ippTools/src/dettool_residexp.c	(revision 26815)
@@ -353,4 +353,24 @@
 }
 
+bool updatestateresidMode(pxConfig *config) {
+  PS_ASSERT_PTR_NON_NULL(config, NULL);
+  PXOPT_LOOKUP_S64(det_id,config->args, "-det_id",true,false);
+  PXOPT_LOOKUP_STR(data_state,config->args, "-data_state", true, false);
+
+  psMetadata *where = psMetadataAlloc();
+
+  PXOPT_COPY_S64(config->args,where,"-det_id","det_id","==");
+  PXOPT_COPY_S64(config->args,where,"-exp_id","exp_id","==");
+
+  if (!setResidExpDataState(config,where,data_state)) {
+    return(false);
+  }
+  if (!setResidImfileDataState(config,where,data_state)) {
+    return(false);
+  }
+  psFree(where);
+  return(true);
+}
+
 bool pendingcleanup_residexpMode(pxConfig *config)
 {
Index: trunk/ippTools/src/dettool_residimfile.c
===================================================================
--- trunk/ippTools/src/dettool_residimfile.c	(revision 26676)
+++ trunk/ippTools/src/dettool_residimfile.c	(revision 26815)
@@ -282,11 +282,16 @@
 {
     PS_ASSERT_PTR_NON_NULL(config, NULL);
-
+    
     PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false);
-    PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", true, false);
-    PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", true, false);
-    PXOPT_LOOKUP_STR(class_id, config->args, "-class_id", true, false);
     PXOPT_LOOKUP_STR(data_state, config->args, "-data_state", true, false);
-    if (!setResidImfileDataState(config, det_id, iteration, exp_id, class_id, data_state)) {
+
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S64(config->args,where,"-det_id","det_id","==");
+    PXOPT_COPY_S32(config->args,where,"-iteration", "iteration","==");
+    PXOPT_COPY_S64(config->args,where,"-exp_id","exp_id","==");
+    PXOPT_COPY_STR(config->args,where,"-class_id","class_id","==");
+    
+    if (!setResidImfileDataState(config, where, data_state)) {
         return false;
     }
