Index: /trunk/dbconfig/config.md
===================================================================
--- /trunk/dbconfig/config.md	(revision 11719)
+++ /trunk/dbconfig/config.md	(revision 11720)
@@ -2,4 +2,4 @@
     pkg_name        STR     ippdb
     pkg_namespace   STR     ippdb
-    pkg_version     STR     1.1.2
+    pkg_version     STR     1.1.3
 END
Index: /trunk/dbconfig/p4.md
===================================================================
--- /trunk/dbconfig/p4.md	(revision 11719)
+++ /trunk/dbconfig/p4.md	(revision 11720)
@@ -1,3 +1,3 @@
-# $Id: p4.md,v 1.9 2007-02-09 00:07:38 jhoblitt Exp $
+# $Id: p4.md,v 1.10 2007-02-09 01:17:50 jhoblitt Exp $
 
 #
@@ -11,8 +11,8 @@
 p4Run METADATA
     p4a_id      S32         0       # Primary Key AUTO_INCREMENT
+    mode        STR         64      # Key
     state       STR         64      # Key
-    mode        STR         64      # Key
     workdir     STR         255
-    magic       BOOL        f       # Primary Key
+    registered  TAI         NULL
 END
 
@@ -27,4 +27,5 @@
     p3_version  S32         0       # Primary Key
 # if magic is T then look for the exp_tag in the magic output tables
+    magiced     BOOL        f       # Primary Key
 END
 
Index: /trunk/ippdb/Makefile.am
===================================================================
--- /trunk/ippdb/Makefile.am	(revision 11719)
+++ /trunk/ippdb/Makefile.am	(revision 11720)
@@ -41,12 +41,9 @@
     $(top_builddir)/docs/man/man3/detResidExpRow.3 \
     $(top_builddir)/docs/man/man3/detRunSummaryRow.3 \
-    $(top_builddir)/docs/man/man3/p4aRunRow.3 \
-    $(top_builddir)/docs/man/man3/p4aInputExpRow.3 \
-    $(top_builddir)/docs/man/man3/p4aScfileRow.3 \
-    $(top_builddir)/docs/man/man3/p4bRunRow.3 \
-    $(top_builddir)/docs/man/man3/p4bInputScfileRow.3 \
-    $(top_builddir)/docs/man/man3/p4bDiffScfileRow.3 \
-    $(top_builddir)/docs/man/man3/p4cRunRow.3 \
-    $(top_builddir)/docs/man/man3/p4cInputExpRow.3 \
+    $(top_builddir)/docs/man/man3/p4RunRow.3 \
+    $(top_builddir)/docs/man/man3/p4InputExpRow.3 \
+    $(top_builddir)/docs/man/man3/p4ScfileRow.3 \
+    $(top_builddir)/docs/man/man3/p4InputScfileRow.3 \
+    $(top_builddir)/docs/man/man3/p4DiffScfileRow.3 \
     $(top_builddir)/docs/man/man3/p4MagicMaskImfileRow.3 \
     $(top_builddir)/docs/man/man3/skyCellRow.3 \
@@ -54,5 +51,5 @@
 
 
-docs/man/man3/ippdb.3 docs/man/man3/expTagCounterRow.3 docs/man/man3/summitExpRow.3 docs/man/man3/summitImfileRow.3 docs/man/man3/pzPendingExpRow.3 docs/man/man3/pzPendingImfileRow.3 docs/man/man3/pzDoneExpRow.3 docs/man/man3/pzDoneImfileRow.3 docs/man/man3/newExpRow.3 docs/man/man3/newImfileRow.3 docs/man/man3/rawExpRow.3 docs/man/man3/rawImfileRow.3 docs/man/man3/p1PendingExpRow.3 docs/man/man3/p2PendingExpRow.3 docs/man/man3/p2PendingImfileRow.3 docs/man/man3/p2ProcessedExpRow.3 docs/man/man3/p2MaskRow.3 docs/man/man3/p2ProcessedImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/p3ProcessedExpRow.3 docs/man/man3/p3MaskRow.3 docs/man/man3/detRunRow.3 docs/man/man3/detInputExpRow.3 docs/man/man3/detProcessedImfileRow.3 docs/man/man3/detProcessedExpRow.3 docs/man/man3/detStackedImfileRow.3 docs/man/man3/detNormalizedStatImfileRow.3 docs/man/man3/detNormalizedImfileRow.3 docs/man/man3/detNormalizedExpRow.3 docs/man/man3/detResidImfileRow.3 docs/man/man3/detResidExpRow.3 docs/man/man3/detRunSummaryRow.3 docs/man/man3/p4aRunRow.3 docs/man/man3/p4aInputExpRow.3 docs/man/man3/p4aScfileRow.3 docs/man/man3/p4bRunRow.3 docs/man/man3/p4bInputScfileRow.3 docs/man/man3/p4bDiffScfileRow.3 docs/man/man3/p4cRunRow.3 docs/man/man3/p4cInputExpRow.3 docs/man/man3/p4MagicMaskImfileRow.3 docs/man/man3/skyCellRow.3 docs/man/man3/skyCellMapRow.3:
+docs/man/man3/ippdb.3 docs/man/man3/expTagCounterRow.3 docs/man/man3/summitExpRow.3 docs/man/man3/summitImfileRow.3 docs/man/man3/pzPendingExpRow.3 docs/man/man3/pzPendingImfileRow.3 docs/man/man3/pzDoneExpRow.3 docs/man/man3/pzDoneImfileRow.3 docs/man/man3/newExpRow.3 docs/man/man3/newImfileRow.3 docs/man/man3/rawExpRow.3 docs/man/man3/rawImfileRow.3 docs/man/man3/p1PendingExpRow.3 docs/man/man3/p2PendingExpRow.3 docs/man/man3/p2PendingImfileRow.3 docs/man/man3/p2ProcessedExpRow.3 docs/man/man3/p2MaskRow.3 docs/man/man3/p2ProcessedImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/p3ProcessedExpRow.3 docs/man/man3/p3MaskRow.3 docs/man/man3/detRunRow.3 docs/man/man3/detInputExpRow.3 docs/man/man3/detProcessedImfileRow.3 docs/man/man3/detProcessedExpRow.3 docs/man/man3/detStackedImfileRow.3 docs/man/man3/detNormalizedStatImfileRow.3 docs/man/man3/detNormalizedImfileRow.3 docs/man/man3/detNormalizedExpRow.3 docs/man/man3/detResidImfileRow.3 docs/man/man3/detResidExpRow.3 docs/man/man3/detRunSummaryRow.3 docs/man/man3/p4RunRow.3 docs/man/man3/p4InputExpRow.3 docs/man/man3/p4ScfileRow.3 docs/man/man3/p4InputScfileRow.3 docs/man/man3/p4DiffScfileRow.3 docs/man/man3/p4MagicMaskImfileRow.3 docs/man/man3/skyCellRow.3 docs/man/man3/skyCellMapRow.3:
 	$(DOXYGEN)
 
Index: /trunk/ippdb/configure.ac
===================================================================
--- /trunk/ippdb/configure.ac	(revision 11719)
+++ /trunk/ippdb/configure.ac	(revision 11720)
@@ -1,4 +1,4 @@
 dnl
-dnl This file was generated by glueforge 0.36
+dnl This file was generated by glueforge 1.00
 dnl
 dnl Do NOT directly edit this file.
@@ -7,5 +7,5 @@
 AC_PREREQ(2.59)
 
