Index: /branches/eam_branches/ipp-20101205/psphot/doc/stack.txt
===================================================================
--- /branches/eam_branches/ipp-20101205/psphot/doc/stack.txt	(revision 30022)
+++ /branches/eam_branches/ipp-20101205/psphot/doc/stack.txt	(revision 30023)
@@ -18,9 +18,9 @@
 magSat       : FSATUR       saturation magnitude level ** not correctly set
 completMag   : FLIMIT       95% completion level in mag ** not correctly set 
-stackTypeID  :   	    stack type identifier ** deep stack, nightly stack, best IQ stack?
+stackTypeID  : STK_TYPE     stack type identifier ** deep stack, nightly stack, best IQ stack?
 refImageID   :   	    identifier of image used as reference for analysis
 subtrImageID : N/A (stack)  identifier of image subtracted to generate difference image
 analVer      :   	    analysis version index  ** index for tess_id + skycell_id + filter?
-nP2Images    :   	    number of P2 images contributing to this cell ** missing from input stack
+nP2Images    : NINPUTS 	    number of P2 images contributing to this cell ** missing from input stack
 astroScat    :   	    astrometric scatter for chip ** measure scatter on stack creation?
 photoScat    :   	    photometric scatter for chip ** internal scatter?  
Index: /branches/eam_branches/ipp-20101205/psphot/src/psphotChoosePSF.c
===================================================================
--- /branches/eam_branches/ipp-20101205/psphot/src/psphotChoosePSF.c	(revision 30022)
+++ /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);
