Index: /branches/pap_branch_080117/psLib/src/fits/psFitsScale.c
===================================================================
--- /branches/pap_branch_080117/psLib/src/fits/psFitsScale.c	(revision 16157)
+++ /branches/pap_branch_080117/psLib/src/fits/psFitsScale.c	(revision 16158)
@@ -319,18 +319,16 @@
         ps##INTYPE scale = 1.0 / bscale; \
         ps##INTYPE zero = bzero; \
-        if (options->fuzz) { \
-            /* Add random factor [0,1): adds a variance of 1/12, but preserves the expectation value */ \
-            for (int y = 0; y < numRows; y++) { \
-                for (int x = 0; x < numCols; x++) { \
-                    ps##INTYPE random = psRandomUniform(rng); \
-                    (OUT)->data.OUTTYPE[y][x] = ((IN)->data.INTYPE[y][x] - zero) * scale + random; \
+        ps##INTYPE min = - (1 << (options->bitpix - 1)); \
+        ps##INTYPE max = (1 << (options->bitpix - 1)) - 1; \
+        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); \
                 } \
-            } \
-        } else { \
-            /* No random factor added: data preserved, but expectation value is not */ \
-            for (int y = 0; y < numRows; y++) { \
-                for (int x = 0; x < numCols; x++) { \
-                    (OUT)->data.OUTTYPE[y][x] = ((IN)->data.INTYPE[y][x] - zero) * scale; \
-                } \
+                /* Check for underflow and overflow */ \
+                (OUT)->data.OUTTYPE[y][x] = (value < min ? min : (value > max ? max : value)); \
             } \
         } \
