Index: trunk/ippTools/src/magicdstool.c
===================================================================
--- trunk/ippTools/src/magicdstool.c	(revision 32479)
+++ trunk/ippTools/src/magicdstool.c	(revision 32668)
@@ -53,4 +53,5 @@
 
 static bool setmagicDSRunState(pxConfig *config, psS64 magic_id, psString extraSetString, psMetadata *where, const char *state);
+static bool validDSRunState(const char *state);
 
 # define MODECASE(caseName, func) \
@@ -1212,6 +1213,6 @@
 
     psMetadata *where = psMetadataAlloc();
-    // new state (required
-    PXOPT_LOOKUP_STR(new_state, config->args, "-set_state", true, false);
+    // new state
+    PXOPT_LOOKUP_STR(new_state, config->args, "-set_state", false, false);
     // old state (required)
     PXOPT_LOOKUP_STR(state, config->args, "-state", true, false);
@@ -1237,4 +1238,6 @@
         if (!strcmp(state, "failed_revert")) {
             new_state = "new";
+        } else if (!strcmp(state, "failed_revert_ud")) {
+            new_state = "update";
         } else if (!strcmp(state, "failed_cleanup")) {
             new_state = "goto_cleaned";
@@ -1243,7 +1246,12 @@
             return false;
         }
+    } else {
+        if (!validDSRunState(new_state)) {
+            psError(PS_ERR_UNKNOWN, true, "unexpected value for new state: %s", new_state);
+            return false;
+        }
     }
     if (!p_psDBRunQueryF(config->dbh, query, new_state)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to revert");
+        psError(PS_ERR_UNKNOWN, false, "failed to clear state faults");
         psFree(query);
         return false;
@@ -1403,4 +1411,5 @@
           (strcmp(state, "wait") == 0) ||
           (strcmp(state, "failed_revert") == 0) ||
+          (strcmp(state, "failed_revert_ud") == 0) ||
           (strcmp(state, "error_cleaned") == 0) ||
           (strcmp(state, "restored") == 0) ||
