Index: /trunk/ippTools/src/regtool.c
===================================================================
--- /trunk/ippTools/src/regtool.c	(revision 10971)
+++ /trunk/ippTools/src/regtool.c	(revision 10972)
@@ -31,4 +31,5 @@
 static bool updateexpMode(pxConfig *config);
 static bool updateimfileMode(pxConfig *config);
+static bool faultimfileMode(pxConfig *config);
 static bool rawimfileMode(pxConfig *config);
 // static p1PendingExpRow *newToP1PendingExp(newExpRow *newExp);
@@ -38,4 +39,5 @@
 static rawDetrendExpRow *newToRawDetrendExp(pxConfig *config, newExpRow *exp);
 static rawImfileRow *newToRawImfile(pxConfig *config, newImfileRow *exp);
+static psU32 mapCodeStrToInt(char *codeStr);
 
 
@@ -58,4 +60,5 @@
         MODECASE(P0TOOL_MODE_UPDATEEXP,       updateexpMode);
         MODECASE(P0TOOL_MODE_UPDATEIMFILE,    updateimfileMode);
+        MODECASE(P0TOOL_MODE_FAULTIMFILE,     faultimfileMode);
         MODECASE(P0TOOL_MODE_RAWIMFILE,       rawimfileMode);
         default:
@@ -234,4 +237,50 @@
 
     psFree(output);
+
+    return true;
+}
+
+static bool faultimfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    bool status = false;
+    psString codeStr = psMetadataLookupStr(&status, config->args, "-code");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -code");
+        return false;
+    }
+    if (!codeStr) {
+        psError(PS_ERR_UNKNOWN, true, "-code is required");
+        return false;
+    }
+
+    // map code string to numeric fault code
+    psU32 code = mapCodeStrToInt(codeStr);
+    if (code == (psU32)-1) {
+        psError(PS_ERR_UNKNOWN, false, "error resolving error code");
+        return false;
+    }
+
+    // update the database
+    psMetadata *values = psMetadataAlloc();
+    if (!psMetadataAddU32(values, PS_LIST_HEAD, "flags", 0, NULL, code)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add metadata item flags");
+        psFree(values);
+        return false;
+    }
+    psFree(values);
+
+    long rowsAffected = psDBUpdateRows(config->dbh, "newImfile", config->where, values); 
+    if (rowsAffected < 0) {
+        // database error
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+    if (rowsAffected < 1) {
+        // we didn't do anything
+        psError(PS_ERR_UNKNOWN, false, "zero rows were affected - either the search criteria didn't match any rows or the field already had the value being set.");
+        return false;
+    }
 
     return true;
@@ -1025,2 +1074,18 @@
 }
 
+static psU32 mapCodeStrToInt(char *codeStr)
+{
+    if (strcasestr(codeStr, "none")) {
+        return PX_ERROR_NONE;
+    } else if (strcasestr(codeStr, "unknown")) {
+        return PX_ERROR_UNKNOWN;
+    } else if (strcasestr(codeStr, "bad_data")) {
+        return PX_ERROR_BAD_DATA;
+    } else if (strcasestr(codeStr, "id10t")) {
+        return PX_ERROR_ID10T;
+    }
+
+    psError(PS_ERR_UNKNOWN, true, "invalid fault code string");
+
+    return (psU32) -1;
+}
Index: /trunk/ippTools/src/regtool.h
===================================================================
--- /trunk/ippTools/src/regtool.h	(revision 10971)
+++ /trunk/ippTools/src/regtool.h	(revision 10972)
@@ -29,4 +29,5 @@
     P0TOOL_MODE_UPDATEEXP,
     P0TOOL_MODE_UPDATEIMFILE,
+    P0TOOL_MODE_FAULTIMFILE,
     P0TOOL_MODE_RAWIMFILE
 } p0toolMode;
Index: /trunk/ippTools/src/regtoolConfig.c
===================================================================
--- /trunk/ippTools/src/regtoolConfig.c	(revision 10971)
+++ /trunk/ippTools/src/regtoolConfig.c	(revision 10972)
@@ -155,4 +155,15 @@
     psMetadataAddStr(updateimfileArgs, PS_LIST_TAIL, "-dateobs",  0,
         "define observation time", NULL);
+
+    // -faultimfile
+    psMetadata *faultimfileArgs = psMetadataAlloc();
+    psMetadataAddStr(faultimfileArgs, PS_LIST_TAIL, "-exp_tag",  0,
+        "search by exposure ID", NULL);
+    psMetadataAddStr(faultimfileArgs, PS_LIST_TAIL, "-class",  0,
+        "search by class", NULL);
+    psMetadataAddStr(faultimfileArgs, PS_LIST_TAIL, "-class_id",  0,
+        "search by class ID", NULL);
+    psMetadataAddStr(faultimfileArgs, PS_LIST_TAIL, "-code",  0,
+        "set fault code (required)", NULL);
     
     // -rawimfile
@@ -189,4 +200,5 @@
     PXTOOL_MODE("-updateexp",    P0TOOL_MODE_UPDATEEXP,   updateexpArgs);
     PXTOOL_MODE("-updateimfile", P0TOOL_MODE_UPDATEIMFILE,updateimfileArgs);
+    PXTOOL_MODE("-faultimfile",  P0TOOL_MODE_FAULTIMFILE, faultimfileArgs);
     PXTOOL_MODE("-rawimfile",    P0TOOL_MODE_RAWIMFILE,   rawimfileArgs);
 
