Index: /trunk/psphot/src/psphotReplaceUnfit.c
===================================================================
--- /trunk/psphot/src/psphotReplaceUnfit.c	(revision 10200)
+++ /trunk/psphot/src/psphotReplaceUnfit.c	(revision 10201)
@@ -10,5 +10,9 @@
       source = sources->data[i];
 
-	if (!(source->mode & PM_SOURCE_MODE_TEMPSUB)) continue;
+      // replace other sources?
+      if (source->mode & PM_SOURCE_MODE_FAIL) goto replace;
+      continue;
+
+    replace:
 	if (source->modelPSF == NULL) continue;
 
@@ -23,2 +27,28 @@
     return true;
 }
+
+bool psphotReplaceAll (psArray *sources) { 
+
+    pmSource *source;
+
+    psTimerStart ("psphot");
+
+    for (int i = 0; i < sources->n; i++) {
+      source = sources->data[i];
+
+      // replace other sources?
+      if (!(source->mode & PM_SOURCE_MODE_SUBTRACTED)) continue;
+
+      // select appropriate model
+      pmModel *model = pmSourceGetModel (NULL, source);
+      if (model == NULL) continue;  // model must be defined
+	
+      psTrace ("psphot", 3, "replacing object at %f,%f\n", 
+	       model->params->data.F32[2], model->params->data.F32[3]);
+
+      pmModelAdd (source->pixels, source->mask, model, false, false);
+      source->mode &= ~PM_SOURCE_MODE_SUBTRACTED;
+    }
+    psLogMsg ("psphot.replace", 3, "replace models: %f sec (%ld objects)\n", psTimerMark ("psphot"), sources->n);
+    return true;
+}
