Index: trunk/psLib/src/fits/psFitsScale.c
===================================================================
--- trunk/psLib/src/fits/psFitsScale.c	(revision 16197)
+++ trunk/psLib/src/fits/psFitsScale.c	(revision 16672)
@@ -288,12 +288,19 @@
         for (int y = 0; y < numRows; y++) { \
             for (int x = 0; x < numCols; x++) { \
-                ps##INTYPE value = ((IN)->data.INTYPE[y][x] - zero) * scale; \
-                if (options->fuzz) { \
-                   /* Add random factor [0,1): adds a variance of 1/12, */ \
-                   /* but preserves the expectation value */ \
-                    value += psRandomUniform(rng); \
+                ps##INTYPE value = (IN)->data.INTYPE[y][x]; \
+                if (!isfinite(value)) { \
+                    /* This choice of "max" for non-finite pixels is mainly cosmetic --- it has to be */ \
+                    /* something, and "min" would produce holes in the cores of bright stars. */ \
+                    (OUT)->data.OUTTYPE[y][x] = max; \
+                } else { \
+                    value = (value - zero) * scale; \
+                    if (options->fuzz) { \
+                       /* Add random factor [0,1): adds a variance of 1/12, */ \
+                       /* but preserves the expectation value */ \
+                        value += psRandomUniform(rng); \
+                    } \
+                    /* Check for underflow and overflow */ \
+                    (OUT)->data.OUTTYPE[y][x] = (value < min ? min : (value > max ? max : value)); \
                 } \
-                /* Check for underflow and overflow */ \
-                (OUT)->data.OUTTYPE[y][x] = (value < min ? min : (value > max ? max : value)); \
             } \
         } \
