Index: trunk/psphot/src/pmSourceFitSet.c
===================================================================
--- trunk/psphot/src/pmSourceFitSet.c	(revision 5993)
+++ trunk/psphot/src/pmSourceFitSet.c	(revision 6379)
@@ -105,7 +105,12 @@
     for (psS32 i = 0; i < source->pixels->numRows; i++) {
         for (psS32 j = 0; j < source->pixels->numCols; j++) {
+	    // skip masked points
             if (source->mask->data.U8[i][j]) {
 		continue;
 	    }
+	    // skip zero-weight points
+	    if (source->weight->data.F32[i][j] == 0) {
+		continue;
+	    } 
 	    psVector *coord = psVectorAlloc(2, PS_TYPE_F32);
 
@@ -115,9 +120,5 @@
 	    x->data[nPix] = (psPtr *) coord;
 	    y->data.F32[nPix] = source->pixels->data.F32[i][j];
-
 	    // psMinimizeLMChi2 takes wt = 1/dY^2
-	    if (source->weight->data.F32[i][j] == 0) {
-		continue;
-	    } 
 	    yErr->data.F32[nPix] = 1.0 / source->weight->data.F32[i][j];
 	    nPix++;
@@ -131,4 +132,7 @@
 	psFree (y);
 	psFree (yErr);
+	psFree (params);
+	psFree (dparams);
+	psFree (paramMask);
         return(false);
     }
@@ -180,4 +184,5 @@
             dparams->data.F32[i] = delta->data.F64[i];
         }
+	psFree (delta);
     }
 
@@ -217,4 +222,12 @@
     psFree(covar);
     psFree(paramMask);
+    psFree(params);
+    psFree(dparams);
+    psFree(params_min);
+    psFree(params_max);
+    psFree(beta_lim);
+
+    // free static memory used by pmModelFitSet
+    pmModelFitSetClear ();
 
     rc = (onPic && fitStatus);
