Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 12235)
+++ /trunk/ippdb/src/ippdb.c	(revision 12236)
@@ -6010,5 +6010,5 @@
 static void chipProcessedExpRowFree(chipProcessedExpRow *object);
 
-chipProcessedExpRow *chipProcessedExpRowAlloc(psS64 chip_id, const char *exp_tag, psS64 guide_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
+chipProcessedExpRow *chipProcessedExpRowAlloc(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)
 {
     chipProcessedExpRow *_object;
@@ -6020,4 +6020,5 @@
     _object->exp_tag = psStringCopy(exp_tag);
     _object->guide_id = guide_id;
+    _object->workdir = psStringCopy(workdir);
     _object->label = psStringCopy(label);
     _object->recipe = psStringCopy(recipe);
@@ -6031,4 +6032,5 @@
 {
     psFree(object->exp_tag);
+    psFree(object->workdir);
     psFree(object->label);
     psFree(object->recipe);
@@ -6055,4 +6057,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");
@@ -6088,5 +6095,5 @@
 }
 
-bool chipProcessedExpInsert(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 chipProcessedExpInsert(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();
@@ -6103,4 +6110,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;
@@ -6149,5 +6161,5 @@
 bool chipProcessedExpInsertObject(psDB *dbh, chipProcessedExpRow *object)
 {
-    return chipProcessedExpInsert(dbh, object->chip_id, object->exp_tag, object->guide_id, object->label, object->recipe, object->expgroup, object->dvodb);
+    return chipProcessedExpInsert(dbh, object->chip_id, object->exp_tag, object->guide_id, object->workdir, object->label, object->recipe, object->expgroup, object->dvodb);
 }
 
@@ -6237,4 +6249,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");
@@ -6281,4 +6298,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) {
@@ -6302,5 +6324,5 @@
     }
 
-    return chipProcessedExpRowAlloc(chip_id, exp_tag, guide_id, label, recipe, expgroup, dvodb);
+    return chipProcessedExpRowAlloc(chip_id, exp_tag, guide_id, workdir, label, recipe, expgroup, dvodb);
 }
 psArray *chipProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -7111,5 +7133,5 @@
 static void camPendingExpRowFree(camPendingExpRow *object);
 
-camPendingExpRow *camPendingExpRowAlloc(psS64 cam_id, psS64 chip_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
+camPendingExpRow *camPendingExpRowAlloc(psS64 cam_id, psS64 chip_id, const char *workdir, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
 {
     camPendingExpRow *_object;
@@ -7120,4 +7142,5 @@
     _object->cam_id = cam_id;
     _object->chip_id = chip_id;
+    _object->workdir = psStringCopy(workdir);
     _object->label = psStringCopy(label);
     _object->recipe = psStringCopy(recipe);
@@ -7130,4 +7153,5 @@
 static void camPendingExpRowFree(camPendingExpRow *object)
 {
+    psFree(object->workdir);
     psFree(object->label);
     psFree(object->recipe);
@@ -7149,4 +7173,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");
@@ -7182,5 +7211,5 @@
 }
 
-bool camPendingExpInsert(psDB * dbh, psS64 cam_id, psS64 chip_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
+bool camPendingExpInsert(psDB * dbh, psS64 cam_id, psS64 chip_id, const char *workdir, const char *label, const char *recipe, const char *expgroup, const char *dvodb)
 {
     psMetadata *md = psMetadataAlloc();
@@ -7192,4 +7221,9 @@
     if (!psMetadataAdd(md, PS_LIST_TAIL, "chip_id", PS_DATA_S64, NULL, chip_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item chip_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;
@@ -7238,5 +7272,5 @@
 bool camPendingExpInsertObject(psDB *dbh, camPendingExpRow *object)
 {
-    return camPendingExpInsert(dbh, object->cam_id, object->chip_id, object->label, object->recipe, object->expgroup, object->dvodb);
+    return camPendingExpInsert(dbh, object->cam_id, object->chip_id, object->workdir, object->label, object->recipe, object->expgroup, object->dvodb);
 }
 
@@ -7321,4 +7355,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");
@@ -7360,4 +7399,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) {
@@ -7381,5 +7425,5 @@
     }
 
-    return camPendingExpRowAlloc(cam_id, chip_id, label, recipe, expgroup, dvodb);
+    return camPendingExpRowAlloc(cam_id, chip_id, workdir, label, recipe, expgroup, dvodb);
 }
 psArray *camPendingExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -7493,5 +7537,5 @@
 static void camProcessedExpRowFree(camProcessedExpRow *object);
 
-camProcessedExpRow *camProcessedExpRowAlloc(psS64 cam_id, psS64 chip_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb, const char *uri, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *path_base, psF32 zp_mean, psF32 zp_stdev, psS16 fault)
+camProcessedExpRow *camProcessedExpRowAlloc(psS64 cam_id, psS64 chip_id, const char *workdir, const char *label, const char *recipe, const char *expgroup, const char *dvodb, const char *uri, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *path_base, psF32 zp_mean, psF32 zp_stdev, psS16 fault)
 {
     camProcessedExpRow *_object;
@@ -7502,4 +7546,5 @@
     _object->cam_id = cam_id;
     _object->chip_id = chip_id;
+    _object->workdir = psStringCopy(workdir);
     _object->label = psStringCopy(label);
     _object->recipe = psStringCopy(recipe);
@@ -7523,4 +7568,5 @@
 static void camProcessedExpRowFree(camProcessedExpRow *object)
 {
+    psFree(object->workdir);
     psFree(object->label);
     psFree(object->recipe);
@@ -7544,4 +7590,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");
@@ -7632,5 +7683,5 @@
 }
 
-bool camProcessedExpInsert(psDB * dbh, psS64 cam_id, psS64 chip_id, const char *label, const char *recipe, const char *expgroup, const char *dvodb, const char *uri, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *path_base, psF32 zp_mean, psF32 zp_stdev, psS16 fault)
+bool camProcessedExpInsert(psDB * dbh, psS64 cam_id, psS64 chip_id, const char *workdir, const char *label, const char *recipe, const char *expgroup, const char *dvodb, const char *uri, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *path_base, psF32 zp_mean, psF32 zp_stdev, psS16 fault)
 {
     psMetadata *md = psMetadataAlloc();
@@ -7642,4 +7693,9 @@
     if (!psMetadataAdd(md, PS_LIST_TAIL, "chip_id", PS_DATA_S64, NULL, chip_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item chip_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;
@@ -7743,5 +7799,5 @@
 bool camProcessedExpInsertObject(psDB *dbh, camProcessedExpRow *object)
 {
-    return camProcessedExpInsert(dbh, object->cam_id, object->chip_id, object->label, object->recipe, object->expgroup, object->dvodb, object->uri, object->bg, object->bg_stdev, object->bg_mean_stdev, object->sigma_ra, object->sigma_dec, object->nastro, object->path_base, object->zp_mean, object->zp_stdev, object->fault);
+    return camProcessedExpInsert(dbh, object->cam_id, object->chip_id, object->workdir, object->label, object->recipe, object->expgroup, object->dvodb, object->uri, object->bg, object->bg_stdev, object->bg_mean_stdev, object->sigma_ra, object->sigma_dec, object->nastro, object->path_base, object->zp_mean, object->zp_stdev, object->fault);
 }
 
@@ -7826,4 +7882,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");
@@ -7920,4 +7981,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) {
@@ -7996,5 +8062,5 @@
     }
 
-    return camProcessedExpRowAlloc(cam_id, chip_id, label, recipe, expgroup, dvodb, uri, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, nastro, path_base, zp_mean, zp_stdev, fault);
+    return camProcessedExpRowAlloc(cam_id, chip_id, workdir, label, recipe, expgroup, dvodb, uri, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, nastro, path_base, zp_mean, zp_stdev, fault);
 }
 psArray *camProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 12235)
+++ /trunk/ippdb/src/ippdb.h	(revision 12236)
@@ -3131,4 +3131,5 @@
     char            *exp_tag;
     psS64           guide_id;
+    char            *workdir;
     char            *label;
     char            *recipe;
@@ -3146,4 +3147,5 @@
     const char      *exp_tag,
     psS64           guide_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
@@ -3182,4 +3184,5 @@
     const char      *exp_tag,
     psS64           guide_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
@@ -3754,4 +3757,5 @@
     psS64           cam_id;
     psS64           chip_id;
+    char            *workdir;
     char            *label;
     char            *recipe;
@@ -3768,4 +3772,5 @@
     psS64           cam_id,
     psS64           chip_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
@@ -3803,4 +3808,5 @@
     psS64           cam_id,
     psS64           chip_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
@@ -3964,4 +3970,5 @@
     psS64           cam_id;
     psS64           chip_id;
+    char            *workdir;
     char            *label;
     char            *recipe;
@@ -3989,4 +3996,5 @@
     psS64           cam_id,
     psS64           chip_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
@@ -4035,4 +4043,5 @@
     psS64           cam_id,
     psS64           chip_id,
+    const char      *workdir,
     const char      *label,
     const char      *recipe,
Index: /trunk/ippdb/tests/alloc.c
===================================================================
--- /trunk/ippdb/tests/alloc.c	(revision 12235)
+++ /trunk/ippdb/tests/alloc.c	(revision 12236)
@@ -602,5 +602,5 @@
         chipProcessedExpRow *object;
 
-        object = chipProcessedExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string"    );
+        object = chipProcessedExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string", "a string"    );
 
         if (!object) {
@@ -620,4 +620,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -705,5 +709,5 @@
         camPendingExpRow *object;
 
-        object = camPendingExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string"    );
+        object = camPendingExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string"    );
 
         if (!object) {
@@ -719,4 +723,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -742,5 +750,5 @@
         camProcessedExpRow *object;
 
-        object = camProcessedExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16    );
+        object = camProcessedExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16    );
 
         if (!object) {
@@ -753,4 +761,8 @@
         }
         if (!object->chip_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 12235)
+++ /trunk/ippdb/tests/insert.c	(revision 12236)
@@ -223,5 +223,5 @@
         }
 
-        if (!chipProcessedExpInsert(dbh, -64, "a string", -64, "a string", "a string", "a string", "a string")) {
+        if (!chipProcessedExpInsert(dbh, -64, "a string", -64, "a string", "a string", "a string", "a string", "a string")) {
             exit(EXIT_FAILURE);
         }
@@ -268,20 +268,20 @@
         }
 
-        if (!camPendingExpInsert(dbh, -64, -64, "a string", "a string", "a string", "a string")) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!camProcessedExpInsert(dbh, -64, -64, "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16)) {
+        if (!camPendingExpInsert(dbh, -64, -64, "a string", "a string", "a string", "a string", "a string")) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!camProcessedExpInsert(dbh, -64, -64, "a string", "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertobject.c
===================================================================
--- /trunk/ippdb/tests/insertobject.c	(revision 12235)
+++ /trunk/ippdb/tests/insertobject.c	(revision 12236)
@@ -322,5 +322,5 @@
         }
 
-        object = chipProcessedExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string");
+        object = chipProcessedExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -388,5 +388,5 @@
         }
 
-        object = camPendingExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string");
+        object = camPendingExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -410,5 +410,5 @@
         }
 
-        object = camProcessedExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16);
+        object = camProcessedExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16);
         if (!object) {
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/metadatafromobject.c
===================================================================
--- /trunk/ippdb/tests/metadatafromobject.c	(revision 12235)
+++ /trunk/ippdb/tests/metadatafromobject.c	(revision 12236)
@@ -709,5 +709,5 @@
         bool            status;
 
-        object = chipProcessedExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string");
+        object = chipProcessedExpRowAlloc(-64, "a string", -64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -731,4 +731,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(psMetadataLookupPtr(&status, md, "workdir"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(psMetadataLookupPtr(&status, md, "label"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
@@ -832,5 +836,5 @@
         bool            status;
 
-        object = camPendingExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string");
+        object = camPendingExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -850,4 +854,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(psMetadataLookupPtr(&status, md, "workdir"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(psMetadataLookupPtr(&status, md, "label"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
@@ -875,5 +883,5 @@
         bool            status;
 
-        object = camProcessedExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16);
+        object = camProcessedExpRowAlloc(-64, -64, "a string", "a string", "a string", "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", 32.32, 32.32, -16);
         if (!object) {
             exit(EXIT_FAILURE);
@@ -890,4 +898,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 12235)
+++ /trunk/ippdb/tests/objectfrommetadata.c	(revision 12236)
@@ -1079,4 +1079,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);
@@ -1114,4 +1118,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -1249,4 +1257,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);
@@ -1280,4 +1292,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -1311,4 +1327,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);
@@ -1382,4 +1402,8 @@
             exit(EXIT_FAILURE);
         }
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
