Index: trunk/ppSub/src/ppSubMatchPSFs.c
===================================================================
--- trunk/ppSub/src/ppSubMatchPSFs.c	(revision 29937)
+++ trunk/ppSub/src/ppSubMatchPSFs.c	(revision 30619)
@@ -78,5 +78,4 @@
         return true;
     }
-
     psFree(view);
 
@@ -127,4 +126,5 @@
     if (!inSourceRO || !refSourceRO) {
         psError(PPSUB_ERR_DATA, false, "Unable to scale kernel, since no sources were provided.");
+        psFree(view);
         return false;
     }
@@ -164,24 +164,22 @@
 
     // is auto-scaling needed?
-    if (!psMetadataLookupBool(NULL, recipe, "SCALE")) {
-        // No scaling requested
-        psFree(view);
-        return true;
-    }
-
+    bool scale = psMetadataLookupBool(NULL, recipe, "SCALE");
     float scaleRef = psMetadataLookupF32(NULL, recipe, "SCALE.REF"); // Reference for scaling
     float scaleMin = psMetadataLookupF32(NULL, recipe, "SCALE.MIN"); // Minimum for scaling
     float scaleMax = psMetadataLookupF32(NULL, recipe, "SCALE.MAX"); // Maximum for scaling
-    if (!isfinite(scaleRef) || !isfinite(scaleMin) || !isfinite(scaleMax)) {
+
+    if (scale && (!isfinite(scaleRef) || !isfinite(scaleMin) || !isfinite(scaleMax))) {
         psError(PPSUB_ERR_ARGUMENTS, false,
-                "Scale parameters (SCALE.REF=%f, SCALE.MIN=%f, SCALE.MAX=%f) not set in recipe.",
+                "auto-scale selected but scale parameters (SCALE.REF=%f, SCALE.MIN=%f, SCALE.MAX=%f) not set in recipe.",
                 scaleRef, scaleMin, scaleMax);
         return false;
     }
 
-    if (!pmSubtractionParamsScale(kernelSize, stampSize, kernelWidths, scaleRef, scaleMin, scaleMax)) {
-        psError(PPSUB_ERR_DATA, false, "Unable to scale parameters.");
-        return false;
-    }
+    pmSubtractionParamScaleOptions(scale, scaleRef, scaleMin, scaleMax);
+
+    // if (!pmSubtractionParamsScale(kernelSize, stampSize, kernelWidths)) {
+    //     psError(PPSUB_ERR_DATA, false, "Unable to scale parameters.");
+    //     return false;
+    // }
 
     return true;
@@ -221,4 +219,5 @@
         pmCell *cell = pmFPAfileThisCell(config->files, view, "PPSUB.INPUT.CONV"); // Cell for convolved input
         inConv = pmReadoutAlloc(cell);
+	psFree(inConv);
     }
     pmReadout *refConv = pmFPAfileThisReadout(config->files, view, "PPSUB.REF.CONV"); // Reference convolved
@@ -226,4 +225,5 @@
         pmCell *cell = pmFPAfileThisCell(config->files, view, "PPSUB.REF.CONV"); // Cell for convolved ref.
         refConv = pmReadoutAlloc(cell);
+	psFree(refConv);
     }
 
@@ -380,8 +380,12 @@
 
     if (inRO->covariance) {
-        psImageCovarianceTruncate(inRO->covariance, COVAR_FRAC);
+        psKernel *truncated = psImageCovarianceTruncate(inRO->covariance, COVAR_FRAC);
+        psFree(inRO->covariance);
+	inRO->covariance = truncated;
     }
     if (refRO->covariance) {
-        psImageCovarianceTruncate(refRO->covariance, COVAR_FRAC);
+        psKernel *truncated = psImageCovarianceTruncate(refRO->covariance, COVAR_FRAC);
+        psFree(refRO->covariance);
+	refRO->covariance = truncated;
     }
 
@@ -494,8 +498,12 @@
 
     if (inConv->covariance) {
-        psImageCovarianceTruncate(inConv->covariance, COVAR_FRAC);
+        psKernel *truncated = psImageCovarianceTruncate(inConv->covariance, COVAR_FRAC);
+        psFree(inConv->covariance);
+	inConv->covariance = truncated;
     }
     if (refConv->covariance) {
-        psImageCovarianceTruncate(refConv->covariance, COVAR_FRAC);
+        psKernel *truncated = psImageCovarianceTruncate(refConv->covariance, COVAR_FRAC);
+        psFree(refConv->covariance);
+	refConv->covariance = truncated;
     }
 
