Index: trunk/ippTools/src/flatcorr.c
===================================================================
--- trunk/ippTools/src/flatcorr.c	(revision 15740)
+++ trunk/ippTools/src/flatcorr.c	(revision 15755)
@@ -35,4 +35,5 @@
 static bool newrunMode(pxConfig *config);
 static bool pendingMode(pxConfig *config);
+static bool flatcorrimfileMode(pxConfig *config);
 static bool updateMode(pxConfig *config);
 
@@ -59,4 +60,5 @@
         MODECASE(FLATCORR_MODE_NEWRUN,      newrunMode);
         MODECASE(FLATCORR_MODE_PENDING,     pendingMode);
+        MODECASE(FLATCORR_MODE_FLATCORRIMFILE, flatcorrimfileMode);
         MODECASE(FLATCORR_MODE_UPDATE,      updateMode);
         default:
@@ -429,4 +431,94 @@
 }
 
+
+static bool flatcorrimfileMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+
+    bool status = false;
+    psU64 limit = psMetadataLookupU64(&status, config->args, "-limit");
+    if (!status) {
+        psError(PXTOOLS_ERR_PROG, false, "failed to lookup value for -limit");
+        return false;
+    }
+
+    // find all rawImfiles matching the default query
+    psString query = pxDataGet("flatcorr_find_processedimfiles.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (config->where) {
+        psString whereClause = psDBGenerateWhereConditionSQL(config->where, NULL);
+        psStringAppend(&query, " AND %s", whereClause);
+        psFree(whereClause);
+    }
+
+    // treat limit == 0 as "no limit"
+    if (limit) {
+        psString limitString = psDBGenerateLimitSQL(limit);
+        psStringAppend(&query, " %s", limitString);
+        psFree(limitString);
+    }
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+    
+    psArray *output = p_psDBFetchResult(config->dbh);
+    if (!output) {
+        psErrorCode err = psErrorCodeLast();
+        switch (err) {
+            case PS_ERR_DB_CLIENT:
+                psError(PXTOOLS_ERR_SYS, false, "database error");
+            case PS_ERR_DB_SERVER:
+                psError(PXTOOLS_ERR_PROG, false, "database error");
+            default:
+                psError(PXTOOLS_ERR_PROG, false, "unknown error");
+        } 
+    
+        return false;
+    }
+    if (!psArrayLength(output)) {
+        psTrace("warptool", PS_LOG_INFO, "no rows found");
+        psFree(output);
+        return true; 
+    }
+
+    bool simple = false;
+    {
+        bool status = false;
+        simple = psMetadataLookupBool(&status, config->args, "-simple");
+        if (!status) {            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
+            return false;
+        }
+    }
+
+    if (psArrayLength(output)) {
+        if (!convertIdToStr(output)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to convert id fields into a strings");
+            psFree(output);
+            return false;
+        }
+
+        // negative simple so the default is true
+        if (!ippdbPrintMetadatas(stdout, output, "chipProcessedImfile", !simple)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to print array");
+            psFree(output);
+            return false;
+        }
+    }
+
+    psFree(output);
+
+    return true;
+}
+
+
 static bool updateMode(pxConfig *config)
 {
Index: trunk/ippTools/src/flatcorr.h
===================================================================
--- trunk/ippTools/src/flatcorr.h	(revision 15740)
+++ trunk/ippTools/src/flatcorr.h	(revision 15755)
@@ -27,4 +27,5 @@
     FLATCORR_MODE_NEWRUN,
     FLATCORR_MODE_PENDING,
+    FLATCORR_MODE_FLATCORRIMFILE,
     FLATCORR_MODE_UPDATE
 } flatcorrMode;
Index: trunk/ippTools/src/flatcorrConfig.c
===================================================================
--- trunk/ippTools/src/flatcorrConfig.c	(revision 15740)
+++ trunk/ippTools/src/flatcorrConfig.c	(revision 15755)
@@ -144,4 +144,13 @@
             "use the simple output format", false);
 
+    // -flatcorrimfile
+    psMetadata *flatcorrimfileArgs = psMetadataAlloc();
+    psMetadataAddStr(flatcorrimfileArgs, PS_LIST_TAIL, "-corr_id",  0,
+            "search by exp_id", NULL);
+    psMetadataAddU64(flatcorrimfileArgs, PS_LIST_TAIL, "-limit",  0,
+            "limit result set to N items", 0);
+    psMetadataAddBool(flatcorrimfileArgs, PS_LIST_TAIL, "-simple", 0,
+            "use the simple output format", false);
+
     // -update
     psMetadata *updateArgs = psMetadataAlloc();
@@ -156,4 +165,6 @@
     PXTOOL_ADD_MODE("-pending", "show flat correction runs needing to be processed",
         FLATCORR_MODE_PENDING,      pendingArgs);
+    PXTOOL_ADD_MODE("-flatcorrimfile", "list all the exposures in flat correction runs",
+        FLATCORR_MODE_FLATCORRIMFILE, flatcorrimfileArgs);
     PXTOOL_ADD_MODE("-update",  "change a flat calibration run's state",
         FLATCORR_MODE_UPDATE,       updateArgs);
@@ -187,31 +198,15 @@
     config->where = psMetadataAlloc();
 
-    addWhereStr(det_id);
-    {
-        // XXX this is broke because you can't specify -iteration 0
-        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);
-                return NULL;
-            }
+{   
+    psString str = NULL;
+    bool status = false;
+    if ((str = psMetadataLookupStr(&status, config->args, "-corr_id"))) {
+        if (!psMetadataAddS64(config->where, PS_LIST_TAIL, "corr_id", 0, "==", (psS64)atoll(str))) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add item corr_id");
+            psFree(config);
+            return NULL;
         }
     }
-
-    addWhereStr(det_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) {
