static void usage(char *me)
 {
-       fprintf(stderr,"usage: %s [-m bkserver] [-x] [-j dg_jobid] [-s source_id] [-n num_subjobs [-S]] [-l jdl_file] [-e seed]\n", me);
+       fprintf(stderr,"usage: %s [-m bkserver] [-x] [-j dg_jobid] [-s source_id] [-n num_subjobs [-S][-C]] [-l jdl_file] [-e seed]\n", me);
 }
 
 int main(int argc, char *argv[])
 {
        char *src = NULL,*job = NULL,*server = NULL,*seq,*jdl = NULL, *seed = NULL;
        int lbproxy = 0;
-       int done = 0,num_subjobs = 0,reg_subjobs = 0,i;
+       int done = 0,num_subjobs = 0,reg_subjobs = 0,i, collection = 0;
        edg_wll_Context ctx;
        edg_wlc_JobId   jobid,*subjobs;
 
        opterr = 0;
 
        do {
-               switch (getopt(argc,argv,"xs:j:m:n:Sl:e:")) {
+               switch (getopt(argc,argv,"xs:j:m:n:SCl:e:")) {
                        case 'x': lbproxy = 1; break;
                        case 's': src = (char *) strdup(optarg); break;
                        case 'j': job = (char *) strdup(optarg); break;
                        case 'm': server = strdup(optarg); break;
                        case 'n': num_subjobs = atoi(optarg); break;
                        case 'S': if (num_subjobs>0) { reg_subjobs = 1; break; }
+                       case 'C': if (num_subjobs>0) { collection = 1; break; }
                        case 'l': jdl = (char *) strdup(optarg); break;
                        case 'e': seed = strdup(optarg); break;
                        case '?': usage(argv[0]); exit(EINVAL);
        edg_wll_SetParam(ctx,EDG_WLL_PARAM_SOURCE,edg_wll_StringToSource(src));
        if (lbproxy) {
                if (edg_wll_RegisterJobProxy(ctx,jobid,
-                       num_subjobs?EDG_WLL_REGJOB_DAG:EDG_WLL_REGJOB_SIMPLE,
+                       num_subjobs?(collection?EDG_WLL_REGJOB_COLLECTION:EDG_WLL_REGJOB_DAG):EDG_WLL_REGJOB_SIMPLE,
                        jdl ? jdl : "blabla", "NNNSSSS",
                        num_subjobs,seed,&subjobs))
                {
                }
        } else {
                if (edg_wll_RegisterJobSync(ctx,jobid,
-                       num_subjobs?EDG_WLL_REGJOB_DAG:EDG_WLL_REGJOB_SIMPLE,
+                       num_subjobs?(collection?EDG_WLL_REGJOB_COLLECTION:EDG_WLL_REGJOB_DAG):EDG_WLL_REGJOB_SIMPLE,
                        jdl ? jdl : "blabla", "NNNSSSS",
                        num_subjobs,seed,&subjobs))
                {
 
                        if (states[i].jobtype == EDG_WLL_STAT_SIMPLE) { 
                                printf("      %s .... %s %s\n", id, st, (states[i].state==EDG_WLL_JOB_DONE) ? edg_wll_done_codeToString(states[i].done_code) : "" );
                        }
-                       else if (states[i].jobtype == EDG_WLL_STAT_DAG) {
-                               printf("DAG   %s .... %s %s\n", id, st, (states[i].state==EDG_WLL_JOB_DONE) ? edg_wll_done_codeToString(states[i].done_code) : "");
+                       else if ((states[i].jobtype == EDG_WLL_STAT_DAG) || 
+                               (states[i].jobtype == EDG_WLL_STAT_COLLECTION)) {
+                               printf("%s  %s .... %s %s\n", (states[i].jobtype==EDG_WLL_STAT_DAG)?"DAG ":"COLL",id, st, (states[i].state==EDG_WLL_JOB_DONE) ? edg_wll_done_codeToString(states[i].done_code) : "");
                                for (j=0; states[j].state != EDG_WLL_JOB_UNDEF; j++) {
                                        if (states[j].parent_job) {
                                                char *par_id = edg_wlc_JobIdUnparse(states[j].parent_job);
 
                                                        &js->pub.parent_job);
                                rep(js->pub.network_server, e->regJob.ns);
                                js->pub.children_num = e->regJob.nsubjobs;
-                               if (e->regJob.jobtype == EDG_WLL_REGJOB_DAG
-                                       || e->regJob.jobtype == EDG_WLL_REGJOB_PARTITIONED) {
-                                       js->pub.jobtype = EDG_WLL_STAT_DAG;
+                               switch (e->regJob.jobtype) {
+                                       case EDG_WLL_REGJOB_DAG:
+                                       case EDG_WLL_REGJOB_PARTITIONED:
+                                               js->pub.jobtype = EDG_WLL_STAT_DAG;
+                                               break;
+                                       case EDG_WLL_REGJOB_COLLECTION:
+                                               js->pub.jobtype = EDG_WLL_STAT_COLLECTION;
+                                               break;
+                                       default:
+                                               break;
                                }
                                rep(js->pub.seed, e->regJob.seed);
                        }