Index: /trunk/ippdb/Makefile.am
===================================================================
--- /trunk/ippdb/Makefile.am	(revision 8379)
+++ /trunk/ippdb/Makefile.am	(revision 8380)
@@ -40,9 +40,9 @@
     $(top_builddir)/docs/man/man3/detMasterFrameRow.3 \
     $(top_builddir)/docs/man/man3/detMasterImfileRow.3 \
-    $(top_builddir)/docs/man/man3/detResidImfileAnalysisRow.3 \
-    $(top_builddir)/docs/man/man3/detResidExpAnalysisRow.3 
+    $(top_builddir)/docs/man/man3/detResidImfileRow.3 \
+    $(top_builddir)/docs/man/man3/detResidExpRow.3 
 
 
-docs/man/man3/ippdb.3 docs/man/man3/weatherRow.3 docs/man/man3/skyp_transparencyRow.3 docs/man/man3/skyp_absorptionRow.3 docs/man/man3/skyp_emissionRow.3 docs/man/man3/dimmRow.3 docs/man/man3/skyp_irRow.3 docs/man/man3/domeRow.3 docs/man/man3/telescopeRow.3 docs/man/man3/summitExpRow.3 docs/man/man3/pzPendingExpRow.3 docs/man/man3/pzPendingImfileRow.3 docs/man/man3/newExpRow.3 docs/man/man3/newImfileRow.3 docs/man/man3/rawDetrendExpRow.3 docs/man/man3/rawScienceExpRow.3 docs/man/man3/rawImfileRow.3 docs/man/man3/p1PendingExpRow.3 docs/man/man3/p2PendingExpRow.3 docs/man/man3/p2PendingImfileRow.3 docs/man/man3/p2DoneExpRow.3 docs/man/man3/p2DoneImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/detRunRow.3 docs/man/man3/detInputExpRow.3 docs/man/man3/detProcessedImfileRow.3 docs/man/man3/detStackedImfileRow.3 docs/man/man3/detNormalizedStatImfileRow.3 docs/man/man3/detNormalizedImfileRow.3 docs/man/man3/detMasterFrameRow.3 docs/man/man3/detMasterImfileRow.3 docs/man/man3/detResidImfileAnalysisRow.3 docs/man/man3/detResidExpAnalysisRow.3:
+docs/man/man3/ippdb.3 docs/man/man3/weatherRow.3 docs/man/man3/skyp_transparencyRow.3 docs/man/man3/skyp_absorptionRow.3 docs/man/man3/skyp_emissionRow.3 docs/man/man3/dimmRow.3 docs/man/man3/skyp_irRow.3 docs/man/man3/domeRow.3 docs/man/man3/telescopeRow.3 docs/man/man3/summitExpRow.3 docs/man/man3/pzPendingExpRow.3 docs/man/man3/pzPendingImfileRow.3 docs/man/man3/newExpRow.3 docs/man/man3/newImfileRow.3 docs/man/man3/rawDetrendExpRow.3 docs/man/man3/rawScienceExpRow.3 docs/man/man3/rawImfileRow.3 docs/man/man3/p1PendingExpRow.3 docs/man/man3/p2PendingExpRow.3 docs/man/man3/p2PendingImfileRow.3 docs/man/man3/p2DoneExpRow.3 docs/man/man3/p2DoneImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/detRunRow.3 docs/man/man3/detInputExpRow.3 docs/man/man3/detProcessedImfileRow.3 docs/man/man3/detStackedImfileRow.3 docs/man/man3/detNormalizedStatImfileRow.3 docs/man/man3/detNormalizedImfileRow.3 docs/man/man3/detMasterFrameRow.3 docs/man/man3/detMasterImfileRow.3 docs/man/man3/detResidImfileRow.3 docs/man/man3/detResidExpRow.3:
 	$(DOXYGEN)
 
Index: /trunk/ippdb/configure.ac
===================================================================
--- /trunk/ippdb/configure.ac	(revision 8379)
+++ /trunk/ippdb/configure.ac	(revision 8380)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.59)
 
-AC_INIT([ippdb], [0.0.29], [pan-starrs.ifa.hawaii.edu])
+AC_INIT([ippdb], [0.0.30], [pan-starrs.ifa.hawaii.edu])
 AC_CONFIG_SRCDIR([ippdb.pc.in])
 
Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 8379)
+++ /trunk/ippdb/src/ippdb.c	(revision 8380)
@@ -64,8 +64,8 @@
 #define DETMASTERIMFILE_TABLE_NAME "detMasterImfile"
 #define DETMASTERIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
-#define DETRESIDIMFILEANALYSIS_TABLE_NAME "detResidImfileAnalysis"
-#define DETRESIDIMFILEANALYSIS_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
-#define DETRESIDEXPANALYSIS_TABLE_NAME "detResidExpAnalysis"
-#define DETRESIDEXPANALYSIS_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
+#define DETRESIDIMFILE_TABLE_NAME "detResidImfile"
+#define DETRESIDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
+#define DETRESIDEXP_TABLE_NAME "detResidExp"
+#define DETRESIDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define MAX_STRING_LENGTH 1024
 
@@ -15059,5 +15059,5 @@
 static void detNormalizedImfileRowFree(detNormalizedImfileRow *object);
 
-detNormalizedImfileRow *detNormalizedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe)
+detNormalizedImfileRow *detNormalizedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri)
 {
     detNormalizedImfileRow *object;
@@ -15070,5 +15070,4 @@
     object->class_id = psStringCopy(class_id);
     object->uri = psStringCopy(uri);
-    object->recipe = psStringCopy(recipe);
 
     return object;
@@ -15079,5 +15078,4 @@
     psFree(object->class_id);
     psFree(object->uri);
-    psFree(object->recipe);
 }
 
@@ -15113,9 +15111,4 @@
         return false;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
-        psFree(md);
-        return false;
-    }
 
     status = psDBCreateTable(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
@@ -15131,5 +15124,5 @@
 }
 
-bool detNormalizedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe)
+bool detNormalizedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri)
 {
     psMetadata      *md;
@@ -15154,9 +15147,4 @@
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
-        psFree(md);
-        return false;
-    }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
         psFree(md);
         return false;
@@ -15183,5 +15171,5 @@
     return deleted;
 }
-bool detNormalizedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe)
+bool detNormalizedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri)
 {
     psArray         *rowSet;
@@ -15251,10 +15239,4 @@
         return false;
     }
-    *recipe = psMetadataLookupPtr(&status, row, "recipe");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
-        psFree(row);
-        return false;
-    }
 
     psFree(row);
@@ -15265,5 +15247,5 @@
 bool detNormalizedImfileInsertObject(psDB *dbh, detNormalizedImfileRow *object)
 {
-    return detNormalizedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe);
+    return detNormalizedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri);
 }
 
@@ -15285,12 +15267,11 @@
     char            class_id[256];
     char            uri[256];
-    char            recipe[256];
-
-    if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe)) {
+
+    if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
         return NULL;
     }
 
-    return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri, recipe);
+    return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri);
 }
 
@@ -15411,9 +15392,4 @@
         return NULL;
     }
-    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
-        psFree(md);
-        return NULL;
-    }
 
     return md;
@@ -15427,5 +15403,4 @@
     char            *class_id;
     char            *uri;
-    char            *recipe;
 
     det_id = psMetadataLookupS32(&status, md, "det_id");
@@ -15449,11 +15424,6 @@
         return false;
     }
