Index: /branches/eam_branch_20081230/ppStats/src/ppStatsReadout.c
===================================================================
--- /branches/eam_branch_20081230/ppStats/src/ppStatsReadout.c	(revision 21141)
+++ /branches/eam_branch_20081230/ppStats/src/ppStatsReadout.c	(revision 21142)
@@ -64,7 +64,6 @@
         psVector *sampleValues = psVectorAlloc(numSamples, PS_TYPE_F32); // Vector of samples
         psVector *sampleMask = psVectorAlloc(numSamples, PS_TYPE_VECTOR_MASK);  // Corresponding mask
-        if (!mask) {
-            psVectorInit(sampleMask, 0);
-        }
+	psVectorInit(sampleMask, 0);
+
         for (int i = 0; i < numSamples; i++) {
             int j = i * sampleSpace;
@@ -72,13 +71,23 @@
             int x = j % image->numCols;
             sampleValues->data.F32[i] = image->data.F32[y][x];
-            if ((!mask || !(mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & data->maskVal)) && !isfinite(sampleValues->data.F32[i])) {
-                if (!warnNonFinite) {
-                    psWarning("Unmasked non-finite value detected at %d,%d; suppressing further warnings", x, y);
-                    warnNonFinite = true;
-                }
+
+	    // ignore the sampleMask if there is no input mask
+	    if (!mask) continue;
+
+	    // if this pixel is masked, set the sample mask
+            if (mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & data->maskVal) {
+		sampleMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1;
+		continue;
+	    }
+
+	    // mask any unmasked NAN/INF values
+            if (!isfinite(sampleValues->data.F32[i])) {
+		// warn for the first unmasked NAN/INF value
+		if (!warnNonFinite) {
+		    psWarning("Unmasked non-finite value detected at %d,%d; suppressing further warnings", x, y);
+		    warnNonFinite = true;
+		}
                 sampleMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1;
-            } else if (mask) {
-	      sampleMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = 1;
-            }
+            } 
         }
         if (!psVectorStats(data->stats, sampleValues, NULL, sampleMask, 1)) {
