Index: trunk/archive/scripts/src/phase2/psAdditionals.c
===================================================================
--- trunk/archive/scripts/src/phase2/psAdditionals.c	(revision 5651)
+++ trunk/archive/scripts/src/phase2/psAdditionals.c	(revision 5786)
@@ -5,6 +5,6 @@
 
 
-psMetadata *psMetadataCopy(psMetadata *out,
-                           const psMetadata *in)
+psMetadata *pap_psMetadataCopy(psMetadata *out,
+			       const psMetadata *in)
 {
     PS_ASSERT_PTR_NON_NULL(in,NULL);
@@ -20,13 +20,19 @@
 	// Need to look for MULTI, which won't be picked up using the iterator.
 	psMetadataItem *multiCheckItem = psMetadataLookup(in, inItem->name);
-	int multiFlag = 0;		// Flag to indicate MULTI or not
+	unsigned int flag = PS_META_REPLACE; // Flag to indicate MULTI; otherwise, replace
 	if (multiCheckItem->type == PS_DATA_METADATA_MULTI) {
-	    multiFlag = PS_DATA_METADATA_MULTI;
-	}
+	    psTrace(__func__, 10, "MULTI: %s (%s)\n", inItem->name, inItem->comment);
+	    flag = PS_DATA_METADATA_MULTI;
+	}
+
+	psTrace(__func__, 5, "Copying %s (%s)...\n", inItem->name, inItem->comment);
 
 #define PS_METADATA_COPY_CASE(NAME,TYPE) \
           case PS_TYPE_##NAME: \
-            psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_TYPE_##NAME | multiFlag, inItem->comment, \
-			  inItem->data.TYPE); \
+            if (! psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_TYPE_##NAME | flag, inItem->comment, \
+			        inItem->data.TYPE)) { \
+	        psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", inItem->name, \
+                                  inItem->comment); \
+            } \
             break;
 
@@ -34,16 +40,16 @@
 	    // Numerical types
 	    PS_METADATA_COPY_CASE(BOOL,B);
-	    PS_METADATA_COPY_CASE(S8, S8);
-	    PS_METADATA_COPY_CASE(S16, S16);
-	    PS_METADATA_COPY_CASE(S32, S32);
-	    PS_METADATA_COPY_CASE(U8, U8);
-	    PS_METADATA_COPY_CASE(U16, U16);
-	    PS_METADATA_COPY_CASE(U32, U32);
-	    PS_METADATA_COPY_CASE(F32, F32);
-	    PS_METADATA_COPY_CASE(F64, F64);
+	    PS_METADATA_COPY_CASE(S8,S8);
+	    PS_METADATA_COPY_CASE(S16,S16);
+	    PS_METADATA_COPY_CASE(S32,S32);
+	    PS_METADATA_COPY_CASE(U8,U8);
+	    PS_METADATA_COPY_CASE(U16,U16);
+	    PS_METADATA_COPY_CASE(U32,U32);
+	    PS_METADATA_COPY_CASE(F32,F32);
+	    PS_METADATA_COPY_CASE(F64,F64);
 
 	    // String: relying on the fact that this will copy the string, not point at it.
 	  case PS_DATA_STRING:
-            psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_STRING | multiFlag, inItem->comment,
+            psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_STRING | flag, inItem->comment,
 			  inItem->data.V);
             break;
@@ -52,6 +58,6 @@
 	  case PS_DATA_METADATA:
 	    {
-		psMetadata *metadata = psMetadataCopy(NULL, inItem->data.md);
-		psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_METADATA | multiFlag, inItem->comment,
+		psMetadata *metadata = pap_psMetadataCopy(NULL, inItem->data.md);
+		psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_METADATA | flag, inItem->comment,
 			      metadata);
 		break;
@@ -60,5 +66,7 @@
 	  default:
 	    numPointers++;
-	    psMetadataItemAlloc(inItem->name, inItem->type, inItem->comment, inItem->data.V);
+	    psTrace(__func__, 10, "Copying a pointer in the metadata: %x\n", inItem->type);
+	    psMetadataAdd(out, PS_LIST_TAIL, inItem->name, inItem->type | flag, inItem->comment,
+			  inItem->data.V);
 	    break;
 	}
@@ -68,5 +76,5 @@
     if (numPointers > 0) {
 	psLogMsg(__func__, PS_LOG_WARN, "Forced to copy %d pointers when copying metadata.  Updating the "
-		 "copied psMetadata will affect the original!\n");
+		 "copied psMetadata will affect the original!\n", numPointers);
     }
 