-AC_INIT([ippdb], [1.1.1], [pan-starrs.ifa.hawaii.edu])
+AC_INIT([ippdb], [1.1.3], [pan-starrs.ifa.hawaii.edu])
 AC_CONFIG_SRCDIR([ippdb.pc.in])
 
Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 11719)
+++ /trunk/ippdb/src/ippdb.c	(revision 11720)
@@ -20,5 +20,5 @@
 /*
  *
- * This file was generated by glueforge 0.36
+ * This file was generated by glueforge 1.00
  *
  * Do NOT directly edit this file.
@@ -62,12 +62,9 @@
 #define DETRESIDEXP_TABLE_NAME "detResidExp"
 #define DETRUNSUMMARY_TABLE_NAME "detRunSummary"
-#define P4ARUN_TABLE_NAME "p4aRun"
-#define P4AINPUTEXP_TABLE_NAME "p4aInputExp"
-#define P4ASCFILE_TABLE_NAME "p4aScfile"
-#define P4BRUN_TABLE_NAME "p4bRun"
-#define P4BINPUTSCFILE_TABLE_NAME "p4bInputScfile"
-#define P4BDIFFSCFILE_TABLE_NAME "p4bDiffScfile"
-#define P4CRUN_TABLE_NAME "p4cRun"
-#define P4CINPUTEXP_TABLE_NAME "p4cInputExp"
+#define P4RUN_TABLE_NAME "p4Run"
+#define P4INPUTEXP_TABLE_NAME "p4InputExp"
+#define P4SCFILE_TABLE_NAME "p4Scfile"
+#define P4INPUTSCFILE_TABLE_NAME "p4InputScfile"
+#define P4DIFFSCFILE_TABLE_NAME "p4DiffScfile"
 #define P4MAGICMASKIMFILE_TABLE_NAME "p4MagicMaskImfile"
 #define SKYCELL_TABLE_NAME "skyCell"
@@ -13463,28 +13460,31 @@
     return true;
 }
-static void p4aRunRowFree(p4aRunRow *object);
-
-p4aRunRow *p4aRunRowAlloc(psS32 p4a_id, const char *state, const char *workdir, bool magic)
-{
-    p4aRunRow       *_object;
-
-    _object = psAlloc(sizeof(p4aRunRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4aRunRowFree);
+static void p4RunRowFree(p4RunRow *object);
+
+p4RunRow *p4RunRowAlloc(psS32 p4a_id, const char *mode, const char *state, const char *workdir, psTime* registered)
+{
+    p4RunRow        *_object;
+
+    _object = psAlloc(sizeof(p4RunRow));
+    psMemSetDeallocator(_object, (psFreeFunc)p4RunRowFree);
 
     _object->p4a_id = p4a_id;
+    _object->mode = psStringCopy(mode);
     _object->state = psStringCopy(state);
     _object->workdir = psStringCopy(workdir);
-    _object->magic = magic;
+    _object->registered = psTimeCopy(registered);
 
     return _object;
 }
 
-static void p4aRunRowFree(p4aRunRow *object)
-{
+static void p4RunRowFree(p4RunRow *object)
+{
+    psFree(object->mode);
     psFree(object->state);
     psFree(object->workdir);
-}
-
-bool p4aRunCreateTable(psDB *dbh)
+    psFree(object->registered);
+}
+
+bool p4RunCreateTable(psDB *dbh)
 {
     psMetadata *md = psMetadataAlloc();
@@ -13494,4 +13494,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "mode", PS_DATA_STRING, "Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item mode");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, "Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item state");
@@ -13504,11 +13509,11 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBCreateTable(dbh, P4ARUN_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "registered", PS_DATA_TIME, NULL, NULL)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item registered");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBCreateTable(dbh, P4RUN_TABLE_NAME, md);
 
     psFree(md);
@@ -13517,10 +13522,10 @@
 }
 
-bool p4aRunDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4ARUN_TABLE_NAME);
-}
-
-bool p4aRunInsert(psDB * dbh, psS32 p4a_id, const char *state, const char *workdir, bool magic)
+bool p4RunDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, P4RUN_TABLE_NAME);
+}
+
+bool p4RunInsert(psDB * dbh, psS32 p4a_id, const char *mode, const char *state, const char *workdir, psTime* registered)
 {
     psMetadata *md = psMetadataAlloc();
@@ -13530,4 +13535,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "mode", PS_DATA_STRING, NULL, mode)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item mode");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item state");
@@ -13540,11 +13550,11 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, magic)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBInsertOneRow(dbh, P4ARUN_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "registered", PS_DATA_TIME, NULL, registered)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item registered");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, P4RUN_TABLE_NAME, md);
     psFree(md);
 
@@ -13552,11 +13562,11 @@
 }
 
-long long p4aRunDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long p4RunDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, P4ARUN_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, P4RUN_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aRun");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4Run");
         return count;
 
@@ -13566,13 +13576,13 @@
     return deleted;
 }
-bool p4aRunInsertObject(psDB *dbh, p4aRunRow *object)
-{
-    return p4aRunInsert(dbh, object->p4a_id, object->state, object->workdir, object->magic);
-}
-
-bool p4aRunInsertObjects(psDB *dbh, psArray *objects)
+bool p4RunInsertObject(psDB *dbh, p4RunRow *object)
+{
+    return p4RunInsert(dbh, object->p4a_id, object->mode, object->state, object->workdir, object->registered);
+}
+
+bool p4RunInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4aRunInsertObject(dbh, objects->data[i])) {
+        if (!p4RunInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -13582,11 +13592,11 @@
 }
 
-bool p4aRunInsertFits(psDB *dbh, const psFits *fits)
+bool p4RunInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  P4ARUN_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4ARUN_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4ARUN_TABLE_NAME);
+    // move to (the first?) extension named  P4RUN_TABLE_NAME
+    if (!psFitsMoveExtName(fits, P4RUN_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4RUN_TABLE_NAME);
         return false;
     }
@@ -13606,5 +13616,5 @@
     }
 
-    if (!psDBInsertRows(dbh, P4ARUN_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, P4RUN_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -13617,9 +13627,9 @@
 }
 
-bool p4aRunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool p4RunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
 
-    rowSet = psDBSelectRows(dbh, P4ARUN_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4RUN_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -13627,5 +13637,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4ARUN_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, P4RUN_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -13638,5 +13648,5 @@
 }
 
-psMetadata *p4aRunMetadataFromObject(const p4aRunRow *object)
+psMetadata *p4RunMetadataFromObject(const p4RunRow *object)
 {
     psMetadata *md = psMetadataAlloc();
@@ -13646,4 +13656,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "mode", PS_DATA_STRING, NULL, object->mode)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item mode");
+        psFree(md);
+        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");
@@ -13656,6 +13671,6 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, object->magic)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "registered", PS_DATA_TIME, NULL, object->registered)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item registered");
         psFree(md);
         return false;
@@ -13666,5 +13681,5 @@
 }
 
-p4aRunRow *p4aRunObjectFromMetadata(psMetadata *md)
+p4RunRow *p4RunObjectFromMetadata(psMetadata *md)
 {
 
@@ -13675,4 +13690,9 @@
         return false;
     }
+    char* mode = psMetadataLookupPtr(&status, md, "mode");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item mode");
+        return false;
+    }
     char* state = psMetadataLookupPtr(&status, md, "state");
     if (!status) {
@@ -13685,13 +13705,13 @@
         return false;
     }
-    bool magic = psMetadataLookupBool(&status, md, "magic");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item magic");
-        return false;
-    }
-
-    return p4aRunRowAlloc(p4a_id, state, workdir, magic);
-}
-psArray *p4aRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    psTime* registered = psMetadataLookupPtr(&status, md, "registered");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item registered");
+        return false;
+    }
+
+    return p4RunRowAlloc(p4a_id, mode, state, workdir, registered);
+}
+psArray *p4RunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -13699,5 +13719,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, P4ARUN_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4RUN_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -13709,5 +13729,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        p4aRunRow *object = p4aRunObjectFromMetadata(rowSet->data[i]);
+        p4RunRow *object = p4RunObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -13718,11 +13738,11 @@
     return returnSet;
 }
-bool p4aRunDeleteObject(psDB *dbh, const p4aRunRow *object)
-{
-    psMetadata *where = p4aRunMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4ARUN_TABLE_NAME, where, 0);
+bool p4RunDeleteObject(psDB *dbh, const p4RunRow *object)
+{
+    psMetadata *where = p4RunMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, P4RUN_TABLE_NAME, where, 0);
     psFree(where);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aRun");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4Run");
         return false;
     }
@@ -13730,21 +13750,21 @@
         // 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, "p4aRunRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4aRunDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "p4RunRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long p4RunDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        p4aRunRow *object = objects->data[i];
-        psMetadata *where = p4aRunMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4ARUN_TABLE_NAME, where, limit);
+        p4RunRow *object = objects->data[i];
+        psMetadata *where = p4RunMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, P4RUN_TABLE_NAME, where, limit);
         psFree(where);
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aRun");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4Run");
             return count;
         }
@@ -13755,5 +13775,5 @@
     return deleted;
 }
-bool p4aRunPrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool p4RunPrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -13761,9 +13781,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = p4aRunMetadataFromObject(objects->data[i]);
+        psMetadata *md = p4RunMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            P4ARUN_TABLE_NAME,
+            P4RUN_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
@@ -13786,9 +13806,9 @@
     return true;
 }
-bool p4aRunPrintObject(FILE *stream, p4aRunRow *object, bool mdcf)
+bool p4RunPrintObject(FILE *stream, p4RunRow *object, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(object, false);
 
-    psMetadata *md = p4aRunMetadataFromObject(object);
+    psMetadata *md = p4RunMetadataFromObject(object);
 
     if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
@@ -13801,26 +13821,27 @@
     return true;
 }
-static void p4aInputExpRowFree(p4aInputExpRow *object);
-
-p4aInputExpRow *p4aInputExpRowAlloc(psS32 p4a_id, const char *exp_tag, psS32 p3_version)
-{
-    p4aInputExpRow  *_object;
-
-    _object = psAlloc(sizeof(p4aInputExpRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4aInputExpRowFree);
+static void p4InputExpRowFree(p4InputExpRow *object);
+
+p4InputExpRow *p4InputExpRowAlloc(psS32 p4a_id, const char *exp_tag, psS32 p3_version, bool magiced)
+{
+    p4InputExpRow   *_object;
+
+    _object = psAlloc(sizeof(p4InputExpRow));
+    psMemSetDeallocator(_object, (psFreeFunc)p4InputExpRowFree);
 
     _object->p4a_id = p4a_id;
     _object->exp_tag = psStringCopy(exp_tag);
     _object->p3_version = p3_version;
+    _object->magiced = magiced;
 
     return _object;
 }
 
-static void p4aInputExpRowFree(p4aInputExpRow *object)
+static void p4InputExpRowFree(p4InputExpRow *object)
 {
     psFree(object->exp_tag);
 }
 
-bool p4aInputExpCreateTable(psDB *dbh)
+bool p4InputExpCreateTable(psDB *dbh)
 {
     psMetadata *md = psMetadataAlloc();
@@ -13840,6 +13861,11 @@
         return false;
     }
-
-    bool status = psDBCreateTable(dbh, P4AINPUTEXP_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, "Primary Key", 0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item magiced");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBCreateTable(dbh, P4INPUTEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -13848,10 +13874,10 @@
 }
 
-bool p4aInputExpDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4AINPUTEXP_TABLE_NAME);
-}
-
-bool p4aInputExpInsert(psDB * dbh, psS32 p4a_id, const char *exp_tag, psS32 p3_version)
+bool p4InputExpDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, P4INPUTEXP_TABLE_NAME);
+}
+
+bool p4InputExpInsert(psDB * dbh, psS32 p4a_id, const char *exp_tag, psS32 p3_version, bool magiced)
 {
     psMetadata *md = psMetadataAlloc();
@@ -13871,6 +13897,11 @@
         return false;
     }
-
-    bool status = psDBInsertOneRow(dbh, P4AINPUTEXP_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, magiced)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item magiced");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, P4INPUTEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -13878,11 +13909,11 @@
 }
 
-long long p4aInputExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long p4InputExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, P4AINPUTEXP_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, P4INPUTEXP_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aInputExp");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4InputExp");
         return count;
 
@@ -13892,13 +13923,13 @@
     return deleted;
 }
-bool p4aInputExpInsertObject(psDB *dbh, p4aInputExpRow *object)
-{
-    return p4aInputExpInsert(dbh, object->p4a_id, object->exp_tag, object->p3_version);
-}
-
-bool p4aInputExpInsertObjects(psDB *dbh, psArray *objects)
+bool p4InputExpInsertObject(psDB *dbh, p4InputExpRow *object)
+{
+    return p4InputExpInsert(dbh, object->p4a_id, object->exp_tag, object->p3_version, object->magiced);
+}
+
+bool p4InputExpInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4aInputExpInsertObject(dbh, objects->data[i])) {
+        if (!p4InputExpInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -13908,11 +13939,11 @@
 }
 
-bool p4aInputExpInsertFits(psDB *dbh, const psFits *fits)
+bool p4InputExpInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  P4AINPUTEXP_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4AINPUTEXP_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4AINPUTEXP_TABLE_NAME);
+    // move to (the first?) extension named  P4INPUTEXP_TABLE_NAME
+    if (!psFitsMoveExtName(fits, P4INPUTEXP_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4INPUTEXP_TABLE_NAME);
         return false;
     }
@@ -13932,5 +13963,5 @@
     }
 
-    if (!psDBInsertRows(dbh, P4AINPUTEXP_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, P4INPUTEXP_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -13943,9 +13974,9 @@
 }
 
-bool p4aInputExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool p4InputExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
 
-    rowSet = psDBSelectRows(dbh, P4AINPUTEXP_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4INPUTEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -13953,5 +13984,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4AINPUTEXP_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, P4INPUTEXP_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -13964,5 +13995,5 @@
 }
 
-psMetadata *p4aInputExpMetadataFromObject(const p4aInputExpRow *object)
+psMetadata *p4InputExpMetadataFromObject(const p4InputExpRow *object)
 {
     psMetadata *md = psMetadataAlloc();
@@ -13982,4 +14013,9 @@
         return false;
     }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, object->magiced)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item magiced");
+        psFree(md);
+        return false;
+    }
 
 
@@ -13987,5 +14023,5 @@
 }
 
-p4aInputExpRow *p4aInputExpObjectFromMetadata(psMetadata *md)
+p4InputExpRow *p4InputExpObjectFromMetadata(psMetadata *md)
 {
 
@@ -14006,8 +14042,13 @@
         return false;
     }
-
-    return p4aInputExpRowAlloc(p4a_id, exp_tag, p3_version);
-}
-psArray *p4aInputExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    bool magiced = psMetadataLookupBool(&status, md, "magiced");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item magiced");
+        return false;
+    }
+
+    return p4InputExpRowAlloc(p4a_id, exp_tag, p3_version, magiced);
+}
+psArray *p4InputExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -14015,5 +14056,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, P4AINPUTEXP_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4INPUTEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -14025,5 +14066,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        p4aInputExpRow *object = p4aInputExpObjectFromMetadata(rowSet->data[i]);
+        p4InputExpRow *object = p4InputExpObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -14034,11 +14075,11 @@
     return returnSet;
 }
-bool p4aInputExpDeleteObject(psDB *dbh, const p4aInputExpRow *object)
-{
-    psMetadata *where = p4aInputExpMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4AINPUTEXP_TABLE_NAME, where, 0);
+bool p4InputExpDeleteObject(psDB *dbh, const p4InputExpRow *object)
+{
+    psMetadata *where = p4InputExpMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, P4INPUTEXP_TABLE_NAME, where, 0);
     psFree(where);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aInputExp");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4InputExp");
         return false;
     }
@@ -14046,21 +14087,21 @@
         // 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, "p4aInputExpRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4aInputExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "p4InputExpRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long p4InputExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        p4aInputExpRow *object = objects->data[i];
-        psMetadata *where = p4aInputExpMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4AINPUTEXP_TABLE_NAME, where, limit);
+        p4InputExpRow *object = objects->data[i];
+        psMetadata *where = p4InputExpMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, P4INPUTEXP_TABLE_NAME, where, limit);
         psFree(where);
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aInputExp");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4InputExp");
             return count;
         }
@@ -14071,5 +14112,5 @@
     return deleted;
 }
-bool p4aInputExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool p4InputExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -14077,9 +14118,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = p4aInputExpMetadataFromObject(objects->data[i]);
+        psMetadata *md = p4InputExpMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            P4AINPUTEXP_TABLE_NAME,
+            P4INPUTEXP_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
@@ -14102,9 +14143,9 @@
     return true;
 }
-bool p4aInputExpPrintObject(FILE *stream, p4aInputExpRow *object, bool mdcf)
+bool p4InputExpPrintObject(FILE *stream, p4InputExpRow *object, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(object, false);
 
-    psMetadata *md = p4aInputExpMetadataFromObject(object);
+    psMetadata *md = p4InputExpMetadataFromObject(object);
 
     if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
@@ -14117,12 +14158,12 @@
     return true;
 }
-static void p4aScfileRowFree(p4aScfileRow *object);
-
-p4aScfileRow *p4aScfileRowAlloc(psS32 p4a_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
-{
-    p4aScfileRow    *_object;
-
-    _object = psAlloc(sizeof(p4aScfileRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4aScfileRowFree);
+static void p4ScfileRowFree(p4ScfileRow *object);
+
+p4ScfileRow *p4ScfileRowAlloc(psS32 p4a_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
+{
+    p4ScfileRow     *_object;
+
+    _object = psAlloc(sizeof(p4ScfileRow));
+    psMemSetDeallocator(_object, (psFreeFunc)p4ScfileRowFree);
 
     _object->p4a_id = p4a_id;
@@ -14138,5 +14179,5 @@
 }
 
-static void p4aScfileRowFree(p4aScfileRow *object)
+static void p4ScfileRowFree(p4ScfileRow *object)
 {
     psFree(object->skycell_id);
@@ -14146,5 +14187,5 @@
 }
 
-bool p4aScfileCreateTable(psDB *dbh)
+bool p4ScfileCreateTable(psDB *dbh)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14190,5 +14231,5 @@
     }
 
-    bool status = psDBCreateTable(dbh, P4ASCFILE_TABLE_NAME, md);
+    bool status = psDBCreateTable(dbh, P4SCFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -14197,10 +14238,10 @@
 }
 
-bool p4aScfileDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4ASCFILE_TABLE_NAME);
-}
-
-bool p4aScfileInsert(psDB * dbh, psS32 p4a_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
+bool p4ScfileDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, P4SCFILE_TABLE_NAME);
+}
+
+bool p4ScfileInsert(psDB * dbh, psS32 p4a_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14246,5 +14287,5 @@
     }
 
-    bool status = psDBInsertOneRow(dbh, P4ASCFILE_TABLE_NAME, md);
+    bool status = psDBInsertOneRow(dbh, P4SCFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -14252,11 +14293,11 @@
 }
 
-long long p4aScfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long p4ScfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, P4ASCFILE_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, P4SCFILE_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aScfile");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4Scfile");
         return count;
 
@@ -14266,13 +14307,13 @@
     return deleted;
 }
-bool p4aScfileInsertObject(psDB *dbh, p4aScfileRow *object)
-{
-    return p4aScfileInsert(dbh, object->p4a_id, object->skycell_id, object->tess_id, object->exp_tag, object->p3_version, object->uri, object->bg, object->bg_mean_stdev);
-}
-
-bool p4aScfileInsertObjects(psDB *dbh, psArray *objects)
+bool p4ScfileInsertObject(psDB *dbh, p4ScfileRow *object)
+{
+    return p4ScfileInsert(dbh, object->p4a_id, object->skycell_id, object->tess_id, object->exp_tag, object->p3_version, object->uri, object->bg, object->bg_mean_stdev);
+}
+
+bool p4ScfileInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4aScfileInsertObject(dbh, objects->data[i])) {
+        if (!p4ScfileInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -14282,11 +14323,11 @@
 }
 
-bool p4aScfileInsertFits(psDB *dbh, const psFits *fits)
+bool p4ScfileInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  P4ASCFILE_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4ASCFILE_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4ASCFILE_TABLE_NAME);
+    // move to (the first?) extension named  P4SCFILE_TABLE_NAME
+    if (!psFitsMoveExtName(fits, P4SCFILE_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4SCFILE_TABLE_NAME);
         return false;
     }
@@ -14306,5 +14347,5 @@
     }
 
-    if (!psDBInsertRows(dbh, P4ASCFILE_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, P4SCFILE_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -14317,9 +14358,9 @@
 }
 
-bool p4aScfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool p4ScfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
 
-    rowSet = psDBSelectRows(dbh, P4ASCFILE_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4SCFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -14327,5 +14368,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4ASCFILE_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, P4SCFILE_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -14338,5 +14379,5 @@
 }
 
-psMetadata *p4aScfileMetadataFromObject(const p4aScfileRow *object)
+psMetadata *p4ScfileMetadataFromObject(const p4ScfileRow *object)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14386,5 +14427,5 @@
 }
 
-p4aScfileRow *p4aScfileObjectFromMetadata(psMetadata *md)
+p4ScfileRow *p4ScfileObjectFromMetadata(psMetadata *md)
 {
 
@@ -14431,7 +14472,7 @@
     }
 
-    return p4aScfileRowAlloc(p4a_id, skycell_id, tess_id, exp_tag, p3_version, uri, bg, bg_mean_stdev);
-}
-psArray *p4aScfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    return p4ScfileRowAlloc(p4a_id, skycell_id, tess_id, exp_tag, p3_version, uri, bg, bg_mean_stdev);
+}
+psArray *p4ScfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -14439,5 +14480,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, P4ASCFILE_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4SCFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -14449,5 +14490,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        p4aScfileRow *object = p4aScfileObjectFromMetadata(rowSet->data[i]);
+        p4ScfileRow *object = p4ScfileObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -14458,11 +14499,11 @@
     return returnSet;
 }
-bool p4aScfileDeleteObject(psDB *dbh, const p4aScfileRow *object)
-{
-    psMetadata *where = p4aScfileMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4ASCFILE_TABLE_NAME, where, 0);
+bool p4ScfileDeleteObject(psDB *dbh, const p4ScfileRow *object)
+{
+    psMetadata *where = p4ScfileMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, P4SCFILE_TABLE_NAME, where, 0);
     psFree(where);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aScfile");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4Scfile");
         return false;
     }
@@ -14470,21 +14511,21 @@
         // 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, "p4aScfileRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4aScfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "p4ScfileRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long p4ScfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        p4aScfileRow *object = objects->data[i];
-        psMetadata *where = p4aScfileMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4ASCFILE_TABLE_NAME, where, limit);
+        p4ScfileRow *object = objects->data[i];
+        psMetadata *where = p4ScfileMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, P4SCFILE_TABLE_NAME, where, limit);
         psFree(where);
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4aScfile");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4Scfile");
             return count;
         }
@@ -14495,5 +14536,5 @@
     return deleted;
 }
-bool p4aScfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool p4ScfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -14501,9 +14542,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = p4aScfileMetadataFromObject(objects->data[i]);
+        psMetadata *md = p4ScfileMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            P4ASCFILE_TABLE_NAME,
+            P4SCFILE_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
@@ -14526,9 +14567,9 @@
     return true;
 }
-bool p4aScfilePrintObject(FILE *stream, p4aScfileRow *object, bool mdcf)
+bool p4ScfilePrintObject(FILE *stream, p4ScfileRow *object, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(object, false);
 
-    psMetadata *md = p4aScfileMetadataFromObject(object);
+    psMetadata *md = p4ScfileMetadataFromObject(object);
 
     if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
@@ -14541,52 +14582,66 @@
     return true;
 }
-static void p4bRunRowFree(p4bRunRow *object);
-
-p4bRunRow *p4bRunRowAlloc(psS32 p4b_id, const char *state, const char *workdir, bool magic)
-{
-    p4bRunRow       *_object;
-
-    _object = psAlloc(sizeof(p4bRunRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4bRunRowFree);
+static void p4InputScfileRowFree(p4InputScfileRow *object);
+
+p4InputScfileRow *p4InputScfileRowAlloc(psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *kind)
+{
+    p4InputScfileRow *_object;
+
+    _object = psAlloc(sizeof(p4InputScfileRow));
+    psMemSetDeallocator(_object, (psFreeFunc)p4InputScfileRowFree);
 
     _object->p4b_id = p4b_id;
-    _object->state = psStringCopy(state);
-    _object->workdir = psStringCopy(workdir);
-    _object->magic = magic;
+    _object->skycell_id = psStringCopy(skycell_id);
+    _object->tess_id = psStringCopy(tess_id);
+    _object->exp_tag = psStringCopy(exp_tag);
+    _object->p3_version = p3_version;
+    _object->kind = psStringCopy(kind);
 
     return _object;
 }
 
-static void p4bRunRowFree(p4bRunRow *object)
-{
-    psFree(object->state);
-    psFree(object->workdir);
-}
-
-bool p4bRunCreateTable(psDB *dbh)
+static void p4InputScfileRowFree(p4InputScfileRow *object)
+{
+    psFree(object->skycell_id);
+    psFree(object->tess_id);
+    psFree(object->exp_tag);
+    psFree(object->kind);
+}
+
+bool p4InputScfileCreateTable(psDB *dbh)
 {
     psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4b_id", PS_DATA_S32, "Primary Key AUTO_INCREMENT", 0)) {
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4b_id", PS_DATA_S32, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item p4b_id");
         psFree(md);
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, "Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBCreateTable(dbh, P4BRUN_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "skycell_id", PS_DATA_STRING, "Primary Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item skycell_id");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "tess_id", PS_DATA_STRING, "Primary Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item tess_id");
+        psFree(md);
+        return false;
+    }
+    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, "p3_version", PS_DATA_S32, "Primary Key", 0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "kind", PS_DATA_STRING, "Key", "64")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item kind");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBCreateTable(dbh, P4INPUTSCFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -14595,10 +14650,10 @@
 }
 
-bool p4bRunDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4BRUN_TABLE_NAME);
-}
-
-bool p4bRunInsert(psDB * dbh, psS32 p4b_id, const char *state, const char *workdir, bool magic)
+bool p4InputScfileDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, P4INPUTSCFILE_TABLE_NAME);
+}
+
+bool p4InputScfileInsert(psDB * dbh, psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *kind)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14608,21 +14663,31 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, workdir)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, magic)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBInsertOneRow(dbh, P4BRUN_TABLE_NAME, md);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "skycell_id", PS_DATA_STRING, NULL, skycell_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item skycell_id");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "tess_id", PS_DATA_STRING, NULL, tess_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item tess_id");
+        psFree(md);
+        return false;
+    }
+    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 (!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);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "kind", PS_DATA_STRING, NULL, kind)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item kind");
+        psFree(md);
+        return false;
+    }
+
+    bool status = psDBInsertOneRow(dbh, P4INPUTSCFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -14630,11 +14695,11 @@
 }
 
-long long p4bRunDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long p4InputScfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, P4BRUN_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, P4INPUTSCFILE_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bRun");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4InputScfile");
         return count;
 
@@ -14644,13 +14709,13 @@
     return deleted;
 }
-bool p4bRunInsertObject(psDB *dbh, p4bRunRow *object)
-{
-    return p4bRunInsert(dbh, object->p4b_id, object->state, object->workdir, object->magic);
-}
-
-bool p4bRunInsertObjects(psDB *dbh, psArray *objects)
+bool p4InputScfileInsertObject(psDB *dbh, p4InputScfileRow *object)
+{
+    return p4InputScfileInsert(dbh, object->p4b_id, object->skycell_id, object->tess_id, object->exp_tag, object->p3_version, object->kind);
+}
+
+bool p4InputScfileInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4bRunInsertObject(dbh, objects->data[i])) {
+        if (!p4InputScfileInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -14660,11 +14725,11 @@
 }
 
-bool p4bRunInsertFits(psDB *dbh, const psFits *fits)
+bool p4InputScfileInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  P4BRUN_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4BRUN_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4BRUN_TABLE_NAME);
+    // move to (the first?) extension named  P4INPUTSCFILE_TABLE_NAME
+    if (!psFitsMoveExtName(fits, P4INPUTSCFILE_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4INPUTSCFILE_TABLE_NAME);
         return false;
     }
@@ -14684,5 +14749,5 @@
     }
 
-    if (!psDBInsertRows(dbh, P4BRUN_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, P4INPUTSCFILE_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -14695,9 +14760,9 @@
 }
 
-bool p4bRunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool p4InputScfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
 
-    rowSet = psDBSelectRows(dbh, P4BRUN_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4INPUTSCFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -14705,5 +14770,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4BRUN_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, P4INPUTSCFILE_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -14716,5 +14781,5 @@
 }
 
-psMetadata *p4bRunMetadataFromObject(const p4bRunRow *object)
+psMetadata *p4InputScfileMetadataFromObject(const p4InputScfileRow *object)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14724,16 +14789,26 @@
         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 false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, object->workdir)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, object->magic)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "skycell_id", PS_DATA_STRING, NULL, object->skycell_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item skycell_id");
+        psFree(md);
+        return false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "tess_id", PS_DATA_STRING, NULL, object->tess_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item tess_id");
+        psFree(md);
+        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 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 false;
+    }
+    if (!psMetadataAdd(md, PS_LIST_TAIL, "kind", PS_DATA_STRING, NULL, object->kind)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item kind");
         psFree(md);
         return false;
@@ -14744,5 +14819,5 @@
 }
 
-p4bRunRow *p4bRunObjectFromMetadata(psMetadata *md)
+p4InputScfileRow *p4InputScfileObjectFromMetadata(psMetadata *md)
 {
 
@@ -14753,23 +14828,33 @@
         return false;
     }
-    char* state = psMetadataLookupPtr(&status, md, "state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
-        return false;
-    }
-    char* workdir = psMetadataLookupPtr(&status, md, "workdir");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item workdir");
-        return false;
-    }
-    bool magic = psMetadataLookupBool(&status, md, "magic");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item magic");
-        return false;
-    }
-
-    return p4bRunRowAlloc(p4b_id, state, workdir, magic);
-}
-psArray *p4bRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    char* skycell_id = psMetadataLookupPtr(&status, md, "skycell_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item skycell_id");
+        return false;
+    }
+    char* tess_id = psMetadataLookupPtr(&status, md, "tess_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item tess_id");
+        return 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;
+    }
+    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
+        return false;
+    }
+    char* kind = psMetadataLookupPtr(&status, md, "kind");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item kind");
+        return false;
+    }
+
+    return p4InputScfileRowAlloc(p4b_id, skycell_id, tess_id, exp_tag, p3_version, kind);
+}
+psArray *p4InputScfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -14777,5 +14862,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, P4BRUN_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4INPUTSCFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -14787,5 +14872,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        p4bRunRow *object = p4bRunObjectFromMetadata(rowSet->data[i]);
+        p4InputScfileRow *object = p4InputScfileObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -14796,11 +14881,11 @@
     return returnSet;
 }
-bool p4bRunDeleteObject(psDB *dbh, const p4bRunRow *object)
-{
-    psMetadata *where = p4bRunMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4BRUN_TABLE_NAME, where, 0);
+bool p4InputScfileDeleteObject(psDB *dbh, const p4InputScfileRow *object)
+{
+    psMetadata *where = p4InputScfileMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, P4INPUTSCFILE_TABLE_NAME, where, 0);
     psFree(where);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bRun");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4InputScfile");
         return false;
     }
@@ -14808,21 +14893,21 @@
         // 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, "p4bRunRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4bRunDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "p4InputScfileRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long p4InputScfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        p4bRunRow *object = objects->data[i];
-        psMetadata *where = p4bRunMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4BRUN_TABLE_NAME, where, limit);
+        p4InputScfileRow *object = objects->data[i];
+        psMetadata *where = p4InputScfileMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, P4INPUTSCFILE_TABLE_NAME, where, limit);
         psFree(where);
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bRun");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4InputScfile");
             return count;
         }
@@ -14833,5 +14918,5 @@
     return deleted;
 }
-bool p4bRunPrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool p4InputScfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -14839,9 +14924,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = p4bRunMetadataFromObject(objects->data[i]);
+        psMetadata *md = p4InputScfileMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            P4BRUN_TABLE_NAME,
+            P4INPUTSCFILE_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
@@ -14864,9 +14949,9 @@
     return true;
 }
-bool p4bRunPrintObject(FILE *stream, p4bRunRow *object, bool mdcf)
+bool p4InputScfilePrintObject(FILE *stream, p4InputScfileRow *object, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(object, false);
 
-    psMetadata *md = p4bRunMetadataFromObject(object);
+    psMetadata *md = p4InputScfileMetadataFromObject(object);
 
     if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
@@ -14879,12 +14964,12 @@
     return true;
 }
-static void p4bInputScfileRowFree(p4bInputScfileRow *object);
-
-p4bInputScfileRow *p4bInputScfileRowAlloc(psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *kind)
-{
-    p4bInputScfileRow *_object;
-
-    _object = psAlloc(sizeof(p4bInputScfileRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4bInputScfileRowFree);
+static void p4DiffScfileRowFree(p4DiffScfileRow *object);
+
+p4DiffScfileRow *p4DiffScfileRowAlloc(psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
+{
+    p4DiffScfileRow *_object;
+
+    _object = psAlloc(sizeof(p4DiffScfileRow));
+    psMemSetDeallocator(_object, (psFreeFunc)p4DiffScfileRowFree);
 
     _object->p4b_id = p4b_id;
@@ -14893,18 +14978,20 @@
     _object->exp_tag = psStringCopy(exp_tag);
     _object->p3_version = p3_version;
-    _object->kind = psStringCopy(kind);
+    _object->uri = psStringCopy(uri);
+    _object->bg = bg;
+    _object->bg_mean_stdev = bg_mean_stdev;
 
     return _object;
 }
 
-static void p4bInputScfileRowFree(p4bInputScfileRow *object)
+static void p4DiffScfileRowFree(p4DiffScfileRow *object)
 {
     psFree(object->skycell_id);
     psFree(object->tess_id);
     psFree(object->exp_tag);
-    psFree(object->kind);
-}
-
-bool p4bInputScfileCreateTable(psDB *dbh)
+    psFree(object->uri);
+}
+
+bool p4DiffScfileCreateTable(psDB *dbh)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14934,11 +15021,21 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "kind", PS_DATA_STRING, "Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item kind");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBCreateTable(dbh, P4BINPUTSCFILE_TABLE_NAME, md);
+    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 (!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 (!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;
+    }
+
+    bool status = psDBCreateTable(dbh, P4DIFFSCFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -14947,10 +15044,10 @@
 }
 
-bool p4bInputScfileDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4BINPUTSCFILE_TABLE_NAME);
-}
-
-bool p4bInputScfileInsert(psDB * dbh, psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *kind)
+bool p4DiffScfileDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, P4DIFFSCFILE_TABLE_NAME);
+}
+
+bool p4DiffScfileInsert(psDB * dbh, psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
 {
     psMetadata *md = psMetadataAlloc();
@@ -14980,11 +15077,21 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "kind", PS_DATA_STRING, NULL, kind)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item kind");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBInsertOneRow(dbh, P4BINPUTSCFILE_TABLE_NAME, md);
+    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 (!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 (!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;
+    }
+
+    bool status = psDBInsertOneRow(dbh, P4DIFFSCFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -14992,11 +15099,11 @@
 }
 
-long long p4bInputScfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long p4DiffScfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, P4BINPUTSCFILE_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, P4DIFFSCFILE_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bInputScfile");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4DiffScfile");
         return count;
 
@@ -15006,13 +15113,13 @@
     return deleted;
 }
-bool p4bInputScfileInsertObject(psDB *dbh, p4bInputScfileRow *object)
-{
-    return p4bInputScfileInsert(dbh, object->p4b_id, object->skycell_id, object->tess_id, object->exp_tag, object->p3_version, object->kind);
-}
-
-bool p4bInputScfileInsertObjects(psDB *dbh, psArray *objects)
+bool p4DiffScfileInsertObject(psDB *dbh, p4DiffScfileRow *object)
+{
+    return p4DiffScfileInsert(dbh, object->p4b_id, object->skycell_id, object->tess_id, object->exp_tag, object->p3_version, object->uri, object->bg, object->bg_mean_stdev);
+}
+
+bool p4DiffScfileInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4bInputScfileInsertObject(dbh, objects->data[i])) {
+        if (!p4DiffScfileInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -15022,11 +15129,11 @@
 }
 
-bool p4bInputScfileInsertFits(psDB *dbh, const psFits *fits)
+bool p4DiffScfileInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  P4BINPUTSCFILE_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4BINPUTSCFILE_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4BINPUTSCFILE_TABLE_NAME);
+    // move to (the first?) extension named  P4DIFFSCFILE_TABLE_NAME
+    if (!psFitsMoveExtName(fits, P4DIFFSCFILE_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4DIFFSCFILE_TABLE_NAME);
         return false;
     }
@@ -15046,5 +15153,5 @@
     }
 
-    if (!psDBInsertRows(dbh, P4BINPUTSCFILE_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, P4DIFFSCFILE_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -15057,9 +15164,9 @@
 }
 
-bool p4bInputScfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool p4DiffScfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
 
-    rowSet = psDBSelectRows(dbh, P4BINPUTSCFILE_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4DIFFSCFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -15067,5 +15174,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4BINPUTSCFILE_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, P4DIFFSCFILE_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -15078,5 +15185,5 @@
 }
 
-psMetadata *p4bInputScfileMetadataFromObject(const p4bInputScfileRow *object)
+psMetadata *p4DiffScfileMetadataFromObject(const p4DiffScfileRow *object)
 {
     psMetadata *md = psMetadataAlloc();
@@ -15106,6 +15213,16 @@
         return false;
     }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "kind", PS_DATA_STRING, NULL, object->kind)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item kind");
+    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 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 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 false;
@@ -15116,5 +15233,5 @@
 }
 
-p4bInputScfileRow *p4bInputScfileObjectFromMetadata(psMetadata *md)
+p4DiffScfileRow *p4DiffScfileObjectFromMetadata(psMetadata *md)
 {
 
@@ -15145,13 +15262,23 @@
         return false;
     }
-    char* kind = psMetadataLookupPtr(&status, md, "kind");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item kind");
-        return false;
-    }
-
-    return p4bInputScfileRowAlloc(p4b_id, skycell_id, tess_id, exp_tag, p3_version, kind);
-}
-psArray *p4bInputScfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    char* uri = psMetadataLookupPtr(&status, md, "uri");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
+        return false;
+    }
+    psF64 bg = psMetadataLookupF64(&status, md, "bg");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
+        return false;
+    }
+    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;
+    }
+
+    return p4DiffScfileRowAlloc(p4b_id, skycell_id, tess_id, exp_tag, p3_version, uri, bg, bg_mean_stdev);
+}
+psArray *p4DiffScfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -15159,5 +15286,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, P4BINPUTSCFILE_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, P4DIFFSCFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -15169,5 +15296,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        p4bInputScfileRow *object = p4bInputScfileObjectFromMetadata(rowSet->data[i]);
+        p4DiffScfileRow *object = p4DiffScfileObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -15178,11 +15305,11 @@
     return returnSet;
 }
-bool p4bInputScfileDeleteObject(psDB *dbh, const p4bInputScfileRow *object)
-{
-    psMetadata *where = p4bInputScfileMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4BINPUTSCFILE_TABLE_NAME, where, 0);
+bool p4DiffScfileDeleteObject(psDB *dbh, const p4DiffScfileRow *object)
+{
+    psMetadata *where = p4DiffScfileMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, P4DIFFSCFILE_TABLE_NAME, where, 0);
     psFree(where);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bInputScfile");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4DiffScfile");
         return false;
     }
@@ -15190,21 +15317,21 @@
         // 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, "p4bInputScfileRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4bInputScfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "p4DiffScfileRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long p4DiffScfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        p4bInputScfileRow *object = objects->data[i];
-        psMetadata *where = p4bInputScfileMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4BINPUTSCFILE_TABLE_NAME, where, limit);
+        p4DiffScfileRow *object = objects->data[i];
+        psMetadata *where = p4DiffScfileMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, P4DIFFSCFILE_TABLE_NAME, where, limit);
         psFree(where);
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bInputScfile");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4DiffScfile");
             return count;
         }
@@ -15215,5 +15342,5 @@
     return deleted;
 }
-bool p4bInputScfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool p4DiffScfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -15221,9 +15348,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = p4bInputScfileMetadataFromObject(objects->data[i]);
+        psMetadata *md = p4DiffScfileMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            P4BINPUTSCFILE_TABLE_NAME,
+            P4DIFFSCFILE_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
@@ -15246,1087 +15373,9 @@
     return true;
 }
-bool p4bInputScfilePrintObject(FILE *stream, p4bInputScfileRow *object, bool mdcf)
+bool p4DiffScfilePrintObject(FILE *stream, p4DiffScfileRow *object, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(object, false);
 
-    psMetadata *md = p4bInputScfileMetadataFromObject(object);
-
-    if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(md);
-    }
-
-    psFree(md);
-
-    return true;
-}
-static void p4bDiffScfileRowFree(p4bDiffScfileRow *object);
-
-p4bDiffScfileRow *p4bDiffScfileRowAlloc(psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
-{
-    p4bDiffScfileRow *_object;
-
-    _object = psAlloc(sizeof(p4bDiffScfileRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4bDiffScfileRowFree);
-
-    _object->p4b_id = p4b_id;
-    _object->skycell_id = psStringCopy(skycell_id);
-    _object->tess_id = psStringCopy(tess_id);
-    _object->exp_tag = psStringCopy(exp_tag);
-    _object->p3_version = p3_version;
-    _object->uri = psStringCopy(uri);
-    _object->bg = bg;
-    _object->bg_mean_stdev = bg_mean_stdev;
-
-    return _object;
-}
-
-static void p4bDiffScfileRowFree(p4bDiffScfileRow *object)
-{
-    psFree(object->skycell_id);
-    psFree(object->tess_id);
-    psFree(object->exp_tag);
-    psFree(object->uri);
-}
-
-bool p4bDiffScfileCreateTable(psDB *dbh)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4b_id", PS_DATA_S32, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4b_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "skycell_id", PS_DATA_STRING, "Primary Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item skycell_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "tess_id", PS_DATA_STRING, "Primary Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item tess_id");
-        psFree(md);
-        return false;
-    }
-    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, "p3_version", PS_DATA_S32, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
-        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;
-    }
-    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 (!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;
-    }
-
-    bool status = psDBCreateTable(dbh, P4BDIFFSCFILE_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool p4bDiffScfileDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4BDIFFSCFILE_TABLE_NAME);
-}
-
-bool p4bDiffScfileInsert(psDB * dbh, psS32 p4b_id, const char *skycell_id, const char *tess_id, const char *exp_tag, psS32 p3_version, const char *uri, psF64 bg, psF64 bg_mean_stdev)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4b_id", PS_DATA_S32, NULL, p4b_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4b_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "skycell_id", PS_DATA_STRING, NULL, skycell_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item skycell_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "tess_id", PS_DATA_STRING, NULL, tess_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item tess_id");
-        psFree(md);
-        return false;
-    }
-    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 (!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);
-        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;
-    }
-    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 (!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;
-    }
-
-    bool status = psDBInsertOneRow(dbh, P4BDIFFSCFILE_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long p4bDiffScfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, P4BDIFFSCFILE_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bDiffScfile");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool p4bDiffScfileInsertObject(psDB *dbh, p4bDiffScfileRow *object)
-{
-    return p4bDiffScfileInsert(dbh, object->p4b_id, object->skycell_id, object->tess_id, object->exp_tag, object->p3_version, object->uri, object->bg, object->bg_mean_stdev);
-}
-
-bool p4bDiffScfileInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4bDiffScfileInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool p4bDiffScfileInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  P4BDIFFSCFILE_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4BDIFFSCFILE_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4BDIFFSCFILE_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, P4BDIFFSCFILE_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool p4bDiffScfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, P4BDIFFSCFILE_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4BDIFFSCFILE_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *p4bDiffScfileMetadataFromObject(const p4bDiffScfileRow *object)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4b_id", PS_DATA_S32, NULL, object->p4b_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4b_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "skycell_id", PS_DATA_STRING, NULL, object->skycell_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item skycell_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "tess_id", PS_DATA_STRING, NULL, object->tess_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item tess_id");
-        psFree(md);
-        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 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 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 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 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 false;
-    }
-
-
-    return md;
-}
-
-p4bDiffScfileRow *p4bDiffScfileObjectFromMetadata(psMetadata *md)
-{
-
-bool status = false;
-    psS32 p4b_id = psMetadataLookupS32(&status, md, "p4b_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p4b_id");
-        return false;
-    }
-    char* skycell_id = psMetadataLookupPtr(&status, md, "skycell_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item skycell_id");
-        return false;
-    }
-    char* tess_id = psMetadataLookupPtr(&status, md, "tess_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item tess_id");
-        return 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;
-    }
-    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
-        return false;
-    }
-    char* uri = psMetadataLookupPtr(&status, md, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        return false;
-    }
-    psF64 bg = psMetadataLookupF64(&status, md, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        return false;
-    }
-    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;
-    }
-
-    return p4bDiffScfileRowAlloc(p4b_id, skycell_id, tess_id, exp_tag, p3_version, uri, bg, bg_mean_stdev);
-}
-psArray *p4bDiffScfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, P4BDIFFSCFILE_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAllocEmpty(rowSet->n);
-
-    for (i = 0; i < rowSet->n; i++) {
-        p4bDiffScfileRow *object = p4bDiffScfileObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool p4bDiffScfileDeleteObject(psDB *dbh, const p4bDiffScfileRow *object)
-{
-    psMetadata *where = p4bDiffScfileMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4BDIFFSCFILE_TABLE_NAME, where, 0);
-    psFree(where);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bDiffScfile");
-        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, "p4bDiffScfileRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4bDiffScfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        p4bDiffScfileRow *object = objects->data[i];
-        psMetadata *where = p4bDiffScfileMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4BDIFFSCFILE_TABLE_NAME, where, limit);
-        psFree(where);
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4bDiffScfile");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool p4bDiffScfilePrintObjects(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 = p4bDiffScfileMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            P4BDIFFSCFILE_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;
-}
-bool p4bDiffScfilePrintObject(FILE *stream, p4bDiffScfileRow *object, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(object, false);
-
-    psMetadata *md = p4bDiffScfileMetadataFromObject(object);
-
-    if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(md);
-    }
-
-    psFree(md);
-
-    return true;
-}
-static void p4cRunRowFree(p4cRunRow *object);
-
-p4cRunRow *p4cRunRowAlloc(psS32 p4c_id, const char *state, const char *workdir, bool magic)
-{
-    p4cRunRow       *_object;
-
-    _object = psAlloc(sizeof(p4cRunRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4cRunRowFree);
-
-    _object->p4c_id = p4c_id;
-    _object->state = psStringCopy(state);
-    _object->workdir = psStringCopy(workdir);
-    _object->magic = magic;
-
-    return _object;
-}
-
-static void p4cRunRowFree(p4cRunRow *object)
-{
-    psFree(object->state);
-    psFree(object->workdir);
-}
-
-bool p4cRunCreateTable(psDB *dbh)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4c_id", PS_DATA_S32, "Primary Key AUTO_INCREMENT", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4c_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, "Key", "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, "255")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBCreateTable(dbh, P4CRUN_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool p4cRunDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4CRUN_TABLE_NAME);
-}
-
-bool p4cRunInsert(psDB * dbh, psS32 p4c_id, const char *state, const char *workdir, bool magic)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4c_id", PS_DATA_S32, NULL, p4c_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4c_id");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, workdir)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, magic)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBInsertOneRow(dbh, P4CRUN_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long p4cRunDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, P4CRUN_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4cRun");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool p4cRunInsertObject(psDB *dbh, p4cRunRow *object)
-{
-    return p4cRunInsert(dbh, object->p4c_id, object->state, object->workdir, object->magic);
-}
-
-bool p4cRunInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4cRunInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool p4cRunInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  P4CRUN_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4CRUN_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4CRUN_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, P4CRUN_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool p4cRunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, P4CRUN_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4CRUN_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *p4cRunMetadataFromObject(const p4cRunRow *object)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4c_id", PS_DATA_S32, NULL, object->p4c_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4c_id");
-        psFree(md);
-        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 false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "workdir", PS_DATA_STRING, NULL, object->workdir)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item workdir");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, object->magic)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item magic");
-        psFree(md);
-        return false;
-    }
-
-
-    return md;
-}
-
-p4cRunRow *p4cRunObjectFromMetadata(psMetadata *md)
-{
-
-bool status = false;
-    psS32 p4c_id = psMetadataLookupS32(&status, md, "p4c_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p4c_id");
-        return false;
-    }
-    char* state = psMetadataLookupPtr(&status, md, "state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
-        return false;
-    }
-    char* workdir = psMetadataLookupPtr(&status, md, "workdir");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item workdir");
-        return false;
-    }
-    bool magic = psMetadataLookupBool(&status, md, "magic");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item magic");
-        return false;
-    }
-
-    return p4cRunRowAlloc(p4c_id, state, workdir, magic);
-}
-psArray *p4cRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, P4CRUN_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAllocEmpty(rowSet->n);
-
-    for (i = 0; i < rowSet->n; i++) {
-        p4cRunRow *object = p4cRunObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool p4cRunDeleteObject(psDB *dbh, const p4cRunRow *object)
-{
-    psMetadata *where = p4cRunMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4CRUN_TABLE_NAME, where, 0);
-    psFree(where);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4cRun");
-        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, "p4cRunRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4cRunDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        p4cRunRow *object = objects->data[i];
-        psMetadata *where = p4cRunMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4CRUN_TABLE_NAME, where, limit);
-        psFree(where);
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4cRun");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool p4cRunPrintObjects(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 = p4cRunMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            P4CRUN_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;
-}
-bool p4cRunPrintObject(FILE *stream, p4cRunRow *object, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(object, false);
-
-    psMetadata *md = p4cRunMetadataFromObject(object);
-
-    if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-        psFree(md);
-    }
-
-    psFree(md);
-
-    return true;
-}
-static void p4cInputExpRowFree(p4cInputExpRow *object);
-
-p4cInputExpRow *p4cInputExpRowAlloc(psS32 p4c_id, const char *exp_tag, psS32 p3_version)
-{
-    p4cInputExpRow  *_object;
-
-    _object = psAlloc(sizeof(p4cInputExpRow));
-    psMemSetDeallocator(_object, (psFreeFunc)p4cInputExpRowFree);
-
-    _object->p4c_id = p4c_id;
-    _object->exp_tag = psStringCopy(exp_tag);
-    _object->p3_version = p3_version;
-
-    return _object;
-}
-
-static void p4cInputExpRowFree(p4cInputExpRow *object)
-{
-    psFree(object->exp_tag);
-}
-
-bool p4cInputExpCreateTable(psDB *dbh)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4c_id", PS_DATA_S32, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4c_id");
-        psFree(md);
-        return false;
-    }
-    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, "p3_version", PS_DATA_S32, "Primary Key", 0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
-        psFree(md);
-        return false;
-    }
-
-    bool status = psDBCreateTable(dbh, P4CINPUTEXP_TABLE_NAME, md);
-
-    psFree(md);
-
-    return status;
-}
-
-bool p4cInputExpDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, P4CINPUTEXP_TABLE_NAME);
-}
-
-bool p4cInputExpInsert(psDB * dbh, psS32 p4c_id, const char *exp_tag, psS32 p3_version)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4c_id", PS_DATA_S32, NULL, p4c_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4c_id");
-        psFree(md);
-        return false;
-    }
-    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 (!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);
-        return false;
-    }
-
-    bool status = psDBInsertOneRow(dbh, P4CINPUTEXP_TABLE_NAME, md);
-    psFree(md);
-
-    return status;
-}
-
-long long p4cInputExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    long long count = psDBDeleteRows(dbh, P4CINPUTEXP_TABLE_NAME, where, limit);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4cInputExp");
-        return count;
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool p4cInputExpInsertObject(psDB *dbh, p4cInputExpRow *object)
-{
-    return p4cInputExpInsert(dbh, object->p4c_id, object->exp_tag, object->p3_version);
-}
-
-bool p4cInputExpInsertObjects(psDB *dbh, psArray *objects)
-{
-    for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!p4cInputExpInsertObject(dbh, objects->data[i])) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-bool p4cInputExpInsertFits(psDB *dbh, const psFits *fits)
-{
-    psArray         *rowSet;
-
-    // move to (the first?) extension named  P4CINPUTEXP_TABLE_NAME
-    if (!psFitsMoveExtName(fits, P4CINPUTEXP_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P4CINPUTEXP_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, P4CINPUTEXP_TABLE_NAME, rowSet)) {
-        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-bool p4cInputExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-
-    rowSet = psDBSelectRows(dbh, P4CINPUTEXP_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return false;
-    }
-
-    // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, P4CINPUTEXP_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
-        psFree(rowSet);
-        return false;
-    }
-
-    psFree(rowSet);
-
-    return true;
-}
-
-psMetadata *p4cInputExpMetadataFromObject(const p4cInputExpRow *object)
-{
-    psMetadata *md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, "p4c_id", PS_DATA_S32, NULL, object->p4c_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item p4c_id");
-        psFree(md);
-        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 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 false;
-    }
-
-
-    return md;
-}
-
-p4cInputExpRow *p4cInputExpObjectFromMetadata(psMetadata *md)
-{
-
-bool status = false;
-    psS32 p4c_id = psMetadataLookupS32(&status, md, "p4c_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p4c_id");
-        return 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;
-    }
-    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
-        return false;
-    }
-
-    return p4cInputExpRowAlloc(p4c_id, exp_tag, p3_version);
-}
-psArray *p4cInputExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
-{
-    psArray         *rowSet;
-    psArray         *returnSet;
-    psU64           i;
-
-    rowSet = psDBSelectRows(dbh, P4CINPUTEXP_TABLE_NAME, where, limit);
-    if (!rowSet) {
-        return NULL;
-    }
-
-    // convert psMetadata rows to row objects
-
-    returnSet = psArrayAllocEmpty(rowSet->n);
-
-    for (i = 0; i < rowSet->n; i++) {
-        p4cInputExpRow *object = p4cInputExpObjectFromMetadata(rowSet->data[i]);
-        psArrayAdd(returnSet, 0, object);
-        psFree(object);
-    }
-
-    psFree(rowSet);
-
-    return returnSet;
-}
-bool p4cInputExpDeleteObject(psDB *dbh, const p4cInputExpRow *object)
-{
-    psMetadata *where = p4cInputExpMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, P4CINPUTEXP_TABLE_NAME, where, 0);
-    psFree(where);
-    if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4cInputExp");
-        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, "p4cInputExpRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long p4cInputExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
-{
-    long long       deleted = 0;
-
-    for (long long i = 0; i < objects->n; i++) {
-        p4cInputExpRow *object = objects->data[i];
-        psMetadata *where = p4cInputExpMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, P4CINPUTEXP_TABLE_NAME, where, limit);
-        psFree(where);
-        if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p4cInputExp");
-            return count;
-        }
-
-        deleted += count;
-    }
-
-    return deleted;
-}
-bool p4cInputExpPrintObjects(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 = p4cInputExpMetadataFromObject(objects->data[i]);
-        if (!psMetadataAddMetadata(
-            output,
-            PS_LIST_TAIL,
-            P4CINPUTEXP_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;
-}
-bool p4cInputExpPrintObject(FILE *stream, p4cInputExpRow *object, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(object, false);
-
-    psMetadata *md = p4cInputExpMetadataFromObject(object);
+    psMetadata *md = p4DiffScfileMetadataFromObject(object);
 
     if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 11719)
+++ /trunk/ippdb/src/ippdb.h	(revision 11720)
@@ -20,5 +20,5 @@
 /*
  *
- * This file was generated by glueforge 0.36
+ * This file was generated by glueforge 1.00
  *
  * Do NOT directly edit this file.
@@ -6830,43 +6830,45 @@
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** p4aRunRow data structure
- *
- * Structure for representing a single row of p4aRun table data.
+/** p4RunRow data structure
+ *
+ * Structure for representing a single row of p4Run table data.
  */
 
 typedef struct {
     psS32           p4a_id;
+    char            *mode;
     char            *state;
     char            *workdir;
-    bool            magic;
-} p4aRunRow;
-
-/** Creates a new p4aRunRow object
- *
- *  @return A new p4aRunRow object or NULL on failure.
- */
-
-p4aRunRow *p4aRunRowAlloc(
+    psTime*         registered;
+} p4RunRow;
+
+/** Creates a new p4RunRow object
+ *
+ *  @return A new p4RunRow object or NULL on failure.
+ */
+
+p4RunRow *p4RunRowAlloc(
     psS32           p4a_id,
+    const char      *mode,
     const char      *state,
     const char      *workdir,
-    bool            magic
-);
-
-/** Creates a new p4aRun table
- *
- * @return true on success
- */
-
-bool p4aRunCreateTable(
+    psTime*         registered
+);
+
+/** Creates a new p4Run table
+ *
+ * @return true on success
+ */
+
+bool p4RunCreateTable(
     psDB            *dbh                ///< Database handle
 );
 