-    recipe = psMetadataLookupPtr(&status, md, "recipe");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
-        return false;
-    }
-
-    return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri, recipe);
+
+    return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri);
 }
 psArray *detNormalizedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -16477,12 +16447,12 @@
     return true;
 }
-static void detResidImfileAnalysisRowFree(detResidImfileAnalysisRow *object);
-
-detResidImfileAnalysisRow *detResidImfileAnalysisRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)
-{
-    detResidImfileAnalysisRow *object;
-
-    object = psAlloc(sizeof(detResidImfileAnalysisRow));
-    psMemSetDeallocator(object, (psFreeFunc)detResidImfileAnalysisRowFree);
+static void detResidImfileRowFree(detResidImfileRow *object);
+
+detResidImfileRow *detResidImfileRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)
+{
+    detResidImfileRow *object;
+
+    object = psAlloc(sizeof(detResidImfileRow));
+    psMemSetDeallocator(object, (psFreeFunc)detResidImfileRowFree);
 
     object->det_id = det_id;
@@ -16498,5 +16468,5 @@
 }
 
-static void detResidImfileAnalysisRowFree(detResidImfileAnalysisRow *object)
+static void detResidImfileRowFree(detResidImfileRow *object)
 {
     psFree(object->exp_id);
@@ -16508,5 +16478,5 @@
 }
 
-bool detResidImfileAnalysisCreateTable(psDB *dbh)
+bool detResidImfileCreateTable(psDB *dbh)
 {
     psMetadata      *md;
@@ -16514,6 +16484,6 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDIMFILEANALYSIS_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDIMFILEANALYSIS_INDEX_NAME);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDIMFILE_INDEX_NAME);
         psFree(md);
         return false;
@@ -16560,5 +16530,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, md);
+    status = psDBCreateTable(dbh, DETRESIDIMFILE_TABLE_NAME, md);
 
     psFree(md);
@@ -16567,10 +16537,10 @@
 }
 
-bool detResidImfileAnalysisDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME);
-}
-
-bool detResidImfileAnalysisInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)
+bool detResidImfileDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, DETRESIDIMFILE_TABLE_NAME);
+}
+
+bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)
 {
     psMetadata      *md;
@@ -16619,5 +16589,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, md);
+    status = psDBInsertOneRow(dbh, DETRESIDIMFILE_TABLE_NAME, md);
     psFree(md);
 
@@ -16625,11 +16595,11 @@
 }
 
-long long detResidImfileAnalysisDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long detResidImfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfileAnalysis");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile");
         return count;
 
@@ -16639,5 +16609,5 @@
     return deleted;
 }
-bool detResidImfileAnalysisPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **recipe, char **uri, char **b1_uri, char **b2_uri)
+bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **recipe, char **uri, char **b1_uri, char **b2_uri)
 {
     psArray         *rowSet;
@@ -16648,7 +16618,7 @@
     int             rowID;
 
-    rowSet = psDBSelectRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, NULL, 1);
+    rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, NULL, 1);
     if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILEANALYSIS_INDEX_NAME);
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME);
         psFree(rowSet);
         return NULL;
@@ -16663,7 +16633,7 @@
     psFree(rowSet);
 
-    rowID = psMetadataLookupS32(&status, row, DETRESIDIMFILEANALYSIS_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILEANALYSIS_INDEX_NAME);
+    rowID = psMetadataLookupS32(&status, row, DETRESIDIMFILE_INDEX_NAME);
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME);
         psFree(row);
         return NULL;
@@ -16671,7 +16641,7 @@
 
     popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDIMFILEANALYSIS_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, popped, 0);
+    psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDIMFILE_INDEX_NAME, 0, NULL, rowID);
+
+    deleted = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, popped, 0);
     if (deleted != 1) {
         psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
@@ -16737,13 +16707,13 @@
 }
 
-bool detResidImfileAnalysisInsertObject(psDB *dbh, detResidImfileAnalysisRow *object)
-{
-    return detResidImfileAnalysisInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->recipe, object->uri, object->b1_uri, object->b2_uri);
-}
-
-bool detResidImfileAnalysisInsertObjects(psDB *dbh, psArray *objects)
+bool detResidImfileInsertObject(psDB *dbh, detResidImfileRow *object)
+{
+    return detResidImfileInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->recipe, object->uri, object->b1_uri, object->b2_uri);
+}
+
+bool detResidImfileInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!detResidImfileAnalysisInsertObject(dbh, objects->data[i])) {
+        if (!detResidImfileInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -16753,5 +16723,5 @@
 }
 
-detResidImfileAnalysisRow *detResidImfileAnalysisPopObject(psDB *dbh)
+detResidImfileRow *detResidImfilePopObject(psDB *dbh)
 {
     psS32           det_id;
@@ -16764,19 +16734,19 @@
     char            b2_uri[256];
 
-    if (!detResidImfileAnalysisPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) {
+    if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) {
         psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
         return NULL;
     }
 
-    return detResidImfileAnalysisRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);
-}
-
-bool detResidImfileAnalysisInsertFits(psDB *dbh, const psFits *fits)
+    return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);
+}
+
+bool detResidImfileInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  DETRESIDIMFILEANALYSIS_TABLE_NAME
-    if (!psFitsMoveExtName(fits, DETRESIDIMFILEANALYSIS_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDIMFILEANALYSIS_TABLE_NAME);
+    // move to (the first?) extension named  DETRESIDIMFILE_TABLE_NAME
+    if (!psFitsMoveExtName(fits, DETRESIDIMFILE_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDIMFILE_TABLE_NAME);
         return false;
     }
@@ -16796,5 +16766,5 @@
     }
 
-    if (!psDBInsertRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, DETRESIDIMFILE_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -16807,9 +16777,9 @@
 }
 
-bool detResidImfileAnalysisPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
+bool detResidImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
 {
     char            query[MAX_STRING_LENGTH];
 
-    if (!detResidImfileAnalysisSelectRowsFits(dbh, fits, NULL, limit)) {
+    if (!detResidImfileSelectRowsFits(dbh, fits, NULL, limit)) {
         psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
         return false;
@@ -16819,5 +16789,5 @@
     if (snprintf(query, MAX_STRING_LENGTH,
                 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETRESIDIMFILEANALYSIS_TABLE_NAME, DETRESIDIMFILEANALYSIS_INDEX_NAME, limit) < 0) {
+                DETRESIDIMFILE_TABLE_NAME, DETRESIDIMFILE_INDEX_NAME, limit) < 0) {
         psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH);
         return false;
@@ -16832,10 +16802,10 @@
 }
 
-bool detResidImfileAnalysisSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool detResidImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -16844,6 +16814,6 @@
     // strip index column
     for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDIMFILEANALYSIS_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILEANALYSIS_INDEX_NAME);
+        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDIMFILE_INDEX_NAME)) {
+            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE_INDEX_NAME);
             psFree(rowSet);
             return false;
@@ -16852,5 +16822,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDIMFILEANALYSIS_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDIMFILE_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -16863,5 +16833,5 @@
 }
 
-psMetadata *detResidImfileAnalysisMetadataFromObject(const detResidImfileAnalysisRow *object)
+psMetadata *detResidImfileMetadataFromObject(const detResidImfileRow *object)
 {
     psMetadata      *md;
@@ -16912,5 +16882,5 @@
 }
 
