This is an automated email from the ASF dual-hosted git repository.

tv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jcs.git

commit 163ac483d8964f32c666d975ea14309babe6384a
Author: Thomas Vandahl <[email protected]>
AuthorDate: Wed Feb 11 14:37:22 2026 +0100

    Clean up statistics usage
---
 .../commons/jcs4/access/AbstractCacheAccess.java   |  9 ----
 .../access/behavior/ICacheAccessManagement.java    |  5 ---
 .../apache/commons/jcs4/admin/CacheRegionInfo.java |  7 +++-
 .../org/apache/commons/jcs4/admin/JCSAdmin.jsp     |  6 +--
 .../apache/commons/jcs4/admin/JCSAdminBean.java    |  4 +-
 .../jcs4/auxiliary/disk/AbstractDiskCache.java     | 27 ++----------
 .../jcs4/auxiliary/disk/block/BlockDiskCache.java  | 30 ++++----------
 .../auxiliary/disk/indexed/IndexedDiskCache.java   | 34 ++++++---------
 .../jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java    | 21 ++++------
 .../lateral/socket/tcp/LateralTCPCache.java        | 15 +------
 .../lateral/socket/tcp/LateralTCPCacheNoWait.java  | 28 +++----------
 .../socket/tcp/LateralTCPCacheNoWaitFacade.java    | 24 ++---------
 .../remote/AbstractRemoteAuxiliaryCache.java       | 32 +++------------
 .../remote/AbstractRemoteCacheNoWaitFacade.java    | 23 ++---------
 .../commons/jcs4/auxiliary/remote/RemoteCache.java | 16 ++------
 .../jcs4/auxiliary/remote/RemoteCacheNoWait.java   | 39 +++++-------------
 .../http/server/AbstractRemoteCacheService.java    | 12 ------
 .../auxiliary/remote/server/RemoteCacheServer.java |  9 ++--
 .../remote/server/RemoteCacheServerFactory.java    |  3 +-
 .../remote/server/RemoteCacheStartupServlet.java   |  3 +-
 .../commons/jcs4/engine/PooledCacheEventQueue.java | 37 +++--------------
 .../commons/jcs4/engine/behavior/ICache.java       |  3 +-
 .../jcs4/engine/behavior/ICacheServiceAdmin.java   |  9 ++--
 .../commons/jcs4/engine/behavior/ICacheType.java   |  1 -
 .../engine/behavior/ICompositeCacheManager.java    |  7 ++--
 .../jcs4/engine/control/CompositeCache.java        | 37 ++++-------------
 .../jcs4/engine/control/CompositeCacheManager.java | 26 +-----------
 .../AbstractDoubleLinkedListMemoryCache.java       |  8 +---
 .../jcs4/engine/memory/AbstractMemoryCache.java    | 21 ++++------
 .../memory/soft/SoftReferenceMemoryCache.java      |  8 +---
 .../commons/jcs4/engine/stats/CacheStats.java      | 37 +++++++++++++++--
 .../apache/commons/jcs4/engine/stats/Stats.java    | 48 ++++++++++++++++++++--
 .../jcs4/engine/stats/behavior/ICacheStats.java    |  7 +++-
 .../commons/jcs4/engine/stats/behavior/IStats.java | 19 ++++++++-
 .../jcs4/JCSRemovalSimpleConcurrentTest.java       |  8 ++--
 .../org/apache/commons/jcs4/JCSThrashTest.java     |  2 +-
 .../commons/jcs4/access/TestCacheAccess.java       |  4 +-
 .../commons/jcs4/admin/AdminBeanUnitTest.java      |  2 -
 .../commons/jcs4/auxiliary/MockAuxiliaryCache.java |  9 ----
 .../auxiliary/disk/AbstractDiskCacheUnitTest.java  |  2 +-
 .../disk/block/AbstractBlockDiskCacheUnitTest.java |  4 +-
 .../block/BlockDiskCacheConcurrentUnitTest.java    |  4 +-
 .../disk/block/BlockDiskCacheSteadyLoadTest.java   |  8 ++--
 .../auxiliary/disk/block/BlockDiskUnitTest.java    |  2 +-
 .../block/HugeQuantityBlockDiskCacheLoadTest.java  |  8 ++--
 .../indexed/AbstractIndexDiskCacheUnitTest.java    | 16 ++++----
 .../indexed/HugeQuantityIndDiskCacheLoadTest.java  |  8 ++--
 .../IndexedDiskCacheConcurrentUnitTest.java        |  4 +-
 .../IndexedDiskCacheDefragPerformanceTest.java     | 28 ++-----------
 .../indexed/IndexedDiskCacheNoMemoryUnitTest.java  |  2 +-
 .../indexed/IndexedDiskCacheSteadyLoadTest.java    |  8 ++--
 .../disk/jdbc/JDBCDiskCacheRemovalUnitTest.java    |  2 +-
 .../disk/jdbc/JDBCDiskCacheSharedPoolUnitTest.java |  2 +-
 .../disk/jdbc/hsql/HSQLDiskCacheUnitTest.java      |  2 +-
 .../tcp/LateralTCPConcurrentRandomTestUtil.java    |  2 +-
 .../LateralTCPFilterRemoveHashCodeUnitTest.java    |  2 +-
 .../tcp/LateralTCPIssueRemoveOnPutUnitTest.java    |  2 +-
 .../auxiliary/remote/MockRemoteCacheClient.java    | 14 +------
 .../remote/RemoteCacheNoWaitUnitTest.java          |  2 +-
 .../http/client/RemoteHttpCacheManualTester.java   |  4 +-
 .../engine/control/CacheManagerStatsUnitTest.java  | 16 ++------
 .../control/CompositeCacheDiskUsageUnitTest.java   |  7 ----
 .../engine/control/MockCompositeCacheManager.java  |  5 ++-
 .../memory/lru/LHMLRUMemoryCacheUnitTest.java      |  6 +--
 .../engine/memory/mru/MRUMemoryCacheUnitTest.java  |  8 ++--
 .../soft/SoftReferenceMemoryCacheUnitTest.java     |  2 +-
 .../jcs4/utils/discovery/UDPDiscoveryUnitTest.java |  2 +-
 .../utils/serialization/SerializerUnitTest.java    |  4 +-
 68 files changed, 293 insertions(+), 523 deletions(-)

diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/AbstractCacheAccess.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/AbstractCacheAccess.java
index c3e1a91a..84aa527f 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/AbstractCacheAccess.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/AbstractCacheAccess.java
@@ -163,15 +163,6 @@ public abstract class AbstractCacheAccess<K, V>
         return this.getCacheControl().getStatistics();
     }
 
-    /**
-     * @return A String version of the stats.
-     */
-    @Override
-    public String getStats()
-    {
-        return this.getCacheControl().getStats();
-    }
-
     /**
      * Sets the ICompositeCacheAttributes of the cache region.
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/behavior/ICacheAccessManagement.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/behavior/ICacheAccessManagement.java
index 2748602b..a85de654 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/behavior/ICacheAccessManagement.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/access/behavior/ICacheAccessManagement.java
@@ -85,11 +85,6 @@ public interface ICacheAccessManagement
      */
     ICacheStats getStatistics();
 
-    /**
-     * @return A String version of the stats.
-     */
-    String getStats();
-
     /**
      * Sets the ICompositeCacheAttributes of the cache region
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/CacheRegionInfo.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/CacheRegionInfo.java
index ce0afaea..09a0402b 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/CacheRegionInfo.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/CacheRegionInfo.java
@@ -1,5 +1,8 @@
 package org.apache.commons.jcs4.admin;
 
+import org.apache.commons.jcs4.engine.CacheStatus;
+import org.apache.commons.jcs4.engine.stats.behavior.IStats;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -30,10 +33,10 @@ public record CacheRegionInfo(
     int cacheSize,
 
     /** The status of the cache region */
-    String cacheStatus,
+    CacheStatus cacheStatus,
 
     /** The statistics of the cache region */
-    String cacheStatistics,
+    IStats cacheStatistics,
 
     /** The number of memory hits in the cache region */
     long hitCountRam,
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdmin.jsp 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdmin.jsp
index 07f90863..b24d585c 100644
--- a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdmin.jsp
+++ b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdmin.jsp
@@ -189,7 +189,7 @@
 <p><a href="?">All Regions</a></p>
 <%
         CacheAccess<?, ?> cache = JCS.getInstance(cacheName);
-        String stats = cache.getStats();
+        String stats = cache.getStatistics().toString();
 %>
 <h2>Statistics for region [<%=cacheName%>]</h2>
 <pre>
@@ -229,7 +229,7 @@
         }
 
         CacheAccess<?, ?> cache = JCS.getInstance(cacheName);
-        String stats = cache.getStats();
+        String stats = cache.getStatistics().toString();
 %>
 </table>
 <h2>Statistics for region [<%=cacheName%>]</h2>
@@ -286,7 +286,7 @@ which empties the entire cache.
     <td><%=record.cacheName()%></td>
     <td><%=record.cacheSize()%></td>
     <td><%=record.byteCount()%></td>
-    <td><%=record.cacheStatus()%></td>
+    <td><%=record.cacheStatus().toString()%></td>
     <td><%=record.hitCountRam()%></td>
     <td><%=record.hitCountAux()%></td>
     <td><%=record.missCountNotFound()%></td>
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdminBean.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdminBean.java
index 17478d19..6a7d222e 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdminBean.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/admin/JCSAdminBean.java
@@ -99,8 +99,8 @@ public class JCSAdminBean implements JCSJMXBean
             final CacheRegionInfo regionInfo = new CacheRegionInfo(
                     cache.getCacheName(),
                     cache.getSize(),
-                    cache.getStatus().toString(),
-                    cache.getStats(),
+                    cache.getStatus(),
+                    cache.getStatistics(),
                     cache.getHitCountRam(),
                     cache.getHitCountAux(),
                     cache.getMissCountNotFound(),
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
index 4cf4ed6f..817ed82b 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCache.java
@@ -20,7 +20,6 @@ package org.apache.commons.jcs4.auxiliary.disk;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Map;
@@ -39,9 +38,7 @@ import org.apache.commons.jcs4.engine.behavior.ICache;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.ICacheEventQueue;
 import org.apache.commons.jcs4.engine.behavior.ICacheListener;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.struct.LRUMap;
@@ -566,19 +563,14 @@ public abstract class AbstractDiskCache<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Abstract Disk Cache" );
+        final IStats stats = new Stats("Abstract Disk Cache");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>( "Purgatory Hits", 
Integer.valueOf(purgHits) ) );
-        elems.add(new StatElement<>( "Purgatory Size", 
Integer.valueOf(purgatory.size()) ) );
+        stats.addStatElement("Purgatory Hits", Integer.valueOf(purgHits));
+        stats.addStatElement("Purgatory Size", 
Integer.valueOf(purgatory.size()));
 
         // get the stats from the event queue too
         final IStats eqStats = this.cacheEventQueue.getStatistics();
