Index: /trunk/psphot/src/psphotBasicDeblend.c
===================================================================
--- /trunk/psphot/src/psphotBasicDeblend.c	(revision 6899)
+++ /trunk/psphot/src/psphotBasicDeblend.c	(revision 6900)
@@ -25,4 +25,5 @@
     // we use an index for this so the spatial sorting is kept
     psVector *SN = psVectorAlloc (sources->n, PS_DATA_F32);
+    SN->n = SN->nalloc;
     for (int i = 0; i < SN->n; i++) {
 	source = sources->data[i];
@@ -40,8 +41,4 @@
 
 	// temporary array for overlapping objects we find
-	// XXX psArrayAlloc should set ->n to 0 *and* all objects to NULL
-	// XXX I need a psArrayEmpty function to free the elements without the array
-	// XXX then, I could allocate 'overlap' once outside the loop and only
-	// XXX clear at the end of each loop
 	psArray *overlap = psArrayAlloc (100);
 	overlap->n = 0;
@@ -117,5 +114,4 @@
 		    source->blends->n = 0;
 		}
-
 		psArrayAdd (source->blends, 16, testSource);
 
Index: /trunk/psphot/src/psphotChoosePSF.c
===================================================================
--- /trunk/psphot/src/psphotChoosePSF.c	(revision 6899)
+++ /trunk/psphot/src/psphotChoosePSF.c	(revision 6900)
@@ -57,4 +57,5 @@
     // set up an array to store the results
     psArray *models = psArrayAlloc (list->n);
+    models->n = list->n;
 
     // try each model option listed in config
Index: /trunk/psphot/src/psphotEnsemblePSF.c
===================================================================
--- /trunk/psphot/src/psphotEnsemblePSF.c	(revision 6899)
+++ /trunk/psphot/src/psphotEnsemblePSF.c	(revision 6900)
@@ -29,6 +29,5 @@
     psArray  *models = psArrayAlloc (sources->n);
     psVector *index  = psVectorAlloc (sources->n, PS_TYPE_U32);
-    models->n = 0;
-    index->n = 0;
+    models->n = index->n = 0;
 
     // option to limit analysis to a specific region
@@ -118,9 +117,9 @@
 	// fill in the model pixel values
 	psImageInit (flux, 0.0);
