Index: trunk/pstamp/src/ppstampArguments.c
===================================================================
--- trunk/pstamp/src/ppstampArguments.c	(revision 33502)
+++ trunk/pstamp/src/ppstampArguments.c	(revision 33504)
@@ -62,6 +62,13 @@
     *pOptions = options;
 
-    if (!pstampGetROI(&options->roip, &argc, argv, &gotCenter, &gotRange)) {
-        usage();
+    if ((argnum = psArgumentGet(argc, argv, "-wholefile"))) {
+        psArgumentRemove(argnum, &argc, argv);
+        gotCenter = true;
+        gotRange = true;
+        options->wholeFile = true;
+    } else {
+        if (!pstampGetROI(&options->roip, &argc, argv, &gotCenter, &gotRange)) {
+            usage();
+        }
     }
 
@@ -105,6 +112,16 @@
     
     if ((argnum = psArgumentGet(argc, argv, "-no_censor_masked"))) {
+        // this is the default. This is for compatiability
         psArgumentRemove(argnum, &argc, argv);
         options->censorMasked = false;
+    }
+    if ((argnum = psArgumentGet(argc, argv, "-censor_masked"))) {
+        // default changed to not censor allow it to be changed back to true
+        psArgumentRemove(argnum, &argc, argv);
+        options->censorMasked = true;
+    }
+    if ((argnum = psArgumentGet(argc, argv, "-nocompress"))) {
+        psArgumentRemove(argnum, &argc, argv);
+        options->nocompress = true;
     }
 
Index: trunk/pstamp/src/ppstampMakeStamp.c
===================================================================
--- trunk/pstamp/src/ppstampMakeStamp.c	(revision 33502)
+++ trunk/pstamp/src/ppstampMakeStamp.c	(revision 33504)
@@ -233,10 +233,5 @@
     int status = false;
 
-    pmFPAfile *output;
-    if (!options->stage || (strcmp(options->stage, "diff") != 0)) {
-        output = psMetadataLookupPtr(NULL, config->files, "PPSTAMP.OUTPUT");
-    } else {
-        output = psMetadataLookupPtr(NULL, config->files, "PPSTAMP.OUTPUT.DIFF");
-    }
+    pmFPAfile *output = psMetadataLookupPtr(NULL, config->files, options->outputFileRule);
     if (!output) {
         psError(PS_ERR_UNKNOWN, false, "Can't find output data\n");
@@ -529,7 +524,14 @@
         // If no chip name was specified, select this one (the first one that had data)
         if ((options->chipName == NULL) || !strcasecmp(chipName, options->chipName)) {
-            psLogMsg("ppstampMakeStamp", 2, "Center on chip: %s\n", chipName);
-            center->chip->x = options->roip.centerX;
-            center->chip->y = options->roip.centerY;
+            if (options->chipName) {
+                psLogMsg("ppstampMakeStamp", 2, "Center on chip: %s\n", chipName);
+            }
+            if (options->wholeFile) {
+                center->chip->x = (chipBounds->x1 + chipBounds->x0 + 1) / 2;
+                center->chip->y = (chipBounds->y1 + chipBounds->y0 + 1) / 2;
+            } else {
+                center->chip->x = options->roip.centerX;
+                center->chip->y = options->roip.centerY;
+            }
             center->chip->xErr = 0;
             center->chip->yErr = 0;
@@ -543,25 +545,28 @@
             findBoundingBox(options, input->fpa, chip, center);
         } else {
-            int width  = options->roip.dX;
-            int height = options->roip.dY;
-            if (width > 5000) {
-                fprintf(stderr, "requested width %d too large reducing to 5000\n", width);
-                width = 5000;
+            if (options->wholeFile) { 
+                options->roi = *chipBounds;
+            } else {
+                int width  = options->roip.dX;
+                int height = options->roip.dY;
+                if (width > 7000) {
+                    fprintf(stderr, "requested width %d too large reducing to 7000\n", width);
+                    width = 7000;
+                }
+                if (height > 7000) {
+                    fprintf(stderr, "requested height %d too large reducing to 7000\n", height);
+                    height = 7000;
+                }
+
+                // calculate the ROI in chip coordinates
+                options->roi.x0 = center->chip->x - width / 2;
+                options->roi.x1 = options->roi.x0 + width;
+                options->roi.y0 = center->chip->y - height / 2;
+                options->roi.y1 = options->roi.y0 + height;
             }
-            if (height > 5000) {
-                fprintf(stderr, "requested height %d too large reducing to 5000\n", height);
-                height = 5000;
-            }
-
-            // calculate the ROI in chip coordinates
-            options->roi.x0 = center->chip->x - width / 2;
-            options->roi.x1 = options->roi.x0 + width;
-            options->roi.y0 = center->chip->y - height / 2;
-            options->roi.y1 = options->roi.y0 + height;
-        }
-
-
-        if (regionContainsRegion(chipBounds, &options->roi)) {
-            // returnval = findCell(view, options, input, center, ppCell);
+        }
+
+
+        if (options->wholeFile || regionContainsRegion(chipBounds, &options->roi)) {
             psLogMsg("ppstampMakeStamp", 2, "ROI contained on: %s\n", chipName);
             returnval = PPSTAMP_ON;
Index: trunk/pstamp/src/ppstampOptions.c
===================================================================
--- trunk/pstamp/src/ppstampOptions.c	(revision 33502)
+++ trunk/pstamp/src/ppstampOptions.c	(revision 33504)
@@ -30,5 +30,9 @@
     options->cellName  = NULL;
     options->stage  = NULL;
-    options->censorMasked = true;
+    options->censorMasked = false;
+    options->writeJPEG = false;
+    options->nocompress = false;
+    options->wholeFile = false;
+    options->outputFileRule = NULL;
 
     return options;
Index: trunk/pstamp/src/ppstampOptions.h
===================================================================
--- trunk/pstamp/src/ppstampOptions.h	(revision 33502)
+++ trunk/pstamp/src/ppstampOptions.h	(revision 33504)
@@ -8,13 +8,16 @@
     // input arguments
     pstampROI   roip;
+    bool        wholeFile;
     psString    chipName;
     psString    cellName;
     psString    stage;
+    bool        censorMasked;
+    bool        writeJPEG;
+    bool        nocompress;
     //
     // Calculated Values
     //
+    psString    outputFileRule;
     psRegion    roi;            // roi in chip coordinates
-    bool        censorMasked;
-    bool        writeJPEG;
 } ppstampOptions;
 
Index: trunk/pstamp/src/ppstampParseCamera.c
===================================================================
--- trunk/pstamp/src/ppstampParseCamera.c	(revision 33502)
+++ trunk/pstamp/src/ppstampParseCamera.c	(revision 33504)
@@ -8,14 +8,21 @@
 
 // Set up the ppstamp output Image file
-bool setupOutput(pmConfig *config, pmFPAfile *input, psString stage, bool doMask, bool doWeight, pmFPAfile **pOutput)
+bool setupOutput(pmConfig *config, pmFPAfile *input, ppstampOptions *options, bool doMask, bool doWeight, pmFPAfile **pOutput)
 {
-    pmFPAfile *output;
-    
-    if (!stage || (strcmp(stage, "diff") != 0)) {
-        output = pmFPAfileDefineSkycell(config, NULL, "PPSTAMP.OUTPUT");
+    if (!options->stage || (strcmp(options->stage, "diff") != 0)) {
+        if (options->nocompress) {
+            options->outputFileRule = "PPSTAMP.OUTPUT.NOCOMP";
+        } else {
+            options->outputFileRule = "PPSTAMP.OUTPUT";
+        }
     } else {
         // need special filerule for diff stage image to allow for negative values
-        output = pmFPAfileDefineSkycell(config, NULL, "PPSTAMP.OUTPUT.DIFF");
+        if (options->nocompress) {
+            options->outputFileRule = "PPSTAMP.OUTPUT.DIFF.NOCOMP";
+        } else {
+            options->outputFileRule = "PPSTAMP.OUTPUT.DIFF";
+        }
     }
+    pmFPAfile *output = pmFPAfileDefineSkycell(config, NULL, options->outputFileRule);
     if (!output) {
         psError(PS_ERR_UNKNOWN, false, "Unable to setup output.");
@@ -27,12 +34,23 @@
 
     if (doMask) {
-        pmFPAfile *outMask = pmFPAfileDefineSkycell(config, output->fpa, "PPSTAMP.OUTPUT.MASK");
+        char *rule;
+        if (options->nocompress) {
+            rule =  "PPSTAMP.OUTPUT.MASK.NOCOMP";
+        } else {
+            rule =  "PPSTAMP.OUTPUT.MASK";
+        }
+        pmFPAfile *outMask = pmFPAfileDefineSkycell(config, output->fpa, rule);
         outMask->save = true;
     }
     if (doWeight) {
-        pmFPAfile *outWeight = pmFPAfileDefineSkycell(config, output->fpa, "PPSTAMP.OUTPUT.VARIANCE");
+        char *rule;
+        if (options->nocompress) {
+            rule =  "PPSTAMP.OUTPUT.VARIANCE.NOCOMP";
+        } else {
+            rule =  "PPSTAMP.OUTPUT.VARIANCE";
+        }
+        pmFPAfile *outWeight = pmFPAfileDefineSkycell(config, output->fpa, rule);
         outWeight->save = true;
     }
-
 
     return true;
@@ -97,5 +115,5 @@
     // Set up the output target
     pmFPAfile *output;
-    if (!setupOutput(config, input, options->stage, doMask, doWeight, &output)) {
+    if (!setupOutput(config, input, options, doMask, doWeight, &output)) {
         psError(PS_ERR_UNKNOWN, false, "Unable to setup output.");
         return false;
@@ -113,14 +131,6 @@
 
     if (options->writeJPEG) {
-        char *filerule;
-        // If stage is chip flip the X axis otherwise don't flip.
-        // XXX: is this the right thing to do?
-        // Shouldn't the JPEG match the stamp even for chip stage?
-        if (!options->stage || strcmp(options->stage, "chip")) {
-            filerule = "PPSTAMP.OUTPUT.JPEG";
-        } else {
-            filerule = "PPSTAMP.OUTPUT.JPEG.FLIP";
-        }
-        pmFPAfile *jpg = pmFPAfileDefineOutput(config, output->fpa, filerule);
+        char *filerule = "PPSTAMP.OUTPUT.JPEG";
+        pmFPAfile *jpg = pmFPAfileDefineSkycell(config, output->fpa, filerule);
         if (!jpg) {
             psError(PS_ERR_IO, false, "Unable to generate new file from %s", filerule);