-detResidImfileAnalysisRow *detResidImfileAnalysisObjectFromMetadata(psMetadata *md)
+detResidImfileRow *detResidImfileObjectFromMetadata(psMetadata *md)
 {
     bool            status;
@@ -16965,7 +16935,7 @@
     }
 
-    return detResidImfileAnalysisRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);
-}
-psArray *detResidImfileAnalysisSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);
+}
+psArray *detResidImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -16973,5 +16943,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -16980,6 +16950,6 @@
     // strip index column
     for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDIMFILEANALYSIS_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILEANALYSIS_INDEX_NAME);
+        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDIMFILE_INDEX_NAME)) {
+            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE_INDEX_NAME);
             psFree(rowSet);
             return false;
@@ -16993,5 +16963,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        detResidImfileAnalysisRow *object = detResidImfileAnalysisObjectFromMetadata(rowSet->data[i]);
+        detResidImfileRow *object = detResidImfileObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -17002,11 +16972,11 @@
     return returnSet;
 }
-bool detResidImfileAnalysisDeleteObject(psDB *dbh, const detResidImfileAnalysisRow *object)
-{
-    psMetadata *where = detResidImfileAnalysisMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, where, 0);
+bool detResidImfileDeleteObject(psDB *dbh, const detResidImfileRow *object)
+{
+    psMetadata *where = detResidImfileMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, 0);
     psFree(where)
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfileAnalysis");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile");
         return false;
     }
@@ -17014,21 +16984,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, "detResidImfileAnalysisRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long detResidImfileAnalysisDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "detResidImfileRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long detResidImfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        detResidImfileAnalysisRow *object = objects->data[i];
-        psMetadata *where = detResidImfileAnalysisMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, DETRESIDIMFILEANALYSIS_TABLE_NAME, where, limit);
+        detResidImfileRow *object = objects->data[i];
+        psMetadata *where = detResidImfileMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit);
         psFree(where)
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfileAnalysis");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile");
             return count;
         }
@@ -17039,5 +17009,5 @@
     return deleted;
 }
-bool detResidImfileAnalysisPrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool detResidImfilePrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -17045,9 +17015,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = detResidImfileAnalysisMetadataFromObject(objects->data[i]);
+        psMetadata *md = detResidImfileMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            DETRESIDIMFILEANALYSIS_TABLE_NAME,
+            DETRESIDIMFILE_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
@@ -17070,12 +17040,12 @@
     return true;
 }
-static void detResidExpAnalysisRowFree(detResidExpAnalysisRow *object);
-
-detResidExpAnalysisRow *detResidExpAnalysisRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)
-{
-    detResidExpAnalysisRow *object;
-
-    object = psAlloc(sizeof(detResidExpAnalysisRow));
-    psMemSetDeallocator(object, (psFreeFunc)detResidExpAnalysisRowFree);
+static void detResidExpRowFree(detResidExpRow *object);
+
+detResidExpRow *detResidExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)
+{
+    detResidExpRow  *object;
+
+    object = psAlloc(sizeof(detResidExpRow));
+    psMemSetDeallocator(object, (psFreeFunc)detResidExpRowFree);
 
     object->det_id = det_id;
@@ -17089,5 +17059,5 @@
 }
 
-static void detResidExpAnalysisRowFree(detResidExpAnalysisRow *object)
+static void detResidExpRowFree(detResidExpRow *object)
 {
     psFree(object->exp_id);
@@ -17095,5 +17065,5 @@
 }
 
-bool detResidExpAnalysisCreateTable(psDB *dbh)
+bool detResidExpCreateTable(psDB *dbh)
 {
     psMetadata      *md;
@@ -17101,6 +17071,6 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDEXPANALYSIS_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDEXPANALYSIS_INDEX_NAME);
+    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDEXP_INDEX_NAME);
         psFree(md);
         return false;
@@ -17137,5 +17107,5 @@
     }
 
-    status = psDBCreateTable(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, md);
+    status = psDBCreateTable(dbh, DETRESIDEXP_TABLE_NAME, md);
 
     psFree(md);
@@ -17144,10 +17114,10 @@
 }
 
-bool detResidExpAnalysisDropTable(psDB *dbh)
-{
-    return psDBDropTable(dbh, DETRESIDEXPANALYSIS_TABLE_NAME);
-}
-
-bool detResidExpAnalysisInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)
+bool detResidExpDropTable(psDB *dbh)
+{
+    return psDBDropTable(dbh, DETRESIDEXP_TABLE_NAME);
+}
+
+bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)
 {
     psMetadata      *md;
@@ -17186,5 +17156,5 @@
     }
 
-    status = psDBInsertOneRow(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, md);
+    status = psDBInsertOneRow(dbh, DETRESIDEXP_TABLE_NAME, md);
     psFree(md);
 
@@ -17192,11 +17162,11 @@
 }
 
-long long detResidExpAnalysisDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
+long long detResidExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     long long       deleted = 0;
 
-    long long count = psDBDeleteRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, where, limit);
+    long long count = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit);
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExpAnalysis");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp");
         return count;
 
@@ -17206,5 +17176,5 @@
     return deleted;
 }
-bool detResidExpAnalysisPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, bool *keep, bool *accept)
+bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, bool *keep, bool *accept)
 {
     psArray         *rowSet;
@@ -17215,7 +17185,7 @@
     int             rowID;
 
-    rowSet = psDBSelectRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, NULL, 1);
+    rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, NULL, 1);
     if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXPANALYSIS_INDEX_NAME);
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME);
         psFree(rowSet);
         return NULL;
@@ -17230,7 +17200,7 @@
     psFree(rowSet);
 
-    rowID = psMetadataLookupS32(&status, row, DETRESIDEXPANALYSIS_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXPANALYSIS_INDEX_NAME);
+    rowID = psMetadataLookupS32(&status, row, DETRESIDEXP_INDEX_NAME);
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME);
         psFree(row);
         return NULL;
@@ -17238,7 +17208,7 @@
 
     popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDEXPANALYSIS_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, popped, 0);
+    psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDEXP_INDEX_NAME, 0, NULL, rowID);
+
+    deleted = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, popped, 0);
     if (deleted != 1) {
         psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
@@ -17292,13 +17262,13 @@
 }
 
-bool detResidExpAnalysisInsertObject(psDB *dbh, detResidExpAnalysisRow *object)
-{
-    return detResidExpAnalysisInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->keep, object->accept);
-}
-
-bool detResidExpAnalysisInsertObjects(psDB *dbh, psArray *objects)
+bool detResidExpInsertObject(psDB *dbh, detResidExpRow *object)
+{
+    return detResidExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->keep, object->accept);
+}
+
+bool detResidExpInsertObjects(psDB *dbh, psArray *objects)
 {
     for (long i = 0; i < psArrayLength(objects); i++) {
-        if (!detResidExpAnalysisInsertObject(dbh, objects->data[i])) {
+        if (!detResidExpInsertObject(dbh, objects->data[i])) {
             return false;
         }
@@ -17308,5 +17278,5 @@
 }
 
-detResidExpAnalysisRow *detResidExpAnalysisPopObject(psDB *dbh)
+detResidExpRow *detResidExpPopObject(psDB *dbh)
 {
     psS32           det_id;
@@ -17317,19 +17287,19 @@
     bool            accept;
 
-    if (!detResidExpAnalysisPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) {
+    if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) {
         psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
         return NULL;
     }
 
-    return detResidExpAnalysisRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);
-}
-
-bool detResidExpAnalysisInsertFits(psDB *dbh, const psFits *fits)
+    return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);
+}
+
+bool detResidExpInsertFits(psDB *dbh, const psFits *fits)
 {
     psArray         *rowSet;
 
-    // move to (the first?) extension named  DETRESIDEXPANALYSIS_TABLE_NAME
-    if (!psFitsMoveExtName(fits, DETRESIDEXPANALYSIS_TABLE_NAME)) {
-        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDEXPANALYSIS_TABLE_NAME);
+    // move to (the first?) extension named  DETRESIDEXP_TABLE_NAME
+    if (!psFitsMoveExtName(fits, DETRESIDEXP_TABLE_NAME)) {
+        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDEXP_TABLE_NAME);
         return false;
     }
