HDRS:=types.h context.h strmd5.h
 
-SRCS:=context.c strmd5.c
+SRCS:=context.c strmd5.c attr.c
 OBJS:=${SRCS:.c=.lo}
 
 commonlib:= libglite_jp_common.la
 
 
 typedef struct _glite_jp_error_t {
        int     code;
-       char    *desc;
-       char    *source;
+       const char      *desc;
+       const char      *source;
        struct _glite_jp_error_t *reason;
 } glite_jp_error_t;
 
        } value,value2;
 } glite_jp_query_rec_t;
 
+void glite_jp_attrval_free(glite_jp_attrval_t *,int);
+
 #endif
 
--- /dev/null
+#include <stdlib.h>
+
+#include "types.h"
+
+void glite_jp_attrval_free(glite_jp_attrval_t *a,int f)
+{
+       free(a->attr.name);
+
+       switch (a->attr.type) {
+               case GLITE_JP_ATTR_OWNER: 
+               case GLITE_JP_ATTR_TAG: 
+                       free(a->value.s);
+                       break;
+               default: break;
+       }
+
+       if (f) free(a);
+}