-        elems.addAll(eqStats.getStatElements());
-
-        stats.setStatElements( elems );
+        stats.addStatElements(eqStats.getStatElements());
 
         return stats;
     }
@@ -591,17 +583,6 @@ public abstract class AbstractDiskCache<K, V>
      * For example, doGet calls getWithEventLogging, which calls processGet
      */
 
-    /**
-     * Gets basic stats for the abstract disk cache.
-     *
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * @return the status -- alive or disposed from CacheConstants
      * @see ICache#getStatus
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCache.java
index 769234cc..1d09e9c3 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCache.java
@@ -21,7 +21,6 @@ package org.apache.commons.jcs4.auxiliary.disk.block;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -41,9 +40,7 @@ import 
org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.behavior.IRequireScheduler;
 import org.apache.commons.jcs4.engine.control.group.GroupAttrName;
 import org.apache.commons.jcs4.engine.control.group.GroupId;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.serialization.StandardSerializer;
@@ -268,40 +265,31 @@ public class BlockDiskCache<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Block Disk Cache" );
+        final IStats stats = new Stats("Block Disk Cache");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>( "Is Alive", Boolean.valueOf(isAlive()) ) 
);
-        elems.add(new StatElement<>( "Key Map Size", 
Integer.valueOf(this.keyStore.size()) ) );
+        stats.addStatElement("Is Alive", Boolean.valueOf(isAlive()));
+        stats.addStatElement("Key Map Size", 
Integer.valueOf(this.keyStore.size()));
 
         if (this.dataFile != null)
         {
             try
             {
-                elems.add(new StatElement<>( "Data File Length", 
Long.valueOf(this.dataFile.length()) ) );
+                stats.addStatElement("Data File Length", 
Long.valueOf(this.dataFile.length()));
             }
             catch ( final IOException e )
             {
                 log.error( e );
             }
 
-            elems.add(new StatElement<>( "Block Size Bytes",
-                    Integer.valueOf(this.dataFile.getBlockSizeBytes()) ) );
-            elems.add(new StatElement<>( "Number Of Blocks",
-                    Integer.valueOf(this.dataFile.getNumberOfBlocks()) ) );
-            elems.add(new StatElement<>( "Average Put Size Bytes",
-                    Long.valueOf(this.dataFile.getAveragePutSizeBytes()) ) );
-            elems.add(new StatElement<>( "Empty Blocks",
-                    Integer.valueOf(this.dataFile.getEmptyBlocks()) ) );
+            stats.addStatElement("Block Size Bytes", 
Integer.valueOf(this.dataFile.getBlockSizeBytes()));
+            stats.addStatElement("Number Of Blocks", 
Integer.valueOf(this.dataFile.getNumberOfBlocks()));
+            stats.addStatElement("Average Put Size Bytes", 
Long.valueOf(this.dataFile.getAveragePutSizeBytes()));
+            stats.addStatElement("Empty Blocks", 
Integer.valueOf(this.dataFile.getEmptyBlocks()));
         }
 
         // get the stats from the super too
         final IStats sStats = super.getStatistics();
-        elems.addAll(sStats.getStatElements());
-
-        stats.setStatElements( elems );
+        stats.addStatElements(sStats.getStatElements());
 
         return stats;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
index 3c2da790..af0f3bf3 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCache.java
@@ -45,9 +45,7 @@ import 
org.apache.commons.jcs4.engine.control.group.GroupAttrName;
 import org.apache.commons.jcs4.engine.control.group.GroupId;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.struct.AbstractLRUMap;
@@ -849,36 +847,30 @@ public class IndexedDiskCache<K, V> extends 
AbstractDiskCache<K, V>
     @Override
     public synchronized IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName("Indexed Disk Cache");
+        final IStats stats = new Stats("Indexed Disk Cache");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>("Is Alive", Boolean.valueOf(isAlive())));
-        elems.add(new StatElement<>("Key Map Size", 
Integer.valueOf(this.keyHash != null ? this.keyHash.size() : -1)));
+        stats.addStatElement("Is Alive", Boolean.valueOf(isAlive()));
+        stats.addStatElement("Key Map Size", Integer.valueOf(this.keyHash != 
null ? this.keyHash.size() : -1));
         try
         {
-            elems.add(
-                    new StatElement<>("Data File Length", 
Long.valueOf(this.dataFile != null ? this.dataFile.length() : -1L)));
+            stats.addStatElement("Data File Length", 
Long.valueOf(this.dataFile != null ? this.dataFile.length() : -1L));
         }
         catch (final IOException e)
         {
             log.error(e);
         }
-        elems.add(new StatElement<>("Max Key Size", this.maxKeySize));
-        elems.add(new StatElement<>("Hit Count", this.hitCount));
-        elems.add(new StatElement<>("Bytes Free", this.bytesFree));
-        elems.add(new StatElement<>("Optimize Operation Count", 
Integer.valueOf(this.removeCount)));
-        elems.add(new StatElement<>("Times Optimized", 
Integer.valueOf(this.timesOptimized)));
-        elems.add(new StatElement<>("Recycle Count", 
Integer.valueOf(this.recycleCnt)));
-        elems.add(new StatElement<>("Recycle Bin Size", 
Integer.valueOf(this.recycle.size())));
-        elems.add(new StatElement<>("Startup Size", 
Integer.valueOf(this.startupSize)));
+        stats.addStatElement("Max Key Size", this.maxKeySize);
+        stats.addStatElement("Hit Count", this.hitCount);
+        stats.addStatElement("Bytes Free", this.bytesFree);
+        stats.addStatElement("Optimize Operation Count", 
Integer.valueOf(this.removeCount));
+        stats.addStatElement("Times Optimized", 
Integer.valueOf(this.timesOptimized));
+        stats.addStatElement("Recycle Count", 
Integer.valueOf(this.recycleCnt));
+        stats.addStatElement("Recycle Bin Size", 
Integer.valueOf(this.recycle.size()));
+        stats.addStatElement("Startup Size", 
Integer.valueOf(this.startupSize));
 
         // get the stats from the super too
         final IStats sStats = super.getStatistics();
-        elems.addAll(sStats.getStatElements());
-
-        stats.setStatElements(elems);
+        stats.addStatElements(sStats.getStatElements());
 
         return stats;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
index 38b57971..fd35af49 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCache.java
@@ -26,7 +26,6 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Timestamp;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -40,8 +39,6 @@ import org.apache.commons.jcs4.engine.behavior.ICache;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
-import org.apache.commons.jcs4.engine.stats.StatElement;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -367,16 +364,12 @@ public class JDBCDiskCache<K, V>
     public IStats getStatistics()
     {
         final IStats stats = super.getStatistics();
-        stats.setTypeName( "JDBC/Abstract Disk Cache" );
+        stats.setTypeName("JDBC/Abstract Disk Cache");
 
-        final List<IStatElement<?>> elems = stats.getStatElements();
-
-        elems.add(new StatElement<>( "Update Count", updateCount ) );
-        elems.add(new StatElement<>( "Get Count", getCount ) );
-        elems.add(new StatElement<>( "Get Matching Count", getMatchingCount ) 
);
-        elems.add(new StatElement<>( "DB URL", getDiskLocation()) );
-
-        stats.setStatElements( elems );
+        stats.addStatElement("Update Count", updateCount);
+        stats.addStatElement("Get Count", getCount);
+        stats.addStatElement("Get Matching Count", getMatchingCount);
+        stats.addStatElement("DB URL", getDiskLocation());
 
         return stats;
     }
@@ -818,11 +811,11 @@ public class JDBCDiskCache<K, V>
     /**
      * For debugging.
      *
-     * @return this.getStats();
+     * @return this.getStatistics();
      */
     @Override
     public String toString()
     {
-        return getStats();
+        return getStatistics().toString();
     }
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
index 703d69e4..b30062aa 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCache.java
@@ -185,20 +185,7 @@ public class LateralTCPCache<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "LateralTCPCache" );
-        return stats;
-    }
-
-    /**
-     * getStats
-     *
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return "";
+        return new Stats("LateralTCPCache");
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
index 1711e3de..02a99d57 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWait.java
@@ -21,7 +21,6 @@ package org.apache.commons.jcs4.auxiliary.lateral.socket.tcp;
 
 import java.io.IOException;
 import java.rmi.UnmarshalException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -38,9 +37,7 @@ import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.ICacheEventQueue;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -321,33 +318,20 @@ public class LateralTCPCacheNoWait<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Lateral Cache No Wait" );
+        final IStats stats = new Stats("Lateral Cache No Wait");
 
         // get the stats from the event queue too
         final IStats eqStats = this.eventQueue.getStatistics();
-        final ArrayList<IStatElement<?>> elems = new 
ArrayList<>(eqStats.getStatElements());
+        stats.addStatElements(eqStats.getStatElements());
 
-        elems.add(new StatElement<>( "Get Count", 
Integer.valueOf(this.getCount) ) );
-        elems.add(new StatElement<>( "Remove Count", 
Integer.valueOf(this.removeCount) ) );
-        elems.add(new StatElement<>( "Put Count", 
Integer.valueOf(this.putCount) ) );
-        elems.add(new StatElement<>( "Attributes", 
cache.getAuxiliaryCacheAttributes() ) );
-
-        stats.setStatElements( elems );
+        stats.addStatElement("Get Count", Integer.valueOf(this.getCount));
+        stats.addStatElement("Remove Count", 
Integer.valueOf(this.removeCount));
+        stats.addStatElement("Put Count", Integer.valueOf(this.putCount));
+        stats.addStatElement("Attributes", 
cache.getAuxiliaryCacheAttributes());
 
         return stats;
     }
 
-    /**
-     * getStats
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * Returns the async cache status. An error status indicates either the 
lateral connection is not
      * available, or the asyn queue has been unexpectedly destroyed. No 
lateral invocation.
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
index 7dbc24dc..4de74cbe 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPCacheNoWaitFacade.java
@@ -20,7 +20,6 @@ package org.apache.commons.jcs4.auxiliary.lateral.socket.tcp;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -37,9 +36,7 @@ import 
org.apache.commons.jcs4.auxiliary.lateral.behavior.ILateralCacheListener;
 import 
org.apache.commons.jcs4.auxiliary.lateral.socket.tcp.behavior.ILateralTCPCacheAttributes;
 import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -305,35 +302,20 @@ public class LateralTCPCacheNoWaitFacade<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Lateral Cache No Wait Facade" );
-
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
+        final IStats stats = new Stats("Lateral Cache No Wait Facade");
 
         if (noWaitMap != null)
         {
-            elems.add(new StatElement<>("Number of No Waits", 
Integer.valueOf(noWaitMap.size())));
+            stats.addStatElement("Number of No Waits", 
Integer.valueOf(noWaitMap.size()));
 
-            elems.addAll(noWaitMap.values().stream()
+            stats.addStatElements(noWaitMap.values().stream()
                     .flatMap(lcnw -> 
lcnw.getStatistics().getStatElements().stream())
                     .collect(Collectors.toList()));
         }
 
-        stats.setStatElements( elems );
-
         return stats;
     }
 
-    /**
-     * getStats
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * Gets the status attribute of the LateralTCPCacheNoWaitFacade object
      * @return The status value
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
index 7c53debb..4290ef33 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteAuxiliaryCache.java
@@ -20,7 +20,6 @@ package org.apache.commons.jcs4.auxiliary.remote;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -44,9 +43,7 @@ import 
org.apache.commons.jcs4.engine.behavior.ICacheElementSerialized;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.IZombie;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.serialization.SerializationConversionUtil;
@@ -273,47 +270,30 @@ public abstract class AbstractRemoteAuxiliaryCache<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "AbstractRemoteAuxiliaryCache" );
+        final IStats stats = new Stats("AbstractRemoteAuxiliaryCache");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>( "Remote Type", 
this.getRemoteCacheAttributes().getRemoteTypeName() ) );
+        stats.addStatElement("Remote Type", 
this.getRemoteCacheAttributes().getRemoteTypeName() );
 
 //      if ( this.getRemoteCacheAttributes().getRemoteType() == 
RemoteType.CLUSTER )
 //      {
 //          // something cluster specific
 //      }
 
-        elems.add(new StatElement<>( "UsePoolForGet", 
Boolean.valueOf(usePoolForGet) ) );
+        stats.addStatElement("UsePoolForGet", Boolean.valueOf(usePoolForGet) );
 
         if ( pool != null )
         {
-            elems.add(new StatElement<>( "Pool", pool ) );
+            stats.addStatElement("Pool", pool );
         }
 
-        if ( getRemoteCacheService() instanceof ZombieCacheServiceNonLocal )
+        if (getRemoteCacheService() instanceof ZombieCacheServiceNonLocal 
zombie)
         {
-            elems.add(new StatElement<>( "Zombie Queue Size",
-                    Integer.valueOf(( (ZombieCacheServiceNonLocal<K, V>) 
getRemoteCacheService() ).getQueueSize()) ) );
+            stats.addStatElement("Zombie Queue Size", 
Integer.valueOf(zombie.getQueueSize()));
         }
 
-        stats.setStatElements( elems );
-
         return stats;
     }
 
-    /**
-     * Gets the stats attribute of the RemoteCache object.
-     *
-     * @return The stats value
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * Returns the cache status. An error status indicates the remote 
connection is not available.
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
index 99a5d945..4ece672a 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/AbstractRemoteCacheNoWaitFacade.java
@@ -34,9 +34,7 @@ import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.IElementSerializer;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -238,36 +236,21 @@ public abstract class AbstractRemoteCacheNoWaitFacade<K, 
V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Remote Cache No Wait Facade" );
-
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
+        final IStats stats = new Stats("Remote Cache No Wait Facade");
 
         if ( noWaits != null )
         {
-            elems.add(new StatElement<>( "Number of No Waits", 
Integer.valueOf(noWaits.size()) ) );
+            stats.addStatElement("Number of No Waits", 
Integer.valueOf(noWaits.size()));
 
             // get the stats from the super too
-            elems.addAll(noWaits.stream()
+            stats.addStatElements(noWaits.stream()
                 .flatMap(rcnw -> 
rcnw.getStatistics().getStatElements().stream())
                 .collect(Collectors.toList()));
         }
 
-        stats.setStatElements( elems );
-
         return stats;
     }
 
-    /**
-     * getStats
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * Gets the status attribute of the RemoteCacheNoWaitFacade object
      * <p>
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
index de5e06e0..7a3f698d 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCache.java
@@ -20,16 +20,13 @@ package org.apache.commons.jcs4.auxiliary.remote;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
 
 import 
org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheAttributes;
 import org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener;
 import org.apache.commons.jcs4.auxiliary.remote.server.behavior.RemoteType;
 import org.apache.commons.jcs4.engine.ZombieCacheServiceNonLocal;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -117,13 +114,10 @@ public class RemoteCache<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Remote Cache" );
+        final IStats stats = new Stats("Remote Cache");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>( "Remote Host:Port", 
getIPAddressForService() ) );
-        elems.add(new StatElement<>( "Remote Type", 
getRemoteCacheAttributes().getRemoteTypeName() ) );
+        stats.addStatElement("Remote Host:Port", getIPAddressForService() );
+        stats.addStatElement("Remote Type", 
getRemoteCacheAttributes().getRemoteTypeName() );
 
 //      if ( this.getRemoteCacheAttributes().getRemoteType() == 
RemoteType.CLUSTER )
 //      {
@@ -132,9 +126,7 @@ public class RemoteCache<K, V>
 
         // get the stats from the super too
         final IStats sStats = super.getStatistics();
-        elems.addAll(sStats.getStatElements());
-
-        stats.setStatElements( elems );
+        stats.addStatElements(sStats.getStatElements());
 
         return stats;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
index 68004644..fee9b067 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWait.java
@@ -21,7 +21,6 @@ package org.apache.commons.jcs4.auxiliary.remote;
 
 import java.io.IOException;
 import java.rmi.UnmarshalException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -36,9 +35,7 @@ import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.ICacheEventQueue;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -358,46 +355,30 @@ public class RemoteCacheNoWait<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Remote Cache No Wait" );
+        final IStats stats = new Stats("Remote Cache No Wait");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>( "Status", getStatus() ) );
+        stats.addStatElement("Status", getStatus());
 
         // get the stats from the cache queue too
         final IStats cStats = this.remoteCacheClient.getStatistics();
         if ( cStats != null )
         {
-            elems.addAll(cStats.getStatElements());
+            stats.addStatElements(cStats.getStatElements());
         }
 
         // get the stats from the event queue too
         final IStats eqStats = this.cacheEventQueue.getStatistics();
-        elems.addAll(eqStats.getStatElements());
-
-        elems.add(new StatElement<>( "Get Count", 
Integer.valueOf(this.getCount) ) );
-        elems.add(new StatElement<>( "GetMatching Count", 
Integer.valueOf(this.getMatchingCount) ) );
-        elems.add(new StatElement<>( "GetMultiple Count", 
Integer.valueOf(this.getMultipleCount) ) );
-        elems.add(new StatElement<>( "Remove Count", 
Integer.valueOf(this.removeCount) ) );
-        elems.add(new StatElement<>( "Put Count", 
Integer.valueOf(this.putCount) ) );
+        stats.addStatElements(eqStats.getStatElements());
 
-        stats.setStatElements( elems );
+        stats.addStatElement("Get Count", Integer.valueOf(this.getCount) );
+        stats.addStatElement("GetMatching Count", 
Integer.valueOf(this.getMatchingCount) );
+        stats.addStatElement("GetMultiple Count", 
Integer.valueOf(this.getMultipleCount) );
+        stats.addStatElement("Remove Count", Integer.valueOf(this.removeCount) 
);
+        stats.addStatElement("Put Count", Integer.valueOf(this.putCount) );
 
         return stats;
     }
 
-    /**
-     * Returns the statistics in String form.
-     *
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * Returns the async cache status. An error status indicates either the 
remote connection is not
      * available, or the asyn queue has been unexpectedly destroyed. No remote 
invocation.
@@ -486,7 +467,7 @@ public class RemoteCacheNoWait<K, V>
     @Override
     public String toString()
     {
-        return getStats() + "\n" + remoteCacheClient.toString();
+        return getStatistics() + "\n" + remoteCacheClient.toString();
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
index 1ba4298e..3a41bdd5 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/http/server/AbstractRemoteCacheService.java
@@ -309,18 +309,6 @@ public abstract class AbstractRemoteCacheService<K, V>
         }
     }
 
-    /**
-     * Gets the stats attribute of the RemoteCacheServer object.
-     *
-     * @return The stats value
-     * @throws IOException
-     */
-    public String getStats()
-        throws IOException
-    {
-        return cacheManager.getStats();
-    }
-
     /**
      * Logs an event if an event logger is configured.
      *
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
index ce8f7195..7f5dfab9 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServer.java
@@ -50,6 +50,7 @@ import 
org.apache.commons.jcs4.engine.control.CompositeCacheManager;
 import org.apache.commons.jcs4.engine.logging.CacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEvent;
 import org.apache.commons.jcs4.engine.logging.behavior.ICacheEventLogger;
+import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.timing.ElapsedTimer;
 
@@ -730,16 +731,16 @@ public class RemoteCacheServer<K, V>
     }
 
     /**
-     * Gets the stats attribute of the RemoteCacheServer object.
+     * Gets the statistics of the ICacheServiceAdmin object
      *
-     * @return The stats value
+     * @return The statistics values as an array
      * @throws IOException
      */
     @Override
