Index: trunk/ippTools/src/bgtool.c
===================================================================
--- trunk/ippTools/src/bgtool.c	(revision 35152)
+++ trunk/ippTools/src/bgtool.c	(revision 35154)
@@ -285,4 +285,5 @@
     psMetadata *where = psMetadataAlloc();
     PXOPT_COPY_S64(config->args,   where, "-chip_id",            "chipRun.chip_id",       "==");
+    PXOPT_COPY_S64(config->args,   where, "-cam_id",             "camRun.cam_id",         "==");
     PXOPT_COPY_S64(config->args,   where, "-exp_id",             "rawExp.exp_id",         "==");
     PXOPT_COPY_STR(config->args,   where, "-exp_name",           "rawExp.exp_name",       "==");
@@ -324,5 +325,6 @@
     PXOPT_COPY_F32(config->args,   where, "-sun_angle_min",      "rawExp.sun_angle",      ">=");
     PXOPT_COPY_F32(config->args,   where, "-sun_angle_max",      "rawExp.sun_angle",      "<");
-    pxAddLabelSearchArgs(config,   where, "-label",              "chipRun.label",         "==");
+    PXOPT_COPY_STR(config->args,   where, "-label",              "chipRun.label",         "==");
+    PXOPT_COPY_STR(config->args,   where, "-cam_label",          "camRun.label",          "==");
 
     if (!psListLength(where->list)) {
@@ -343,4 +345,10 @@
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
+    PXOPT_LOOKUP_STR(cam_label, config->args, "-cam_label", false, false);
+    PXOPT_LOOKUP_S64(cam_id, config->args, "-cam_id", false, false);
+    if (!cam_id && !cam_label) {
+        psError(PXTOOLS_ERR_CONFIG, true, "either cam_id or cam_label is required");
+        return false;
+    }
 
     // Get chip runs to promote to chipBackgroundRun
@@ -364,24 +372,11 @@
     }
 
+    psString labelHook = psStringCopy("");
     if (!rerun) {
-        psStringAppend(&query, "\nAND chipBackgroundRun.chip_bg_id IS NULL");
         if (label) {
-            psStringAppend(&query,
-                           "\nAND (chipBackgroundRun.label = '%s'"
-                           " OR chipBackgroundRun.label IS NULL)",
-                           label);
-        }
-        if (data_group) {
-            psStringAppend(&query,
-                           "\nAND (chipBackgroundRun.data_group = '%s'"
-                           " OR chipBackgroundRun.data_group IS NULL)",
-                           data_group);
-        }
-        if (dist_group) {
-            psStringAppend(&query,
-                           "\nAND (chipBackgroundRun.dist_group = '%s'"
-                           " OR chipBackgroundRun.dist_group IS NULL)",
-                           dist_group);
-        }
+            // check for run with the newly specified label
+            psStringAppend(&labelHook, "\nAND (chipBackgroundRun.label = '%s')", label);
+        }
+        psStringAppend(&query, "\nAND chip_bg_id IS NULL");
     }
 
@@ -391,7 +386,8 @@
     }
 
