Index: /trunk/ippdb/configure.ac
===================================================================
--- /trunk/ippdb/configure.ac	(revision 9422)
+++ /trunk/ippdb/configure.ac	(revision 9423)
@@ -1,4 +1,4 @@
 dnl
-dnl This file was generated by glueforge 0.25
+dnl This file was generated by glueforge 0.29
 dnl
 dnl Do NOT directly edit this file.
@@ -7,5 +7,5 @@
 AC_PREREQ(2.59)
 
-AC_INIT([ippdb], [0.0.48], [pan-starrs.ifa.hawaii.edu])
+AC_INIT([ippdb], [0.0.49], [pan-starrs.ifa.hawaii.edu])
 AC_CONFIG_SRCDIR([ippdb.pc.in])
 
Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 9422)
+++ /trunk/ippdb/src/ippdb.c	(revision 9423)
@@ -1,5 +1,24 @@
+/*
+ * code.c
+ *
+ * Copyright (C) 2006  Joshua Hoblitt
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * program; see the file COPYING. If not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
 /*
  *
- * This file was generated by glueforge 0.25
+ * This file was generated by glueforge 0.29
  *
  * Do NOT directly edit this file.
@@ -12,82 +31,45 @@
 #include "ippdb.h"
 
-#define IPPDB_DEFAULT_INDEX_NAME "position"
 #define WEATHER_TABLE_NAME "weather"
-#define WEATHER_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define SKYP_TRANSPARENCY_TABLE_NAME "skyp_transparency"
-#define SKYP_TRANSPARENCY_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define SKYP_ABSORPTION_TABLE_NAME "skyp_absorption"
-#define SKYP_ABSORPTION_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define SKYP_EMISSION_TABLE_NAME "skyp_emission"
-#define SKYP_EMISSION_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DIMM_TABLE_NAME "dimm"
-#define DIMM_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define SKYP_IR_TABLE_NAME "skyp_ir"
-#define SKYP_IR_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DOME_TABLE_NAME "dome"
-#define DOME_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define TELESCOPE_TABLE_NAME "telescope"
-#define TELESCOPE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define SUMMITEXP_TABLE_NAME "summitExp"
-#define SUMMITEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define PZPENDINGEXP_TABLE_NAME "pzPendingExp"
-#define PZPENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define PZPENDINGIMFILE_TABLE_NAME "pzPendingImfile"
-#define PZPENDINGIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define NEWEXP_TABLE_NAME "newExp"
-#define NEWEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define NEWIMFILE_TABLE_NAME "newImfile"
-#define NEWIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define RAWDETRENDEXP_TABLE_NAME "rawDetrendExp"
-#define RAWDETRENDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define RAWSCIENCEEXP_TABLE_NAME "rawScienceExp"
-#define RAWSCIENCEEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define RAWIMFILE_TABLE_NAME "rawImfile"
-#define RAWIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P1PENDINGEXP_TABLE_NAME "p1PendingExp"
-#define P1PENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P2PENDINGEXP_TABLE_NAME "p2PendingExp"
-#define P2PENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P2PENDINGIMFILE_TABLE_NAME "p2PendingImfile"
-#define P2PENDINGIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P2PROCESSEDEXP_TABLE_NAME "p2ProcessedExp"
-#define P2PROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P2PROCESSEDIMFILE_TABLE_NAME "p2ProcessedImfile"
-#define P2PROCESSEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P3PENDINGEXP_TABLE_NAME "p3PendingExp"
-#define P3PENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define P3PROCESSEDEXP_TABLE_NAME "p3ProcessedExp"
-#define P3PROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETRUN_TABLE_NAME "detRun"
-#define DETRUN_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETINPUTEXP_TABLE_NAME "detInputExp"
-#define DETINPUTEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETPROCESSEDIMFILE_TABLE_NAME "detProcessedImfile"
-#define DETPROCESSEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETPROCESSEDEXP_TABLE_NAME "detProcessedExp"
-#define DETPROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETSTACKEDIMFILE_TABLE_NAME "detStackedImfile"
-#define DETSTACKEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETNORMALIZEDSTATIMFILE_TABLE_NAME "detNormalizedStatImfile"
-#define DETNORMALIZEDSTATIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETNORMALIZEDIMFILE_TABLE_NAME "detNormalizedImfile"
-#define DETNORMALIZEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETNORMALIZEDEXP_TABLE_NAME "detNormalizedExp"
-#define DETNORMALIZEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETMASTERFRAME_TABLE_NAME "detMasterFrame"
-#define DETMASTERFRAME_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define DETMASTERIMFILE_TABLE_NAME "detMasterImfile"
-#define DETMASTERIMFILE_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 DETRUNSUMMARY_TABLE_NAME "detRunSummary"
-#define DETRUNSUMMARY_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
 #define MAX_STRING_LENGTH 1024
 
-psDB *ippdbInit(const char *host, const char *user, const char *passwd, const char *dbname)
-{
-    return psDBInit(host, user, passwd, dbname);
+psDB *ippdbInit(const char *host, const char *user, const char *passwd, const char *dbname, unsigned int port)
+{
+    return psDBInit(host, user, passwd, dbname, port);
 }
 
@@ -103,10 +85,4 @@
     psMetadata *clean = psMetadataCopy(NULL, md);
 
-    // don't bother to check the return status as the key we are trying to
-    // remove may or may not be there
-    // XXX someday psErr should be checked -- the only acceptable error is key
-    // not found
-    psMetadataRemoveKey(clean, IPPDB_DEFAULT_INDEX_NAME);
-    
     if (!ippdbPrintMetadataRaw(stream, clean, mdcf)) {
         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
@@ -205,10 +181,4 @@
     for (long i = 0; i < psArrayLength(mds); i++) {
         psMetadata *md = psMetadataCopy(NULL, mds->data[i]);
-        // don't bother to check the return status as the key we are trying to
-        // remove may or may not be there 
-        // XXX someday psErr should be checked -- the only acceptable error
-        // is key not found
-
-        psMetadataRemoveKey(md, IPPDB_DEFAULT_INDEX_NAME);
         if (!psMetadataAddMetadata(output, PS_LIST_TAIL, mdname, PS_META_DUPLICATE_OK, NULL, md)) {
             psError(PS_ERR_UNKNOWN, false, "failed to add a metadata item");
@@ -288,9 +258,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, WEATHER_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", WEATHER_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
@@ -403,96 +368,4 @@
     return deleted;
 }
-bool weatherPop(psDB *dbh, psF32 *temp01, psF32 *humi01, psF32 *temp02, psF32 *humi02, psF32 *temp03, psF32 *humi03, psF32 *pressure)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", WEATHER_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, WEATHER_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", WEATHER_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, WEATHER_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *temp01 = psMetadataLookupF32(&status, row, "temp01");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp01");
-        psFree(row);
-        return false;
-    }
-    *humi01 = psMetadataLookupF32(&status, row, "humi01");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi01");
-        psFree(row);
-        return false;
-    }
-    *temp02 = psMetadataLookupF32(&status, row, "temp02");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp02");
-        psFree(row);
-        return false;
-    }
-    *humi02 = psMetadataLookupF32(&status, row, "humi02");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi02");
-        psFree(row);
-        return false;
-    }
-    *temp03 = psMetadataLookupF32(&status, row, "temp03");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp03");
-        psFree(row);
-        return false;
-    }
-    *humi03 = psMetadataLookupF32(&status, row, "humi03");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi03");
-        psFree(row);
-        return false;
-    }
-    *pressure = psMetadataLookupF32(&status, row, "pressure");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item pressure");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool weatherInsertObject(psDB *dbh, weatherRow *object)
 {
@@ -509,22 +382,4 @@
 
     return true;
-}
-
-weatherRow *weatherPopObject(psDB *dbh)
-{
-    psF32           temp01;
-    psF32           humi01;
-    psF32           temp02;
-    psF32           humi02;
-    psF32           temp03;
-    psF32           humi03;
-    psF32           pressure;
-
-    if (!weatherPop(dbh, &temp01, &humi01, &temp02, &humi02, &temp03, &humi03, &pressure)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return weatherRowAlloc(temp01, humi01, temp02, humi02, temp03, humi03, pressure);
 }
 
@@ -564,46 +419,11 @@
 }
 
-bool weatherPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!weatherSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                WEATHER_TABLE_NAME, WEATHER_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool weatherSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, WEATHER_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", WEATHER_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -722,13 +542,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, WEATHER_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", WEATHER_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -847,9 +658,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_TRANSPARENCY_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_TRANSPARENCY_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
@@ -962,96 +768,4 @@
     return deleted;
 }
-bool skyp_transparencyPop(psDB *dbh, char **filter, psF64 *trans, psS32 *nstars, psF64 *ra, psF64 *decl, psF32 *exptime, psF64 *sky_bright)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_TRANSPARENCY_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, SKYP_TRANSPARENCY_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_TRANSPARENCY_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_TRANSPARENCY_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *filter = psMetadataLookupPtr(&status, row, "filter");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
-        psFree(row);
-        return false;
-    }
-    *trans = psMetadataLookupF64(&status, row, "trans");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item trans");
-        psFree(row);
-        return false;
-    }
-    *nstars = psMetadataLookupS32(&status, row, "nstars");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *exptime = psMetadataLookupF32(&status, row, "exptime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
-        psFree(row);
-        return false;
-    }
-    *sky_bright = psMetadataLookupF64(&status, row, "sky_bright");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool skyp_transparencyInsertObject(psDB *dbh, skyp_transparencyRow *object)
 {
@@ -1068,22 +782,4 @@
 
     return true;
-}
-
-skyp_transparencyRow *skyp_transparencyPopObject(psDB *dbh)
-{
-    char            filter[256];
-    psF64           trans;
-    psS32           nstars;
-    psF64           ra;
-    psF64           decl;
-    psF32           exptime;
-    psF64           sky_bright;
-
-    if (!skyp_transparencyPop(dbh, (char **)&filter, &trans, &nstars, &ra, &decl, &exptime, &sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return skyp_transparencyRowAlloc(filter, trans, nstars, ra, decl, exptime, sky_bright);
 }
 
@@ -1123,46 +819,11 @@
 }
 
-bool skyp_transparencyPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!skyp_transparencySelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                SKYP_TRANSPARENCY_TABLE_NAME, SKYP_TRANSPARENCY_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool skyp_transparencySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_TRANSPARENCY_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_TRANSPARENCY_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -1281,13 +942,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_TRANSPARENCY_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_TRANSPARENCY_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -1408,9 +1060,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_ABSORPTION_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_ABSORPTION_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
@@ -1543,108 +1190,4 @@
     return deleted;
 }
-bool skyp_absorptionPop(psDB *dbh, char **disperser_id, psF32 *atmcomp1, psF32 *atmcomp2, psF32 *atmcomp3, psS32 *nstars, psF64 *ra, psF64 *decl, psF32 *exptime, psF64 *sky_bright)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_ABSORPTION_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, SKYP_ABSORPTION_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_ABSORPTION_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_ABSORPTION_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *disperser_id = psMetadataLookupPtr(&status, row, "disperser_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");
-        psFree(row);
-        return false;
-    }
-    *atmcomp1 = psMetadataLookupF32(&status, row, "atmcomp1");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");
-        psFree(row);
-        return false;
-    }
-    *atmcomp2 = psMetadataLookupF32(&status, row, "atmcomp2");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");
-        psFree(row);
-        return false;
-    }
-    *atmcomp3 = psMetadataLookupF32(&status, row, "atmcomp3");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");
-        psFree(row);
-        return false;
-    }
-    *nstars = psMetadataLookupS32(&status, row, "nstars");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *exptime = psMetadataLookupF32(&status, row, "exptime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
-        psFree(row);
-        return false;
-    }
-    *sky_bright = psMetadataLookupF64(&status, row, "sky_bright");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool skyp_absorptionInsertObject(psDB *dbh, skyp_absorptionRow *object)
 {
@@ -1661,24 +1204,4 @@
 
     return true;
-}
-
-skyp_absorptionRow *skyp_absorptionPopObject(psDB *dbh)
-{
-    char            disperser_id[256];
-    psF32           atmcomp1;
-    psF32           atmcomp2;
-    psF32           atmcomp3;
-    psS32           nstars;
-    psF64           ra;
-    psF64           decl;
-    psF32           exptime;
-    psF64           sky_bright;
-
-    if (!skyp_absorptionPop(dbh, (char **)&disperser_id, &atmcomp1, &atmcomp2, &atmcomp3, &nstars, &ra, &decl, &exptime, &sky_bright)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return skyp_absorptionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, nstars, ra, decl, exptime, sky_bright);
 }
 
@@ -1718,46 +1241,11 @@
 }
 
-bool skyp_absorptionPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!skyp_absorptionSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                SKYP_ABSORPTION_TABLE_NAME, SKYP_ABSORPTION_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool skyp_absorptionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_ABSORPTION_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_ABSORPTION_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -1898,13 +1386,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_ABSORPTION_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_ABSORPTION_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -2022,9 +1501,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_EMISSION_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_EMISSION_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
@@ -2127,90 +1601,4 @@
     return deleted;
 }
-bool skyp_emissionPop(psDB *dbh, char **disperser_id, psF32 *atmcomp1, psF32 *atmcomp2, psF32 *atmcomp3, psF32 *continuum, psF32 *exptime)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_EMISSION_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, SKYP_EMISSION_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_EMISSION_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_EMISSION_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *disperser_id = psMetadataLookupPtr(&status, row, "disperser_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");
-        psFree(row);
-        return false;
-    }
-    *atmcomp1 = psMetadataLookupF32(&status, row, "atmcomp1");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");
-        psFree(row);
-        return false;
-    }
-    *atmcomp2 = psMetadataLookupF32(&status, row, "atmcomp2");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");
-        psFree(row);
-        return false;
-    }
-    *atmcomp3 = psMetadataLookupF32(&status, row, "atmcomp3");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");
-        psFree(row);
-        return false;
-    }
-    *continuum = psMetadataLookupF32(&status, row, "continuum");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item continuum");
-        psFree(row);
-        return false;
-    }
-    *exptime = psMetadataLookupF32(&status, row, "exptime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool skyp_emissionInsertObject(psDB *dbh, skyp_emissionRow *object)
 {
@@ -2227,21 +1615,4 @@
 
     return true;
-}
-
-skyp_emissionRow *skyp_emissionPopObject(psDB *dbh)
-{
-    char            disperser_id[256];
-    psF32           atmcomp1;
-    psF32           atmcomp2;
-    psF32           atmcomp3;
-    psF32           continuum;
-    psF32           exptime;
-
-    if (!skyp_emissionPop(dbh, (char **)&disperser_id, &atmcomp1, &atmcomp2, &atmcomp3, &continuum, &exptime)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return skyp_emissionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, continuum, exptime);
 }
 
@@ -2281,46 +1652,11 @@
 }
 
-bool skyp_emissionPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!skyp_emissionSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                SKYP_EMISSION_TABLE_NAME, SKYP_EMISSION_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool skyp_emissionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_EMISSION_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_EMISSION_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -2428,13 +1764,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_EMISSION_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_EMISSION_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -2553,9 +1880,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DIMM_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DIMM_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
@@ -2668,96 +1990,4 @@
     return deleted;
 }
-bool dimmPop(psDB *dbh, psF32 *sigmax, psF32 *sigmay, psF32 *fwhm, psF64 *ra, psF64 *decl, psF32 *expttime, char **telescope_id)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DIMM_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DIMM_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DIMM_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DIMM_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DIMM_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *sigmax = psMetadataLookupF32(&status, row, "sigmax");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmax");
-        psFree(row);
-        return false;
-    }
-    *sigmay = psMetadataLookupF32(&status, row, "sigmay");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmay");
-        psFree(row);
-        return false;
-    }
-    *fwhm = psMetadataLookupF32(&status, row, "fwhm");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *expttime = psMetadataLookupF32(&status, row, "expttime");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item expttime");
-        psFree(row);
-        return false;
-    }
-    *telescope_id = psMetadataLookupPtr(&status, row, "telescope_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope_id");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool dimmInsertObject(psDB *dbh, dimmRow *object)
 {
@@ -2774,22 +2004,4 @@
 
     return true;
-}
-
-dimmRow *dimmPopObject(psDB *dbh)
-{
-    psF32           sigmax;
-    psF32           sigmay;
-    psF32           fwhm;
-    psF64           ra;
-    psF64           decl;
-    psF32           expttime;
-    char            telescope_id[256];
-
-    if (!dimmPop(dbh, &sigmax, &sigmay, &fwhm, &ra, &decl, &expttime, (char **)&telescope_id)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return dimmRowAlloc(sigmax, sigmay, fwhm, ra, decl, expttime, telescope_id);
 }
 
@@ -2829,46 +2041,11 @@
 }
 
-bool dimmPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!dimmSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DIMM_TABLE_NAME, DIMM_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool dimmSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DIMM_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DIMM_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -2987,13 +2164,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DIMM_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DIMM_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -3110,9 +2278,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_IR_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_IR_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
@@ -3215,90 +2378,4 @@
     return deleted;
 }
-bool skyp_irPop(psDB *dbh, psF64 *sky_bright, psF64 *sky_var, psF64 *ra, psF64 *decl, psF32 *fov_x, psF32 *fov_y)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_IR_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, SKYP_IR_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_IR_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_IR_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *sky_bright = psMetadataLookupF64(&status, row, "sky_bright");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
-        psFree(row);
-        return false;
-    }
-    *sky_var = psMetadataLookupF64(&status, row, "sky_var");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_var");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *fov_x = psMetadataLookupF32(&status, row, "fov_x");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_x");
-        psFree(row);
-        return false;
-    }
-    *fov_y = psMetadataLookupF32(&status, row, "fov_y");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_y");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool skyp_irInsertObject(psDB *dbh, skyp_irRow *object)
 {
@@ -3315,21 +2392,4 @@
 
     return true;
-}
-
-skyp_irRow *skyp_irPopObject(psDB *dbh)
-{
-    psF64           sky_bright;
-    psF64           sky_var;
-    psF64           ra;
-    psF64           decl;
-    psF32           fov_x;
-    psF32           fov_y;
-
-    if (!skyp_irPop(dbh, &sky_bright, &sky_var, &ra, &decl, &fov_x, &fov_y)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return skyp_irRowAlloc(sky_bright, sky_var, ra, decl, fov_x, fov_y);
 }
 
@@ -3369,46 +2429,11 @@
 }
 
-bool skyp_irPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!skyp_irSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                SKYP_IR_TABLE_NAME, SKYP_IR_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool skyp_irSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_IR_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_IR_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -3516,13 +2541,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_IR_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_IR_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -3637,9 +2653,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DOME_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DOME_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
@@ -3722,78 +2733,4 @@
     return deleted;
 }
-bool domePop(psDB *dbh, psF32 *az, bool *open, bool *light, bool *track)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DOME_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DOME_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DOME_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DOME_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DOME_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *az = psMetadataLookupF32(&status, row, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        psFree(row);
-        return false;
-    }
-    *open = psMetadataLookupBool(&status, row, "open");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item open");
-        psFree(row);
-        return false;
-    }
-    *light = psMetadataLookupBool(&status, row, "light");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item light");
-        psFree(row);
-        return false;
-    }
-    *track = psMetadataLookupBool(&status, row, "track");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item track");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool domeInsertObject(psDB *dbh, domeRow *object)
 {
@@ -3810,19 +2747,4 @@
 
     return true;
-}
-
-domeRow *domePopObject(psDB *dbh)
-{
-    psF32           az;
-    bool            open;
-    bool            light;
-    bool            track;
-
-    if (!domePop(dbh, &az, &open, &light, &track)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return domeRowAlloc(az, open, light, track);
 }
 
@@ -3862,46 +2784,11 @@
 }
 
-bool domePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!domeSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DOME_TABLE_NAME, DOME_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool domeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DOME_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DOME_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -3987,13 +2874,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DOME_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DOME_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -4110,9 +2988,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, TELESCOPE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", TELESCOPE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, "255")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
@@ -4205,84 +3078,4 @@
     return deleted;
 }
-bool telescopePop(psDB *dbh, char **guide, psF32 *alt, psF32 *az, psF64 *ra, psF64 *decl)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", TELESCOPE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, TELESCOPE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", TELESCOPE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, TELESCOPE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *guide = psMetadataLookupPtr(&status, row, "guide");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item guide");
-        psFree(row);
-        return false;
-    }
-    *alt = psMetadataLookupF32(&status, row, "alt");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
-        psFree(row);
-        return false;
-    }
-    *az = psMetadataLookupF32(&status, row, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool telescopeInsertObject(psDB *dbh, telescopeRow *object)
 {
@@ -4299,20 +3092,4 @@
 
     return true;
-}
-
-telescopeRow *telescopePopObject(psDB *dbh)
-{
-    char            guide[256];
-    psF32           alt;
-    psF32           az;
-    psF64           ra;
-    psF64           decl;
-
-    if (!telescopePop(dbh, (char **)&guide, &alt, &az, &ra, &decl)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return telescopeRowAlloc(guide, alt, az, ra, decl);
 }
 
@@ -4352,46 +3129,11 @@
 }
 
-bool telescopePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!telescopeSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                TELESCOPE_TABLE_NAME, TELESCOPE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool telescopeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, TELESCOPE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", TELESCOPE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -4488,13 +3230,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, TELESCOPE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", TELESCOPE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -4615,9 +3348,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, SUMMITEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SUMMITEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
@@ -4710,84 +3438,4 @@
     return deleted;
 }
-bool summitExpPop(psDB *dbh, char **exp_id, char **camera, char **telescope, char **exp_type, char **uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, SUMMITEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SUMMITEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, SUMMITEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SUMMITEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, SUMMITEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, SUMMITEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_id = psMetadataLookupPtr(&status, row, "exp_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
-        psFree(row);
-        return false;
-    }
-    *camera = psMetadataLookupPtr(&status, row, "camera");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
-        psFree(row);
-        return false;
-    }
-    *telescope = psMetadataLookupPtr(&status, row, "telescope");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
-        psFree(row);
-        return false;
-    }
-    *exp_type = psMetadataLookupPtr(&status, row, "exp_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool summitExpInsertObject(psDB *dbh, summitExpRow *object)
 {
@@ -4804,20 +3452,4 @@
 
     return true;
-}
-
-summitExpRow *summitExpPopObject(psDB *dbh)
-{
-    char            exp_id[256];
-    char            camera[256];
-    char            telescope[256];
-    char            exp_type[256];
-    char            uri[256];
-
-    if (!summitExpPop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, (char **)&uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return summitExpRowAlloc(exp_id, camera, telescope, exp_type, uri);
 }
 
@@ -4857,46 +3489,11 @@
 }
 
-bool summitExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!summitExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                SUMMITEXP_TABLE_NAME, SUMMITEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool summitExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, SUMMITEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SUMMITEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SUMMITEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -4993,13 +3590,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SUMMITEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SUMMITEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -5119,9 +3707,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, PZPENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", PZPENDINGEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
@@ -5214,84 +3797,4 @@
     return deleted;
 }
-bool pzPendingExpPop(psDB *dbh, char **exp_id, char **camera, char **telescope, char **exp_type, psS32 *imfiles)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, PZPENDINGEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, PZPENDINGEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, PZPENDINGEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, PZPENDINGEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_id = psMetadataLookupPtr(&status, row, "exp_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
-        psFree(row);
-        return false;
-    }
-    *camera = psMetadataLookupPtr(&status, row, "camera");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
-        psFree(row);
-        return false;
-    }
-    *telescope = psMetadataLookupPtr(&status, row, "telescope");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
-        psFree(row);
-        return false;
-    }
-    *exp_type = psMetadataLookupPtr(&status, row, "exp_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
-        psFree(row);
-        return false;
-    }
-    *imfiles = psMetadataLookupS32(&status, row, "imfiles");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool pzPendingExpInsertObject(psDB *dbh, pzPendingExpRow *object)
 {
@@ -5308,20 +3811,4 @@
 
     return true;
-}
-
-pzPendingExpRow *pzPendingExpPopObject(psDB *dbh)
-{
-    char            exp_id[256];
-    char            camera[256];
-    char            telescope[256];
-    char            exp_type[256];
-    psS32           imfiles;
-
-    if (!pzPendingExpPop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return pzPendingExpRowAlloc(exp_id, camera, telescope, exp_type, imfiles);
 }
 
@@ -5361,46 +3848,11 @@
 }
 
-bool pzPendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!pzPendingExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                PZPENDINGEXP_TABLE_NAME, PZPENDINGEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool pzPendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, PZPENDINGEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, PZPENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -5497,13 +3949,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, PZPENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -5629,9 +4072,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, PZPENDINGIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", PZPENDINGIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
@@ -5754,102 +4192,4 @@
     return deleted;
 }
-bool pzPendingImfilePop(psDB *dbh, char **exp_id, char **camera, char **telescope, psS32 *bytes, char **md5sum, char **class, char **class_id, char **uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, PZPENDINGIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, PZPENDINGIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, PZPENDINGIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, PZPENDINGIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_id = psMetadataLookupPtr(&status, row, "exp_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
-        psFree(row);
-        return false;
-    }
-    *camera = psMetadataLookupPtr(&status, row, "camera");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
-        psFree(row);
-        return false;
-    }
-    *telescope = psMetadataLookupPtr(&status, row, "telescope");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
-        psFree(row);
-        return false;
-    }
-    *bytes = psMetadataLookupS32(&status, row, "bytes");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bytes");
-        psFree(row);
-        return false;
-    }
-    *md5sum = psMetadataLookupPtr(&status, row, "md5sum");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item md5sum");
-        psFree(row);
-        return false;
-    }
-    *class = psMetadataLookupPtr(&status, row, "class");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool pzPendingImfileInsertObject(psDB *dbh, pzPendingImfileRow *object)
 {
@@ -5866,23 +4206,4 @@
 
     return true;
-}
-
-pzPendingImfileRow *pzPendingImfilePopObject(psDB *dbh)
-{
-    char            exp_id[256];
-    char            camera[256];
-    char            telescope[256];
-    psS32           bytes;
-    char            md5sum[256];
-    char            class[256];
-    char            class_id[256];
-    char            uri[256];
-
-    if (!pzPendingImfilePop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, &bytes, (char **)&md5sum, (char **)&class, (char **)&class_id, (char **)&uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return pzPendingImfileRowAlloc(exp_id, camera, telescope, bytes, md5sum, class, class_id, uri);
 }
 
@@ -5922,46 +4243,11 @@
 }
 
-bool pzPendingImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!pzPendingImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                PZPENDINGIMFILE_TABLE_NAME, PZPENDINGIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool pzPendingImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, PZPENDINGIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, PZPENDINGIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -6091,13 +4377,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, PZPENDINGIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -6219,9 +4496,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, NEWEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", NEWEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -6324,90 +4596,4 @@
     return deleted;
 }
-bool newExpPop(psDB *dbh, char **exp_tag, char **exp_id, char **camera, char **telescope, char **exp_type, psS32 *imfiles)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, NEWEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, NEWEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, NEWEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, NEWEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *exp_id = psMetadataLookupPtr(&status, row, "exp_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
-        psFree(row);
-        return false;
-    }
-    *camera = psMetadataLookupPtr(&status, row, "camera");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
-        psFree(row);
-        return false;
-    }
-    *telescope = psMetadataLookupPtr(&status, row, "telescope");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
-        psFree(row);
-        return false;
-    }
-    *exp_type = psMetadataLookupPtr(&status, row, "exp_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
-        psFree(row);
-        return false;
-    }
-    *imfiles = psMetadataLookupS32(&status, row, "imfiles");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool newExpInsertObject(psDB *dbh, newExpRow *object)
 {
@@ -6424,21 +4610,4 @@
 
     return true;
-}
-
-newExpRow *newExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            exp_id[256];
-    char            camera[256];
-    char            telescope[256];
-    char            exp_type[256];
-    psS32           imfiles;
-
-    if (!newExpPop(dbh, (char **)&exp_tag, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return newExpRowAlloc(exp_tag, exp_id, camera, telescope, exp_type, imfiles);
 }
 
@@ -6478,46 +4647,11 @@
 }
 
-bool newExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!newExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                NEWEXP_TABLE_NAME, NEWEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool newExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, NEWEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, NEWEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -6625,13 +4759,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, NEWEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -6750,9 +4875,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, NEWIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", NEWIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -6835,78 +4955,4 @@
     return deleted;
 }
-bool newImfilePop(psDB *dbh, char **exp_tag, char **class, char **class_id, char **uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, NEWIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, NEWIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, NEWIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, NEWIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *class = psMetadataLookupPtr(&status, row, "class");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool newImfileInsertObject(psDB *dbh, newImfileRow *object)
 {
@@ -6923,19 +4969,4 @@
 
     return true;
-}
-
-newImfileRow *newImfilePopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            class[256];
-    char            class_id[256];
-    char            uri[256];
-
-    if (!newImfilePop(dbh, (char **)&exp_tag, (char **)&class, (char **)&class_id, (char **)&uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return newImfileRowAlloc(exp_tag, class, class_id, uri);
 }
 
@@ -6975,46 +5006,11 @@
 }
 
-bool newImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!newImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                NEWIMFILE_TABLE_NAME, NEWIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool newImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, NEWIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, NEWIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -7100,13 +5096,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, NEWIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -7241,9 +5228,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, RAWDETRENDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", RAWDETRENDEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -7466,162 +5448,4 @@
     return deleted;
 }
-bool rawDetrendExpPop(psDB *dbh, char **exp_tag, char **camera, char **telescope, char **exp_type, psS32 *imfiles, char **filter, psF32 *airmass, psF64 *ra, psF64 *decl, psF32 *exp_time, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF64 *alt, psF64 *az, psF32 *ccd_temp, psF64 *posang, char **object)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, RAWDETRENDEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWDETRENDEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, RAWDETRENDEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWDETRENDEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, RAWDETRENDEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, RAWDETRENDEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *camera = psMetadataLookupPtr(&status, row, "camera");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
-        psFree(row);
-        return false;
-    }
-    *telescope = psMetadataLookupPtr(&status, row, "telescope");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
-        psFree(row);
-        return false;
-    }
-    *exp_type = psMetadataLookupPtr(&status, row, "exp_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
-        psFree(row);
-        return false;
-    }
-    *imfiles = psMetadataLookupS32(&status, row, "imfiles");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
-        psFree(row);
-        return false;
-    }
-    *filter = psMetadataLookupPtr(&status, row, "filter");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
-        psFree(row);
-        return false;
-    }
-    *airmass = psMetadataLookupF32(&status, row, "airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *exp_time = psMetadataLookupF32(&status, row, "exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
-        psFree(row);
-        return false;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *alt = psMetadataLookupF64(&status, row, "alt");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
-        psFree(row);
-        return false;
-    }
-    *az = psMetadataLookupF64(&status, row, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        psFree(row);
-        return false;
-    }
-    *ccd_temp = psMetadataLookupF32(&status, row, "ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
-        psFree(row);
-        return false;
-    }
-    *posang = psMetadataLookupF64(&status, row, "posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
-        psFree(row);
-        return false;
-    }
-    *object = psMetadataLookupPtr(&status, row, "object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool rawDetrendExpInsertObject(psDB *dbh, rawDetrendExpRow *object)
 {
@@ -7638,33 +5462,4 @@
 
     return true;
-}
-
-rawDetrendExpRow *rawDetrendExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            camera[256];
-    char            telescope[256];
-    char            exp_type[256];
-    psS32           imfiles;
-    char            filter[256];
-    psF32           airmass;
-    psF64           ra;
-    psF64           decl;
-    psF32           exp_time;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF64           alt;
-    psF64           az;
-    psF32           ccd_temp;
-    psF64           posang;
-    char            object[256];
-
-    if (!rawDetrendExpPop(dbh, (char **)&exp_tag, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return rawDetrendExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
 }
 
@@ -7704,46 +5499,11 @@
 }
 
-bool rawDetrendExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!rawDetrendExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                RAWDETRENDEXP_TABLE_NAME, RAWDETRENDEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool rawDetrendExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, RAWDETRENDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, RAWDETRENDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWDETRENDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -7985,13 +5745,4 @@
     }
 
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, RAWDETRENDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWDETRENDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
-    }
-
     // convert psMetadata rows to row objects
 
@@ -8124,9 +5875,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, RAWSCIENCEEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", RAWSCIENCEEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -8349,162 +6095,4 @@
     return deleted;
 }
-bool rawScienceExpPop(psDB *dbh, char **exp_tag, char **camera, char **telescope, char **exp_type, psS32 *imfiles, char **filter, psF32 *airmass, psF64 *ra, psF64 *decl, psF32 *exp_time, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF64 *alt, psF64 *az, psF32 *ccd_temp, psF64 *posang, char **object)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, RAWSCIENCEEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWSCIENCEEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, RAWSCIENCEEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWSCIENCEEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, RAWSCIENCEEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, RAWSCIENCEEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *camera = psMetadataLookupPtr(&status, row, "camera");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
-        psFree(row);
-        return false;
-    }
-    *telescope = psMetadataLookupPtr(&status, row, "telescope");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
-        psFree(row);
-        return false;
-    }
-    *exp_type = psMetadataLookupPtr(&status, row, "exp_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
-        psFree(row);
-        return false;
-    }
-    *imfiles = psMetadataLookupS32(&status, row, "imfiles");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
-        psFree(row);
-        return false;
-    }
-    *filter = psMetadataLookupPtr(&status, row, "filter");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
-        psFree(row);
-        return false;
-    }
-    *airmass = psMetadataLookupF32(&status, row, "airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *exp_time = psMetadataLookupF32(&status, row, "exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
-        psFree(row);
-        return false;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *alt = psMetadataLookupF64(&status, row, "alt");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
-        psFree(row);
-        return false;
-    }
-    *az = psMetadataLookupF64(&status, row, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        psFree(row);
-        return false;
-    }
-    *ccd_temp = psMetadataLookupF32(&status, row, "ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
-        psFree(row);
-        return false;
-    }
-    *posang = psMetadataLookupF64(&status, row, "posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
-        psFree(row);
-        return false;
-    }
-    *object = psMetadataLookupPtr(&status, row, "object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool rawScienceExpInsertObject(psDB *dbh, rawScienceExpRow *object)
 {
@@ -8521,33 +6109,4 @@
 
     return true;
-}
-
-rawScienceExpRow *rawScienceExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            camera[256];
-    char            telescope[256];
-    char            exp_type[256];
-    psS32           imfiles;
-    char            filter[256];
-    psF32           airmass;
-    psF64           ra;
-    psF64           decl;
-    psF32           exp_time;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF64           alt;
-    psF64           az;
-    psF32           ccd_temp;
-    psF64           posang;
-    char            object[256];
-
-    if (!rawScienceExpPop(dbh, (char **)&exp_tag, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return rawScienceExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
 }
 
@@ -8587,46 +6146,11 @@
 }
 
-bool rawScienceExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!rawScienceExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                RAWSCIENCEEXP_TABLE_NAME, RAWSCIENCEEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool rawScienceExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, RAWSCIENCEEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, RAWSCIENCEEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWSCIENCEEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -8868,13 +6392,4 @@
     }
 
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, RAWSCIENCEEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWSCIENCEEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
-    }
-
     // convert psMetadata rows to row objects
 
@@ -9008,9 +6523,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, RAWIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", RAWIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -9233,162 +6743,4 @@
     return deleted;
 }
-bool rawImfilePop(psDB *dbh, char **exp_tag, char **class, char **class_id, char **uri, char **exp_type, char **filter, psF32 *airmass, psF64 *ra, psF64 *decl, psF32 *exp_time, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF64 *alt, psF64 *az, psF32 *ccd_temp, psF64 *posang, char **object)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, RAWIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, RAWIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, RAWIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, RAWIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *class = psMetadataLookupPtr(&status, row, "class");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        return false;
-    }
-    *exp_type = psMetadataLookupPtr(&status, row, "exp_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
-        psFree(row);
-        return false;
-    }
-    *filter = psMetadataLookupPtr(&status, row, "filter");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
-        psFree(row);
-        return false;
-    }
-    *airmass = psMetadataLookupF32(&status, row, "airmass");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
-        psFree(row);
-        return false;
-    }
-    *ra = psMetadataLookupF64(&status, row, "ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
-        psFree(row);
-        return false;
-    }
-    *decl = psMetadataLookupF64(&status, row, "decl");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
-        psFree(row);
-        return false;
-    }
-    *exp_time = psMetadataLookupF32(&status, row, "exp_time");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
-        psFree(row);
-        return false;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *alt = psMetadataLookupF64(&status, row, "alt");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
-        psFree(row);
-        return false;
-    }
-    *az = psMetadataLookupF64(&status, row, "az");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
-        psFree(row);
-        return false;
-    }
-    *ccd_temp = psMetadataLookupF32(&status, row, "ccd_temp");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
-        psFree(row);
-        return false;
-    }
-    *posang = psMetadataLookupF64(&status, row, "posang");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
-        psFree(row);
-        return false;
-    }
-    *object = psMetadataLookupPtr(&status, row, "object");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool rawImfileInsertObject(psDB *dbh, rawImfileRow *object)
 {
@@ -9405,33 +6757,4 @@
 
     return true;
-}
-
-rawImfileRow *rawImfilePopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            class[256];
-    char            class_id[256];
-    char            uri[256];
-    char            exp_type[256];
-    char            filter[256];
-    psF32           airmass;
-    psF64           ra;
-    psF64           decl;
-    psF32           exp_time;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF64           alt;
-    psF64           az;
-    psF32           ccd_temp;
-    psF64           posang;
-    char            object[256];
-
-    if (!rawImfilePop(dbh, (char **)&exp_tag, (char **)&class, (char **)&class_id, (char **)&uri, (char **)&exp_type, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return rawImfileRowAlloc(exp_tag, class, class_id, uri, exp_type, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
 }
 
@@ -9471,46 +6794,11 @@
 }
 
-bool rawImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!rawImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                RAWIMFILE_TABLE_NAME, RAWIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool rawImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, RAWIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, RAWIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -9752,13 +7040,4 @@
     }
 
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, RAWIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
-    }
-
     // convert psMetadata rows to row objects
 
@@ -9872,9 +7151,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P1PENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P1PENDINGEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -9947,72 +7221,4 @@
     return deleted;
 }
-bool p1PendingExpPop(psDB *dbh, char **exp_tag, char **recipe, psS32 *p1_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P1PENDINGEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P1PENDINGEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P1PENDINGEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P1PENDINGEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P1PENDINGEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P1PENDINGEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        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;
-    }
-    *p1_version = psMetadataLookupS32(&status, row, "p1_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p1PendingExpInsertObject(psDB *dbh, p1PendingExpRow *object)
 {
@@ -10029,18 +7235,4 @@
 
     return true;
-}
-
-p1PendingExpRow *p1PendingExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            recipe[256];
-    psS32           p1_version;
-
-    if (!p1PendingExpPop(dbh, (char **)&exp_tag, (char **)&recipe, &p1_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p1PendingExpRowAlloc(exp_tag, recipe, p1_version);
 }
 
@@ -10080,46 +7272,11 @@
 }
 
-bool p1PendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p1PendingExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P1PENDINGEXP_TABLE_NAME, P1PENDINGEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p1PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P1PENDINGEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P1PENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P1PENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -10194,13 +7351,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P1PENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P1PENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -10317,9 +7465,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P2PENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PENDINGEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -10402,78 +7545,4 @@
     return deleted;
 }
-bool p2PendingExpPop(psDB *dbh, char **exp_tag, char **recipe, psS32 *p1_version, psS32 *p2_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P2PENDINGEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P2PENDINGEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P2PENDINGEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P2PENDINGEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        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;
-    }
-    *p1_version = psMetadataLookupS32(&status, row, "p1_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
-        psFree(row);
-        return false;
-    }
-    *p2_version = psMetadataLookupS32(&status, row, "p2_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p2PendingExpInsertObject(psDB *dbh, p2PendingExpRow *object)
 {
@@ -10490,19 +7559,4 @@
 
     return true;
-}
-
-p2PendingExpRow *p2PendingExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            recipe[256];
-    psS32           p1_version;
-    psS32           p2_version;
-
-    if (!p2PendingExpPop(dbh, (char **)&exp_tag, (char **)&recipe, &p1_version, &p2_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p2PendingExpRowAlloc(exp_tag, recipe, p1_version, p2_version);
 }
 
@@ -10542,46 +7596,11 @@
 }
 
-bool p2PendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p2PendingExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P2PENDINGEXP_TABLE_NAME, P2PENDINGEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p2PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P2PENDINGEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -10667,13 +7686,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -10794,9 +7804,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P2PENDINGIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PENDINGIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -10899,90 +7904,4 @@
     return deleted;
 }
-bool p2PendingImfilePop(psDB *dbh, char **exp_tag, char **class_id, char **uri, char **recipe, psS32 *p1_version, psS32 *p2_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P2PENDINGIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P2PENDINGIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P2PENDINGIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P2PENDINGIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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;
-    }
-    *p1_version = psMetadataLookupS32(&status, row, "p1_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
-        psFree(row);
-        return false;
-    }
-    *p2_version = psMetadataLookupS32(&status, row, "p2_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p2PendingImfileInsertObject(psDB *dbh, p2PendingImfileRow *object)
 {
@@ -10999,21 +7918,4 @@
 
     return true;
-}
-
-p2PendingImfileRow *p2PendingImfilePopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            class_id[256];
-    char            uri[256];
-    char            recipe[256];
-    psS32           p1_version;
-    psS32           p2_version;
-
-    if (!p2PendingImfilePop(dbh, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &p1_version, &p2_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p2PendingImfileRowAlloc(exp_tag, class_id, uri, recipe, p1_version, p2_version);
 }
 
@@ -11053,46 +7955,11 @@
 }
 
-bool p2PendingImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p2PendingImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P2PENDINGIMFILE_TABLE_NAME, P2PENDINGIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p2PendingImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P2PENDINGIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PENDINGIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -11200,13 +8067,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PENDINGIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -11321,9 +8179,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P2PROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PROCESSEDEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -11396,72 +8249,4 @@
     return deleted;
 }
-bool p2ProcessedExpPop(psDB *dbh, char **exp_tag, psS32 *p1_version, psS32 *p2_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P2PROCESSEDEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P2PROCESSEDEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P2PROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P2PROCESSEDEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *p1_version = psMetadataLookupS32(&status, row, "p1_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
-        psFree(row);
-        return false;
-    }
-    *p2_version = psMetadataLookupS32(&status, row, "p2_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p2ProcessedExpInsertObject(psDB *dbh, p2ProcessedExpRow *object)
 {
@@ -11478,18 +8263,4 @@
 
     return true;
-}
-
-p2ProcessedExpRow *p2ProcessedExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    psS32           p1_version;
-    psS32           p2_version;
-
-    if (!p2ProcessedExpPop(dbh, (char **)&exp_tag, &p1_version, &p2_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p2ProcessedExpRowAlloc(exp_tag, p1_version, p2_version);
 }
 
@@ -11529,46 +8300,11 @@
 }
 
-bool p2ProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p2ProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P2PROCESSEDEXP_TABLE_NAME, P2PROCESSEDEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p2ProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P2PROCESSEDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PROCESSEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -11643,13 +8379,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PROCESSEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -11777,9 +8504,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P2PROCESSEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PROCESSEDIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -11932,120 +8654,4 @@
     return deleted;
 }
-bool p2ProcessedImfilePop(psDB *dbh, char **exp_tag, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri, psS32 *p1_version, psS32 *p2_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P2PROCESSEDIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P2PROCESSEDIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P2PROCESSEDIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P2PROCESSEDIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-    *p1_version = psMetadataLookupS32(&status, row, "p1_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
-        psFree(row);
-        return false;
-    }
-    *p2_version = psMetadataLookupS32(&status, row, "p2_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p2ProcessedImfileInsertObject(psDB *dbh, p2ProcessedImfileRow *object)
 {
@@ -12062,26 +8668,4 @@
 
     return true;
-}
-
-p2ProcessedImfileRow *p2ProcessedImfilePopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            class_id[256];
-    char            uri[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-    psS32           p1_version;
-    psS32           p2_version;
-
-    if (!p2ProcessedImfilePop(dbh, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &p1_version, &p2_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p2ProcessedImfileRowAlloc(exp_tag, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, p1_version, p2_version);
 }
 
@@ -12121,46 +8705,11 @@
 }
 
-bool p2ProcessedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p2ProcessedImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P2PROCESSEDIMFILE_TABLE_NAME, P2PROCESSEDIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p2ProcessedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P2PROCESSEDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PROCESSEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -12323,13 +8872,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PROCESSEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -12444,9 +8984,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P3PENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P3PENDINGEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -12519,72 +9054,4 @@
     return deleted;
 }
-bool p3PendingExpPop(psDB *dbh, char **exp_tag, psS32 *p2_version, psS32 *p3_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P3PENDINGEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PENDINGEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P3PENDINGEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PENDINGEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P3PENDINGEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P3PENDINGEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *p2_version = psMetadataLookupS32(&status, row, "p2_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
-        psFree(row);
-        return false;
-    }
-    *p3_version = psMetadataLookupS32(&status, row, "p3_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p3PendingExpInsertObject(psDB *dbh, p3PendingExpRow *object)
 {
@@ -12601,18 +9068,4 @@
 
     return true;
-}
-
-p3PendingExpRow *p3PendingExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    psS32           p2_version;
-    psS32           p3_version;
-
-    if (!p3PendingExpPop(dbh, (char **)&exp_tag, &p2_version, &p3_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p3PendingExpRowAlloc(exp_tag, p2_version, p3_version);
 }
 
@@ -12652,46 +9105,11 @@
 }
 
-bool p3PendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p3PendingExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P3PENDINGEXP_TABLE_NAME, P3PENDINGEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p3PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P3PENDINGEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P3PENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -12766,13 +9184,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P3PENDINGEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PENDINGEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -12903,9 +9312,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, P3PROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P3PROCESSEDEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
@@ -13098,144 +9502,4 @@
     return deleted;
 }
-bool p3ProcessedExpPop(psDB *dbh, char **exp_tag, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF32 *sigma_ra, psF32 *sigma_dec, psS32 *nastro, char **b1_uri, char **b2_uri, psF32 *zp_mean, psF32 *zp_stdev, psS32 *p2_version, psS32 *p3_version)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, P3PROCESSEDEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PROCESSEDEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, P3PROCESSEDEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PROCESSEDEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, P3PROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, P3PROCESSEDEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *sigma_ra = psMetadataLookupF32(&status, row, "sigma_ra");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_ra");
-        psFree(row);
-        return false;
-    }
-    *sigma_dec = psMetadataLookupF32(&status, row, "sigma_dec");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_dec");
-        psFree(row);
-        return false;
-    }
-    *nastro = psMetadataLookupS32(&status, row, "nastro");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nastro");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-    *zp_mean = psMetadataLookupF32(&status, row, "zp_mean");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_mean");
-        psFree(row);
-        return false;
-    }
-    *zp_stdev = psMetadataLookupF32(&status, row, "zp_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_stdev");
-        psFree(row);
-        return false;
-    }
-    *p2_version = psMetadataLookupS32(&status, row, "p2_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
-        psFree(row);
-        return false;
-    }
-    *p3_version = psMetadataLookupS32(&status, row, "p3_version");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool p3ProcessedExpInsertObject(psDB *dbh, p3ProcessedExpRow *object)
 {
@@ -13252,30 +9516,4 @@
 
     return true;
-}
-
-p3ProcessedExpRow *p3ProcessedExpPopObject(psDB *dbh)
-{
-    char            exp_tag[256];
-    char            uri[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    psF32           sigma_ra;
-    psF32           sigma_dec;
-    psS32           nastro;
-    char            b1_uri[256];
-    char            b2_uri[256];
-    psF32           zp_mean;
-    psF32           zp_stdev;
-    psS32           p2_version;
-    psS32           p3_version;
-
-    if (!p3ProcessedExpPop(dbh, (char **)&exp_tag, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, &sigma_ra, &sigma_dec, &nastro, (char **)&b1_uri, (char **)&b2_uri, &zp_mean, &zp_stdev, &p2_version, &p3_version)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return p3ProcessedExpRowAlloc(exp_tag, uri, recipe, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, nastro, b1_uri, b2_uri, zp_mean, zp_stdev, p2_version, p3_version);
 }
 
@@ -13315,46 +9553,11 @@
 }
 
-bool p3ProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!p3ProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                P3PROCESSEDEXP_TABLE_NAME, P3PROCESSEDEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool p3ProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, P3PROCESSEDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P3PROCESSEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PROCESSEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -13563,13 +9766,4 @@
     }
 
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P3PROCESSEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PROCESSEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
-    }
-
     // convert psMetadata rows to row objects
 
@@ -13657,5 +9851,5 @@
 static void detRunRowFree(detRunRow *object);
 
-detRunRow *detRunRowAlloc(psS32 iteration, const char *det_type, const char *state)
+detRunRow *detRunRowAlloc(psS32 det_id, psS32 iteration, const char *det_type, const char *state)
 {
     detRunRow       *_object;
@@ -13664,4 +9858,5 @@
     psMemSetDeallocator(_object, (psFreeFunc)detRunRowFree);
 
+    _object->det_id = det_id;
     _object->iteration = iteration;
     _object->det_type = psStringCopy(det_type);
@@ -13683,6 +9878,6 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRUN_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRUN_INDEX_NAME);
+    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key AUTO_INCREMENT", 0)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
         psFree(md);
         return false;
@@ -13716,5 +9911,5 @@
 }
 
-bool detRunInsert(psDB * dbh, psS32 iteration, const char *det_type, const char *state)
+bool detRunInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *det_type, const char *state)
 {
     psMetadata      *md;
@@ -13722,4 +9917,9 @@
 
     md = psMetadataAlloc();
+    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
+        psFree(md);
+        return false;
+    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
@@ -13758,75 +9958,7 @@
     return deleted;
 }
-bool detRunPop(psDB *dbh, psS32 *iteration, char **det_type, char **state)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETRUN_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUN_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETRUN_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUN_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETRUN_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETRUN_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *det_type = psMetadataLookupPtr(&status, row, "det_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_type");
-        psFree(row);
-        return false;
-    }
-    *state = psMetadataLookupPtr(&status, row, "state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detRunInsertObject(psDB *dbh, detRunRow *object)
 {
-    return detRunInsert(dbh, object->iteration, object->det_type, object->state);
+    return detRunInsert(dbh, object->det_id, object->iteration, object->det_type, object->state);
 }
 
@@ -13840,18 +9972,4 @@
 
     return true;
-}
-
-detRunRow *detRunPopObject(psDB *dbh)
-{
-    psS32           iteration;
-    char            det_type[256];
-    char            state[256];
-
-    if (!detRunPop(dbh, &iteration, (char **)&det_type, (char **)&state)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detRunRowAlloc(iteration, det_type, state);
 }
 
@@ -13891,46 +10009,11 @@
 }
 
-bool detRunPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detRunSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETRUN_TABLE_NAME, DETRUN_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detRunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETRUN_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRUN_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUN_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -13952,4 +10035,9 @@
 
     md = psMetadataAlloc();
+    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
+        psFree(md);
+        return NULL;
+    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
@@ -13974,8 +10062,14 @@
 {
     bool            status;
+    psS32           det_id;
     psS32           iteration;
     char            *det_type;
     char            *state;
 
+    det_id = psMetadataLookupS32(&status, md, "det_id");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
+        return false;
+    }
     iteration = psMetadataLookupS32(&status, md, "iteration");
     if (!status) {
@@ -13994,5 +10088,5 @@
     }
 
-    return detRunRowAlloc(iteration, det_type, state);
+    return detRunRowAlloc(det_id, iteration, det_type, state);
 }
 psArray *detRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
@@ -14005,13 +10099,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRUN_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUN_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -14127,9 +10212,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETINPUTEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETINPUTEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -14212,78 +10292,4 @@
     return deleted;
 }
-bool detInputExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_tag, bool *include)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETINPUTEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETINPUTEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETINPUTEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETINPUTEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETINPUTEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETINPUTEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *include = psMetadataLookupBool(&status, row, "include");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item include");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detInputExpInsertObject(psDB *dbh, detInputExpRow *object)
 {
@@ -14300,19 +10306,4 @@
 
     return true;
-}
-
-detInputExpRow *detInputExpPopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            exp_tag[256];
-    bool            include;
-
-    if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_tag, &include)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detInputExpRowAlloc(det_id, iteration, exp_tag, include);
 }
 
@@ -14352,46 +10343,11 @@
 }
 
-bool detInputExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detInputExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETINPUTEXP_TABLE_NAME, DETINPUTEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detInputExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETINPUTEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETINPUTEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETINPUTEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -14477,13 +10433,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETINPUTEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETINPUTEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -14610,9 +10557,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETPROCESSEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETPROCESSEDIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -14755,114 +10697,4 @@
     return deleted;
 }
-bool detProcessedImfilePop(psDB *dbh, psS32 *det_id, char **exp_tag, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETPROCESSEDIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETPROCESSEDIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETPROCESSEDIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETPROCESSEDIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detProcessedImfileInsertObject(psDB *dbh, detProcessedImfileRow *object)
 {
@@ -14879,25 +10711,4 @@
 
     return true;
-}
-
-detProcessedImfileRow *detProcessedImfilePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    char            exp_tag[256];
-    char            class_id[256];
-    char            uri[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-
-    if (!detProcessedImfilePop(dbh, &det_id, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detProcessedImfileRowAlloc(det_id, exp_tag, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
 }
 
@@ -14937,46 +10748,11 @@
 }
 
-bool detProcessedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detProcessedImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETPROCESSEDIMFILE_TABLE_NAME, DETPROCESSEDIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detProcessedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETPROCESSEDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETPROCESSEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -15128,13 +10904,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETPROCESSEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -15257,9 +11024,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETPROCESSEDEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -15382,102 +11144,4 @@
     return deleted;
 }
-bool detProcessedExpPop(psDB *dbh, psS32 *det_id, char **exp_tag, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETPROCESSEDEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detProcessedExpInsertObject(psDB *dbh, detProcessedExpRow *object)
 {
@@ -15494,23 +11158,4 @@
 
     return true;
-}
-
-detProcessedExpRow *detProcessedExpPopObject(psDB *dbh)
-{
-    psS32           det_id;
-    char            exp_tag[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-
-    if (!detProcessedExpPop(dbh, &det_id, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detProcessedExpRowAlloc(det_id, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
 }
 
@@ -15550,46 +11195,11 @@
 }
 
-bool detProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETPROCESSEDEXP_TABLE_NAME, DETPROCESSEDEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETPROCESSEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -15719,13 +11329,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETPROCESSEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -15847,9 +11448,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETSTACKEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETSTACKEDIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -15972,102 +11568,4 @@
     return deleted;
 }
-bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETSTACKEDIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETSTACKEDIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETSTACKEDIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETSTACKEDIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETSTACKEDIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETSTACKEDIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detStackedImfileInsertObject(psDB *dbh, detStackedImfileRow *object)
 {
@@ -16084,23 +11582,4 @@
 
     return true;
-}
-
-detStackedImfileRow *detStackedImfilePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            class_id[256];
-    char            uri[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-
-    if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev);
 }
 
@@ -16140,46 +11619,11 @@
 }
 
-bool detStackedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detStackedImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETSTACKEDIMFILE_TABLE_NAME, DETSTACKEDIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detStackedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETSTACKEDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETSTACKEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETSTACKEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -16309,13 +11753,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETSTACKEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETSTACKEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -16431,9 +11866,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDSTATIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -16516,78 +11946,4 @@
     return deleted;
 }
-bool detNormalizedStatImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, psF32 *norm)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDSTATIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDSTATIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *norm = psMetadataLookupF32(&status, row, "norm");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item norm");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detNormalizedStatImfileInsertObject(psDB *dbh, detNormalizedStatImfileRow *object)
 {
@@ -16604,19 +11960,4 @@
 
     return true;
-}
-
-detNormalizedStatImfileRow *detNormalizedStatImfilePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            class_id[256];
-    psF32           norm;
-
-    if (!detNormalizedStatImfilePop(dbh, &det_id, &iteration, (char **)&class_id, &norm)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detNormalizedStatImfileRowAlloc(det_id, iteration, class_id, norm);
 }
 
@@ -16656,46 +11997,11 @@
 }
 
-bool detNormalizedStatImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detNormalizedStatImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETNORMALIZEDSTATIMFILE_TABLE_NAME, DETNORMALIZEDSTATIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detNormalizedStatImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDSTATIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -16781,13 +12087,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDSTATIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -16911,9 +12208,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -17046,108 +12338,4 @@
     return deleted;
 }
-bool detNormalizedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        return false;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detNormalizedImfileInsertObject(psDB *dbh, detNormalizedImfileRow *object)
 {
@@ -17164,24 +12352,4 @@
 
     return true;
-}
-
-detNormalizedImfileRow *detNormalizedImfilePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            class_id[256];
-    char            uri[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-
-    if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
 }
 
@@ -17221,46 +12389,11 @@
 }
 
-bool detNormalizedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detNormalizedImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETNORMALIZEDIMFILE_TABLE_NAME, DETNORMALIZEDIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detNormalizedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -17401,13 +12534,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -17529,9 +12653,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDEXP_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -17654,102 +12773,4 @@
     return deleted;
 }
-bool detNormalizedExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDEXP_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDEXP_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDEXP_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detNormalizedExpInsertObject(psDB *dbh, detNormalizedExpRow *object)
 {
@@ -17766,23 +12787,4 @@
 
     return true;
-}
-
-detNormalizedExpRow *detNormalizedExpPopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-
-    if (!detNormalizedExpPop(dbh, &det_id, &iteration, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detNormalizedExpRowAlloc(det_id, iteration, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
 }
 
@@ -17822,46 +12824,11 @@
 }
 
-bool detNormalizedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detNormalizedExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETNORMALIZEDEXP_TABLE_NAME, DETNORMALIZEDEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detNormalizedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -17991,13 +12958,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDEXP_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDEXP_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -18112,9 +13070,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETMASTERFRAME_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETMASTERFRAME_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -18187,72 +13140,4 @@
     return deleted;
 }
-bool detMasterFramePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **comment)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETMASTERFRAME_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERFRAME_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETMASTERFRAME_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERFRAME_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETMASTERFRAME_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETMASTERFRAME_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *comment = psMetadataLookupPtr(&status, row, "comment");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item comment");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detMasterFrameInsertObject(psDB *dbh, detMasterFrameRow *object)
 {
@@ -18269,18 +13154,4 @@
 
     return true;
-}
-
-detMasterFrameRow *detMasterFramePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            comment[256];
-
-    if (!detMasterFramePop(dbh, &det_id, &iteration, (char **)&comment)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detMasterFrameRowAlloc(det_id, iteration, comment);
 }
 
@@ -18320,46 +13191,11 @@
 }
 
-bool detMasterFramePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detMasterFrameSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETMASTERFRAME_TABLE_NAME, DETMASTERFRAME_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detMasterFrameSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETMASTERFRAME_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETMASTERFRAME_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERFRAME_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -18434,13 +13270,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETMASTERFRAME_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERFRAME_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -18558,9 +13385,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETMASTERIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETMASTERIMFILE_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -18643,78 +13465,4 @@
     return deleted;
 }
-bool detMasterImfilePop(psDB *dbh, psS32 *det_id, char **class_id, char **uri, char **recipe)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETMASTERIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETMASTERIMFILE_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERIMFILE_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETMASTERIMFILE_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETMASTERIMFILE_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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);
-
-    return true;
-}
-
 bool detMasterImfileInsertObject(psDB *dbh, detMasterImfileRow *object)
 {
@@ -18731,19 +13479,4 @@
 
     return true;
-}
-
-detMasterImfileRow *detMasterImfilePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    char            class_id[256];
-    char            uri[256];
-    char            recipe[256];
-
-    if (!detMasterImfilePop(dbh, &det_id, (char **)&class_id, (char **)&uri, (char **)&recipe)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detMasterImfileRowAlloc(det_id, class_id, uri, recipe);
 }
 
@@ -18783,46 +13516,11 @@
 }
 
-bool detMasterImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detMasterImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETMASTERIMFILE_TABLE_NAME, DETMASTERIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detMasterImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETMASTERIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETMASTERIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -18908,13 +13606,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETMASTERIMFILE_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERIMFILE_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -19042,9 +13731,4 @@
 
     md = psMetadataAlloc();
-    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;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -19197,120 +13881,4 @@
     return deleted;
 }
-bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_tag, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    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;
-    }
-
-    popped = psMetadataAlloc();
-    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");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        return false;
-    }
-    *class_id = psMetadataLookupPtr(&status, row, "class_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
-        psFree(row);
-        return false;
-    }
-    *uri = psMetadataLookupPtr(&status, row, "uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detResidImfileInsertObject(psDB *dbh, detResidImfileRow *object)
 {
@@ -19327,26 +13895,4 @@
 
     return true;
-}
-
-detResidImfileRow *detResidImfilePopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            exp_tag[256];
-    char            class_id[256];
-    char            uri[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-
-    if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detResidImfileRowAlloc(det_id, iteration, exp_tag, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
 }
 
@@ -19386,46 +13932,11 @@
 }
 
-bool detResidImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detResidImfileSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETRESIDIMFILE_TABLE_NAME, DETRESIDIMFILE_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detResidImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        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;
-        }
     }
 
@@ -19588,13 +14099,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        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;
-        }
     }
 
@@ -19719,9 +14221,4 @@
 
     md = psMetadataAlloc();
-    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;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -19864,114 +14361,4 @@
     return deleted;
 }
-bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_tag, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri, bool *accept)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    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;
-    }
-
-    popped = psMetadataAlloc();
-    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");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
-        psFree(row);
-        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;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
-        psFree(row);
-        return false;
-    }
-    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
-        psFree(row);
-        return false;
-    }
-    *accept = psMetadataLookupBool(&status, row, "accept");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detResidExpInsertObject(psDB *dbh, detResidExpRow *object)
 {
@@ -19988,25 +14375,4 @@
 
     return true;
-}
-
-detResidExpRow *detResidExpPopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    char            exp_tag[256];
-    char            recipe[256];
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    char            b1_uri[256];
-    char            b2_uri[256];
-    bool            accept;
-
-    if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &accept)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detResidExpRowAlloc(det_id, iteration, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, accept);
 }
 
@@ -20046,46 +14412,11 @@
 }
 
-bool detResidExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detResidExpSelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETRESIDEXP_TABLE_NAME, DETRESIDEXP_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detResidExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        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;
-        }
     }
 
@@ -20237,13 +14568,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        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;
-        }
     }
 
@@ -20360,9 +14682,4 @@
 
     md = psMetadataAlloc();
-    if (!psMetadataAdd(md, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRUNSUMMARY_INDEX_NAME);
-        psFree(md);
-        return false;
-    }
     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
@@ -20465,90 +14782,4 @@
     return deleted;
 }
-bool detRunSummaryPop(psDB *dbh, psS32 *det_id, psS32 *iteration, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, bool *accept)
-{
-    psArray         *rowSet;
-    psMetadata      *row;
-    psMetadata      *popped;
-    long            deleted;
-    bool            status;
-    int             rowID;
-
-    rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, NULL, 1);
-    if (!rowSet) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME);
-        psFree(rowSet);
-        return NULL;
-    }
-
-    row = psArrayGet(rowSet, 0);
-    psMemIncrRefCounter(row);
-    if (!row) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return NULL;
-    }
-    psFree(rowSet);
-
-    rowID = psMetadataLookupS32(&status, row, DETRUNSUMMARY_INDEX_NAME);
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME);
-        psFree(row);
-        return NULL;
-    }
-
-    popped = psMetadataAlloc();
-    psMetadataAddS32(popped, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, 0, NULL, rowID);
-
-    deleted = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, popped, 0);
-    if (deleted != 1) {
-        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
-        psFree(popped);
-        psFree(row);
-        return NULL;
-    }
-
-    psFree(popped);
-
-    *det_id = psMetadataLookupS32(&status, row, "det_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
-        psFree(row);
-        return false;
-    }
-    *iteration = psMetadataLookupS32(&status, row, "iteration");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
-        psFree(row);
-        return false;
-    }
-    *bg = psMetadataLookupF64(&status, row, "bg");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
-        psFree(row);
-        return false;
-    }
-    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
-        psFree(row);
-        return false;
-    }
-    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
-        psFree(row);
-        return false;
-    }
-    *accept = psMetadataLookupBool(&status, row, "accept");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
-        psFree(row);
-        return false;
-    }
-
-    psFree(row);
-
-    return true;
-}
-
 bool detRunSummaryInsertObject(psDB *dbh, detRunSummaryRow *object)
 {
@@ -20565,21 +14796,4 @@
 
     return true;
-}
-
-detRunSummaryRow *detRunSummaryPopObject(psDB *dbh)
-{
-    psS32           det_id;
-    psS32           iteration;
-    psF64           bg;
-    psF64           bg_stdev;
-    psF64           bg_mean_stdev;
-    bool            accept;
-
-    if (!detRunSummaryPop(dbh, &det_id, &iteration, &bg, &bg_stdev, &bg_mean_stdev, &accept)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
-        return NULL;
-    }
-
-    return detRunSummaryRowAlloc(det_id, iteration, bg, bg_stdev, bg_mean_stdev, accept);
 }
 
@@ -20619,46 +14833,11 @@
 }
 
-bool detRunSummaryPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
-{
-    char            query[MAX_STRING_LENGTH];
-
-    if (!detRunSummarySelectRowsFits(dbh, fits, NULL, limit)) {
-        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
-        return false;
-    }
-
-    // remove limit rows from the end of the database
-    if (snprintf(query, MAX_STRING_LENGTH,
-                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
-                DETRUNSUMMARY_TABLE_NAME, DETRUNSUMMARY_INDEX_NAME, limit) < 0) {
-        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
-        return false;
-    }
-            
-    if (!p_psDBRunQuery(dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database query failed");
-        return false;
-    }
-
-    return true;
-}
-
 bool detRunSummarySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
 {
     psArray         *rowSet;
-    psU64           i;
 
     rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit);
     if (!rowSet) {
         return false;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRUNSUMMARY_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
@@ -20766,13 +14945,4 @@
     if (!rowSet) {
         return NULL;
-    }
-
-    // strip index column
-    for (i = 0; i < rowSet->n; i++) {
-        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRUNSUMMARY_INDEX_NAME)) {
-            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME);
-            psFree(rowSet);
-            return false;
-        }
     }
 
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 9422)
+++ /trunk/ippdb/src/ippdb.h	(revision 9423)
@@ -1,5 +1,24 @@
 /*
- *
- * This file was generated by glueforge 0.25
+ * header.c
+ *
+ * Copyright (C) 2006  Joshua Hoblitt
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * program; see the file COPYING. If not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/*
+ *
+ * This file was generated by glueforge 0.29
  *
  * Do NOT directly edit this file.
@@ -29,5 +48,6 @@
     const char      *user,              ///< Database username
     const char      *passwd,            ///< Database password
-    const char      *dbname             ///< Database table.namespace
+    const char      *dbname,            ///< Database table.namespace
+    unsigned int    port                ///< Database port
 );
 
@@ -182,20 +202,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool weatherPop(
-    psDB            *dbh,               ///< Database handle
-    psF32           *temp01,
-    psF32           *humi01,
-    psF32           *temp02,
-    psF32           *humi02,
-    psF32           *temp03,
-    psF32           *humi03,
-    psF32           *pressure
-);
-
 /** Insert a single weatherRow object into a table
  *
@@ -220,13 +224,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of weatherRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new weatherRow on success or NULL on failure.
- */
-
-weatherRow *weatherPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -244,18 +239,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool weatherPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -421,20 +402,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool skyp_transparencyPop(
-    psDB            *dbh,               ///< Database handle
-    char            **filter,
-    psF64           *trans,
-    psS32           *nstars,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *exptime,
-    psF64           *sky_bright
-);
-
 /** Insert a single skyp_transparencyRow object into a table
  *
@@ -459,13 +424,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of skyp_transparencyRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new skyp_transparencyRow on success or NULL on failure.
- */
-
-skyp_transparencyRow *skyp_transparencyPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -483,18 +439,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool skyp_transparencyPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -666,22 +608,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool skyp_absorptionPop(
-    psDB            *dbh,               ///< Database handle
-    char            **disperser_id,
-    psF32           *atmcomp1,
-    psF32           *atmcomp2,
-    psF32           *atmcomp3,
-    psS32           *nstars,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *exptime,
-    psF64           *sky_bright
-);
-
 /** Insert a single skyp_absorptionRow object into a table
  *
@@ -706,13 +630,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of skyp_absorptionRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new skyp_absorptionRow on success or NULL on failure.
- */
-
-skyp_absorptionRow *skyp_absorptionPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -730,18 +645,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool skyp_absorptionPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -904,19 +805,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool skyp_emissionPop(
-    psDB            *dbh,               ///< Database handle
-    char            **disperser_id,
-    psF32           *atmcomp1,
-    psF32           *atmcomp2,
-    psF32           *atmcomp3,
-    psF32           *continuum,
-    psF32           *exptime
-);
-
 /** Insert a single skyp_emissionRow object into a table
  *
@@ -941,13 +827,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of skyp_emissionRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new skyp_emissionRow on success or NULL on failure.
- */
-
-skyp_emissionRow *skyp_emissionPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -965,18 +842,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool skyp_emissionPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -1142,20 +1005,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool dimmPop(
-    psDB            *dbh,               ///< Database handle
-    psF32           *sigmax,
-    psF32           *sigmay,
-    psF32           *fwhm,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *expttime,
-    char            **telescope_id
-);
-
 /** Insert a single dimmRow object into a table
  *
@@ -1180,13 +1027,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of dimmRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new dimmRow on success or NULL on failure.
- */
-
-dimmRow *dimmPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -1204,18 +1042,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool dimmPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -1378,19 +1202,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool skyp_irPop(
-    psDB            *dbh,               ///< Database handle
-    psF64           *sky_bright,
-    psF64           *sky_var,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *fov_x,
-    psF32           *fov_y
-);
-
 /** Insert a single skyp_irRow object into a table
  *
@@ -1415,13 +1224,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of skyp_irRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new skyp_irRow on success or NULL on failure.
- */
-
-skyp_irRow *skyp_irPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -1439,18 +1239,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool skyp_irPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -1607,17 +1393,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool domePop(
-    psDB            *dbh,               ///< Database handle
-    psF32           *az,
-    bool            *open,
-    bool            *light,
-    bool            *track
-);
-
 /** Insert a single domeRow object into a table
  *
@@ -1642,13 +1415,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of domeRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new domeRow on success or NULL on failure.
- */
-
-domeRow *domePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -1666,18 +1430,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool domePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -1837,18 +1587,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool telescopePop(
-    psDB            *dbh,               ///< Database handle
-    char            **guide,
-    psF32           *alt,
-    psF32           *az,
-    psF64           *ra,
-    psF64           *decl
-);
-
 /** Insert a single telescopeRow object into a table
  *
@@ -1873,13 +1609,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of telescopeRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new telescopeRow on success or NULL on failure.
- */
-
-telescopeRow *telescopePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -1897,18 +1624,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool telescopePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -2068,18 +1781,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool summitExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_id,
-    char            **camera,
-    char            **telescope,
-    char            **exp_type,
-    char            **uri
-);
-
 /** Insert a single summitExpRow object into a table
  *
@@ -2104,13 +1803,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of summitExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new summitExpRow on success or NULL on failure.
- */
-
-summitExpRow *summitExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -2128,18 +1818,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool summitExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -2299,18 +1975,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool pzPendingExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_id,
-    char            **camera,
-    char            **telescope,
-    char            **exp_type,
-    psS32           *imfiles
-);
-
 /** Insert a single pzPendingExpRow object into a table
  *
@@ -2335,13 +1997,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of pzPendingExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new pzPendingExpRow on success or NULL on failure.
- */
-
-pzPendingExpRow *pzPendingExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -2359,18 +2012,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool pzPendingExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -2539,21 +2178,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool pzPendingImfilePop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_id,
-    char            **camera,
-    char            **telescope,
-    psS32           *bytes,
-    char            **md5sum,
-    char            **class,
-    char            **class_id,
-    char            **uri
-);
-
 /** Insert a single pzPendingImfileRow object into a table
  *
@@ -2578,13 +2200,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of pzPendingImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new pzPendingImfileRow on success or NULL on failure.
- */
-
-pzPendingImfileRow *pzPendingImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -2602,18 +2215,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool pzPendingImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -2776,19 +2375,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool newExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **exp_id,
-    char            **camera,
-    char            **telescope,
-    char            **exp_type,
-    psS32           *imfiles
-);
-
 /** Insert a single newExpRow object into a table
  *
@@ -2813,13 +2397,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of newExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new newExpRow on success or NULL on failure.
- */
-
-newExpRow *newExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -2837,18 +2412,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool newExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -3005,17 +2566,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool newImfilePop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **class,
-    char            **class_id,
-    char            **uri
-);
-
 /** Insert a single newImfileRow object into a table
  *
@@ -3040,13 +2588,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of newImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new newImfileRow on success or NULL on failure.
- */
-
-newImfileRow *newImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -3064,18 +2603,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool newImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -3274,31 +2799,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool rawDetrendExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **camera,
-    char            **telescope,
-    char            **exp_type,
-    psS32           *imfiles,
-    char            **filter,
-    psF32           *airmass,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *exp_time,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    psF64           *alt,
-    psF64           *az,
-    psF32           *ccd_temp,
-    psF64           *posang,
-    char            **object
-);
-
 /** Insert a single rawDetrendExpRow object into a table
  *
@@ -3323,13 +2821,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of rawDetrendExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new rawDetrendExpRow on success or NULL on failure.
- */
-
-rawDetrendExpRow *rawDetrendExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -3347,18 +2836,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool rawDetrendExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -3557,31 +3032,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool rawScienceExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **camera,
-    char            **telescope,
-    char            **exp_type,
-    psS32           *imfiles,
-    char            **filter,
-    psF32           *airmass,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *exp_time,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    psF64           *alt,
-    psF64           *az,
-    psF32           *ccd_temp,
-    psF64           *posang,
-    char            **object
-);
-
 /** Insert a single rawScienceExpRow object into a table
  *
@@ -3606,13 +3054,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of rawScienceExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new rawScienceExpRow on success or NULL on failure.
- */
-
-rawScienceExpRow *rawScienceExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -3630,18 +3069,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool rawScienceExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -3840,31 +3265,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool rawImfilePop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **class,
-    char            **class_id,
-    char            **uri,
-    char            **exp_type,
-    char            **filter,
-    psF32           *airmass,
-    psF64           *ra,
-    psF64           *decl,
-    psF32           *exp_time,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    psF64           *alt,
-    psF64           *az,
-    psF32           *ccd_temp,
-    psF64           *posang,
-    char            **object
-);
-
 /** Insert a single rawImfileRow object into a table
  *
@@ -3889,13 +3287,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of rawImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new rawImfileRow on success or NULL on failure.
- */
-
-rawImfileRow *rawImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -3913,18 +3302,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool rawImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -4078,16 +3453,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p1PendingExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **recipe,
-    psS32           *p1_version
-);
-
 /** Insert a single p1PendingExpRow object into a table
  *
@@ -4112,13 +3475,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p1PendingExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p1PendingExpRow on success or NULL on failure.
- */
-
-p1PendingExpRow *p1PendingExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -4136,18 +3490,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p1PendingExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -4304,17 +3644,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p2PendingExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **recipe,
-    psS32           *p1_version,
-    psS32           *p2_version
-);
-
 /** Insert a single p2PendingExpRow object into a table
  *
@@ -4339,13 +3666,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p2PendingExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p2PendingExpRow on success or NULL on failure.
- */
-
-p2PendingExpRow *p2PendingExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -4363,18 +3681,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p2PendingExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -4537,19 +3841,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p2PendingImfilePop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **class_id,
-    char            **uri,
-    char            **recipe,
-    psS32           *p1_version,
-    psS32           *p2_version
-);
-
 /** Insert a single p2PendingImfileRow object into a table
  *
@@ -4574,13 +3863,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p2PendingImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p2PendingImfileRow on success or NULL on failure.
- */
-
-p2PendingImfileRow *p2PendingImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -4598,18 +3878,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p2PendingImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -4763,16 +4029,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p2ProcessedExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    psS32           *p1_version,
-    psS32           *p2_version
-);
-
 /** Insert a single p2ProcessedExpRow object into a table
  *
@@ -4797,13 +4051,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p2ProcessedExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p2ProcessedExpRow on success or NULL on failure.
- */
-
-p2ProcessedExpRow *p2ProcessedExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -4821,18 +4066,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p2ProcessedExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -5010,24 +4241,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p2ProcessedImfilePop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **class_id,
-    char            **uri,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri,
-    psS32           *p1_version,
-    psS32           *p2_version
-);
-
 /** Insert a single p2ProcessedImfileRow object into a table
  *
@@ -5052,13 +4263,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p2ProcessedImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p2ProcessedImfileRow on success or NULL on failure.
- */
-
-p2ProcessedImfileRow *p2ProcessedImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -5076,18 +4278,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p2ProcessedImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -5241,16 +4429,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p3PendingExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    psS32           *p2_version,
-    psS32           *p3_version
-);
-
 /** Insert a single p3PendingExpRow object into a table
  *
@@ -5275,13 +4451,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p3PendingExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p3PendingExpRow on success or NULL on failure.
- */
-
-p3PendingExpRow *p3PendingExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -5299,18 +4466,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p3PendingExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -5500,28 +4653,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool p3ProcessedExpPop(
-    psDB            *dbh,               ///< Database handle
-    char            **exp_tag,
-    char            **uri,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    psF32           *sigma_ra,
-    psF32           *sigma_dec,
-    psS32           *nastro,
-    char            **b1_uri,
-    char            **b2_uri,
-    psF32           *zp_mean,
-    psF32           *zp_stdev,
-    psS32           *p2_version,
-    psS32           *p3_version
-);
-
 /** Insert a single p3ProcessedExpRow object into a table
  *
@@ -5546,13 +4675,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of p3ProcessedExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new p3ProcessedExpRow on success or NULL on failure.
- */
-
-p3ProcessedExpRow *p3ProcessedExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -5572,18 +4692,4 @@
 );
 
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool p3ProcessedExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-
 /** Selects up to limit from the database and returns them in a binary FITS table
  *
@@ -5676,4 +4782,5 @@
 
 typedef struct {
+    psS32           det_id;
     psS32           iteration;
     char            *det_type;
@@ -5687,4 +4794,5 @@
 
 detRunRow *detRunRowAlloc(
+    psS32           det_id,
     psS32           iteration,
     const char      *det_type,
@@ -5719,4 +4827,5 @@
 bool detRunInsert(
     psDB            *dbh,               ///< Database handle
+    psS32           det_id,
     psS32           iteration,
     const char      *det_type,
@@ -5735,16 +4844,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detRunPop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *iteration,
-    char            **det_type,
-    char            **state
-);
-
 /** Insert a single detRunRow object into a table
  *
@@ -5769,13 +4866,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detRunRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detRunRow on success or NULL on failure.
- */
-
-detRunRow *detRunPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -5793,18 +4881,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detRunPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -5961,17 +5035,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detInputExpPop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **exp_tag,
-    bool            *include
-);
-
 /** Insert a single detInputExpRow object into a table
  *
@@ -5996,13 +5057,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detInputExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detInputExpRow on success or NULL on failure.
- */
-
-detInputExpRow *detInputExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -6020,18 +5072,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detInputExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -6206,23 +5244,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detProcessedImfilePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    char            **exp_tag,
-    char            **class_id,
-    char            **uri,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri
-);
-
 /** Insert a single detProcessedImfileRow object into a table
  *
@@ -6247,13 +5266,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detProcessedImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detProcessedImfileRow on success or NULL on failure.
- */
-
-detProcessedImfileRow *detProcessedImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -6271,18 +5281,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detProcessedImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -6451,21 +5447,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detProcessedExpPop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    char            **exp_tag,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri
-);
-
 /** Insert a single detProcessedExpRow object into a table
  *
@@ -6490,13 +5469,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detProcessedExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detProcessedExpRow on success or NULL on failure.
- */
-
-detProcessedExpRow *detProcessedExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -6514,18 +5484,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detProcessedExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -6694,21 +5650,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detStackedImfilePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **class_id,
-    char            **uri,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev
-);
-
 /** Insert a single detStackedImfileRow object into a table
  *
@@ -6733,13 +5672,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detStackedImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detStackedImfileRow on success or NULL on failure.
- */
-
-detStackedImfileRow *detStackedImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -6757,18 +5687,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detStackedImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -6925,17 +5841,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detNormalizedStatImfilePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **class_id,
-    psF32           *norm
-);
-
 /** Insert a single detNormalizedStatImfileRow object into a table
  *
@@ -6960,13 +5863,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detNormalizedStatImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detNormalizedStatImfileRow on success or NULL on failure.
- */
-
-detNormalizedStatImfileRow *detNormalizedStatImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -6984,18 +5878,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detNormalizedStatImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -7167,22 +6047,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detNormalizedImfilePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **class_id,
-    char            **uri,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri
-);
-
 /** Insert a single detNormalizedImfileRow object into a table
  *
@@ -7207,13 +6069,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detNormalizedImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detNormalizedImfileRow on success or NULL on failure.
- */
-
-detNormalizedImfileRow *detNormalizedImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -7231,18 +6084,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detNormalizedImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -7411,21 +6250,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detNormalizedExpPop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri
-);
-
 /** Insert a single detNormalizedExpRow object into a table
  *
@@ -7450,13 +6272,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detNormalizedExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detNormalizedExpRow on success or NULL on failure.
- */
-
-detNormalizedExpRow *detNormalizedExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -7474,18 +6287,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detNormalizedExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -7639,16 +6438,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detMasterFramePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **comment
-);
-
 /** Insert a single detMasterFrameRow object into a table
  *
@@ -7673,13 +6460,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detMasterFrameRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detMasterFrameRow on success or NULL on failure.
- */
-
-detMasterFrameRow *detMasterFramePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -7697,18 +6475,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detMasterFramePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -7865,17 +6629,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detMasterImfilePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    char            **class_id,
-    char            **uri,
-    char            **recipe
-);
-
 /** Insert a single detMasterImfileRow object into a table
  *
@@ -7900,13 +6651,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detMasterImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detMasterImfileRow on success or NULL on failure.
- */
-
-detMasterImfileRow *detMasterImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -7924,18 +6666,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detMasterImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -8113,24 +6841,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detResidImfilePop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **exp_tag,
-    char            **class_id,
-    char            **uri,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri
-);
-
 /** Insert a single detResidImfileRow object into a table
  *
@@ -8155,13 +6863,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detResidImfileRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detResidImfileRow on success or NULL on failure.
- */
-
-detResidImfileRow *detResidImfilePopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -8179,18 +6878,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detResidImfilePopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -8365,23 +7050,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detResidExpPop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    char            **exp_tag,
-    char            **recipe,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    char            **b1_uri,
-    char            **b2_uri,
-    bool            *accept
-);
-
 /** Insert a single detResidExpRow object into a table
  *
@@ -8406,13 +7072,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detResidExpRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detResidExpRow on success or NULL on failure.
- */
-
-detResidExpRow *detResidExpPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -8430,18 +7087,4 @@
     psDB            *dbh,               ///< Database handle
     const psFits    *fits               ///< psFits object
