Index: trunk/ppArith/src/ppArithArguments.c
===================================================================
--- trunk/ppArith/src/ppArithArguments.c	(revision 15574)
+++ trunk/ppArith/src/ppArithArguments.c	(revision 15597)
@@ -72,4 +72,5 @@
 
     bool isMask = psMetadataLookupBool(NULL, arguments, "-mask"); // Are we dealing with masks?
+    psMetadataAddBool(config->arguments, PS_LIST_TAIL, "MASK", 0, "Produce a mask image?", true);
     const char *inFilerule = isMask ? "PPARITH.INPUT.MASK" : "PPARITH.INPUT.IMAGE"; // Input file rule
     const char *outFilerule = isMask ? "PPARITH.OUTPUT.MASK" : "PPARITH.OUTPUT.IMAGE"; // Output file rule
Index: trunk/ppArith/src/ppArithReadout.c
===================================================================
--- trunk/ppArith/src/ppArithReadout.c	(revision 15574)
+++ trunk/ppArith/src/ppArithReadout.c	(revision 15597)
@@ -17,14 +17,26 @@
     PS_ASSERT_PTR_NON_NULL(view, false);
 
-    psImage *inImage1 = input1->image;  // Input image 1
-    psImage *outImage = output->image;  // Output image
-    if (!inImage1) {
+    bool mdok;                          // Status of MD lookup
+    bool isMask = psMetadataLookupBool(&mdok, config->arguments, "MASK");
+
+    psImage *inImage1;  // Input image 1
+    psImage *outImage;  // Output image
+    if (isMask) {
         inImage1 = input1->mask;
         outImage = output->mask;
         if (!outImage) {
-            output->image = outImage = psImageAlloc(inImage1->numCols, inImage1->numRows, PS_TYPE_MASK);
+            output->mask = outImage = psImageAlloc(inImage1->numCols, inImage1->numRows, PS_TYPE_MASK);
         }
-    } else if (!outImage) {
-        output->image = outImage = psImageAlloc(inImage1->numCols, inImage1->numRows, PS_TYPE_F32);
+        if (!output->image) {
+            // Generate an image to serve as a backdrop for the mask when doing statistics
+            output->image = psImageAlloc(inImage1->numCols, inImage1->numRows, PS_TYPE_F32);
+            psImageInit(output->image, 1.0);
+        }
+    } else {
+        inImage1 = input1->image;
+        outImage = output->image;
+        if (!outImage) {
+            output->mask = outImage = psImageAlloc(inImage1->numCols, inImage1->numRows, PS_TYPE_MASK);
+        }
     }
     PS_ASSERT_IMAGE_NON_NULL(inImage1, false);
@@ -32,8 +44,5 @@
     psImage *inImage2 = NULL;           // Input image 2
     if (input2) {
-        inImage2 = input2->image;
-        if (!inImage2) {
-            inImage2 = input2->mask;
-        }
+        inImage2 = isMask ? input2->mask : input2->image;
         PS_ASSERT_IMAGE_NON_NULL(inImage2, false);
         PS_ASSERT_IMAGES_SIZE_EQUAL(inImage2, inImage1, false);
