diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/ISAACRandom.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/ISAACRandom.java
index 7e448d3..80e1c1e 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/ISAACRandom.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/ISAACRandom.java
@@ -189,9 +189,7 @@
         isaacA = 0;
         isaacB = 0;
         isaacC = 0;
-        for (int j = 0; j < arr.length; j++) {
-            arr[j] = GLD_RATIO;
-        }
+        Arrays.fill(arr, GLD_RATIO);
         for (int j = 0; j < 4; j++) {
             shuffle();
         }
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MersenneTwister.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MersenneTwister.java
index 7d30440..2bcaa29 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MersenneTwister.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source32/MersenneTwister.java
@@ -104,7 +104,7 @@
     /** X * MATRIX_A for X = {0, 1}. */
     private static final int[] MAG01 = {0x0, 0x9908b0df};
     /** Bytes pool. */
-    private int[] mt = new int[N];
+    private final int[] mt = new int[N];
     /** Current index in the bytes pool. */
     private int mti;
 
diff --git a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/MersenneTwister64.java b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/MersenneTwister64.java
index 03d68e9..4d7bb8e 100644
--- a/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/MersenneTwister64.java
+++ b/commons-rng-core/src/main/java/org/apache/commons/rng/core/source64/MersenneTwister64.java
@@ -84,7 +84,7 @@
     /** Least significant 31 bits. */
     private static final long LM = 0x7fffffffL;
     /** Bytes pool. */
-    private long[] mt = new long[NN];
+    private final long[] mt = new long[NN];
     /** Current index in the bytes pool. */
     private int mti;
 
diff --git a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSamplerCache.java b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSamplerCache.java
index 1ee8f0f..e935d2b 100644
--- a/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSamplerCache.java
+++ b/commons-rng-sampling/src/main/java/org/apache/commons/rng/sampling/distribution/PoissonSamplerCache.java
@@ -75,7 +75,7 @@
      * {@code N = (int)Math.floor(mean)}.
      */
     private final int maxN;
-    /** The cache of states between {@link minN} and {@link maxN}. */
+    /** The cache of states between {@link #minN} and {@link #maxN}. */
     private final LargeMeanPoissonSamplerState[] values;
 
     /**
diff --git a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/ThreadLocalRandomSource.java b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/ThreadLocalRandomSource.java
index 2d0af50..604b01b 100644
--- a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/ThreadLocalRandomSource.java
+++ b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/ThreadLocalRandomSource.java
@@ -69,7 +69,7 @@
      *
      * <p>This should only be modified to create new instances in a synchronized block.
      */
-    private static EnumMap<RandomSource, ThreadLocal<UniformRandomProvider>> sources =
+    private static final EnumMap<RandomSource, ThreadLocal<UniformRandomProvider>> SOURCES =
         new EnumMap<RandomSource,
                     ThreadLocal<UniformRandomProvider>>(RandomSource.class);
 
@@ -112,7 +112,7 @@
      * @throws IllegalArgumentException if the source is null or the source requires arguments
      */
     public static UniformRandomProvider current(RandomSource source) {
-        ThreadLocal<UniformRandomProvider> rng = sources.get(source);
+        ThreadLocal<UniformRandomProvider> rng = SOURCES.get(source);
         // Implement double-checked locking:
         // https://en.wikipedia.org/wiki/Double-checked_locking#Usage_in_Java
         if (rng == null) {
@@ -122,11 +122,11 @@
                 throw new IllegalArgumentException("Random source is null");
             }
 
-            synchronized (sources) {
-                rng = sources.get(source);
+            synchronized (SOURCES) {
+                rng = SOURCES.get(source);
                 if (rng == null) {
                     rng = new ThreadLocalRng(source);
-                    sources.put(source, rng);
+                    SOURCES.put(source, rng);
                 }
             }
         }
