Index: trunk/ippdb/src/ippdb.c
===================================================================
--- trunk/ippdb/src/ippdb.c	(revision 9423)
+++ trunk/ippdb/src/ippdb.c	(revision 9684)
@@ -31,12 +31,4 @@
 #include "ippdb.h"
 
-#define WEATHER_TABLE_NAME "weather"
-#define SKYP_TRANSPARENCY_TABLE_NAME "skyp_transparency"
-#define SKYP_ABSORPTION_TABLE_NAME "skyp_absorption"
-#define SKYP_EMISSION_TABLE_NAME "skyp_emission"
-#define DIMM_TABLE_NAME "dimm"
-#define SKYP_IR_TABLE_NAME "skyp_ir"
-#define DOME_TABLE_NAME "dome"
-#define TELESCOPE_TABLE_NAME "telescope"
 #define SUMMITEXP_TABLE_NAME "summitExp"
 #define PZPENDINGEXP_TABLE_NAME "pzPendingExp"
@@ -228,71 +220,61 @@
 }
 
-static void weatherRowFree(weatherRow *object);
-
-weatherRow *weatherRowAlloc(psF32 temp01, psF32 humi01, psF32 temp02, psF32 humi02, psF32 temp03, psF32 humi03, psF32 pressure)
-{
-    weatherRow      *_object;
-
-    _object = psAlloc(sizeof(weatherRow));
-    psMemSetDeallocator(_object, (psFreeFunc)weatherRowFree);
-
-    _object->temp01 = temp01;
-    _object->humi01 = humi01;
-    _object->temp02 = temp02;
-    _object->humi02 = humi02;
-    _object->temp03 = temp03;
-    _object->humi03 = humi03;
-    _object->pressure = pressure;
+static void summitExpRowFree(summitExpRow *object);
+
+summitExpRow *summitExpRowAlloc(const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
+{
+    summitExpRow    *_object;
+
+    _object = psAlloc(sizeof(summitExpRow));
+    psMemSetDeallocator(_object, (psFreeFunc)summitExpRowFree);
+
+    _object->exp_id = psStringCopy(exp_id);
+    _object->camera = psStringCopy(camera);
+    _object->telescope = psStringCopy(telescope);
+    _object->exp_type = psStringCopy(exp_type);
+    _object->uri = psStringCopy(uri);
 
     return _object;
 }
 
-static void weatherRowFree(weatherRow *object)
-{
-}
-
-bool weatherCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi01");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp02");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi02");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp03");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi03");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item pressure");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, WEATHER_TABLE_NAME, md);
+static void summitExpRowFree(summitExpRow *object)
+{
+    psFree(object->exp_id);
+    psFree(object->camera);
+    psFree(object->telescope);
+    psFree(object->exp_type);
+    psFree(object->uri);
+}
+
+bool summitExpCreateTable(psDB *dbh)
+{
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Primary Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBCreateTable(dbh, SUMMITEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -301,52 +283,39 @@
 }
 
-bool weatherDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, WEATHER_TABLE_NAME);
-}
-
-bool weatherInsert(psDB * dbh, psF32 temp01, psF32 humi01, psF32 temp02, psF32 humi02, psF32 temp03, psF32 humi03, psF32 pressure)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, temp01)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, humi01)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi01");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, temp02)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp02");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, humi02)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi02");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, temp03)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp03");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, humi03)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi03");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, pressure)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item pressure");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, WEATHER_TABLE_NAME, md);
+bool summitExpDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, SUMMITEXP_TABLE_NAME);
+}
+
+bool summitExpInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
+{
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, SUMMITEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -354,11 +323,11 @@
 }
 
-long long weatherDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long summitExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, SUMMITEXP_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from weather");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from summitExp");
         return count;
 
@@ -368,13 +337,13 @@
     return deleted;
 }
