Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 26996)
+++ trunk/ippTools/share/Makefile.am	(revision 26997)
@@ -120,4 +120,5 @@
      disttool_definebyquery_stack.sql \
      disttool_definebyquery_warp.sql \
+     disttool_definebyquery_SSdiff.sql \
      disttool_defineinterest.sql \
      disttool_listfilesets.sql \
Index: trunk/ippTools/share/disttool_definebyquery_SSdiff.sql
===================================================================
--- trunk/ippTools/share/disttool_definebyquery_SSdiff.sql	(revision 26997)
+++ trunk/ippTools/share/disttool_definebyquery_SSdiff.sql	(revision 26997)
@@ -0,0 +1,26 @@
+SELECT DISTINCT
+       'SSdiff' as stage,
+       diffRun.diff_id AS stage_id,
+       diffRun.magicked,           
+       CONCAT_WS('.','SSdiff',convert(diffRun.diff_id,CHAR)) as run_tag,
+       diffRun.label,
+       diffRun.data_group,
+       distTarget.dist_group,
+       distTarget.target_id,
+       distTarget.clean
+FROM diffRun
+JOIN diffInputSkyfile using(diff_id)
+JOIN stackRun ON diffInputSkyfile.stack1 = stackRun.stack_id
+JOIN distTarget ON distTarget.stage = 'SSdiff'
+     AND distTarget.filter = stackRun.filter
+     AND distTarget.dist_group = diffRun.dist_group
+JOIN rcInterest USING(target_id)
+LEFT JOIN distRun ON (distRun.stage_id = diff_id)
+     	  	  AND distTarget.target_id = distRun.target_id
+    -- JOIN hook %s
+WHERE diffInputSkyfile.stack1 IS NOT NULL AND diffInputSkyfile.stack2 IS NOT NULL
+      AND distTarget.state = 'enabled'
+      AND rcInterest.state = 'enabled'
+      AND distRun.dist_id IS NULL
+
+      AND ((diffRun.state = 'full') OR (distTarget.clean AND diffRun.state = 'cleaned'))
Index: trunk/ippTools/src/disttool.c
===================================================================
--- trunk/ippTools/src/disttool.c	(revision 26996)
+++ trunk/ippTools/src/disttool.c	(revision 26997)
@@ -277,4 +277,22 @@
         // stack stage doesn't require magic
         no_magic = true;
+    } else if (!strcmp(stage, "SSdiff")) {
+      magicRunType = "diffRun";
+      runJoinStr = "diffRun.diff_id";
+      query = pxDataGet("disttool_definebyquery_SSdiff.sql");
+      if (!query) {
+	psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
+	psFree(where);
+	return(false);
+      }
+
+      if (label) {
+	psStringAppend(&query, " AND (diffRun.label = '%s') ", label);
+      }
+      if (dist_group) {
+	psStringAppend(&query, " AND (diffRun.dist_group = '%s') ", dist_group);
+      }
+
+      no_magic = true;    
     } else {
         psError(PS_ERR_UNKNOWN, true, "unknown value for stage: %s", stage);
@@ -313,9 +331,9 @@
         psFree(limitString);
     }
-
+    psTrace("disttool",2,query,joinHook ? joinHook : "");
     if (!p_psDBRunQueryF(config->dbh, query, joinHook ? joinHook : "")) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        return false;
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      psFree(query);
+      return false;
     }
     psFree(query);