-/** Deletes a p4aRun table
- *
- * @return true on success
- */
-
-bool p4aRunDropTable(
+/** Deletes a p4Run table
+ *
+ * @return true on success
+ */
+
+bool p4RunDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -6879,10 +6881,11 @@
  */
 
-bool p4aRunInsert(
+bool p4RunInsert(
     psDB            *dbh,               ///< Database handle
     psS32           p4a_id,
+    const char      *mode,
     const char      *state,
     const char      *workdir,
-    bool            magic
+    psTime*         registered
 );
 
@@ -6892,5 +6895,5 @@
  */
 
-long long p4aRunDelete(
+long long p4RunDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -6898,5 +6901,5 @@
 );
 
-/** Insert a single p4aRunRow object into a table
+/** Insert a single p4RunRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -6905,10 +6908,10 @@
  */
 
-bool p4aRunInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4aRunRow       *object             ///< p4aRunRow object
-);
-
-/** Insert an array of p4aRunRow object into a table
+bool p4RunInsertObject(
+    psDB            *dbh,               ///< Database handle
+    p4RunRow        *object             ///< p4RunRow object
+);
+
+/** Insert an array of p4RunRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -6917,10 +6920,10 @@
  */
 
-bool p4aRunInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4aRunRow objects
-);
-
-/** Insert data from a binary FITS table p4aRunRow into the database
+bool p4RunInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p4RunRow objects
+);
+
+/** Insert data from a binary FITS table p4RunRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -6932,5 +6935,5 @@
  */
 