-    public String getStats()
+    public ICacheStats[] getStatistics()
         throws IOException
     {
-        return cacheManager.getStats();
+        return cacheManager.getStatistics();
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
index d48cfbe3..65dd896d 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheServerFactory.java
@@ -293,8 +293,7 @@ public class RemoteCacheServerFactory
 
                 try
                 {
-//                    System.out.println( admin.getStats().toString() );
-                    log.debug( admin.getStats() );
+                    log.debug( admin.getStatistics().toString() );
                 }
                 catch ( final IOException es )
                 {
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheStartupServlet.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheStartupServlet.java
index 58eab42d..719caa38 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheStartupServlet.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/auxiliary/remote/server/RemoteCacheStartupServlet.java
@@ -24,6 +24,7 @@ import java.io.OutputStream;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
 import java.util.Properties;
 
 import org.apache.commons.jcs4.JCS;
@@ -237,7 +238,7 @@ public class RemoteCacheStartupServlet
 
         try
         {
-            stats = CompositeCacheManager.getInstance().getStats();
+            stats = 
Arrays.toString(CompositeCacheManager.getInstance().getStatistics());
         }
         catch (final CacheException e)
         {
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/PooledCacheEventQueue.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/PooledCacheEventQueue.java
index a0d36184..4c0e3a3d 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/PooledCacheEventQueue.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/PooledCacheEventQueue.java
@@ -1,34 +1,12 @@
 package org.apache.commons.jcs4.engine;
 
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.ArrayList;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.jcs4.engine.behavior.ICacheListener;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.threadpool.ThreadPoolManager;
@@ -132,22 +110,17 @@ public class PooledCacheEventQueue<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Pooled Cache Event Queue" );
+        final IStats stats = new Stats("Pooled Cache Event Queue");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-
-        elems.add(new StatElement<>( "Working", Boolean.valueOf(isWorking()) ) 
);
-        elems.add(new StatElement<>( "Empty", Boolean.valueOf(this.isEmpty()) 
) );
+        stats.addStatElement("Working", Boolean.valueOf(isWorking()) );
+        stats.addStatElement("Empty", Boolean.valueOf(this.isEmpty()) );
 
         if ( queue != null )
         {
-            elems.add(new StatElement<>( "Queue Size", 
Integer.valueOf(queue.size()) ) );
-            elems.add(new StatElement<>( "Queue Capacity", 
Integer.valueOf(queue.remainingCapacity()) ) );
+            stats.addStatElement("Queue Size", Integer.valueOf(queue.size()) );
+            stats.addStatElement("Queue Capacity", 
Integer.valueOf(queue.remainingCapacity()) );
         }
 
-        stats.setStatElements( elems );
-
         return stats;
     }
 
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICache.java
index 1ac2837e..764ccab7 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICache.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.match.behavior.IKeyMatcher;
+import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 
 /**
  * This is the top level interface for all cache like structures. It defines 
the methods used
@@ -99,7 +100,7 @@ public interface ICache<K, V>
      *
      * @return String of important historical information.
      */
-    String getStats();
+    IStats getStatistics();
 
     /**
      * Returns the cache status.
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheServiceAdmin.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheServiceAdmin.java
index 77aa5da9..02d61b81 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheServiceAdmin.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheServiceAdmin.java
@@ -21,19 +21,20 @@ package org.apache.commons.jcs4.engine.behavior;
 
 import java.io.IOException;
 
+import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
+
 /**
  * Description of the Interface
  */
 public interface ICacheServiceAdmin
 {
-
     /**
-     * Gets the stats attribute of the ICacheServiceAdmin object
+     * Gets the statistics of the ICacheServiceAdmin object
      *
-     * @return The stats value
+     * @return The statistics values as an array
      * @throws IOException
      */
-    String getStats()
+    ICacheStats[] getStatistics()
         throws IOException;
 
     /** Description of the Method
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheType.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheType.java
index fbacd8a3..fe5510f9 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheType.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICacheType.java
@@ -44,5 +44,4 @@ public interface ICacheType
      * @return The cacheType value
      */
     CacheType getCacheType();
-
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICompositeCacheManager.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICompositeCacheManager.java
index 65191af7..e13b5113 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICompositeCacheManager.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/behavior/ICompositeCacheManager.java
@@ -23,6 +23,7 @@ import java.util.Properties;
 
 import org.apache.commons.jcs4.auxiliary.AuxiliaryCache;
 import org.apache.commons.jcs4.engine.control.CompositeCache;
+import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
 
 /**
  * I need the interface so I can plug in mock managers for testing.
@@ -54,9 +55,9 @@ public interface ICompositeCacheManager extends 
IShutdownObservable
     Properties getConfigurationProperties();
 
     /**
-     * Gets stats for debugging.
+     * This returns data gathered for all regions and all the auxiliaries they 
currently uses.
      *
-     * @return String
+     * @return ICacheStats[]
      */
-    String getStats();
+    ICacheStats[] getStatistics();
 }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCache.java
index e6cf7b1b..c4208971 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCache.java
@@ -21,7 +21,6 @@ package org.apache.commons.jcs4.engine.control;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -61,9 +60,7 @@ import 
org.apache.commons.jcs4.engine.memory.behavior.IMemoryCache;
 import org.apache.commons.jcs4.engine.memory.lru.LRUMemoryCache;
 import org.apache.commons.jcs4.engine.memory.shrinking.ShrinkerThread;
 import org.apache.commons.jcs4.engine.stats.CacheStats;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
 /**
@@ -896,41 +893,25 @@ public class CompositeCache<K, V>
      *
      * @return Statistics and Info on the Region.
      */
+    @Override
     public ICacheStats getStatistics()
     {
-        final ICacheStats stats = new CacheStats();
+        final ICacheStats stats = new CacheStats("Composite Cache");
         stats.setRegionName(this.getCacheName());
 
         // store the composite cache stats first
-        stats.setStatElements(Arrays.asList(
-                new StatElement<>("HitCountRam", 
Long.valueOf(getHitCountRam())),
-                new StatElement<>("HitCountAux", 
Long.valueOf(getHitCountAux()))));
+        stats.addStatElement("HitCountRam", Long.valueOf(getHitCountRam()));
+        stats.addStatElement("HitCountAux", Long.valueOf(getHitCountAux()));
 
         // memory + aux, memory is not considered an auxiliary internally
-        final ArrayList<IStats> auxStats = new ArrayList<>(auxCaches.size() + 
1);
-
-        auxStats.add(getMemoryCache().getStatistics());
-        auxStats.addAll(auxCaches.stream()
+        stats.addAuxiliaryCacheStats(getMemoryCache().getStatistics());
+        stats.addAuxiliaryCacheStats(auxCaches.stream()
                 .map(AuxiliaryCache::getStatistics)
                 .collect(Collectors.toList()));
 
-        // store the auxiliary stats
-        stats.setAuxiliaryCacheStats(auxStats);
-
         return stats;
     }
 
-    /**
-     * Gets stats for debugging.
-     *
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        return getStatistics().toString();
-    }
-
     /**
      * Gets the status attribute of the Cache object.
      *
@@ -1504,14 +1485,14 @@ public class CompositeCache<K, V>
     }
 
     /**
-     * This returns the stats.
+     * This returns the statistics.
      *
-     * @return getStats()
+     * @return Statistics of the cache
      */
     @Override
     public String toString()
     {
-        return getStats();
+        return getStatistics().toString();
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCacheManager.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCacheManager.java
index 12840ce2..d2295b80 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCacheManager.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/control/CompositeCacheManager.java
@@ -33,7 +33,6 @@ import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
@@ -641,6 +640,7 @@ public class CompositeCacheManager
      *
      * @return ICacheStats[]
      */
+    @Override
     public ICacheStats[] getStatistics()
     {
         final List<ICacheStats> cacheStats = caches.values().stream()
@@ -651,30 +651,6 @@ public class CompositeCacheManager
         return cacheStats.toArray( new CacheStats[0] );
     }
 
-    /**
-     * Gets stats for debugging. This calls gets statistics and then puts all 
the results in a
-     * string. This returns data for all regions.
-     *
-     * @return String
-     */
-    @Override
-    public String getStats()
-    {
-        final ICacheStats[] stats = getStatistics();
-        if ( stats == null )
-        {
-            return "NONE";
-        }
-
-        // force the array elements into a string.
-        final StringBuilder buf = new StringBuilder();
-        Stream.of(stats).forEach(stat -> {
-            buf.append( "\n---------------------------\n" );
-            buf.append( stat );
-        });
-        return buf.toString();
-    }
-
     /** Creates a shutdown hook and starts the scheduler service */
     protected synchronized void initialize()
     {
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java
index 8bd3407b..59ddb649 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractDoubleLinkedListMemoryCache.java
@@ -20,7 +20,6 @@ package org.apache.commons.jcs4.engine.memory;
  */
 
 import java.io.IOException;
-import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -28,8 +27,6 @@ import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.control.CompositeCache;
 import org.apache.commons.jcs4.engine.control.group.GroupAttrName;
 import org.apache.commons.jcs4.engine.memory.util.MemoryElementDescriptor;
-import org.apache.commons.jcs4.engine.stats.StatElement;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 import org.apache.commons.jcs4.utils.struct.DoubleLinkedList;
@@ -213,10 +210,7 @@ public abstract class 
AbstractDoubleLinkedListMemoryCache<K, V> extends Abstract
     {
         final IStats stats = super.getStatistics();
         stats.setTypeName( /* add algorithm name */"Memory Cache");
-
-        final List<IStatElement<?>> elems = stats.getStatElements();
-
-        elems.add(new StatElement<>("List Size", 
Integer.valueOf(list.size())));
+        stats.addStatElement("List Size", Integer.valueOf(list.size()));
 
         return stats;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java
index 49388d0c..612344b9 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/AbstractMemoryCache.java
@@ -20,7 +20,6 @@ package org.apache.commons.jcs4.engine.memory;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
@@ -39,9 +38,7 @@ import 
org.apache.commons.jcs4.engine.control.group.GroupAttrName;
 import org.apache.commons.jcs4.engine.control.group.GroupId;
 import org.apache.commons.jcs4.engine.memory.behavior.IMemoryCache;
 import org.apache.commons.jcs4.engine.memory.util.MemoryElementDescriptor;
-import org.apache.commons.jcs4.engine.stats.StatElement;
 import org.apache.commons.jcs4.engine.stats.Stats;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -103,13 +100,13 @@ public abstract class AbstractMemoryCache<K, V>
     /**
      * Dump the cache map for debugging.
      */
-    public void dumpMap()
+    protected void dumpMap()
     {
         if (log.isTraceEnabled())
         {
             log.trace("dumpingMap");
             map.forEach((key, value) ->
-            log.trace("dumpMap> key={0}, val={1}", key, key, 
value.getCacheElement().getVal()));
+                log.trace("dumpMap> key={0}, val={1}", key, 
value.getCacheElement().getVal()));
         }
     }
 
@@ -290,16 +287,12 @@ public abstract class AbstractMemoryCache<K, V>
     @Override
     public IStats getStatistics()
     {
-        final IStats stats = new Stats();
-        stats.setTypeName( "Abstract Memory Cache" );
+        final IStats stats = new Stats("Abstract Memory Cache");
 
-        final ArrayList<IStatElement<?>> elems = new ArrayList<>();
-        stats.setStatElements(elems);
-
-        elems.add(new StatElement<>("Put Count", putCnt));
-        elems.add(new StatElement<>("Hit Count", hitCnt));
-        elems.add(new StatElement<>("Miss Count", missCnt));
-        elems.add(new StatElement<>( "Map Size", Integer.valueOf(getSize()) ) 
);
+        stats.addStatElement("Put Count", putCnt);
+        stats.addStatElement("Hit Count", hitCnt);
+        stats.addStatElement("Miss Count", missCnt);
+        stats.addStatElement("Map Size", Integer.valueOf(getSize()));
 
         return stats;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java
index 32666225..07e92e99 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCache.java
@@ -22,7 +22,6 @@ package org.apache.commons.jcs4.engine.memory.soft;
 import java.io.IOException;
 import java.lang.ref.SoftReference;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -35,8 +34,6 @@ import org.apache.commons.jcs4.engine.control.CompositeCache;
 import org.apache.commons.jcs4.engine.memory.AbstractMemoryCache;
 import org.apache.commons.jcs4.engine.memory.util.MemoryElementDescriptor;
 import 
org.apache.commons.jcs4.engine.memory.util.SoftReferenceElementDescriptor;
-import org.apache.commons.jcs4.engine.stats.StatElement;
-import org.apache.commons.jcs4.engine.stats.behavior.IStatElement;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -133,10 +130,9 @@ public class SoftReferenceMemoryCache<K, V> extends 
AbstractMemoryCache<K, V>
         final IStats stats = super.getStatistics();
         stats.setTypeName("Soft Reference Memory Cache");
 
-        final List<IStatElement<?>> elems = stats.getStatElements();
         final int emptyrefs = map.size() - getSize();
-        elems.add(new StatElement<>("Empty References", 
Integer.valueOf(emptyrefs)));
-        elems.add(new StatElement<>("Strong References", 
Integer.valueOf(strongReferences.size())));
+        stats.addStatElement("Empty References", Integer.valueOf(emptyrefs));
+        stats.addStatElement("Strong References", 
Integer.valueOf(strongReferences.size()));
 
         return stats;
     }
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/CacheStats.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/CacheStats.java
index 99829b71..22f8ac4b 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/CacheStats.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/CacheStats.java
@@ -1,5 +1,8 @@
 package org.apache.commons.jcs4.engine.stats;
 
+import java.util.ArrayList;
+import java.util.Collections;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -42,13 +45,32 @@ public class CacheStats
     /** What that auxiliaries are reporting. */
     private List<IStats> auxStats;
 
+    /**
+     * Default constructor
+     */
+    public CacheStats()
+    {
+        super();
+        this.auxStats = new ArrayList<>();
+    }
+
+    /**
+     * Constructor
+     * @param typeName
+     */
+    public CacheStats(String typeName)
+    {
+        super(typeName);
+        this.auxStats = new ArrayList<>();
+    }
+
     /**
      * @return IStats[]
      */
     @Override
     public List<IStats> getAuxiliaryCacheStats()
     {
-        return auxStats;
+        return Collections.unmodifiableList(auxStats);
     }
 
     /**
@@ -66,9 +88,18 @@ public class CacheStats
      * @param stats
      */
     @Override
-    public void setAuxiliaryCacheStats( final List<IStats> stats )
+    public void addAuxiliaryCacheStats(final List<IStats> stats)
+    {
+        auxStats.addAll(stats);
+    }
+
+    /**
+     * @param stats
+     */
+    @Override
+    public void addAuxiliaryCacheStats(IStats stats)
     {
-        auxStats = stats;
+        auxStats.add(stats);
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/Stats.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/Stats.java
index 0b0ca9ed..fc300301 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/Stats.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/Stats.java
@@ -1,5 +1,8 @@
 package org.apache.commons.jcs4.engine.stats;
 
+import java.util.ArrayList;
+import java.util.Collections;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -38,13 +41,31 @@ public class Stats
     /** The type of stat */
     private String typeName;
 
+    /**
+     * Default constructor
+     */
+    public Stats()
+    {
+        this.stats = new ArrayList<>();
+    }
+
+    /**
+     * Constructor
+     * @param typeName
+     */
+    public Stats(String typeName)
+    {
+        this();
+        this.typeName = typeName;
+    }
+
     /**
      * @return IStatElement[]
      */
     @Override
     public List<IStatElement<?>> getStatElements()
     {
-        return stats;
+        return Collections.unmodifiableList(stats);
     }
 
     /**
@@ -60,9 +81,30 @@ public class Stats
      * @param stats
      */
     @Override
-    public void setStatElements( final List<IStatElement<?>> stats )
+    public void addStatElements( final List<IStatElement<?>> stats )
+    {
+        this.stats.addAll(stats);
+    }
+
+    /**
+     * @param stats
+     */
+    @Override
+    public void addStatElement( final IStatElement<?> stats )
+    {
+        this.stats.add(stats);
+    }
+
+    /**
+     * Adds generic statistical or historical data.
+     *
+     * @param name name of the StatElement
+     * @param data value of the StatElement
+     */
+    @Override
+    public <V> void addStatElement(String name, V data)
     {
-        this.stats = stats;
+        addStatElement(new StatElement<V>(name, data));
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/ICacheStats.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/ICacheStats.java
index 6afe1210..b05dfb74 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/ICacheStats.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/ICacheStats.java
@@ -42,7 +42,12 @@ public interface ICacheStats
     /**
      * @param stats
      */
-    void setAuxiliaryCacheStats( List<IStats> stats );
+    void addAuxiliaryCacheStats(List<IStats> stats);
+
+    /**
+     * @param stats
+     */
+    void addAuxiliaryCacheStats(IStats stats);
 
     /**
      * @param name
diff --git 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/IStats.java
 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/IStats.java
index 5b28f42e..234ff492 100644
--- 
a/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/IStats.java
+++ 
b/commons-jcs4-core/src/main/java/org/apache/commons/jcs4/engine/stats/behavior/IStats.java
@@ -44,11 +44,26 @@ public interface IStats
     String getTypeName();
 
     /**
-     * Sets the generic statistical or historical data.
+     * Adds generic statistical or historical data.
      *
      * @param stats
      */
-    void setStatElements( List<IStatElement<?>> stats );
+    void addStatElements( List<IStatElement<?>> stats );
+
+    /**
+     * Adds generic statistical or historical data.
+     *
+     * @param stats
+     */
+    void addStatElement(IStatElement<?> stats);
+
+    /**
+     * Adds generic statistical or historical data.
+     *
+     * @param name name of the StatElement
+     * @param data value of the StatElement
+     */
+    <V> void addStatElement(String name, V data);
 
     /**
      * Sets the type name, such as "LRU Memory Cache." No formal type is 
defined.
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSRemovalSimpleConcurrentTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSRemovalSimpleConcurrentTest.java
index fd0e2f19..bd9cead6 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSRemovalSimpleConcurrentTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSRemovalSimpleConcurrentTest.java
@@ -75,7 +75,7 @@ class JCSRemovalSimpleConcurrentTest
             final String res = jcs.get( i + ":key" );
             if ( res != null )
             {
-                assertNull( res, "[" + i + ":key] should be null after 
remvoeall" + jcs.getStats() );
+                assertNull( res, "[" + i + ":key] should be null after 
remvoeall" + jcs.getStatistics() );
             }
         }
     }
@@ -111,7 +111,7 @@ class JCSRemovalSimpleConcurrentTest
             final String res = jcs.get( i + ":key" );
             if ( res != null )
             {
-                assertNull( res, "[" + i + ":key] should be null after 
remvoeall" + jcs.getStats() );
+                assertNull( res, "[" + i + ":key] should be null after 
remvoeall" + jcs.getStatistics() );
             }
         }
     }
@@ -165,13 +165,13 @@ class JCSRemovalSimpleConcurrentTest
         for ( int i = count; i >= 0; i-- )
         {
             final String res = jcs.get( "key:" + i + ":anotherpart" );
-            assertNotNull( res, "[key:" + i + ":anotherpart] should not be 
null, " + jcs.getStats() );
+            assertNotNull( res, "[key:" + i + ":anotherpart] should not be 
null, " + jcs.getStatistics() );
         }
 
         for ( int i = 0; i < count; i++ )
         {
             jcs.remove( "key:" + i + ":" );
-            assertNull( jcs.get( "key:" + i + ":anotherpart" ), jcs.getStats() 
);
+            assertNull( jcs.get( "key:" + i + ":anotherpart" ), 
jcs.getStatistics().toString() );
         }
 
     }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSThrashTest.java 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSThrashTest.java
index b7e5440f..54afaa5e 100644
--- a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSThrashTest.java
+++ b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/JCSThrashTest.java
@@ -217,7 +217,7 @@ class JCSThrashTest
         jcs.put( key, value );
 
         // Get the element
-        LOG.info( "jcs.getStats(): " + jcs.getStatistics() );
+        LOG.info( "jcs.getStatistics(): " + jcs.getStatistics() );
         assertEquals( 1, getListSize() );
         assertNotNull( jcs.get( key ) );
         assertEquals( value, jcs.get( key ) );
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
index 7ac9cf36..92d843ca 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/access/TestCacheAccess.java
@@ -694,7 +694,7 @@ public class TestCacheAccess
 
                 if ( i % 10000 == 0 )
                 {
-                    p( cache_control.getStats() );
+                    p( cache_control.getStatistics().toString() );
                 }
 
             }
@@ -914,7 +914,7 @@ public class TestCacheAccess
                 }
                 else if ( message.startsWith( "stats" ) )
                 {
-                    p( cache_control.getStats() );
+                    p( cache_control.getStatistics().toString() );
                 }
                 else if ( message.startsWith( "gc" ) )
                 {
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/admin/AdminBeanUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/admin/AdminBeanUnitTest.java
index 54fd0bdd..465763b8 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/admin/AdminBeanUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/admin/AdminBeanUnitTest.java
@@ -107,13 +107,11 @@ class AdminBeanUnitTest
 
         for (final CacheRegionInfo info : regions)
         {
-
             if ( info.cacheName().equals( regionName ) )
             {
                 foundRegion = true;
 
                 assertTrue( info.byteCount() > 5, "Byte count should be 
greater than 5." );
-
                 assertNotNull( info.cacheStatistics(), "Should have stats." );
             }
         }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
index 335cf971..aaf9602d 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/MockAuxiliaryCache.java
@@ -157,15 +157,6 @@ public class MockAuxiliaryCache<K, V>
         return null;
     }
 
-    /**
-     * @return null
-     */
-    @Override
-    public String getStats()
-    {
-        return null;
-    }
-
     /**
      * @return int
      */
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCacheUnitTest.java
index d6d00c95..0e6c1525 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/AbstractDiskCacheUnitTest.java
@@ -304,7 +304,7 @@ class AbstractDiskCacheUnitTest
         final ICacheElement<String, String> result = diskCache.get( key );
 
         // VERIFY
-        //System.out.println( diskCache.getStats() );
+        //System.out.println( diskCache.getStatistics() );
         assertNotNull( result, "Item should be in the map." );
     }
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/AbstractBlockDiskCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/AbstractBlockDiskCacheUnitTest.java
index efde683c..deb1b244 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/AbstractBlockDiskCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/AbstractBlockDiskCacheUnitTest.java
@@ -278,7 +278,7 @@ public abstract class AbstractBlockDiskCacheUnitTest{
         // VERIFY
         assertEquals( 10, matchingResults.size(), "Wrong number returned" );
         // System.out.println( "matchingResults.keySet() " + 
matchingResults.keySet() );
-        // System.out.println( "\nAFTER TEST \n" + diskCache.getStats() );
+        // System.out.println( "\nAFTER TEST \n" + diskCache.getStatistics() );
     }
 
     @Test
@@ -306,7 +306,7 @@ public abstract class AbstractBlockDiskCacheUnitTest{
         // VERIFY
         assertEquals( 10, matchingResults.size(), "Wrong number returned" );
         // System.out.println( "matchingResults.keySet() " + 
matchingResults.keySet() );
-        // System.out.println( "\nAFTER TEST \n" + diskCache.getStats() );
+        // System.out.println( "\nAFTER TEST \n" + diskCache.getStatistics() );
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
index 2bb5c7ab..ff54d4d6 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheConcurrentUnitTest.java
@@ -101,7 +101,7 @@ public class BlockDiskCacheConcurrentUnitTest
         // Verify removal
         for ( int i = 0; i < items; i++ )
         {
-            assertNull( jcs.get( i + ":key" ), "Removed key should be null: " 
+ i + ":key\n stats " + jcs.getStats() );
+            assertNull( jcs.get( i + ":key" ), "Removed key should be null: " 
+ i + ":key\n stats " + jcs.getStatistics() );
         }
     }
 
@@ -150,7 +150,7 @@ public class BlockDiskCacheConcurrentUnitTest
         // Verify removal
         for ( int i = start; i < end; i++ )
         {
-            assertNull( jcs.get( i + ":key" ), "Removed key should be null: " 
+ i + ":key\n stats " + jcs.getStats() );
+            assertNull( jcs.get( i + ":key" ), "Removed key should be null: " 
+ i + ":key\n stats " + jcs.getStatistics() );
         }
     }
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheSteadyLoadTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheSteadyLoadTest.java
index 00590d66..0d0d2e61 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheSteadyLoadTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskCacheSteadyLoadTest.java
@@ -135,23 +135,23 @@ class BlockDiskCacheSteadyLoadTest
 //                System.out.println( LOG_DIVIDER );
 //                System.out.println( "Elapsed " + 
timer.getElapsedTimeString() );
 //                System.out.println( "Run count: " + runCount + " Average 
size: " + ( totalSize / totalPut ) + "\n"
-//                    + jcs.getStats() );
+//                    + jcs.getStatistics() );
                 logMemoryUsage();
             }
         }
 
         Thread.sleep( 3000 );
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
         logMemoryUsage();
 
         Thread.sleep( 10000 );
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
         logMemoryUsage();
 
         System.gc();
         Thread.sleep( 3000 );
         System.gc();
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
         logMemoryUsage();
     }
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskUnitTest.java
index 4807d0c1..21641ae5 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/BlockDiskUnitTest.java
@@ -369,7 +369,7 @@ class BlockDiskUnitTest
             assertEquals( numBlocksPerElement, blocks.length, "Wrong number of 
blocks returned." );
 
             // We check the array contents, too, to ensure we read back what 
we wrote out
-            for (int j = 0 ; j < src.length ; j++) {
+            for (int j = 0; j < src.length; j++) {
                 assertEquals( src[j], result[j], "Mismatch at offset " + j + " 
in attempt # " + ( i + 1 ) );
             }
         }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/HugeQuantityBlockDiskCacheLoadTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/HugeQuantityBlockDiskCacheLoadTest.java
index 83162a85..ffb66aec 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/HugeQuantityBlockDiskCacheLoadTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/block/HugeQuantityBlockDiskCacheLoadTest.java
@@ -88,13 +88,13 @@ class HugeQuantityBlockDiskCacheLoadTest
                 jcs.put( i + ":key", region + " data " + i );
             }
 
-            System.out.println( jcs.getStats() );
+            System.out.println( jcs.getStatistics() );
             System.out.println( "--------------------------" );
             System.out.println( "After put: " + measureMemoryUse() );
 
             Thread.sleep( 5000 );
 
-            System.out.println( jcs.getStats() );
+            System.out.println( jcs.getStatistics() );
             System.out.println( "--------------------------" );
             System.out.println( "After wait: " + measureMemoryUse() );
 
@@ -104,7 +104,7 @@ class HugeQuantityBlockDiskCacheLoadTest
                 System.out.println( "--------------------------" );
                 System.out.println( "After sleep. " + 
timer.getElapsedTimeString() + " memory used = "
                     + measureMemoryUse() );
-                System.out.println( jcs.getStats() );
+                System.out.println( jcs.getStatistics() );
             }
 
             // Test that all items are in cache