@@ -17349,5 +17319,5 @@
     }
 
-    if (!psDBInsertRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, rowSet)) {
+    if (!psDBInsertRows(dbh, DETRESIDEXP_TABLE_NAME, rowSet)) {
         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
         psFree(rowSet);
@@ -17360,9 +17330,9 @@
 }
 
-bool detResidExpAnalysisPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
+bool detResidExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
 {
     char            query[MAX_STRING_LENGTH];
 
-    if (!detResidExpAnalysisSelectRowsFits(dbh, fits, NULL, limit)) {
+    if (!detResidExpSelectRowsFits(dbh, fits, NULL, limit)) {
         psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
         return false;
@@ -17372,5 +17342,5 @@
     if (snprintf(query, MAX_STRING_LENGTH,
                 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETRESIDEXPANALYSIS_TABLE_NAME, DETRESIDEXPANALYSIS_INDEX_NAME, limit) < 0) {
+                DETRESIDEXP_TABLE_NAME, DETRESIDEXP_INDEX_NAME, limit) < 0) {
         psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH);
         return false;
@@ -17385,10 +17355,10 @@
 }
 
-bool detResidExpAnalysisSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
+bool detResidExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
@@ -17397,6 +17367,6 @@
     // strip index column
     for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDEXPANALYSIS_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXPANALYSIS_INDEX_NAME);
+        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDEXP_INDEX_NAME)) {
+            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP_INDEX_NAME);
             psFree(rowSet);
             return false;
@@ -17405,5 +17375,5 @@
 
     // output to fits
-    if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDEXPANALYSIS_TABLE_NAME)) {
+    if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDEXP_TABLE_NAME)) {
         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
         psFree(rowSet);
@@ -17416,5 +17386,5 @@
 }
 
-psMetadata *detResidExpAnalysisMetadataFromObject(const detResidExpAnalysisRow *object)
+psMetadata *detResidExpMetadataFromObject(const detResidExpRow *object)
 {
     psMetadata      *md;
@@ -17455,5 +17425,5 @@
 }
 
-detResidExpAnalysisRow *detResidExpAnalysisObjectFromMetadata(psMetadata *md)
+detResidExpRow *detResidExpObjectFromMetadata(psMetadata *md)
 {
     bool            status;
@@ -17496,7 +17466,7 @@
     }
 
-    return detResidExpAnalysisRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);
-}
-psArray *detResidExpAnalysisSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
+    return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);
+}
+psArray *detResidExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
@@ -17504,5 +17474,5 @@
     psU64           i;
 
-    rowSet = psDBSelectRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, where, limit);
+    rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return NULL;
@@ -17511,6 +17481,6 @@
     // strip index column
     for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDEXPANALYSIS_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXPANALYSIS_INDEX_NAME);
+        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDEXP_INDEX_NAME)) {
+            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP_INDEX_NAME);
             psFree(rowSet);
             return false;
@@ -17524,5 +17494,5 @@
 
     for (i = 0; i < rowSet->n; i++) {
-        detResidExpAnalysisRow *object = detResidExpAnalysisObjectFromMetadata(rowSet->data[i]);
+        detResidExpRow *object = detResidExpObjectFromMetadata(rowSet->data[i]);
         psArrayAdd(returnSet, 0, object);
         psFree(object);
@@ -17533,11 +17503,11 @@
     return returnSet;
 }
-bool detResidExpAnalysisDeleteObject(psDB *dbh, const detResidExpAnalysisRow *object)
-{
-    psMetadata *where = detResidExpAnalysisMetadataFromObject(object);
-    long long count = psDBDeleteRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, where, 0);
+bool detResidExpDeleteObject(psDB *dbh, const detResidExpRow *object)
+{
+    psMetadata *where = detResidExpMetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, where, 0);
     psFree(where)
     if (count < 0) {
-        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExpAnalysis");
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp");
         return false;
     }
@@ -17545,21 +17515,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, "detResidExpAnalysisRow object matched more then one row.  Check your database schema");
-        return false;
-    }
-
-    return true;
-}
-long long detResidExpAnalysisDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
+        psError(PS_ERR_UNKNOWN, true, "detResidExpRow object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
+long long detResidExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
 {
     long long       deleted = 0;
 
     for (long long i = 0; i < objects->n; i++) {
-        detResidExpAnalysisRow *object = objects->data[i];
-        psMetadata *where = detResidExpAnalysisMetadataFromObject(object);
-        long long count = psDBDeleteRows(dbh, DETRESIDEXPANALYSIS_TABLE_NAME, where, limit);
+        detResidExpRow *object = objects->data[i];
+        psMetadata *where = detResidExpMetadataFromObject(object);
+        long long count = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit);
         psFree(where)
         if (count < 0) {
-            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExpAnalysis");
+            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp");
             return count;
         }
@@ -17570,5 +17540,5 @@
     return deleted;
 }
-bool detResidExpAnalysisPrintObjects(FILE *stream, psArray *objects, bool mdcf)
+bool detResidExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)
 {
     PS_ASSERT_PTR_NON_NULL(objects, false);
@@ -17576,9 +17546,9 @@
     psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(objects); i++) {
-        psMetadata *md = detResidExpAnalysisMetadataFromObject(objects->data[i]);
+        psMetadata *md = detResidExpMetadataFromObject(objects->data[i]);
         if (!psMetadataAddMetadata(
             output,
             PS_LIST_TAIL,
-            DETRESIDEXPANALYSIS_TABLE_NAME,
+            DETRESIDEXP_TABLE_NAME,
             PS_META_DUPLICATE_OK,
             NULL,
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 8379)
+++ /trunk/ippdb/src/ippdb.h	(revision 8380)
@@ -6516,5 +6516,4 @@
     char            *class_id;
     char            *uri;
-    char            *recipe;
 } detNormalizedImfileRow;
 
@@ -6528,6 +6527,5 @@
     psS32           iteration,
     const char      *class_id,
-    const char      *uri,
-    const char      *recipe
+    const char      *uri
 );
 
@@ -6562,6 +6560,5 @@
     psS32           iteration,
     const char      *class_id,
-    const char      *uri,
-    const char      *recipe
+    const char      *uri
 );
 
@@ -6587,6 +6584,5 @@
     psS32           *iteration,
     char            **class_id,
-    char            **uri,
-    char            **recipe
+    char            **uri
 );
 
@@ -7187,7 +7183,7 @@
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** detResidImfileAnalysisRow data structure
- *
- * Structure for representing a single row of detResidImfileAnalysis table data.
+/** detResidImfileRow data structure
+ *
+ * Structure for representing a single row of detResidImfile table data.
  */
 
@@ -7201,12 +7197,12 @@
     char            *b1_uri;
     char            *b2_uri;
