Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 41549)
+++ 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);
