Index: trunk/psModules/src/imcombine/pmSubtraction.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtraction.c	(revision 15756)
+++ trunk/psModules/src/imcombine/pmSubtraction.c	(revision 15809)
@@ -4,6 +4,6 @@
  *  @author GLG, MHPCC
  *
- *  @version $Revision: 1.74 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2007-12-07 01:57:15 $
+ *  @version $Revision: 1.75 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2007-12-13 21:32:44 $
  *
  *  Copyright 2004-2007 Institute for Astronomy, University of Hawaii
@@ -165,9 +165,6 @@
     }
 
-    if (!wantDual) {
-        // Put in the normalisation component
-        kernel->kernel[0][0] += p_pmSubtractionSolutionNorm(kernels);
-    }
-
+    // Put in the normalisation component
+    kernel->kernel[0][0] += (wantDual ? 1.0 : p_pmSubtractionSolutionNorm(kernels));
 
     return kernel;
@@ -279,8 +276,9 @@
                                   float background, // Background value to apply
                                   psRegion region, // Region to convolve
-                                  bool useFFT  // Use FFT to convolve?
+                                  bool useFFT,  // Use FFT to convolve?
+                                  bool wantDual // Want the dual convolution?
     )
 {
-    *kernelImage = solvedKernel(*kernelImage, kernels, polyValues, false);
+    *kernelImage = solvedKernel(*kernelImage, kernels, polyValues, wantDual);
     if (weight) {
         *kernelWeight = varianceKernel(*kernelWeight, *kernelImage);
@@ -559,4 +557,6 @@
                 stamp->x = 0;
                 stamp->y = 0;
+                stamp->xNorm = NAN;
+                stamp->yNorm = NAN;
                 stamp->status = PM_SUBTRACTION_STAMP_REJECTED;
                 // Recalculate convolutions
@@ -568,4 +568,11 @@
                 psFree(stamp->weight);
                 stamp->image1 = stamp->image2 = stamp->weight = NULL;
+                psFree(stamp->matrix1);
+                psFree(stamp->matrix2);
+                psFree(stamp->matrixX);
+                stamp->matrix1 = stamp->matrix2 = stamp->matrixX = NULL;
+                psFree(stamp->vector1);
+                psFree(stamp->vector2);
+                stamp->vector1 = stamp->vector2 = NULL;
             } else {
                 numGood++;
@@ -651,5 +658,5 @@
     PM_ASSERT_SUBTRACTION_KERNELS_NON_NULL(kernels, false);
     PM_ASSERT_SUBTRACTION_KERNELS_SOLUTION(kernels, false);
-    if (kernels->mode != PM_SUBTRACTION_MODE_1) {
+    if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
         PS_ASSERT_PTR_NON_NULL(out2, false);
         PS_ASSERT_PTR_NON_NULL(ro2, false);
@@ -812,9 +819,9 @@
 
             convolveRegion(convImage1, convWeight1, &kernelImage, &kernelWeight, image, weight,
-                           subMask, maskSource, kernels, polyValues, background, subRegion, useFFT);
+                           subMask, maskSource, kernels, polyValues, background, subRegion, useFFT, false);
 
             if (kernels->mode == PM_SUBTRACTION_MODE_DUAL) {
                 convolveRegion(convImage2, convWeight2, &kernelImage, &kernelWeight, ro2->image, ro2->weight,
-                               subMask, maskSource, kernels, polyValues, background, subRegion, useFFT);
+                               subMask, maskSource, kernels, polyValues, background, subRegion, useFFT, true);
             }
 
