<xs:element name="finalStatus" type="a:statusType" />
        <xs:element name="finalStatusDate" type="xs:dateTime" />
        <xs:element name="finalStatusReason" type="xs:string" />
+       <xs:element name="finalDoneStatus" type="a:doneType" />
        <xs:element name="LRMSDoneStatus" type="a:doneType" />
        <xs:element name="LRMSStatusReason" type="xs:string" />
 
 
 }
 
 static int get_classad_attr(const char* attr, glite_jp_context_t ctx, lb_handle *h, glite_jp_attrval_t **av){
-       printf("attr = %s\n", attr);
+/*     printf("attr = %s\n", attr); */
        glite_jp_error_t err;
        glite_jp_clear_error(ctx);
         memset(&err,0,sizeof err);
                        av[0].timestamp = h->status.lastUpdateTime.tv_sec;
                }
                av[0].size = -1;
+       } else if (strcmp(attr, GLITE_JP_LB_finalDoneStatus) == 0) {
+
+       /* XXX: should be a string */
+               if (h->finalStatus && h->finalStatus->state == EDG_WLL_JOB_DONE) {
+                       av = calloc(2, sizeof(glite_jp_attrval_t));
+                       av[0].name = strdup(attr);
+
+                       asprintf(&av[0].value,"%d",h->status.done_code);
+                       av[0].timestamp = h->finalStatus->timestamp.tv_sec;
+               }
+               else {
+                       *attrval = NULL;
+                        err.code = EINVAL;
+                        err.desc = strdup("Final status is not Done");
+                        return glite_jp_stack_error(ctx,&err);
+               }
+
        } else if (strcmp(attr, GLITE_JP_LB_finalStatusDate) == 0) {
                 struct tm *t = NULL;
                 if ( (h->finalStatus) &&