-    if (!p_psDBRunQuery(config->dbh, query)) {
+    if (!p_psDBRunQueryF(config->dbh, query, labelHook)) {
         psError(psErrorCodeLast(), false, "database error");
         psFree(query);
+        psFree(labelHook);
         if (!psDBRollback(config->dbh)) {
             psError(psErrorCodeLast(), false, "database error");
@@ -400,4 +396,5 @@
     }
     psFree(query);
+    psFree(labelHook);
 
     psArray *output = p_psDBFetchResult(config->dbh); // Matching rows
@@ -420,5 +417,5 @@
     if (pretend) {
         // negative simple so the default is true
-        if (!ippdbPrintMetadatas(stdout, output, "chipRun", !simple)) {
+        if (!ippdbPrintMetadatas(stdout, output, "chipBackgroundRun", !simple)) {
             psError(psErrorCodeLast(), false, "failed to print array");
             psFree(output);
@@ -435,5 +432,5 @@
         psMetadata *md = output->data[i];
 
-        chipRunRow *row = chipRunObjectFromMetadata(md);
+        chipBackgroundRunRow *row = chipBackgroundRunObjectFromMetadata(md);
         if (!row) {
             psError(psErrorCodeLast(), false, "failed to convert metadata into fakeRun");
@@ -445,5 +442,5 @@
         }
 
-        if (!chipBackgroundRunInsert(config->dbh, 0, row->chip_id, "new",
+        if (!chipBackgroundRunInsert(config->dbh, 0, row->chip_id, row->cam_id, "new",
                                      workdir     ? workdir    : row->workdir,
                                      label       ? label      : row->label,
@@ -560,5 +557,5 @@
 
     if (psArrayLength(output)) {
-        if (!ippdbPrintMetadatas(stdout, output, "chipBackgroundRun", !simple)) {
+        if (!ippdbPrintMetadatas(stdout, output, "pendingchipBackgroundRun", !simple)) {
             psError(psErrorCodeLast(), false, "failed to print array");
             psFree(output);
@@ -621,5 +618,5 @@
         return true;
     }
-    if (!ippdbPrintMetadatas(stdout, output, "chipBackgroundImfile", !simple)) {
+    if (!ippdbPrintMetadatas(stdout, output, "pendingchipBackgroundImfile", !simple)) {
         psError(psErrorCodeLast(), false, "failed to print array");
         psFree(output);
@@ -1295,5 +1292,6 @@
     PXOPT_COPY_F32(config->args,   where, "-sun_angle_max",      "rawExp.sun_angle",      "<");
     pxAddLabelSearchArgs(config,   where, "-warp_label",         "warpRun.label",         "==");
-    pxAddLabelSearchArgs(config,   where, "-chip_label",         "chipBackgroundRun.label", "==");
+    pxAddLabelSearchArgs(config,   where, "-chip_bg_label",      "chipBackgroundRun.label", "==");
+    pxAddLabelSearchArgs(config,   where, "-chip_label",         "chipRun.label",         "==");
 
     if (!psListLength(where->list) && !psMetadataLookupBool(NULL, config->args, "-all")) {
@@ -1310,5 +1308,4 @@
     PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false);
     PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false);
-    PXOPT_LOOKUP_STR(alt_cam_label, config->args, "-set_alt_cam_label", false, false);
     PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false);
     PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
@@ -1336,24 +1333,11 @@
     }
 
+    psString labelHook = psStringCopy("");
     if (!rerun) {
-        psStringAppend(&query, "\nAND warpBackgroundRun.warp_bg_id IS NULL");
         if (label) {
-            psStringAppend(&query,
-                           "\nAND (warpBackgroundRun.label = '%s'"
-                           " OR warpBackgroundRun.label IS NULL)",
-                           label);
-        }
-        if (data_group) {
-            psStringAppend(&query,
-                           "\nAND (warpBackgroundRun.data_group = '%s'"
-                           " OR warpBackgroundRun.data_group IS NULL)",
-                           data_group);
-        }
-        if (dist_group) {
-            psStringAppend(&query,
-                           "\nAND (warpBackgroundRun.dist_group = '%s'"
-                           " OR warpBackgroundRun.dist_group IS NULL)",
-                           dist_group);
-        }
+            // check for run with the newly specified label
+            psStringAppend(&labelHook, "\nAND (warpBackgroundRun.label = '%s')", label);
+        }
+        psStringAppend(&query, "\nAND warp_bg_id IS NULL");
     }
 
@@ -1363,6 +1347,7 @@
     }
 
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(psErrorCodeLast(), false, "database error");
+    if (!p_psDBRunQueryF(config->dbh, query, labelHook)) {
+        psError(psErrorCodeLast(), false, "database error");
+        psFree(labelHook);
         psFree(query);
         if (!psDBRollback(config->dbh)) {
@@ -1371,4 +1356,5 @@
         return false;
     }
+    psFree(labelHook);
     psFree(query);
 
@@ -1392,5 +1378,5 @@
     if (pretend) {
         // negative simple so the default is true
-        if (!ippdbPrintMetadatas(stdout, output, "warpRun", !simple)) {
+        if (!ippdbPrintMetadatas(stdout, output, "warpBackgroundRun", !simple)) {
             psError(psErrorCodeLast(), false, "failed to print array");
             psFree(output);
@@ -1409,7 +1395,8 @@
         psS64 chip_bg_id = psMetadataLookupS64(NULL, md, "chip_bg_id");
 
-        warpRunRow *row = warpRunObjectFromMetadata(md);
+        
+        warpBackgroundRunRow *row = warpBackgroundRunObjectFromMetadata(md);
         if (!row) {
-            psError(psErrorCodeLast(), false, "failed to convert metadata into fakeRun");
+            psError(psErrorCodeLast(), false, "failed to convert metadata into warpRun");
             psFree(output);
             if (!psDBRollback(config->dbh)) {
@@ -1425,5 +1412,4 @@
                                      dist_group  ? dist_group : row->dist_group,
                                      reduction   ? reduction  : row->reduction,
-                                     alt_cam_label,
                                      note        ? note       : row->note,
                                      NULL, 0)) {
Index: trunk/ippTools/src/bgtoolConfig.c
===================================================================
--- trunk/ippTools/src/bgtoolConfig.c	(revision 35152)
+++ trunk/ippTools/src/bgtoolConfig.c	(revision 35154)
@@ -50,4 +50,5 @@
     psMetadata *definechipArgs = psMetadataAlloc();
     psMetadataAddS64(definechipArgs, PS_LIST_TAIL, "-chip_id", 0, "search by chip_id", 0);
+    psMetadataAddS64(definechipArgs, PS_LIST_TAIL, "-cam_id", 0, "choose cam_id", 0);
     psMetadataAddS64(definechipArgs, PS_LIST_TAIL, "-exp_id", 0, "search by exp_id", 0);
     psMetadataAddStr(definechipArgs, PS_LIST_TAIL, "-exp_name", 0, "search by exp_name", NULL);
@@ -89,5 +90,6 @@
     psMetadataAddF32(definechipArgs, PS_LIST_TAIL, "-sun_angle_min", 0, "search by min solar angle", NAN);
     psMetadataAddF32(definechipArgs, PS_LIST_TAIL, "-sun_angle_max", 0, "search by max solar angle", NAN);
-    psMetadataAddStr(definechipArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search on chipRun label", NULL);
+    psMetadataAddStr(definechipArgs, PS_LIST_TAIL, "-label", 0, "search on chipRun label", NULL);
+    psMetadataAddStr(definechipArgs, PS_LIST_TAIL, "-cam_label", 0, "search on camRun label", NULL);
     psMetadataAddBool(definechipArgs, PS_LIST_TAIL, "-destreaked", 0, "search for runs that have been destreaked", false);
     psMetadataAddBool(definechipArgs, PS_LIST_TAIL, "-rerun", 0, "re-run data?", false);
@@ -279,5 +281,6 @@
     psMetadataAddF32(definewarpArgs, PS_LIST_TAIL, "-sun_angle_max", 0, "search by max solar angle", NAN);
     psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-warp_label", PS_META_DUPLICATE_OK, "search on warpRun label", NULL);
-    psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-chip_label", PS_META_DUPLICATE_OK, "search on chipBackgroundRun label", NULL);
+    psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-chip_label", PS_META_DUPLICATE_OK, "search on chipRun label", NULL);
+    psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-chip_bg_label", PS_META_DUPLICATE_OK, "search on chipBackgroundRun label", NULL);
     psMetadataAddBool(definewarpArgs, PS_LIST_TAIL, "-destreaked", 0, "search for runs that have been destreaked", false);
     psMetadataAddBool(definewarpArgs, PS_LIST_TAIL, "-rerun", 0, "rerun data?", false);
@@ -285,5 +288,4 @@
     psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-set_label", 0, "define label", NULL);
     psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-set_reduction", 0, "define reduction class", NULL);
-    psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-set_alt_cam_label", 0, "define alternate astrometry sources", NULL);
     psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-set_data_group", 0, "define data group", NULL);
     psMetadataAddStr(definewarpArgs, PS_LIST_TAIL, "-set_dist_group", 0, "define dist group", NULL);
