Index: trunk/psphot/src/psphotMagnitudes.c
===================================================================
--- trunk/psphot/src/psphotMagnitudes.c	(revision 5837)
+++ trunk/psphot/src/psphotMagnitudes.c	(revision 5980)
@@ -17,5 +17,5 @@
 	model = source->modelPSF;
 	if (model == NULL) return NULL;
-	radius = apRadius;
+	radius = (apRadius > 0) ? apRadius : model->radius;
 	isPSF = true;
 	break;
@@ -46,14 +46,18 @@
     // for PSFs, correct both apMag and fitMag to same system, consistent with infinite flux star in aperture RADIUS
     if (isPSF && (psf != NULL)) {
+      if (psf->growth != NULL) {
+	  source->apMag += pmGrowthCurveCorrect (psf->growth, model->radius);
+      }
+
       rflux   = pow (10.0, 0.4*source->fitMag);
-      source->apMag  -= rflux * psf->skyBias * (M_PI * PS_SQR(apRadius));
-      source->fitMag += psPolynomial3DEval (psf->ApTrend, x, y, 0.0);
+      source->apMag  -= PS_SQR(model->radius)*rflux * psf->skyBias + psf->skySat / rflux;
+      source->fitMag += psPolynomial4DEval (psf->ApTrend, x, y, 0.0, 0.0);
     }
+
+    // unmask aperture
+    psImageKeepCircle (source->mask, x, y, radius, "AND", ~PSPHOT_MASK_MARKED);
 
     // subtract object, leave local sky
     pmSourceSubModel (source->pixels, source->mask, model, false, false);
-
-    // unmask aperture
-    psImageKeepCircle (source->mask, x, y, radius, "AND", ~PSPHOT_MASK_MARKED);
 
     if (!status) return NULL;
@@ -62,6 +66,7 @@
 
 /*
-aprMag' - fitMag = rflux*skyBias + ApTrend(x,y)
-(aprMag - rflux*skyBias) - fitMAg = ApTrend(x,y)
-(aprMag - rflux*skyBias) = fitMAg + ApTrend(x,y)
+aprMag' - fitMag = flux*skySat + r^2*rflux*skyBias + ApTrend(x,y)
+(aprMag - flux*skySat - r^2*rflux*skyBias) - fitMAg = ApTrend(x,y)
+(aprMag - flux*skySat - r^2*rflux*skyBias) = fitMAg + ApTrend(x,y)
+
 */
