Index: /trunk/ippdb/configure.ac
===================================================================
--- /trunk/ippdb/configure.ac	(revision 8221)
+++ /trunk/ippdb/configure.ac	(revision 8222)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.59)
 
-AC_INIT([ippdb], [0.0.21], [pan-starrs.ifa.hawaii.edu])
+AC_INIT([ippdb], [0.0.22], [pan-starrs.ifa.hawaii.edu])
 AC_CONFIG_SRCDIR([ippdb.pc.in])
 
Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 8221)
+++ /trunk/ippdb/src/ippdb.c	(revision 8222)
@@ -183,27 +183,56 @@
     PS_ASSERT_PTR_NON_NULL(mdname, false);
 
+    psMetadata *output = psMetadataAlloc();
+    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");
+            psFree(md);
+            psFree(output);
+            return false;
+        }
+
+        psFree(md);
+    }
+
+    if (!ippdbPrintMetadata(stream, output, mdcf)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
+
+    return true;
+}
+
+bool ippdbPrintMetadatasRaw(FILE *stream, psArray *mds, const char *mdname, bool mdcf)
+{
+    PS_ASSERT_PTR_NON_NULL(mds, false);
+    PS_ASSERT_PTR_NON_NULL(mdname, false);
+
+    psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(mds); i++) {
         psMetadata *md = mds->data[i];
-        if (!ippdbPrintMetadata(stream, md, mdcf)) {
-            psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
+        if (!psMetadataAddMetadata(output, PS_LIST_TAIL, mdname, PS_META_DUPLICATE_OK, NULL, md)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add a metadata item");
+            psFree(output);
             return false;
         }
     }
 
-    return true;
-}
-
-bool ippdbPrintMetadatasRaw(FILE *stream, psArray *mds, const char *mdname, bool mdcf)
-{
-    PS_ASSERT_PTR_NON_NULL(mds, false);
-    PS_ASSERT_PTR_NON_NULL(mdname, false);
-
-    for (long i = 0; i < psArrayLength(mds); i++) {
-        psMetadata *md = mds->data[i];
-        if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
-            psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
-            return false;
-        }
-    }
+    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
 
     return true;
