Index: trunk/ippTools/src/pztool.c
===================================================================
--- trunk/ippTools/src/pztool.c	(revision 30205)
+++ trunk/ippTools/src/pztool.c	(revision 30206)
@@ -47,4 +47,6 @@
 static bool advanceMode(pxConfig *config);
 
+static bool updatenewexpMode(pxConfig *config);
+
 // static bool copydoneCompleteExp(pxConfig *config);
 static psArray *pzGetPendingCameras(pxConfig *config);
@@ -83,4 +85,5 @@
         MODECASE(PZTOOL_MODE_TOADVANCE, toadvanceMode);
         MODECASE(PZTOOL_MODE_ADVANCE, advanceMode);
+        MODECASE(PZTOOL_MODE_UPDATENEWEXP, updatenewexpMode);
         default:
             psAbort("invalid option (this should not happen)");
@@ -905,4 +908,45 @@
 }
 
+static bool updatenewexpMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
+    PXOPT_COPY_STR(config->args, where,  "-exp_name", "tmp_exp_name", "==");
+
+    PXOPT_LOOKUP_STR(new_state, config->args, "-set_state", true, false);
+
+    if (strcmp(new_state, "drop") && strcmp(new_state, "run") && strcmp(new_state, "wait")) {
+        psError(PXTOOLS_ERR_ARGUMENTS, true, "%s is not a valid value for -set_state", new_state);
+        psFree(where);
+        return false;
+    }
+
+    if (psListLength(where->list) < 1) {
+        psFree(where);
+        psError(PXTOOLS_ERR_CONFIG, false, "-exp_name or -exp_id is required");
+        return false;
+    }
+
+    psString query = NULL;
+    psStringAppend(&query, "UPDATE newExp SET state = '%s'", new_state);
+
+    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+    psStringAppend(&query, "\nWHERE %s", whereClause);
+
+    psFree(whereClause);
+    psFree(where);
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    return true;
+}
+
 
 #if 0
Index: trunk/ippTools/src/pztool.h
===================================================================
--- trunk/ippTools/src/pztool.h	(revision 30205)
+++ trunk/ippTools/src/pztool.h	(revision 30206)
@@ -36,5 +36,6 @@
     PZTOOL_MODE_CLEARCOMMONFAULTS,
     PZTOOL_MODE_TOADVANCE,
-    PZTOOL_MODE_ADVANCE
+    PZTOOL_MODE_ADVANCE,
+    PZTOOL_MODE_UPDATENEWEXP,
 } pztoolMode;
 
Index: trunk/ippTools/src/pztoolConfig.c
===================================================================
--- trunk/ippTools/src/pztoolConfig.c	(revision 30205)
+++ trunk/ippTools/src/pztoolConfig.c	(revision 30206)
@@ -154,4 +154,11 @@
     psMetadataAddStr(advanceArgs, PS_LIST_TAIL, "-label",  0,     "define the label for the chip stage", NULL);
 
+    // -updatenewexp
+    psMetadata *updatenewexpArgs = psMetadataAlloc();
+    psMetadataAddS64(updatenewexpArgs, PS_LIST_TAIL, "-exp_id",   0,            "search by exposure ID", 0);
+
+    psMetadataAddStr(updatenewexpArgs, PS_LIST_TAIL, "-exp_name", 0,            "define exposure ID", NULL);
+    psMetadataAddStr(updatenewexpArgs, PS_LIST_TAIL, "-set_state", 0,            "define new state (required)", NULL);
+
     psMetadata *argSets = psMetadataAlloc();
     psMetadata *modes = psMetadataAlloc();
@@ -169,4 +176,5 @@
     PXOPT_ADD_MODE("-toadvance",          "", PZTOOL_MODE_TOADVANCE,    toadvanceArgs);
     PXOPT_ADD_MODE("-advance",          "", PZTOOL_MODE_ADVANCE,    advanceArgs);
+    PXOPT_ADD_MODE("-updatenewexp",    "", PZTOOL_MODE_UPDATENEWEXP,updatenewexpArgs);
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
