Index: /trunk/ippTools/scripts/difftest.sh
===================================================================
--- /trunk/ippTools/scripts/difftest.sh	(revision 14264)
+++ /trunk/ippTools/scripts/difftest.sh	(revision 14265)
@@ -9,5 +9,5 @@
 difftool -addinputskyfile -diff_id 1 -warp_id 1 -kind warped -template || exit 1
 difftool -addinputskyfile -diff_id 1 -warp_id 1 -kind warped || exit 1
-difftool -updaterun -state run -diff_id 1 || exit 1
+#difftool -updaterun -state run -diff_id 1 || exit 1
 difftool -todiffskyfile || exit 1
 difftool -inputskyfile || exit 1
Index: /trunk/ippTools/share/Makefile.am
===================================================================
--- /trunk/ippTools/share/Makefile.am	(revision 14264)
+++ /trunk/ippTools/share/Makefile.am	(revision 14265)
@@ -19,4 +19,5 @@
 	dettool_revertnormalizedstat.sql \
 	dettool_revertprocessedexp.sql \
+	dettool_revertnormalizedexp.sql \
 	dettool_revertprocessedimfile.sql \
 	dettool_revertstacked.sql \
Index: /trunk/ippTools/share/dettool_revertnormalizedexp.sql
===================================================================
--- /trunk/ippTools/share/dettool_revertnormalizedexp.sql	(revision 14265)
+++ /trunk/ippTools/share/dettool_revertnormalizedexp.sql	(revision 14265)
@@ -0,0 +1,3 @@
+DELETE FROM detNormalizedExp
+WHERE
+    fault != 0
Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 14264)
+++ /trunk/ippTools/src/dettool.c	(revision 14265)
@@ -70,5 +70,5 @@
 static bool addnormalizedexpMode(pxConfig *config);
 static bool normalizedexpMode(pxConfig *config);
-
+static bool revertnormalizedexpMode(pxConfig *config);
 // residimfile
 static bool toresidimfileMode(pxConfig *config);
@@ -156,8 +156,11 @@
         MODECASE(DETTOOL_MODE_ADDNORMALIZEDEXP, addnormalizedexpMode);
         MODECASE(DETTOOL_MODE_NORMALIZEDEXP,    normalizedexpMode);
+        MODECASE(DETTOOL_MODE_REVERTNORMALIZEDEXP, revertnormalizedexpMode);
+        // residimfile
         MODECASE(DETTOOL_MODE_TORESIDIMFILE,    toresidimfileMode);
         MODECASE(DETTOOL_MODE_ADDRESIDIMFILE,   addresidimfileMode);
+        MODECASE(DETTOOL_MODE_RESIDIMFILE,      residimfileMode);
+
         MODECASE(DETTOOL_MODE_TORESIDEXP,       toresidexpMode);
-        MODECASE(DETTOOL_MODE_RESIDIMFILE,      residimfileMode);
         MODECASE(DETTOOL_MODE_ADDRESIDEXP,      addresidexpMode);
         MODECASE(DETTOOL_MODE_RESIDEXP,         residexpMode);
@@ -4339,4 +4342,5 @@
 }
 
+
 static bool normalizedexpMode(pxConfig *config)
 {
@@ -4427,4 +4431,5 @@
     return true;
 }
+
 
 static  detNormalizedImfileRow *detNormalizedStatToDetNormalizedmfile(pxConfig *config, detNormalizedStatImfileRow *statImfile)
@@ -4524,4 +4529,37 @@
     );
 }
+
+
+static bool revertnormalizedexpMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psString query = pxDataGet("dettool_revertnormalizedexp.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (config->where) {
+        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "detNormalizedExp");
+        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 toresidimfileMode(pxConfig *config)
Index: /trunk/ippTools/src/dettool.h
===================================================================
--- /trunk/ippTools/src/dettool.h	(revision 14264)
+++ /trunk/ippTools/src/dettool.h	(revision 14265)
@@ -56,4 +56,5 @@
     DETTOOL_MODE_ADDNORMALIZEDEXP,
     DETTOOL_MODE_NORMALIZEDEXP,
+    DETTOOL_MODE_REVERTNORMALIZEDEXP,
     DETTOOL_MODE_TORESIDIMFILE,
     DETTOOL_MODE_ADDRESIDIMFILE,
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 14264)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 14265)
@@ -695,4 +695,13 @@
             "use the simple output format", false);
 
+    // -revertnormalizedexp
+    psMetadata *revertnormalizedexpArgs = psMetadataAlloc();
+    psMetadataAddStr(revertnormalizedexpArgs, PS_LIST_TAIL, "-det_id", 0,
+            "search by detrend ID (required)", NULL);
+    psMetadataAddS32(revertnormalizedexpArgs, PS_LIST_TAIL, "-iteration", 0,
+            "search by iteration number", 0);
+    psMetadataAddS16(revertnormalizedexpArgs, PS_LIST_TAIL, "-code",  0,
+            "search by fault code", 0);
+
     // -toresidimfile
     psMetadata *toresidimfileArgs = psMetadataAlloc();
@@ -1020,8 +1029,9 @@
     PXTOOL_ADD_MODE("-addnormalizedimfile", "", DETTOOL_MODE_ADDNORMALIZEDIMFILE,addnormalizedimfileArgs);
     PXTOOL_ADD_MODE("-normalizedimfile","", DETTOOL_MODE_NORMALIZEDIMFILE, normalizedimfileArgs);
-    PXTOOL_ADD_MODE("-revertnormalizedimfile","", DETTOOL_MODE_REVERTNORMALIZEDIMFILE, normalizedimfileArgs);
+    PXTOOL_ADD_MODE("-revertnormalizedimfile","", DETTOOL_MODE_REVERTNORMALIZEDIMFILE, revertnormalizedimfileArgs);
     PXTOOL_ADD_MODE("-tonormalizedexp", "", DETTOOL_MODE_TONORMALIZEDEXP, tonormalizedexpArgs);
     PXTOOL_ADD_MODE("-addnormalizedexp", "", DETTOOL_MODE_ADDNORMALIZEDEXP, addnormalizedexpArgs);
     PXTOOL_ADD_MODE("-normalizedexp",   "", DETTOOL_MODE_NORMALIZEDEXP, normalizedexpArgs);
+    PXTOOL_ADD_MODE("-revertnormalizedexp","", DETTOOL_MODE_REVERTNORMALIZEDEXP, revertnormalizedexpArgs);
     PXTOOL_ADD_MODE("-toresidimfile",   "", DETTOOL_MODE_TORESIDIMFILE, toresidimfileArgs);
     PXTOOL_ADD_MODE("-addresidimfile",  "", DETTOOL_MODE_ADDRESIDIMFILE,  addresidimfileArgs);
@@ -1070,8 +1080,7 @@
     {
         // XXX this is broke because you can't specify -iteration 0
-        int n = 0;
-        bool status = false;
-        if ((n = psMetadataLookupS32(&status, config->args, "-iteration"))) {
-            if (!psMetadataAddS32(config->where, PS_LIST_TAIL, "iteration", 0, "==", n)) {
+        psMetadataItem *item = psMetadataLookup(config->args, "-iteration");
+        if (item && psStrcasestr(item->comment, "found")) {
+            if (!psMetadataAddS32(config->where, PS_LIST_TAIL, "iteration", 0, "==", item->data.S32)) {
                 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
                 psFree(config);
