Index: /trunk/ppSub/src/ppSubArguments.c
===================================================================
--- /trunk/ppSub/src/ppSubArguments.c	(revision 17367)
+++ /trunk/ppSub/src/ppSubArguments.c	(revision 17368)
@@ -212,4 +212,6 @@
     psMetadataAddS32(arguments, PS_LIST_TAIL, "-opt-order", 0, "Maximum order for optimum kernel search", -1);
     psMetadataAddBool(arguments, PS_LIST_TAIL, "-dual", 0, "Dual convolution", false);
+    psMetadataAddBool(arguments, PS_LIST_TAIL, "-renorm", 0, "Renormalise weights?", false);
+    psMetadataAddS32(arguments, PS_LIST_TAIL, "-renorm-width", 0, "Renormalisation width", 0);
 
     if (argc == 1 || !psArgumentParse(arguments, &argc, argv) || argc != 4) {
@@ -291,4 +293,9 @@
                       psMetadataLookupBool(NULL, arguments, "-dual"));
 
+    if (psMetadataLookupBool(NULL, arguments, "-renorm") || psMetadataLookupBool(NULL, recipe, "RENORM")) {
+        psMetadataAddBool(config->arguments, PS_LIST_TAIL, "RENORM", 0, "Renormalise weights?", true);
+        VALUE_ARG_RECIPE_INT("-renorm-width", "RENORM.WIDTH", S32, 0);
+    }
+
     // Translate the kernel type
     psString type = psMetadataLookupStr(NULL, arguments, "-type"); // Name of kernel type
Index: /trunk/ppSub/src/ppSubReadout.c
===================================================================
--- /trunk/ppSub/src/ppSubReadout.c	(revision 17367)
+++ /trunk/ppSub/src/ppSubReadout.c	(revision 17368)
@@ -65,4 +65,6 @@
     int optOrder = psMetadataLookupS32(&mdok, config->arguments, "OPTIMUM.ORDER"); // Order for search
     bool dual = psMetadataLookupBool(&mdok, config->arguments, "DUAL"); // Dual convolution?
+    bool renorm = psMetadataLookupBool(&mdok, config->arguments, "RENORM"); // Renormalise weights?
+    int renormWidth = psMetadataLookupS32(&mdok, config->arguments, "RENORM.WIDTH"); // Width for renormalise
 
     pmSubtractionMode mode = dual ? PM_SUBTRACTION_MODE_DUAL : PM_SUBTRACTION_MODE_UNSURE; // Subtraction mode
@@ -188,4 +190,14 @@
     }
 
+    if (renorm) {
+        psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0); // Random number generator
+        if (!pmReadoutWeightRenorm(outRO, maskBlank, PS_STAT_ROBUST_MEDIAN, PS_STAT_ROBUST_STDEV,
+                                   renormWidth, rng)) {
+            psError(PS_ERR_UNKNOWN, false, "Unable to renormalise weights for photometry.");
+            psFree(outRO);
+            return false;
+        }
+    }
+
     if (psMetadataLookupBool(NULL, config->arguments, "PHOTOMETRY")) {
         pmFPAfile *photFile = psMetadataLookupPtr(NULL, config->files, "PSPHOT.INPUT");
