Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 12230)
+++ /trunk/ippdb/src/ippdb.c	(revision 12231)
@@ -5267,5 +5267,5 @@
 static void chipPendingExpRowFree(chipPendingExpRow *object);
 
-chipPendingExpRow *chipPendingExpRowAlloc(psS64 chip_id, const char *exp_tag, psS64 guide_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
+chipPendingExpRow *chipPendingExpRowAlloc(psS64 chip_id, const char *exp_tag, psS64 guide_id, const char *workdir, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
 {
     chipPendingExpRow *_object;
@@ -5277,4 +5277,5 @@
     _object->exp_tag = psStringCopy(exp_tag);
     _object->guide_id = guide_id;
+    _object->workdir = psStringCopy(workdir);
     _object->label = psStringCopy(label);
     _object->recipe = psStringCopy(recipe);
@@ -5288,4 +5289,5 @@
 {
     psFree(object->exp_tag);
+    psFree(object->workdir);
     psFree(object->label);
     psFree(object->recipe);
@@ -5312,4 +5314,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, "255")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item label");
@@ -5345,5 +5352,5 @@
 }
 
-bool chipPendingExpInsert(psDB * dbh, psS64 chip_id, const char *exp_tag, psS64 guide_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
+bool chipPendingExpInsert(psDB * dbh, psS64 chip_id, const char *exp_tag, psS64 guide_id, const char *workdir, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
 {
     psMetadata *md = psMetadataAlloc();
@@ -5360,4 +5367,9 @@
     if (!psMetadataAdd(md, PS_LIST_TAIL, "guide_id", PS_DATA_S64, NULL, guide_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item guide_id");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, workdir)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
         psFree(md);
         return false;
@@ -5406,5 +5418,5 @@
 bool chipPendingExpInsertObject(psDB *dbh, chipPendingExpRow *object)
 {
-    return chipPendingExpInsert(dbh, object->chip_id, object->exp_tag, object->guide_id, object->label, object->recipe, object->expgroup, object->dvodb);
+    return chipPendingExpInsert(dbh, object->chip_id, object->exp_tag, object->guide_id, object->workdir, object->label, object->recipe, object->expgroup, object->dvodb);
 }
 
@@ -5494,4 +5506,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, object->workdir)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item label");
@@ -5538,4 +5555,9 @@
         return false;
     }
+    char* workdir = psMetadataLookupPtr(&status, md, "workdir");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item workdir");
+        return false;
+    }
     char* label = psMetadataLookupPtr(&status, md, "label");
     if (!status) {
@@ -5559,5 +5581,5 @@
     }
 
-    return chipPendingExpRowAlloc(chip_id, exp_tag, guide_id, label, recipe, expgroup, dvodb);
+    return chipPendingExpRowAlloc(chip_id, exp_tag, guide_id, workdir, label, recipe, expgroup, dvodb);
 }
 psArray *chipPendingExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 12230)
+++ /trunk/ippdb/src/ippdb.h	(revision 12231)
@@ -2714,4 +2714,5 @@
     char            *exp_tag;
     psS64           guide_id;
+    char            *workdir;
     char            *label;
     char            *recipe;
@@ -2729,4 +2730,5 @@
     const char      *exp_tag,
     psS64           guide_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
@@ -2765,4 +2767,5 @@
     const char      *exp_tag,
     psS64           guide_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
Index: /trunk/ippdb/tests/alloc.c
===================================================================
--- /trunk/ippdb/tests/alloc.c	(revision 12230)
+++ /trunk/ippdb/tests/alloc.c	(revision 12231)
@@ -532,5 +532,5 @@
         chipPendingExpRow *object;
 
-        object = chipPendingExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string"    );
+        object = chipPendingExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string", "a string"    );
 
         if (!object) {
@@ -547,4 +547,8 @@
         }
         if (!object->guide_id == -64) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/insert.c
===================================================================
--- /trunk/ippdb/tests/insert.c	(revision 12230)
+++ /trunk/ippdb/tests/insert.c	(revision 12231)
@@ -193,5 +193,5 @@
         }
 
-        if (!chipPendingExpInsert(dbh, -64, "a string", -64, "a string", "a string", "a string", "a string")) {
+        if (!chipPendingExpInsert(dbh, -64, "a string", -64, "a string", "a string", "a string", "a string", "a string")) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertobject.c
===================================================================
--- /trunk/ippdb/tests/insertobject.c	(revision 12230)
+++ /trunk/ippdb/tests/insertobject.c	(revision 12231)
@@ -278,5 +278,5 @@
         }
 
-        object = chipPendingExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string");
+        object = chipPendingExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/metadatafromobject.c
===================================================================
--- /trunk/ippdb/tests/metadatafromobject.c	(revision 12230)
+++ /trunk/ippdb/tests/metadatafromobject.c	(revision 12231)
@@ -626,5 +626,5 @@
         bool            status;
 
-        object = chipPendingExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string");
+        object = chipPendingExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -645,4 +645,8 @@
             exit(EXIT_FAILURE);
         }
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "workdir"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/objectfrommetadata.c
===================================================================
--- /trunk/ippdb/tests/objectfrommetadata.c	(revision 12230)
+++ /trunk/ippdb/tests/objectfrommetadata.c	(revision 12231)
@@ -961,4 +961,8 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "workdir", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataAddStr(md, PS_LIST_TAIL, "label", 0, NULL, "a string")) {
             psFree(md);
@@ -993,4 +997,8 @@
             exit(EXIT_FAILURE);
         }
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