-bool p4aRunInsertFits(
+bool p4RunInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -6947,5 +6950,5 @@
  */
 
-bool p4aRunSelectRowsFits(
+bool p4RunSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -6954,22 +6957,22 @@
 );
 
-/** Convert a p4aRunRow into an equivalent psMetadata
+/** Convert a p4RunRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *p4aRunMetadataFromObject(
-    const p4aRunRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *p4RunMetadataFromObject(
+    const p4RunRow  *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A p4aRunRow pointer or NULL on error
- */
-
-p4aRunRow *p4aRunObjectFromMetadata(
+ * @return A p4RunRow pointer or NULL on error
+ */
+
+p4RunRow *p4RunObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as p4aRunRow objects in a psArray
+/** Selects up to limit rows from the database and returns as p4RunRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -6978,10 +6981,10 @@
  */
 
-psArray *p4aRunSelectRowObjects(
+psArray *p4RunSelectRowObjects(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
     unsigned long long limit            ///< Maximum number of elements to return
 );
-/** Deletes a row from the database coresponding to an p4aRun
+/** Deletes a row from the database coresponding to an p4Run
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -6991,7 +6994,7 @@
  */
 
-bool p4aRunDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4aRunRow *object    ///< Object to delete
+bool p4RunDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const p4RunRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -7003,10 +7006,10 @@
  */
 
-long long p4aRunDeleteRowObjects(
+long long p4RunDeleteRowObjects(
     psDB            *dbh,               ///< Database handle
     const psArray   *objects,           ///< Array of objects to delete
     unsigned long long limit            ///< Maximum number of elements to delete 
 );
-/** Formats and prints an array of p4aRunRow objects
+/** Formats and prints an array of p4RunRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7016,10 +7019,10 @@
  */
 
-bool p4aRunPrintObjects(
+bool p4RunPrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4aRunRow objects
+    psArray         *objects,           ///< An array of p4RunRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** Formats and prints an p4aRunRow object
+/** Formats and prints an p4RunRow object
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7029,12 +7032,12 @@
  */
 
-bool p4aRunPrintObject(
+bool p4RunPrintObject(
     FILE            *stream,            ///< a stream
-    p4aRunRow *object,    ///< an p4aRunRow object
+    p4RunRow *object,    ///< an p4RunRow object
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** p4aInputExpRow data structure
- *
- * Structure for representing a single row of p4aInputExp table data.
+/** p4InputExpRow data structure
+ *
+ * Structure for representing a single row of p4InputExp table data.
  */
 
@@ -7043,32 +7046,34 @@
     char            *exp_tag;
     psS32           p3_version;
-} p4aInputExpRow;
-
-/** Creates a new p4aInputExpRow object
- *
- *  @return A new p4aInputExpRow object or NULL on failure.
- */
-
-p4aInputExpRow *p4aInputExpRowAlloc(
+    bool            magiced;
+} p4InputExpRow;
+
+/** Creates a new p4InputExpRow object
+ *
+ *  @return A new p4InputExpRow object or NULL on failure.
+ */
+
+p4InputExpRow *p4InputExpRowAlloc(
     psS32           p4a_id,
     const char      *exp_tag,
-    psS32           p3_version
-);
-
-/** Creates a new p4aInputExp table
- *
- * @return true on success
- */
-
-bool p4aInputExpCreateTable(
+    psS32           p3_version,
+    bool            magiced
+);
+
+/** Creates a new p4InputExp table
+ *
+ * @return true on success
+ */
+
+bool p4InputExpCreateTable(
     psDB            *dbh                ///< Database handle
 );
 
-/** Deletes a p4aInputExp table
- *
- * @return true on success
- */
-
-bool p4aInputExpDropTable(
+/** Deletes a p4InputExp table
+ *
+ * @return true on success
+ */
+
+bool p4InputExpDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -7081,9 +7086,10 @@
  */
 
-bool p4aInputExpInsert(
+bool p4InputExpInsert(
     psDB            *dbh,               ///< Database handle
     psS32           p4a_id,
     const char      *exp_tag,
-    psS32           p3_version
+    psS32           p3_version,
+    bool            magiced
 );
 
@@ -7093,5 +7099,5 @@
  */
 
-long long p4aInputExpDelete(
+long long p4InputExpDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -7099,5 +7105,5 @@
 );
 
-/** Insert a single p4aInputExpRow object into a table
+/** Insert a single p4InputExpRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -7106,10 +7112,10 @@
  */
 
-bool p4aInputExpInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4aInputExpRow  *object             ///< p4aInputExpRow object
-);
-
-/** Insert an array of p4aInputExpRow object into a table
+bool p4InputExpInsertObject(
+    psDB            *dbh,               ///< Database handle
+    p4InputExpRow   *object             ///< p4InputExpRow object
+);
+
+/** Insert an array of p4InputExpRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -7118,10 +7124,10 @@
  */
 
-bool p4aInputExpInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4aInputExpRow objects
-);
-
-/** Insert data from a binary FITS table p4aInputExpRow into the database
+bool p4InputExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p4InputExpRow objects
+);
+
+/** Insert data from a binary FITS table p4InputExpRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -7133,5 +7139,5 @@
  */
 
-bool p4aInputExpInsertFits(
+bool p4InputExpInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -7148,5 +7154,5 @@
  */
 
-bool p4aInputExpSelectRowsFits(
+bool p4InputExpSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7155,22 +7161,22 @@
 );
 
-/** Convert a p4aInputExpRow into an equivalent psMetadata
+/** Convert a p4InputExpRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *p4aInputExpMetadataFromObject(
-    const p4aInputExpRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *p4InputExpMetadataFromObject(
+    const p4InputExpRow *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A p4aInputExpRow pointer or NULL on error
- */
-
-p4aInputExpRow *p4aInputExpObjectFromMetadata(
+ * @return A p4InputExpRow pointer or NULL on error
+ */
+
+p4InputExpRow *p4InputExpObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as p4aInputExpRow objects in a psArray
+/** Selects up to limit rows from the database and returns as p4InputExpRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -7179,10 +7185,10 @@
  */
 
-psArray *p4aInputExpSelectRowObjects(
+psArray *p4InputExpSelectRowObjects(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
     unsigned long long limit            ///< Maximum number of elements to return
 );
-/** Deletes a row from the database coresponding to an p4aInputExp
+/** Deletes a row from the database coresponding to an p4InputExp
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -7192,7 +7198,7 @@
  */
 
-bool p4aInputExpDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4aInputExpRow *object    ///< Object to delete
+bool p4InputExpDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const p4InputExpRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -7204,10 +7210,10 @@
  */
 
-long long p4aInputExpDeleteRowObjects(
+long long p4InputExpDeleteRowObjects(
     psDB            *dbh,               ///< Database handle
     const psArray   *objects,           ///< Array of objects to delete
     unsigned long long limit            ///< Maximum number of elements to delete 
 );
-/** Formats and prints an array of p4aInputExpRow objects
+/** Formats and prints an array of p4InputExpRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7217,10 +7223,10 @@
  */
 
-bool p4aInputExpPrintObjects(
+bool p4InputExpPrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4aInputExpRow objects
+    psArray         *objects,           ///< An array of p4InputExpRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** Formats and prints an p4aInputExpRow object
+/** Formats and prints an p4InputExpRow object
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7230,12 +7236,12 @@
  */
 
-bool p4aInputExpPrintObject(
+bool p4InputExpPrintObject(
     FILE            *stream,            ///< a stream
-    p4aInputExpRow *object,    ///< an p4aInputExpRow object
+    p4InputExpRow *object,    ///< an p4InputExpRow object
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** p4aScfileRow data structure
- *
- * Structure for representing a single row of p4aScfile table data.
+/** p4ScfileRow data structure
+ *
+ * Structure for representing a single row of p4Scfile table data.
  */
 
@@ -7249,12 +7255,12 @@
     psF64           bg;
     psF64           bg_mean_stdev;
-} p4aScfileRow;
-
-/** Creates a new p4aScfileRow object
- *
- *  @return A new p4aScfileRow object or NULL on failure.
- */
-
-p4aScfileRow *p4aScfileRowAlloc(
+} p4ScfileRow;
+
+/** Creates a new p4ScfileRow object
+ *
+ *  @return A new p4ScfileRow object or NULL on failure.
+ */
+
+p4ScfileRow *p4ScfileRowAlloc(
     psS32           p4a_id,
     const char      *skycell_id,
@@ -7267,19 +7273,19 @@
 );
 
-/** Creates a new p4aScfile table
- *
- * @return true on success
- */
-
-bool p4aScfileCreateTable(
+/** Creates a new p4Scfile table
+ *
+ * @return true on success
+ */
+
+bool p4ScfileCreateTable(
     psDB            *dbh                ///< Database handle
 );
 
-/** Deletes a p4aScfile table
- *
- * @return true on success
- */
-
-bool p4aScfileDropTable(
+/** Deletes a p4Scfile table
+ *
+ * @return true on success
+ */
+
+bool p4ScfileDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -7292,5 +7298,5 @@
  */
 
-bool p4aScfileInsert(
+bool p4ScfileInsert(
     psDB            *dbh,               ///< Database handle
     psS32           p4a_id,
@@ -7309,5 +7315,5 @@
  */
 
-long long p4aScfileDelete(
+long long p4ScfileDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -7315,5 +7321,5 @@
 );
 
-/** Insert a single p4aScfileRow object into a table
+/** Insert a single p4ScfileRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -7322,10 +7328,10 @@
  */
 
-bool p4aScfileInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4aScfileRow    *object             ///< p4aScfileRow object
-);
-
-/** Insert an array of p4aScfileRow object into a table
+bool p4ScfileInsertObject(
+    psDB            *dbh,               ///< Database handle
+    p4ScfileRow     *object             ///< p4ScfileRow object
+);
+
+/** Insert an array of p4ScfileRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -7334,10 +7340,10 @@
  */
 
-bool p4aScfileInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4aScfileRow objects
-);
-
-/** Insert data from a binary FITS table p4aScfileRow into the database
+bool p4ScfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p4ScfileRow objects
+);
+
+/** Insert data from a binary FITS table p4ScfileRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -7349,5 +7355,5 @@
  */
 
-bool p4aScfileInsertFits(
+bool p4ScfileInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -7364,5 +7370,5 @@
  */
 
-bool p4aScfileSelectRowsFits(
+bool p4ScfileSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7371,22 +7377,22 @@
 );
 
-/** Convert a p4aScfileRow into an equivalent psMetadata
+/** Convert a p4ScfileRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *p4aScfileMetadataFromObject(
-    const p4aScfileRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *p4ScfileMetadataFromObject(
+    const p4ScfileRow *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A p4aScfileRow pointer or NULL on error
- */
-
-p4aScfileRow *p4aScfileObjectFromMetadata(
+ * @return A p4ScfileRow pointer or NULL on error
+ */
+
+p4ScfileRow *p4ScfileObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as p4aScfileRow objects in a psArray
+/** Selects up to limit rows from the database and returns as p4ScfileRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -7395,10 +7401,10 @@
  */
 
-psArray *p4aScfileSelectRowObjects(
+psArray *p4ScfileSelectRowObjects(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
     unsigned long long limit            ///< Maximum number of elements to return
 );
-/** Deletes a row from the database coresponding to an p4aScfile
+/** Deletes a row from the database coresponding to an p4Scfile
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -7408,7 +7414,7 @@
  */
 
-bool p4aScfileDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4aScfileRow *object    ///< Object to delete
+bool p4ScfileDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const p4ScfileRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -7420,10 +7426,10 @@
  */
 
-long long p4aScfileDeleteRowObjects(
+long long p4ScfileDeleteRowObjects(
     psDB            *dbh,               ///< Database handle
     const psArray   *objects,           ///< Array of objects to delete
     unsigned long long limit            ///< Maximum number of elements to delete 
 );
-/** Formats and prints an array of p4aScfileRow objects
+/** Formats and prints an array of p4ScfileRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7433,10 +7439,10 @@
  */
 
-bool p4aScfilePrintObjects(
+bool p4ScfilePrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4aScfileRow objects
+    psArray         *objects,           ///< An array of p4ScfileRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** Formats and prints an p4aScfileRow object
+/** Formats and prints an p4ScfileRow object
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7446,216 +7452,12 @@
  */
 
-bool p4aScfilePrintObject(
+bool p4ScfilePrintObject(
     FILE            *stream,            ///< a stream
-    p4aScfileRow *object,    ///< an p4aScfileRow object
+    p4ScfileRow *object,    ///< an p4ScfileRow object
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** p4bRunRow data structure
- *
- * Structure for representing a single row of p4bRun table data.
- */
-
-typedef struct {
-    psS32           p4b_id;
-    char            *state;
-    char            *workdir;
-    bool            magic;
-} p4bRunRow;
-
-/** Creates a new p4bRunRow object
- *
- *  @return A new p4bRunRow object or NULL on failure.
- */
-
-p4bRunRow *p4bRunRowAlloc(
-    psS32           p4b_id,
-    const char      *state,
-    const char      *workdir,
-    bool            magic
-);
-
-/** Creates a new p4bRun table
- *
- * @return true on success
- */
-
-bool p4bRunCreateTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Deletes a p4bRun table
- *
- * @return true on success
- */
-
-bool p4bRunDropTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Insert a single row into a table
- *
- * This function constructs and inserts a single row based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4bRunInsert(
-    psDB            *dbh,               ///< Database handle
-    psS32           p4b_id,
-    const char      *state,
-    const char      *workdir,
-    bool            magic
-);
-
-/** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-long long p4bRunDelete(
-    psDB            *dbh,               ///< Database handle
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to delete 
-);
-
-/** Insert a single p4bRunRow object into a table
- *
- * This function constructs and inserts a single row based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4bRunInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4bRunRow       *object             ///< p4bRunRow object
-);
-
-/** Insert an array of p4bRunRow object into a table
- *
- * This function constructs and inserts multiple rows based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4bRunInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4bRunRow objects
-);
-
-/** Insert data from a binary FITS table p4bRunRow into the database
- *
- * This function expects a psFits object with a FITS table as the first
- * extension.  The table must have at least one row of data in it, that is of
- * the appropriate format (number of columns and their type).  All other
- * extensions are ignored.
- *
- * @return true on success
- */
-
-bool p4bRunInsertFits(
-    psDB            *dbh,               ///< Database handle
-    const psFits    *fits               ///< psFits object
-);
-
-/** Selects up to limit from the database and returns them in a binary FITS table
- *
- * This function assumes an empty psFits object and will create a FITS table
- * as the first extension.
- *
- *  See psDBSelectRows() for documentation on the format of where.
- *
- * @return true on success
- */
-
-bool p4bRunSelectRowsFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-
-/** Convert a p4bRunRow into an equivalent psMetadata
- *
- * @return A psMetadata pointer or NULL on error
- */
-
-psMetadata *p4bRunMetadataFromObject(
-    const p4bRunRow *object             ///< fooRow to convert into a psMetadata
-);
-
-/** Convert a psMetadata into an equivalent fooRow
- *
- * @return A p4bRunRow pointer or NULL on error
- */
-
-p4bRunRow *p4bRunObjectFromMetadata(
-    psMetadata      *md                 ///< psMetadata to convert into a fooRow
-);
-/** Selects up to limit rows from the database and returns as p4bRunRow objects in a psArray
- *
- *  See psDBSelectRows() for documentation on the format of where.
- *
- * @return A psArray pointer or NULL on error
- */
-
-psArray *p4bRunSelectRowObjects(
-    psDB            *dbh,               ///< Database handle
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-/** Deletes a row from the database coresponding to an p4bRun
- *
- *  Note that a 'where' search psMetadata is constructed from each object and
- *  used to find rows to delete.
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-bool p4bRunDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4bRunRow *object    ///< Object to delete
-);
-/** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
- *
- *  Note that a 'where' search psMetadata is constructed from each object and
- *  used to find rows to delete.
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-long long p4bRunDeleteRowObjects(
-    psDB            *dbh,               ///< Database handle
-    const psArray   *objects,           ///< Array of objects to delete
-    unsigned long long limit            ///< Maximum number of elements to delete 
-);
-/** Formats and prints an array of p4bRunRow objects
- *
- * When mdcf is set the formated output is in psMetadataConfig
- * format, otherwise it is in a simple tabular format.
- *
- * @return true on success
- */
-
-bool p4bRunPrintObjects(
-    FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4bRunRow objects
-    bool            mdcf                ///< format as mdconfig or simple
-);
-/** Formats and prints an p4bRunRow object
- *
- * When mdcf is set the formated output is in psMetadataConfig
- * format, otherwise it is in a simple tabular format.
- *
- * @return true on success
- */
-
-bool p4bRunPrintObject(
-    FILE            *stream,            ///< a stream
-    p4bRunRow *object,    ///< an p4bRunRow object
-    bool            mdcf                ///< format as mdconfig or simple
-);
-/** p4bInputScfileRow data structure
- *
- * Structure for representing a single row of p4bInputScfile table data.
+/** p4InputScfileRow data structure
+ *
+ * Structure for representing a single row of p4InputScfile table data.
  */
 
@@ -7667,12 +7469,12 @@
     psS32           p3_version;
     char            *kind;
-} p4bInputScfileRow;
-
-/** Creates a new p4bInputScfileRow object
- *
- *  @return A new p4bInputScfileRow object or NULL on failure.
- */
-
-p4bInputScfileRow *p4bInputScfileRowAlloc(
+} p4InputScfileRow;
+
+/** Creates a new p4InputScfileRow object
+ *
+ *  @return A new p4InputScfileRow object or NULL on failure.
+ */
+
+p4InputScfileRow *p4InputScfileRowAlloc(
     psS32           p4b_id,
     const char      *skycell_id,
@@ -7683,19 +7485,19 @@
 );
 
-/** Creates a new p4bInputScfile table
- *
- * @return true on success
- */
-
-bool p4bInputScfileCreateTable(
+/** Creates a new p4InputScfile table
+ *
+ * @return true on success
+ */
+
+bool p4InputScfileCreateTable(
     psDB            *dbh                ///< Database handle
 );
 
-/** Deletes a p4bInputScfile table
- *
- * @return true on success
- */
-
-bool p4bInputScfileDropTable(
+/** Deletes a p4InputScfile table
+ *
+ * @return true on success
+ */
+
+bool p4InputScfileDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -7708,5 +7510,5 @@
  */
 
-bool p4bInputScfileInsert(
+bool p4InputScfileInsert(
     psDB            *dbh,               ///< Database handle
     psS32           p4b_id,
@@ -7723,5 +7525,5 @@
  */
 
-long long p4bInputScfileDelete(
+long long p4InputScfileDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -7729,5 +7531,5 @@
 );
 
-/** Insert a single p4bInputScfileRow object into a table
+/** Insert a single p4InputScfileRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -7736,10 +7538,10 @@
  */
 
-bool p4bInputScfileInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4bInputScfileRow *object             ///< p4bInputScfileRow object
-);
-
-/** Insert an array of p4bInputScfileRow object into a table
+bool p4InputScfileInsertObject(
+    psDB            *dbh,               ///< Database handle
+    p4InputScfileRow *object             ///< p4InputScfileRow object
+);
+
+/** Insert an array of p4InputScfileRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -7748,10 +7550,10 @@
  */
 
-bool p4bInputScfileInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4bInputScfileRow objects
-);
-
-/** Insert data from a binary FITS table p4bInputScfileRow into the database
+bool p4InputScfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p4InputScfileRow objects
+);
+
+/** Insert data from a binary FITS table p4InputScfileRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -7763,5 +7565,5 @@
  */
 
-bool p4bInputScfileInsertFits(
+bool p4InputScfileInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -7778,5 +7580,5 @@
  */
 
-bool p4bInputScfileSelectRowsFits(
+bool p4InputScfileSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7785,22 +7587,22 @@
 );
 
-/** Convert a p4bInputScfileRow into an equivalent psMetadata
+/** Convert a p4InputScfileRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *p4bInputScfileMetadataFromObject(
-    const p4bInputScfileRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *p4InputScfileMetadataFromObject(
+    const p4InputScfileRow *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A p4bInputScfileRow pointer or NULL on error
- */
-
-p4bInputScfileRow *p4bInputScfileObjectFromMetadata(
+ * @return A p4InputScfileRow pointer or NULL on error
+ */
+
+p4InputScfileRow *p4InputScfileObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as p4bInputScfileRow objects in a psArray
+/** Selects up to limit rows from the database and returns as p4InputScfileRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -7809,10 +7611,10 @@
  */
 
-psArray *p4bInputScfileSelectRowObjects(
+psArray *p4InputScfileSelectRowObjects(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
     unsigned long long limit            ///< Maximum number of elements to return
 );
-/** Deletes a row from the database coresponding to an p4bInputScfile
+/** Deletes a row from the database coresponding to an p4InputScfile
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -7822,7 +7624,7 @@
  */
 
-bool p4bInputScfileDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4bInputScfileRow *object    ///< Object to delete
+bool p4InputScfileDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const p4InputScfileRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -7834,10 +7636,10 @@
  */
 
-long long p4bInputScfileDeleteRowObjects(
+long long p4InputScfileDeleteRowObjects(
     psDB            *dbh,               ///< Database handle
     const psArray   *objects,           ///< Array of objects to delete
     unsigned long long limit            ///< Maximum number of elements to delete 
 );
-/** Formats and prints an array of p4bInputScfileRow objects
+/** Formats and prints an array of p4InputScfileRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7847,10 +7649,10 @@
  */
 
-bool p4bInputScfilePrintObjects(
+bool p4InputScfilePrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4bInputScfileRow objects
+    psArray         *objects,           ///< An array of p4InputScfileRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** Formats and prints an p4bInputScfileRow object
+/** Formats and prints an p4InputScfileRow object
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7860,12 +7662,12 @@
  */
 
-bool p4bInputScfilePrintObject(
+bool p4InputScfilePrintObject(
     FILE            *stream,            ///< a stream
-    p4bInputScfileRow *object,    ///< an p4bInputScfileRow object
+    p4InputScfileRow *object,    ///< an p4InputScfileRow object
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** p4bDiffScfileRow data structure
- *
- * Structure for representing a single row of p4bDiffScfile table data.
+/** p4DiffScfileRow data structure
+ *
+ * Structure for representing a single row of p4DiffScfile table data.
  */
 
@@ -7879,12 +7681,12 @@
     psF64           bg;
     psF64           bg_mean_stdev;
-} p4bDiffScfileRow;
-
-/** Creates a new p4bDiffScfileRow object
- *
- *  @return A new p4bDiffScfileRow object or NULL on failure.
- */
-
-p4bDiffScfileRow *p4bDiffScfileRowAlloc(
+} p4DiffScfileRow;
+
+/** Creates a new p4DiffScfileRow object
+ *
+ *  @return A new p4DiffScfileRow object or NULL on failure.
+ */
+
+p4DiffScfileRow *p4DiffScfileRowAlloc(
     psS32           p4b_id,
     const char      *skycell_id,
@@ -7897,19 +7699,19 @@
 );
 
-/** Creates a new p4bDiffScfile table
- *
- * @return true on success
- */
-
-bool p4bDiffScfileCreateTable(
+/** Creates a new p4DiffScfile table
+ *
+ * @return true on success
+ */
+
+bool p4DiffScfileCreateTable(
     psDB            *dbh                ///< Database handle
 );
 
-/** Deletes a p4bDiffScfile table
- *
- * @return true on success
- */
-
-bool p4bDiffScfileDropTable(
+/** Deletes a p4DiffScfile table
+ *
+ * @return true on success
+ */
+
+bool p4DiffScfileDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -7922,5 +7724,5 @@
  */
 
-bool p4bDiffScfileInsert(
+bool p4DiffScfileInsert(
     psDB            *dbh,               ///< Database handle
     psS32           p4b_id,
@@ -7939,5 +7741,5 @@
  */
 
-long long p4bDiffScfileDelete(
+long long p4DiffScfileDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -7945,5 +7747,5 @@
 );
 
-/** Insert a single p4bDiffScfileRow object into a table
+/** Insert a single p4DiffScfileRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -7952,10 +7754,10 @@
  */
 
-bool p4bDiffScfileInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4bDiffScfileRow *object             ///< p4bDiffScfileRow object
-);
-
-/** Insert an array of p4bDiffScfileRow object into a table
+bool p4DiffScfileInsertObject(
+    psDB            *dbh,               ///< Database handle
+    p4DiffScfileRow *object             ///< p4DiffScfileRow object
+);
+
+/** Insert an array of p4DiffScfileRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -7964,10 +7766,10 @@
  */
 
-bool p4bDiffScfileInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4bDiffScfileRow objects
-);
-
-/** Insert data from a binary FITS table p4bDiffScfileRow into the database
+bool p4DiffScfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p4DiffScfileRow objects
+);
+
+/** Insert data from a binary FITS table p4DiffScfileRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -7979,5 +7781,5 @@
  */
 
-bool p4bDiffScfileInsertFits(
+bool p4DiffScfileInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -7994,5 +7796,5 @@
  */
 
-bool p4bDiffScfileSelectRowsFits(
+bool p4DiffScfileSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -8001,22 +7803,22 @@
 );
 
-/** Convert a p4bDiffScfileRow into an equivalent psMetadata
+/** Convert a p4DiffScfileRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *p4bDiffScfileMetadataFromObject(
-    const p4bDiffScfileRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *p4DiffScfileMetadataFromObject(
+    const p4DiffScfileRow *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A p4bDiffScfileRow pointer or NULL on error
- */
-
-p4bDiffScfileRow *p4bDiffScfileObjectFromMetadata(
+ * @return A p4DiffScfileRow pointer or NULL on error
+ */
+
+p4DiffScfileRow *p4DiffScfileObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as p4bDiffScfileRow objects in a psArray
+/** Selects up to limit rows from the database and returns as p4DiffScfileRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -8025,10 +7827,10 @@
  */
 
-psArray *p4bDiffScfileSelectRowObjects(
+psArray *p4DiffScfileSelectRowObjects(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
     unsigned long long limit            ///< Maximum number of elements to return
 );
-/** Deletes a row from the database coresponding to an p4bDiffScfile
+/** Deletes a row from the database coresponding to an p4DiffScfile
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -8038,7 +7840,7 @@
  */
 
-bool p4bDiffScfileDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4bDiffScfileRow *object    ///< Object to delete
+bool p4DiffScfileDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const p4DiffScfileRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -8050,10 +7852,10 @@
  */
 
-long long p4bDiffScfileDeleteRowObjects(
+long long p4DiffScfileDeleteRowObjects(
     psDB            *dbh,               ///< Database handle
     const psArray   *objects,           ///< Array of objects to delete
     unsigned long long limit            ///< Maximum number of elements to delete 
 );
-/** Formats and prints an array of p4bDiffScfileRow objects
+/** Formats and prints an array of p4DiffScfileRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -8063,10 +7865,10 @@
  */
 
-bool p4bDiffScfilePrintObjects(
+bool p4DiffScfilePrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4bDiffScfileRow objects
+    psArray         *objects,           ///< An array of p4DiffScfileRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** Formats and prints an p4bDiffScfileRow object
+/** Formats and prints an p4DiffScfileRow object
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -8076,412 +7878,7 @@
  */
 
-bool p4bDiffScfilePrintObject(
+bool p4DiffScfilePrintObject(
     FILE            *stream,            ///< a stream
-    p4bDiffScfileRow *object,    ///< an p4bDiffScfileRow object
-    bool            mdcf                ///< format as mdconfig or simple
-);
-/** p4cRunRow data structure
- *
- * Structure for representing a single row of p4cRun table data.
- */
-
-typedef struct {
-    psS32           p4c_id;
-    char            *state;
-    char            *workdir;
-    bool            magic;
-} p4cRunRow;
-
-/** Creates a new p4cRunRow object
- *
- *  @return A new p4cRunRow object or NULL on failure.
- */
-
-p4cRunRow *p4cRunRowAlloc(
-    psS32           p4c_id,
-    const char      *state,
-    const char      *workdir,
-    bool            magic
-);
-
-/** Creates a new p4cRun table
- *
- * @return true on success
- */
-
-bool p4cRunCreateTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Deletes a p4cRun table
- *
- * @return true on success
- */
-
-bool p4cRunDropTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Insert a single row into a table
- *
- * This function constructs and inserts a single row based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4cRunInsert(
-    psDB            *dbh,               ///< Database handle
-    psS32           p4c_id,
-    const char      *state,
-    const char      *workdir,
-    bool            magic
-);
-
-/** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-long long p4cRunDelete(
-    psDB            *dbh,               ///< Database handle
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to delete 
-);
-
-/** Insert a single p4cRunRow object into a table
- *
- * This function constructs and inserts a single row based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4cRunInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4cRunRow       *object             ///< p4cRunRow object
-);
-
-/** Insert an array of p4cRunRow object into a table
- *
- * This function constructs and inserts multiple rows based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4cRunInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4cRunRow objects
-);
-
-/** Insert data from a binary FITS table p4cRunRow into the database
- *
- * This function expects a psFits object with a FITS table as the first
- * extension.  The table must have at least one row of data in it, that is of
- * the appropriate format (number of columns and their type).  All other
- * extensions are ignored.
- *
- * @return true on success
- */
-
-bool p4cRunInsertFits(
-    psDB            *dbh,               ///< Database handle
-    const psFits    *fits               ///< psFits object
-);
-
-/** Selects up to limit from the database and returns them in a binary FITS table
- *
- * This function assumes an empty psFits object and will create a FITS table
- * as the first extension.
- *
- *  See psDBSelectRows() for documentation on the format of where.
- *
- * @return true on success
- */
-
-bool p4cRunSelectRowsFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-
-/** Convert a p4cRunRow into an equivalent psMetadata
- *
- * @return A psMetadata pointer or NULL on error
- */
-
-psMetadata *p4cRunMetadataFromObject(
-    const p4cRunRow *object             ///< fooRow to convert into a psMetadata
-);
-
-/** Convert a psMetadata into an equivalent fooRow
- *
- * @return A p4cRunRow pointer or NULL on error
- */
-
-p4cRunRow *p4cRunObjectFromMetadata(
-    psMetadata      *md                 ///< psMetadata to convert into a fooRow
-);
-/** Selects up to limit rows from the database and returns as p4cRunRow objects in a psArray
- *
- *  See psDBSelectRows() for documentation on the format of where.
- *
- * @return A psArray pointer or NULL on error
- */
-
-psArray *p4cRunSelectRowObjects(
-    psDB            *dbh,               ///< Database handle
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-/** Deletes a row from the database coresponding to an p4cRun
- *
- *  Note that a 'where' search psMetadata is constructed from each object and
- *  used to find rows to delete.
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-bool p4cRunDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4cRunRow *object    ///< Object to delete
-);
-/** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
- *
- *  Note that a 'where' search psMetadata is constructed from each object and
- *  used to find rows to delete.
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-long long p4cRunDeleteRowObjects(
-    psDB            *dbh,               ///< Database handle
-    const psArray   *objects,           ///< Array of objects to delete
-    unsigned long long limit            ///< Maximum number of elements to delete 
-);
-/** Formats and prints an array of p4cRunRow objects
- *
- * When mdcf is set the formated output is in psMetadataConfig
- * format, otherwise it is in a simple tabular format.
- *
- * @return true on success
- */
-
-bool p4cRunPrintObjects(
-    FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4cRunRow objects
-    bool            mdcf                ///< format as mdconfig or simple
-);
-/** Formats and prints an p4cRunRow object
- *
- * When mdcf is set the formated output is in psMetadataConfig
- * format, otherwise it is in a simple tabular format.
- *
- * @return true on success
- */
-
-bool p4cRunPrintObject(
-    FILE            *stream,            ///< a stream
-    p4cRunRow *object,    ///< an p4cRunRow object
-    bool            mdcf                ///< format as mdconfig or simple
-);
-/** p4cInputExpRow data structure
- *
- * Structure for representing a single row of p4cInputExp table data.
- */
-
-typedef struct {
-    psS32           p4c_id;
-    char            *exp_tag;
-    psS32           p3_version;
-} p4cInputExpRow;
-
-/** Creates a new p4cInputExpRow object
- *
- *  @return A new p4cInputExpRow object or NULL on failure.
- */
-
-p4cInputExpRow *p4cInputExpRowAlloc(
-    psS32           p4c_id,
-    const char      *exp_tag,
-    psS32           p3_version
-);
-
-/** Creates a new p4cInputExp table
- *
- * @return true on success
- */
-
-bool p4cInputExpCreateTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Deletes a p4cInputExp table
- *
- * @return true on success
- */
-
-bool p4cInputExpDropTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Insert a single row into a table
- *
- * This function constructs and inserts a single row based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4cInputExpInsert(
-    psDB            *dbh,               ///< Database handle
-    psS32           p4c_id,
-    const char      *exp_tag,
-    psS32           p3_version
-);
-
-/** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-long long p4cInputExpDelete(
-    psDB            *dbh,               ///< Database handle
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to delete 
-);
-
-/** Insert a single p4cInputExpRow object into a table
- *
- * This function constructs and inserts a single row based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4cInputExpInsertObject(
-    psDB            *dbh,               ///< Database handle
-    p4cInputExpRow  *object             ///< p4cInputExpRow object
-);
-
-/** Insert an array of p4cInputExpRow object into a table
- *
- * This function constructs and inserts multiple rows based on it's parameters.
- *
- * @return true on success
- */
-
-bool p4cInputExpInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of p4cInputExpRow objects
-);
-
-/** Insert data from a binary FITS table p4cInputExpRow into the database
- *
- * This function expects a psFits object with a FITS table as the first
- * extension.  The table must have at least one row of data in it, that is of
- * the appropriate format (number of columns and their type).  All other
- * extensions are ignored.
- *
- * @return true on success
- */
-
-bool p4cInputExpInsertFits(
-    psDB            *dbh,               ///< Database handle
-    const psFits    *fits               ///< psFits object
-);
-
-/** Selects up to limit from the database and returns them in a binary FITS table
- *
- * This function assumes an empty psFits object and will create a FITS table
- * as the first extension.
- *
- *  See psDBSelectRows() for documentation on the format of where.
- *
- * @return true on success
- */
-
-bool p4cInputExpSelectRowsFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-
-/** Convert a p4cInputExpRow into an equivalent psMetadata
- *
- * @return A psMetadata pointer or NULL on error
- */
-
-psMetadata *p4cInputExpMetadataFromObject(
-    const p4cInputExpRow *object             ///< fooRow to convert into a psMetadata
-);
-
-/** Convert a psMetadata into an equivalent fooRow
- *
- * @return A p4cInputExpRow pointer or NULL on error
- */
-
-p4cInputExpRow *p4cInputExpObjectFromMetadata(
-    psMetadata      *md                 ///< psMetadata to convert into a fooRow
-);
-/** Selects up to limit rows from the database and returns as p4cInputExpRow objects in a psArray
- *
- *  See psDBSelectRows() for documentation on the format of where.
- *
- * @return A psArray pointer or NULL on error
- */
-
-psArray *p4cInputExpSelectRowObjects(
-    psDB            *dbh,               ///< Database handle
-    const psMetadata *where,            ///< Row match criteria
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-/** Deletes a row from the database coresponding to an p4cInputExp
- *
- *  Note that a 'where' search psMetadata is constructed from each object and
- *  used to find rows to delete.
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-bool p4cInputExpDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const p4cInputExpRow *object    ///< Object to delete
-);
-/** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
- *
- *  Note that a 'where' search psMetadata is constructed from each object and
- *  used to find rows to delete.
- *
- * @return A The number of rows removed or a negative value on error
- */
-
-long long p4cInputExpDeleteRowObjects(
-    psDB            *dbh,               ///< Database handle
-    const psArray   *objects,           ///< Array of objects to delete
-    unsigned long long limit            ///< Maximum number of elements to delete 
-);
-/** Formats and prints an array of p4cInputExpRow objects
- *
- * When mdcf is set the formated output is in psMetadataConfig
- * format, otherwise it is in a simple tabular format.
- *
- * @return true on success
- */
-
-bool p4cInputExpPrintObjects(
-    FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of p4cInputExpRow objects
-    bool            mdcf                ///< format as mdconfig or simple
-);
-/** Formats and prints an p4cInputExpRow object
- *
- * When mdcf is set the formated output is in psMetadataConfig
- * format, otherwise it is in a simple tabular format.
- *
- * @return true on success
- */
-
-bool p4cInputExpPrintObject(
-    FILE            *stream,            ///< a stream
-    p4cInputExpRow *object,    ///< an p4cInputExpRow object
+    p4DiffScfileRow *object,    ///< an p4DiffScfileRow object
     bool            mdcf                ///< format as mdconfig or simple
 );
Index: /trunk/ippdb/tests/alloc.c
===================================================================
--- /trunk/ippdb/tests/alloc.c	(revision 11719)
+++ /trunk/ippdb/tests/alloc.c	(revision 11720)
@@ -1408,7 +1408,7 @@
 
     {
-        p4aRunRow       *object;
-
-        object = p4aRunRowAlloc(-32, "a string", "a string", true    );
+        p4RunRow        *object;
+
+        object = p4RunRowAlloc(-32, "a string", "a string", "a string", "0001-01-01T00:00:00Z"    );
 
         if (!object) {
@@ -1420,4 +1420,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->mode, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->state, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -1428,16 +1432,15 @@
             exit(EXIT_FAILURE);
         }
-        if (!object->magic == true) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        p4aInputExpRow  *object;
-
-        object = p4aInputExpRowAlloc(-32, "a string", -32    );
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        p4InputExpRow   *object;
+
+        object = p4InputExpRowAlloc(-32, "a string", -32, true    );
 
         if (!object) {
@@ -1457,12 +1460,16 @@
             exit(EXIT_FAILURE);
         }
-
-        psFree(object);
-    }
-
-    {
-        p4aScfileRow    *object;
-
-        object = p4aScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64    );
+        if (!object->magiced == true) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        p4ScfileRow     *object;
+
+        object = p4ScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64    );
 
         if (!object) {
@@ -1507,7 +1514,7 @@
 
     {
-        p4bRunRow       *object;
-
-        object = p4bRunRowAlloc(-32, "a string", "a string", true    );
+        p4InputScfileRow *object;
+
+        object = p4InputScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string"    );
 
         if (!object) {
@@ -1519,24 +1526,32 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->state, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->magic == true) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        p4bInputScfileRow *object;
-
-        object = p4bInputScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string"    );
+        if (strncmp(object->skycell_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->tess_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->p3_version == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->kind, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        p4DiffScfileRow *object;
+
+        object = p4DiffScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64    );
 
         if (!object) {
@@ -1564,41 +1579,4 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->kind, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        p4bDiffScfileRow *object;
-
-        object = p4bDiffScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64    );
-
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!object->p4b_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->skycell_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->tess_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->p3_version == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -1610,58 +1588,4 @@
         }
         if (!object->bg_mean_stdev == 64.64) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        p4cRunRow       *object;
-
-        object = p4cRunRowAlloc(-32, "a string", "a string", true    );
-
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!object->p4c_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->state, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->magic == true) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        p4cInputExpRow  *object;
-
-        object = p4cInputExpRowAlloc(-32, "a string", -32    );
-
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!object->p4c_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->p3_version == -32) {
             psFree(object);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/createtable.c
===================================================================
--- /trunk/ippdb/tests/createtable.c	(revision 11719)
+++ /trunk/ippdb/tests/createtable.c	(revision 11720)
@@ -478,110 +478,65 @@
         }
 
-        if(!p4aRunCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4aInputExpCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4aScfileCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4bRunCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4bInputScfileCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4bDiffScfileCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4cRunCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!p4cInputExpCreateTable(dbh)) {
+        if(!p4RunCreateTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if(!p4InputExpCreateTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if(!p4ScfileCreateTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if(!p4InputScfileCreateTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if(!p4DiffScfileCreateTable(dbh)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/dbcleanup.c
===================================================================
--- /trunk/ippdb/tests/dbcleanup.c	(revision 11719)
+++ /trunk/ippdb/tests/dbcleanup.c	(revision 11720)
@@ -42,12 +42,9 @@
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidExp");
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detRunSummary");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4aRun");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4aInputExp");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4aScfile");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4bRun");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4bInputScfile");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4bDiffScfile");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4cRun");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4cInputExp");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4Run");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4InputExp");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4Scfile");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4InputScfile");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4DiffScfile");
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4MagicMaskImfile");
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyCell");
Index: /trunk/ippdb/tests/dbsetup.c
===================================================================
--- /trunk/ippdb/tests/dbsetup.c	(revision 11719)
+++ /trunk/ippdb/tests/dbsetup.c	(revision 11720)
@@ -106,27 +106,18 @@
     detRunSummaryCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4aRun");
-    p4aRunCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4Run");
+    p4RunCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4aInputExp");
-    p4aInputExpCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4InputExp");
+    p4InputExpCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4aScfile");
-    p4aScfileCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4Scfile");
+    p4ScfileCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4bRun");
-    p4bRunCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4InputScfile");
+    p4InputScfileCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4bInputScfile");
-    p4bInputScfileCreateTable(dbh);
-
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4bDiffScfile");
-    p4bDiffScfileCreateTable(dbh);
-
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4cRun");
-    p4cRunCreateTable(dbh);
-
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4cInputExp");
-    p4cInputExpCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4DiffScfile");
+    p4DiffScfileCreateTable(dbh);
 
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p4MagicMaskImfile");
Index: /trunk/ippdb/tests/droptable.c
===================================================================
--- /trunk/ippdb/tests/droptable.c	(revision 11719)
+++ /trunk/ippdb/tests/droptable.c	(revision 11720)
@@ -478,110 +478,65 @@
         }
 
-        if (!p4aRunDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aInputExpDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aScfileDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bRunDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bInputScfileDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bDiffScfileDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cRunDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cInputExpDropTable(dbh)) {
+        if (!p4RunDropTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputExpDropTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4ScfileDropTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputScfileDropTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4DiffScfileDropTable(dbh)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insert.c
===================================================================
--- /trunk/ippdb/tests/insert.c	(revision 11719)
+++ /trunk/ippdb/tests/insert.c	(revision 11720)
@@ -478,110 +478,65 @@
         }
 
-        if (!p4aRunInsert(dbh, -32, "a string", "a string", true)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aInputExpInsert(dbh, -32, "a string", -32)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aScfileInsert(dbh, -32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bRunInsert(dbh, -32, "a string", "a string", true)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bInputScfileInsert(dbh, -32, "a string", "a string", "a string", -32, "a string")) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bDiffScfileInsert(dbh, -32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cRunInsert(dbh, -32, "a string", "a string", true)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cInputExpInsert(dbh, -32, "a string", -32)) {
+        if (!p4RunInsert(dbh, -32, "a string", "a string", "a string", "0001-01-01T00:00:00Z")) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputExpInsert(dbh, -32, "a string", -32, true)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4ScfileInsert(dbh, -32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputScfileInsert(dbh, -32, "a string", "a string", "a string", -32, "a string")) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4DiffScfileInsert(dbh, -32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertfits.c
===================================================================
--- /trunk/ippdb/tests/insertfits.c	(revision 11719)
+++ /trunk/ippdb/tests/insertfits.c	(revision 11720)
@@ -830,187 +830,109 @@
         }
 
-        if (!p4aRunInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aInputExpInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aScfileInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bRunInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bInputScfileInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bDiffScfileInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cRunInsertFits(dbh, fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        // open a temp
-        fits = psFitsOpen(TMP_FILENAME, "r");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cInputExpInsertFits(dbh, fits)) {
+        if (!p4RunInsertFits(dbh, fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!psFitsClose(fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        // open a temp
+        fits = psFitsOpen(TMP_FILENAME, "r");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputExpInsertFits(dbh, fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!psFitsClose(fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        // open a temp
+        fits = psFitsOpen(TMP_FILENAME, "r");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4ScfileInsertFits(dbh, fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!psFitsClose(fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        // open a temp
+        fits = psFitsOpen(TMP_FILENAME, "r");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputScfileInsertFits(dbh, fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!psFitsClose(fits)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        // open a temp
+        fits = psFitsOpen(TMP_FILENAME, "r");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4DiffScfileInsertFits(dbh, fits)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertobject.c
===================================================================
--- /trunk/ippdb/tests/insertobject.c	(revision 11719)
+++ /trunk/ippdb/tests/insertobject.c	(revision 11720)
@@ -689,171 +689,105 @@
     {
         psDB            *dbh;
-        p4aRunRow       *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4aRunRowAlloc(-32, "a string", "a string", true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aRunInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4aInputExpRow  *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4aInputExpRowAlloc(-32, "a string", -32);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aInputExpInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4aScfileRow    *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4aScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aScfileInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4bRunRow       *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4bRunRowAlloc(-32, "a string", "a string", true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bRunInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4bInputScfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4bInputScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string");
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bInputScfileInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4bDiffScfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4bDiffScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bDiffScfileInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4cRunRow       *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4cRunRowAlloc(-32, "a string", "a string", true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cRunInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p4cInputExpRow  *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4cInputExpRowAlloc(-32, "a string", -32);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cInputExpInsertObject(dbh, object)) {
+        p4RunRow        *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4RunRowAlloc(-32, "a string", "a string", "a string", "0001-01-01T00:00:00Z");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4RunInsertObject(dbh, object)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        p4InputExpRow   *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4InputExpRowAlloc(-32, "a string", -32, true);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputExpInsertObject(dbh, object)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        p4ScfileRow     *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4ScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4ScfileInsertObject(dbh, object)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        p4InputScfileRow *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4InputScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputScfileInsertObject(dbh, object)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        p4DiffScfileRow *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4DiffScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4DiffScfileInsertObject(dbh, object)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/metadatafromobject.c
===================================================================
--- /trunk/ippdb/tests/metadatafromobject.c	(revision 11719)
+++ /trunk/ippdb/tests/metadatafromobject.c	(revision 11720)
@@ -1643,13 +1643,13 @@
     {
         psMetadata      *md;
-        p4aRunRow       *object;
-        bool            status;
-
-        object = p4aRunRowAlloc(-32, "a string", "a string", true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4aRunMetadataFromObject(object);
+        p4RunRow        *object;
+        bool            status;
+
+        object = p4RunRowAlloc(-32, "a string", "a string", "a string", "0001-01-01T00:00:00Z");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = p4RunMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
@@ -1662,4 +1662,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(psMetadataLookupPtr(&status, md, "mode"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(psMetadataLookupPtr(&status, md, "state"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
@@ -1670,23 +1674,22 @@
             exit(EXIT_FAILURE);
         }
-        if (!psMetadataLookupBool(&status, md, "magic") == true) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        p4aInputExpRow  *object;
-        bool            status;
-
-        object = p4aInputExpRowAlloc(-32, "a string", -32);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4aInputExpMetadataFromObject(object);
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+    }
+
+    {
+        psMetadata      *md;
+        p4InputExpRow   *object;
+        bool            status;
+
+        object = p4InputExpRowAlloc(-32, "a string", -32, true);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = p4InputExpMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
@@ -1707,19 +1710,23 @@
             exit(EXIT_FAILURE);
         }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        p4aScfileRow    *object;
-        bool            status;
-
-        object = p4aScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4aScfileMetadataFromObject(object);
+        if (!psMetadataLookupBool(&status, md, "magiced") == true) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+    }
+
+    {
+        psMetadata      *md;
+        p4ScfileRow     *object;
+        bool            status;
+
+        object = p4ScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = p4ScfileMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
@@ -1766,13 +1773,13 @@
     {
         psMetadata      *md;
-        p4bRunRow       *object;
-        bool            status;
-
-        object = p4bRunRowAlloc(-32, "a string", "a string", true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4bRunMetadataFromObject(object);
+        p4InputScfileRow *object;
+        bool            status;
+
+        object = p4InputScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = p4InputScfileMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
@@ -1785,31 +1792,39 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(psMetadataLookupPtr(&status, md, "state"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "workdir"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataLookupBool(&status, md, "magic") == true) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        p4bInputScfileRow *object;
-        bool            status;
-
-        object = p4bInputScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string");
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4bInputScfileMetadataFromObject(object);
+        if (strncmp(psMetadataLookupPtr(&status, md, "skycell_id"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "tess_id"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupS32(&status, md, "p3_version") == -32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "kind"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+    }
+
+    {
+        psMetadata      *md;
+        p4DiffScfileRow *object;
+        bool            status;
+
+        object = p4DiffScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = p4DiffScfileMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
@@ -1838,49 +1853,4 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(psMetadataLookupPtr(&status, md, "kind"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        p4bDiffScfileRow *object;
-        bool            status;
-
-        object = p4bDiffScfileRowAlloc(-32, "a string", "a string", "a string", -32, "a string", 64.64, 64.64);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4bDiffScfileMetadataFromObject(object);
-        if (!md) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-
-        if (!psMetadataLookupS32(&status, md, "p4b_id") == -32) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "skycell_id"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "tess_id"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataLookupS32(&status, md, "p3_version") == -32) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
         if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
@@ -1892,74 +1862,4 @@
         }
         if (!psMetadataLookupF64(&status, md, "bg_mean_stdev") == 64.64) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        p4cRunRow       *object;
-        bool            status;
-
-        object = p4cRunRowAlloc(-32, "a string", "a string", true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4cRunMetadataFromObject(object);
-        if (!md) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-
-        if (!psMetadataLookupS32(&status, md, "p4c_id") == -32) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "state"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "workdir"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataLookupBool(&status, md, "magic") == true) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        p4cInputExpRow  *object;
-        bool            status;
-
-        object = p4cInputExpRowAlloc(-32, "a string", -32);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = p4cInputExpMetadataFromObject(object);
-        if (!md) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-
-        if (!psMetadataLookupS32(&status, md, "p4c_id") == -32) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataLookupS32(&status, md, "p3_version") == -32) {
             psFree(md);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/objectfrommetadata.c
===================================================================
--- /trunk/ippdb/tests/objectfrommetadata.c	(revision 11719)
+++ /trunk/ippdb/tests/objectfrommetadata.c	(revision 11720)
@@ -2532,5 +2532,5 @@
     {
         psMetadata      *md;
-        p4aRunRow       *object;
+        p4RunRow        *object;
 
         md = psMetadataAlloc();
@@ -2539,4 +2539,8 @@
             exit(EXIT_FAILURE);
         }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "mode", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, "a string")) {
             psFree(md);
@@ -2547,10 +2551,9 @@
             exit(EXIT_FAILURE);
         }
-        if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, true)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4aRunObjectFromMetadata(md);
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4RunObjectFromMetadata(md);
         if (!object) {
             psFree(md);
@@ -2564,4 +2567,8 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->mode, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->state, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -2572,15 +2579,14 @@
             exit(EXIT_FAILURE);
         }
-        if (!object->magic == true) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        p4aInputExpRow  *object;
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        p4InputExpRow   *object;
 
         md = psMetadataAlloc();
@@ -2597,6 +2603,10 @@
             exit(EXIT_FAILURE);
         }
-
-        object = p4aInputExpObjectFromMetadata(md);
+        if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, true)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4InputExpObjectFromMetadata(md);
         if (!object) {
             psFree(md);
@@ -2618,11 +2628,15 @@
             exit(EXIT_FAILURE);
         }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        p4aScfileRow    *object;
+        if (!object->magiced == true) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        p4ScfileRow     *object;
 
         md = psMetadataAlloc();
@@ -2660,5 +2674,5 @@
         }
 
-        object = p4aScfileObjectFromMetadata(md);
+        object = p4ScfileObjectFromMetadata(md);
         if (!object) {
             psFree(md);
@@ -2706,5 +2720,5 @@
     {
         psMetadata      *md;
-        p4bRunRow       *object;
+        p4InputScfileRow *object;
 
         md = psMetadataAlloc();
@@ -2713,18 +2727,26 @@
             exit(EXIT_FAILURE);
         }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "workdir", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, true)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4bRunObjectFromMetadata(md);
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "skycell_id", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "tess_id", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, -32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "kind", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4InputScfileObjectFromMetadata(md);
         if (!object) {
             psFree(md);
@@ -2738,23 +2760,31 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->state, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->magic == true) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        p4bInputScfileRow *object;
+        if (strncmp(object->skycell_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->tess_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->p3_version == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->kind, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        p4DiffScfileRow *object;
 
         md = psMetadataAlloc();
@@ -2779,10 +2809,18 @@
             exit(EXIT_FAILURE);
         }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "kind", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4bInputScfileObjectFromMetadata(md);
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        object = p4DiffScfileObjectFromMetadata(md);
         if (!object) {
             psFree(md);
@@ -2812,78 +2850,4 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->kind, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        p4bDiffScfileRow *object;
-
-        md = psMetadataAlloc();
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "p4b_id", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "skycell_id", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "tess_id", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4bDiffScfileObjectFromMetadata(md);
-        if (!object) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-
-        if (!object->p4b_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->skycell_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->tess_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->p3_version == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -2895,96 +2859,4 @@
         }
         if (!object->bg_mean_stdev == 64.64) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        p4cRunRow       *object;
-
-        md = psMetadataAlloc();
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "p4c_id", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "workdir", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAdd(md, PS_LIST_TAIL, "magic", PS_DATA_BOOL, NULL, true)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4cRunObjectFromMetadata(md);
-        if (!object) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-
-        if (!object->p4c_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->state, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->workdir, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->magic == true) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        p4cInputExpRow  *object;
-
-        md = psMetadataAlloc();
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "p4c_id", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = p4cInputExpObjectFromMetadata(md);
-        if (!object) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-
-        if (!object->p4c_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->p3_version == -32) {
             psFree(object);
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/selectrowsfits.c
===================================================================
--- /trunk/ippdb/tests/selectrowsfits.c	(revision 11719)
+++ /trunk/ippdb/tests/selectrowsfits.c	(revision 11720)
@@ -703,159 +703,93 @@
         }
 
-        if (!p4aRunSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aInputExpSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4aScfileSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bRunSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bInputScfileSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4bDiffScfileSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cRunSelectRowsFits(dbh, fits, NULL, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(fits);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psFits          *fits;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p4cInputExpSelectRowsFits(dbh, fits, NULL, 1)) {
+        if (!p4RunSelectRowsFits(dbh, fits, NULL, 1)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(fits);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        fits = psFitsOpen(TMP_FILENAME, "w");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputExpSelectRowsFits(dbh, fits, NULL, 1)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(fits);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        fits = psFitsOpen(TMP_FILENAME, "w");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4ScfileSelectRowsFits(dbh, fits, NULL, 1)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(fits);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        fits = psFitsOpen(TMP_FILENAME, "w");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4InputScfileSelectRowsFits(dbh, fits, NULL, 1)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(fits);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        psFits          *fits;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        fits = psFitsOpen(TMP_FILENAME, "w");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!p4DiffScfileSelectRowsFits(dbh, fits, NULL, 1)) {
             exit(EXIT_FAILURE);
         }
