Index: branches/eam_branches/ipp-20101205/psphot/src/psphotChoosePSF.c
===================================================================
--- branches/eam_branches/ipp-20101205/psphot/src/psphotChoosePSF.c	(revision 30006)
+++ branches/eam_branches/ipp-20101205/psphot/src/psphotChoosePSF.c	(revision 30023)
@@ -459,9 +459,9 @@
             shape.sxy = modelPSF->params->data.F32[PM_PAR_SXY];
             axes = psEllipseShapeToAxes (shape, 20.0);
-            psFree (modelPSF);
 
             float FWHM_MINOR = FWHM_MAJOR * (axes.minor / axes.major);
             if (!isfinite(FWHM_MAJOR) || !isfinite(FWHM_MINOR)) {
                 fprintf (stderr, "!");
+		psFree (modelPSF);
                 continue;
             }
@@ -475,4 +475,5 @@
 	      psVectorAppend (psfExtra2, modelPSF->params->data.F32[8]);
 	    }
+            psFree (modelPSF);
         }
     }
@@ -508,15 +509,19 @@
     }
 
-    if (!psVectorStats (stats, psfExtra1, NULL, NULL, 0)) {
+    if (psfExtra1->n) {
+      if (!psVectorStats (stats, psfExtra1, NULL, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failure to measure stats for PSF EXTRA 1");
         return false;
-    }
-    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "PSF_EXT1", PS_META_REPLACE, "PSF extra param 1", stats->sampleMean);
-
-    if (!psVectorStats (stats, psfExtra2, NULL, NULL, 0)) {
+      }
+      psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "PSF_EXT1", PS_META_REPLACE, "PSF extra param 1", stats->sampleMean);
+    }
+
+    if (psfExtra2->n) {
+      if (!psVectorStats (stats, psfExtra2, NULL, NULL, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failure to measure stats for PSF EXTRA 2");
         return false;
-    }
-    psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "PSF_EXT2", PS_META_REPLACE, "PSF extra param 2", stats->sampleMean);
+      }
+      psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "PSF_EXT2", PS_META_REPLACE, "PSF extra param 2", stats->sampleMean);
+    }
 
     psMetadataAddF32 (readout->analysis, PS_LIST_TAIL, "ANGLE",    PS_META_REPLACE, "PSF angle",           axes.theta);
@@ -526,4 +531,7 @@
     psMetadataAddStr(readout->analysis,  PS_LIST_TAIL, "PSFMODEL", PS_META_REPLACE, "PSF Model Name", psfModelName);
     psMetadataAddBool(readout->analysis, PS_LIST_TAIL, "PSF_OK",   PS_META_REPLACE, "Valid PSF Model?", true);
+
+    int nParams = pmModelClassParameterCount(psf->type);
+    psMetadataAddS32(readout->analysis, PS_LIST_TAIL, "PSF_NPAR",   PS_META_REPLACE, "Number of PSF parameters", nParams);
 
     psFree (fwhmMajor);