-bool weatherInsertObject(psDB *dbh, weatherRow *object)
-{
-    return weatherInsert(dbh, object->temp01, object->humi01, object->temp02, object->humi02, object->temp03, object->humi03, object->pressure);
-}
-
-bool weatherInsertObjects(psDB *dbh, psArray *objects)
+bool summitExpInsertObject(psDB *dbh, summitExpRow *object)
+{
+    return summitExpInsert(dbh, object->exp_id, object->camera, object->telescope, object->exp_type, object->uri);
+}
+
+bool summitExpInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!weatherInsertObject(dbh, objects->data[i])) {
+        if (!summitExpInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -384,11 +353,11 @@
 }
 
-bool weatherInsertFits(psDB *dbh, const psFits *fits)
+bool summitExpInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  WEATHER_TABLE_NAME
-    if (!psFitsMoveExtName(fits, WEATHER_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", WEATHER_TABLE_NAME);
+    // move to (the first?) extension named  SUMMITEXP_TABLE_NAME
+    if (!psFitsMoveExtName(fits, SUMMITEXP_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SUMMITEXP_TABLE_NAME);
         return false;
     }
@@ -408,3074 +377,4 @@
     }
 
-    if (!psDBInsertRows(dbh, WEATHER_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool weatherSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, WEATHER_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *weatherMetadataFromObject(const weatherRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, object->temp01)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, object->humi01)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi01");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, object->temp02)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp02");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, object->humi02)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi02");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, object->temp03)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item temp03");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, object->humi03)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item humi03");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, object->pressure)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item pressure");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-weatherRow *weatherObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    psF32           temp01;
-    psF32           humi01;
-    psF32           temp02;
-    psF32           humi02;
-    psF32           temp03;
-    psF32           humi03;
-    psF32           pressure;
-
-    temp01 = psMetadataLookupF32(&status, md, "temp01");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp01");
-        return false;
-    }
-    humi01 = psMetadataLookupF32(&status, md, "humi01");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi01");
-        return false;
-    }
-    temp02 = psMetadataLookupF32(&status, md, "temp02");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp02");
-        return false;
-    }
-    humi02 = psMetadataLookupF32(&status, md, "humi02");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi02");
-        return false;
-    }
-    temp03 = psMetadataLookupF32(&status, md, "temp03");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp03");
-        return false;
-    }
-    humi03 = psMetadataLookupF32(&status, md, "humi03");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi03");
-        return false;
-    }
-    pressure = psMetadataLookupF32(&status, md, "pressure");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item pressure");
-        return false;
-    }
-
-    return weatherRowAlloc(temp01, humi01, temp02, humi02, temp03, humi03, pressure);
-}
-psArray *weatherSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        weatherRow *object = weatherObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool weatherDeleteObject(psDB *dbh, const weatherRow *object)
-{
-    psMetadata *where = weatherMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from weather");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "weatherRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long weatherDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        weatherRow *object = objects->data[i];
-        psMetadata *where = weatherMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from weather");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool weatherPrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = weatherMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            WEATHER_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void skyp_transparencyRowFree(skyp_transparencyRow *object);
-
-skyp_transparencyRow *skyp_transparencyRowAlloc(const char *filter, psF64 trans, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
-{
-    skyp_transparencyRow *_object;
-
-    _object = psAlloc(sizeof(skyp_transparencyRow));
-    psMemSetDeallocator(_object, (psFreeFunc)skyp_transparencyRowFree);
-
-    _object->filter = psStringCopy(filter);
-    _object->trans = trans;
-    _object->nstars = nstars;
-    _object->ra = ra;
-    _object->decl = decl;
-    _object->exptime = exptime;
-    _object->sky_bright = sky_bright;
-
-    return _object;
-}
-
-static void skyp_transparencyRowFree(skyp_transparencyRow *object)
-{
-    psFree(object->filter);
-}
-
-bool skyp_transparencyCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item trans");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, SKYP_TRANSPARENCY_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool skyp_transparencyDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, SKYP_TRANSPARENCY_TABLE_NAME);
-}
-
-bool skyp_transparencyInsert(psDB * dbh, const char *filter, psF64 trans, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, trans)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item trans");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, nstars)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, SKYP_TRANSPARENCY_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long skyp_transparencyDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_transparency");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_transparencyInsertObject(psDB *dbh, skyp_transparencyRow *object)
-{
-    return skyp_transparencyInsert(dbh, object->filter, object->trans, object->nstars, object->ra, object->decl, object->exptime, object->sky_bright);
-}
-
-bool skyp_transparencyInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!skyp_transparencyInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool skyp_transparencyInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  SKYP_TRANSPARENCY_TABLE_NAME
-    if (!psFitsMoveExtName(fits, SKYP_TRANSPARENCY_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_TRANSPARENCY_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool skyp_transparencySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_TRANSPARENCY_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *skyp_transparencyMetadataFromObject(const skyp_transparencyRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, object->trans)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item trans");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, object->nstars)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, object->exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, object->sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-skyp_transparencyRow *skyp_transparencyObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    char            *filter;
-    psF64           trans;
-    psS32           nstars;
-    psF64           ra;
-    psF64           decl;
-    psF32           exptime;
-    psF64           sky_bright;
-
-    filter = psMetadataLookupPtr(&status, md, "filter");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
-        return false;
-    }
-    trans = psMetadataLookupF64(&status, md, "trans");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item trans");
-        return false;
-    }
-    nstars = psMetadataLookupS32(&status, md, "nstars");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");
-        return false;
-    }
-    ra = psMetadataLookupF64(&status, md, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        return false;
-    }
-    decl = psMetadataLookupF64(&status, md, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        return false;
-    }
-    exptime = psMetadataLookupF32(&status, md, "exptime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
-        return false;
-    }
-    sky_bright = psMetadataLookupF64(&status, md, "sky_bright");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
-        return false;
-    }
-
-    return skyp_transparencyRowAlloc(filter, trans, nstars, ra, decl, exptime, sky_bright);
-}
-psArray *skyp_transparencySelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        skyp_transparencyRow *object = skyp_transparencyObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool skyp_transparencyDeleteObject(psDB *dbh, const skyp_transparencyRow *object)
-{
-    psMetadata *where = skyp_transparencyMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_transparency");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "skyp_transparencyRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long skyp_transparencyDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        skyp_transparencyRow *object = objects->data[i];
-        psMetadata *where = skyp_transparencyMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_transparency");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_transparencyPrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = skyp_transparencyMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            SKYP_TRANSPARENCY_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void skyp_absorptionRowFree(skyp_absorptionRow *object);
-
-skyp_absorptionRow *skyp_absorptionRowAlloc(const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
-{
-    skyp_absorptionRow *_object;
-
-    _object = psAlloc(sizeof(skyp_absorptionRow));
-    psMemSetDeallocator(_object, (psFreeFunc)skyp_absorptionRowFree);
-
-    _object->disperser_id = psStringCopy(disperser_id);
-    _object->atmcomp1 = atmcomp1;
-    _object->atmcomp2 = atmcomp2;
-    _object->atmcomp3 = atmcomp3;
-    _object->nstars = nstars;
-    _object->ra = ra;
-    _object->decl = decl;
-    _object->exptime = exptime;
-    _object->sky_bright = sky_bright;
-
-    return _object;
-}
-
-static void skyp_absorptionRowFree(skyp_absorptionRow *object)
-{
-    psFree(object->disperser_id);
-}
-
-bool skyp_absorptionCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, SKYP_ABSORPTION_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool skyp_absorptionDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, SKYP_ABSORPTION_TABLE_NAME);
-}
-
-bool skyp_absorptionInsert(psDB * dbh, const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, disperser_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, atmcomp1)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, atmcomp2)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, atmcomp3)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, nstars)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, SKYP_ABSORPTION_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long skyp_absorptionDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_absorption");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_absorptionInsertObject(psDB *dbh, skyp_absorptionRow *object)
-{
-    return skyp_absorptionInsert(dbh, object->disperser_id, object->atmcomp1, object->atmcomp2, object->atmcomp3, object->nstars, object->ra, object->decl, object->exptime, object->sky_bright);
-}
-
-bool skyp_absorptionInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!skyp_absorptionInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool skyp_absorptionInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  SKYP_ABSORPTION_TABLE_NAME
-    if (!psFitsMoveExtName(fits, SKYP_ABSORPTION_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_ABSORPTION_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, SKYP_ABSORPTION_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool skyp_absorptionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_ABSORPTION_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *skyp_absorptionMetadataFromObject(const skyp_absorptionRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, object->disperser_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, object->atmcomp1)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, object->atmcomp2)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, object->atmcomp3)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, object->nstars)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, object->exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, object->sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-skyp_absorptionRow *skyp_absorptionObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    char            *disperser_id;
-    psF32           atmcomp1;
-    psF32           atmcomp2;
-    psF32           atmcomp3;
-    psS32           nstars;
-    psF64           ra;
-    psF64           decl;
-    psF32           exptime;
-    psF64           sky_bright;
-
-    disperser_id = psMetadataLookupPtr(&status, md, "disperser_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");
-        return false;
-    }
-    atmcomp1 = psMetadataLookupF32(&status, md, "atmcomp1");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");
-        return false;
-    }
-    atmcomp2 = psMetadataLookupF32(&status, md, "atmcomp2");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");
-        return false;
-    }
-    atmcomp3 = psMetadataLookupF32(&status, md, "atmcomp3");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");
-        return false;
-    }
-    nstars = psMetadataLookupS32(&status, md, "nstars");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");
-        return false;
-    }
-    ra = psMetadataLookupF64(&status, md, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        return false;
-    }
-    decl = psMetadataLookupF64(&status, md, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        return false;
-    }
-    exptime = psMetadataLookupF32(&status, md, "exptime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
-        return false;
-    }
-    sky_bright = psMetadataLookupF64(&status, md, "sky_bright");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
-        return false;
-    }
-
-    return skyp_absorptionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, nstars, ra, decl, exptime, sky_bright);
-}
-psArray *skyp_absorptionSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        skyp_absorptionRow *object = skyp_absorptionObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool skyp_absorptionDeleteObject(psDB *dbh, const skyp_absorptionRow *object)
-{
-    psMetadata *where = skyp_absorptionMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_absorption");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "skyp_absorptionRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long skyp_absorptionDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        skyp_absorptionRow *object = objects->data[i];
-        psMetadata *where = skyp_absorptionMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_absorption");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_absorptionPrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = skyp_absorptionMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            SKYP_ABSORPTION_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void skyp_emissionRowFree(skyp_emissionRow *object);
-
-skyp_emissionRow *skyp_emissionRowAlloc(const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psF32 continuum, psF32 exptime)
-{
-    skyp_emissionRow *_object;
-
-    _object = psAlloc(sizeof(skyp_emissionRow));
-    psMemSetDeallocator(_object, (psFreeFunc)skyp_emissionRowFree);
-
-    _object->disperser_id = psStringCopy(disperser_id);
-    _object->atmcomp1 = atmcomp1;
-    _object->atmcomp2 = atmcomp2;
-    _object->atmcomp3 = atmcomp3;
-    _object->continuum = continuum;
-    _object->exptime = exptime;
-
-    return _object;
-}
-
-static void skyp_emissionRowFree(skyp_emissionRow *object)
-{
-    psFree(object->disperser_id);
-}
-
-bool skyp_emissionCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item continuum");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, SKYP_EMISSION_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool skyp_emissionDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, SKYP_EMISSION_TABLE_NAME);
-}
-
-bool skyp_emissionInsert(psDB * dbh, const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psF32 continuum, psF32 exptime)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, disperser_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, atmcomp1)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, atmcomp2)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, atmcomp3)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, continuum)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item continuum");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, SKYP_EMISSION_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long skyp_emissionDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_emission");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_emissionInsertObject(psDB *dbh, skyp_emissionRow *object)
-{
-    return skyp_emissionInsert(dbh, object->disperser_id, object->atmcomp1, object->atmcomp2, object->atmcomp3, object->continuum, object->exptime);
-}
-
-bool skyp_emissionInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!skyp_emissionInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool skyp_emissionInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  SKYP_EMISSION_TABLE_NAME
-    if (!psFitsMoveExtName(fits, SKYP_EMISSION_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_EMISSION_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, SKYP_EMISSION_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool skyp_emissionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_EMISSION_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *skyp_emissionMetadataFromObject(const skyp_emissionRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, object->disperser_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, object->atmcomp1)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, object->atmcomp2)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, object->atmcomp3)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, object->continuum)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item continuum");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, object->exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-skyp_emissionRow *skyp_emissionObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    char            *disperser_id;
-    psF32           atmcomp1;
-    psF32           atmcomp2;
-    psF32           atmcomp3;
-    psF32           continuum;
-    psF32           exptime;
-
-    disperser_id = psMetadataLookupPtr(&status, md, "disperser_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");
-        return false;
-    }
-    atmcomp1 = psMetadataLookupF32(&status, md, "atmcomp1");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");
-        return false;
-    }
-    atmcomp2 = psMetadataLookupF32(&status, md, "atmcomp2");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");
-        return false;
-    }
-    atmcomp3 = psMetadataLookupF32(&status, md, "atmcomp3");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");
-        return false;
-    }
-    continuum = psMetadataLookupF32(&status, md, "continuum");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item continuum");
-        return false;
-    }
-    exptime = psMetadataLookupF32(&status, md, "exptime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
-        return false;
-    }
-
-    return skyp_emissionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, continuum, exptime);
-}
-psArray *skyp_emissionSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        skyp_emissionRow *object = skyp_emissionObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool skyp_emissionDeleteObject(psDB *dbh, const skyp_emissionRow *object)
-{
-    psMetadata *where = skyp_emissionMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_emission");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "skyp_emissionRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long skyp_emissionDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        skyp_emissionRow *object = objects->data[i];
-        psMetadata *where = skyp_emissionMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_emission");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_emissionPrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = skyp_emissionMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            SKYP_EMISSION_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void dimmRowFree(dimmRow *object);
-
-dimmRow *dimmRowAlloc(psF32 sigmax, psF32 sigmay, psF32 fwhm, psF64 ra, psF64 decl, psF32 expttime, const char *telescope_id)
-{
-    dimmRow         *_object;
-
-    _object = psAlloc(sizeof(dimmRow));
-    psMemSetDeallocator(_object, (psFreeFunc)dimmRowFree);
-
-    _object->sigmax = sigmax;
-    _object->sigmay = sigmay;
-    _object->fwhm = fwhm;
-    _object->ra = ra;
-    _object->decl = decl;
-    _object->expttime = expttime;
-    _object->telescope_id = psStringCopy(telescope_id);
-
-    return _object;
-}
-
-static void dimmRowFree(dimmRow *object)
-{
-    psFree(object->telescope_id);
-}
-
-bool dimmCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sigmay");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item expttime");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope_id");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, DIMM_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool dimmDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, DIMM_TABLE_NAME);
-}
-
-bool dimmInsert(psDB * dbh, psF32 sigmax, psF32 sigmay, psF32 fwhm, psF64 ra, psF64 decl, psF32 expttime, const char *telescope_id)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, sigmax)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, sigmay)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sigmay");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, fwhm)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, expttime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item expttime");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, telescope_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope_id");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, DIMM_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long dimmDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, DIMM_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from dimm");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool dimmInsertObject(psDB *dbh, dimmRow *object)
-{
-    return dimmInsert(dbh, object->sigmax, object->sigmay, object->fwhm, object->ra, object->decl, object->expttime, object->telescope_id);
-}
-
-bool dimmInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!dimmInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool dimmInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  DIMM_TABLE_NAME
-    if (!psFitsMoveExtName(fits, DIMM_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DIMM_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, DIMM_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool dimmSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, DIMM_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *dimmMetadataFromObject(const dimmRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, object->sigmax)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, object->sigmay)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sigmay");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, object->fwhm)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, object->expttime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item expttime");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, object->telescope_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope_id");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-dimmRow *dimmObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    psF32           sigmax;
-    psF32           sigmay;
-    psF32           fwhm;
-    psF64           ra;
-    psF64           decl;
-    psF32           expttime;
-    char            *telescope_id;
-
-    sigmax = psMetadataLookupF32(&status, md, "sigmax");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmax");
-        return false;
-    }
-    sigmay = psMetadataLookupF32(&status, md, "sigmay");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmay");
-        return false;
-    }
-    fwhm = psMetadataLookupF32(&status, md, "fwhm");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm");
-        return false;
-    }
-    ra = psMetadataLookupF64(&status, md, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        return false;
-    }
-    decl = psMetadataLookupF64(&status, md, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        return false;
-    }
-    expttime = psMetadataLookupF32(&status, md, "expttime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item expttime");
-        return false;
-    }
-    telescope_id = psMetadataLookupPtr(&status, md, "telescope_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope_id");
-        return false;
-    }
-
-    return dimmRowAlloc(sigmax, sigmay, fwhm, ra, decl, expttime, telescope_id);
-}
-psArray *dimmSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        dimmRow *object = dimmObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool dimmDeleteObject(psDB *dbh, const dimmRow *object)
-{
-    psMetadata *where = dimmMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, DIMM_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from dimm");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "dimmRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long dimmDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        dimmRow *object = objects->data[i];
-        psMetadata *where = dimmMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, DIMM_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from dimm");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool dimmPrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = dimmMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            DIMM_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void skyp_irRowFree(skyp_irRow *object);
-
-skyp_irRow *skyp_irRowAlloc(psF64 sky_bright, psF64 sky_var, psF64 ra, psF64 decl, psF32 fov_x, psF32 fov_y)
-{
-    skyp_irRow      *_object;
-
-    _object = psAlloc(sizeof(skyp_irRow));
-    psMemSetDeallocator(_object, (psFreeFunc)skyp_irRowFree);
-
-    _object->sky_bright = sky_bright;
-    _object->sky_var = sky_var;
-    _object->ra = ra;
-    _object->decl = decl;
-    _object->fov_x = fov_x;
-    _object->fov_y = fov_y;
-
-    return _object;
-}
-
-static void skyp_irRowFree(skyp_irRow *object)
-{
-}
-
-bool skyp_irCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_var");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fov_x");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fov_y");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, SKYP_IR_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool skyp_irDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, SKYP_IR_TABLE_NAME);
-}
-
-bool skyp_irInsert(psDB * dbh, psF64 sky_bright, psF64 sky_var, psF64 ra, psF64 decl, psF32 fov_x, psF32 fov_y)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, sky_var)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_var");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, fov_x)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fov_x");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, fov_y)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fov_y");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, SKYP_IR_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long skyp_irDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_ir");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_irInsertObject(psDB *dbh, skyp_irRow *object)
-{
-    return skyp_irInsert(dbh, object->sky_bright, object->sky_var, object->ra, object->decl, object->fov_x, object->fov_y);
-}
-
-bool skyp_irInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!skyp_irInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool skyp_irInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  SKYP_IR_TABLE_NAME
-    if (!psFitsMoveExtName(fits, SKYP_IR_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_IR_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, SKYP_IR_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool skyp_irSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_IR_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *skyp_irMetadataFromObject(const skyp_irRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, object->sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, object->sky_var)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item sky_var");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, object->fov_x)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fov_x");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, object->fov_y)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item fov_y");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-skyp_irRow *skyp_irObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    psF64           sky_bright;
-    psF64           sky_var;
-    psF64           ra;
-    psF64           decl;
-    psF32           fov_x;
-    psF32           fov_y;
-
-    sky_bright = psMetadataLookupF64(&status, md, "sky_bright");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
-        return false;
-    }
-    sky_var = psMetadataLookupF64(&status, md, "sky_var");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_var");
-        return false;
-    }
-    ra = psMetadataLookupF64(&status, md, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        return false;
-    }
-    decl = psMetadataLookupF64(&status, md, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        return false;
-    }
-    fov_x = psMetadataLookupF32(&status, md, "fov_x");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_x");
-        return false;
-    }
-    fov_y = psMetadataLookupF32(&status, md, "fov_y");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_y");
-        return false;
-    }
-
-    return skyp_irRowAlloc(sky_bright, sky_var, ra, decl, fov_x, fov_y);
-}
-psArray *skyp_irSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        skyp_irRow *object = skyp_irObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool skyp_irDeleteObject(psDB *dbh, const skyp_irRow *object)
-{
-    psMetadata *where = skyp_irMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_ir");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "skyp_irRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long skyp_irDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        skyp_irRow *object = objects->data[i];
-        psMetadata *where = skyp_irMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_ir");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool skyp_irPrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = skyp_irMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            SKYP_IR_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void domeRowFree(domeRow *object);
-
-domeRow *domeRowAlloc(psF32 az, bool open, bool light, bool track)
-{
-    domeRow         *_object;
-
-    _object = psAlloc(sizeof(domeRow));
-    psMemSetDeallocator(_object, (psFreeFunc)domeRowFree);
-
-    _object->az = az;
-    _object->open = open;
-    _object->light = light;
-    _object->track = track;
-
-    return _object;
-}
-
-static void domeRowFree(domeRow *object)
-{
-}
-
-bool domeCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, true)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item open");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, true)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item light");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, true)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item track");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, DOME_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool domeDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, DOME_TABLE_NAME);
-}
-
-bool domeInsert(psDB * dbh, psF32 az, bool open, bool light, bool track)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, open)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item open");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, light)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item light");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, track)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item track");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, DOME_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long domeDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, DOME_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from dome");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool domeInsertObject(psDB *dbh, domeRow *object)
-{
-    return domeInsert(dbh, object->az, object->open, object->light, object->track);
-}
-
-bool domeInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!domeInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool domeInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  DOME_TABLE_NAME
-    if (!psFitsMoveExtName(fits, DOME_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DOME_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, DOME_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool domeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, DOME_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *domeMetadataFromObject(const domeRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, object->open)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item open");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, object->light)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item light");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, object->track)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item track");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-domeRow *domeObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    psF32           az;
-    bool            open;
-    bool            light;
-    bool            track;
-
-    az = psMetadataLookupF32(&status, md, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        return false;
-    }
-    open = psMetadataLookupBool(&status, md, "open");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item open");
-        return false;
-    }
-    light = psMetadataLookupBool(&status, md, "light");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item light");
-        return false;
-    }
-    track = psMetadataLookupBool(&status, md, "track");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item track");
-        return false;
-    }
-
-    return domeRowAlloc(az, open, light, track);
-}
-psArray *domeSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        domeRow *object = domeObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool domeDeleteObject(psDB *dbh, const domeRow *object)
-{
-    psMetadata *where = domeMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, DOME_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from dome");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "domeRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long domeDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        domeRow *object = objects->data[i];
-        psMetadata *where = domeMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, DOME_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from dome");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool domePrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = domeMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            DOME_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void telescopeRowFree(telescopeRow *object);
-
-telescopeRow *telescopeRowAlloc(const char *guide, psF32 alt, psF32 az, psF64 ra, psF64 decl)
-{
-    telescopeRow    *_object;
-
-    _object = psAlloc(sizeof(telescopeRow));
-    psMemSetDeallocator(_object, (psFreeFunc)telescopeRowFree);
-
-    _object->guide = psStringCopy(guide);
-    _object->alt = alt;
-    _object->az = az;
-    _object->ra = ra;
-    _object->decl = decl;
-
-    return _object;
-}
-
-static void telescopeRowFree(telescopeRow *object)
-{
-    psFree(object->guide);
-}
-
-bool telescopeCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, TELESCOPE_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool telescopeDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, TELESCOPE_TABLE_NAME);
-}
-
-bool telescopeInsert(psDB * dbh, const char *guide, psF32 alt, psF32 az, psF64 ra, psF64 decl)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, guide)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, TELESCOPE_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long telescopeDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from telescope");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool telescopeInsertObject(psDB *dbh, telescopeRow *object)
-{
-    return telescopeInsert(dbh, object->guide, object->alt, object->az, object->ra, object->decl);
-}
-
-bool telescopeInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!telescopeInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool telescopeInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  TELESCOPE_TABLE_NAME
-    if (!psFitsMoveExtName(fits, TELESCOPE_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", TELESCOPE_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
-    if (!psDBInsertRows(dbh, TELESCOPE_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool telescopeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, TELESCOPE_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *telescopeMetadataFromObject(const telescopeRow *object)
-{
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, object->guide)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
-        psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
-        psFree(md);
-        return NULL;
-    }
-
-    return md;
-}
-
-telescopeRow *telescopeObjectFromMetadata(psMetadata *md)
-{
-    bool            status;
-    char            *guide;
-    psF32           alt;
-    psF32           az;
-    psF64           ra;
-    psF64           decl;
-
-    guide = psMetadataLookupPtr(&status, md, "guide");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item guide");
-        return false;
-    }
-    alt = psMetadataLookupF32(&status, md, "alt");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
-        return false;
-    }
-    az = psMetadataLookupF32(&status, md, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        return false;
-    }
-    ra = psMetadataLookupF64(&status, md, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        return false;
-    }
-    decl = psMetadataLookupF64(&status, md, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        return false;
-    }
-
-    return telescopeRowAlloc(guide, alt, az, ra, decl);
-}
-psArray *telescopeSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAlloc(rowSet->n);
-    returnSet->n = 0;
-
-    for (i = 0; i < rowSet->n; i++) {
-        telescopeRow *object = telescopeObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool telescopeDeleteObject(psDB *dbh, const telescopeRow *object)
-{
-    psMetadata *where = telescopeMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, where, 0);
-    psFree(where)
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from telescope");
-        return false;
-    }
-    if (count > 1) {
-        // XXX should this be a psAbort() instead?  It is possible that
-        // having an object match multiple rows was by design.
-        psError(PS_ERR_UNKNOWN, true, "telescopeRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long telescopeDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        telescopeRow *object = objects->data[i];
-        psMetadata *where = telescopeMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
-        psFree(where)
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from telescope");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool telescopePrintObjects(FILE *stream, psArray *objects, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(objects, false);
-
-    psMetadata *output = psMetadataAlloc();
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = telescopeMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            TELESCOPE_TABLE_NAME,
-            PS_META_DUPLICATE_OK,
-            NULL,
-            md
-        )) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
-            psFree(md);
-            psFree(output);
-            return false;
-        }
-        psFree(md);
-    }
-
-    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(output);
-    }
-    psFree(output);
-
-    return true;
-}
-static void summitExpRowFree(summitExpRow *object);
-
-summitExpRow *summitExpRowAlloc(const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
-{
-    summitExpRow    *_object;
-
-    _object = psAlloc(sizeof(summitExpRow));
-    psMemSetDeallocator(_object, (psFreeFunc)summitExpRowFree);
-
-    _object->exp_id = psStringCopy(exp_id);
-    _object->camera = psStringCopy(camera);
-    _object->telescope = psStringCopy(telescope);
-    _object->exp_type = psStringCopy(exp_type);
-    _object->uri = psStringCopy(uri);
-
-    return _object;
-}
-
-static void summitExpRowFree(summitExpRow *object)
-{
-    psFree(object->exp_id);
-    psFree(object->camera);
-    psFree(object->telescope);
-    psFree(object->exp_type);
-    psFree(object->uri);
-}
-
-bool summitExpCreateTable(psDB *dbh)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, "Primary Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, "Primary Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBCreateTable(dbh, SUMMITEXP_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool summitExpDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, SUMMITEXP_TABLE_NAME);
-}
-
-bool summitExpInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
-        psFree(md);
-        return false;
-    }
-
-    status = psDBInsertOneRow(dbh, SUMMITEXP_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long summitExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, SUMMITEXP_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from summitExp");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool summitExpInsertObject(psDB *dbh, summitExpRow *object)
-{
-    return summitExpInsert(dbh, object->exp_id, object->camera, object->telescope, object->exp_type, object->uri);
-}
-
-bool summitExpInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!summitExpInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool summitExpInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  SUMMITEXP_TABLE_NAME
-    if (!psFitsMoveExtName(fits, SUMMITEXP_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SUMMITEXP_TABLE_NAME);
-        return false;
-    }
-
-    // check HDU type
-    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
-        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
-        return false;
-    }
-
-    // read fits table
-    rowSet = psFitsReadTable(fits);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
-        psFree(rowSet);
-        return false;
-    }
-
     if (!psDBInsertRows(dbh, SUMMITEXP_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
@@ -3512,32 +411,31 @@
 psMetadata *summitExpMetadataFromObject(const summitExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -3546,32 +444,27 @@
 summitExpRow *summitExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_id;
-    char            *camera;
-    char            *telescope;
-    char            *exp_type;
-    char            *uri;
-
-    exp_id = psMetadataLookupPtr(&status, md, "exp_id");
+
+bool status = false;
+    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
         return false;
     }
-    camera = psMetadataLookupPtr(&status, md, "camera");
+    char* camera = psMetadataLookupPtr(&status, md, "camera");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
         return false;
     }
-    telescope = psMetadataLookupPtr(&status, md, "telescope");
+    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
         return false;
     }
