Index: trunk/ppSub/src/ppSubArguments.c
===================================================================
--- trunk/ppSub/src/ppSubArguments.c	(revision 19045)
+++ trunk/ppSub/src/ppSubArguments.c	(revision 19060)
@@ -255,13 +255,4 @@
     }
 
-    int threads = psMetadataLookupS32(NULL, arguments, "-threads"); // Number of threads
-    if (threads > 0) {
-        if (!psThreadPoolInit(threads)) {
-            psError(PS_ERR_UNKNOWN, false, "Unable to setup %d threads", threads);
-            return false;
-        }
-        pmSubtractionThreadSetup();
-    }
-
     return true;
 }
Index: trunk/ppSub/src/ppSubReadout.c
===================================================================
--- trunk/ppSub/src/ppSubReadout.c	(revision 19045)
+++ trunk/ppSub/src/ppSubReadout.c	(revision 19060)
@@ -57,4 +57,13 @@
     psImage *reference = refRO->image;  // Reference image
     PS_ASSERT_IMAGES_SIZE_EQUAL(input, reference, false);
+
+    int threads = psMetadataLookupS32(NULL, config->arguments, "-threads"); // Number of threads
+    if (threads > 0) {
+        if (!psThreadPoolInit(threads)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to setup %d threads", threads);
+            return false;
+        }
+        pmSubtractionThreadsInit(inConv, refConv, inRO, refRO);
+    }
 
     // Look up recipe values
@@ -156,4 +165,6 @@
     psFree(optWidths);
 
+    pmSubtractionThreadsFinalize(inConv, refConv, inRO, refRO);
+
     // Add kernel descrption to header
     pmSubtractionKernels *kernels = psMetadataLookupPtr(&mdok, inConv->analysis,
