Index: trunk/ppSub/src/ppSub.h
===================================================================
--- trunk/ppSub/src/ppSub.h	(revision 30874)
+++ trunk/ppSub/src/ppSub.h	(revision 31156)
@@ -128,4 +128,7 @@
 void ppSubVersionPrint(void);
 
+/// write the version info to a string
+psString ppSubVersionLong(void);
+
 /// Mark the data quality as bad and prepare to suspend processing
 void ppSubDataQuality(ppSubData *data,  ///< Processing data
@@ -185,4 +188,6 @@
 bool ppSubSetSourceImageIDs (psArray *sources, int imageID);
 
+void ppSubSetThreads (void);
+
 ///@}
 #endif
Index: trunk/ppSub/src/ppSubArguments.c
===================================================================
--- trunk/ppSub/src/ppSubArguments.c	(revision 30874)
+++ trunk/ppSub/src/ppSubArguments.c	(revision 31156)
@@ -57,4 +57,9 @@
 }
 
+void ppSubSetThreads (void) {
+    // ppSub does not have any of its own thread handlers
+    return;
+}
+
 bool ppSubArguments(int argc, char *argv[], ppSubData *data)
 {
@@ -62,4 +67,10 @@
     pmConfig *config = data->config;
     assert(config);
+
+    // generic arguments (version, dumpconfig)
+    PS_ARGUMENTS_GENERIC( ppSub, config, argc, argv );
+
+    // thread arguments
+    PS_ARGUMENTS_THREADS( ppSub, config, argc, argv )
 
     int argNum = psArgumentGet(argc, argv, "-debug"); // Debugging argument number
@@ -82,6 +93,4 @@
     psMetadataAddStr(arguments, PS_LIST_TAIL, "-stats", 0, "Statistics file", NULL);
     psMetadataAddStr(arguments,  PS_LIST_TAIL, "-stamps", 0, "Stamps filename; x,y on each line", NULL);
-    psMetadataAddS32(arguments, PS_LIST_TAIL, "-threads", 0, "Number of threads", 0);
-    psMetadataAddStr(arguments, PS_LIST_TAIL, "-dumpconfig", 0, "file to dump configuration to", NULL);
     psMetadataAddS32(arguments, PS_LIST_TAIL, "-convolve", 0, "Image to convolve [1 or 2]", 0);
     psMetadataAddBool(arguments, PS_LIST_TAIL, "-photometry", 0, "Perform photometry?", NULL);
@@ -166,12 +175,4 @@
     }
 
-    int threads = psMetadataLookupS32(NULL, arguments, "-threads"); // Number of threads
-    if (threads > 0) {
-        if (!psThreadPoolInit(threads)) {
-            psError(psErrorCodeLast(), false, "Unable to setup %d threads", threads);
-            return false;
-        }
-    }
-
     psTrace("ppSub", 1, "Done reading command-line arguments\n");
 
Index: trunk/ppSub/src/ppSubConvolve.c
===================================================================
--- trunk/ppSub/src/ppSubConvolve.c	(revision 30874)
+++ trunk/ppSub/src/ppSubConvolve.c	(revision 31156)
@@ -39,4 +39,8 @@
 }
 
+void ppSubSetThreads (void) {
+    // ppSub does not have any of its own thread handlers
+    return;
+}
 
 int main(int argc, char *argv[])
@@ -49,4 +53,10 @@
         goto die;
     }
+
+    // generic arguments (version, dumpconfig)
+    PS_ARGUMENTS_GENERIC( ppSub, config, argc, argv );
+
+    // thread arguments
+    PS_ARGUMENTS_THREADS( ppSub, config, argc, argv )
 
     bool reference = false;             // Input is actually the reference image?
@@ -59,5 +69,4 @@
         psMetadataAddStr(arguments, PS_LIST_TAIL, "-kernel", 0, "Convolution kernel", NULL);
         psMetadataAddBool(arguments, PS_LIST_TAIL, "-reference", 0, "Input is actually reference?", false);
-        psMetadataAddS32(arguments, PS_LIST_TAIL, "-threads", 0, "Threads to use", 0);
         psMetadataAddBool(arguments, PS_LIST_TAIL, "-save-all", 0, "Save all outputs?", false);
 
@@ -75,5 +84,5 @@
 
         reference = psMetadataLookupBool(NULL, arguments, "-reference");
-        threads = psMetadataLookupS32(NULL, arguments, "-threads");
+        threads = psMetadataLookupS32(NULL, arguments, "NTHREADS");
         fileList("PPSUB.INPUT", inImage, "Input image", config);
         fileList("PPSUB.INPUT.MASK", inMask, "Input mask", config);
@@ -239,5 +248,4 @@
         if (threads > 0) {
             pmSubtractionThreadsInit();
-            psThreadPoolInit(threads);
         }
 
Index: trunk/ppSub/src/ppSubDefineOutput.c
===================================================================
--- trunk/ppSub/src/ppSubDefineOutput.c	(revision 30874)
+++ trunk/ppSub/src/ppSubDefineOutput.c	(revision 31156)
@@ -73,16 +73,12 @@
     pmFPAfile *inFile = psMetadataLookupPtr(NULL, config->files, "PPSUB.INPUT"); // Input file
 
