Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 14111)
+++ /trunk/ippTools/share/Makefile.am	(revision 14112)
@@ -37,4 +37,5 @@
 	stacktool_sumskyfile.sql \
 	stacktool_tosum.sql \
+	stacktool_revertsumskyfile.sql \
 	warptool_exp.sql \
 	warptool_imfile.sql \
Index: /trunk/ippTools/share/stacktool_revertsumskyfile.sql
===================================================================
--- /trunk/ippTools/share/stacktool_revertsumskyfile.sql	(revision 14112)
+++ /trunk/ippTools/share/stacktool_revertsumskyfile.sql	(revision 14112)
@@ -0,0 +1,3 @@
+DELETE FROM stackSumSkyfile
+WHERE
+    fault != 0
Index: /trunk/ippTools/src/stacktool.c
===================================================================
--- /trunk/ippTools/src/stacktool.c	(revision 14111)
+++ /trunk/ippTools/src/stacktool.c	(revision 14112)
@@ -38,4 +38,5 @@
 static bool addsumskyfileMode(pxConfig *config);
 static bool sumskyfileMode(pxConfig *config);
+static bool revertsumskyfileMode(pxConfig *config);
 
 static bool setstackRunState(pxConfig *config, const char *stack_id, const char *state);
@@ -66,4 +67,5 @@
         MODECASE(STACKTOOL_MODE_ADDSUMSKYFILE,      addsumskyfileMode);
         MODECASE(STACKTOOL_MODE_SUMSKYFILE,         sumskyfileMode);
+        MODECASE(STACKTOOL_MODE_REVERTSUMSKYFILE,   revertsumskyfileMode);
         default:
             psAbort("invalid option (this should not happen)");
@@ -666,4 +668,36 @@
 
 
+static bool revertsumskyfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    
+    psString query = pxDataGet("stacktool_revertsumskyfile.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (config->where) {
+        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "stackSumSkyfile");
+        psStringAppend(&query, " AND %s", whereClause);
+        psFree(whereClause);
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    if (psDBAffectedRows(config->dbh) < 1) {
+        psError(PS_ERR_UNKNOWN, false, "should have affected atleast 1 row");
+        return false;
+    }
+
+    return true;
+}
+
+
 static bool setstackRunState(pxConfig *config, const char *stack_id, const char *state)
 {
Index: /trunk/ippTools/src/stacktool.h
===================================================================
--- /trunk/ippTools/src/stacktool.h	(revision 14111)
+++ /trunk/ippTools/src/stacktool.h	(revision 14112)
@@ -32,4 +32,5 @@
     STACKTOOL_MODE_ADDSUMSKYFILE,
     STACKTOOL_MODE_SUMSKYFILE,
+    STACKTOOL_MODE_REVERTSUMSKYFILE,
 } stacktoolMode;
 
Index: /trunk/ippTools/src/stacktoolConfig.c
===================================================================
--- /trunk/ippTools/src/stacktoolConfig.c	(revision 14111)
+++ /trunk/ippTools/src/stacktoolConfig.c	(revision 14112)
@@ -121,5 +121,4 @@
             "set fault code", 0);
 
-
     // -sumskyfile
     psMetadata *sumskyfileArgs= psMetadataAlloc();
@@ -133,4 +132,11 @@
             "use the simple output format", false);
 
+    // -revertsumskyfile
+    psMetadata *revertsumskyfileArgs= psMetadataAlloc();
+    psMetadataAddStr(revertsumskyfileArgs, PS_LIST_TAIL, "-stack_id", 0,
+            "search by stack ID (required)", NULL);
+    psMetadataAddS16(revertsumskyfileArgs, PS_LIST_TAIL, "-code",  0,
+            "search by fault code", 0);
+
     psFree(now);
 
@@ -145,4 +151,5 @@
     PXTOOL_ADD_MODE("-addsumskyfile",   "", STACKTOOL_MODE_ADDSUMSKYFILE,   addsumskyfileArgs);
     PXTOOL_ADD_MODE("-sumskyfile",      "", STACKTOOL_MODE_SUMSKYFILE,      sumskyfileArgs);
+    PXTOOL_ADD_MODE("-revertsumskyfile","", STACKTOOL_MODE_REVERTSUMSKYFILE,      revertsumskyfileArgs);
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
@@ -199,7 +206,32 @@
     }
 }
+
+{
+    psString str = NULL;
+    bool status = false;
+    if ((str = psMetadataLookupStr(&status, config->args, "-stack_id"))) {
+        if (!psMetadataAddS64(config->where, PS_LIST_TAIL, "stack_id", 0, "==", (psS64)atoll(str))) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add item stack_id");
+            psFree(config);
+            return NULL;
+        }
+    }
+}
+
     addWhereStr(skycell_id);
     addWhereStr(tess_id);
-    addWhereStr(exp_id);
+
+    // convert '-code' to 'fault'
+    {
+        psS16 fault = 0;
+        bool status = false;
+        if ((fault = psMetadataLookupS16(&status, config->args, "-code"))) {
+            if (!psMetadataAddS16(config->where, PS_LIST_TAIL, "fault", 0, "==", fault)) {
+                psError(PS_ERR_UNKNOWN, false, "failed to add item fault");
+                psFree(config);
+                return NULL;
+            }
+        }
+    }
 
     if (config->where->list->n < 1) {