-    exp_type = psMetadataLookupPtr(&status, md, "exp_type");
+    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
@@ -3703,29 +596,26 @@
 bool pzPendingExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
@@ -3733,5 +623,5 @@
     }
 
-    status = psDBCreateTable(dbh, PZPENDINGEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, PZPENDINGEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -3747,29 +637,26 @@
 bool pzPendingExpInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
@@ -3777,5 +664,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, PZPENDINGEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, PZPENDINGEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -3871,32 +758,31 @@
 psMetadata *pzPendingExpMetadataFromObject(const pzPendingExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -3905,32 +791,27 @@
 pzPendingExpRow *pzPendingExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_id;
-    char            *camera;
-    char            *telescope;
-    char            *exp_type;
-    psS32           imfiles;
-
-    exp_id = psMetadataLookupPtr(&status, md, "exp_id");
+
+bool status = false;
+    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
         return false;
     }
-    camera = psMetadataLookupPtr(&status, md, "camera");
+    char* camera = psMetadataLookupPtr(&status, md, "camera");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
         return false;
     }
-    telescope = psMetadataLookupPtr(&status, md, "telescope");
+    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
         return false;
     }
-    exp_type = psMetadataLookupPtr(&status, md, "exp_type");
+    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
         return false;
     }
