Index: branches/pap/ppStack/src/ppStackReadout.c
===================================================================
--- branches/pap/ppStack/src/ppStackReadout.c	(revision 25821)
+++ 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));
+        }
     }
 
