Index: trunk/psModules/src/imcombine/pmSubtractionKernels.c
===================================================================
--- trunk/psModules/src/imcombine/pmSubtractionKernels.c	(revision 30622)
+++ trunk/psModules/src/imcombine/pmSubtractionKernels.c	(revision 35771)
@@ -65,4 +65,25 @@
     return result;
 }
+
+// Generate 1D convolution kernel for SIMPLE
+psVector *pmSubtractionKernelSIMPLE(float sigma, // Gaussian width
+				    int order,   // Unused polynomial order
+				    int size     // Kernel half-size
+				    )
+{
+  int fullSize = 2 * size + 1;    // Full size of the kernel
+  psVector *kernel = psVectorAlloc(fullSize, PS_TYPE_F32); // Kernel to return
+  float expNorm = -0.5 / PS_SQR(sigma); // Normalization for exponential
+  float norm    = 1.0 / sqrtf(2.0 * M_PI * sigma * sigma); // Correct Normalization for Gaussian
+  if (sigma < 0.1) {
+    kernel->data.F32[size] = 1.0;
+    return(kernel);
+  }
+  for (int i = 0, x = -size; x <= size; i++,x++) {
+    kernel->data.F32[i] = norm * expf(expNorm * PS_SQR(x));
+  }
+  return(kernel);
+}
+
 
 // Generate 1D convolution kernel for ISIS
@@ -771,4 +792,11 @@
         preCalc->poly    = NULL;
         break;
+    case PM_SUBTRACTION_KERNEL_SIMPLE:
+      preCalc->xKernel = pmSubtractionKernelSIMPLE(sigma,uOrder,size);
+      preCalc->yKernel = pmSubtractionKernelSIMPLE(sigma,vOrder,size);
+      preCalc->uCoords = NULL;
+      preCalc->vCoords = NULL;
+      preCalc->poly    = NULL;
+      break;
       case PM_SUBTRACTION_KERNEL_RINGS:
         // the RINGS kernel uses the uCoords, vCoords, and poly elements of the structure
@@ -1230,4 +1258,6 @@
       case PM_SUBTRACTION_KERNEL_RINGS:
         return pmSubtractionKernelsRINGS(size, spatialOrder, inner, ringsOrder, penalty, bounds, mode);
+    case PM_SUBTRACTION_KERNEL_SIMPLE:
+      return pmSubtractionKernelsISIS(size,spatialOrder,fwhms,orders,penalty,bounds,mode);
       default:
         psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unknown kernel type: %x", type);
@@ -1298,4 +1328,5 @@
       case PM_SUBTRACTION_KERNEL_HERM:
       case PM_SUBTRACTION_KERNEL_DECONV_HERM:
+    case PM_SUBTRACTION_KERNEL_SIMPLE:
         PARSE_STRING_NUMBER(size, ptr, ',', parseStringInt);
 
@@ -1379,5 +1410,7 @@
         return PM_SUBTRACTION_KERNEL_RINGS;
     }
-
+    if (strncasecmp(type, "SIMPLE", nameLength) == 0) {
+      return PM_SUBTRACTION_KERNEL_SIMPLE;
+    }
     psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unrecognised kernel type: %s", type);
     return PM_SUBTRACTION_KERNEL_NONE;
@@ -1436,4 +1469,7 @@
 	break;
 
+    case PM_SUBTRACTION_KERNEL_SIMPLE:
+      psStringAppend(&kernels->description, "SIMPLE(%d,%s)",kernels->size,params);
+      break;
       default:
         psAbort("unknown kernel");
