Index: /branches/pap/ppStack/src/ppStack.h
===================================================================
--- /branches/pap/ppStack/src/ppStack.h	(revision 25829)
+++ /branches/pap/ppStack/src/ppStack.h	(revision 25830)
@@ -84,5 +84,6 @@
                          const psVector *weightings, // Weighting factors for each image
                          const psVector *addVariance, // Additional variance for rejection
-                         bool full                    // Combine full image?
+                         bool full,                   // Combine full image?
+                         const psVector *norm         // Normalisations to apply
     );
 
Index: /branches/pap/ppStack/src/ppStackCombineFinal.c
===================================================================
--- /branches/pap/ppStack/src/ppStackCombineFinal.c	(revision 25829)
+++ /branches/pap/ppStack/src/ppStackCombineFinal.c	(revision 25830)
@@ -11,5 +11,5 @@
 
 bool ppStackCombineFinal(pmReadout *target, ppStackThreadData *stack,
-                         ppStackOptions *options, pmConfig *config, bool full)
+                         ppStackOptions *options, pmConfig *config, bool full, bool normalise)
 {
     psAssert(stack, "Require stack");
@@ -42,4 +42,5 @@
         psArrayAdd(job->args, 1, config);
         PS_ARRAY_ADD_SCALAR(job->args, full, PS_TYPE_U8);
+        PS_ARRAY_ADD_SCALAR(job->args, normalise, PS_TYPE_U8);
         if (!psThreadJobAddPending(job)) {
             psFree(job);
Index: /branches/pap/ppStack/src/ppStackConvolve.c
===================================================================
--- /branches/pap/ppStack/src/ppStackConvolve.c	(revision 25829)
+++ /branches/pap/ppStack/src/ppStackConvolve.c	(revision 25830)
@@ -149,5 +149,4 @@
     psFree(rng);
 
-    psFree(options->norm); options->norm = NULL;
     psFree(options->sourceLists); options->sourceLists = NULL;
     psFree(options->psf); options->psf = NULL;
Index: /branches/pap/ppStack/src/ppStackLoop.c
===================================================================
--- /branches/pap/ppStack/src/ppStackLoop.c	(revision 25829)
+++ /branches/pap/ppStack/src/ppStackLoop.c	(revision 25830)
@@ -97,5 +97,5 @@
     // Final combination
     psTrace("ppStack", 2, "Final stack of convolved images....\n");
-    if (!ppStackCombineFinal(options->outRO, stack, options, config, false)) {
+    if (!ppStackCombineFinal(options->outRO, stack, options, config, false, false)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to perform final combination.");
         psFree(stack);
@@ -132,5 +132,5 @@
         }
         psTrace("ppStack", 2, "Stack of unconvolved images....\n");
-        if (!ppStackCombineFinal(options->unconvRO, stack, options, config, true)) {
+        if (!ppStackCombineFinal(options->unconvRO, stack, options, config, true, true)) {
             psError(PS_ERR_UNKNOWN, false, "Unable to perform unconvolved combination.");
             psFree(stack);
Index: /branches/pap/ppStack/src/ppStackLoop.h
===================================================================
--- /branches/pap/ppStack/src/ppStackLoop.h	(revision 25829)
+++ /branches/pap/ppStack/src/ppStackLoop.h	(revision 25830)
@@ -60,5 +60,6 @@
     ppStackOptions *options,            // Options
     pmConfig *config,                   // Configuration
-    bool full                           // Combine full image?
+    bool full,                          // Combine full image?
+    bool norm                           // Normalise images?
     );
 
Index: /branches/pap/ppStack/src/ppStackReadout.c
===================================================================
--- /branches/pap/ppStack/src/ppStackReadout.c	(revision 25829)
+++ /branches/pap/ppStack/src/ppStackReadout.c	(revision 25830)
@@ -44,4 +44,5 @@
     pmConfig *config = args->data[3];   // Configuration
     bool full = PS_SCALAR_VALUE(args->data[4], U8); // Combine full image?
+    bool normalise = PS_SCALAR_VALUE(args->data[5], U8); // Normalise images?
 
     psVector *mask = options->inputMask; // Mask for inputs
@@ -49,8 +50,8 @@
     psVector *weightings = options->weightings; // Weightings (1/noise^2) for each image
     psVector *addVariance = options->matchChi2; // Additional variance when rejecting
-
+    psVector *norm = normalise ? options->norm : NULL; // Normalisations to apply to images
 
     bool status = ppStackReadoutFinal(config, target, thread->readouts, mask, rejected,
-                                      weightings, addVariance, full); // Status of operation
+                                      weightings, addVariance, full, norm); // Status of operation
 
     thread->busy = false;
@@ -182,5 +183,5 @@
 bool ppStackReadoutFinal(const pmConfig *config, pmReadout *outRO, const psArray *readouts,
                          const psVector *mask, const psArray *rejected, const psVector *weightings,
-                         const psVector *addVariance, bool full)
+                         const psVector *addVariance, bool full, const psVector *norm)
 {
     assert(config);
@@ -252,4 +253,10 @@
         data->reject = rejected ? psMemIncrRefCounter(rejected->data[i]) : NULL;
         stack->data[i] = data;
+
+        if (norm) {
+            float normalise = powf(10.0, -0.4 * norm->data.F32[i]); // Normalisation
+            psBinaryOp(ro->image, ro->image, "*", psScalarAlloc(normalise, PS_TYPE_F32));
+            psBinaryOp(ro->variance, ro->variance, "*", psScalarAlloc(PS_SQR(normalise), PS_TYPE_F32));
+        }
     }
 
Index: /branches/pap/ppStack/src/ppStackThread.c
===================================================================
--- /branches/pap/ppStack/src/ppStackThread.c	(revision 25829)
+++ /branches/pap/ppStack/src/ppStackThread.c	(revision 25830)
@@ -282,5 +282,5 @@
 
     {
-        psThreadTask *task = psThreadTaskAlloc("PPSTACK_FINAL_COMBINE", 5);
+        psThreadTask *task = psThreadTaskAlloc("PPSTACK_FINAL_COMBINE", 6);
         task->function = &ppStackReadoutFinalThread;
         psThreadTaskAdd(task);