@@ -128,7 +128,7 @@ class HugeQuantityBlockDiskCacheLoadTest
         finally
         {
             // dump the stats to the report
-            System.out.println( jcs.getStats() );
+            System.out.println( jcs.getStatistics() );
             System.out.println( "--------------------------" );
             final long endMemory = measureMemoryUse();
             System.out.println( "End: " + endMemory + " diff = " + ( endMemory 
- initialMemory ) );
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
index 82555d27..eda9bbed 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/AbstractIndexDiskCacheUnitTest.java
@@ -152,9 +152,9 @@ public abstract class AbstractIndexDiskCacheUnitTest{
         final long expectedSize = DiskTestObjectUtil.totalSize(elements, 
numberToRemove);
         final long resultSize = disk.getBytesFree();
 
-        // System.out.println( "testBytesFreeSize stats " + disk.getStats() );
+        // System.out.println( "testBytesFreeSize stats " + 
disk.getStatistics() );
 
-        assertEquals( expectedSize, resultSize, "Wrong bytes free size" + 
disk.getStats() );
+        assertEquals( expectedSize, resultSize, "Wrong bytes free size" + 
disk.getStatistics() );
 
         // add half as many as we removed. These should all use spots in the 
recycle bin.
         final int numberToAdd = numberToRemove / 2;
@@ -165,7 +165,7 @@ public abstract class AbstractIndexDiskCacheUnitTest{
 
         final long expectedSize2 = DiskTestObjectUtil.totalSize(elements, 
numberToAdd);
         final long resultSize2 = disk.getBytesFree();
-        assertEquals( expectedSize2, resultSize2, "Wrong bytes free size" + 
disk.getStats() );
+        assertEquals( expectedSize2, resultSize2, "Wrong bytes free size" + 
disk.getStatistics() );
     }
 
     /**
@@ -259,7 +259,7 @@ public abstract class AbstractIndexDiskCacheUnitTest{
         final long expectedSize = DiskTestObjectUtil.totalSize(elements, 
numberToInsert);
         final long resultSize = disk.getDataFileSize();
 
-        // System.out.println( "testFileSize stats " + disk.getStats() );
+        // System.out.println( "testFileSize stats " + disk.getStatistics() );
 
         assertEquals( expectedSize, resultSize, "Wrong file size" );
     }
@@ -510,7 +510,7 @@ public abstract class AbstractIndexDiskCacheUnitTest{
         // VERIFY
         assertEquals( 10, matchingResults.size(), "Wrong number returned" );
         // System.out.println( "matchingResults.keySet() " + 
matchingResults.keySet() );
-        // System.out.println( "\nAFTER TEST \n" + diskCache.getStats() );
+        // System.out.println( "\nAFTER TEST \n" + diskCache.getStatistics() );
     }
 
     /**
@@ -544,7 +544,7 @@ public abstract class AbstractIndexDiskCacheUnitTest{
         // VERIFY
         assertEquals( 10, matchingResults.size(), "Wrong number returned" );
         // System.out.println( "matchingResults.keySet() " + 
matchingResults.keySet() );
-        // System.out.println( "\nAFTER TEST \n" + diskCache.getStats() );
+        // System.out.println( "\nAFTER TEST \n" + diskCache.getStatistics() );
     }
 
     /**
@@ -646,7 +646,7 @@ public abstract class AbstractIndexDiskCacheUnitTest{
 
         // verify that we used the correct number of spots
         assertEquals( numberToAdd, disk.getRecyleCount(),
-                      "The recycle bin should have the number removed." + 
disk.getStats() );
+                      "The recycle bin should have the number removed." + 
disk.getStatistics() );
     }
 
     /**
@@ -887,7 +887,7 @@ public abstract class AbstractIndexDiskCacheUnitTest{
             assertNotNull( element, "element " + i + ":key is missing" );
             assertEquals( "data:" + i, element.getVal(), "value key:" + i );
         }
-        // System.out.println( disk.getStats() );
+        // System.out.println( disk.getStatistics() );
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/HugeQuantityIndDiskCacheLoadTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/HugeQuantityIndDiskCacheLoadTest.java
index 8f730c79..b8f6b3b7 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/HugeQuantityIndDiskCacheLoadTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/HugeQuantityIndDiskCacheLoadTest.java
@@ -79,13 +79,13 @@ class HugeQuantityIndDiskCacheLoadTest
                 jcs.put( i + ":key", region + " data " + i );
             }
 
-            System.out.println( jcs.getStats() );
+            System.out.println( jcs.getStatistics() );
             System.out.println( "--------------------------" );
             System.out.println( "After put: " + measureMemoryUse() );
 
             Thread.sleep( 5000 );
 
-            System.out.println( jcs.getStats() );
+            System.out.println( jcs.getStatistics() );
             System.out.println( "--------------------------" );
             System.out.println( "After wait: " + measureMemoryUse() );
 
@@ -110,14 +110,14 @@ class HugeQuantityIndDiskCacheLoadTest
             // for ( int i = 0; i < items; i++ )
             // {
             // assertNull( "Removed key should be null: " + i + ":key\n
-            // stats " + jcs.getStats(), jcs.get( i + ":key" ) );
+            // stats " + jcs.getStatistics(), jcs.get( i + ":key" ) );
             // }
 
         }
         finally
         {
             // dump the stats to the report
-            System.out.println( jcs.getStats() );
+            System.out.println( jcs.getStatistics() );
             System.out.println( "--------------------------" );
             System.out.println( "End: " + measureMemoryUse() );
         }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java
index c0bd4bf6..276c5cf5 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheConcurrentUnitTest.java
@@ -95,7 +95,7 @@ public class IndexedDiskCacheConcurrentUnitTest
         for ( int i = 0; i < items; i++ )
         {
             assertNull( jcs.get( i + ":key" ),
-                        "Removed key should be null: " + i + ":key\n stats " + 
jcs.getStats() );
+                        "Removed key should be null: " + i + ":key\n stats " + 
jcs.getStatistics() );
         }
     }
 
@@ -145,7 +145,7 @@ public class IndexedDiskCacheConcurrentUnitTest
         for ( int i = start; i < end; i++ )
         {
             assertNull( jcs.get( i + ":key" ),
-                        "Removed key should be null: " + i + ":key\n stats " + 
jcs.getStats() );
+                        "Removed key should be null: " + i + ":key\n stats " + 
jcs.getStatistics() );
         }
     }
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheDefragPerformanceTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheDefragPerformanceTest.java
index 18e65a3b..87e7ff6f 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheDefragPerformanceTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheDefragPerformanceTest.java
@@ -35,31 +35,11 @@ class IndexedDiskCacheDefragPerformanceTest
     /**
      * Resembles a cached image.
      */
-    private static final class Tile
+    private record Tile(Integer id, byte[] imageBytes )
         implements Serializable
     {
         /** Don't change */
         private static final long serialVersionUID = 1L;
-
-        /**
-         * Key
-         */
-        public Integer id;
-
-        /**
-         * Byte size
-         */
-        public byte[] imageBytes;
-
-        /**
-         * @param id
-         * @param imageBytes
-         */
-        public Tile( final Integer id, final byte[] imageBytes )
-        {
-            this.id = id;
-            this.imageBytes = imageBytes;
-        }
     }
 
     /** For readability */
@@ -130,18 +110,18 @@ class IndexedDiskCacheDefragPerformanceTest
 
         System.out.println( LOG_DIVIDER );
         System.out.println( "Total elements = " + TOTAL_ELEMENTS );
-        System.out.println( "Stats prior to sleeping " + jcs.getStats() );
+        System.out.println( "Stats prior to sleeping " + jcs.getStatistics() );
 
         // Allow system to settle down
         System.out.println( "Sleeping for a minute." );
         Thread.sleep( 60000 );
 
         System.out.println( LOG_DIVIDER );
-        System.out.println( "Stats prior to dispose " + jcs.getStats() );
+        System.out.println( "Stats prior to dispose " + jcs.getStatistics() );
 
         jcs.dispose();
         System.out.println( LOG_DIVIDER );
-        System.out.println( "Stats after dispose " + jcs.getStats() );
+        System.out.println( "Stats after dispose " + jcs.getStatistics() );
         System.out.println( "Done testing." );
     }
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java
index a3664c97..37150b5e 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheNoMemoryUnitTest.java
@@ -98,7 +98,7 @@ public class IndexedDiskCacheNoMemoryUnitTest
         for ( int i = 0; i < items; i++ )
         {
             assertNull( jcs.get( i + ":key" ),
-                        "Removed key should be null: " + i + ":key\n stats " + 
jcs.getStats() );
+                        "Removed key should be null: " + i + ":key\n stats " + 
jcs.getStatistics() );
         }
     }
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheSteadyLoadTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheSteadyLoadTest.java
index b1d2c03f..eef4a70c 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheSteadyLoadTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/indexed/IndexedDiskCacheSteadyLoadTest.java
@@ -129,23 +129,23 @@ class IndexedDiskCacheSteadyLoadTest
                 System.out.println( LOG_DIVIDER );
                 System.out.println( "Elapsed " + timer.getElapsedTimeString() 
);
                 System.out.println( "Run count: " + runCount + " Average size: 
" + totalSize / totalPut + "\n"
-                    + jcs.getStats() );
+                    + jcs.getStatistics() );
                 logMemoryUsage();
             }
         }
 
         Thread.sleep( 3000 );
