Index: trunk/ippTools/src/camtool.c
===================================================================
--- trunk/ippTools/src/camtool.c	(revision 14099)
+++ trunk/ippTools/src/camtool.c	(revision 14100)
@@ -34,4 +34,5 @@
 static bool addprocessedexpMode(pxConfig *config);
 static bool processedexpMode(pxConfig *config);
+static bool revertprocessedexpMode(pxConfig *config);
 static bool updateprocessedexpMode(pxConfig *config);
 static bool blockMode(pxConfig *config);
@@ -62,4 +63,5 @@
         MODECASE(CAMTOOL_MODE_ADDPROCESSEDEXP,      addprocessedexpMode);
         MODECASE(CAMTOOL_MODE_PROCESSEDEXP,         processedexpMode);
+        MODECASE(CAMTOOL_MODE_REVERTPROCESSEDEXP,   revertprocessedexpMode);
         MODECASE(CAMTOOL_MODE_UPDATEPROCESSEDEXP,   updateprocessedexpMode);
         MODECASE(CAMTOOL_MODE_BLOCK,                blockMode);
@@ -757,4 +759,36 @@
 
 
+static bool revertprocessedexpMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psString query = pxDataGet("camtool_revertprocessedexp.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (config->where) {
+        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "camProcessedExp");
+        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 updateprocessedexpMode(pxConfig *config)
 {
Index: trunk/ippTools/src/camtool.h
===================================================================
--- trunk/ippTools/src/camtool.h	(revision 14099)
+++ trunk/ippTools/src/camtool.h	(revision 14100)
@@ -30,4 +30,5 @@
     CAMTOOL_MODE_ADDPROCESSEDEXP,
     CAMTOOL_MODE_PROCESSEDEXP,
+    CAMTOOL_MODE_REVERTPROCESSEDEXP,
     CAMTOOL_MODE_UPDATEPROCESSEDEXP,
     CAMTOOL_MODE_BLOCK,
Index: trunk/ippTools/src/camtoolConfig.c
===================================================================
--- trunk/ippTools/src/camtoolConfig.c	(revision 14099)
+++ trunk/ippTools/src/camtoolConfig.c	(revision 14100)
@@ -181,4 +181,13 @@
             "only return imfiles with a fault status set", false);
 
+    // -revertprocessedexp
+    psMetadata *revertprocessedexpArgs = psMetadataAlloc();
+    psMetadataAddStr(revertprocessedexpArgs, PS_LIST_TAIL, "-cam_id", 0,
+            "search by camtool ID (required)", NULL);
+    psMetadataAddStr(revertprocessedexpArgs, PS_LIST_TAIL, "-chip_id", 0,
+            "search by chiptool ID", NULL);
+    psMetadataAddS16(revertprocessedexpArgs, PS_LIST_TAIL, "-code",  0,
+            "search by fault code", 0);
+
     // -updateprocessedexp
     psMetadata *updateprocessedexpArgs = psMetadataAlloc();
@@ -217,4 +226,5 @@
     PXTOOL_ADD_MODE("-addprocessedexp",     "", CAMTOOL_MODE_ADDPROCESSEDEXP, addprocessedexpArgs);
     PXTOOL_ADD_MODE("-processedexp",        "", CAMTOOL_MODE_PROCESSEDEXP,  processedexpArgs);
+    PXTOOL_ADD_MODE("-revertprocessedexp",  "", CAMTOOL_MODE_REVERTPROCESSEDEXP,  revertprocessedexpArgs);
     PXTOOL_ADD_MODE("-updateprocessedexp",  "", CAMTOOL_MODE_UPDATEPROCESSEDEXP,updateprocessedexpArgs);
     PXTOOL_ADD_MODE("-block",               "", CAMTOOL_MODE_BLOCK,         blockArgs);
@@ -299,7 +309,19 @@
         }
     }
-    addWhereStr(class);
     addWhereStr(class_id);
     addWhereStr(filter);
+
+    // 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 (psListLength(config->where->list) < 1) {
