Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 18618)
+++ trunk/ippTools/src/difftool.c	(revision 18657)
@@ -820,16 +820,16 @@
     psMetadata *where = psMetadataAlloc();
 
-    PXOPT_COPY_S64(config->args, where,  "-diff_id", "diff_id", "==");
     PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
     PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell_id", "==");
-    PXOPT_COPY_STR(config->args, where,  "-tess_id", "tess_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-tess_id", "tess_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
     PXOPT_COPY_STR(config->args, where,  "-kind", "kind", "==");
     PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false); // required options
     PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
-    PXOPT_LOOKUP_BOOL(template, config->args, "-template", false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    PXOPT_LOOKUP_BOOL(newTemplates, config->args, "-new-templates", false);
 
     // find all things to queue
-    psString query = pxDataGet("difftool_queue.sql");
+    psString query = pxDataGet("difftool_definebyquery.sql");
     if (!query) {
         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
@@ -837,15 +837,14 @@
     }
 
-    if (template) {
-        // list only faulted rows
-        psStringAppend(&query, " %s", " AND diffInputSkyfile.template != 0");
+    if (newTemplates) {
+        // Warps that haven't been diffed OR warps that can take a newer template in the diff
+        psStringAppend(&query, " WHERE (diff_id IS NULL OR best_stack_id > current_stack_id)");
     } else {
-        // don't list faulted rows
-        psStringAppend(&query, " %s",
-                       " AND (diffInputSkyfile.template = 0 OR diffInputSkyfile.template IS NULL)");
+        // Only warps that haven't been diffed
+        psStringAppend(&query, " WHERE diff_id IS NULL");
     }
 
     if (psListLength(where->list)) {
-        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "warpsToDiff");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
@@ -896,5 +895,5 @@
             continue;
         }
-        psS64 stack_id = psMetadataLookupS64(&mdok, row, "stack_id");
+        psS64 stack_id = psMetadataLookupS64(&mdok, row, "best_stack_id");
         if (!mdok) {
             psWarning("stack_id not found --- ignoring row %ld", i);
