Index: /branches/eam_02_branch/psphot/src/psphotSourceFits.c
===================================================================
--- /branches/eam_02_branch/psphot/src/psphotSourceFits.c	(revision 12986)
+++ /branches/eam_02_branch/psphot/src/psphotSourceFits.c	(revision 12987)
@@ -108,5 +108,6 @@
         blend->modelPSF = psMemIncrRefCounter (model);
         psTrace ("psphot", 5, "fitted blend as PSF\n");
-        pmModelSub (source->pixels, source->maskObj, model, PM_MODEL_OP_FULL);
+	pmSourceCacheModel (source);
+	pmSourceSub (source, PM_MODEL_OP_FULL);
         blend->mode |=  PM_SOURCE_MODE_SUBTRACTED;
         blend->mode &= ~PM_SOURCE_MODE_TEMPSUB;
@@ -126,5 +127,6 @@
 
     psTrace ("psphot", 5, "fitted primary as PSF\n");
-    pmModelSub (source->pixels, source->maskObj, PSF, PM_MODEL_OP_FULL);
+    pmSourceCacheModel (source);
+    pmSourceSub (source, PM_MODEL_OP_FULL);
     psFree (source->modelPSF);
     source->modelPSF = PSF;
@@ -161,6 +163,6 @@
 
     psTrace ("psphot", 5, "fitted as PSF\n");
-    // should this be pmSourceSub?
-    pmModelSub (source->pixels, source->maskObj, PSF, PM_MODEL_OP_FULL);
+    pmSourceCacheModel (source);
+    pmSourceSub (source, PM_MODEL_OP_FULL);
 
     // free old model, save new model
@@ -257,9 +259,13 @@
     // sub EXT
     psFree (DBL);
-    pmModelSub (source->pixels, source->maskObj, EXT, PM_MODEL_OP_FULL);
-    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
 
     // save new model
     source->modelEXT = EXT;
+
+    // XXX need to set model before subtracting
+    pmSourceCacheModel (source);
+    pmSourceSub (source, PM_MODEL_OP_FULL);
+    psTrace ("psphot", 5, "blob as EXT: %f %f\n", EXT->params->data.F32[PM_PAR_XPOS], EXT->params->data.F32[PM_PAR_YPOS]);
+
     source->mode |=  PM_SOURCE_MODE_SUBTRACTED;
     source->mode &= ~PM_SOURCE_MODE_TEMPSUB;
@@ -269,7 +275,8 @@
     // sub DLB
     psFree (EXT);
-    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);
-    psTrace ("psphot", 5, "blob as DBL: %f %f\n", ONE->params->data.F32[PM_PAR_XPOS], ONE->params->data.F32[PM_PAR_YPOS]);
+
+    // 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...
@@ -290,4 +297,11 @@
     newSrc->type     = source->type;
     newSrc->mode     = source->mode;
+
+    replace with:
+      pmSourceSub (source, PM_MODEL_OP_FULL);
+      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]);
+
     psArrayAdd (sources, 100, newSrc);
     psFree (newSrc);