-    imfiles = psMetadataLookupS32(&status, md, "imfiles");
+    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
@@ -4068,44 +949,41 @@
 bool pzPendingImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bytes", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bytes");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, "32")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "md5sum", PS_DATA_STRING, NULL, "32")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item md5sum");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
@@ -4113,5 +991,5 @@
     }
 
-    status = psDBCreateTable(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -4127,44 +1005,41 @@
 bool pzPendingImfileInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, psS32 bytes, const char *md5sum, const char *class, const char *class_id, const char *uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, bytes)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bytes", PS_DATA_S32, NULL, bytes)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bytes");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, md5sum)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "md5sum", PS_DATA_STRING, NULL, md5sum)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item md5sum");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, class)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
@@ -4172,5 +1047,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -4266,47 +1141,46 @@
 psMetadata *pzPendingImfileMetadataFromObject(const pzPendingImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, object->bytes)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bytes", PS_DATA_S32, NULL, object->bytes)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bytes");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, object->md5sum)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "md5sum", PS_DATA_STRING, NULL, object->md5sum)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item md5sum");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, object->class)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -4315,50 +1189,42 @@
 pzPendingImfileRow *pzPendingImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_id;
-    char            *camera;
-    char            *telescope;
-    psS32           bytes;
-    char            *md5sum;
-    char            *class;
-    char            *class_id;
-    char            *uri;
-
-    exp_id = psMetadataLookupPtr(&status, md, "exp_id");
+
+bool status = false;
+    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
         return false;
     }