-    // We should be using the GNU version of basename() which doesn't modify its argument, but just in case,
-    // we'll copy the string.
-    psString refName = psStringCopy(refFile->filename); // Filename of reference
-    const char *refBase = basename(refName);            // Basename of reference
-    psMetadataAddStr(outHDU->header, PS_LIST_TAIL, "PPSUB.REFERENCE", 0,
-                     "Subtraction reference", refBase);
-    psFree(refName);
-    psString inName = psStringCopy(inFile->filename);   // Filename of input
-    const char *inBase = basename(inName);              // Basename of input
-    psMetadataAddStr(outHDU->header, PS_LIST_TAIL, "PPSUB.INPUT", 0,
-                     "Subtraction input", inBase);
-    psFree(inName);
+    // save the names of the input and reference image in the header
+    psString refBase = psStringFileBasename(refFile->origname);            // Basename of reference
+    psMetadataAddStr(outHDU->header, PS_LIST_TAIL, "PPSUB.REFERENCE", 0, "Subtraction reference", refBase);
+    psFree(refBase);
+
+    psString inBase = psStringFileBasename(inFile->origname);              // Basename of input
+    psMetadataAddStr(outHDU->header, PS_LIST_TAIL, "PPSUB.INPUT", 0, "Subtraction input", inBase);
+    psFree(inBase);
 
     ppSubVersionHeader(outHDU->header);
Index: trunk/ppSub/src/ppSubFlagNeighbors.c
===================================================================
--- trunk/ppSub/src/ppSubFlagNeighbors.c	(revision 30874)
+++ trunk/ppSub/src/ppSubFlagNeighbors.c	(revision 31156)
@@ -189,12 +189,12 @@
         if (!src) NEXT1; 
         if (!src->peak) NEXT1; 
-        if (!finite(src->peak->xf)) NEXT1; 
-        if (!finite(src->peak->yf)) NEXT1; 
-        if (!finite(src->peak->SN)) NEXT1; 
-        if (src->peak->SN < MIN_SN) NEXT1; 
+        if (!isfinite(src->peak->xf)) NEXT1; 
+        if (!isfinite(src->peak->yf)) NEXT1; 
+        if (!isfinite(src->peak->detValue)) NEXT1; 
+        if (sqrt(src->peak->detValue) < MIN_SN) NEXT1; 
  
         if (!obj) NEXT2; 
-        if (!finite(obj->x)) NEXT2; 
-        if (!finite(obj->y)) NEXT2; 
+        if (!isfinite(obj->x)) NEXT2; 
+        if (!isfinite(obj->y)) NEXT2; 
  
         dx = src->peak->xf - obj->x; 
@@ -211,8 +211,8 @@
 	    if (!src) NEXT1; 
 	    if (!src->peak) NEXT1; 
-	    if (!finite(src->peak->xf)) NEXT1; 
-	    if (!finite(src->peak->yf)) NEXT1; 
-	    if (!finite(src->peak->SN)) NEXT1; 
-	    if (src->peak->SN < MIN_SN) NEXT1; 
+	    if (!isfinite(src->peak->xf)) NEXT1; 
+	    if (!isfinite(src->peak->yf)) NEXT1; 
+	    if (!isfinite(src->peak->detValue)) NEXT1; 
+	    if (sqrt(src->peak->detValue) < MIN_SN) NEXT1; 
 
 	    dx = src->peak->xf - obj->x; 
@@ -235,5 +235,5 @@
 	src = sources->data[Imin]; 
 
-	// fprintf (stderr, "j: %d, Imin: %d, obj x,y: %f, %f  src x,y: %f, %f, SN: %f, ID: %d\n", j, Imin, obj->x, obj->y, src->peak->xf, src->peak->yf, src->peak->SN, src->id);
+	// fprintf (stderr, "j: %d, Imin: %d, obj x,y: %f, %f  src x,y: %f, %f, SN: %f, ID: %d\n", j, Imin, obj->x, obj->y, src->peak->xf, src->peak->yf, sqrt(src->peak->detValue), src->id);
 
 	// add source to object
Index: trunk/ppSub/src/ppSubMakePSF.c
===================================================================
--- trunk/ppSub/src/ppSubMakePSF.c	(revision 30874)
+++ trunk/ppSub/src/ppSubMakePSF.c	(revision 31156)
@@ -158,5 +158,5 @@
 psArray *ppSubSelectPSFSources(psArray *sources){
 
-    sources = psArraySort (sources, pmSourceSortBySN);
+    sources = psArraySort (sources, pmSourceSortByFlux);
 
     psArray *subset = psArrayAllocEmpty(MAX_NPSF);
Index: trunk/ppSub/src/ppSubMatchPSFs.c
===================================================================
--- trunk/ppSub/src/ppSubMatchPSFs.c	(revision 30874)
+++ trunk/ppSub/src/ppSubMatchPSFs.c	(revision 31156)
@@ -374,5 +374,5 @@
     }
 
-    int threads = psMetadataLookupS32(NULL, config->arguments, "-threads"); // Number of threads
+    int threads = psMetadataLookupS32(NULL, config->arguments, "NTHREADS"); // Number of threads
     if (threads > 0) {
         pmSubtractionThreadsInit();
