Index: trunk/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtraction.c	(revision 19122)
+++ trunk/psModules/src/imcombine/pmSubtraction.c	(revision 19148)
@@ -798,9 +798,32 @@
     // Propagate the mask
     if (subMask) {
+        psMaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask
+        psMaskType **source = subMask->data.PS_TYPE_MASK_DATA; // Source mask
+
         for (int y = yMin; y < yMax; y++) {
             for (int x = xMin; x < xMax; x++) {
-                if (subMask->data.PS_TYPE_MASK_DATA[y][x] & maskTarget) {
-                    convMask->data.PS_TYPE_MASK_DATA[y][x] |= blank;
+                if (source[y][x] & maskTarget) {
+                    target[y][x] |= blank;
                 }
+            }
+        }
+    }
+    if ((kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) && ro1->mask) {
+        psMaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask
+        psMaskType **source = ro1->mask->data.PS_TYPE_MASK_DATA; // Source mask
+
+        for (int y = yMin; y < yMax; y++) {
+            for (int x = xMin; x < xMax; x++) {
+                target[y][x] |= source[y][x];
+            }
+        }
+    }
+    if ((kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) && ro2->mask) {
+        psMaskType **target = convMask->data.PS_TYPE_MASK_DATA; // Target mask
+        psMaskType **source = ro2->mask->data.PS_TYPE_MASK_DATA; // Source mask
+
+        for (int y = yMin; y < yMax; y++) {
+            for (int x = xMin; x < xMax; x++) {
+                target[y][x] |= source[y][x];
             }
         }