-    camera = psMetadataLookupPtr(&status, md, "camera");
+    char* camera = psMetadataLookupPtr(&status, md, "camera");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
         return false;
     }
-    telescope = psMetadataLookupPtr(&status, md, "telescope");
+    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
         return false;
     }
-    bytes = psMetadataLookupS32(&status, md, "bytes");
+    psS32 bytes = psMetadataLookupS32(&status, md, "bytes");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bytes");
         return false;
     }
-    md5sum = psMetadataLookupPtr(&status, md, "md5sum");
+    char* md5sum = psMetadataLookupPtr(&status, md, "md5sum");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item md5sum");
         return false;
     }
-    class = psMetadataLookupPtr(&status, md, "class");
+    char* class = psMetadataLookupPtr(&status, md, "class");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
@@ -4492,34 +1358,31 @@
 bool newExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
@@ -4527,5 +1390,5 @@
     }
 
-    status = psDBCreateTable(dbh, NEWEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, NEWEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -4541,34 +1404,31 @@
 bool newExpInsert(psDB * dbh, const char *exp_tag, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
@@ -4576,5 +1436,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, NEWEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, NEWEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -4670,37 +1530,36 @@
 psMetadata *newExpMetadataFromObject(const newExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -4709,38 +1568,32 @@
 newExpRow *newExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *exp_id;
-    char            *camera;
-    char            *telescope;
-    char            *exp_type;
-    psS32           imfiles;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    exp_id = psMetadataLookupPtr(&status, md, "exp_id");
+    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
         return false;
     }
-    camera = psMetadataLookupPtr(&status, md, "camera");
+    char* camera = psMetadataLookupPtr(&status, md, "camera");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
         return false;
     }
-    telescope = psMetadataLookupPtr(&status, md, "telescope");
+    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
         return false;
     }
-    exp_type = psMetadataLookupPtr(&status, md, "exp_type");
+    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
         return false;
     }
-    imfiles = psMetadataLookupS32(&status, md, "imfiles");
+    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
@@ -4871,24 +1724,21 @@
 bool newImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
@@ -4896,5 +1746,5 @@
     }
 
-    status = psDBCreateTable(dbh, NEWIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, NEWIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -4910,24 +1760,21 @@
 bool newImfileInsert(psDB * dbh, const char *exp_tag, const char *class, const char *class_id, const char *uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, class)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
@@ -4935,5 +1782,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, NEWIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, NEWIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -5029,27 +1876,26 @@
 psMetadata *newImfileMetadataFromObject(const newImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, object->class)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -5058,26 +1904,22 @@
 newImfileRow *newImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *class;
-    char            *class_id;
-    char            *uri;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    class = psMetadataLookupPtr(&status, md, "class");
+    char* class = psMetadataLookupPtr(&status, md, "class");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
@@ -5183,5 +2025,5 @@
 static void rawDetrendExpRowFree(rawDetrendExpRow *object);
 
-rawDetrendExpRow *rawDetrendExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
+rawDetrendExpRow *rawDetrendExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
 {
     rawDetrendExpRow *_object;
@@ -5208,4 +2050,5 @@
     _object->posang = posang;
     _object->object = psStringCopy(object);
+    _object->dateobs = psTimeCopy(dateobs);
 
     return _object;
@@ -5220,104 +2063,110 @@
     psFree(object->filter);
     psFree(object->object);
+    psFree(object->dateobs);
 }
 
 bool rawDetrendExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
         return false;
     }
-
-    status = psDBCreateTable(dbh, RAWDETRENDEXP_TABLE_NAME, md);
+    psTime* dateobs = psTimeFromISO("0001-01-01T00:00:00", PS_TIME_UTC);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
+        psFree(dateobs);
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+    psFree(dateobs);
+
+    bool status = psDBCreateTable(dbh, RAWDETRENDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -5331,102 +2180,104 @@
 }
 
-bool rawDetrendExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+bool rawDetrendExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
+{
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, airmass)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, airmass)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, decl)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, exp_time)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, exp_time)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, alt)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, az)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, ccd_temp)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, ccd_temp)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, posang)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
         return false;
     }
-
-    status = psDBInsertOneRow(dbh, RAWDETRENDEXP_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, RAWDETRENDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -5450,5 +2301,5 @@
 bool rawDetrendExpInsertObject(psDB *dbh, rawDetrendExpRow *object)
 {
-    return rawDetrendExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object);
+    return rawDetrendExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object, object->dateobs);
 }
 
@@ -5522,97 +2373,101 @@
 psMetadata *rawDetrendExpMetadataFromObject(const rawDetrendExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, object->airmass)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, object->airmass)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, object->ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, object->decl)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, object->exp_time)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, object->exp_time)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, object->alt)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, object->az)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, object->ccd_temp)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, object->ccd_temp)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, object->posang)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, object->posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object->object)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object->object)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, object->dateobs)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+
 
     return md;
@@ -5621,116 +2476,103 @@
 rawDetrendExpRow *rawDetrendExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *camera;
-    char            *telescope;
-    char            *exp_type;
-    psS32           imfiles;
-    char            *filter;
-    psF32           airmass;
-    psF64           ra;
-    psF64           decl;
-    psF32           exp_time;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF64           alt;
-    psF64           az;
-    psF32           ccd_temp;
-    psF64           posang;
-    char            *object;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    camera = psMetadataLookupPtr(&status, md, "camera");
+    char* camera = psMetadataLookupPtr(&status, md, "camera");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
         return false;
     }
-    telescope = psMetadataLookupPtr(&status, md, "telescope");
+    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
         return false;
     }
-    exp_type = psMetadataLookupPtr(&status, md, "exp_type");
+    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
         return false;
     }
-    imfiles = psMetadataLookupS32(&status, md, "imfiles");
+    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
         return false;
     }
-    filter = psMetadataLookupPtr(&status, md, "filter");
+    char* filter = psMetadataLookupPtr(&status, md, "filter");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
         return false;
     }
-    airmass = psMetadataLookupF32(&status, md, "airmass");
+    psF32 airmass = psMetadataLookupF32(&status, md, "airmass");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
         return false;
     }
-    ra = psMetadataLookupF64(&status, md, "ra");
+    psF64 ra = psMetadataLookupF64(&status, md, "ra");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
         return false;
     }
-    decl = psMetadataLookupF64(&status, md, "decl");
+    psF64 decl = psMetadataLookupF64(&status, md, "decl");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
         return false;
     }
-    exp_time = psMetadataLookupF32(&status, md, "exp_time");
+    psF32 exp_time = psMetadataLookupF32(&status, md, "exp_time");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    alt = psMetadataLookupF64(&status, md, "alt");
+    psF64 alt = psMetadataLookupF64(&status, md, "alt");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
         return false;
     }
-    az = psMetadataLookupF64(&status, md, "az");
+    psF64 az = psMetadataLookupF64(&status, md, "az");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
         return false;
     }
-    ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
+    psF32 ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
         return false;
     }
-    posang = psMetadataLookupF64(&status, md, "posang");
+    psF64 posang = psMetadataLookupF64(&status, md, "posang");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
         return false;
     }
-    object = psMetadataLookupPtr(&status, md, "object");
+    char* object = psMetadataLookupPtr(&status, md, "object");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
         return false;
     }
-
-    return rawDetrendExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
+    psTime* dateobs = psMetadataLookupPtr(&status, md, "dateobs");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dateobs");
+        return false;
+    }
+
+    return rawDetrendExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object, dateobs);
 }
 psArray *rawDetrendExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -5830,5 +2672,5 @@
 static void rawScienceExpRowFree(rawScienceExpRow *object);
 
-rawScienceExpRow *rawScienceExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
+rawScienceExpRow *rawScienceExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
 {
     rawScienceExpRow *_object;
@@ -5855,4 +2697,5 @@
     _object->posang = posang;
     _object->object = psStringCopy(object);
+    _object->dateobs = psTimeCopy(dateobs);
 
     return _object;
@@ -5867,104 +2710,110 @@
     psFree(object->filter);
     psFree(object->object);
+    psFree(object->dateobs);
 }
 
 bool rawScienceExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
         return false;
     }
-
-    status = psDBCreateTable(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
+    psTime* dateobs = psTimeFromISO("0001-01-01T00:00:00", PS_TIME_UTC);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
+        psFree(dateobs);
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+    psFree(dateobs);
+
+    bool status = psDBCreateTable(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -5978,102 +2827,104 @@
 }
 
-bool rawScienceExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+bool rawScienceExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
+{
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, airmass)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, airmass)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, decl)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, exp_time)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, exp_time)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, alt)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, az)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, ccd_temp)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, ccd_temp)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, posang)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
         return false;
     }
-
-    status = psDBInsertOneRow(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -6097,5 +2948,5 @@
 bool rawScienceExpInsertObject(psDB *dbh, rawScienceExpRow *object)
 {
-    return rawScienceExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object);
+    return rawScienceExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object, object->dateobs);
 }
 