-	psImageKeepCircle (mask, x, y, model->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (mask, x, y, model->radiusTMP, "OR", PM_MASK_MARK);
 	pmModelAdd (flux, mask, model, false, false);
 
 	// calculate nDOF (nPix - 1)
-	// int Nmaskpix = psImageCountPixelMask (mask, allArray, PM_SOURCE_MASK_SATURATED);
+	// int Nmaskpix = psImageCountPixelMask (mask, allArray, PM_MASK_SAT);
 	// model->nDOF  = mask->numCols*mask->numRows - Nmaskpix - 1;
 
@@ -136,4 +135,6 @@
     psSparse *sparse = psSparseAlloc (models->n, 100);
     psVector *weight = psVectorAlloc (models->n, PS_TYPE_F32);
+    weight->n = models->n;
+
     for (int i = 0; i < models->n; i++) {
 	int N = index->data.U32[i];
@@ -209,7 +210,7 @@
 	y = model->params->data.F32[3];
 
-	psImageKeepCircle (Fi->mask, x, y, model->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (Fi->mask, x, y, model->radiusTMP, "OR", PM_MASK_MARK);
 	pmSourceChisq (model, Fi->pixels, Fi->mask, Fi->weight);
-	psImageKeepCircle (Fi->mask, x, y, model->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (Fi->mask, x, y, model->radiusTMP, "AND", NOT_U8(PM_MASK_MARK));
     }
 
Index: /trunk/psphot/src/psphotFakeSources.c
===================================================================
--- /trunk/psphot/src/psphotFakeSources.c	(revision 6899)
+++ /trunk/psphot/src/psphotFakeSources.c	(revision 6900)
@@ -1,21 +1,3 @@
 # include "psphot.h"
-
-# if (0)
-psArray *psphotFakeSources () {
-
-    // psphotUpdateHeader (header, config);
-
-    psArray *sources = psArrayAlloc (50);
-
-    for (int i = 0; i < sources->n; i++) {
-	pmSource *source = pmSourceAlloc ();
-	modelType = pmModelSetType ("PS_MODEL_QGAUSS");
-	source->modelPSF = pmSourceModelGuess (source, modelType);
-	source->peak = pmPeakAlloc (10, 10, 0, 0);
-	sources->data[i] = source;
-    }
-    return sources;
-}
-# endif
 
 psArray *psphotFakeSources () {
Index: /trunk/psphot/src/psphotGrowthCurve.c
===================================================================
--- /trunk/psphot/src/psphotGrowthCurve.c	(revision 6899)
+++ /trunk/psphot/src/psphotGrowthCurve.c	(revision 6900)
@@ -45,5 +45,5 @@
 	radius = psf->growth->radius->data.F32[i];
 
-	psImageKeepCircle (mask, xc, yc, radius, "OR", PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (mask, xc, yc, radius, "OR", PM_MASK_MARK);
 
 	pmModelAdd (image, mask, model, false, false);
@@ -51,5 +51,5 @@
 	pmSourcePhotometryAper (&apMag, model, image, mask);
 
-	psImageKeepCircle (mask, xc, yc, radius, "AND", ~PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (mask, xc, yc, radius, "AND", NOT_U8(PM_MASK_MARK));
 	psf->growth->apMag->data.F32[i] = apMag;
     }
Index: /trunk/psphot/src/psphotImageMedian.c
===================================================================
--- /trunk/psphot/src/psphotImageMedian.c	(revision 6899)
+++ /trunk/psphot/src/psphotImageMedian.c	(revision 6900)
@@ -119,4 +119,8 @@
     }
 
+    psphotSaveImage (NULL, background->image, "back.fits");
+    psphotSaveImage (NULL, image, "image.fits");
+    psphotSaveImage (NULL, mask, "mask.fits");
+
     psLogMsg ("psphot", 3, "subtracted background model: %f sec\n", psTimerMark ("psphot"));
     psImageClippedStatsCleanup();
Index: /trunk/psphot/src/psphotMaskReadout.c
===================================================================
--- /trunk/psphot/src/psphotMaskReadout.c	(revision 6899)
+++ /trunk/psphot/src/psphotMaskReadout.c	(revision 6900)
@@ -21,5 +21,5 @@
 
     // psImageKeepRegion assumes the region refers to the parent coordinates
-    psImageKeepRegion (readout->mask, keep, "OR", PM_SOURCE_MASK_INVALID);
+    psImageKeepRegion (readout->mask, keep, "OR", PM_MASK_BAD);
 
     return true;
Index: /trunk/psphot/src/psphotModelTest.c
===================================================================
--- /trunk/psphot/src/psphotModelTest.c	(revision 6899)
+++ /trunk/psphot/src/psphotModelTest.c	(revision 6900)
@@ -158,5 +158,5 @@
 
     // define the pixels used for the fit
-    psImageKeepCircle (source->mask, xObj, yObj, RADIUS, "OR", PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, xObj, yObj, RADIUS, "OR", PM_MASK_MARK);
 
     char *fitset = psMetadataLookupStr (&status, recipe, "TEST_FIT_SET");
Index: /trunk/psphot/src/psphotSourceFits.c
===================================================================
--- /trunk/psphot/src/psphotSourceFits.c	(revision 6899)
+++ /trunk/psphot/src/psphotSourceFits.c	(revision 6900)
@@ -18,7 +18,7 @@
 
     // fit PSF model (set/unset the pixel mask)
-    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_MASK_MARK);
     pmSourceFitModel (source, PSF, PM_SOURCE_FIT_PSF);
-    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", NOT_U8(PM_MASK_MARK));
     
     // correct model chisq for flux trend
@@ -193,4 +193,5 @@
 
     modelSet = psArrayAlloc (2);
+    modelSet->n = 0;
 
     DBL = pmModelCopy (PSF);
@@ -210,7 +211,7 @@
 
     // fit PSF model (set/unset the pixel mask)
-    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_MASK_MARK);
     pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
-    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", NOT_U8(PM_MASK_MARK));
 
     return (modelSet);
@@ -230,7 +231,7 @@
 
     // fit EXT (not PSF) model (set/unset the pixel mask)
-    psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "OR", PM_MASK_MARK);
     pmSourceFitModel (source, EXT, PM_SOURCE_FIT_EXT);
-    psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, EXT->radiusTMP, "AND", NOT_U8(PM_MASK_MARK));
 
     return (EXT);
@@ -293,7 +294,7 @@
 
     // fit PSF model (set/unset the pixel mask)
-    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_MASK_MARK);
     pmSourceFitSet (source, modelSet, PM_SOURCE_FIT_PSF);
-    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+    psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", NOT_U8(PM_MASK_MARK));
 
     // correct model chisq for flux trend
Index: /trunk/psphot/src/psphotTest.c
===================================================================
--- /trunk/psphot/src/psphotTest.c	(revision 6899)
+++ /trunk/psphot/src/psphotTest.c	(revision 6900)
@@ -62,5 +62,5 @@
     // create a test table
     table = psArrayAlloc (10);
-    table->n = 0;
+table->n = 0;
 
     for (int i = 0; i < 10; i++) {
Index: /trunk/psphot/src/psphotWeightBias.c
===================================================================
--- /trunk/psphot/src/psphotWeightBias.c	(revision 6899)
+++ /trunk/psphot/src/psphotWeightBias.c	(revision 6900)
@@ -60,7 +60,7 @@
 
 	// fit PSF model (set/unset the pixel mask)
-	psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "OR", PM_MASK_MARK);
 	pmSourceFitModel (source, PSF, PM_SOURCE_FIT_NORM);
-	psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", ~PM_SOURCE_MASK_MARKED);
+	psImageKeepCircle (source->mask, x, y, PSF->radiusTMP, "AND", NOT_U8(PM_MASK_MARK));
     
 	// re-subtract PSF for object, leave local sky
