Index: trunk/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtraction.c	(revision 17321)
+++ trunk/psModules/src/imcombine/pmSubtraction.c	(revision 17370)
@@ -4,6 +4,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.84 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2008-04-04 23:03:42 $
+ *  @version $Revision: 1.85 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-04-07 22:46:39 $
  *
  *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -637,6 +637,10 @@
                            const pmSubtractionKernels *kernels, bool doBG, bool useFFT)
 {
-    PM_ASSERT_READOUT_NON_NULL(out1, false);
-    PM_ASSERT_READOUT_NON_NULL(out2, false);
+    if (kernels->mode != PM_SUBTRACTION_MODE_2) {
+        PM_ASSERT_READOUT_NON_NULL(out1, false);
+    }
+    if (kernels->mode != PM_SUBTRACTION_MODE_1) {
+        PM_ASSERT_READOUT_NON_NULL(out2, false);
+    }
     PM_ASSERT_READOUT_NON_NULL(ro1, false);
     PM_ASSERT_READOUT_NON_NULL(ro2, false);
@@ -695,13 +699,24 @@
     psImage *convMask = NULL;           // Convolved mask image (common to inputs 1 and 2)
     if (subMask) {
-        if (!out1->mask) {
-            out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_MASK);
-        }
-        convMask = out1->mask;
+        if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
+            if (!out1->mask) {
+                out1->mask = psImageAlloc(numCols, numRows, PS_TYPE_MASK);
+            }
+            convMask = out1->mask;
+        }
+        if (kernels->mode == PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
+            if (convMask) {
+                if (out2->mask) {
+                    psFree(out2->mask);
+                }
+                out2->mask = psMemIncrRefCounter(convMask);
+            } else {
+                if (!out2->mask) {
+                    out2->mask = psImageAlloc(numCols, numRows, PS_TYPE_MASK);
+                }
+                convMask = out2->mask;
+            }
+        }
         psImageInit(convMask, 0);
-        if (out2->mask) {
-            psFree(out2->mask);
-        }
-        out2->mask = psMemIncrRefCounter(convMask);
     }
 
@@ -794,12 +809,16 @@
     switch (kernels->mode) {
       case PM_SUBTRACTION_MODE_1:
-        out2->image = psMemIncrRefCounter(ro2->image);
-        out2->weight = psMemIncrRefCounter(ro2->weight);
-        out2->mask = psMemIncrRefCounter(ro2->mask);
+        if (out2) {
+            out2->image = psMemIncrRefCounter(ro2->image);
+            out2->weight = psMemIncrRefCounter(ro2->weight);
+            out2->mask = psMemIncrRefCounter(ro2->mask);
+        }
         break;
       case PM_SUBTRACTION_MODE_2:
-        out1->image = psMemIncrRefCounter(ro1->image);
-        out1->weight = psMemIncrRefCounter(ro1->weight);
-        out1->mask = psMemIncrRefCounter(ro1->mask);
+        if (out1) {
+            out1->image = psMemIncrRefCounter(ro1->image);
+            out1->weight = psMemIncrRefCounter(ro1->weight);
+            out1->mask = psMemIncrRefCounter(ro1->mask);
+        }
         break;
       case PM_SUBTRACTION_MODE_DUAL:
