Index: /trunk/ppSub/src/ppSubArguments.c
===================================================================
--- /trunk/ppSub/src/ppSubArguments.c	(revision 14805)
+++ /trunk/ppSub/src/ppSubArguments.c	(revision 14806)
@@ -18,5 +18,5 @@
     fprintf(stderr, "\nPan-STARRS PSF-matched image subtraction\n\n");
     fprintf(stderr, "Usage: %s INPUT.fits REFERENCE.fits OUTPUT_ROOT \n"
-            "\t[-psf REFERENCE.psf.fits]\n\n"
+            "\t[-psf REFERENCE.psf.fits] [-sources REFERENCE.cmf]\n\n"
             "This subtracts the convolved REFERENCE from the INPUT, by default.\n",
             program);
@@ -177,4 +177,5 @@
                       psArgumentGet(argc, argv, "-psf") ? true : false);
     pmConfigFileSetsMD(config->arguments, &argc, argv, "PSPHOT.PSF", "-psf", NULL);
+    pmConfigFileSetsMD(config->arguments, &argc, argv, "PPSUB.SOURCES", "-sources", NULL);
 
     psMetadata *arguments = psMetadataAlloc(); // Command-line arguments
Index: /trunk/ppSub/src/ppSubCamera.c
===================================================================
--- /trunk/ppSub/src/ppSubCamera.c	(revision 14805)
+++ /trunk/ppSub/src/ppSubCamera.c	(revision 14806)
@@ -28,5 +28,5 @@
     pmFPAfile *inputMask = pmFPAfileBindFromArgs(&status, input, config, "PPSUB.INPUT.MASK", "INPUT.MASK");
     if (!status) {
-        psError (PS_ERR_UNKNOWN, false, "failed to load find definition");
+        psError (PS_ERR_UNKNOWN, false, "Failed to load file definition PPSUB.INPUT.MASK");
         return NULL;
     }
@@ -39,5 +39,5 @@
     pmFPAfile *inputWeight = pmFPAfileBindFromArgs(&status, input, config, "PPSUB.INPUT.WEIGHT", "INPUT.WEIGHT");
     if (!status) {
-        psError (PS_ERR_UNKNOWN, false, "failed to load find definition");
+        psError (PS_ERR_UNKNOWN, false, "Failed to load file definition PPSUB.INPUT.WEIGHT");
         return NULL;
     }
@@ -62,5 +62,5 @@
     pmFPAfile *refMask = pmFPAfileBindFromArgs(&status, ref, config, "PPSUB.REF.MASK", "REF.MASK");
     if (!status) {
-        psError (PS_ERR_UNKNOWN, false, "failed to load find definition");
+        psError (PS_ERR_UNKNOWN, false, "Failed to load file definition PPSUB.REF.MASK");
         return NULL;
     }
@@ -73,5 +73,5 @@
     pmFPAfile *refWeight = pmFPAfileBindFromArgs(&status, ref, config, "PPSUB.REF.WEIGHT", "REF.WEIGHT");
     if (!status) {
-        psError (PS_ERR_UNKNOWN, false, "failed to load find definition");
+        psError (PS_ERR_UNKNOWN, false, "Failed to load file definition PPSUB.REF.WEIGHT");
         return NULL;
     }
@@ -128,4 +128,14 @@
     psFree(view);
 
+    pmFPAfile *sources = pmFPAfileBindFromArgs(&status, input, config, "PPSUB.SOURCES", "SOURCES");
+    if (!sources) {
+        psError(PS_ERR_IO, false, "Failed to load file definition PPSUB.SOURCES");
+        return false;
+    }
+    if (ref->type != PM_FPA_FILE_CMF) {
+        psError(PS_ERR_IO, true, "PPSUB.SOURCES is not of type CMF");
+        return false;
+    }
+
     // psPhot input
     if (psMetadataLookup(config->arguments, "PSPHOT.PSF")) {
Index: /trunk/ppSub/src/ppSubReadout.c
===================================================================
--- /trunk/ppSub/src/ppSubReadout.c	(revision 14805)
+++ /trunk/ppSub/src/ppSubReadout.c	(revision 14806)
@@ -83,7 +83,10 @@
     }
 
-    if (!pmSubtractionMatch(outRO, refRO, inRO, footprint, regionSize, spacing, threshold, stampsName,
-                            NAN, type, size, order, widths, orders, inner, ringsOrder, binning, optimum,
-                            optWidths, optOrder, optThresh, iter, rej, maskBad, maskBlank)) {
+    psArray *sources = psMetadataLookupPtr(&mdok, refRO->analysis, "PSPHOT.SOURCES"); // Sources in image
+
+    if (!pmSubtractionMatch(outRO, refRO, inRO, footprint, regionSize, spacing, threshold, sources,
+                            stampsName, NAN, type, size, order, widths, orders, inner, ringsOrder,
+                            binning, optimum, optWidths, optOrder, optThresh, iter, rej, maskBad,
+                            maskBlank)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to match images.");
         psFree(outRO);