@@ -6169,97 +3020,101 @@
 psMetadata *rawScienceExpMetadataFromObject(const rawScienceExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, object->airmass)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, object->airmass)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, object->ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, object->decl)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, object->exp_time)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, object->exp_time)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, object->alt)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, object->az)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, object->ccd_temp)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, object->ccd_temp)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, object->posang)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, object->posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object->object)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object->object)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, object->dateobs)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+
 
     return md;
@@ -6268,116 +3123,103 @@
 rawScienceExpRow *rawScienceExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *camera;
-    char            *telescope;
-    char            *exp_type;
-    psS32           imfiles;
-    char            *filter;
-    psF32           airmass;
-    psF64           ra;
-    psF64           decl;
-    psF32           exp_time;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF64           alt;
-    psF64           az;
-    psF32           ccd_temp;
-    psF64           posang;
-    char            *object;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    camera = psMetadataLookupPtr(&status, md, "camera");
+    char* camera = psMetadataLookupPtr(&status, md, "camera");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
         return false;
     }
-    telescope = psMetadataLookupPtr(&status, md, "telescope");
+    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
         return false;
     }
-    exp_type = psMetadataLookupPtr(&status, md, "exp_type");
+    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
         return false;
     }
-    imfiles = psMetadataLookupS32(&status, md, "imfiles");
+    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
         return false;
     }
-    filter = psMetadataLookupPtr(&status, md, "filter");
+    char* filter = psMetadataLookupPtr(&status, md, "filter");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
         return false;
     }
-    airmass = psMetadataLookupF32(&status, md, "airmass");
+    psF32 airmass = psMetadataLookupF32(&status, md, "airmass");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
         return false;
     }
-    ra = psMetadataLookupF64(&status, md, "ra");
+    psF64 ra = psMetadataLookupF64(&status, md, "ra");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
         return false;
     }
-    decl = psMetadataLookupF64(&status, md, "decl");
+    psF64 decl = psMetadataLookupF64(&status, md, "decl");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
         return false;
     }
-    exp_time = psMetadataLookupF32(&status, md, "exp_time");
+    psF32 exp_time = psMetadataLookupF32(&status, md, "exp_time");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    alt = psMetadataLookupF64(&status, md, "alt");
+    psF64 alt = psMetadataLookupF64(&status, md, "alt");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
         return false;
     }
-    az = psMetadataLookupF64(&status, md, "az");
+    psF64 az = psMetadataLookupF64(&status, md, "az");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
         return false;
     }
-    ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
+    psF32 ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
         return false;
     }
-    posang = psMetadataLookupF64(&status, md, "posang");
+    psF64 posang = psMetadataLookupF64(&status, md, "posang");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
         return false;
     }
-    object = psMetadataLookupPtr(&status, md, "object");
+    char* object = psMetadataLookupPtr(&status, md, "object");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
         return false;
     }
-
-    return rawScienceExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
+    psTime* dateobs = psMetadataLookupPtr(&status, md, "dateobs");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dateobs");
+        return false;
+    }
+
+    return rawScienceExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object, dateobs);
 }
 psArray *rawScienceExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -6477,5 +3319,5 @@
 static void rawImfileRowFree(rawImfileRow *object);
 
-rawImfileRow *rawImfileRowAlloc(const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
+rawImfileRow *rawImfileRowAlloc(const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
 {
     rawImfileRow    *_object;
@@ -6502,4 +3344,5 @@
     _object->posang = posang;
     _object->object = psStringCopy(object);
+    _object->dateobs = psTimeCopy(dateobs);
 
     return _object;
@@ -6515,104 +3358,110 @@
     psFree(object->filter);
     psFree(object->object);
+    psFree(object->dateobs);
 }
 
 bool rawImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
         return false;
     }
-
-    status = psDBCreateTable(dbh, RAWIMFILE_TABLE_NAME, md);
+    psTime* dateobs = psTimeFromISO("0001-01-01T00:00:00", PS_TIME_UTC);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
+        psFree(dateobs);
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+    psFree(dateobs);
+
+    bool status = psDBCreateTable(dbh, RAWIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -6626,102 +3475,104 @@
 }
 
-bool rawImfileInsert(psDB * dbh, const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
-{
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+bool rawImfileInsert(psDB * dbh, const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
+{
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, class)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, airmass)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, airmass)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, decl)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, exp_time)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, exp_time)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, alt)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, az)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, ccd_temp)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, ccd_temp)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, posang)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
         return false;
     }
-
-    status = psDBInsertOneRow(dbh, RAWIMFILE_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, RAWIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -6745,5 +3596,5 @@
 bool rawImfileInsertObject(psDB *dbh, rawImfileRow *object)
 {
-    return rawImfileInsert(dbh, object->exp_tag, object->class, object->class_id, object->uri, object->exp_type, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object);
+    return rawImfileInsert(dbh, object->exp_tag, object->class, object->class_id, object->uri, object->exp_type, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object, object->dateobs);
 }
 
@@ -6817,97 +3668,101 @@
 psMetadata *rawImfileMetadataFromObject(const rawImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, object->class)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, object->airmass)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, object->airmass)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, object->ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, object->decl)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, object->exp_time)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, object->exp_time)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, object->alt)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, object->az)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, object->ccd_temp)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, object->ccd_temp)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, object->posang)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, object->posang)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object->object)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object->object)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item object");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, object->dateobs)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
+        psFree(md);
+        return false;
+    }
+
 
     return md;
@@ -6916,116 +3771,103 @@
 rawImfileRow *rawImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *class;
-    char            *class_id;
-    char            *uri;
-    char            *exp_type;
-    char            *filter;
-    psF32           airmass;
-    psF64           ra;
-    psF64           decl;
-    psF32           exp_time;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF64           alt;
-    psF64           az;
-    psF32           ccd_temp;
-    psF64           posang;
-    char            *object;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    class = psMetadataLookupPtr(&status, md, "class");
+    char* class = psMetadataLookupPtr(&status, md, "class");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    exp_type = psMetadataLookupPtr(&status, md, "exp_type");
+    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
         return false;
     }
-    filter = psMetadataLookupPtr(&status, md, "filter");
+    char* filter = psMetadataLookupPtr(&status, md, "filter");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
         return false;
     }
-    airmass = psMetadataLookupF32(&status, md, "airmass");
+    psF32 airmass = psMetadataLookupF32(&status, md, "airmass");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
         return false;
     }
-    ra = psMetadataLookupF64(&status, md, "ra");
+    psF64 ra = psMetadataLookupF64(&status, md, "ra");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
         return false;
     }
-    decl = psMetadataLookupF64(&status, md, "decl");
+    psF64 decl = psMetadataLookupF64(&status, md, "decl");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
         return false;
     }
-    exp_time = psMetadataLookupF32(&status, md, "exp_time");
+    psF32 exp_time = psMetadataLookupF32(&status, md, "exp_time");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    alt = psMetadataLookupF64(&status, md, "alt");
+    psF64 alt = psMetadataLookupF64(&status, md, "alt");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
         return false;
     }
-    az = psMetadataLookupF64(&status, md, "az");
+    psF64 az = psMetadataLookupF64(&status, md, "az");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
         return false;
     }
-    ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
+    psF32 ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
         return false;
     }
-    posang = psMetadataLookupF64(&status, md, "posang");
+    psF64 posang = psMetadataLookupF64(&status, md, "posang");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
         return false;
     }
-    object = psMetadataLookupPtr(&status, md, "object");
+    char* object = psMetadataLookupPtr(&status, md, "object");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
         return false;
     }
-
-    return rawImfileRowAlloc(exp_tag, class, class_id, uri, exp_type, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
+    psTime* dateobs = psMetadataLookupPtr(&status, md, "dateobs");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dateobs");
+        return false;
+    }
+
+    return rawImfileRowAlloc(exp_tag, class, class_id, uri, exp_type, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object, dateobs);
 }
 psArray *rawImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -7147,19 +3989,16 @@
 bool p1PendingExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
@@ -7167,5 +4006,5 @@
     }
 
-    status = psDBCreateTable(dbh, P1PENDINGEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P1PENDINGEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -7181,19 +4020,16 @@
 bool p1PendingExpInsert(psDB * dbh, const char *exp_tag, const char *recipe, psS32 p1_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
@@ -7201,5 +4037,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P1PENDINGEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P1PENDINGEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -7295,22 +4131,21 @@
 psMetadata *p1PendingExpMetadataFromObject(const p1PendingExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -7319,20 +4154,17 @@
 p1PendingExpRow *p1PendingExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *recipe;
-    psS32           p1_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    p1_version = psMetadataLookupS32(&status, md, "p1_version");
+    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
@@ -7461,24 +4293,21 @@
 bool p2PendingExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -7486,5 +4315,5 @@
     }
 
-    status = psDBCreateTable(dbh, P2PENDINGEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P2PENDINGEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -7500,24 +4329,21 @@
 bool p2PendingExpInsert(psDB * dbh, const char *exp_tag, const char *recipe, psS32 p1_version, psS32 p2_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -7525,5 +4351,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P2PENDINGEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P2PENDINGEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -7619,27 +4445,26 @@
 psMetadata *p2PendingExpMetadataFromObject(const p2PendingExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -7648,26 +4473,22 @@
 p2PendingExpRow *p2PendingExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *recipe;
-    psS32           p1_version;
-    psS32           p2_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    p1_version = psMetadataLookupS32(&status, md, "p1_version");
+    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
         return false;
     }
-    p2_version = psMetadataLookupS32(&status, md, "p2_version");
+    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
@@ -7800,34 +4621,31 @@
 bool p2PendingImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -7835,5 +4653,5 @@
     }
 
-    status = psDBCreateTable(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -7849,34 +4667,31 @@
 bool p2PendingImfileInsert(psDB * dbh, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psS32 p1_version, psS32 p2_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -7884,5 +4699,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -7978,37 +4793,36 @@
 psMetadata *p2PendingImfileMetadataFromObject(const p2PendingImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -8017,38 +4831,32 @@
 p2PendingImfileRow *p2PendingImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *class_id;
-    char            *uri;
-    char            *recipe;
-    psS32           p1_version;
-    psS32           p2_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    p1_version = psMetadataLookupS32(&status, md, "p1_version");
+    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
         return false;
     }
-    p2_version = psMetadataLookupS32(&status, md, "p2_version");
+    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
@@ -8175,19 +4983,16 @@
 bool p2ProcessedExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -8195,5 +5000,5 @@
     }
 
-    status = psDBCreateTable(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -8209,19 +5014,16 @@
 bool p2ProcessedExpInsert(psDB * dbh, const char *exp_tag, psS32 p1_version, psS32 p2_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -8229,5 +5031,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -8323,22 +5125,21 @@
 psMetadata *p2ProcessedExpMetadataFromObject(const p2ProcessedExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -8347,20 +5148,17 @@
 p2ProcessedExpRow *p2ProcessedExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    psS32           p1_version;
-    psS32           p2_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    p1_version = psMetadataLookupS32(&status, md, "p1_version");
+    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
         return false;
     }
-    p2_version = psMetadataLookupS32(&status, md, "p2_version");
+    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
@@ -8500,59 +5298,56 @@
 bool p2ProcessedImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -8560,5 +5355,5 @@
     }
 
-    status = psDBCreateTable(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -8574,59 +5369,56 @@
 bool p2ProcessedImfileInsert(psDB * dbh, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, psS32 p1_version, psS32 p2_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
@@ -8634,5 +5426,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -8728,62 +5520,61 @@
 psMetadata *p2ProcessedImfileMetadataFromObject(const p2ProcessedImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -8792,68 +5583,57 @@
 p2ProcessedImfileRow *p2ProcessedImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *class_id;
-    char            *uri;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-    psS32           p1_version;
-    psS32           p2_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
         return false;
     }
-    p1_version = psMetadataLookupS32(&status, md, "p1_version");
+    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
         return false;
     }
-    p2_version = psMetadataLookupS32(&status, md, "p2_version");
+    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
@@ -8980,19 +5760,16 @@
 bool p3PendingExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
         psFree(md);
@@ -9000,5 +5777,5 @@
     }
 
-    status = psDBCreateTable(dbh, P3PENDINGEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P3PENDINGEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -9014,19 +5791,16 @@
 bool p3PendingExpInsert(psDB * dbh, const char *exp_tag, psS32 p2_version, psS32 p3_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, p3_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
         psFree(md);
@@ -9034,5 +5808,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P3PENDINGEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P3PENDINGEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -9128,22 +5902,21 @@
 psMetadata *p3PendingExpMetadataFromObject(const p3PendingExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, object->p3_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, object->p3_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -9152,20 +5925,17 @@
 p3PendingExpRow *p3PendingExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    psS32           p2_version;
-    psS32           p3_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    p2_version = psMetadataLookupS32(&status, md, "p2_version");
+    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
         return false;
     }
-    p3_version = psMetadataLookupS32(&status, md, "p3_version");
+    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
@@ -9308,79 +6078,76 @@
 bool p3ProcessedExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_ra", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_dec", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_dec", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_dec");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nastro", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "nastro", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item nastro");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_mean", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
         psFree(md);
@@ -9388,5 +6155,5 @@
     }
 
-    status = psDBCreateTable(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -9402,79 +6169,76 @@
 bool p3ProcessedExpInsert(psDB * dbh, const char *exp_tag, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *b1_uri, const char *b2_uri, psF32 zp_mean, psF32 zp_stdev, psS32 p2_version, psS32 p3_version)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_ra", 0, NULL, sigma_ra)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, sigma_ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_dec", 0, NULL, sigma_dec)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_dec", PS_DATA_F32, NULL, sigma_dec)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_dec");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nastro", 0, NULL, nastro)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "nastro", PS_DATA_S32, NULL, nastro)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item nastro");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_mean", 0, NULL, zp_mean)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, zp_mean)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_stdev", 0, NULL, zp_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, zp_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, p3_version)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
         psFree(md);
@@ -9482,5 +6246,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -9576,82 +6340,81 @@
 psMetadata *p3ProcessedExpMetadataFromObject(const p3ProcessedExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_ra", 0, NULL, object->sigma_ra)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, object->sigma_ra)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_dec", 0, NULL, object->sigma_dec)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_dec", PS_DATA_F32, NULL, object->sigma_dec)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_dec");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "nastro", 0, NULL, object->nastro)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "nastro", PS_DATA_S32, NULL, object->nastro)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item nastro");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_mean", 0, NULL, object->zp_mean)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, object->zp_mean)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_stdev", 0, NULL, object->zp_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, object->zp_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, object->p3_version)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, object->p3_version)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -9660,92 +6423,77 @@
 p3ProcessedExpRow *p3ProcessedExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    char            *exp_tag;
-    char            *uri;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF32           sigma_ra;
-    psF32           sigma_dec;
-    psS32           nastro;
-    char            *b1_uri;
-    char            *b2_uri;
-    psF32           zp_mean;
-    psF32           zp_stdev;
-    psS32           p2_version;
-    psS32           p3_version;
-
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+
+bool status = false;
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    sigma_ra = psMetadataLookupF32(&status, md, "sigma_ra");
+    psF32 sigma_ra = psMetadataLookupF32(&status, md, "sigma_ra");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_ra");
         return false;
     }
-    sigma_dec = psMetadataLookupF32(&status, md, "sigma_dec");
+    psF32 sigma_dec = psMetadataLookupF32(&status, md, "sigma_dec");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_dec");
         return false;
     }
-    nastro = psMetadataLookupS32(&status, md, "nastro");
+    psS32 nastro = psMetadataLookupS32(&status, md, "nastro");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nastro");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
         return false;
     }
-    zp_mean = psMetadataLookupF32(&status, md, "zp_mean");
+    psF32 zp_mean = psMetadataLookupF32(&status, md, "zp_mean");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_mean");
         return false;
     }
-    zp_stdev = psMetadataLookupF32(&status, md, "zp_stdev");
+    psF32 zp_stdev = psMetadataLookupF32(&status, md, "zp_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_stdev");
         return false;
     }
-    p2_version = psMetadataLookupS32(&status, md, "p2_version");
+    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
         return false;
     }
-    p3_version = psMetadataLookupS32(&status, md, "p3_version");
+    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
@@ -9874,24 +6622,21 @@
 bool detRunCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key AUTO_INCREMENT", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key AUTO_INCREMENT", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "det_type", 0, "Key", "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_type", PS_DATA_STRING, "Key", "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, "Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, "Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item state");
         psFree(md);
@@ -9899,5 +6644,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETRUN_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETRUN_TABLE_NAME, md);
 
     psFree(md);
@@ -9913,24 +6658,21 @@
 bool detRunInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *det_type, const char *state)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "det_type", 0, NULL, det_type)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_type", PS_DATA_STRING, NULL, det_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_type");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, state)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item state");
         psFree(md);
@@ -9938,5 +6680,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETRUN_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETRUN_TABLE_NAME, md);
     psFree(md);
 
@@ -10032,27 +6774,26 @@
 psMetadata *detRunMetadataFromObject(const detRunRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "det_type", 0, NULL, object->det_type)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_type", PS_DATA_STRING, NULL, object->det_type)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_type");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, object->state)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item state");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -10061,26 +6802,22 @@
 detRunRow *detRunObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *det_type;
-    char            *state;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    det_type = psMetadataLookupPtr(&status, md, "det_type");
+    char* det_type = psMetadataLookupPtr(&status, md, "det_type");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_type");
         return false;
     }
-    state = psMetadataLookupPtr(&status, md, "state");
+    char* state = psMetadataLookupPtr(&status, md, "state");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
@@ -10208,24 +6945,21 @@
 bool detInputExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, false)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item include");
         psFree(md);
@@ -10233,5 +6967,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETINPUTEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETINPUTEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -10247,19 +6981,16 @@
 bool detInputExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_tag, bool include)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
