Index: trunk/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtraction.c	(revision 17370)
+++ trunk/psModules/src/imcombine/pmSubtraction.c	(revision 17383)
@@ -4,6 +4,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.85 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2008-04-07 22:46:39 $
+ *  @version $Revision: 1.86 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2008-04-08 03:03:19 $
  *
  *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -637,15 +637,29 @@
                            const pmSubtractionKernels *kernels, bool doBG, bool useFFT)
 {
-    if (kernels->mode != PM_SUBTRACTION_MODE_2) {
+    int numCols = 0, numRows = 0;       // Image dimensions
+    int x0 = 0, y0 = 0;                 // Image offset
+    if (kernels->mode == PM_SUBTRACTION_MODE_1 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
         PM_ASSERT_READOUT_NON_NULL(out1, false);
-    }
-    if (kernels->mode != PM_SUBTRACTION_MODE_1) {
+        PM_ASSERT_READOUT_NON_NULL(ro1, false);
+        PM_ASSERT_READOUT_IMAGE(ro1, false);
+        numCols = ro1->image->numCols;
+        numRows = ro1->image->numRows;
+        x0 = ro1->col0;
+        y0 = ro1->row0;
+    }
+    if (kernels->mode != PM_SUBTRACTION_MODE_2 || kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
         PM_ASSERT_READOUT_NON_NULL(out2, false);
-    }
-    PM_ASSERT_READOUT_NON_NULL(ro1, false);
-    PM_ASSERT_READOUT_NON_NULL(ro2, false);
-    PM_ASSERT_READOUT_IMAGE(ro1, false);
-    PM_ASSERT_READOUT_IMAGE(ro2, false);
-    PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false);
+        PM_ASSERT_READOUT_NON_NULL(ro2, false);
+        PM_ASSERT_READOUT_IMAGE(ro2, false);
+        if (numCols != 0 && numRows != 0) {
+            numCols = ro1->image->numCols;
+            numRows = ro1->image->numRows;
+            x0 = ro1->col0;
+            y0 = ro1->row0;
+        }
+    }
+    if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
+        PS_ASSERT_IMAGES_SIZE_EQUAL(ro1->image, ro2->image, false);
+    }
     PM_ASSERT_SUBTRACTION_KERNELS_NON_NULL(kernels, false);
     PM_ASSERT_SUBTRACTION_KERNELS_SOLUTION(kernels, false);
@@ -653,5 +667,5 @@
         PS_ASSERT_IMAGE_NON_NULL(subMask, false);
         PS_ASSERT_IMAGE_TYPE(subMask, PS_TYPE_MASK, false);
-        PS_ASSERT_IMAGES_SIZE_EQUAL(subMask, ro1->image, false);
+        PS_ASSERT_IMAGE_SIZE(subMask, numCols, numRows, false);
     }
     if (region && psRegionIsNaN(*region)) {
@@ -663,8 +677,14 @@
 
     // Inputs
-    psImage *image1 = ro1->image, *weight1 = ro1->weight; // Image and weight map from input 1
-    psImage *image2 = ro2->image, *weight2 = ro2->weight; // Image and weight map from input 2
-    int numCols = image1->numCols, numRows = image1->numRows; // Image dimensions
-    int x0 = image1->col0, y0 = image1->row0; // Image offset
+    psImage *image1 = NULL, *weight1 = NULL; // Image and weight map from input 1
+    if (ro1) {
+        image1 = ro1->image;
+        weight1 = ro1->weight;
+    }
+    psImage *image2 = NULL, *weight2 = NULL; // Image and weight map from input 2
+    if (ro2) {
+        image2 = ro2->image;
+        weight2 = ro2->weight;
+    }
 
     // Outputs