-        System.out.println( jcs.getStats() );
+        System.out.println( jcs.getStatistics() );
         logMemoryUsage();
 
         Thread.sleep( 10000 );
-        System.out.println( jcs.getStats() );
+        System.out.println( jcs.getStatistics() );
         logMemoryUsage();
 
         System.gc();
         Thread.sleep( 3000 );
         System.gc();
-        System.out.println( jcs.getStats() );
+        System.out.println( jcs.getStatistics() );
         logMemoryUsage();
     }
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java
index 0bc14093..b172facd 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheRemovalUnitTest.java
@@ -82,6 +82,6 @@ class JDBCDiskCacheRemovalUnitTest
         final String resultAfterRemove = jcs.get( keyPart1 + ":" + keyPart2 );
         assertNull( resultAfterRemove, "Should not have a result after 
removal." );
 
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
     }
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheSharedPoolUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheSharedPoolUnitTest.java
index baaf45dd..e831f4c6 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheSharedPoolUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/JDBCDiskCacheSharedPoolUnitTest.java
@@ -53,7 +53,7 @@ public class JDBCDiskCacheSharedPoolUnitTest
     {
         final CacheAccess<String, String> jcs = JCS.getInstance( region );
 
-//        System.out.println( "BEFORE PUT \n" + jcs.getStats() );
+//        System.out.println( "BEFORE PUT \n" + jcs.getStatistics() );
 
         // Add items to cache
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/hsql/HSQLDiskCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/hsql/HSQLDiskCacheUnitTest.java
index c617efcb..8953ed32 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/hsql/HSQLDiskCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/disk/jdbc/hsql/HSQLDiskCacheUnitTest.java
@@ -133,7 +133,7 @@ class HSQLDiskCacheUnitTest
         // I discovered it and removed it.
         // Thread.sleep( 500 );
 
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
 
         jcs.clear();
 
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPConcurrentRandomTestUtil.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPConcurrentRandomTestUtil.java
index 4b218455..945b24ea 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPConcurrentRandomTestUtil.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPConcurrentRandomTestUtil.java
@@ -128,7 +128,7 @@ public class LateralTCPConcurrentRandomTestUtil
 
                 if ( i % 100 == 0 )
                 {
-                    p( cache.getStats() );
+                    p( cache.getStatistics().toString() );
                 }
 
             }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPFilterRemoveHashCodeUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPFilterRemoveHashCodeUnitTest.java
index a875b81e..73c6d1c5 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPFilterRemoveHashCodeUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPFilterRemoveHashCodeUnitTest.java
@@ -124,7 +124,7 @@ public class LateralTCPFilterRemoveHashCodeUnitTest
          * ":data" + i + " junk asdfffffffadfasdfasf " + kn + ":" + n );
          * service.update( element ); if ( show ) { p( "put " + key ); }
          *
-         * if ( i % 100 == 0 ) { System.out.println( cache.getStats() ); }
+         * if ( i % 100 == 0 ) { System.out.println( cache.getStatistics() ); }
          *  } p( "Finished cycle of " + numOps ); } catch ( Exception e ) { p(
          * e.toString() ); e.printStackTrace( System.out ); throw e; }
          */
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPIssueRemoveOnPutUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPIssueRemoveOnPutUnitTest.java
index 0f5845cd..02b312c7 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPIssueRemoveOnPutUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/lateral/socket/tcp/LateralTCPIssueRemoveOnPutUnitTest.java
@@ -110,7 +110,7 @@ public class LateralTCPIssueRemoveOnPutUnitTest
 
                 if (i % 100 == 0)
                 {
-                    p(cache.getStats());
+                    p(cache.getStatistics().toString());
                 }
 
             }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
index 8aae54d4..5d2d7925 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/MockRemoteCacheClient.java
@@ -33,6 +33,7 @@ import 
org.apache.commons.jcs4.auxiliary.remote.behavior.IRemoteCacheListener;
 import org.apache.commons.jcs4.engine.CacheStatus;
 import org.apache.commons.jcs4.engine.behavior.ICacheElement;
 import org.apache.commons.jcs4.engine.behavior.ICacheServiceNonLocal;
