Index: /trunk/glueforge/templates/psdb/printmetadatas.tt
===================================================================
--- /trunk/glueforge/templates/psdb/printmetadatas.tt	(revision 8218)
+++ /trunk/glueforge/templates/psdb/printmetadatas.tt	(revision 8219)
@@ -4,11 +4,30 @@
     PS_ASSERT_PTR_NON_NULL(mdname, false);
 
+    psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(mds); i++) {
-        psMetadata *md = mds->data[i];
-        if (![% pkg_namespace %]PrintMetadata(stream, md, mdcf)) {
-            psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
+        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, [% pkg_name FILTER upper %]_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 (![% pkg_namespace %]PrintMetadata(stream, output, mdcf)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
 
     return true;
Index: /trunk/glueforge/templates/psdb/printmetadatasraw.tt
===================================================================
--- /trunk/glueforge/templates/psdb/printmetadatasraw.tt	(revision 8218)
+++ /trunk/glueforge/templates/psdb/printmetadatasraw.tt	(revision 8219)
@@ -4,12 +4,22 @@
     PS_ASSERT_PTR_NON_NULL(mdname, false);
 
+    psMetadata *output = psMetadataAlloc();
     for (long i = 0; i < psArrayLength(mds); i++) {
         psMetadata *md = mds->data[i];
-        if (![% pkg_namespace %]PrintMetadataRaw(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;
         }
     }
 
+    if (![% pkg_namespace %]PrintMetadataRaw(stream, output, mdcf)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
+        psFree(output);
+        return false;
+    }
+
+    psFree(output);
+
     return true;
 }
