Index: /trunk/ippTools/src/dettool.c
===================================================================
--- /trunk/ippTools/src/dettool.c	(revision 7194)
+++ /trunk/ippTools/src/dettool.c	(revision 7195)
@@ -353,26 +353,92 @@
     // find all matching detProcessedImfiles
     // where query should be pre-generated
-    psArray *detProcessedImfiles = 
+    psArray *processedImfiles = 
         detProcessedImfileSelectRowObjects(config->dbh, config->where, 0);
-    if (!detProcessedImfiles) {
+    if (!processedImfiles) {
         psError(PS_ERR_UNKNOWN, false, "no detProcessedImfile rows found");
         return false;
     }
 
+    // remove detStackedImfiles
+    // detStackedImfiles doesn't have an exp_id so we have to generate the
+    // where query ourselves
+    bool status = false;
+    psString det_id = psMetadataLookupStr(&status, config->args, "-det_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -det_id");
+        return false;
+    }
+    psString class_id = psMetadataLookupStr(&status, config->args, "-class_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -class_id");
+        return false;
+    }
+    psMetadata *where = psMetadataAlloc();
+    if (det_id) {
+        if (!psMetadataAddS32(where, PS_LIST_TAIL, "det_id", 0, "==",
+                (psS32)atoi(det_id))) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
+            psFree(where);
+            return false;
+        }
+    }
+    if (class_id) {
+        if (!psMetadataAddStr(where, PS_LIST_TAIL, "class_id", 0, "==", class_id)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
+            psFree(where);
+            return false;
+        }
+    }
+
+    psArray *stackedImfiles = NULL;
+    if (where->list->n) {
+        stackedImfiles = detStackedImfileSelectRowObjects(
+            config->dbh, where, 0);
+    } else {
+        stackedImfiles = detStackedImfileSelectRowObjects(
+            config->dbh, NULL, 0);
+    }
+    psFree(where);
+    // XXX trace the not found case
+    if (stackedImfiles) {
+        for (long i = 0; i < psArrayLength(processedImfiles); i++) {
+            for (long j = 0; j < psArrayLength(stackedImfiles); j++) {
+                if ((
+                ((detProcessedImfileRow *)processedImfiles->data[i])->det_id
+                ==
+                ((detStackedImfileRow *)stackedImfiles->data[j])->det_id
+                ) && (strcmp(
+                ((detProcessedImfileRow *)processedImfiles->data[i])->class_id,
+                ((detStackedImfileRow *)stackedImfiles->data[j])->class_id)
+                == 0)) {
+                    // remove the rawImfiles from the list
+                    psArrayRemove(processedImfiles, processedImfiles->data[i]);
+                    i--;
+                    break;
+                }
+            }
+        }
+        psFree(stackedImfiles);
+    }
+
     // print imfile list
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(detProcessedImfiles); i++) {
-        psMetadata *md = detProcessedImfileMetadataFromObject(
-                detProcessedImfiles->data[i]);
-        psMetadataAddMetadata(
-            output, PS_LIST_TAIL, "detProcessedImfile", PS_META_DUPLICATE_OK,
-            NULL, md
-        );
-    }
-
-    psString str = psMetadataConfigFormat(output); 
-    psFree(output);
-    fprintf(stdout, "%s\n", str);
-    psFree(str);
+    if (processedImfiles->n) {
+        psMetadata *output = psMetadataAlloc();
+        for (long i = 0; i < psArrayLength(processedImfiles); i++) {
+            psMetadata *md = detProcessedImfileMetadataFromObject(
+                    processedImfiles->data[i]);
+            psMetadataAddMetadata(
+                output, PS_LIST_TAIL, "detProcessedImfile", PS_META_DUPLICATE_OK,
+                NULL, md
+            );
+        }
+
+        psString str = psMetadataConfigFormat(output); 
+        psFree(output);
+        fprintf(stdout, "%s\n", str);
+        psFree(str);
+    }
+
+    psFree(processedImfiles);
 
     return true;
Index: /trunk/ippTools/src/dettoolConfig.c
===================================================================
--- /trunk/ippTools/src/dettoolConfig.c	(revision 7194)
+++ /trunk/ippTools/src/dettoolConfig.c	(revision 7195)
@@ -274,4 +274,5 @@
     addWhereStr(det_id);
     addWhereStr(exp_id);
+    addWhereStr(class_id);
     // convert '-inst' to 'camera'
     if ((str = psMetadataLookupStr(&status, config->args, "-inst"))) {
