Index: trunk/ppSub/src/ppSubArguments.c
===================================================================
--- trunk/ppSub/src/ppSubArguments.c	(revision 14536)
+++ trunk/ppSub/src/ppSubArguments.c	(revision 14572)
@@ -197,4 +197,5 @@
     psMetadataAddBool(arguments,  PS_LIST_TAIL, "-reverse", 0, "Reverse sense of subtraction?", false);
     psMetadataAddBool(arguments,  PS_LIST_TAIL, "-generate-mask", 0, "Generate mask if not supplied?", false);
+    psMetadataAddStr(arguments,  PS_LIST_TAIL, "-stamps", 0, "Stamps filename", NULL);
 
     if (argc == 1 || !psArgumentParse(arguments, &argc, argv) || argc != 4) {
@@ -224,5 +225,6 @@
     }
 
-    valueArgStr(arguments, "-stats",     "STATS",         config->arguments);
+    valueArgStr(arguments, "-stats",  "STATS",  config->arguments);
+    valueArgStr(arguments, "-stamps", "STAMPS", config->arguments);
 
     psMetadata *recipe = psMetadataLookupMetadata(NULL, config->recipes, PPSUB_RECIPE); // Recipe for ppSim
Index: trunk/ppSub/src/ppSubReadout.c
===================================================================
--- trunk/ppSub/src/ppSubReadout.c	(revision 14536)
+++ trunk/ppSub/src/ppSubReadout.c	(revision 14572)
@@ -75,4 +75,5 @@
     psMaskType maskBlank = pmConfigMask(psMetadataLookupStr(NULL, config->arguments, "MASK.BLANK"),
                                         config); // Mask for blank reg.
+    const char *stampsFile = psMetadataLookupStr(NULL, config->arguments, "STAMPS"); // Filename for stamps
 
     int numCols = input->numCols, numRows = input->numRows; // Image dimensions
@@ -154,6 +155,20 @@
             for (int k = 0; k < iter && numRejected != 0; k++) {
                 psTrace("ppSub", 2, "Iteration %d...\n", k);
+
                 psTrace("ppSub", 3, "Finding stamps...\n");
-                stamps = pmSubtractionFindStamps(stamps, refRO->image, subMask, region, threshold, spacing);
+                if (stampsFile) {
+                    iter = 1;           // There is no iterating because we use all the stamps we have
+                    psArray *stampData = psVectorsReadFromFile(stampsFile, "%f %f"); // Stamp positions
+                    psVector *xStamp = stampData->data[0]; // x coordinates
+                    psVector *yStamp = stampData->data[1]; // y coordinates
+                    // Correct for IRAF (unit-offset) positions to C (zero-offset) positions
+                    psBinaryOp(xStamp, xStamp, "-", psScalarAlloc(1.0, PS_TYPE_F32));
+                    psBinaryOp(yStamp, yStamp, "-", psScalarAlloc(1.0, PS_TYPE_F32));
+
+                    stamps = pmSubtractionSetStamps(xStamp, yStamp, NULL, subMask, region);
+                } else {
+                    stamps = pmSubtractionFindStamps(stamps, refRO->image, subMask, region,
+                                                     threshold, spacing);
+                }
                 if (!stamps) {
                     psError(PS_ERR_UNKNOWN, false, "Unable to find stamps on reference image.");
