Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 14240)
+++ trunk/ippTools/src/dettool.c	(revision 14241)
@@ -55,4 +55,6 @@
 static bool addstackedMode(pxConfig *config);
 static bool stackedMode(pxConfig *config);
+static bool revertstackedMode(pxConfig *config);
+
 static bool tonormalizeMode(pxConfig *config);
 static bool addnormalizedstatMode(pxConfig *config);
@@ -132,4 +134,6 @@
         MODECASE(DETTOOL_MODE_ADDSTACKED,       addstackedMode);
         MODECASE(DETTOOL_MODE_STACKED,          stackedMode);
+        MODECASE(DETTOOL_MODE_REVERTSTACKED,    revertstackedMode);
+
         MODECASE(DETTOOL_MODE_TONORMALIZE,      tonormalizeMode);
         MODECASE(DETTOOL_MODE_ADDNORMALIZEDSTAT,addnormalizedstatMode);
@@ -3290,4 +3294,36 @@
 
     psFree(output);
+
+    return true;
+}
+
+
+static bool revertstackedMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psString query = pxDataGet("dettool_revertstacked.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (config->where) {
+        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "detStackedImfile");
+        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;
Index: trunk/ippTools/src/dettool.h
===================================================================
--- trunk/ippTools/src/dettool.h	(revision 14240)
+++ trunk/ippTools/src/dettool.h	(revision 14241)
@@ -44,4 +44,5 @@
     DETTOOL_MODE_ADDSTACKED,
     DETTOOL_MODE_STACKED,
+    DETTOOL_MODE_REVERTSTACKED,
     DETTOOL_MODE_TONORMALIZE,
     DETTOOL_MODE_ADDNORMALIZEDSTAT,
Index: trunk/ippTools/src/dettoolConfig.c
===================================================================
--- trunk/ippTools/src/dettoolConfig.c	(revision 14240)
+++ trunk/ippTools/src/dettoolConfig.c	(revision 14241)
@@ -511,4 +511,15 @@
             "use the simple output format", false);
 
+    // -revertstacked
+    psMetadata *revertstackedArgs= psMetadataAlloc();
+    psMetadataAddStr(revertstackedArgs, PS_LIST_TAIL, "-det_id",  0,
+            "search for detrend ID (required)", NULL);
+    psMetadataAddS32(revertstackedArgs, PS_LIST_TAIL, "-iteration",  0,
+            "search by iteration number", 0);
+    psMetadataAddStr(revertstackedArgs, PS_LIST_TAIL, "-class_id",  0,
+            "search by class ID", NULL);
+    psMetadataAddS16(revertstackedArgs, PS_LIST_TAIL, "-code",  0,
+            "search by fault code", 0);
+
     // -tonormalize
     psMetadata *tonormalizeArgs = psMetadataAlloc();
@@ -963,4 +974,5 @@
     PXTOOL_ADD_MODE("-addstacked",      "", DETTOOL_MODE_ADDSTACKED,    addstackedArgs);
     PXTOOL_ADD_MODE("-stacked",         "", DETTOOL_MODE_STACKED,       stackedArgs);
+    PXTOOL_ADD_MODE("-revertstacked",   "", DETTOOL_MODE_REVERTSTACKED,  revertstackedArgs);
     PXTOOL_ADD_MODE("-tonormalize",     "", DETTOOL_MODE_TONORMALIZE,   tonormalizeArgs);
     PXTOOL_ADD_MODE("-addnormalizedstat",     "", DETTOOL_MODE_ADDNORMALIZEDSTAT,   addnormstatArgs);
@@ -1016,4 +1028,5 @@
     addWhereStr(det_id);
     {
+        // XXX this is broke because you can't specify -iteration 0
         int n = 0;
         bool status = false;
