Index: branches/pap/ppSub/src/ppSubMakePSF.c
===================================================================
--- branches/pap/ppSub/src/ppSubMakePSF.c	(revision 27708)
+++ branches/pap/ppSub/src/ppSubMakePSF.c	(revision 28003)
@@ -106,5 +106,5 @@
     // save the resulting PSF information on the pmFPAfile PSPHOT.PSF.LOAD
     pmFPAfile *psfFile = psMetadataLookupPtr(&mdok, config->files, "PSPHOT.PSF.LOAD"); // PSF file
-    if (!ppSubCopyPSF (psfFile, photFile, view)) {
+    if (!ppSubCopyPSF(psfFile, photFile, view)) {
         psErrorStackPrint(stderr, "PSF was not generated");
         psWarning("PSF was not generated --- suspect bad data quality.");
@@ -121,8 +121,6 @@
 }
 
-bool ppSubCopyPSF (pmFPAfile *output, pmFPAfile *input, pmFPAview *view) {
-
-    bool mdok = false;
-
+bool ppSubCopyPSF(pmFPAfile *output, pmFPAfile *input, pmFPAview *view)
+{
     pmChip *inputChip   = pmFPAviewThisChip(view, input->fpa); // Chip with PSF info
     pmChip *outputChip  = pmFPAviewThisChip(view, output->fpa); // Chip to store PSF info
@@ -134,31 +132,14 @@
         pmCell *outputCell  = pmFPAviewThisCell(view, output->fpa);
         outputRO = pmReadoutAlloc(outputCell);
-        outputRO->image = psMemIncrRefCounter (inputRO->image);
+        outputRO->image = psMemIncrRefCounter(inputRO->image);
     }
 
-    // copy the PSF-related data to PSPHOT.PSF.LOAD for safe-keeping
-    psMetadata *psfRegions = psMetadataAlloc();
-
-    int nRegions = psMetadataLookupS32 (&mdok, inputRO->analysis, "PSF.CLUMP.NREGIONS");
-    if (!nRegions) {
-        psErrorStackPrint(stderr, "No PSF available");
-        return false;
+    // Copy the PSF-related data
+    psMetadataIterator *iter = psMetadataIteratorAlloc(inputRO->analysis, PS_LIST_HEAD, "^PSF\\.CLUMP.*");
+    psMetadataItem *item;               // Item from iteration
+    while ((item = psMetadataGetAndIncrement(iter))) {
+        psMetadataAddItem(outputRO->analysis, item, PS_LIST_TAIL, PS_META_REPLACE);
     }
-    psMetadataAddS32 (psfRegions, PS_LIST_TAIL, "PSF.CLUMP.NREGIONS",  PS_META_REPLACE, "psf clump regions", nRegions);
-
-    for (int i = 0; i < nRegions; i++) {
-        char fieldName[80];
-        snprintf (fieldName, 80, "PSF.CLUMP.REGION.%03d", i);
-        psMetadata *regionMD = psMetadataLookupPtr (&mdok, inputRO->analysis, fieldName);
-        if (!regionMD) {
-            psWarning ("missing psf clump region metadata for entry %d", i);
-            continue;
-        }
-        psMetadataAddMetadata (psfRegions, PS_LIST_TAIL, fieldName, PS_META_REPLACE, "psf clump region", regionMD);
-    }
-
-    // XXX why am I replacing the entire analysis MD?
-    psFree(outputRO->analysis);
-    outputRO->analysis = psfRegions;
+    psFree(iter);
 
     // copy the PSF model data
@@ -169,5 +150,6 @@
     }
 
-    psMetadataAddPtr(outputChip->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN | PS_META_REPLACE, "PSF from ppSubMakePSF", psf);
+    psMetadataAddPtr(outputChip->analysis, PS_LIST_TAIL, "PSPHOT.PSF", PS_DATA_UNKNOWN | PS_META_REPLACE,
+                     "PSF from ppSubMakePSF", psf);
 
     return true;
