Index: /branches/eam_branches/ipp-dev-20210817/ppImage/src/Makefile.am
===================================================================
--- /branches/eam_branches/ipp-dev-20210817/ppImage/src/Makefile.am	(revision 41806)
+++ /branches/eam_branches/ipp-dev-20210817/ppImage/src/Makefile.am	(revision 41807)
@@ -42,4 +42,5 @@
 	ppImageDefineFile.c \
 	ppImageSetMaskBits.c \
+	ppImageSetThreads.c \
 	ppImageBurntoolMask.c \
 	ppImageParityFlip.c \
Index: /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImage.h
===================================================================
--- /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImage.h	(revision 41806)
+++ /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImage.h	(revision 41807)
@@ -193,5 +193,6 @@
 bool ppImageBurntoolApply(pmConfig *config, ppImageOptions *options, pmFPAview *view, pmReadout *readout);
 
-bool ppImageDetrendPatternApply(pmConfig *config, pmChip *chip, const pmFPAview *inputView, const ppImageOptions *options);
+bool ppImageDetrendPatternApply(pmConfig *config, pmChip *chip, const pmFPAview *inputView, ppImageOptions *options);
+bool ppImageDetrendPatternApplyCell (pmConfig *config, pmFPA *fpa, pmChip *chip, pmCell *cell, pmFPAview *view, ppImageOptions *options);
 
 // Do background continuity step
@@ -326,3 +327,5 @@
 bool ppImageAuxiliaryMask(pmConfig *config, const pmFPAview *view, const ppImageOptions *options, psMetadata *stats);
 
+bool ppImageSetThreads (void);
+
 #endif
Index: /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageDetrendPattern.c
===================================================================
--- /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageDetrendPattern.c	(revision 41806)
+++ /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageDetrendPattern.c	(revision 41807)
@@ -14,5 +14,5 @@
 
 bool ppImageDetrendPatternApply(pmConfig *config, pmChip *chip, const pmFPAview *inputView,
-                                const ppImageOptions *options)
+                                ppImageOptions *options)
 {
     pmCell *cell = NULL;
@@ -277,5 +277,6 @@
 }
 
-bool ppImageDetrendPatternApplyCell (pmConfig *config, pmFPA *fpa, pmChip *chip, pmCell *cell, const pmFPAview *view, const ppImageOptions *options) {
+// thread safety : 
+bool ppImageDetrendPatternApplyCell (pmConfig *config, pmFPA *fpa, pmChip *chip, pmCell *cell, pmFPAview *view, ppImageOptions *options) {
   
     // A very detailed log message. 
@@ -299,7 +300,9 @@
 			  options->patternRowStdev, options->maskValue, options->darkMask)) {
 	    psFree (view);
-	    return(false);
+	    return false;
 	}
     }
     psFree (view); // supplied view must be freeable
+    return true;
 }
+
Index: /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageParseCamera.c
===================================================================
--- /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageParseCamera.c	(revision 41806)
+++ /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageParseCamera.c	(revision 41807)
@@ -116,4 +116,5 @@
         int nScanRows = psMetadataLookupS32(&status, recipe, "SCAN.ROWS");
         pmDetrendSetThreadTasks(nScanRows);
+	ppImageSetThreads ();
     }
 
Index: /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageSetThreads.c
===================================================================
--- /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageSetThreads.c	(revision 41806)
+++ /branches/eam_branches/ipp-dev-20210817/ppImage/src/ppImageSetThreads.c	(revision 41807)
@@ -4,6 +4,4 @@
 
 #include "ppImage.h"
-
-/** NOTE 2021.09.03 : these functions are not currently being used **/
 
 bool ppImageThread_ppImageDetrendReadout (psThreadJob *job) {
@@ -20,6 +18,9 @@
 
     pmConfig *config        = job->args->data[0];
-    ppImageOptions *options = job->args->data[1];
-    pmFPAview *view         = job->args->data[2];
+    pmFPA *fpa              = job->args->data[1];
+    pmChip *chip            = job->args->data[2];
+    pmCell *cell            = job->args->data[3];
+    pmFPAview *view         = job->args->data[4];
+    ppImageOptions *options = job->args->data[5];
 
     bool status = ppImageDetrendPatternApplyCell (config, fpa, chip, cell, view, options);
@@ -27,17 +28,21 @@
 }
 
-bool ppImageSetThreads () {
+bool ppImageSetThreads (void) {
 
-  if (0) {
-    psThreadTask *task = psThreadTaskAlloc ("PPIMAGE_DETREND_READOUT", 3);
-    task->function = &ppImageThread_ppImageDetrendReadout;
-    psThreadTaskAdd (task);
-  }
+# if (0)
+    // *** Detrend Readout (now unused : threading is done at the readout level in pmDetrend)
+    {
+	psThreadTask *task = psThreadTaskAlloc ("PPIMAGE_DETREND_READOUT", 3);
+	task->function = &ppImageThread_ppImageDetrendReadout;
+	psThreadTaskAdd (task);
+    }
+# endif
 
+    // *** Detrend Pattern Row
     {
-    psThreadTask *task = psThreadTaskAlloc("PPIMAGE_PATTERN_ROW_CELL", 7);
-    task->function = &ppImageThread_ppImageDetrendPatternApplyCell;
-    psThreadTaskAdd(task);
-    psFree(task);
+	psThreadTask *task = psThreadTaskAlloc("PPIMAGE_PATTERN_ROW_CELL", 6);
+	task->function = &ppImageThread_ppImageDetrendPatternApplyCell;
+	psThreadTaskAdd(task);
+	psFree(task);
     }
     return true;
