#include "glite/jp/builtin_plugins.h"
 #include "glite/jp/backend.h"
 #include "glite/jp/known_attr.h"
+#include "jp_job_attrs.h"
 
 #define INITIAL_NUMBER_EVENTS 100
 #define LB_PLUGIN_NAMESPACE "urn:org.glite.lb"
         memset(&err,0,sizeof err);
         err.source = __FUNCTION__;
 
-       if (strcmp(attr, GLITE_JP_ATTR_OWNER) == 0) {
-               if (h->events)
-               {
+       if (strncmp(attr, GLITE_JP_ATTR_OWNER, strlen(GLITE_JP_ATTR_OWNER)) == 0 ||
+            strncmp(attr, GLITE_JP_LB_user, strlen(GLITE_JP_LB_user)) == 0) {
+               if (h->events) {
                        i = 0;
-                       while (h->events[i])
-                       {
-                               if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) 
-                               {
+                       while (h->events[i]) {
+                               if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
                                        av = calloc(2, sizeof(glite_jp_attrval_t));
                                        av[0].name = strdup(GLITE_JP_ATTR_OWNER);
                                        av[0].value = strdup(h->events[i]->any.user);
                                        av[0].size = -1;
                                        av[0].timestamp = 
                                                h->events[i]->any.timestamp.tv_sec;
-
                                        break;
                                }
                                i++;
                        }
                }
-       } else if (strcmp(attr, GLITE_JP_LB_SUBMITTED) == 0) {
-               if (h->events)
-               {
+       } else if (strncmp(attr, GLITE_JP_LB_SUBMITTED, strlen(GLITE_JP_LB_SUBMITTED)) == 0) {
+               if (h->events) {
                        i = 0;
-                       while (h->events[i])
-                       {
-                               if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) 
-                               {
+                       while (h->events[i]) {
+                               if (h->events[i]->type == EDG_WLL_EVENT_REGJOB) {
                                        av = calloc(2, sizeof(glite_jp_attrval_t));
                                        av[0].name = strdup(GLITE_JP_LB_SUBMITTED);
                                        trio_asprintf(&av[0].value,"%ld.%06ld",
                                                h->events[i]->any.timestamp.tv_usec);
                                        av[0].timestamp = 
                                                h->events[i]->any.timestamp.tv_sec;
-
                                        break;
                                }
                                i++;
                        }
                }
-       } else if (strcmp(attr, GLITE_JP_LB_TERMINATED) == 0 || strcmp(attr, GLITE_JP_LB_FINALSTATE) == 0) {
+       } else if (strncmp(attr, GLITE_JP_LB_TERMINATED, strlen(GLITE_JP_LB_TERMINATED)) == 0 || 
+                   strncmp(attr, GLITE_JP_LB_VO, strlen(GLITE_JP_LB_VO)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_aTag, strlen(GLITE_JP_LB_aTag)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_rQType, strlen(GLITE_JP_LB_rQType)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_eDuration, strlen(GLITE_JP_LB_eDuration)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_eNodes, strlen(GLITE_JP_LB_eNodes)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_eProc, strlen(GLITE_JP_LB_eProc)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_RB, strlen(GLITE_JP_LB_RB)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_CE, strlen(GLITE_JP_LB_CE)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_host, strlen(GLITE_JP_LB_host)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_UIHost, strlen(GLITE_JP_LB_UIHost)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_CPUTime, strlen(GLITE_JP_LB_CPUTime)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_NProc, strlen(GLITE_JP_LB_NProc)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_finalStatus, strlen(GLITE_JP_LB_finalStatus)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_finalStatusDate, strlen(GLITE_JP_LB_finalStatusDate)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_finalStatusReason, strlen(GLITE_JP_LB_finalStatusReason)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_LRMSDoneStatus, strlen(GLITE_JP_LB_LRMSDoneStatus)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_LRMSStatusReason, strlen(GLITE_JP_LB_LRMSStatusReason)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_retryCount, strlen(GLITE_JP_LB_retryCount)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_additionalReason, strlen(GLITE_JP_LB_additionalReason)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_jobType, strlen(GLITE_JP_LB_jobType)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_nsubjobs, strlen(GLITE_JP_LB_nsubjobs)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_lastStatusHistory, strlen(GLITE_JP_LB_lastStatusHistory)) == 0 ||
+                   strncmp(attr, GLITE_JP_LB_fullStatusHistory, strlen(GLITE_JP_LB_fullStatusHistory)) == 0 ) {
                {
                        *attrval = NULL;
                        err.code = ENOSYS;
                }
        } else if (strncmp(attr, GLITE_JP_LBTAG_NS, strlen(GLITE_JP_LBTAG_NS)) == 0) {
                tag = strrchr(attr, ':');
-               if (h->events && tag)
-               {
+               if (h->events && tag) {
                        tag++;
                        i = 0;
                        n_tags = 0;
 
-                       while (h->events[i])
-                       {
+                       while (h->events[i]) {
                                if ((h->events[i]->type == EDG_WLL_EVENT_USERTAG) &&
                                        (strcmp(h->events[i]->userTag.name, tag) == 0) )
                                {