Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 14105)
+++ trunk/ippTools/src/difftool.c	(revision 14108)
@@ -38,4 +38,5 @@
 static bool adddiffskyfileMode(pxConfig *config);
 static bool diffskyfileMode(pxConfig *config);
+static bool revertdiffskyfileMode(pxConfig *config);
 
 static bool setdiffRunState(pxConfig *config, const char *warp_id, const char *state);
@@ -66,4 +67,5 @@
         MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE,     adddiffskyfileMode);
         MODECASE(DIFFTOOL_MODE_DIFFSKYFILE,        diffskyfileMode);
+        MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE,  revertdiffskyfileMode);
         default:
             psAbort("invalid option (this should not happen)");
@@ -521,4 +523,11 @@
     }
 
+    // default values
+    psS16 code = psMetadataLookupS16(&status, config->args, "-code");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code");
+        return false;
+    }
+
     if (!psDBTransaction(config->dbh)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -531,5 +540,6 @@
             path_base,
             bg,
-            bg_stdev
+            bg_stdev,
+            code
         )) {
         if (!psDBRollback(config->dbh)) {
@@ -645,4 +655,37 @@
 }
 
+
+static bool revertdiffskyfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psString query = pxDataGet("difftool_revertdiffskyfile.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (config->where) {
+        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "diffSkyfile");
+        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 setdiffRunState(pxConfig *config, const char *diff_id, const char *state)
 {
Index: trunk/ippTools/src/difftool.h
===================================================================
--- trunk/ippTools/src/difftool.h	(revision 14105)
+++ trunk/ippTools/src/difftool.h	(revision 14108)
@@ -32,4 +32,5 @@
     DIFFTOOL_MODE_ADDDIFFSKYFILE,
     DIFFTOOL_MODE_DIFFSKYFILE,
+    DIFFTOOL_MODE_REVERTDIFFSKYFILE,
 } difftoolMode;
 
Index: trunk/ippTools/src/difftoolConfig.c
===================================================================
--- trunk/ippTools/src/difftoolConfig.c	(revision 14105)
+++ trunk/ippTools/src/difftoolConfig.c	(revision 14108)
@@ -128,4 +128,6 @@
     psMetadataAddF64(adddiffskyfileArgs, PS_LIST_TAIL, "-bg_stdev",  0,
             "define exposure background mean stdev", NAN);
+    psMetadataAddS16(adddiffskyfileArgs, PS_LIST_TAIL, "-code",  0,
+            "set fault code", 0);
 
     // -diffskyfile
@@ -142,4 +144,11 @@
             "use the simple output format", false);
 
+    // -revertdiffskyfile
+    psMetadata *revertdiffskyfileArgs = psMetadataAlloc();
+    psMetadataAddStr(revertdiffskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,
+            "define warp ID (required)", NULL);
+    psMetadataAddS16(revertdiffskyfileArgs, PS_LIST_TAIL, "-code",  0,
+            "search by fault code", 0);
+
     psFree(now);
 
@@ -147,11 +156,12 @@
     psMetadata *modes = psMetadataAlloc();
 
-    PXTOOL_ADD_MODE("-definerun",       "", DIFFTOOL_MODE_DEFINERUN,      definerunArgs);
-    PXTOOL_ADD_MODE("-updaterun",       "",       DIFFTOOL_MODE_UPDATERUN,      updaterunArgs);
-    PXTOOL_ADD_MODE("-addinputskyfile", "",  DIFFTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileArgs);
+    PXTOOL_ADD_MODE("-definerun",       "",     DIFFTOOL_MODE_DEFINERUN,      definerunArgs);
+    PXTOOL_ADD_MODE("-updaterun",       "",     DIFFTOOL_MODE_UPDATERUN,      updaterunArgs);
+    PXTOOL_ADD_MODE("-addinputskyfile", "",     DIFFTOOL_MODE_ADDINPUTSKYFILE, addinputskyfileArgs);
     PXTOOL_ADD_MODE("-inputskyfile",    "",     DIFFTOOL_MODE_INPUTSKYFILE,    inputskyfileArgs);
-    PXTOOL_ADD_MODE("-todiffskyfile",   "",    DIFFTOOL_MODE_TODIFFSKYFILE,   todiffskyfileArgs);
-    PXTOOL_ADD_MODE("-adddiffskyfile",  "",   DIFFTOOL_MODE_ADDDIFFSKYFILE,  adddiffskyfileArgs);
-    PXTOOL_ADD_MODE("-diffskyfile",     "",      DIFFTOOL_MODE_DIFFSKYFILE,     diffskyfileArgs);
+    PXTOOL_ADD_MODE("-todiffskyfile",   "",     DIFFTOOL_MODE_TODIFFSKYFILE,   todiffskyfileArgs);
+    PXTOOL_ADD_MODE("-adddiffskyfile",  "",     DIFFTOOL_MODE_ADDDIFFSKYFILE,  adddiffskyfileArgs);
+    PXTOOL_ADD_MODE("-diffskyfile",     "",     DIFFTOOL_MODE_DIFFSKYFILE,     diffskyfileArgs);
+    PXTOOL_ADD_MODE("-revertdiffskyfile","",    DIFFTOOL_MODE_REVERTDIFFSKYFILE,     revertdiffskyfileArgs);
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
@@ -222,4 +232,17 @@
     addWhereStr(tess_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) {
         psFree(config->where);
