Index: /branches/eam_02_branch/psphot/src/psphotSourceFits.c
===================================================================
--- /branches/eam_02_branch/psphot/src/psphotSourceFits.c	(revision 13004)
+++ /branches/eam_02_branch/psphot/src/psphotSourceFits.c	(revision 13005)
@@ -108,6 +108,8 @@
         blend->modelPSF = psMemIncrRefCounter (model);
         psTrace ("psphot", 5, "fitted blend as PSF\n");
-	pmSourceCacheModel (source);
-	pmSourceSub (source, PM_MODEL_OP_FULL);
+
+	// build cached model and subtract
+	pmSourceCacheModel (blend);
+	pmSourceSub (blend, PM_MODEL_OP_FULL);
         blend->mode |=  PM_SOURCE_MODE_SUBTRACTED;
         blend->mode &= ~PM_SOURCE_MODE_TEMPSUB;
@@ -126,9 +128,12 @@
     psFree (sourceSet);
 
+    // save the new, successful model
+    psFree (source->modelPSF);
+    source->modelPSF = PSF;
     psTrace ("psphot", 5, "fitted primary as PSF\n");
+
+    // build cached model and subtract
     pmSourceCacheModel (source);
     pmSourceSub (source, PM_MODEL_OP_FULL);
-    psFree (source->modelPSF);
-    source->modelPSF = PSF;
     source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
     source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
@@ -162,12 +167,12 @@
     }
 
-    psTrace ("psphot", 5, "fitted as PSF\n");
-    pmSourceCacheModel (source);
-    pmSourceSub (source, PM_MODEL_OP_FULL);
-
     // free old model, save new model
     psFree (source->modelPSF);
     source->modelPSF = PSF;
-
+    psTrace ("psphot", 5, "fitted as PSF\n");
+
+    // build cached model and subtract
+    pmSourceCacheModel (source);
+    pmSourceSub (source, PM_MODEL_OP_FULL);
     source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
     source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
@@ -263,5 +268,5 @@
     source->modelEXT = EXT;
 
-    // XXX need to set model before subtracting
+    // build cached model and subtract
     pmSourceCacheModel (source);
     pmSourceSub (source, PM_MODEL_OP_FULL);
@@ -275,8 +280,4 @@
     // sub DLB
     psFree (EXT);
-
-    // XXX double check this
-    // pmModelSub (source->pixels, source->maskObj, (pmModel *) DBL->data[0], PM_MODEL_OP_FULL);
-    // pmModelSub (source->pixels, source->maskObj, (pmModel *) DBL->data[1], PM_MODEL_OP_FULL);
 
     // drop old model, save new second model...
@@ -288,18 +289,13 @@
 
     // copy most data from the primary source (modelEXT, blends stay NULL)
-    pmSource *newSrc = pmSourceAlloc ();
-    newSrc->peak     = psMemIncrRefCounter (source->peak);
-    newSrc->pixels   = psMemIncrRefCounter (source->pixels);
-    newSrc->weight   = psMemIncrRefCounter (source->weight);
-    newSrc->maskObj  = psMemIncrRefCounter (source->maskObj);
-    newSrc->moments  = psMemIncrRefCounter (source->moments);
+    // XXX use pmSourceCopy?
+    pmSource *newSrc = pmSourceCopy (source);
     newSrc->modelPSF = psMemIncrRefCounter (DBL->data[1]);
-    newSrc->type     = source->type;
-    newSrc->mode     = source->mode;
-
-    replace with:
-      pmSourceSub (source, PM_MODEL_OP_FULL);
-      pmSourceSub (newSrc, PM_MODEL_OP_FULL);
-
+
+    // build cached models and subtract
+    pmSourceCacheModel (source);
+    pmSourceSub (source, PM_MODEL_OP_FULL);
+    pmSourceCacheModel (newSrc);
+    pmSourceSub (newSrc, PM_MODEL_OP_FULL);
     psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
 
