Index: trunk/ppStats/src/ppStatsSetup.c
===================================================================
--- trunk/ppStats/src/ppStatsSetup.c	(revision 7924)
+++ trunk/ppStats/src/ppStatsSetup.c	(revision 7959)
@@ -13,5 +13,5 @@
     printf("Return headers, concepts and/or image statistics.\n\n"
            "Usage:\n"
-           "\t%s INPUT.fits OUTPUT_NAME\n"
+           "\t%s INPUT.fits [OUTPUT_NAME]\n"
            "\n", config->argv[0]);
     psArgumentHelp(config->arguments);
@@ -154,5 +154,6 @@
         usageAndDie(config);
     }
-    if (!psArgumentParse(arguments, config->argc, config->argv) || *config->argc < 2) {
+    if (!psArgumentParse(arguments, config->argc, config->argv) ||
+        (*config->argc != 2 && *config->argc != 3)) {
         printf("Unable to parse command-line arguments.\n\n");
         usageAndDie(config);
@@ -162,5 +163,8 @@
     ppStatsData *data = ppStatsDataAlloc(); // The data
     data->inName = config->argv[1];
-    data->outName = config->argv[2];
+    // Output filename is optional
+    if (*config->argc == 3) {
+        data->outName = config->argv[2];
+    }
 
     listFromArguments(arguments, "Chip", "-chip", data->chips);
@@ -218,10 +222,13 @@
 
     // Open the output file
-    data->outFile = fopen(data->outName, "w");
-    if (!data->outFile) {
-        psError(PS_ERR_IO, false, "Unable to open output file %s\n", data->outName);
-        goto die;
-    }
-
+    if (data->outName && strlen(data->outName) > 0) {
+        data->outFile = fopen(data->outName, "w");
+        if (!data->outFile) {
+            psError(PS_ERR_IO, false, "Unable to open output file %s\n", data->outName);
+            goto die;
+        }
+    } else {
+        data->outFile = stdout;
+    }
 
     // Determine recipe parameters
