Index: /trunk/ippTools/src/addtool.c
===================================================================
--- /trunk/ippTools/src/addtool.c	(revision 38570)
+++ /trunk/ippTools/src/addtool.c	(revision 38571)
@@ -986,4 +986,6 @@
     PXOPT_COPY_S64(config->args, where, "-ff_id",    "fullForceRun.ff_id", "==");
     PXOPT_COPY_S64(config->args, where, "-diff_id",    "diffRun.diff_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-stage_extra1",    "addRun.stage_extra1", "==");
+    PXOPT_COPY_S64(config->args, where, "-stage_id",    "addRun.stage_id", "==");
     PXOPT_LOOKUP_STR(stage,       config->args, "-stage", false, false);
     pxcamGetSearchArgs (config, where);
@@ -992,5 +994,5 @@
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
-    PXOPT_LOOKUP_BOOL(multi, config->args, "-multiadd", false);
+    PXOPT_LOOKUP_BOOL(multiadd, config->args, "-multiadd", false);
     
     psString query = NULL;
@@ -1042,5 +1044,5 @@
     if (strcmp(stage, "diff") == 0) {
       //this group by is needed to join against all the warps (to get camera)
-      if (multi) {
+      if (multiadd) {
 	psStringAppend(&query, " GROUP BY %s", "diff_id");
       } else {
@@ -1050,5 +1052,5 @@
     if (strcmp(stage, "fullforce") == 0) {
       //this group by is needed to join against all the warps (to get camera)
-      if (multi) {
+      if (multiadd) {
 	psStringAppend(&query, "GROUP BY %s", "ff_id");
       } else {
@@ -1114,9 +1116,25 @@
     PXOPT_LOOKUP_S16(fault,         config->args, "-fault", false, false);
     PXOPT_LOOKUP_S64(stage_extra1, config->args, "-stage_extra1", false, false);
-    PXOPT_LOOKUP_BOOL(multi, config->args, "-multi", false);
+
+    PXOPT_LOOKUP_BOOL(multiadd, config->args, "-multiadd", false);
     // generate restrictions
     psMetadata *where = psMetadataAlloc();
-    PXOPT_COPY_S64(config->args, where, "-add_id",   "addRun.add_id",   "==");
-
+    if (multiadd) {
+      //required, check that they are there
+      PXOPT_LOOKUP_STR(multiaddlabel, config->args, "-multiaddlabel",true,false);
+      PXOPT_LOOKUP_STR(stage, config->args, "-stage",true,false);
+      PXOPT_LOOKUP_S64(stage_id, config->args, "-stage_id",true,false);
+      //do the where
+      PXOPT_COPY_STR(config->args, where, "-multiaddlabel",   "addRun.label",   "==");
+      PXOPT_COPY_STR(config->args, where, "-stage", "addRun.stage","==");
+      PXOPT_COPY_S64(config->args, where, "-stage_id", "addRun.stage_id", "==");
+      //PXOPT_LOOKUP_S64(stage_id, config->args, "-stage_id", false, false);
+    } else {
+      //if not multiadd mode, then do it by add_id
+      // required, check for add_id
+      PXOPT_LOOKUP_S64(add_id, config->args, "-add_id",true,false);
+      PXOPT_COPY_S64(config->args, where, "-add_id",   "addRun.add_id",   "==");
+      
+    }
     psString query = pxDataGet("addtool_find_pendingexp.sql");
     if (!query) {
@@ -1133,7 +1151,7 @@
     psFree(where);
 
-    if (multi) {
-      psStringAppend(&query, "group by  %s", "stage_extra1");
-    }
+    //if (multiadd) {
+    //  psStringAppend(&query, "group by  %s", "stage_extra1");
+    //}
 
     if (!p_psDBRunQuery(config->dbh, query)) {
@@ -1150,4 +1168,5 @@
         return false;
     }
+    
     if (!psArrayLength(output)) {
         psTrace("addtool", PS_LOG_INFO, "no rows found");
@@ -1162,6 +1181,8 @@
     }
 
-    addRunRow *pendingRow = addRunObjectFromMetadata(output->data[0]);
-    psFree(output);
+    for (long i =0; i<psArrayLength(output);i++) {
+      
+    addRunRow *pendingRow = addRunObjectFromMetadata(output->data[i]);
+    
     addProcessedExpRow *row = addProcessedExpRowAlloc(
         pendingRow->add_id,
@@ -1232,4 +1253,5 @@
         psError(PS_ERR_UNKNOWN, false, "database error");
         return false;
+    }
     }
 
Index: /trunk/ippTools/src/addtoolConfig.c
===================================================================
--- /trunk/ippTools/src/addtoolConfig.c	(revision 38570)
+++ /trunk/ippTools/src/addtoolConfig.c	(revision 38571)
@@ -116,4 +116,6 @@
     psMetadataAddS64(pendingexpArgs, PS_LIST_TAIL, "-diff_id",                 0, "search by diff_id",0);
     psMetadataAddS64(pendingexpArgs, PS_LIST_TAIL, "-ff_id",                   0, "search by ff_id",0);
+    psMetadataAddS64(pendingexpArgs, PS_LIST_TAIL, "-stage_extra1",                   0, "search by stage_extra1",0);
+    psMetadataAddS64(pendingexpArgs, PS_LIST_TAIL, "-stage_id",                   0, "search by stage_id",0);
     pxcamSetSearchArgs(pendingexpArgs);
     psMetadataAddStr(pendingexpArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search by addRun label", NULL);
@@ -132,6 +134,8 @@
     psMetadataAddS16(addprocessedexpArgs, PS_LIST_TAIL, "-fault",  0,            "set fault code", 0);
     psMetadataAddS64(addprocessedexpArgs, PS_LIST_TAIL, "-stage_extra1",  0,            "set stage_extra1", 0);
-    psMetadataAddBool(pendingexpArgs, PS_LIST_TAIL, "-multi",           0, "for addstar multi mode, group by stage_id ", false);
-
+    psMetadataAddS64(addprocessedexpArgs, PS_LIST_TAIL, "-stage_id",  0,            "set stage_id", 0);
+    psMetadataAddBool(addprocessedexpArgs, PS_LIST_TAIL, "-multiadd",           0, "for addstar multi mode, group by stage_id ", false);
+    psMetadataAddStr(addprocessedexpArgs, PS_LIST_TAIL, "-multiaddlabel", 0,            "label for multiadd", NULL);
+    psMetadataAddStr(addprocessedexpArgs, PS_LIST_TAIL, "-stage", 0,            "select stage", NULL);
     // -processedexp
     psMetadata *processedexpArgs = psMetadataAlloc();