-} detResidImfileAnalysisRow;
-
-/** Creates a new detResidImfileAnalysisRow object
- *
- *  @return A new detResidImfileAnalysisRow object or NULL on failure.
- */
-
-detResidImfileAnalysisRow *detResidImfileAnalysisRowAlloc(
+} detResidImfileRow;
+
+/** Creates a new detResidImfileRow object
+ *
+ *  @return A new detResidImfileRow object or NULL on failure.
+ */
+
+detResidImfileRow *detResidImfileRowAlloc(
     psS32           det_id,
     psS32           iteration,
@@ -7219,19 +7215,19 @@
 );
 
-/** Creates a new detResidImfileAnalysis table
- *
- * @return true on success
- */
-
-bool detResidImfileAnalysisCreateTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Deletes a detResidImfileAnalysis table
- *
- * @return true on success
- */
-
-bool detResidImfileAnalysisDropTable(
+/** Creates a new detResidImfile table
+ *
+ * @return true on success
+ */
+
+bool detResidImfileCreateTable(
+    psDB            *dbh                ///< Database handle
+);
+
+/** Deletes a detResidImfile table
+ *
+ * @return true on success
+ */
+
+bool detResidImfileDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -7244,5 +7240,5 @@
  */
 
-bool detResidImfileAnalysisInsert(
+bool detResidImfileInsert(
     psDB            *dbh,               ///< Database handle
     psS32           det_id,
@@ -7261,5 +7257,5 @@
  */
 
-long long detResidImfileAnalysisDelete(
+long long detResidImfileDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -7272,5 +7268,5 @@
  */
 
-bool detResidImfileAnalysisPop(
+bool detResidImfilePop(
     psDB            *dbh,               ///< Database handle
     psS32           *det_id,
@@ -7284,5 +7280,5 @@
 );
 
-/** Insert a single detResidImfileAnalysisRow object into a table
+/** Insert a single detResidImfileRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -7291,10 +7287,10 @@
  */
 
-bool detResidImfileAnalysisInsertObject(
-    psDB            *dbh,               ///< Database handle
-    detResidImfileAnalysisRow *object             ///< detResidImfileAnalysisRow object
-);
-
-/** Insert an array of detResidImfileAnalysisRow object into a table
+bool detResidImfileInsertObject(
+    psDB            *dbh,               ///< Database handle
+    detResidImfileRow *object             ///< detResidImfileRow object
+);
+
+/** Insert an array of detResidImfileRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -7303,19 +7299,19 @@
  */
 
-bool detResidImfileAnalysisInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of detResidImfileAnalysisRow objects
+bool detResidImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detResidImfileRow objects
 );
 
 /** Removes the last row from the database and returns it
  *
- * @return A new detResidImfileAnalysisRow on success or NULL on failure.
- */
-
-detResidImfileAnalysisRow *detResidImfileAnalysisPopObject(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Insert data from a binary FITS table detResidImfileAnalysisRow into the database
+ * @return A new detResidImfileRow on success or NULL on failure.
+ */
+
+detResidImfileRow *detResidImfilePopObject(
+    psDB            *dbh                ///< Database handle
+);
+
+/** Insert data from a binary FITS table detResidImfileRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -7327,5 +7323,5 @@
  */
 
-bool detResidImfileAnalysisInsertFits(
+bool detResidImfileInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -7340,5 +7336,5 @@
  */
 
-bool detResidImfileAnalysisPopFits(
+bool detResidImfilePopFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7356,5 +7352,5 @@
  */
 
-bool detResidImfileAnalysisSelectRowsFits(
+bool detResidImfileSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7363,22 +7359,22 @@
 );
 
-/** Convert a detResidImfileAnalysisRow into an equivalent psMetadata
+/** Convert a detResidImfileRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *detResidImfileAnalysisMetadataFromObject(
-    const detResidImfileAnalysisRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *detResidImfileMetadataFromObject(
+    const detResidImfileRow *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A detResidImfileAnalysisRow pointer or NULL on error
- */
-
-detResidImfileAnalysisRow *detResidImfileAnalysisObjectFromMetadata(
+ * @return A detResidImfileRow pointer or NULL on error
+ */
+
+detResidImfileRow *detResidImfileObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as detResidImfileAnalysisRow objects in a psArray
+/** Selects up to limit rows from the database and returns as detResidImfileRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -7387,10 +7383,10 @@
  */
 
-psArray *detResidImfileAnalysisSelectRowObjects(
-    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 detResidImfileAnalysis
+psArray *detResidImfileSelectRowObjects(
+    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 detResidImfile
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -7400,7 +7396,7 @@
  */
 
-bool detResidImfileAnalysisDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const detResidImfileAnalysisRow *object    ///< Object to delete
+bool detResidImfileDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const detResidImfileRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -7412,10 +7408,10 @@
  */
 
-long long detResidImfileAnalysisDeleteRowObjects(
+long long detResidImfileDeleteRowObjects(
     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 detResidImfileAnalysisRow objects
+/** Formats and prints an array of detResidImfileRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7425,12 +7421,12 @@
  */
 
-bool detResidImfileAnalysisPrintObjects(
+bool detResidImfilePrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of detResidImfileAnalysisRow objects
+    psArray         *objects,           ///< An array of detResidImfileRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
-/** detResidExpAnalysisRow data structure
- *
- * Structure for representing a single row of detResidExpAnalysis table data.
+/** detResidExpRow data structure
+ *
+ * Structure for representing a single row of detResidExp table data.
  */
 
@@ -7442,12 +7438,12 @@
     bool            keep;
     bool            accept;
-} detResidExpAnalysisRow;
-
-/** Creates a new detResidExpAnalysisRow object
- *
- *  @return A new detResidExpAnalysisRow object or NULL on failure.
- */
-
-detResidExpAnalysisRow *detResidExpAnalysisRowAlloc(
+} detResidExpRow;
+
+/** Creates a new detResidExpRow object
+ *
+ *  @return A new detResidExpRow object or NULL on failure.
+ */
+
+detResidExpRow *detResidExpRowAlloc(
     psS32           det_id,
     psS32           iteration,
@@ -7458,19 +7454,19 @@
 );
 
-/** Creates a new detResidExpAnalysis table
- *
- * @return true on success
- */
-
-bool detResidExpAnalysisCreateTable(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Deletes a detResidExpAnalysis table
- *
- * @return true on success
- */
-
-bool detResidExpAnalysisDropTable(
+/** Creates a new detResidExp table
+ *
+ * @return true on success
+ */
+
+bool detResidExpCreateTable(
+    psDB            *dbh                ///< Database handle
+);
+
+/** Deletes a detResidExp table
+ *
+ * @return true on success
+ */
+
+bool detResidExpDropTable(
     psDB            *dbh                ///< Database handle
 );
@@ -7483,5 +7479,5 @@
  */
 
-bool detResidExpAnalysisInsert(
+bool detResidExpInsert(
     psDB            *dbh,               ///< Database handle
     psS32           det_id,
@@ -7498,5 +7494,5 @@
  */
 
-long long detResidExpAnalysisDelete(
+long long detResidExpDelete(
     psDB            *dbh,               ///< Database handle
     const psMetadata *where,            ///< Row match criteria
@@ -7509,5 +7505,5 @@
  */
 
-bool detResidExpAnalysisPop(
+bool detResidExpPop(
     psDB            *dbh,               ///< Database handle
     psS32           *det_id,
@@ -7519,5 +7515,5 @@
 );
 
-/** Insert a single detResidExpAnalysisRow object into a table
+/** Insert a single detResidExpRow object into a table
  *
  * This function constructs and inserts a single row based on it's parameters.
@@ -7526,10 +7522,10 @@
  */
 
-bool detResidExpAnalysisInsertObject(
-    psDB            *dbh,               ///< Database handle
-    detResidExpAnalysisRow *object             ///< detResidExpAnalysisRow object
-);
-
-/** Insert an array of detResidExpAnalysisRow object into a table
+bool detResidExpInsertObject(
+    psDB            *dbh,               ///< Database handle
+    detResidExpRow  *object             ///< detResidExpRow object
+);
+
+/** Insert an array of detResidExpRow object into a table
  *
  * This function constructs and inserts multiple rows based on it's parameters.
@@ -7538,19 +7534,19 @@
  */
 
-bool detResidExpAnalysisInsertObjects(
-    psDB            *dbh,               ///< Database handle
-    psArray         *objects            ///< array of detResidExpAnalysisRow objects
+bool detResidExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detResidExpRow objects
 );
 
 /** Removes the last row from the database and returns it
  *
- * @return A new detResidExpAnalysisRow on success or NULL on failure.
- */
-
-detResidExpAnalysisRow *detResidExpAnalysisPopObject(
-    psDB            *dbh                ///< Database handle
-);
-
-/** Insert data from a binary FITS table detResidExpAnalysisRow into the database
+ * @return A new detResidExpRow on success or NULL on failure.
+ */
+
+detResidExpRow *detResidExpPopObject(
+    psDB            *dbh                ///< Database handle
+);
+
+/** Insert data from a binary FITS table detResidExpRow into the database
  *
  * This function expects a psFits object with a FITS table as the first
@@ -7562,5 +7558,5 @@
  */
 
-bool detResidExpAnalysisInsertFits(
+bool detResidExpInsertFits(
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
@@ -7575,5 +7571,5 @@
  */
 
-bool detResidExpAnalysisPopFits(
+bool detResidExpPopFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7591,5 +7587,5 @@
  */
 
-bool detResidExpAnalysisSelectRowsFits(
+bool detResidExpSelectRowsFits(
     psDB            *dbh,               ///< Database handle
     psFits          *fits,              ///< psFits object
@@ -7598,22 +7594,22 @@
 );
 
-/** Convert a detResidExpAnalysisRow into an equivalent psMetadata
+/** Convert a detResidExpRow into an equivalent psMetadata
  *
  * @return A psMetadata pointer or NULL on error
  */
 
-psMetadata *detResidExpAnalysisMetadataFromObject(
-    const detResidExpAnalysisRow *object             ///< fooRow to convert into a psMetadata
+psMetadata *detResidExpMetadataFromObject(
+    const detResidExpRow *object             ///< fooRow to convert into a psMetadata
 );
 
 /** Convert a psMetadata into an equivalent fooRow
  *
- * @return A detResidExpAnalysisRow pointer or NULL on error
- */
-
-detResidExpAnalysisRow *detResidExpAnalysisObjectFromMetadata(
+ * @return A detResidExpRow pointer or NULL on error
+ */
+
+detResidExpRow *detResidExpObjectFromMetadata(
     psMetadata      *md                 ///< psMetadata to convert into a fooRow
 );
-/** Selects up to limit rows from the database and returns as detResidExpAnalysisRow objects in a psArray
+/** Selects up to limit rows from the database and returns as detResidExpRow objects in a psArray
  *
  *  See psDBSelectRows() for documentation on the format of where.
@@ -7622,10 +7618,10 @@
  */
 
-psArray *detResidExpAnalysisSelectRowObjects(
-    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 detResidExpAnalysis
+psArray *detResidExpSelectRowObjects(
+    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 detResidExp
  *
  *  Note that a 'where' search psMetadata is constructed from each object and
@@ -7635,7 +7631,7 @@
  */
 
-bool detResidExpAnalysisDeleteObject(
-    psDB            *dbh,               ///< Database handle
-    const detResidExpAnalysisRow *object    ///< Object to delete
+bool detResidExpDeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const detResidExpRow *object    ///< Object to delete
 );
 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 
@@ -7647,10 +7643,10 @@
  */
 
-long long detResidExpAnalysisDeleteRowObjects(
+long long detResidExpDeleteRowObjects(
     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 detResidExpAnalysisRow objects
+/** Formats and prints an array of detResidExpRow objects
  *
  * When mdcf is set the formated output is in psMetadataConfig
@@ -7660,7 +7656,7 @@
  */
 
-bool detResidExpAnalysisPrintObjects(
+bool detResidExpPrintObjects(
     FILE            *stream,            ///< a stream
-    psArray         *objects,           ///< An array of detResidExpAnalysisRow objects
+    psArray         *objects,           ///< An array of detResidExpRow objects
     bool            mdcf                ///< format as mdconfig or simple
 );
@@ -7672,3 +7668,3 @@
 #endif
 
-#endif // DETRESIDEXPANALYSIS_DB_H
+#endif // DETRESIDEXP_DB_H
Index: /trunk/ippdb/tests/alloc.c
===================================================================
--- /trunk/ippdb/tests/alloc.c	(revision 8379)
+++ /trunk/ippdb/tests/alloc.c	(revision 8380)
@@ -1073,5 +1073,5 @@
         detNormalizedImfileRow *object;
 
-        object = detNormalizedImfileRowAlloc(-32, -32, "a string", "a string", "a string"    );
+        object = detNormalizedImfileRowAlloc(-32, -32, "a string", "a string"    );
 
         if (!object) {
@@ -1095,4 +1095,54 @@
             exit(EXIT_FAILURE);
         }
+
+        psFree(object);
+    }
+
+    {
+        detMasterFrameRow *object;
+
+        object = detMasterFrameRowAlloc(-32, -32, "a string"    );
+
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!object->det_id == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->iteration == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->comment, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        detMasterImfileRow *object;
+
+        object = detMasterImfileRowAlloc(-32, "a string", "a string", "a string"    );
+
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!object->det_id == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -1104,7 +1154,7 @@
 
     {
-        detMasterFrameRow *object;
-
-        object = detMasterFrameRowAlloc(-32, -32, "a string"    );
+        detResidImfileRow *object;
+
+        object = detResidImfileRowAlloc(-32, -32, "a string", "a string", "a string", "a string", "a string", "a string"    );
 
         if (!object) {
@@ -1120,22 +1170,5 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->comment, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        detMasterImfileRow *object;
-
-        object = detMasterImfileRowAlloc(-32, "a string", "a string", "a string"    );
-
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!object->det_id == -32) {
+        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
@@ -1145,49 +1178,12 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        detResidImfileAnalysisRow *object;
-
-        object = detResidImfileAnalysisRowAlloc(-32, -32, "a string", "a string", "a string", "a string", "a string", "a string"    );
-
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!object->det_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->iteration == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
         if (strncmp(object->b1_uri, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
@@ -1203,7 +1199,7 @@
 
     {
-        detResidExpAnalysisRow *object;
-
-        object = detResidExpAnalysisRowAlloc(-32, -32, "a string", "a string", true, true    );
+        detResidExpRow  *object;
+
+        object = detResidExpRowAlloc(-32, -32, "a string", "a string", true, true    );
 
         if (!object) {
Index: /trunk/ippdb/tests/createtable.c
===================================================================
--- /trunk/ippdb/tests/createtable.c	(revision 8379)
+++ /trunk/ippdb/tests/createtable.c	(revision 8380)
@@ -463,20 +463,20 @@
         }
 
-        if(!detResidImfileAnalysisCreateTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if(!detResidExpAnalysisCreateTable(dbh)) {
+        if(!detResidImfileCreateTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if(!detResidExpCreateTable(dbh)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/dbcleanup.c
===================================================================
--- /trunk/ippdb/tests/dbcleanup.c	(revision 8379)
+++ /trunk/ippdb/tests/dbcleanup.c	(revision 8380)
@@ -41,6 +41,6 @@
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detMasterFrame");
     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detMasterImfile");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidImfileAnalysis");
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidExpAnalysis");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidImfile");
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidExp");
 
     psDBCleanup(dbh);
Index: /trunk/ippdb/tests/dbsetup.c
===================================================================
--- /trunk/ippdb/tests/dbsetup.c	(revision 8379)
+++ /trunk/ippdb/tests/dbsetup.c	(revision 8380)
@@ -103,9 +103,9 @@
     detMasterImfileCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidImfileAnalysis");
-    detResidImfileAnalysisCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidImfile");
+    detResidImfileCreateTable(dbh);
 
-    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidExpAnalysis");
-    detResidExpAnalysisCreateTable(dbh);
+    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detResidExp");
+    detResidExpCreateTable(dbh);
 
     psDBCleanup(dbh);
Index: /trunk/ippdb/tests/droptable.c
===================================================================
--- /trunk/ippdb/tests/droptable.c	(revision 8379)
+++ /trunk/ippdb/tests/droptable.c	(revision 8380)
@@ -463,20 +463,20 @@
         }
 
-        if (!detResidImfileAnalysisDropTable(dbh)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidExpAnalysisDropTable(dbh)) {
+        if (!detResidImfileDropTable(dbh)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!detResidExpDropTable(dbh)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insert.c
===================================================================
--- /trunk/ippdb/tests/insert.c	(revision 8379)
+++ /trunk/ippdb/tests/insert.c	(revision 8380)
@@ -418,5 +418,5 @@
         }
 
-        if (!detNormalizedImfileInsert(dbh, -32, -32, "a string", "a string", "a string")) {
+        if (!detNormalizedImfileInsert(dbh, -32, -32, "a string", "a string")) {
             exit(EXIT_FAILURE);
         }
@@ -463,20 +463,20 @@
         }
 
-        if (!detResidImfileAnalysisInsert(dbh, -32, -32, "a string", "a string", "a string", "a string", "a string", "a string")) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidExpAnalysisInsert(dbh, -32, -32, "a string", "a string", true, true)) {
+        if (!detResidImfileInsert(dbh, -32, -32, "a string", "a string", "a string", "a string", "a string", "a string")) {
+            exit(EXIT_FAILURE);
+        }
+
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!detResidExpInsert(dbh, -32, -32, "a string", "a string", true, true)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertfits.c
===================================================================
--- /trunk/ippdb/tests/insertfits.c	(revision 8379)
+++ /trunk/ippdb/tests/insertfits.c	(revision 8380)
@@ -804,31 +804,31 @@
         }
 
-        if (!detResidImfileAnalysisInsertFits(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 (!detResidExpAnalysisInsertFits(dbh, fits)) {
+        if (!detResidImfileInsertFits(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 (!detResidExpInsertFits(dbh, fits)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertobject.c
===================================================================
--- /trunk/ippdb/tests/insertobject.c	(revision 8379)
+++ /trunk/ippdb/tests/insertobject.c	(revision 8380)
@@ -608,5 +608,5 @@
         }
 
-        object = detNormalizedImfileRowAlloc(-32, -32, "a string", "a string", "a string");
+        object = detNormalizedImfileRowAlloc(-32, -32, "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -667,39 +667,39 @@
     {
         psDB            *dbh;
-        detResidImfileAnalysisRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detResidImfileAnalysisRowAlloc(-32, -32, "a string", "a string", "a string", "a string", "a string", "a string");
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidImfileAnalysisInsertObject(dbh, object)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detResidExpAnalysisRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detResidExpAnalysisRowAlloc(-32, -32, "a string", "a string", true, true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidExpAnalysisInsertObject(dbh, object)) {
+        detResidImfileRow *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = detResidImfileRowAlloc(-32, -32, "a string", "a string", "a string", "a string", "a string", "a string");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!detResidImfileInsertObject(dbh, object)) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        detResidExpRow  *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = detResidExpRowAlloc(-32, -32, "a string", "a string", true, true);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!detResidExpInsertObject(dbh, object)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/metadatafromobject.c
===================================================================
--- /trunk/ippdb/tests/metadatafromobject.c	(revision 8379)
+++ /trunk/ippdb/tests/metadatafromobject.c	(revision 8380)
@@ -1292,5 +1292,5 @@
         bool            status;
 
-        object = detNormalizedImfileRowAlloc(-32, -32, "a string", "a string", "a string");
+        object = detNormalizedImfileRowAlloc(-32, -32, "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -1320,4 +1320,70 @@
             exit(EXIT_FAILURE);
         }
+
+        psFree(md);
+    }
+
+    {
+        psMetadata      *md;
+        detMasterFrameRow *object;
+        bool            status;
+
+        object = detMasterFrameRowAlloc(-32, -32, "a string");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = detMasterFrameMetadataFromObject(object);
+        if (!md) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+
+        if (!psMetadataLookupS32(&status, md, "det_id") == -32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataLookupS32(&status, md, "iteration") == -32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "comment"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+    }
+
+    {
+        psMetadata      *md;
+        detMasterImfileRow *object;
+        bool            status;
+
+        object = detMasterImfileRowAlloc(-32, "a string", "a string", "a string");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = detMasterImfileMetadataFromObject(object);
+        if (!md) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+
+        if (!psMetadataLookupS32(&status, md, "det_id") == -32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(psMetadataLookupPtr(&status, md, "recipe"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
@@ -1330,13 +1396,13 @@
     {
         psMetadata      *md;
-        detMasterFrameRow *object;
-        bool            status;
-
-        object = detMasterFrameRowAlloc(-32, -32, "a string");
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = detMasterFrameMetadataFromObject(object);
+        detResidImfileRow *object;
+        bool            status;
+
+        object = detResidImfileRowAlloc(-32, -32, "a string", "a string", "a string", "a string", "a string", "a string");
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = detResidImfileMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
@@ -1353,30 +1419,5 @@
             exit(EXIT_FAILURE);
         }
-        if (strncmp(psMetadataLookupPtr(&status, md, "comment"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        detMasterImfileRow *object;
-        bool            status;
-
-        object = detMasterImfileRowAlloc(-32, "a string", "a string", "a string");
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = detMasterImfileMetadataFromObject(object);
-        if (!md) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-
-        if (!psMetadataLookupS32(&status, md, "det_id") == -32) {
+        if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
             exit(EXIT_FAILURE);
@@ -1386,57 +1427,12 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(psMetadataLookupPtr(&status, md, "recipe"), "a string", MAX_STRING_LENGTH)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
             exit(EXIT_FAILURE);
         }
-        if (strncmp(psMetadataLookupPtr(&status, md, "recipe"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-    }
-
-    {
-        psMetadata      *md;
-        detResidImfileAnalysisRow *object;
-        bool            status;
-
-        object = detResidImfileAnalysisRowAlloc(-32, -32, "a string", "a string", "a string", "a string", "a string", "a string");
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = detResidImfileAnalysisMetadataFromObject(object);
-        if (!md) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-
-        if (!psMetadataLookupS32(&status, md, "det_id") == -32) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataLookupS32(&status, md, "iteration") == -32) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "recipe"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
         if (strncmp(psMetadataLookupPtr(&status, md, "b1_uri"), "a string", MAX_STRING_LENGTH)) {
             psFree(md);
@@ -1453,13 +1449,13 @@
     {
         psMetadata      *md;
-        detResidExpAnalysisRow *object;
-        bool            status;
-
-        object = detResidExpAnalysisRowAlloc(-32, -32, "a string", "a string", true, true);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        md = detResidExpAnalysisMetadataFromObject(object);
+        detResidExpRow  *object;
+        bool            status;
+
+        object = detResidExpRowAlloc(-32, -32, "a string", "a string", true, true);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        md = detResidExpMetadataFromObject(object);
         if (!md) {
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/objectfrommetadata.c
===================================================================
--- /trunk/ippdb/tests/objectfrommetadata.c	(revision 8379)
+++ /trunk/ippdb/tests/objectfrommetadata.c	(revision 8380)
@@ -1939,4 +1939,92 @@
             exit(EXIT_FAILURE);
         }
+
+        object = detNormalizedImfileObjectFromMetadata(md);
+        if (!object) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+
+        if (!object->det_id == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->iteration == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        detMasterFrameRow *object;
+
+        md = psMetadataAlloc();
+        if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, -32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        object = detMasterFrameObjectFromMetadata(md);
+        if (!object) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+
+        if (!object->det_id == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (!object->iteration == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->comment, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        detMasterImfileRow *object;
+
+        md = psMetadataAlloc();
+        if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "a string")) {
             psFree(md);
@@ -1944,5 +2032,5 @@
         }
 
-        object = detNormalizedImfileObjectFromMetadata(md);
+        object = detMasterImfileObjectFromMetadata(md);
         if (!object) {
             psFree(md);
@@ -1956,27 +2044,105 @@
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        detResidImfileRow *object;
+
+        md = psMetadataAlloc();
+        if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, -32)) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "a string")) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        object = detResidImfileObjectFromMetadata(md);
+        if (!object) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(md);
+
+        if (!object->det_id == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (!object->iteration == -32) {
             psFree(object);
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
         }
+        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
             psFree(object);
             exit(EXIT_FAILURE);
         }
-        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        detMasterFrameRow *object;
+        if (strncmp(object->b1_uri, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+        if (strncmp(object->b2_uri, "a string", MAX_STRING_LENGTH)) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+    }
+
+    {
+        psMetadata      *md;
+        detResidExpRow  *object;
 
         md = psMetadataAlloc();
@@ -1989,47 +2155,5 @@
             exit(EXIT_FAILURE);
         }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = detMasterFrameObjectFromMetadata(md);
-        if (!object) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-
-        if (!object->det_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->iteration == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->comment, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        detMasterImfileRow *object;
-
-        md = psMetadataAlloc();
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
+        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
             psFree(md);
             exit(EXIT_FAILURE);
@@ -2039,136 +2163,4 @@
             exit(EXIT_FAILURE);
         }
-
-        object = detMasterImfileObjectFromMetadata(md);
-        if (!object) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-
-        if (!object->det_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        detResidImfileAnalysisRow *object;
-
-        md = psMetadataAlloc();
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        object = detResidImfileAnalysisObjectFromMetadata(md);
-        if (!object) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(md);
-
-        if (!object->det_id == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (!object->iteration == -32) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->recipe, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->b1_uri, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-        if (strncmp(object->b2_uri, "a string", MAX_STRING_LENGTH)) {
-            psFree(object);
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-    }
-
-    {
-        psMetadata      *md;
-        detResidExpAnalysisRow *object;
-
-        md = psMetadataAlloc();
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, -32)) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
-        if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "a string")) {
-            psFree(md);
-            exit(EXIT_FAILURE);
-        }
         if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, true)) {
             psFree(md);
@@ -2180,5 +2172,5 @@
         }
 
-        object = detResidExpAnalysisObjectFromMetadata(md);
+        object = detResidExpObjectFromMetadata(md);
         if (!object) {
             psFree(md);
Index: /trunk/ippdb/tests/pop.c
===================================================================
--- /trunk/ippdb/tests/pop.c	(revision 8379)
+++ /trunk/ippdb/tests/pop.c	(revision 8380)
@@ -594,12 +594,11 @@
         char            class_id[256];
         char            uri[256];
-        char            recipe[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe)) { 
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri)) { 
             exit(EXIT_FAILURE);
         }
@@ -661,5 +660,5 @@
         }
 
-        if (!detResidImfileAnalysisPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) { 
+        if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) { 
             exit(EXIT_FAILURE);
         }
@@ -682,5 +681,5 @@
         }
 
-        if (!detResidExpAnalysisPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) { 
+        if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) { 
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/popfits.c
===================================================================
--- /trunk/ippdb/tests/popfits.c	(revision 8379)
+++ /trunk/ippdb/tests/popfits.c	(revision 8380)
@@ -804,31 +804,31 @@
         }
 
-        if (!detResidImfileAnalysisPopFits(dbh, fits, 1)) {
-            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);
-        }
-
-        // allocate a temp
-        fits = psFitsOpen(TMP_FILENAME, "w");
-        if (!fits) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidExpAnalysisPopFits(dbh, fits, 1)) {
+        if (!detResidImfilePopFits(dbh, fits, 1)) {
+            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);
+        }
+
+        // allocate a temp
+        fits = psFitsOpen(TMP_FILENAME, "w");
+        if (!fits) {
+            exit(EXIT_FAILURE);
+        }
+
+        if (!detResidExpPopFits(dbh, fits, 1)) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/popobject.c
===================================================================
--- /trunk/ippdb/tests/popobject.c	(revision 8379)
+++ /trunk/ippdb/tests/popobject.c	(revision 8380)
@@ -547,30 +547,30 @@
     {
         psDB            *dbh;
-        detResidImfileAnalysisRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detResidImfileAnalysisPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detResidExpAnalysisRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detResidExpAnalysisPopObject(dbh);
+        detResidImfileRow *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = detResidImfilePopObject(dbh);
+        if (!object) {
+            exit(EXIT_FAILURE);
+        }
+
+        psFree(object);
+        psDBCleanup(dbh);
+    }
+
+    {
+        psDB            *dbh;
+        detResidExpRow  *object;
+
+        dbh = psDBInit("localhost", "test", NULL, "test");
+        if (!dbh) {
+            exit(EXIT_FAILURE);
+        }
+
+        object = detResidExpPopObject(dbh);
         if (!object) {
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/selectrowsfits.c
===================================================================
--- /trunk/ippdb/tests/selectrowsfits.c	(revision 8379)
+++ /trunk/ippdb/tests/selectrowsfits.c	(revision 8380)
@@ -681,27 +681,27 @@
         }
 
-        if (!detResidImfileAnalysisSelectRowsFits(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 (!detResidExpAnalysisSelectRowsFits(dbh, fits, NULL, 1)) {
+        if (!detResidImfileSelectRowsFits(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 (!detResidExpSelectRowsFits(dbh, fits, NULL, 1)) {
             exit(EXIT_FAILURE);
         }
