Index: trunk/ippTools/src/chiptool.c
===================================================================
--- trunk/ippTools/src/chiptool.c	(revision 17145)
+++ trunk/ippTools/src/chiptool.c	(revision 17148)
@@ -35,4 +35,5 @@
 
 static bool queueMode(pxConfig *config);
+static bool updaterunMode(pxConfig *config);
 static bool pendingimfileMode(pxConfig *config);
 static bool addprocessedimfileMode(pxConfig *config);
@@ -65,4 +66,5 @@
     switch (config->mode) {
         MODECASE(CHIPTOOL_MODE_QUEUE,                   queueMode);
+        MODECASE(CHIPTOOL_MODE_UPDATERUN,               updaterunMode);
         MODECASE(CHIPTOOL_MODE_PENDINGIMFILE,           pendingimfileMode);
         MODECASE(CHIPTOOL_MODE_ADDPROCESSEDIMFILE,      addprocessedimfileMode);
@@ -247,4 +249,36 @@
 }
 
+
+static bool updaterunMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, NULL);
+
+    PXOPT_LOOKUP_STR(chip_id, config->args, "-chip_id", true, false);
+    PXOPT_LOOKUP_STR(state, config->args, "-state", false, false);
+    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
+
+    if ((!state) && (!label)) {
+        psError(PXTOOLS_ERR_DATA, false, "parameters are required");
+        return false;
+    }
+
+    if (state) {
+        // set chipRun.state to state
+        if (!pxchipRunSetState(config, (psS64)atoll(chip_id), state)) {
+            return false;
+        }
+    }
+
+    if (label) {
+        // set chipRun.label to label
+        if (!pxchipRunSetLabel(config, (psS64)atoll(chip_id), label)) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+
 static bool pendingimfileMode(pxConfig *config)
 {
Index: trunk/ippTools/src/chiptool.h
===================================================================
--- trunk/ippTools/src/chiptool.h	(revision 17145)
+++ trunk/ippTools/src/chiptool.h	(revision 17148)
@@ -26,4 +26,5 @@
     CHIPTOOL_MODE_NONE      = 0x0,
     CHIPTOOL_MODE_QUEUE,
+    CHIPTOOL_MODE_UPDATERUN,
     CHIPTOOL_MODE_PENDINGIMFILE,
     CHIPTOOL_MODE_ADDPROCESSEDIMFILE,
Index: trunk/ippTools/src/chiptoolConfig.c
===================================================================
--- trunk/ippTools/src/chiptoolConfig.c	(revision 17145)
+++ trunk/ippTools/src/chiptoolConfig.c	(revision 17148)
@@ -139,4 +139,14 @@
     psMetadataAddBool(queueArgs, PS_LIST_TAIL, "-pretend",  0,
             "do not actually modify the database", false);
+
+
+    // -updaterun
+    psMetadata *updaterunArgs = psMetadataAlloc();
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-chip_id", 0,
+            "define stack ID (required)", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state", 0,
+            "set state", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-label", 0,
+            "set label", NULL);
 
 
@@ -299,4 +309,5 @@
 
     PXOPT_ADD_MODE("-queue",                 "", CHIPTOOL_MODE_QUEUE,          queueArgs);
+    PXOPT_ADD_MODE("-updaterun",             "", CHIPTOOL_MODE_UPDATERUN, updaterunArgs);
     PXOPT_ADD_MODE("-pendingimfile",         "", CHIPTOOL_MODE_PENDINGIMFILE,  pendingimfileArgs);
     PXOPT_ADD_MODE("-addprocessedimfile",    "", CHIPTOOL_MODE_ADDPROCESSEDIMFILE,addprocessedimfileArgs);
Index: trunk/ippTools/src/pxchip.c
===================================================================
--- trunk/ippTools/src/pxchip.c	(revision 17145)
+++ trunk/ippTools/src/pxchip.c	(revision 17148)
@@ -31,4 +31,5 @@
 bool pxchipRunSetState(pxConfig *config, psS64 chip_id, const char *state)
 {
+    PS_ASSERT_PTR_NON_NULL(config, false);
     PS_ASSERT_PTR_NON_NULL(state, false);
 
@@ -47,4 +48,20 @@
     char *query = "UPDATE chipRun SET state = '%s' WHERE chip_id = %" PRId64;
     if (!p_psDBRunQuery(config->dbh, query, state, chip_id)) {
+        psError(PS_ERR_UNKNOWN, false,
+                "failed to change state for chip_id %" PRId64, chip_id);
+        return false;
+    }
+
+    return true;
+}
+
+
+bool pxchipRunSetLabel(pxConfig *config, psS64 chip_id, const char *label)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    // note label == NULL should be explicitly allowed
+ 
+    char *query = "UPDATE chipRun SET label = '%s' WHERE chip_id = %" PRId64;
+    if (!p_psDBRunQuery(config->dbh, query, label, chip_id)) {
         psError(PS_ERR_UNKNOWN, false,
                 "failed to change state for chip_id %" PRId64, chip_id);
Index: trunk/ippTools/src/pxchip.h
===================================================================
--- trunk/ippTools/src/pxchip.h	(revision 17145)
+++ trunk/ippTools/src/pxchip.h	(revision 17148)
@@ -26,4 +26,5 @@
 
 bool pxchipRunSetState(pxConfig *config, psS64 chip_id, const char *state);
+bool pxchipRunSetLabel(pxConfig *config, psS64 chip_id, const char *label);
 
 psS64 pxchipQueueByExpTag(pxConfig *config,