-);
-
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detResidExpPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
 );
 
@@ -8604,19 +7247,4 @@
 );
 
-/** Removes the last row from the database and returns it
- *
- * @return true on success
- */
-
-bool detRunSummaryPop(
-    psDB            *dbh,               ///< Database handle
-    psS32           *det_id,
-    psS32           *iteration,
-    psF64           *bg,
-    psF64           *bg_stdev,
-    psF64           *bg_mean_stdev,
-    bool            *accept
-);
-
 /** Insert a single detRunSummaryRow object into a table
  *
@@ -8641,13 +7269,4 @@
     psDB            *dbh,               ///< Database handle
     psArray         *objects            ///< array of detRunSummaryRow objects
-);
-
-/** Removes the last row from the database and returns it
- *
- * @return A new detRunSummaryRow on success or NULL on failure.
- */
-
-detRunSummaryRow *detRunSummaryPopObject(
-    psDB            *dbh                ///< Database handle
 );
 
@@ -8667,18 +7286,4 @@
 );
 
-/** Removes the last limit row from the database and returns them in a binary FITS table.
- *
- * This function assumes an empty psFits object and will create a FITS table as
- * the first extension. 
- *
- * @return true on success
- */
-
-bool detRunSummaryPopFits(
-    psDB            *dbh,               ///< Database handle
-    psFits          *fits,              ///< psFits object
-    unsigned long long limit            ///< Maximum number of elements to return
-);
-
 /** Selects up to limit from the database and returns them in a binary FITS table
  *
Index: /trunk/ippdb/tests/Makefile.am
===================================================================
--- /trunk/ippdb/tests/Makefile.am	(revision 9422)
+++ /trunk/ippdb/tests/Makefile.am	(revision 9423)
@@ -51,9 +51,6 @@
     droptable \
     insert \
-    pop \
     insertobject \
-    popobject \
     insertfits \
-    popfits \
     selectrowsfits \
     metadatafromobject \
Index: /trunk/ippdb/tests/alloc.c
===================================================================
--- /trunk/ippdb/tests/alloc.c	(revision 9422)
+++ /trunk/ippdb/tests/alloc.c	(revision 9423)
@@ -1022,10 +1022,14 @@
         detRunRow       *object;
 
-        object = detRunRowAlloc(-32, "a string", "a string"    );
-
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
+        object = detRunRowAlloc(-32, -32, "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);
Index: /trunk/ippdb/tests/insert.c
===================================================================
--- /trunk/ippdb/tests/insert.c	(revision 9422)
+++ /trunk/ippdb/tests/insert.c	(revision 9423)
@@ -358,5 +358,5 @@
         }
 
-        if (!detRunInsert(dbh, -32, "a string", "a string")) {
+        if (!detRunInsert(dbh, -32, -32, "a string", "a string")) {
             exit(EXIT_FAILURE);
         }
Index: /trunk/ippdb/tests/insertobject.c
===================================================================
--- /trunk/ippdb/tests/insertobject.c	(revision 9422)
+++ /trunk/ippdb/tests/insertobject.c	(revision 9423)
@@ -520,5 +520,5 @@
         }
 
-        object = detRunRowAlloc(-32, "a string", "a string");
+        object = detRunRowAlloc(-32, -32, "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
Index: /trunk/ippdb/tests/metadatafromobject.c
===================================================================
--- /trunk/ippdb/tests/metadatafromobject.c	(revision 9422)
+++ /trunk/ippdb/tests/metadatafromobject.c	(revision 9423)
@@ -1208,5 +1208,5 @@
         bool            status;
 
-        object = detRunRowAlloc(-32, "a string", "a string");
+        object = detRunRowAlloc(-32, -32, "a string", "a string");
         if (!object) {
             exit(EXIT_FAILURE);
@@ -1220,4 +1220,8 @@
         psFree(object);
 
+        if (!psMetadataLookupS32(&status, md, "det_id") == -32) {
+            psFree(md);
+            exit(EXIT_FAILURE);
+        }
         if (!psMetadataLookupS32(&status, md, "iteration") == -32) {
             psFree(md);
Index: /trunk/ippdb/tests/objectfrommetadata.c
===================================================================
--- /trunk/ippdb/tests/objectfrommetadata.c	(revision 9422)
+++ /trunk/ippdb/tests/objectfrommetadata.c	(revision 9423)
@@ -1851,4 +1851,8 @@
 
         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);
@@ -1872,4 +1876,8 @@
         psFree(md);
 
+        if (!object->det_id == -32) {
+            psFree(object);
+            exit(EXIT_FAILURE);
+        }
         if (!object->iteration == -32) {
             psFree(object);
Index: unk/ippdb/tests/pop.c
===================================================================
--- /trunk/ippdb/tests/pop.c	(revision 9422)
+++ 	(revision )
@@ -1,814 +1,0 @@
-#include <pslib.h>
-#include <ippdb.h>
-#include <stdlib.h>
-
-int main ()
-{
-    {
-        psDB            *dbh;
-        psF32           temp01;
-        psF32           humi01;
-        psF32           temp02;
-        psF32           humi02;
-        psF32           temp03;
-        psF32           humi03;
-        psF32           pressure;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!weatherPop(dbh, &temp01, &humi01, &temp02, &humi02, &temp03, &humi03, &pressure)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            filter[256];
-        psF64           trans;
-        psS32           nstars;
-        psF64           ra;
-        psF64           decl;
-        psF32           exptime;
-        psF64           sky_bright;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!skyp_transparencyPop(dbh, (char **)&filter, &trans, &nstars, &ra, &decl, &exptime, &sky_bright)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            disperser_id[256];
-        psF32           atmcomp1;
-        psF32           atmcomp2;
-        psF32           atmcomp3;
-        psS32           nstars;
-        psF64           ra;
-        psF64           decl;
-        psF32           exptime;
-        psF64           sky_bright;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!skyp_absorptionPop(dbh, (char **)&disperser_id, &atmcomp1, &atmcomp2, &atmcomp3, &nstars, &ra, &decl, &exptime, &sky_bright)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            disperser_id[256];
-        psF32           atmcomp1;
-        psF32           atmcomp2;
-        psF32           atmcomp3;
-        psF32           continuum;
-        psF32           exptime;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!skyp_emissionPop(dbh, (char **)&disperser_id, &atmcomp1, &atmcomp2, &atmcomp3, &continuum, &exptime)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psF32           sigmax;
-        psF32           sigmay;
-        psF32           fwhm;
-        psF64           ra;
-        psF64           decl;
-        psF32           expttime;
-        char            telescope_id[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!dimmPop(dbh, &sigmax, &sigmay, &fwhm, &ra, &decl, &expttime, (char **)&telescope_id)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psF64           sky_bright;
-        psF64           sky_var;
-        psF64           ra;
-        psF64           decl;
-        psF32           fov_x;
-        psF32           fov_y;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!skyp_irPop(dbh, &sky_bright, &sky_var, &ra, &decl, &fov_x, &fov_y)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psF32           az;
-        bool            open;
-        bool            light;
-        bool            track;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!domePop(dbh, &az, &open, &light, &track)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            guide[256];
-        psF32           alt;
-        psF32           az;
-        psF64           ra;
-        psF64           decl;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!telescopePop(dbh, (char **)&guide, &alt, &az, &ra, &decl)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_id[256];
-        char            camera[256];
-        char            telescope[256];
-        char            exp_type[256];
-        char            uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!summitExpPop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, (char **)&uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_id[256];
-        char            camera[256];
-        char            telescope[256];
-        char            exp_type[256];
-        psS32           imfiles;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!pzPendingExpPop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_id[256];
-        char            camera[256];
-        char            telescope[256];
-        psS32           bytes;
-        char            md5sum[256];
-        char            class[256];
-        char            class_id[256];
-        char            uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!pzPendingImfilePop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, &bytes, (char **)&md5sum, (char **)&class, (char **)&class_id, (char **)&uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            exp_id[256];
-        char            camera[256];
-        char            telescope[256];
-        char            exp_type[256];
-        psS32           imfiles;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!newExpPop(dbh, (char **)&exp_tag, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            class[256];
-        char            class_id[256];
-        char            uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!newImfilePop(dbh, (char **)&exp_tag, (char **)&class, (char **)&class_id, (char **)&uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            camera[256];
-        char            telescope[256];
-        char            exp_type[256];
-        psS32           imfiles;
-        char            filter[256];
-        psF32           airmass;
-        psF64           ra;
-        psF64           decl;
-        psF32           exp_time;
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        psF64           alt;
-        psF64           az;
-        psF32           ccd_temp;
-        psF64           posang;
-        char            object[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!rawDetrendExpPop(dbh, (char **)&exp_tag, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            camera[256];
-        char            telescope[256];
-        char            exp_type[256];
-        psS32           imfiles;
-        char            filter[256];
-        psF32           airmass;
-        psF64           ra;
-        psF64           decl;
-        psF32           exp_time;
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        psF64           alt;
-        psF64           az;
-        psF32           ccd_temp;
-        psF64           posang;
-        char            object[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!rawScienceExpPop(dbh, (char **)&exp_tag, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            class[256];
-        char            class_id[256];
-        char            uri[256];
-        char            exp_type[256];
-        char            filter[256];
-        psF32           airmass;
-        psF64           ra;
-        psF64           decl;
-        psF32           exp_time;
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        psF64           alt;
-        psF64           az;
-        psF32           ccd_temp;
-        psF64           posang;
-        char            object[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!rawImfilePop(dbh, (char **)&exp_tag, (char **)&class, (char **)&class_id, (char **)&uri, (char **)&exp_type, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            recipe[256];
-        psS32           p1_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p1PendingExpPop(dbh, (char **)&exp_tag, (char **)&recipe, &p1_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            recipe[256];
-        psS32           p1_version;
-        psS32           p2_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p2PendingExpPop(dbh, (char **)&exp_tag, (char **)&recipe, &p1_version, &p2_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            class_id[256];
-        char            uri[256];
-        char            recipe[256];
-        psS32           p1_version;
-        psS32           p2_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p2PendingImfilePop(dbh, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &p1_version, &p2_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        psS32           p1_version;
-        psS32           p2_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p2ProcessedExpPop(dbh, (char **)&exp_tag, &p1_version, &p2_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            class_id[256];
-        char            uri[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-        psS32           p1_version;
-        psS32           p2_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p2ProcessedImfilePop(dbh, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &p1_version, &p2_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        psS32           p2_version;
-        psS32           p3_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p3PendingExpPop(dbh, (char **)&exp_tag, &p2_version, &p3_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        char            exp_tag[256];
-        char            uri[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        psF32           sigma_ra;
-        psF32           sigma_dec;
-        psS32           nastro;
-        char            b1_uri[256];
-        char            b2_uri[256];
-        psF32           zp_mean;
-        psF32           zp_stdev;
-        psS32           p2_version;
-        psS32           p3_version;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!p3ProcessedExpPop(dbh, (char **)&exp_tag, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, &sigma_ra, &sigma_dec, &nastro, (char **)&b1_uri, (char **)&b2_uri, &zp_mean, &zp_stdev, &p2_version, &p3_version)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           iteration;
-        char            det_type[256];
-        char            state[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detRunPop(dbh, &iteration, (char **)&det_type, (char **)&state)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            exp_tag[256];
-        bool            include;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_tag, &include)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        char            exp_tag[256];
-        char            class_id[256];
-        char            uri[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detProcessedImfilePop(dbh, &det_id, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        char            exp_tag[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detProcessedExpPop(dbh, &det_id, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            class_id[256];
-        char            uri[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            class_id[256];
-        psF32           norm;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detNormalizedStatImfilePop(dbh, &det_id, &iteration, (char **)&class_id, &norm)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            class_id[256];
-        char            uri[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detNormalizedExpPop(dbh, &det_id, &iteration, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            comment[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detMasterFramePop(dbh, &det_id, &iteration, (char **)&comment)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        char            class_id[256];
-        char            uri[256];
-        char            recipe[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detMasterImfilePop(dbh, &det_id, (char **)&class_id, (char **)&uri, (char **)&recipe)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            exp_tag[256];
-        char            class_id[256];
-        char            uri[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        char            exp_tag[256];
-        char            recipe[256];
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        char            b1_uri[256];
-        char            b2_uri[256];
-        bool            accept;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &accept)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        psS32           det_id;
-        psS32           iteration;
-        psF64           bg;
-        psF64           bg_stdev;
-        psF64           bg_mean_stdev;
-        bool            accept;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!detRunSummaryPop(dbh, &det_id, &iteration, &bg, &bg_stdev, &bg_mean_stdev, &accept)) { 
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    exit(EXIT_SUCCESS);
-}
Index: unk/ippdb/tests/popfits.c
===================================================================
--- /trunk/ippdb/tests/popfits.c	(revision 9422)
+++ 	(revision )
@@ -1,948 +1,0 @@
-#include <pslib.h>
-#include <ippdb.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#define TMP_FILENAME "./blargh"
-
-int main ()
-{
-    {
-        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 (!weatherPopFits(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 (!skyp_transparencyPopFits(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 (!skyp_absorptionPopFits(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 (!skyp_emissionPopFits(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 (!dimmPopFits(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 (!skyp_irPopFits(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 (!domePopFits(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 (!telescopePopFits(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 (!summitExpPopFits(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 (!pzPendingExpPopFits(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 (!pzPendingImfilePopFits(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 (!newExpPopFits(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 (!newImfilePopFits(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 (!rawDetrendExpPopFits(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 (!rawScienceExpPopFits(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 (!rawImfilePopFits(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 (!p1PendingExpPopFits(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 (!p2PendingExpPopFits(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 (!p2PendingImfilePopFits(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 (!p2ProcessedExpPopFits(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 (!p2ProcessedImfilePopFits(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 (!p3PendingExpPopFits(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 (!p3ProcessedExpPopFits(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 (!detRunPopFits(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 (!detInputExpPopFits(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 (!detProcessedImfilePopFits(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 (!detProcessedExpPopFits(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 (!detStackedImfilePopFits(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 (!detNormalizedStatImfilePopFits(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 (!detNormalizedImfilePopFits(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 (!detNormalizedExpPopFits(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 (!detMasterFramePopFits(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 (!detMasterImfilePopFits(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 (!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);
-        }
-
-        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 (!detRunSummaryPopFits(dbh, fits, 1)) {
-            exit(EXIT_FAILURE);
-        }
-
-        if (!psFitsClose(fits)) {
-            exit(EXIT_FAILURE);
-        }
-
-        psDBCleanup(dbh);
-    }
-
-    exit(EXIT_SUCCESS);
-}
Index: unk/ippdb/tests/popobject.c
===================================================================
--- /trunk/ippdb/tests/popobject.c	(revision 9422)
+++ 	(revision )
@@ -1,656 +1,0 @@
-#include <pslib.h>
-#include <ippdb.h>
-#include <stdlib.h>
-
-int main ()
-{
-    {
-        psDB            *dbh;
-        weatherRow      *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = weatherPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        skyp_transparencyRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = skyp_transparencyPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        skyp_absorptionRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = skyp_absorptionPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        skyp_emissionRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = skyp_emissionPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        dimmRow         *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = dimmPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        skyp_irRow      *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = skyp_irPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        domeRow         *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = domePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        telescopeRow    *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = telescopePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        summitExpRow    *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = summitExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        pzPendingExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = pzPendingExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        pzPendingImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = pzPendingImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        newExpRow       *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = newExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        newImfileRow    *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = newImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        rawDetrendExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = rawDetrendExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        rawScienceExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = rawScienceExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        rawImfileRow    *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = rawImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p1PendingExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p1PendingExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p2PendingExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p2PendingExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p2PendingImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p2PendingImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p2ProcessedExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p2ProcessedExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p2ProcessedImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p2ProcessedImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p3PendingExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p3PendingExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        p3ProcessedExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = p3ProcessedExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detRunRow       *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detRunPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detInputExpRow  *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detInputExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detProcessedImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detProcessedImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detProcessedExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detProcessedExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detStackedImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detStackedImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detNormalizedStatImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detNormalizedStatImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detNormalizedImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detNormalizedImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detNormalizedExpRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detNormalizedExpPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detMasterFrameRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detMasterFramePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detMasterImfileRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detMasterImfilePopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *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);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    {
-        psDB            *dbh;
-        detRunSummaryRow *object;
-
-        dbh = psDBInit("localhost", "test", NULL, "test");
-        if (!dbh) {
-            exit(EXIT_FAILURE);
-        }
-
-        object = detRunSummaryPopObject(dbh);
-        if (!object) {
-            exit(EXIT_FAILURE);
-        }
-
-        psFree(object);
-        psDBCleanup(dbh);
-    }
-
-    exit(EXIT_SUCCESS);
-}
Index: /trunk/ippdb/tests/testsuite.at
===================================================================
--- /trunk/ippdb/tests/testsuite.at	(revision 9422)
+++ /trunk/ippdb/tests/testsuite.at	(revision 9423)
@@ -60,16 +60,4 @@
 
 ###
-AT_SETUP([Pop()])
-AT_KEYWORDS([Pop])
-
-AT_CHECK([dbsetup])
-# run insert so there is a row in the table
-AT_CHECK([insert])
-AT_CHECK([pop])
-AT_CHECK([dbcleanup])
-
-AT_CLEANUP
-
-###
 AT_SETUP([InsertObject()])
 AT_KEYWORDS([InsertObject])
@@ -77,16 +65,4 @@
 AT_CHECK([dbsetup])
 AT_CHECK([insertobject])
-AT_CHECK([dbcleanup])
-
-AT_CLEANUP
-
-###
-AT_SETUP([PopObject()])
-AT_KEYWORDS([PopObject])
-
-AT_CHECK([dbsetup])
-# run insert so there is a row in the table
-AT_CHECK([insert])
-AT_CHECK([popobject])
 AT_CHECK([dbcleanup])
 
@@ -101,21 +77,6 @@
 AT_CHECK([insert])
 # run popfis so there is afits file to read
-AT_CHECK([popfits])
+AT_CHECK([selectrowsfits])
 AT_CHECK([insertfits])
-AT_CHECK([dbcleanup])
-if [ test -f "blargh" ] ; then
-    rm -f "blargh"
-fi
-
-AT_CLEANUP
-
-###
-AT_SETUP([PopFits()])
-AT_KEYWORDS([PopFits])
-
-AT_CHECK([dbsetup])
-# run insert so there is a row in the table
-AT_CHECK([insert])
-AT_CHECK([popfits])
 AT_CHECK([dbcleanup])
 if [ test -f "blargh" ] ; then
