Index: /trunk/psModules/src/imcombine/pmSubtractionSimple.c
===================================================================
--- /trunk/psModules/src/imcombine/pmSubtractionSimple.c	(revision 35716)
+++ /trunk/psModules/src/imcombine/pmSubtractionSimple.c	(revision 35717)
@@ -118,6 +118,10 @@
   //
   // Do convolutions
+  psImage *temp = psImageAlloc(numCols,numRows,PS_TYPE_F32);
   for (int y = 0; y < image1->numRows; y++) {
     for (int x = 0; x < image1->numCols; x++) {
+
+      temp->data.F32[y][x] = 0.0;
+      
       if (convolution_direction == 1) {
 	imageC1->data.F32[y][x] = 0.0;
@@ -139,20 +143,30 @@
       }
       for (int v = -size; v <= size; v++) {
+	if ((y-v >= 0)&&(y-v < numRows)) {
+	  if (convolution_direction == 1) {
+	    temp->data.F32[y][x] += kernelVec->data.F32[v + size] * image1->data.F32[y - v][x];
+	  }
+	  else if (convolution_direction == 2) {
+	    temp->data.F32[y][x] += kernelVec->data.F32[v + size] * image2->data.F32[y - v][x];
+	  }
+	}
+      }
+    }
+  }
+  for (int y = 0; y < image1->numRows; y++) {
+    for (int x = 0; x < image1->numCols; x++) {
 	for (int u = -size; u <= size; u++) {
-	  if ((y-v >= 0)&&(x-u >= 0)&&
-	      (y-v < numRows)&&(x-u < numCols)) {
+	  if ((x-u >= 0)&&(x-u < numCols)) {
 	    if (convolution_direction == 1) {
-	      imageC1->data.F32[y][x] += kernelVec->data.F32[v + size] * kernelVec->data.F32[u + size] *
-		image1->data.F32[y - v][x - u];
+	      imageC1->data.F32[y][x] += kernelVec->data.F32[u + size] * temp->data.F32[y][x - u];
 	    }
 	    else if (convolution_direction == 2) {
-	      imageC2->data.F32[y][x] += kernelVec->data.F32[v + size] * kernelVec->data.F32[u + size] *
-		image2->data.F32[y - v][x - u];
+	      imageC2->data.F32[y][x] += kernelVec->data.F32[u + size] * temp->data.F32[y][x - u];
 	    }
 	  }
 	}
-      }
-    }
-  }
+    }
+  }
+  psFree(temp);
   psFree(kernelVec);
 
