Index: /trunk/ippTools/share/difftool_definestackstack_part0.sql
===================================================================
--- /trunk/ippTools/share/difftool_definestackstack_part0.sql	(revision 41680)
+++ /trunk/ippTools/share/difftool_definestackstack_part0.sql	(revision 41681)
@@ -26,7 +26,7 @@
      	   skycell_id,
 	   filter
-) AS template ON stackRun.filter = template.filter 
-              AND stackRun.tess_id = template.tess_id 
-	      AND stackRun.skycell_id = template.skycell_id 
+) AS template ON stackRun.tess_id = template.tess_id 
+  	      AND stackRun.skycell_id = template.skycell_id 
+	      @FILT0_QUERY@  -- include filter constraint if requested
 LEFT JOIN (
      SELECT 
Index: /trunk/ippTools/share/difftool_definestackstack_part1.sql
===================================================================
--- /trunk/ippTools/share/difftool_definestackstack_part1.sql	(revision 41680)
+++ /trunk/ippTools/share/difftool_definestackstack_part1.sql	(revision 41681)
@@ -27,7 +27,7 @@
      	   skycell_id,
 	   filter
-) AS template ON stackRun.filter = template.filter 
-              AND stackRun.tess_id = template.tess_id 
+) AS template ON stackRun.tess_id = template.tess_id 
 	      AND stackRun.skycell_id = template.skycell_id 
+	      @FILT1_QUERY@  -- include filter constraint if requested
 LEFT JOIN (
      SELECT 
Index: /trunk/ippTools/src/difftool.c
===================================================================
--- /trunk/ippTools/src/difftool.c	(revision 41680)
+++ /trunk/ippTools/src/difftool.c	(revision 41681)
@@ -2414,4 +2414,5 @@
 
     PXOPT_LOOKUP_BOOL(bothways, config->args, "-bothways", false);
+    PXOPT_LOOKUP_BOOL(relaxedFilters, config->args, "-relaxed-filters", false);
 
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -2452,4 +2453,12 @@
     }
 
+    // restrict input and templated to the same filter unless not restricted
+    psString filtQuery0 = NULL;
+    psString filtQuery1 = NULL;
+    if (! relaxedFilters) {
+        psStringAppend(&filtQuery0, "AND stackRun.filter = template.filter");
+        psStringAppend(&filtQuery1, "AND stackRun.filter = template.filter");
+    }
+
     // find the distinct set of data_groups and filters
     psString query = pxDataGet("difftool_definestackstack_part0.sql");
@@ -2468,4 +2477,5 @@
     psStringSubstitute(&query, stack2Query, "@STACK2_QUERY@");
     psStringSubstitute(&query, diffQuery0,  "@DIFF0_QUERY@");
+    psStringSubstitute(&query, filtQuery0,  "@FILT0_QUERY@");
 
     if (!p_psDBRunQuery(config->dbh, query)) {
@@ -2546,4 +2556,5 @@
         psStringSubstitute(&query, stack2Query,      "@STACK2_QUERY@");
         psStringSubstitute(&query, diffQuery1,       "@DIFF1_QUERY@");
+        psStringSubstitute(&query, filtQuery1,       "@FILT1_QUERY@");
 
         psTrace("difftool", 1, "%s", query);
Index: /trunk/ippTools/src/difftoolConfig.c
===================================================================
--- /trunk/ippTools/src/difftoolConfig.c	(revision 41680)
+++ /trunk/ippTools/src/difftoolConfig.c	(revision 41681)
@@ -372,4 +372,5 @@
     psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-tess_id", 0, "search by tess ID", NULL);
     psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-bothways",  0,          "do the subtraction both ways?", false);
+    psMetadataAddBool(definestackstackArgs, PS_LIST_TAIL, "-relaxed-filters",  0, "allow mismatched filters between input and template?", false);
     psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL);
     psMetadataAddStr(definestackstackArgs, PS_LIST_TAIL, "-input_label", 0, "search by stack label for input", NULL);
