Index: trunk/ippTools/share/pubtool_definerun.sql
===================================================================
--- trunk/ippTools/share/pubtool_definerun.sql	(revision 28321)
+++ trunk/ippTools/share/pubtool_definerun.sql	(revision 28322)
@@ -9,5 +9,5 @@
         client_id,
         diff_id AS stage_id,
-        label AS src_label
+        diffRun.label AS src_label
     FROM publishClient
     JOIN diffRun
@@ -28,5 +28,5 @@
         client_id,
         cam_id AS stage_id,
-        label AS src_label
+        camRun.label AS src_label
     FROM publishClient
     JOIN camRun
Index: trunk/ippTools/src/pubtool.c
===================================================================
--- trunk/ippTools/src/pubtool.c	(revision 28321)
+++ trunk/ippTools/src/pubtool.c	(revision 28322)
@@ -151,16 +151,25 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    psMetadata *where = psMetadataAlloc(); // WHERE conditions
+    psMetadata *diffWhere = psMetadataAlloc(); // WHERE conditions for diffs
+    psMetadata *camWhere = psMetadataAlloc(); // WHERE conditions for cams
 
     // required
 
     // optional
-    PXOPT_COPY_S64(config->args, where, "-client_id", "client_id", "==");
-    pxAddLabelSearchArgs(config, where, "-label", "label", "==");
-    pxAddLabelSearchArgs(config, where, "-data_group", "data_group", "==");
-    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs", ">=");
-    PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<=");
-    PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE");
-    PXOPT_COPY_STR(config->args, where, "-obs_mode", "rawExp.obs_mode", "LIKE");
+    PXOPT_COPY_S64(config->args, diffWhere, "-client_id", "client_id", "==");
+    pxAddLabelSearchArgs(config, diffWhere, "-label", "diffRun.label", "==");
+    pxAddLabelSearchArgs(config, diffWhere, "-data_group", "diffRun.data_group", "LIKE");
+    PXOPT_COPY_TIME(config->args, diffWhere, "-dateobs_begin", "rawExp.dateobs", ">=");
+    PXOPT_COPY_TIME(config->args, diffWhere, "-dateobs_end", "rawExp.dateobs", "<=");
+    PXOPT_COPY_STR(config->args, diffWhere, "-filter", "rawExp.filter", "LIKE");
+    PXOPT_COPY_STR(config->args, diffWhere, "-obs_mode", "rawExp.obs_mode", "LIKE");
+
+    PXOPT_COPY_S64(config->args, camWhere, "-client_id", "client_id", "==");
+    pxAddLabelSearchArgs(config, camWhere, "-label", "camRun.label", "==");
+    pxAddLabelSearchArgs(config, camWhere, "-data_group", "camRun.data_group", "LIKE");
+    PXOPT_COPY_TIME(config->args, camWhere, "-dateobs_begin", "rawExp.dateobs", ">=");
+    PXOPT_COPY_TIME(config->args, camWhere, "-dateobs_end", "rawExp.dateobs", "<=");
+    PXOPT_COPY_STR(config->args, camWhere, "-filter", "rawExp.filter", "LIKE");
+    PXOPT_COPY_STR(config->args, camWhere, "-obs_mode", "rawExp.obs_mode", "LIKE");
 
     PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
@@ -172,5 +181,6 @@
     if (!query) {
         psError(PXTOOLS_ERR_SYS, false, "Failed to retreive SQL statement");
-        psFree(where);
+        psFree(diffWhere);
+        psFree(camWhere);
         return false;
     }
@@ -188,20 +198,32 @@
     if (!psDBTransaction(config->dbh)) {
         psError(PS_ERR_UNKNOWN, false, "Database error");
-        psFree(where);
-        return false;
-    }
-
-    psString whereClause = psStringCopy(""); // Additional constraints to add to query
-    if (psListLength(where->list)) {
-        psString clause = psDBGenerateWhereConditionSQL(where, NULL);
-        psStringAppend(&whereClause, "\n AND %s", clause);
+        psFree(diffWhere);
+        psFree(camWhere);
+        return false;
+    }
+
+    psString whereDiff = psStringCopy(""); // Additional constraints to add to query
+    if (psListLength(diffWhere->list)) {
+        psString clause = psDBGenerateWhereConditionSQL(diffWhere, NULL);
+        psStringAppend(&whereDiff, "\n AND %s", clause);
         psFree(clause);
     }
-    psFree(where);
-
-    if (!p_psDBRunQueryF(config->dbh, query, whereClause, whereClause)) {
+    psFree(diffWhere);
+
+    psString whereCam = psStringCopy(""); // Additional constraints to add to query
+    if (psListLength(camWhere->list)) {
+        psString clause = psDBGenerateWhereConditionSQL(camWhere, NULL);
+        psStringAppend(&whereCam, "\n AND %s", clause);
+        psFree(clause);
+    }
+    psFree(camWhere);
+
+    fprintf(stderr, query, whereDiff, whereCam);
+
+    if (!p_psDBRunQueryF(config->dbh, query, whereDiff, whereCam)) {
         psError(PS_ERR_UNKNOWN, false, "Database error");
         psFree(query);
-        psFree(whereClause);
+        psFree(whereDiff);
+        psFree(whereCam);
         if (!psDBRollback(config->dbh)) {
             psError(PS_ERR_UNKNOWN, false, "Database error");
@@ -210,5 +232,6 @@
     }
     psFree(query);
-    psFree(whereClause);
+    psFree(whereDiff);
+    psFree(whereCam);
 
     psArray *output = p_psDBFetchResult(config->dbh); // Output of SELECT statement