@@ -10272,5 +7003,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETINPUTEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETINPUTEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -10366,27 +7097,26 @@
 psMetadata *detInputExpMetadataFromObject(const detInputExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
+        return false;
     }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, object->include)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item include");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -10395,26 +7125,22 @@
 detInputExpRow *detInputExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *exp_tag;
-    bool            include;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    include = psMetadataLookupBool(&status, md, "include");
+    bool include = psMetadataLookupBool(&status, md, "include");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item include");
@@ -10553,54 +7279,51 @@
 bool detProcessedImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -10608,5 +7331,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -10622,54 +7345,51 @@
 bool detProcessedImfileInsert(psDB * dbh, psS32 det_id, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -10677,5 +7397,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -10771,57 +7491,56 @@
 psMetadata *detProcessedImfileMetadataFromObject(const detProcessedImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -10830,62 +7549,52 @@
 detProcessedImfileRow *detProcessedImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    char            *exp_tag;
-    char            *class_id;
-    char            *uri;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
@@ -11020,44 +7729,41 @@
 bool detProcessedExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -11065,5 +7771,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -11079,44 +7785,41 @@
 bool detProcessedExpInsert(psDB * dbh, psS32 det_id, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -11124,5 +7827,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -11218,47 +7921,46 @@
 psMetadata *detProcessedExpMetadataFromObject(const detProcessedExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -11267,50 +7969,42 @@
 detProcessedExpRow *detProcessedExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    char            *exp_tag;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
@@ -11444,44 +8138,41 @@
 bool detStackedImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
@@ -11489,5 +8180,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -11503,44 +8194,41 @@
 bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
@@ -11548,5 +8236,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -11642,47 +8330,46 @@
 psMetadata *detStackedImfileMetadataFromObject(const detStackedImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -11691,50 +8378,42 @@
 detStackedImfileRow *detStackedImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *class_id;
-    char            *uri;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
@@ -11862,24 +8541,21 @@
 bool detNormalizedStatImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "norm", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "norm", PS_DATA_F32, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item norm");
         psFree(md);
@@ -11887,5 +8563,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -11901,24 +8577,21 @@
 bool detNormalizedStatImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, psF32 norm)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "norm", 0, NULL, norm)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "norm", PS_DATA_F32, NULL, norm)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item norm");
         psFree(md);
@@ -11926,5 +8599,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -12020,27 +8693,26 @@
 psMetadata *detNormalizedStatImfileMetadataFromObject(const detNormalizedStatImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF32(md, PS_LIST_TAIL, "norm", 0, NULL, object->norm)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "norm", PS_DATA_F32, NULL, object->norm)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item norm");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -12049,26 +8721,22 @@
 detNormalizedStatImfileRow *detNormalizedStatImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *class_id;
-    psF32           norm;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    norm = psMetadataLookupF32(&status, md, "norm");
+    psF32 norm = psMetadataLookupF32(&status, md, "norm");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item norm");
@@ -12204,49 +8872,46 @@
 bool detNormalizedImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -12254,5 +8919,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -12268,49 +8933,46 @@
 bool detNormalizedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -12318,5 +8980,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -12412,52 +9074,51 @@
 psMetadata *detNormalizedImfileMetadataFromObject(const detNormalizedImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -12466,56 +9127,47 @@
 detNormalizedImfileRow *detNormalizedImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *class_id;
-    char            *uri;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
@@ -12649,44 +9301,41 @@
 bool detNormalizedExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -12694,5 +9343,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -12708,44 +9357,41 @@
 bool detNormalizedExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -12753,5 +9399,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -12847,47 +9493,46 @@
 psMetadata *detNormalizedExpMetadataFromObject(const detNormalizedExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -12896,50 +9541,42 @@
 detNormalizedExpRow *detNormalizedExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
@@ -13066,19 +9703,16 @@
 bool detMasterFrameCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "comment", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item comment");
         psFree(md);
@@ -13086,5 +9720,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETMASTERFRAME_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETMASTERFRAME_TABLE_NAME, md);
 
     psFree(md);
@@ -13100,19 +9734,16 @@
 bool detMasterFrameInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *comment)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, comment)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "comment", PS_DATA_STRING, NULL, comment)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item comment");
         psFree(md);
@@ -13120,5 +9751,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETMASTERFRAME_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETMASTERFRAME_TABLE_NAME, md);
     psFree(md);
 
@@ -13214,22 +9845,21 @@
 psMetadata *detMasterFrameMetadataFromObject(const detMasterFrameRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, object->comment)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "comment", PS_DATA_STRING, NULL, object->comment)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item comment");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -13238,20 +9868,17 @@
 detMasterFrameRow *detMasterFrameObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *comment;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    comment = psMetadataLookupPtr(&status, md, "comment");
+    char* comment = psMetadataLookupPtr(&status, md, "comment");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item comment");
@@ -13381,24 +10008,21 @@
 bool detMasterImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
@@ -13406,5 +10030,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETMASTERIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETMASTERIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -13420,24 +10044,21 @@
 bool detMasterImfileInsert(psDB * dbh, psS32 det_id, const char *class_id, const char *uri, const char *recipe)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
@@ -13445,5 +10066,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETMASTERIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETMASTERIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -13539,27 +10160,26 @@
 psMetadata *detMasterImfileMetadataFromObject(const detMasterImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -13568,26 +10188,22 @@
 detMasterImfileRow *detMasterImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    char            *class_id;
-    char            *uri;
-    char            *recipe;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
@@ -13727,59 +10343,56 @@
 bool detResidImfileCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -13787,5 +10400,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETRESIDIMFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETRESIDIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -13801,59 +10414,56 @@
 bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -13861,5 +10471,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETRESIDIMFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETRESIDIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -13955,62 +10565,61 @@
 psMetadata *detResidImfileMetadataFromObject(const detResidImfileRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -14019,68 +10628,57 @@
 detResidImfileRow *detResidImfileObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *exp_tag;
-    char            *class_id;
-    char            *uri;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    class_id = psMetadataLookupPtr(&status, md, "class_id");
+    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
         return false;
     }
-    uri = psMetadataLookupPtr(&status, md, "uri");
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
@@ -14217,54 +10815,51 @@
 bool detResidExpCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
         psFree(md);
@@ -14272,5 +10867,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETRESIDEXP_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETRESIDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -14286,49 +10881,46 @@
 bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, bool accept)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
@@ -14341,5 +10933,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETRESIDEXP_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETRESIDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -14435,57 +11027,56 @@
 psMetadata *detResidExpMetadataFromObject(const detResidExpRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
         psFree(md);
-        return NULL;
+        return false;
     }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -14494,62 +11085,52 @@
 detResidExpRow *detResidExpObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    char            *exp_tag;
-    char            *recipe;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            *b1_uri;
-    char            *b2_uri;
-    bool            accept;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
+    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
+    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
+    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
         return false;
     }
-    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
+    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
         return false;
     }
-    accept = psMetadataLookupBool(&status, md, "accept");
+    bool accept = psMetadataLookupBool(&status, md, "accept");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
@@ -14678,34 +11259,31 @@
 bool detRunSummaryCreateTable(psDB *dbh)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
         psFree(md);
@@ -14713,5 +11291,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETRUNSUMMARY_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, DETRUNSUMMARY_TABLE_NAME, md);
 
     psFree(md);
@@ -14727,29 +11305,26 @@
 bool detRunSummaryInsert(psDB * dbh, psS32 det_id, psS32 iteration, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool accept)
 {
-    psMetadata      *md;
-    bool            status;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
         return false;
     }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
@@ -14762,5 +11337,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETRUNSUMMARY_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, DETRUNSUMMARY_TABLE_NAME, md);
     psFree(md);
 
@@ -14856,37 +11431,36 @@
 psMetadata *detRunSummaryMetadataFromObject(const detRunSummaryRow *object)
 {
-    psMetadata      *md;
-
-    md = psMetadataAlloc();
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+    psMetadata *md = psMetadataAlloc();
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
         psFree(md);
-        return NULL;
-    }
-    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
         psFree(md);
-        return NULL;
+        return false;
     }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
         psFree(md);
-        return NULL;
-    }
+        return false;
+    }
+
 
     return md;
@@ -14895,38 +11469,32 @@
 detRunSummaryRow *detRunSummaryObjectFromMetadata(psMetadata *md)
 {
-    bool            status;
-    psS32           det_id;
-    psS32           iteration;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    bool            accept;
-
-    det_id = psMetadataLookupS32(&status, md, "det_id");
+
+bool status = false;
+    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
         return false;
     }
-    iteration = psMetadataLookupS32(&status, md, "iteration");
+    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
         return false;
     }
-    bg = psMetadataLookupF64(&status, md, "bg");
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
         return false;
     }
-    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
+    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
         return false;
     }
-    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
+    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
         return false;
     }
-    accept = psMetadataLookupBool(&status, md, "accept");
+    bool accept = psMetadataLookupBool(&status, md, "accept");
     if (!status) {
         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