+import org.apache.commons.jcs4.engine.stats.Stats;
 import org.apache.commons.jcs4.engine.stats.behavior.IStats;
 import org.apache.commons.jcs4.log.Log;
 
@@ -205,18 +206,7 @@ public class MockRemoteCacheClient<K, V>
     @Override
     public IStats getStatistics()
     {
-        return null;
-    }
-
-    /**
-     * Returns the cache stats.
-     *
-     * @return String of important historical information.
-     */
-    @Override
-    public String getStats()
-    {
-        return null;
+        return new Stats("");
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitUnitTest.java
index f8e46602..385292ee 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/RemoteCacheNoWaitUnitTest.java
@@ -138,7 +138,7 @@ class RemoteCacheNoWaitUnitTest
         final RemoteCacheNoWait<String, String> noWait = new 
RemoteCacheNoWait<>( client );
 
         // DO WORK
-        final String result = noWait.getStats();
+        final String result = noWait.getStatistics().toString();
 
         // VERIFY
         assertTrue( result.indexOf( "ALIVE" ) != -1, "Status should contain 
'ALIVE'" );
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java
index 1bc5865c..f0c94e2c 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/auxiliary/remote/http/client/RemoteHttpCacheManualTester.java
@@ -53,7 +53,7 @@ class RemoteHttpCacheManualTester
 
         jcs.put( "TestKey", "TestValue" );
 
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
 
         for ( int i = 1; i < items; i++ )
         {
@@ -73,6 +73,6 @@ class RemoteHttpCacheManualTester
         jcs.remove( "300:key" );
         assertNull( jcs.get( "TestKey" ) );
 
-//        System.out.println( jcs.getStats() );
+//        System.out.println( jcs.getStatistics() );
     }
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CacheManagerStatsUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CacheManagerStatsUnitTest.java
index cb79e9bc..577e1b24 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CacheManagerStatsUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CacheManagerStatsUnitTest.java
@@ -21,9 +21,10 @@ package org.apache.commons.jcs4.engine.control;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.util.Arrays;
+
 import org.apache.commons.jcs4.JCS;
 import org.apache.commons.jcs4.access.CacheAccess;
-import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -52,21 +53,10 @@ class CacheManagerStatsUnitTest
         cache.get( "testKey" );
 
         final CompositeCacheManager mgr = CompositeCacheManager.getInstance();
-        final String statsString = mgr.getStats();
-
-//        System.out.println( statsString );
+        final String statsString = Arrays.toString(mgr.getStatistics());
 
         assertTrue( statsString.indexOf( "testCache1" ) != -1, "Should have 
the cacheName in here." );
         assertTrue( statsString.indexOf( "HitCountRam" ) != -1, "Should have 
the HitCountRam in here." );
         assertTrue( statsString.indexOf( "4" ) != -1, "Should have the 4 in 
here." );
-
-        final ICacheStats[] stats = mgr.getStatistics();
-        final int statsLen = stats.length;
-//        System.out.println( "statsLen = " + statsLen );
-        for ( int i = 0; i < statsLen; i++ )
-        {
-            // TODO finish
-        }
     }
-
 }
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
index 65c94ccb..37f6eb6e 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/CompositeCacheDiskUsageUnitTest.java
@@ -173,13 +173,6 @@ class CompositeCacheDiskUsageUnitTest
             return null;
         }
 
-        /** @return null */
-        @Override
-        public String getStats()
-        {
-            return null;
-        }
-
         /** @return 0 */
         @Override
         public CacheStatus getStatus()
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/MockCompositeCacheManager.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/MockCompositeCacheManager.java
index e3d6d97b..8f59ad2c 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/MockCompositeCacheManager.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/control/MockCompositeCacheManager.java
@@ -26,6 +26,7 @@ import 
org.apache.commons.jcs4.engine.CompositeCacheAttributes;
 import org.apache.commons.jcs4.engine.ElementAttributes;
 import org.apache.commons.jcs4.engine.behavior.ICompositeCacheManager;
 import org.apache.commons.jcs4.engine.behavior.IShutdownObserver;
+import org.apache.commons.jcs4.engine.stats.behavior.ICacheStats;
 
 /** For testing. */
 public class MockCompositeCacheManager
@@ -92,9 +93,9 @@ public class MockCompositeCacheManager
 
     /** @return Mock */
     @Override
-    public String getStats()
+    public ICacheStats[] getStatistics()
     {
-        return "Mock";
+        return null;
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCacheUnitTest.java
index 21c4e22e..f3b741eb 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/lru/LHMLRUMemoryCacheUnitTest.java
@@ -130,7 +130,7 @@ class LHMLRUMemoryCacheUnitTest
             cache.put( i + ":key", "myregion data " + i );
         }
 
-        final String stats = cache.getStats();
+        final String stats = cache.getStatistics().toString();
 
         //System.out.println( stats );
 
@@ -176,7 +176,7 @@ class LHMLRUMemoryCacheUnitTest
         for ( int i = max -1; i >= 0; i-- )
         {
             final String value = cache.get( i + ":key" );
-            assertNull( value, "Should not have value for key [" + i + ":key] 
in the cache." + cache.getStats() );
+            assertNull( value, "Should not have value for key [" + i + ":key] 
in the cache." + cache.getStatistics() );
         }
 
         // Test that last items are in cache
@@ -198,7 +198,7 @@ class LHMLRUMemoryCacheUnitTest
         for ( int i = max-1; i >= 0; i-- )
         {
             assertNull( elements.get( i + ":key" ),
-                        "Should not have value for key [" + i + ":key] in the 
cache." + cache.getStats() );
+                        "Should not have value for key [" + i + ":key] in the 
cache." + cache.getStatistics() );
         }
         for ( int i = max + 2; i < items; i++ )
         {
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/mru/MRUMemoryCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/mru/MRUMemoryCacheUnitTest.java
index 93b5da3b..c457cde8 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/mru/MRUMemoryCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/mru/MRUMemoryCacheUnitTest.java
@@ -130,9 +130,7 @@ class MRUMemoryCacheUnitTest
             cache.put( i + ":key", "myregion data " + i );
         }
 
-        final String stats = cache.getStats();
-
-//        System.out.println( stats );
+        final String stats = cache.getStatistics().toString();
 
         // TODO improve stats check
         assertTrue( stats.indexOf( "2000" ) != -1, "Should have 200 puts" );
@@ -176,7 +174,7 @@ class MRUMemoryCacheUnitTest
         for ( int i = max -1; i >= 0; i-- )
         {
             final String value = cache.get( i + ":key" );
-            assertNull( value, "Should not have value for key [" + i + ":key] 
in the cache." + cache.getStats() );
+            assertNull( value, "Should not have value for key [" + i + ":key] 
in the cache." + cache.getStatistics() );
         }
 
         // Test that last items are in cache
@@ -198,7 +196,7 @@ class MRUMemoryCacheUnitTest
         for ( int i = max-1; i >= 0; i-- )
         {
             assertNull( elements.get( i + ":key" ),
-                        "Should not have value for key [" + i + ":key] in the 
cache." + cache.getStats() );
+                        "Should not have value for key [" + i + ":key] in the 
cache." + cache.getStatistics() );
         }
         for ( int i = max + 2; i < items; i++ )
         {
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCacheUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCacheUnitTest.java
index b38db7f2..4a6933b1 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCacheUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/engine/memory/soft/SoftReferenceMemoryCacheUnitTest.java
@@ -179,7 +179,7 @@ class SoftReferenceMemoryCacheUnitTest
             assertEquals( "myregion data " + i, element.getVal(), "value " + i 
+ ":key" );
         }
 
-        // System.out.println(cache.getStats());
+        // System.out.println(cache.getStatistics());
     }
 
     /**
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryUnitTest.java
index e344cd8c..f5331698 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/discovery/UDPDiscoveryUnitTest.java
@@ -82,7 +82,7 @@ class UDPDiscoveryUnitTest
             // send max messages
             final int max = 10;
             int cnt = 0;
-            for ( ; cnt < max; cnt++ )
+            for (; cnt < max; cnt++ )
             {
                 sender.passiveBroadcast( "localhost", 1111, cacheNames, 1 );
                 SleepUtil.sleepAtLeast( 20 );
diff --git 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/serialization/SerializerUnitTest.java
 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/serialization/SerializerUnitTest.java
index ab68e8de..ba32b2a5 100644
--- 
a/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/serialization/SerializerUnitTest.java
+++ 
b/commons-jcs4-core/src/test/java/org/apache/commons/jcs4/utils/serialization/SerializerUnitTest.java
@@ -89,7 +89,7 @@ class SerializerUnitTest
         for ( int i = 0; i < 500; i++ )
         {
             final String res = jcs2.get( "key:" + i );
-            assertNotNull( res, "[key:" + i + "] should not be null, " + 
jcs2.getStats() );
+            assertNotNull( res, "[key:" + i + "] should not be null, " + 
jcs2.getStatistics() );
         }
     }
 
@@ -126,7 +126,7 @@ class SerializerUnitTest
         for ( int i = 0; i < count; i++ )
         {
             final String res = jcs.get( "key:" + i );
-            assertNotNull( res, "[key:" + i + "] should not be null, " + 
jcs.getStats() );
+            assertNotNull( res, "[key:" + i + "] should not be null, " + 
jcs.getStatistics() );
         }
     }
 }

Reply via email to