You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ud...@apache.org on 2018/08/08 22:10:02 UTC

[geode] 01/01: Refactored stats to have public interfaces in own package Refactored DistributedSystem.java and InternalDistributedSystem.java to now contain a InternalDistributedSystemStats.java instead of being one Added Micrometer stats implementations Added StatsFactory, which currently only provides Micrometer implementations

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

udo pushed a commit to branch feature/Micrometer
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 06780b59e32be13f23f8362c229d29fd6ab55830
Author: Udo Kohlmeyer <uk...@pivotal.io>
AuthorDate: Wed Jul 11 17:05:17 2018 -0700

    Refactored stats to have public interfaces in own package
    Refactored DistributedSystem.java and InternalDistributedSystem.java to
    now contain a InternalDistributedSystemStats.java instead of being one
    Added Micrometer stats implementations
    Added StatsFactory, which currently only provides Micrometer
    implementations
---
 .../internal/common/AbstractSessionCache.java      |    2 +-
 .../session/catalina/AbstractSessionCache.java     |    2 +-
 .../catalina/internal/DeltaSessionStatistics.java  |   34 +-
 .../geode/modules/util/ModuleStatistics.java       |   32 +-
 geode-common/build.gradle                          |    1 +
 .../cache/client/internal/ConnectionStats.java     |  272 ++
 .../cache/query/internal/CqQueryVsdStats.java      |   41 +
 .../cache/query/internal/cq/CqServiceVsdStats.java |   47 +
 .../apache/geode/distributed/internal/DMStats.java |    2 +-
 .../distributed/internal/DistributionStats.java    |  480 +++
 .../geode/distributed/internal/LocatorStats.java   |   28 +
 .../geode/distributed/internal/PoolStatHelper.java |    0
 .../distributed/internal/QueueStatHelper.java      |    0
 .../internal/ThrottledMemQueueStatHelper.java      |    0
 .../internal/ThrottledQueueStatHelper.java         |    0
 .../internal/locks/DistributedLockStats.java       |    5 +
 .../geode/internal/cache/CachePerfStats.java       |  353 ++
 .../geode/internal/cache/DiskDirectoryStats.java   |   17 +
 .../geode/internal/cache/DiskRegionStats.java      |   53 +
 .../geode/internal/cache/DiskStoreStats.java       |   99 +
 .../internal/cache/PartitionedRegionStats.java     |  224 ++
 .../org/apache/geode/internal/cache/PoolStats.java |   80 +
 .../geode/internal/cache/RegionPerfStats.java      |    4 +
 .../cache/control/ResourceManagerStats.java        |  142 +
 .../cache/eviction/CountLRUEvictionStats.java      |    4 +
 .../internal/cache/eviction/EvictionStats.java     |    2 +-
 .../cache/eviction/HeapLRUEvictionStats.java       |    4 +
 .../cache/eviction/MemoryLRUEvictionStats.java     |    4 +
 .../internal/cache/execute/FunctionStats.java      |   46 +
 .../internal/cache/ha/HARegionQueueStats.java      |   56 +
 .../internal/cache/tier/sockets/CCUStats.java      |    5 +
 .../tier/sockets/CacheClientNotifierStats.java     |   47 +
 .../cache/tier/sockets/CacheServerStats.java       |  184 +
 .../internal/cache/tier/sockets/MessageStats.java  |    0
 .../internal/cache/wan/GatewayReceiverStats.java   |   45 +
 .../internal/cache/wan/GatewaySenderStats.java     |  142 +
 .../internal/offheap/OffHeapStorageStats.java      |   53 +
 .../geode/statistics/GFSStatsImplementor.java      |   14 +
 .../geode/statistics}/StatisticDescriptor.java     |    2 +-
 .../org/apache/geode/statistics}/Statistics.java   |    2 +-
 .../geode/statistics}/StatisticsFactory.java       |    3 +-
 .../apache/geode/statistics}/StatisticsType.java   |    7 +-
 .../geode/statistics}/StatisticsTypeFactory.java   |  111 +-
 .../org/apache/geode/statistics/StatsFactory.java  |  321 ++
 .../apache/geode/statistics/StatsImplementor.java  |    7 +
 geode-core/build.gradle                            |   24 +
 .../geode/cache/ConnectionPoolDUnitTest.java       |   10 +-
 .../management/MemoryThresholdsDUnitTest.java      |    4 +-
 .../geode/cache30/ClientMembershipDUnitTest.java   |    8 +-
 .../DistributedMulticastRegionDUnitTest.java       |    2 +-
 ...tedMulticastRegionWithUDPSecurityDUnitTest.java |    2 +-
 .../cache/DeltaPropagationStatsDUnitTest.java      |    3 +-
 .../cache/PartitionedRegionStatsDUnitTest.java     |    2 +-
 .../execute/FunctionServiceStatsDUnitTest.java     |  142 +-
 .../tier/sockets/DurableClientStatsDUnitTest.java  |    4 +-
 .../compression/CompressionStatsDUnitTest.java     |    6 +-
 .../statistics/StatisticsDistributedTest.java      |   28 +-
 .../management/MemberMBeanAttributesDUnitTest.java |    2 +-
 .../internal/MemberHealthEvaluatorJUnitTest.java   |    2 +-
 .../AutoConnectionSourceImplJUnitTest.java         |    7 +-
 .../client/internal/QueueManagerJUnitTest.java     |   33 +-
 .../pooling/ConnectionManagerJUnitTest.java        |   11 +-
 .../gms/fd/GMSHealthMonitorJUnitTest.java          |    3 +-
 .../gms/locator/GMSLocatorRecoveryJUnitTest.java   |   10 +-
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |    8 +-
 .../internal/cache/ComplexDiskRegionJUnitTest.java |    6 +-
 .../internal/cache/DiskInitFileJUnitTest.java      |    2 +-
 .../geode/internal/cache/OplogJUnitTest.java       |    6 +-
 .../geode/internal/cache/OplogRVVJUnitTest.java    |    5 +-
 .../cache/PartitionedRegionStatsJUnitTest.java     |    2 +-
 .../internal/cache/SimpleDiskRegionJUnitTest.java  |    4 +-
 .../CacheServerMaxConnectionsJUnitTest.java        |    8 +-
 .../ClientHealthMonitorIntegrationTest.java        |   14 +-
 .../sockets/ServerConnectionIntegrationTest.java   |   12 +-
 .../MemoryAllocatorFillPatternIntegrationTest.java |    2 +-
 .../statistics/DiskSpaceLimitIntegrationTest.java  |    7 +-
 ...DistributedSystemStatisticsIntegrationTest.java |   10 +-
 ...ributedSystemStatisticsTypeIntegrationTest.java |    8 +-
 .../statistics/FileSizeLimitIntegrationTest.java   |    7 +-
 .../GemFireStatSamplerIntegrationTest.java         |   77 +-
 .../internal/statistics/LinuxSystemStatsTest.java  |    8 +-
 .../SimpleStatSamplerIntegrationTest.java          |    4 +-
 ...rchiveWithConsecutiveResourceInstGenerator.java |    8 +-
 ...chiveWithMissingResourceTypeRegressionTest.java |    1 -
 .../StatArchiveWriterReaderIntegrationTest.java    |   22 +-
 .../statistics/StatSamplerIntegrationTest.java     |    7 +-
 .../StatTypesAreRolledOverRegressionTest.java      |    7 +-
 .../statistics/ValueMonitorIntegrationTest.java    |    6 +-
 .../internal/stats50/AtomicStatsJUnitTest.java     |   16 +-
 .../bean/stats/AsyncEventQueueStatsJUnitTest.java  |    6 +-
 .../bean/stats/CacheServerStatsJUnitTest.java      |    8 +-
 .../management/bean/stats/DiskStatsJUnitTest.java  |    3 +-
 .../stats/DistributedSystemStatsJUnitTest.java     |    8 +-
 .../bean/stats/GatewayMBeanBridgeJUnitTest.java    |    3 +-
 .../bean/stats/GatewayReceiverStatsJUnitTest.java  |    5 +-
 .../bean/stats/MemberLevelStatsJUnitTest.java      |   22 +-
 .../bean/stats/RegionStatsJUnitTest.java           |    7 +-
 .../internal/beans/ManagementAdapterTest.java      |    3 +-
 .../geode/pdx/OffHeapByteSourceJUnitTest.java      |    4 +-
 .../dunit/internal/JUnit4DistributedTestCase.java  |    2 +-
 .../admin/internal/MemberHealthEvaluator.java      |    2 +-
 .../asyncqueue/internal/AsyncEventQueueStats.java  |  123 +-
 .../internal/ParallelAsyncEventQueueImpl.java      |    2 +-
 .../internal/SerialAsyncEventQueueImpl.java        |    2 +-
 .../cache/client/internal/ConnectionStats.java     | 3787 --------------------
 .../cache/client/internal/ConnectionStatsImpl.java | 3205 +++++++++++++++++
 .../cache/client/internal/EndpointManagerImpl.java |   38 +-
 .../cache/client/internal/ExecuteFunctionOp.java   |    5 +-
 .../client/internal/ExecuteRegionFunctionOp.java   |    7 +-
 .../internal/ExecuteRegionFunctionSingleHopOp.java |    7 +-
 .../geode/cache/client/internal/PoolImpl.java      |   49 +-
 ...QueryVsdStats.java => CqQueryVsdStatsImpl.java} |   76 +-
 .../query/internal/index/AbstractMapIndex.java     |    2 +-
 .../query/internal/index/CompactRangeIndex.java    |    2 +-
 .../cache/query/internal/index/HashIndex.java      |    2 +-
 .../cache/query/internal/index/HashIndexSet.java   |    2 +-
 .../cache/query/internal/index/IndexStats.java     |   72 +-
 .../query/internal/index/PartitionedIndex.java     |    2 +-
 .../cache/query/internal/index/RangeIndex.java     |    2 +-
 .../geode/cache/server/internal/LoadMonitor.java   |    5 +-
 .../geode/distributed/DistributedSystem.java       |    7 +-
 .../internal/ClusterDistributionManager.java       |   19 +-
 .../distributed/internal/DistributionMessage.java  |   12 +-
 ...butionStats.java => DistributionStatsImpl.java} | 1135 +++---
 .../internal/InternalDistributedSystem.java        |  505 +--
 .../distributed/internal/InternalLocator.java      |   67 +-
 .../{LocatorStats.java => LocatorStatsImpl.java}   |   71 +-
 .../internal/LonerDistributionManager.java         |    4 +-
 .../geode/distributed/internal/ReplyMessage.java   |    4 +-
 .../internal/RuntimeDistributionConfigImpl.java    |    2 +-
 .../ThrottlingMemLinkedQueueWithDMStats.java       |    6 +-
 .../distributed/internal/locks/DLockService.java   |   13 +-
 .../locks/{DLockStats.java => DLockStatsImpl.java} |  402 +--
 .../internal/locks/DummyDLockStats.java            |   11 +
 .../membership/gms/messenger/JGroupsMessenger.java |    4 +-
 .../distributed/internal/tcpserver/TcpServer.java  |    6 +-
 .../org/apache/geode/internal/HistogramStats.java  |    8 +-
 .../geode/internal/admin/ClientStatsManager.java   |   18 +-
 .../geode/internal/admin/StatAlertDefinition.java  |    2 +-
 .../geode/internal/admin/StatAlertsManager.java    |    8 +-
 .../admin/remote/AddStatListenerResponse.java      |    2 +-
 .../remote/AdminConsoleDisconnectMessage.java      |    2 +-
 .../admin/remote/CancelStatListenerResponse.java   |    2 +-
 .../remote/FetchResourceAttributesResponse.java    |   38 +-
 .../internal/admin/remote/FetchStatsResponse.java  |   28 +-
 .../geode/internal/admin/remote/RemoteStat.java    |    4 +-
 .../internal/admin/remote/RemoteStatResource.java  |    2 +-
 .../admin/statalerts/BaseDecoratorImpl.java        |    2 +-
 .../admin/statalerts/DummyStatisticInfoImpl.java   |    4 +-
 .../admin/statalerts/FunctionDecoratorImpl.java    |    2 +-
 .../statalerts/GaugeThresholdDecoratorImpl.java    |    2 +-
 .../admin/statalerts/MultiAttrDefinitionImpl.java  |    6 +-
 .../statalerts/NumberThresholdDecoratorImpl.java   |    2 +-
 .../admin/statalerts/SingleAttrDefinitionImpl.java |    6 +-
 .../internal/admin/statalerts/StatisticInfo.java   |    6 +-
 .../admin/statalerts/StatisticInfoImpl.java        |    8 +-
 .../geode/internal/cache/AbstractDiskRegion.java   |    2 +-
 .../geode/internal/cache/AbstractRegion.java       |    4 +-
 .../apache/geode/internal/cache/BucketRegion.java  |    3 +-
 .../geode/internal/cache/CachePerfStats.java       | 1542 --------
 .../geode/internal/cache/CachePerfStatsImpl.java   | 1839 ++++++++++
 .../geode/internal/cache/DirectoryHolder.java      |    5 +-
 ...ctoryStats.java => DiskDirectoryStatsImpl.java} |   57 +-
 ...skRegionStats.java => DiskRegionStatsImpl.java} |  107 +-
 .../apache/geode/internal/cache/DiskStoreImpl.java |    9 +-
 ...DiskStoreStats.java => DiskStoreStatsImpl.java} |  280 +-
 .../internal/cache/DistTXRollbackMessage.java      |    7 +-
 .../geode/internal/cache/DistributedRegion.java    |    3 +-
 .../geode/internal/cache/DummyCachePerfStats.java  |   10 +-
 .../geode/internal/cache/EvictableRegion.java      |    2 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |    7 +-
 .../geode/internal/cache/InternalRegion.java       |    3 +-
 .../apache/geode/internal/cache/LocalRegion.java   |  913 ++---
 .../cache/MemberFunctionStreamingMessage.java      |    3 +-
 .../cache/OfflineCompactionDiskRegion.java         |    3 +-
 .../internal/cache/PRHARedundancyProvider.java     |    2 +-
 .../geode/internal/cache/PartitionedRegion.java    |   31 +-
 .../internal/cache/PartitionedRegionDataStore.java |  360 +-
 .../internal/cache/PartitionedRegionHelper.java    |    8 +-
 ...nStats.java => PartitionedRegionStatsImpl.java} |  608 ++--
 .../cache/{PoolStats.java => PoolStatsImpl.java}   |  215 +-
 .../internal/cache/TXRemoteCommitMessage.java      |    7 +-
 .../org/apache/geode/internal/cache/TXState.java   |    4 +-
 .../geode/internal/cache/ValidatingDiskRegion.java |   21 +-
 .../client/protocol/ClientProtocolService.java     |    2 +-
 .../internal/cache/control/HeapMemoryMonitor.java  |   16 +-
 .../cache/control/InternalResourceManager.java     |    3 +-
 ...gerStats.java => ResourceManagerStatsImpl.java} |  268 +-
 .../cache/eviction/AbstractEvictionController.java |   21 +-
 ...Statistics.java => CountLRUStatisticsImpl.java} |   49 +-
 .../cache/eviction/DisabledEvictionCounters.java   |    2 +-
 .../internal/cache/eviction/EvictionCounters.java  |    2 +-
 .../cache/eviction/EvictionCountersImpl.java       |    2 +-
 ...UStatistics.java => HeapLRUStatisticsImpl.java} |   58 +-
 ...tatistics.java => MemoryLRUStatisticsImpl.java} |   53 +-
 .../internal/cache/execute/AbstractExecution.java  |    4 +-
 .../DistributedRegionFunctionResultSender.java     |   20 +-
 .../cache/execute/FunctionServiceStats.java        |   67 +-
 .../{FunctionStats.java => FunctionStatsImpl.java} |  229 +-
 .../cache/execute/MemberFunctionResultSender.java  |   12 +-
 .../PartitionedRegionFunctionResultSender.java     |   16 +-
 .../cache/execute/ServerFunctionExecutor.java      |    8 +-
 .../execute/ServerRegionFunctionExecutor.java      |    8 +-
 .../ServerToClientFunctionResultSender.java        |    8 +-
 .../ServerToClientFunctionResultSender65.java      |    8 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |    7 +-
 ...QueueStats.java => HARegionQueueStatsImpl.java} |  100 +-
 .../cache/partitioned/BucketSizeMessage.java       |    2 +-
 .../cache/partitioned/ContainsKeyValueMessage.java |    3 +-
 .../cache/partitioned/CreateBucketMessage.java     |    2 +-
 .../partitioned/CreateMissingBucketsTask.java      |    2 +-
 .../internal/cache/partitioned/DumpB2NRegion.java  |    3 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |    3 +-
 .../cache/partitioned/FetchEntriesMessage.java     |    3 +-
 .../cache/partitioned/FetchKeysMessage.java        |    3 +-
 .../internal/cache/partitioned/GetMessage.java     |   67 +-
 .../cache/partitioned/IdentityRequestMessage.java  |    3 +-
 .../cache/partitioned/InterestEventMessage.java    |    3 +-
 .../partitioned/ManageBackupBucketMessage.java     |    2 +-
 .../cache/partitioned/ManageBucketMessage.java     |    3 +-
 .../internal/cache/partitioned/SizeMessage.java    |    3 +-
 .../internal/cache/tier/sockets/AcceptorImpl.java  |    5 +-
 .../internal/cache/tier/sockets/BaseCommand.java   |    2 +-
 .../cache/tier/sockets/BaseCommandQuery.java       |    6 +-
 .../cache/tier/sockets/CacheClientNotifier.java    |  234 +-
 ...tats.java => CacheClientNotifierStatsImpl.java} |  104 +-
 .../cache/tier/sockets/CacheClientProxy.java       |    4 +-
 .../cache/tier/sockets/CacheClientProxyStats.java  |   71 +-
 .../cache/tier/sockets/CacheClientUpdater.java     |   42 +-
 ...eServerStats.java => CacheServerStatsImpl.java} |  118 +-
 .../cache/tier/sockets/ClientHealthMonitor.java    |    8 +-
 .../geode/internal/cache/tier/sockets/Message.java |    4 +-
 .../tier/sockets/OriginalServerConnection.java     |    6 +-
 .../tier/sockets/ProtobufServerConnection.java     |    6 +-
 .../cache/tier/sockets/ServerConnection.java       |    4 +-
 .../tier/sockets/ServerConnectionFactory.java      |   16 +-
 .../cache/tier/sockets/command/ClearRegion.java    |    7 +-
 .../cache/tier/sockets/command/ClientReady.java    |    7 +-
 .../tier/sockets/command/CloseConnection.java      |    5 +-
 .../cache/tier/sockets/command/ContainsKey.java    |    7 +-
 .../cache/tier/sockets/command/ContainsKey66.java  |    7 +-
 .../cache/tier/sockets/command/Destroy.java        |    7 +-
 .../cache/tier/sockets/command/Destroy65.java      |    7 +-
 .../cache/tier/sockets/command/DestroyRegion.java  |    7 +-
 .../tier/sockets/command/ExecuteFunction.java      |    3 +-
 .../tier/sockets/command/ExecuteFunction65.java    |    3 +-
 .../tier/sockets/command/ExecuteFunction66.java    |    3 +-
 .../sockets/command/GatewayReceiverCommand.java    |    6 +-
 .../internal/cache/tier/sockets/command/Get70.java |    7 +-
 .../cache/tier/sockets/command/Invalidate.java     |    7 +-
 .../internal/cache/tier/sockets/command/Ping.java  |    2 +-
 .../internal/cache/tier/sockets/command/Put.java   |    7 +-
 .../internal/cache/tier/sockets/command/Put61.java |    7 +-
 .../internal/cache/tier/sockets/command/Put65.java |    7 +-
 .../cache/tier/sockets/command/PutAll.java         |    7 +-
 .../cache/tier/sockets/command/PutAll70.java       |    7 +-
 .../cache/tier/sockets/command/PutAll80.java       |    7 +-
 .../cache/tier/sockets/command/RemoveAll.java      |    7 +-
 .../cache/tier/sockets/command/Request.java        |    8 +-
 .../internal/cache/tier/sockets/command/Size.java  |    5 +-
 .../sockets/command/UpdateClientNotification.java  |    5 +-
 .../internal/cache/tx/PartitionedTXRegionStub.java |    4 +-
 .../internal/cache/tx/RemoteClearMessage.java      |    2 +-
 .../cache/tx/RemoteContainsKeyValueMessage.java    |    2 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |    2 +-
 .../geode/internal/cache/tx/RemoteGetMessage.java  |    9 +-
 .../geode/internal/cache/tx/RemoteSizeMessage.java |    2 +-
 .../internal/cache/wan/AbstractGatewaySender.java  |    5 +-
 ...verStats.java => GatewayReceiverStatsImpl.java} |   70 +-
 ...enderStats.java => GatewaySenderStatsImpl.java} |  459 ++-
 .../apache/geode/internal/concurrent/Atomics.java  |    6 +-
 .../geode/internal/offheap/FreeListManager.java    |    4 +-
 .../geode/internal/offheap/MemoryAllocator.java    |    2 +-
 .../internal/offheap/MemoryAllocatorImpl.java      |   16 +-
 .../geode/internal/offheap/OffHeapMemoryStats.java |   73 -
 .../geode/internal/offheap/OffHeapStorage.java     |  289 +-
 .../internal/offheap/OffHeapStorageStatsImpl.java  |  271 ++
 .../statistics/AbstractStatisticsFactory.java      |   96 +-
 .../geode/internal/statistics/CallbackSampler.java |    2 +-
 .../statistics/DummyStatisticsFactory.java         |   45 +-
 .../internal/statistics/DummyStatisticsImpl.java   |    6 +-
 .../internal/statistics/GemFireStatSampler.java    |  111 +-
 .../geode/internal/statistics/HostStatHelper.java  |   28 +-
 .../geode/internal/statistics/HostStatSampler.java |    2 +-
 .../statistics/InternalDistributedSystemStats.java |  384 ++
 .../statistics/LocalStatisticsFactory.java         |   12 +-
 .../internal/statistics/LocalStatisticsImpl.java   |    6 +-
 .../statistics/MapBasedStatisticsNotification.java |    6 +-
 .../internal/statistics/ResourceInstance.java      |    4 +-
 .../geode/internal/statistics/ResourceType.java    |    4 +-
 .../geode/internal/statistics/SampleCollector.java |    6 +-
 .../internal/statistics/SimpleStatisticId.java     |    4 +-
 .../internal/statistics/StatArchiveWriter.java     |    2 +-
 .../internal/statistics/StatSamplerStats.java      |   55 +-
 .../statistics/StatisticDescriptorImpl.java        |   30 +-
 .../geode/internal/statistics/StatisticId.java     |    4 +-
 .../geode/internal/statistics/StatisticsImpl.java  |   10 +-
 .../internal/statistics/StatisticsManager.java     |    4 +-
 .../statistics/StatisticsNotification.java         |    6 +-
 .../internal/statistics/StatisticsSampler.java     |    2 +-
 .../statistics/StatisticsTypeFactoryImpl.java      |   33 +-
 .../internal/statistics/StatisticsTypeImpl.java    |   11 +-
 .../internal/statistics/StatisticsTypeXml.java     |    6 +-
 .../apache/geode/internal/statistics/VMStats.java  |   39 +-
 .../statistics/VMStatsContractFactory.java         |    2 +-
 .../geode/internal/statistics/ValueMonitor.java    |    6 +-
 .../statistics/platform/LinuxProcessStats.java     |   33 +-
 .../statistics/platform/LinuxSystemStats.java      |  124 +-
 .../statistics/platform/OSXProcessStats.java       |   43 +-
 .../statistics/platform/OSXSystemStats.java        |  218 +-
 .../statistics/platform/OsStatisticsFactory.java   |    6 +-
 .../internal/statistics/platform/ProcessStats.java |    2 +-
 .../statistics/platform/SolarisProcessStats.java   |   86 +-
 .../statistics/platform/SolarisSystemStats.java    |  176 +-
 .../statistics/platform/WindowsProcessStats.java   |   57 +-
 .../statistics/platform/WindowsSystemStats.java    |  102 +-
 .../internal/stats50/Atomic50StatisticsImpl.java   |    7 +-
 .../apache/geode/internal/stats50/VMStats50.java   |  260 +-
 .../org/apache/geode/internal/tcp/Connection.java  |   29 +-
 .../management/internal/FederatingManager.java     |   25 +-
 .../geode/management/internal/LocalManager.java    |   19 +-
 .../internal/beans/AsyncEventQueueMBeanBridge.java |    2 +-
 .../internal/beans/GatewaySenderMBeanBridge.java   |    2 +-
 .../internal/beans/MemberMBeanBridge.java          |   73 +-
 .../internal/beans/RegionMBeanBridge.java          |    2 +-
 .../management/internal/beans/ServerBridge.java    |    1 +
 .../beans/stats/AggregateRegionStatsMonitor.java   |    5 +-
 .../internal/beans/stats/GCStatsMonitor.java       |    2 +-
 .../beans/stats/GatewaySenderOverflowMonitor.java  |    4 +-
 .../internal/beans/stats/MBeanStatsMonitor.java    |    6 +-
 .../beans/stats/MemberLevelDiskMonitor.java        |    5 +-
 .../internal/beans/stats/VMStatsMonitor.java       |    2 +-
 .../src/main/java/org/apache/geode/package.html    |   32 +-
 geode-core/src/main/kotlin/Locator.kt              |   19 +
 geode-core/src/main/kotlin/Server.kt               |   62 +
 .../cache/OffHeapValueWrapperJUnitTest.java        |    4 +-
 .../internal/cache/OldValueImporterTestBase.java   |   10 +-
 .../cache/entries/AbstractRegionEntryTest.java     |    4 +-
 .../internal/cache/tier/sockets/CCUStatsTest.java  |    4 +-
 .../tier/sockets/ClientHealthMonitorJUnitTest.java |    2 +-
 .../tier/sockets/ServerConnectionFactoryTest.java  |    2 +-
 .../cache/tier/sockets/ServerConnectionTest.java   |    4 +-
 .../tier/sockets/command/ContainsKey66Test.java    |    4 +-
 .../tier/sockets/command/ContainsKeyTest.java      |    4 +-
 .../tier/sockets/command/CreateRegionTest.java     |    4 +-
 .../cache/tier/sockets/command/Destroy65Test.java  |    4 +-
 .../tier/sockets/command/DestroyRegionTest.java    |    4 +-
 .../cache/tier/sockets/command/DestroyTest.java    |    4 +-
 .../cache/tier/sockets/command/Get70Test.java      |    4 +-
 .../cache/tier/sockets/command/GetAll651Test.java  |    4 +-
 .../cache/tier/sockets/command/GetAll70Test.java   |    4 +-
 .../cache/tier/sockets/command/GetAllTest.java     |    4 +-
 .../cache/tier/sockets/command/InvalidateTest.java |    4 +-
 .../cache/tier/sockets/command/KeySetTest.java     |    4 +-
 .../cache/tier/sockets/command/Put61Test.java      |    4 +-
 .../cache/tier/sockets/command/Put65Test.java      |    4 +-
 .../cache/tier/sockets/command/PutTest.java        |    4 +-
 .../cache/tier/sockets/command/RemoveAllTest.java  |    4 +-
 .../cache/tier/sockets/command/RequestTest.java    |    4 +-
 .../sockets/command/UnregisterInterestTest.java    |    4 +-
 .../ParallelQueueRemovalMessageJUnitTest.java      |    8 +-
 .../internal/offheap/FreeListManagerTest.java      |    2 +-
 .../offheap/LifecycleListenerJUnitTest.java        |   16 +-
 .../MemoryAllocatorFillPatternJUnitTest.java       |    2 +-
 .../internal/offheap/MemoryAllocatorJUnitTest.java |   32 +-
 .../internal/offheap/MemoryBlockNodeJUnitTest.java |    4 +-
 ...moryStats.java => NullOffHeapStorageStats.java} |   21 +-
 .../internal/offheap/OffHeapHelperJUnitTest.java   |    2 +-
 .../offheap/OffHeapRegionEntryHelperJUnitTest.java |    2 +-
 .../internal/offheap/OffHeapStorageJUnitTest.java  |   18 +-
 .../OffHeapStoredObjectAddressStackJUnitTest.java  |   18 +-
 .../offheap/OffHeapStoredObjectJUnitTest.java      |    2 +-
 .../OffHeapWriteObjectAsByteArrayJUnitTest.java    |    2 +-
 .../internal/offheap/TinyMemoryBlockJUnitTest.java |    4 +-
 .../internal/statistics/SampleCollectorTest.java   |    6 +-
 .../internal/statistics/StatSamplerTestCase.java   |    4 +-
 .../internal/statistics/TestStatisticsManager.java |    7 +-
 .../internal/statistics/TestStatisticsSampler.java |    2 +-
 .../management/bean/stats/MBeanStatsTestCase.java  |    8 +-
 .../management/bean/stats/StatsRateJUnitTest.java  |    2 +-
 ...ServerBridgeClientMembershipRegressionTest.java |    4 +-
 .../beans/stats/MBeanStatsMonitorTest.java         |    6 +-
 .../java/org/apache/geode/test/fake/Fakes.java     |    6 +-
 .../cache/query/cq/dunit/CqStatsDUnitTest.java     |   10 +-
 .../query/cq/dunit/CqStatsUsingPoolDUnitTest.java  |    9 +-
 .../geode/cache/query/internal/cq/CqQueryImpl.java |   20 +-
 .../cache/query/internal/cq/CqServiceImpl.java     |   26 +-
 ...iceVsdStats.java => CqServiceVsdStatsImpl.java} |  231 +-
 .../cache/tier/sockets/command/CloseCQ.java        |    5 +-
 .../cache/tier/sockets/command/ExecuteCQ.java      |    9 +-
 .../cache/tier/sockets/command/ExecuteCQ61.java    |    9 +-
 .../cache/tier/sockets/command/GetCQStats.java     |    3 +-
 .../cache/tier/sockets/command/GetDurableCQs.java  |    1 +
 .../cache/tier/sockets/command/StopCQ.java         |    5 +-
 .../geode/test/dunit/rules/CQUnitTestRule.java     |    4 +-
 .../internal/LuceneIndexForPartitionedRegion.java  |    2 +-
 .../cache/lucene/internal/LuceneIndexImpl.java     |    2 +-
 .../cache/lucene/internal/LuceneIndexStats.java    |  103 +-
 .../internal/filesystem/FileSystemStats.java       |   56 +-
 .../IndexRepositoryImplPerformanceTest.java        |    6 +-
 .../lucene/internal/LuceneIndexStatsJUnitTest.java |    6 +-
 .../internal/LuceneServiceImplJUnitTest.java       |    4 +-
 .../filesystem/FileSystemStatsJUnitTest.java       |    6 +-
 geode-micrometer-stats/build.gradle.kts            |   27 +
 .../statistics/cache/MicrometerCCUStatsImpl.kt     |   59 +
 .../cache/MicrometerCacheClientNotifierStats.kt    |  127 +
 .../cache/MicrometerCacheClientProxyStats.kt       |  109 +
 .../statistics/cache/MicrometerCachePerfStats.kt   |  968 +++++
 .../statistics/cache/MicrometerCacheServerStats.kt |  672 ++++
 .../connection/MicrometerClientSendStats.kt        |  602 ++++
 .../statistics/connection/MicrometerClientStats.kt |  741 ++++
 .../connection/MicrometerConnectionStats.kt        |  692 ++++
 .../statistics/connection/MicrometerPoolStats.kt   |  233 ++
 .../disk/MicrometerDiskDirectoryStats.kt           |   60 +
 .../statistics/disk/MicrometerDiskRegionStats.kt   |  146 +
 .../statistics/disk/MicrometerDiskStoreStats.kt    |  310 ++
 .../distributed/MicrometerDistributionStats.kt     | 1476 ++++++++
 .../geode/statistics/dlock/MicrometerDLockStats.kt |  655 ++++
 .../eviction/MicrometerCountLRUStatistics.kt       |   47 +
 .../eviction/MicrometerEvictionStatsImpl.kt        |   53 +
 .../eviction/MicrometerHeapLRUStatistics.kt        |   43 +
 .../eviction/MicrometerMemoryLRUStatistics.kt      |   44 +
 .../statistics/function/MicrometerFunctionStats.kt |  151 +
 .../internal/micrometer/StatisticsManager.kt       |    8 +
 .../internal/micrometer/StatisticsMeter.kt         |   25 +
 .../internal/micrometer/StatisticsMeterGroup.kt    |    5 +
 .../micrometer/impl/MicrometerMeterGroup.kt        |   40 +
 .../micrometer/impl/MicrometerStatisticMeter.kt    |  218 ++
 .../micrometer/impl/MicrometerStatisticsManager.kt |  119 +
 .../statistics/locator/MicrometerLocatorStats.kt   |   83 +
 .../micrometer/MicrometerStatisticsFactoryImpl.kt  |   93 +
 .../micrometer/MicrometerStatisticsImpl.kt         |  165 +
 .../micrometer/MicrometerStatisticsType.kt         |   47 +
 .../micrometer/MicrometerStatsImplementor.kt       |    7 +
 .../offheap/MicrometerOffHeapStorageStats.kt       |  138 +
 .../statistics/query/MicrometerCqQueryVsdStats.kt  |  119 +
 .../query/MicrometerCqServiceVsdStats.kt           |  125 +
 .../region/MicrometerHARegionQueueStats.kt         |  127 +
 .../region/MicrometerPartitionedRegionStats.kt     |  769 ++++
 .../statistics/region/MicrometerRegionPerfStats.kt |  344 ++
 .../MicrometerResourceManagerStats.kt              |  422 +++
 .../geode/statistics/util/SimpleTimeUtils.kt       |    4 +
 .../wan/MicrometerAsyncEventQueueStats.kt          |   26 +-
 .../wan/MicrometerGatewayReceiverStats.kt          |  123 +
 .../statistics/wan/MicrometerGatewaySenderStats.kt |  383 ++
 .../v1/acceptance/LocatorConnectionDUnitTest.java  |    6 +-
 .../protobuf/v1/AuthenticationIntegrationTest.java |    6 +-
 .../v1/acceptance/CacheConnectionJUnitTest.java    |    6 +-
 .../statistics/ProtobufClientStatistics.java       |   10 +-
 .../protobuf/v1/ProtobufProtocolService.java       |    2 +-
 .../OutputCapturingServerConnectionTest.java       |    2 +-
 .../tier/sockets/ProtobufServerConnectionTest.java |    2 +-
 .../v1/ProtobufProtocolServiceJUnitTest.java       |   37 -
 .../util/AutoBalancerIntegrationJUnitTest.java     |    2 +-
 ...ueueOverflowMBeanAttributesDistributedTest.java |    4 +-
 ...nderOverflowMBeanAttributesDistributedTest.java |    4 +-
 .../geode/internal/cache/wan/WANTestBase.java      |    2 +
 .../KeepEventsOnGatewaySenderQueueDUnitTest.java   |    1 +
 settings.gradle                                    |    1 +
 459 files changed, 25106 insertions(+), 11249 deletions(-)

diff --git a/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/AbstractSessionCache.java b/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/AbstractSessionCache.java
index 7d65961..602c6cb 100644
--- a/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/AbstractSessionCache.java
+++ b/extensions/geode-modules-session-internal/src/main/java/org/apache/geode/modules/session/internal/common/AbstractSessionCache.java
@@ -70,7 +70,7 @@ public abstract class AbstractSessionCache implements SessionCache {
   }
 
   protected void createStatistics() {
-    this.statistics = new DeltaSessionStatistics(getCache().getDistributedSystem(),
+    this.statistics = new DeltaSessionStatistics(getCache().getDistributedSystem().getStatisticsFactory(),
         (String) properties.get(CacheProperty.STATISTICS_NAME));
   }
 
diff --git a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/AbstractSessionCache.java b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/AbstractSessionCache.java
index 1764190..8d2a172 100644
--- a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/AbstractSessionCache.java
+++ b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/AbstractSessionCache.java
@@ -94,7 +94,7 @@ public abstract class AbstractSessionCache implements SessionCache {
   }
 
   protected void createStatistics() {
-    this.statistics = new DeltaSessionStatistics(getCache().getDistributedSystem(),
+    this.statistics = new DeltaSessionStatistics(getCache().getDistributedSystem().getStatisticsFactory(),
         getSessionManager().getStatisticsName());
   }
 
diff --git a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/internal/DeltaSessionStatistics.java b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/internal/DeltaSessionStatistics.java
index 57c14b4..2c05869 100644
--- a/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/internal/DeltaSessionStatistics.java
+++ b/extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/internal/DeltaSessionStatistics.java
@@ -14,36 +14,37 @@
  */
 package org.apache.geode.modules.session.catalina.internal;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
-import org.apache.geode.StatisticsTypeFactory;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsType;
+import org.apache.geode.statistics.StatisticsTypeFactory;
 import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
 
 public class DeltaSessionStatistics {
 
   public static final String typeName = "SessionStatistics";
 
-  private static final StatisticsType type;
+  private StatisticsType type;
 
   private static final String SESSIONS_CREATED = "sessionsCreated";
   private static final String SESSIONS_INVALIDATED = "sessionsInvalidated";
   private static final String SESSIONS_EXPIRED = "sessionsExpired";
 
-  private static final int sessionsCreatedId;
-  private static final int sessionsInvalidatedId;
-  private static final int sessionsExpiredId;
+  private int sessionsCreatedId;
+  private int sessionsInvalidatedId;
+  private int sessionsExpiredId;
 
-  static {
+  private void initializeStats(StatisticsFactory factory) {
     // Initialize type
-    StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
-    type = f.createType(typeName, typeName,
-        new StatisticDescriptor[] {
-            f.createIntCounter(SESSIONS_CREATED, "The number of sessions created", "operations"),
-            f.createIntCounter(SESSIONS_INVALIDATED,
+    type = factory.createType(typeName, typeName,
+        new StatisticDescriptor[]{
+            factory.createIntCounter(SESSIONS_CREATED, "The number of sessions created",
+                "operations"),
+            factory.createIntCounter(SESSIONS_INVALIDATED,
                 "The number of sessions invalidated by invoking invalidate", "operations"),
-            f.createIntCounter(SESSIONS_EXPIRED, "The number of sessions invalidated by timeout",
+            factory.createIntCounter(SESSIONS_EXPIRED,
+                "The number of sessions invalidated by timeout",
                 "operations"),});
 
     // Initialize id fields
@@ -55,6 +56,7 @@ public class DeltaSessionStatistics {
   private final Statistics stats;
 
   public DeltaSessionStatistics(StatisticsFactory factory, String applicationName) {
+    initializeStats(factory);
     this.stats = factory.createAtomicStatistics(type, typeName + "_" + applicationName);
   }
 
diff --git a/extensions/geode-modules/src/main/java/org/apache/geode/modules/util/ModuleStatistics.java b/extensions/geode-modules/src/main/java/org/apache/geode/modules/util/ModuleStatistics.java
index 6f276c4..eb3901d 100644
--- a/extensions/geode-modules/src/main/java/org/apache/geode/modules/util/ModuleStatistics.java
+++ b/extensions/geode-modules/src/main/java/org/apache/geode/modules/util/ModuleStatistics.java
@@ -14,11 +14,11 @@
  */
 package org.apache.geode.modules.util;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
-import org.apache.geode.StatisticsTypeFactory;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsType;
+import org.apache.geode.statistics.StatisticsTypeFactory;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
 
@@ -28,23 +28,22 @@ import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
  */
 public class ModuleStatistics {
 
-  private static final StatisticsType type;
+  private StatisticsType type;
 
-  private static final int cacheHitsId;
+  private int cacheHitsId;
 
-  private static final int cacheMissesId;
+  private int cacheMissesId;
 
-  private static final int hibernateEntityDestroyJobsScheduledId;
+  private int hibernateEntityDestroyJobsScheduledId;
 
-  static {
-    StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
-    type = f.createType("pluginStats", "statistics for hibernate plugin and hibernate L2 cache",
+  private void initializeStats(StatisticsFactory factory) {
+    type = factory.createType("pluginStats", "statistics for hibernate plugin and hibernate L2 cache",
         new StatisticDescriptor[] {
-            f.createLongCounter("cacheHits", "number of times an entity was found in L2 cache",
+            factory.createLongCounter("cacheHits", "number of times an entity was found in L2 cache",
                 "count"),
-            f.createLongCounter("cacheMisses",
+            factory.createLongCounter("cacheMisses",
                 "number of times an entity was NOT found in l2 cache", "count"),
-            f.createLongCounter("hibernateEntityDestroyJobsScheduled",
+            factory.createLongCounter("hibernateEntityDestroyJobsScheduled",
                 "number of entities scheduled for destroy because of version conflict with a remote member",
                 "jobs")});
 
@@ -58,13 +57,14 @@ public class ModuleStatistics {
   private static ModuleStatistics instance;
 
   private ModuleStatistics(StatisticsFactory factory) {
+    initializeStats(factory);
     this.stats = factory.createAtomicStatistics(type, "PluginStatistics");
   }
 
   public static ModuleStatistics getInstance(DistributedSystem system) {
     synchronized (ModuleStatistics.class) {
       if (instance == null) {
-        instance = new ModuleStatistics(system);
+        instance = new ModuleStatistics(system.getStatisticsFactory());
       }
     }
     return instance;
diff --git a/geode-common/build.gradle b/geode-common/build.gradle
index 45a2aad..93a06c8 100755
--- a/geode-common/build.gradle
+++ b/geode-common/build.gradle
@@ -17,4 +17,5 @@
 
 dependencies {
   testCompile project(':geode-junit')
+  compile 'org.reflections:reflections:0.9.11'
 }
diff --git a/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java b/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
new file mode 100644
index 0000000..3471a5e
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
@@ -0,0 +1,272 @@
+package org.apache.geode.cache.client.internal;
+
+import org.apache.geode.internal.cache.tier.sockets.MessageStats;
+import org.apache.geode.statistics.StatisticsFactory;
+
+public interface ConnectionStats extends MessageStats {
+  void initializeStats(StatisticsFactory factory);
+
+  long startGet();
+
+  void endGetSend(long startTime, boolean failed);
+
+  void endGet(long startTime, boolean timedOut, boolean failed);
+
+  int getGets();
+
+  long getGetDuration();
+
+  long startPut();
+
+  void endPutSend(long startTime, boolean failed);
+
+  void endPut(long startTime, boolean timedOut, boolean failed);
+
+  int getPuts();
+
+  long getPutDuration();
+
+  long startDestroy();
+
+  void endDestroySend(long startTime, boolean failed);
+
+  void endDestroy(long startTime, boolean timedOut, boolean failed);
+
+  long startDestroyRegion();
+
+  void endDestroyRegionSend(long startTime, boolean failed);
+
+  void endDestroyRegion(long startTime, boolean timedOut, boolean failed);
+
+  long startClear();
+
+  void endClearSend(long startTime, boolean failed);
+
+  void endClear(long startTime, boolean timedOut, boolean failed);
+
+  long startContainsKey();
+
+  void endContainsKeySend(long startTime, boolean failed);
+
+  void endContainsKey(long startTime, boolean timedOut, boolean failed);
+
+  long startKeySet();
+
+  void endKeySetSend(long startTime, boolean failed);
+
+  void endKeySet(long startTime, boolean timedOut, boolean failed);
+
+  long startRegisterInterest();
+
+  void endRegisterInterestSend(long startTime, boolean failed);
+
+  void endRegisterInterest(long startTime, boolean timedOut, boolean failed);
+
+  long startUnregisterInterest();
+
+  void endUnregisterInterestSend(long startTime, boolean failed);
+
+  void endUnregisterInterest(long startTime, boolean timedOut, boolean failed);
+
+  long startQuery();
+
+  void endQuerySend(long startTime, boolean failed);
+
+  void endQuery(long startTime, boolean timedOut, boolean failed);
+
+  long startCreateCQ();
+
+  void endCreateCQSend(long startTime, boolean failed);
+
+  void endCreateCQ(long startTime, boolean timedOut, boolean failed);
+
+  long startStopCQ();
+
+  void endStopCQSend(long startTime, boolean failed);
+
+  void endStopCQ(long startTime, boolean timedOut, boolean failed);
+
+  long startCloseCQ();
+
+  void endCloseCQSend(long startTime, boolean failed);
+
+  void endCloseCQ(long startTime, boolean timedOut, boolean failed);
+
+  long startGetDurableCQs();
+
+  void endGetDurableCQsSend(long startTime, boolean failed);
+
+  void endGetDurableCQs(long startTime, boolean timedOut, boolean failed);
+
+  long startGatewayBatch();
+
+  void endGatewayBatchSend(long startTime, boolean failed);
+
+  void endGatewayBatch(long startTime, boolean timedOut, boolean failed);
+
+  long startReadyForEvents();
+
+  void endReadyForEventsSend(long startTime, boolean failed);
+
+  void endReadyForEvents(long startTime, boolean timedOut, boolean failed);
+
+  long startMakePrimary();
+
+  void endMakePrimarySend(long startTime, boolean failed);
+
+  void endMakePrimary(long startTime, boolean timedOut, boolean failed);
+
+  long startCloseCon();
+
+  void endCloseConSend(long startTime, boolean failed);
+
+  void endCloseCon(long startTime, boolean timedOut, boolean failed);
+
+  long startPrimaryAck();
+
+  void endPrimaryAckSend(long startTime, boolean failed);
+
+  void endPrimaryAck(long startTime, boolean timedOut, boolean failed);
+
+  long startPing();
+
+  void endPingSend(long startTime, boolean failed);
+
+  void endPing(long startTime, boolean timedOut, boolean failed);
+
+  long startRegisterInstantiators();
+
+  long startRegisterDataSerializers();
+
+  void endRegisterInstantiatorsSend(long startTime, boolean failed);
+
+  void endRegisterDataSerializersSend(long startTime, boolean failed);
+
+  void endRegisterInstantiators(long startTime, boolean timedOut, boolean failed);
+
+  void endRegisterDataSerializers(long startTime, boolean timedOut, boolean failed);
+
+  long startPutAll();
+
+  void endPutAllSend(long startTime, boolean failed);
+
+  void endPutAll(long startTime, boolean timedOut, boolean failed);
+
+  long startRemoveAll();
+
+  void endRemoveAllSend(long startTime, boolean failed);
+
+  void endRemoveAll(long startTime, boolean timedOut, boolean failed);
+
+  long startGetAll();
+
+  void endGetAllSend(long startTime, boolean failed);
+
+  void endGetAll(long startTime, boolean timedOut, boolean failed);
+
+  int getConnections();
+
+  int getOps();
+
+  void incConnections(int delta);
+
+  void startClientOp();
+
+  void endClientOpSend(long duration, boolean failed);
+
+  void endClientOp(long duration, boolean timedOut, boolean failed);
+
+  void close();
+
+  void incReceivedBytes(long v);
+
+  void incSentBytes(long v);
+
+  void incMessagesBeingReceived(int bytes);
+
+  void decMessagesBeingReceived(int bytes);
+
+  long startExecuteFunction();
+
+  void endExecuteFunctionSend(long startTime, boolean failed);
+
+  void endExecuteFunction(long startTime, boolean timedOut, boolean failed);
+
+  int getExecuteFunctions();
+
+  long getExecuteFunctionDuration();
+
+  int getGetDurableCqs();
+
+  long startGetClientPRMetadata();
+
+  void endGetClientPRMetadataSend(long startTime, boolean failed);
+
+  void endGetClientPRMetadata(long startTime, boolean timedOut, boolean failed);
+
+  long startGetClientPartitionAttributes();
+
+  void endGetClientPartitionAttributesSend(long startTime, boolean failed);
+
+  void endGetClientPartitionAttributes(long startTime, boolean timedOut, boolean failed);
+
+  long startGetPDXTypeById();
+
+  long startGetPDXIdForType();
+
+  void endGetPDXTypeByIdSend(long startTime, boolean failed);
+
+  void endGetPDXIdForTypeSend(long startTime, boolean failed);
+
+  void endGetPDXTypeById(long startTime, boolean timedOut, boolean failed);
+
+  void endGetPDXIdForType(long startTime, boolean timedOut, boolean failed);
+
+  long startAddPdxType();
+
+  void endAddPdxTypeSend(long startTime, boolean failed);
+
+  void endAddPdxType(long startTime, boolean timedOut, boolean failed);
+
+  long startSize();
+
+  void endSizeSend(long startTime, boolean failed);
+
+  void endSize(long startTime, boolean timedOut, boolean failed);
+
+  long startInvalidate();
+
+  void endInvalidateSend(long startTime, boolean failed);
+
+  void endInvalidate(long startTime, boolean timedOut, boolean failed);
+
+  long startCommit();
+
+  void endCommitSend(long startTime, boolean failed);
+
+  void endCommit(long startTime, boolean timedOut, boolean failed);
+
+  long startGetEntry();
+
+  void endGetEntrySend(long startTime, boolean failed);
+
+  void endGetEntry(long startTime, boolean timedOut, boolean failed);
+
+  long startRollback();
+
+  void endRollbackSend(long startTime, boolean failed);
+
+  void endRollback(long startTime, boolean timedOut, boolean failed);
+
+  long startTxFailover();
+
+  void endTxFailoverSend(long startTime, boolean failed);
+
+  void endTxFailover(long startTime, boolean timedOut, boolean failed);
+
+  long startTxSynchronization();
+
+  void endTxSynchronizationSend(long startTime, boolean failed);
+
+  void endTxSynchronization(long startTime, boolean timedOut, boolean failed);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/cache/query/internal/CqQueryVsdStats.java b/geode-common/src/main/java/org/apache/geode/cache/query/internal/CqQueryVsdStats.java
new file mode 100644
index 0000000..4093dcc
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/cache/query/internal/CqQueryVsdStats.java
@@ -0,0 +1,41 @@
+package org.apache.geode.cache.query.internal;
+
+public interface CqQueryVsdStats {
+  void close();
+
+  long getCqInitialResultsTime();
+
+  void setCqInitialResultsTime(long time);
+
+  long getNumInserts();
+
+  void incNumInserts();
+
+  long getNumUpdates();
+
+  void incNumUpdates();
+
+  long getNumDeletes();
+
+  void incNumDeletes();
+
+  long getNumEvents();
+
+  void incNumEvents();
+
+  long getNumHAQueuedEvents();
+
+  void incNumHAQueuedEvents(long incAmount);
+
+  long getNumCqListenerInvocations();
+
+  long getQueuedCqListenerEvents();
+
+  void incNumCqListenerInvocations();
+
+  void incQueuedCqListenerEvents();
+
+  void decQueuedCqListenerEvents();
+
+  void updateStats(Integer cqEvent);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/cache/query/internal/cq/CqServiceVsdStats.java b/geode-common/src/main/java/org/apache/geode/cache/query/internal/cq/CqServiceVsdStats.java
new file mode 100644
index 0000000..74cd9e4
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/cache/query/internal/cq/CqServiceVsdStats.java
@@ -0,0 +1,47 @@
+package org.apache.geode.cache.query.internal.cq;
+
+public interface CqServiceVsdStats {
+  void close();
+
+  long getNumCqsCreated();
+
+  void incCqsCreated();
+
+  long getNumCqsActive();
+
+  void incCqsActive();
+
+  void decCqsActive();
+
+  long getNumCqsStopped();
+
+  void incCqsStopped();
+
+  void decCqsStopped();
+
+  long getNumCqsClosed();
+
+  void incCqsClosed();
+
+  long getNumCqsOnClient();
+
+  void incCqsOnClient();
+
+  void decCqsOnClient();
+
+  long getNumClientsWithCqs();
+
+  void incClientsWithCqs();
+
+  void decClientsWithCqs();
+
+  long startCqQueryExecution();
+
+  void endCqQueryExecution(long start);
+
+  long getCqQueryExecutionTime();
+
+  void incUniqueCqQuery();
+
+  void decUniqueCqQuery();
+}
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/DMStats.java
similarity index 99%
rename from geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java
rename to geode-common/src/main/java/org/apache/geode/distributed/internal/DMStats.java
index 410d74f..7d63a3e 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DMStats.java
+++ b/geode-common/src/main/java/org/apache/geode/distributed/internal/DMStats.java
@@ -231,7 +231,7 @@ public interface DMStats {
 
   void endMsgDeserialization(long start);
 
-  long getUDPMsgEncryptionTiime();
+  long getUDPMsgEncryptionTime();
 
   long getUDPMsgDecryptionTime();
 
diff --git a/geode-common/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java
new file mode 100644
index 0000000..3babbae
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/distributed/internal/DistributionStats.java
@@ -0,0 +1,480 @@
+package org.apache.geode.distributed.internal;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface DistributionStats extends DMStats {
+  default long getStatTime() {
+    return System.nanoTime();
+  }
+
+  void close();
+
+  long getSentMessages();
+
+  void incTOSentMsg();
+
+  long getSentCommitMessages();
+
+  long getCommitWaits();
+
+  void incSentMessages(long messages);
+
+  void incSentCommitMessages(long messages);
+
+  void incCommitWaits();
+
+  long getSentMessagesTime();
+
+  void incSentMessagesTime(long nanos);
+
+  long getSentMessagesMaxTime();
+
+  long getBroadcastMessages();
+
+  void incBroadcastMessages(long messages);
+
+  long getBroadcastMessagesTime();
+
+  void incBroadcastMessagesTime(long nanos);
+
+  long getReceivedMessages();
+
+  void incReceivedMessages(long messages);
+
+  long getReceivedBytes();
+
+  void incReceivedBytes(long bytes);
+
+  void incSentBytes(long bytes);
+
+  long getProcessedMessages();
+
+  void incProcessedMessages(long messages);
+
+  long getProcessedMessagesTime();
+
+  void incProcessedMessagesTime(long start);
+
+  long getMessageProcessingScheduleTime();
+
+  void incMessageProcessingScheduleTime(long elapsed);
+
+  int getOverflowQueueSize();
+
+  void incOverflowQueueSize(int messages);
+
+  void incWaitingQueueSize(int messages);
+
+  void incOverflowQueueThrottleCount(int delays);
+
+  void incOverflowQueueThrottleTime(long nanos);
+
+  void incHighPriorityQueueSize(int messages);
+
+  void incHighPriorityQueueThrottleCount(int delays);
+
+  void incHighPriorityQueueThrottleTime(long nanos);
+
+  void incPartitionedRegionQueueSize(int messages);
+
+  void incPartitionedRegionQueueThrottleCount(int delays);
+
+  void incPartitionedRegionQueueThrottleTime(long nanos);
+
+  void incFunctionExecutionQueueSize(int messages);
+
+  void incFunctionExecutionQueueThrottleCount(int delays);
+
+  void incFunctionExecutionQueueThrottleTime(long nanos);
+
+  void incSerialQueueSize(int messages);
+
+  void incSerialQueueBytes(int amount);
+
+  int getSerialQueueBytes();
+
+  void incSerialPooledThread();
+
+  void incSerialQueueThrottleCount(int delays);
+
+  void incSerialQueueThrottleTime(long nanos);
+
+  int getNumProcessingThreads();
+
+  void incNumProcessingThreads(int threads);
+
+  int getNumSerialThreads();
+
+  void incNumSerialThreads(int threads);
+
+  void incWaitingThreads(int threads);
+
+  void incHighPriorityThreads(int threads);
+
+  void incPartitionedRegionThreads(int threads);
+
+  void incFunctionExecutionThreads(int threads);
+
+  void incMessageChannelTime(long delta);
+
+  void incUDPDispatchRequestTime(long delta);
+
+  long getUDPDispatchRequestTime();
+
+  long getReplyMessageTime();
+
+  void incReplyMessageTime(long val);
+
+  long getDistributeMessageTime();
+
+  void incDistributeMessageTime(long val);
+
+  int getNodes();
+
+  void setNodes(int val);
+
+  void incNodes(int val);
+
+  int getReplyWaitsInProgress();
+
+  int getReplyWaitsCompleted();
+
+  long getReplyWaitTime();
+
+  long getReplyWaitMaxTime();
+
+  long startSocketWrite(boolean sync);
+
+  void endSocketWrite(boolean sync, long start, int bytesWritten, int retries);
+
+  long startSocketLock();
+
+  void endSocketLock(long start);
+
+  long startBufferAcquire();
+
+  void endBufferAcquire(long start);
+
+  void incUcastWriteBytes(int bytesWritten);
+
+  void incMcastWriteBytes(int bytesWritten);
+
+  int getMcastWrites();
+
+  int getMcastReads();
+
+  long getUDPMsgDecryptionTime();
+
+  long getUDPMsgEncryptionTime();
+
+  void incMcastReadBytes(int amount);
+
+  void incUcastReadBytes(int amount);
+
+  long startSerialization();
+
+  void endSerialization(long start, int bytes);
+
+  long startPdxInstanceDeserialization();
+
+  void endPdxInstanceDeserialization(long start);
+
+  void incPdxSerialization(int bytes);
+
+  void incPdxDeserialization(int bytes);
+
+  void incPdxInstanceCreations();
+
+  long startDeserialization();
+
+  void endDeserialization(long start, int bytes);
+
+  long startMsgSerialization();
+
+  void endMsgSerialization(long start);
+
+  long startUDPMsgEncryption();
+
+  void endUDPMsgEncryption(long start);
+
+  long startMsgDeserialization();
+
+  void endMsgDeserialization(long start);
+
+  long startUDPMsgDecryption();
+
+  void endUDPMsgDecryption(long start);
+
+  long startReplyWait();
+
+  void endReplyWait(long startNanos, long initTime);
+
+  void incReplyTimeouts();
+
+  long getReplyTimeouts();
+
+  void incReceivers();
+
+  void decReceivers();
+
+  void incFailedAccept();
+
+  void incFailedConnect();
+
+  void incReconnectAttempts();
+
+  void incLostLease();
+
+  void incSenders(boolean shared, boolean preserveOrder);
+
+  int getSendersSU();
+
+  void decSenders(boolean shared, boolean preserveOrder);
+
+  int getAsyncSocketWritesInProgress();
+
+  int getAsyncSocketWrites();
+
+  int getAsyncSocketWriteRetries();
+
+  long getAsyncSocketWriteBytes();
+
+  long getAsyncSocketWriteTime();
+
+  long getAsyncQueueAddTime();
+
+  void incAsyncQueueAddTime(long inc);
+
+  long getAsyncQueueRemoveTime();
+
+  void incAsyncQueueRemoveTime(long inc);
+
+  int getAsyncQueues();
+
+  void incAsyncQueues(int inc);
+
+  int getAsyncQueueFlushesInProgress();
+
+  int getAsyncQueueFlushesCompleted();
+
+  long getAsyncQueueFlushTime();
+
+  long startAsyncQueueFlush();
+
+  void endAsyncQueueFlush(long start);
+
+  int getAsyncQueueTimeouts();
+
+  void incAsyncQueueTimeouts(int inc);
+
+  int getAsyncQueueSizeExceeded();
+
+  void incAsyncQueueSizeExceeded(int inc);
+
+  int getAsyncDistributionTimeoutExceeded();
+
+  void incAsyncDistributionTimeoutExceeded();
+
+  long getAsyncQueueSize();
+
+  void incAsyncQueueSize(long inc);
+
+  long getAsyncQueuedMsgs();
+
+  void incAsyncQueuedMsgs();
+
+  long getAsyncDequeuedMsgs();
+
+  void incAsyncDequeuedMsgs();
+
+  long getAsyncConflatedMsgs();
+
+  void incAsyncConflatedMsgs();
+
+  int getAsyncThreads();
+
+  void incAsyncThreads(int inc);
+
+  int getAsyncThreadInProgress();
+
+  int getAsyncThreadCompleted();
+
+  long getAsyncThreadTime();
+
+  long startAsyncThread();
+
+  void endAsyncThread(long start);
+
+  ThrottledQueueStatHelper getOverflowQueueHelper();
+
+  QueueStatHelper getWaitingQueueHelper();
+
+  ThrottledQueueStatHelper getHighPriorityQueueHelper();
+
+  ThrottledQueueStatHelper getPartitionedRegionQueueHelper();
+
+  PoolStatHelper getPartitionedRegionPoolHelper();
+
+  ThrottledQueueStatHelper getFunctionExecutionQueueHelper();
+
+  PoolStatHelper getFunctionExecutionPoolHelper();
+
+  ThrottledMemQueueStatHelper getSerialQueueHelper();
+
+  PoolStatHelper getNormalPoolHelper();
+
+  PoolStatHelper getWaitingPoolHelper();
+
+  PoolStatHelper getHighPriorityPoolHelper();
+
+  void incBatchSendTime(long start);
+
+  void incBatchCopyTime(long start);
+
+  void incBatchWaitTime(long start);
+
+  void incBatchFlushTime(long start);
+
+  void incUcastRetransmits();
+
+  void incMcastRetransmits();
+
+  void incMcastRetransmitRequests();
+
+  int getMcastRetransmits();
+
+  void incThreadOwnedReceivers(long value, int dominoCount);
+
+  void incReceiverBufferSize(int inc, boolean direct);
+
+  abstract void incSenderBufferSize(int inc, boolean direct);
+
+  void incMessagesBeingReceived(boolean newMsg, int bytes);
+
+  void decMessagesBeingReceived(int bytes);
+
+  void incSerialThreadStarts();
+
+  void incViewThreadStarts();
+
+  void incProcessingThreadStarts();
+
+  void incHighPriorityThreadStarts();
+
+  void incWaitingThreadStarts();
+
+  void incPartitionedRegionThreadStarts();
+
+  void incFunctionExecutionThreadStarts();
+
+  void incSerialPooledThreadStarts();
+
+  void incReplyHandOffTime(long start);
+
+  void incPartitionedRegionThreadJobs(int i);
+
+  void incFunctionExecutionThreadJobs(int i);
+
+  void incNumViewThreads(int threads);
+
+  PoolStatHelper getSerialProcessorHelper();
+
+  void incNumSerialThreadJobs(int jobs);
+
+  PoolStatHelper getViewProcessorHelper();
+
+  int getNumViewThreads();
+
+  void incViewProcessorThreadJobs(int jobs);
+
+  PoolStatHelper getSerialPooledProcessorHelper();
+
+  void incSerialPooledProcessorThreadJobs(int jobs);
+
+  void incNormalPoolThreadJobs(int jobs);
+
+  void incHighPriorityThreadJobs(int jobs);
+
+  void incWaitingPoolThreadJobs(int jobs);
+
+  int getElders();
+
+  void incElders(int val);
+
+  int getInitialImageMessagesInFlight();
+
+  void incInitialImageMessagesInFlight(int val);
+
+  int getInitialImageRequestsInProgress();
+
+  void incInitialImageRequestsInProgress(int val);
+
+  Statistics getStats();
+
+  // For GMSHealthMonitor
+  long getHeartbeatRequestsSent();
+
+  void incHeartbeatRequestsSent();
+
+  long getHeartbeatRequestsReceived();
+
+  void incHeartbeatRequestsReceived();
+
+  long getHeartbeatsSent();
+
+  void incHeartbeatsSent();
+
+  long getHeartbeatsReceived();
+
+  void incHeartbeatsReceived();
+
+  long getSuspectsSent();
+
+  void incSuspectsSent();
+
+  long getSuspectsReceived();
+
+  void incSuspectsReceived();
+
+  long getFinalCheckRequestsSent();
+
+  void incFinalCheckRequestsSent();
+
+  long getFinalCheckRequestsReceived();
+
+  void incFinalCheckRequestsReceived();
+
+  long getFinalCheckResponsesSent();
+
+  void incFinalCheckResponsesSent();
+
+  long getFinalCheckResponsesReceived();
+
+  void incFinalCheckResponsesReceived();
+
+  ///
+  long getTcpFinalCheckRequestsSent();
+
+  void incTcpFinalCheckRequestsSent();
+
+  long getTcpFinalCheckRequestsReceived();
+
+  void incTcpFinalCheckRequestsReceived();
+
+  long getTcpFinalCheckResponsesSent();
+
+  void incTcpFinalCheckResponsesSent();
+
+  long getTcpFinalCheckResponsesReceived();
+
+  void incTcpFinalCheckResponsesReceived();
+
+  ///
+  long getUdpFinalCheckRequestsSent();
+
+  void incUdpFinalCheckRequestsSent();
+
+  long getUdpFinalCheckResponsesReceived();
+
+  void incUdpFinalCheckResponsesReceived();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/distributed/internal/LocatorStats.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/LocatorStats.java
new file mode 100644
index 0000000..fb095b5
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/distributed/internal/LocatorStats.java
@@ -0,0 +1,28 @@
+package org.apache.geode.distributed.internal;
+
+import org.apache.geode.statistics.StatisticsFactory;
+
+public interface LocatorStats {
+
+  void hookupStats(StatisticsFactory f, String name);
+
+  void setServerCount(int sc);
+
+  void setLocatorCount(int lc);
+
+  void endLocatorRequest(long startTime);
+
+  void endLocatorResponse(long startTime);
+
+  void setLocatorRequests(long rl);
+
+  void setLocatorResponses(long rl);
+
+  void setServerLoadUpdates(long v);
+
+  void incServerLoadUpdates();
+
+  void incRequestInProgress(int threads);
+
+  void close();
+}
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/PoolStatHelper.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/PoolStatHelper.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/distributed/internal/PoolStatHelper.java
rename to geode-common/src/main/java/org/apache/geode/distributed/internal/PoolStatHelper.java
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/QueueStatHelper.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/QueueStatHelper.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/distributed/internal/QueueStatHelper.java
rename to geode-common/src/main/java/org/apache/geode/distributed/internal/QueueStatHelper.java
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ThrottledMemQueueStatHelper.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/ThrottledMemQueueStatHelper.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/distributed/internal/ThrottledMemQueueStatHelper.java
rename to geode-common/src/main/java/org/apache/geode/distributed/internal/ThrottledMemQueueStatHelper.java
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ThrottledQueueStatHelper.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/ThrottledQueueStatHelper.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/distributed/internal/ThrottledQueueStatHelper.java
rename to geode-common/src/main/java/org/apache/geode/distributed/internal/ThrottledQueueStatHelper.java
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DistributedLockStats.java b/geode-common/src/main/java/org/apache/geode/distributed/internal/locks/DistributedLockStats.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DistributedLockStats.java
rename to geode-common/src/main/java/org/apache/geode/distributed/internal/locks/DistributedLockStats.java
index 7344bf8..9cb9baf 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DistributedLockStats.java
+++ b/geode-common/src/main/java/org/apache/geode/distributed/internal/locks/DistributedLockStats.java
@@ -17,6 +17,7 @@ package org.apache.geode.distributed.internal.locks;
 
 import org.apache.geode.distributed.internal.PoolStatHelper;
 import org.apache.geode.distributed.internal.QueueStatHelper;
+import org.apache.geode.statistics.Statistics;
 
 /**
  * Defines the interface used to access and modify distributed lock statistics.
@@ -267,4 +268,8 @@ public interface DistributedLockStats {
   int getFreeResourcesFailed();
 
   void incFreeResourcesFailed();
+
+  void close();
+
+  Statistics getStats();
 }
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java
new file mode 100644
index 0000000..a352abb
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/CachePerfStats.java
@@ -0,0 +1,353 @@
+package org.apache.geode.internal.cache;
+
+import org.apache.geode.distributed.internal.PoolStatHelper;
+import org.apache.geode.distributed.internal.QueueStatHelper;
+import org.apache.geode.statistics.Statistics;
+
+public interface CachePerfStats {
+  /**
+   * Returns the current NanoTime or, if clock stats are disabled, zero.
+   * @since GemFire 5.0
+   */
+  static long getStatTime() {
+    return System.nanoTime();
+  }
+
+  int getLoadsInProgress();
+
+  int getLoadsCompleted();
+
+  long getLoadTime();
+
+  int getNetloadsInProgress();
+
+  int getNetloadsCompleted();
+
+  long getNetloadTime();
+
+  int getNetsearchesInProgress();
+
+  int getNetsearchesCompleted();
+
+  long getNetsearchTime();
+
+  int getGetInitialImagesInProgress();
+
+  int getGetInitialImagesCompleted();
+
+  int getDeltaGetInitialImagesCompleted();
+
+  long getGetInitialImageTime();
+
+  int getGetInitialImageKeysReceived();
+
+  int getRegions();
+
+  int getPartitionedRegions();
+
+  int getDestroys();
+
+  int getCreates();
+
+  int getPuts();
+
+  int getPutAlls();
+
+  int getRemoveAlls();
+
+  int getUpdates();
+
+  int getInvalidates();
+
+  int getGets();
+
+  int getMisses();
+
+  int getReliableQueuedOps();
+
+  void incReliableQueuedOps(int inc);
+
+  int getReliableQueueSize();
+
+  void incReliableQueueSize(int inc);
+
+  int getReliableQueueMax();
+
+  void incReliableQueueMax(int inc);
+
+  int getReliableRegions();
+
+  void incReliableRegions(int inc);
+
+  int getReliableRegionsMissing();
+
+  void incReliableRegionsMissing(int inc);
+
+  int getReliableRegionsQueuing();
+
+  void incReliableRegionsQueuing(int inc);
+
+  int getReliableRegionsMissingFullAccess();
+
+  void incReliableRegionsMissingFullAccess(int inc);
+
+  int getReliableRegionsMissingLimitedAccess();
+
+  void incReliableRegionsMissingLimitedAccess(int inc);
+
+  int getReliableRegionsMissingNoAccess();
+
+  void incReliableRegionsMissingNoAccess(int inc);
+
+  void incQueuedEvents(int inc);
+
+  long getQueuedEvents();
+
+  int getDeltaUpdates();
+
+  long getDeltaUpdatesTime();
+
+  int getDeltaFailedUpdates();
+
+  int getDeltasPrepared();
+
+  long getDeltasPreparedTime();
+
+  int getDeltasSent();
+
+  int getDeltaFullValuesSent();
+
+  int getDeltaFullValuesRequested();
+
+  long getTotalCompressionTime();
+
+  long getTotalDecompressionTime();
+
+  long getTotalCompressions();
+
+  long getTotalDecompressions();
+
+  long getTotalPreCompressedBytes();
+
+  long getTotalPostCompressedBytes();
+
+  long startCompression();
+
+  void endCompression(long startTime, long startSize, long endSize);
+
+  long startDecompression();
+
+  void endDecompression(long startTime);
+
+  long startLoad();
+
+  void endLoad(long start);
+
+  long startNetload();
+
+  void endNetload(long start);
+
+  long startNetsearch();
+
+  void endNetsearch(long start);
+
+  long startCacheWriterCall();
+
+  void endCacheWriterCall(long start);
+
+  long startCacheListenerCall();
+
+  void endCacheListenerCall(long start);
+
+  long startGetInitialImage();
+
+  void endGetInitialImage(long start);
+
+  void endNoGIIDone(long start);
+
+  void incDeltaGIICompleted();
+
+  void incGetInitialImageKeysReceived();
+
+  long startIndexUpdate();
+
+  void endIndexUpdate(long start);
+
+  long startIndexInitialization();
+
+  void endIndexInitialization(long start);
+
+  long getIndexInitializationTime();
+
+  void incRegions(int inc);
+
+  void incPartitionedRegions(int inc);
+
+  void incDestroys();
+
+  void incCreates();
+
+  void incInvalidates();
+
+  long startGet();
+
+  void endGet(long start, boolean miss);
+
+  long endPut(long start, boolean isUpdate);
+
+  void endPutAll(long start);
+
+  void endRemoveAll(long start);
+
+  void endQueryExecution(long executionTime);
+
+  void endQueryResultsHashCollisionProbe(long start);
+
+  void incQueryResultsHashCollisions();
+
+  int getTxCommits();
+
+  int getTxCommitChanges();
+
+  long getTxCommitTime();
+
+  long getTxSuccessLifeTime();
+
+  int getTxFailures();
+
+  int getTxFailureChanges();
+
+  long getTxFailureTime();
+
+  long getTxFailedLifeTime();
+
+  int getTxRollbacks();
+
+  int getTxRollbackChanges();
+
+  long getTxRollbackTime();
+
+  long getTxRollbackLifeTime();
+
+  void incTxConflictCheckTime(long delta);
+
+  void txSuccess(long opTime, long txLifeTime, int txChanges);
+
+  void txFailure(long opTime, long txLifeTime, int txChanges);
+
+  void txRollback(long opTime, long txLifeTime, int txChanges);
+
+  void endDeltaUpdate(long start);
+
+  void incDeltaFailedUpdates();
+
+  void endDeltaPrepared(long start);
+
+  void incDeltasSent();
+
+  void incDeltaFullValuesSent();
+
+  void incDeltaFullValuesRequested();
+
+  void close();
+
+  boolean isClosed();
+
+  int getEventQueueSize();
+
+  void incEventQueueSize(int items);
+
+  void incEventQueueThrottleCount(int items);
+
+  void incEventQueueThrottleTime(long nanos);
+
+  void incEventThreads(int items);
+
+  void incEntryCount(int delta);
+
+  long getEntries();
+
+  void incRetries();
+
+  void incDiskTasksWaiting();
+
+  void decDiskTasksWaiting();
+
+  int getDiskTasksWaiting();
+
+  void decDiskTasksWaiting(int count);
+
+  void incEvictorJobsStarted();
+
+  void incEvictorJobsCompleted();
+
+  void incEvictorQueueSize(int delta);
+
+  void incEvictWorkTime(long delta);
+
+  Statistics getStats();
+
+  PoolStatHelper getEventPoolHelper();
+
+  int getClearCount();
+
+  void incClearCount();
+
+  long getConflatedEventsCount();
+
+  void incConflatedEventsCount();
+
+  int getTombstoneCount();
+
+  void incTombstoneCount(int amount);
+
+  int getTombstoneGCCount();
+
+  void incTombstoneGCCount();
+
+  void setReplicatedTombstonesSize(long size);
+
+  long getReplicatedTombstonesSize();
+
+  void setNonReplicatedTombstonesSize(long size);
+
+  long getNonReplicatedTombstonesSize();
+
+  int getClearTimeouts();
+
+  void incClearTimeouts();
+
+  void incPRQueryRetries();
+
+  long getPRQueryRetries();
+
+  QueueStatHelper getEvictionQueueStatHelper();
+
+  void incMetaDataRefreshCount();
+
+  long getMetaDataRefreshCount();
+
+  long getImportedEntriesCount();
+
+  long getImportTime();
+
+  void endImport(long entryCount, long start);
+
+  long getExportedEntriesCount();
+
+  long getExportTime();
+
+  void endExport(long entryCount, long start);
+
+  void incEntryCompressedCount();
+
+  void incEntryCompressedTime(long time);
+
+  void incPostCompressedBytes(long size);
+
+  void incPreCompressedBytes(long size);
+
+  void incDecompressedEntryCount();
+
+  void incDecompressionTime(long time);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/DiskDirectoryStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/DiskDirectoryStats.java
new file mode 100644
index 0000000..e0b645f
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/DiskDirectoryStats.java
@@ -0,0 +1,17 @@
+package org.apache.geode.internal.cache;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface DiskDirectoryStats {
+  void close();
+
+  long getDiskSpace();
+
+  void incDiskSpace(long delta);
+
+  void setMaxSpace(long v);
+
+  void addVolumeCheck(long total, long free, long time);
+
+  Statistics getStats();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/DiskRegionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/DiskRegionStats.java
new file mode 100644
index 0000000..c084c71
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/DiskRegionStats.java
@@ -0,0 +1,53 @@
+package org.apache.geode.internal.cache;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface DiskRegionStats {
+  void close();
+
+  long getWrites();
+
+  long getWriteTime();
+
+  long getBytesWritten();
+
+  long getReads();
+
+  long getReadTime();
+
+  long getBytesRead();
+
+  long getRemoves();
+
+  long getRemoveTime();
+
+  long getNumOverflowOnDisk();
+
+  long getNumOverflowBytesOnDisk();
+
+  long getNumEntriesInVM();
+
+  void incNumOverflowOnDisk(long delta);
+
+  void incNumEntriesInVM(long delta);
+
+  void incNumOverflowBytesOnDisk(long delta);
+
+  void startWrite();
+
+  void incWrittenBytes(long bytesWritten);
+
+  void endWrite(long start, long end);
+
+  void endRead(long start, long end, long bytesRead);
+
+  void endRemove(long start, long end);
+
+  void incInitializations(boolean local);
+
+  int getLocalInitializations();
+
+  int getRemoteInitializations();
+
+  Statistics getStats();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/DiskStoreStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/DiskStoreStats.java
new file mode 100644
index 0000000..648df80
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/DiskStoreStats.java
@@ -0,0 +1,99 @@
+package org.apache.geode.internal.cache;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface DiskStoreStats {
+  void close();
+
+  long getWrites();
+
+  long getWriteTime();
+
+  long getBytesWritten();
+
+  long getReads();
+
+  long getReadTime();
+
+  long getBytesRead();
+
+  long getRemoves();
+
+  long getRemoveTime();
+
+  long getQueueSize();
+
+  void setQueueSize(int value);
+
+  void incQueueSize(int delta);
+
+  void incUncreatedRecoveredRegions(int delta);
+
+  long startWrite();
+
+  long startFlush();
+
+  void incWrittenBytes(long bytesWritten, boolean async);
+
+  long endWrite(long start);
+
+  void endFlush(long start);
+
+  long getFlushes();
+
+  long startRead();
+
+  long endRead(long start, long bytesRead);
+
+  long startRecovery();
+
+  long startCompaction();
+
+  long startOplogRead();
+
+  void endRecovery(long start, long bytesRead);
+
+  void endCompaction(long start);
+
+  void endOplogRead(long start, long bytesRead);
+
+  void incRecoveredEntryCreates();
+
+  void incRecoveredEntryUpdates();
+
+  void incRecoveredEntryDestroys();
+
+  void incRecoveryRecordsSkipped();
+
+  void incRecoveredValuesSkippedDueToLRU();
+
+  long startRemove();
+
+  long endRemove(long start);
+
+  void incOplogReads();
+
+  void incOplogSeeks();
+
+  void incInactiveOplogs(int delta);
+
+  void incCompactableOplogs(int delta);
+
+  void endCompactionDeletes(int count, long delta);
+
+  void endCompactionInsert(long start);
+
+  void endCompactionUpdate(long start);
+
+  long getStatTime();
+
+  void incOpenOplogs();
+
+  void decOpenOplogs();
+
+  void startBackup();
+
+  void endBackup();
+
+  Statistics getStats();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/PartitionedRegionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/PartitionedRegionStats.java
new file mode 100644
index 0000000..b4a5d83
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/PartitionedRegionStats.java
@@ -0,0 +1,224 @@
+package org.apache.geode.internal.cache;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface PartitionedRegionStats {
+  void close();
+
+  Statistics getStats();
+
+  void endPut(long start);
+
+  void endPutAll(long start);
+
+  void endRemoveAll(long start);
+
+  void endCreate(long start);
+
+  void endGet(long start);
+
+  void endContainsKey(long start);
+
+  void endContainsValueForKey(long start);
+
+  void endPut(long start, int numInc);
+
+  void endPutAll(long start, int numInc);
+
+  void endRemoveAll(long start, int numInc);
+
+  void endCreate(long start, int numInc);
+
+  void endGet(long start, int numInc);
+
+  void endDestroy(long start);
+
+  void endInvalidate(long start);
+
+  void endContainsKey(long start, int numInc);
+
+  void endContainsValueForKey(long start, int numInc);
+
+  void incContainsKeyValueRetries();
+
+  void incContainsKeyValueOpsRetried();
+
+  void incInvalidateRetries();
+
+  void incInvalidateOpsRetried();
+
+  void incDestroyRetries();
+
+  void incDestroyOpsRetried();
+
+  void incPutRetries();
+
+  void incPutOpsRetried();
+
+  void incGetOpsRetried();
+
+  void incGetRetries();
+
+  void incCreateOpsRetried();
+
+  void incCreateRetries();
+
+  void incPreferredReadLocal();
+
+  void incPreferredReadRemote();
+
+  long startPartitionMessageProcessing();
+
+  void endPartitionMessagesProcessing(long start);
+
+  void incPartitionMessagesSent();
+
+  void incBucketCount(int delta);
+
+  void setBucketCount(int i);
+
+  void incDataStoreEntryCount(int amt);
+
+  int getDataStoreEntryCount();
+
+  void incBytesInUse(long delta);
+
+  long getDataStoreBytesInUse();
+
+  int getTotalBucketCount();
+
+  void incPutAllRetries();
+
+  void incPutAllMsgsRetried();
+
+  void incRemoveAllRetries();
+
+  void incRemoveAllMsgsRetried();
+
+  int getVolunteeringInProgress();
+
+  int getVolunteeringBecamePrimary();
+
+  long getVolunteeringBecamePrimaryTime();
+
+  int getVolunteeringOtherPrimary();
+
+  long getVolunteeringOtherPrimaryTime();
+
+  int getVolunteeringClosed();
+
+  long getVolunteeringClosedTime();
+
+  long startVolunteering();
+
+  void endVolunteeringBecamePrimary(long start);
+
+  void endVolunteeringOtherPrimary(long start);
+
+  void endVolunteeringClosed(long start);
+
+  int getTotalNumBuckets();
+
+  void incTotalNumBuckets(int val);
+
+  int getPrimaryBucketCount();
+
+  void incPrimaryBucketCount(int val);
+
+  int getVolunteeringThreads();
+
+  void incVolunteeringThreads(int val);
+
+  int getLowRedundancyBucketCount();
+
+  int getNoCopiesBucketCount();
+
+  void incLowRedundancyBucketCount(int val);
+
+  void incNoCopiesBucketCount(int val);
+
+  int getConfiguredRedundantCopies();
+
+  void setConfiguredRedundantCopies(int val);
+
+  void setLocalMaxMemory(long l);
+
+  int getActualRedundantCopies();
+
+  void setActualRedundantCopies(int val);
+
+  void putStartTime(Object key, long startTime);
+
+  long removeStartTime(Object key);
+
+  void endGetEntry(long startTime);
+
+  void endGetEntry(long start, int numInc);
+
+  // ------------------------------------------------------------------------
+  // bucket creation, primary transfer stats (see also rebalancing stats below)
+  // ------------------------------------------------------------------------
+  long startRecovery();
+
+  void endRecovery(long start);
+
+  long startBucketCreate(boolean isRebalance);
+
+  void endBucketCreate(long start, boolean success, boolean isRebalance);
+
+  long startPrimaryTransfer(boolean isRebalance);
+
+  void endPrimaryTransfer(long start, boolean success, boolean isRebalance);
+
+  int getBucketCreatesInProgress();
+
+  int getBucketCreatesCompleted();
+
+  int getBucketCreatesFailed();
+
+  long getBucketCreateTime();
+
+  int getPrimaryTransfersInProgress();
+
+  int getPrimaryTransfersCompleted();
+
+  int getPrimaryTransfersFailed();
+
+  long getPrimaryTransferTime();
+
+  int getRebalanceBucketCreatesInProgress();
+
+  int getRebalanceBucketCreatesCompleted();
+
+  int getRebalanceBucketCreatesFailed();
+
+  long getRebalanceBucketCreateTime();
+
+  int getRebalancePrimaryTransfersInProgress();
+
+  int getRebalancePrimaryTransfersCompleted();
+
+  int getRebalancePrimaryTransfersFailed();
+
+  long getRebalancePrimaryTransferTime();
+
+  long startApplyReplication();
+
+  void endApplyReplication(long start);
+
+  long startSendReplication();
+
+  void endSendReplication(long start);
+
+  long startPutRemote();
+
+  void endPutRemote(long start);
+
+  long startPutLocal();
+
+  void endPutLocal(long start);
+
+  void incPRMetaDataSentCount();
+
+  long getPRMetaDataSentCount();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/PoolStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/PoolStats.java
new file mode 100644
index 0000000..3360c43
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/PoolStats.java
@@ -0,0 +1,80 @@
+package org.apache.geode.internal.cache;
+
+public interface PoolStats {
+  static long getStatTime() {
+    return System.nanoTime();
+  }
+
+  void close();
+
+  long startTime();
+
+  void setInitialContacts(int ic);
+
+  void setServerCount(int sc);
+
+  void setSubscriptionCount(int qc);
+
+  void setLocatorCount(int lc);
+
+  long getLocatorRequests();
+
+  void incLocatorRequests();
+
+  void incLocatorResponses();
+
+  void setLocatorRequests(long rl);
+
+  void setLocatorResponses(long rl);
+
+  // public void incConCount(int delta) {
+  // this._stats.incInt(conCountId, delta);
+  // }
+  void incConnections(int delta);
+
+  void incPoolConnections(int delta);
+
+  int getPoolConnections();
+
+  int getConnects();
+
+  int getDisconnects();
+
+  void incPrefillConnect();
+
+  int getLoadConditioningCheck();
+
+  void incLoadConditioningCheck();
+
+  int getLoadConditioningExtensions();
+
+  void incLoadConditioningExtensions();
+
+  void incIdleCheck();
+
+  int getLoadConditioningConnect();
+
+  void incLoadConditioningConnect();
+
+  int getLoadConditioningReplaceTimeouts();
+
+  void incLoadConditioningReplaceTimeouts();
+
+  int getLoadConditioningDisconnect();
+
+  void incLoadConditioningDisconnect();
+
+  int getIdleExpire();
+
+  void incIdleExpire(int delta);
+
+  long beginConnectionWait();
+
+  void endConnectionWait(long start);
+
+  void startClientOp();
+
+  void endClientOpSend(long duration, boolean failed);
+
+  void endClientOp(long duration, boolean timedOut, boolean failed);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/RegionPerfStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/RegionPerfStats.java
new file mode 100644
index 0000000..55c3ae2
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/RegionPerfStats.java
@@ -0,0 +1,4 @@
+package org.apache.geode.internal.cache;
+
+public interface RegionPerfStats extends CachePerfStats {
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/control/ResourceManagerStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/control/ResourceManagerStats.java
new file mode 100644
index 0000000..0ef7964
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/control/ResourceManagerStats.java
@@ -0,0 +1,142 @@
+package org.apache.geode.internal.cache.control;
+
+import org.apache.geode.distributed.internal.PoolStatHelper;
+import org.apache.geode.distributed.internal.QueueStatHelper;
+
+public interface ResourceManagerStats {
+  void close();
+
+  long startRebalance();
+
+  void incAutoRebalanceAttempts();
+
+  void endRebalance(long start);
+
+  void startBucketCreate(int regions);
+
+  void endBucketCreate(int regions, boolean success, long bytes, long elapsed);
+
+  void startBucketRemove(int regions);
+
+  void endBucketRemove(int regions, boolean success, long bytes, long elapsed);
+
+  void startBucketTransfer(int regions);
+
+  void endBucketTransfer(int regions, boolean success, long bytes, long elapsed);
+
+  void startPrimaryTransfer(int regions);
+
+  void endPrimaryTransfer(int regions, boolean success, long elapsed);
+
+  void incRebalanceMembershipChanges(int delta);
+
+  int getRebalanceMembershipChanges();
+
+  int getRebalancesInProgress();
+
+  int getRebalancesCompleted();
+
+  int getAutoRebalanceAttempts();
+
+  long getRebalanceTime();
+
+  int getRebalanceBucketCreatesInProgress();
+
+  int getRebalanceBucketCreatesCompleted();
+
+  int getRebalanceBucketCreatesFailed();
+
+  long getRebalanceBucketCreateTime();
+
+  long getRebalanceBucketCreateBytes();
+
+  int getRebalanceBucketTransfersInProgress();
+
+  int getRebalanceBucketTransfersCompleted();
+
+  int getRebalanceBucketTransfersFailed();
+
+  long getRebalanceBucketTransfersTime();
+
+  long getRebalanceBucketTransfersBytes();
+
+  int getRebalancePrimaryTransfersInProgress();
+
+  int getRebalancePrimaryTransfersCompleted();
+
+  int getRebalancePrimaryTransfersFailed();
+
+  long getRebalancePrimaryTransferTime();
+
+  void incResourceEventsDelivered();
+
+  int getResourceEventsDelivered();
+
+  void incHeapCriticalEvents();
+
+  int getHeapCriticalEvents();
+
+  void incOffHeapCriticalEvents();
+
+  int getOffHeapCriticalEvents();
+
+  void incHeapSafeEvents();
+
+  int getHeapSafeEvents();
+
+  void incOffHeapSafeEvents();
+
+  int getOffHeapSafeEvents();
+
+  void incEvictionStartEvents();
+
+  int getEvictionStartEvents();
+
+  void incOffHeapEvictionStartEvents();
+
+  int getOffHeapEvictionStartEvents();
+
+  void incEvictionStopEvents();
+
+  int getEvictionStopEvents();
+
+  void incOffHeapEvictionStopEvents();
+
+  int getOffHeapEvictionStopEvents();
+
+  void changeCriticalThreshold(long newValue);
+
+  long getCriticalThreshold();
+
+  void changeOffHeapCriticalThreshold(long newValue);
+
+  long getOffHeapCriticalThreshold();
+
+  void changeEvictionThreshold(long newValue);
+
+  long getEvictionThreshold();
+
+  void changeOffHeapEvictionThreshold(long newValue);
+
+  long getOffHeapEvictionThreshold();
+
+  void changeTenuredHeapUsed(long newValue);
+
+  long getTenuredHeapUsed();
+
+  void incResourceEventQueueSize(int delta);
+
+  int getResourceEventQueueSize();
+
+  void incThresholdEventProcessorThreadJobs(int delta);
+
+  int getThresholdEventProcessorThreadJobs();
+
+  QueueStatHelper getResourceEventQueueStatHelper();
+
+  PoolStatHelper getResourceEventPoolStatHelper();
+
+  int getNumThreadStuck();
+
+  void setNumThreadStuck(int value);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/CountLRUEvictionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/CountLRUEvictionStats.java
new file mode 100644
index 0000000..b644dbe
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/CountLRUEvictionStats.java
@@ -0,0 +1,4 @@
+package org.apache.geode.internal.cache.eviction;
+
+public interface CountLRUEvictionStats extends EvictionStats {
+}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/eviction/EvictionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/EvictionStats.java
similarity index 96%
copy from geode-core/src/main/java/org/apache/geode/internal/cache/eviction/EvictionStats.java
copy to geode-common/src/main/java/org/apache/geode/internal/cache/eviction/EvictionStats.java
index d4b286b..5359d5a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/eviction/EvictionStats.java
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/EvictionStats.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.internal.cache.eviction;
 
-import org.apache.geode.Statistics;
+import org.apache.geode.statistics.Statistics;
 
 public interface EvictionStats {
 
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/HeapLRUEvictionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/HeapLRUEvictionStats.java
new file mode 100644
index 0000000..1106170
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/HeapLRUEvictionStats.java
@@ -0,0 +1,4 @@
+package org.apache.geode.internal.cache.eviction;
+
+public interface HeapLRUEvictionStats extends EvictionStats {
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/MemoryLRUEvictionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/MemoryLRUEvictionStats.java
new file mode 100644
index 0000000..89f6fe4
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/eviction/MemoryLRUEvictionStats.java
@@ -0,0 +1,4 @@
+package org.apache.geode.internal.cache.eviction;
+
+public interface MemoryLRUEvictionStats extends EvictionStats {
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/execute/FunctionStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/execute/FunctionStats.java
new file mode 100644
index 0000000..003b733
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/execute/FunctionStats.java
@@ -0,0 +1,46 @@
+package org.apache.geode.internal.cache.execute;
+
+public interface FunctionStats {
+
+  void close();
+
+  int getFunctionExecutionsCompleted();
+
+  void incFunctionExecutionsCompleted();
+
+  long getFunctionExecutionCompleteProcessingTime();
+
+  int getFunctionExecutionsRunning();
+
+  void incFunctionExecutionsRunning();
+
+  int getResultsSentToResultCollector();
+
+  void incResultsReturned();
+
+  int getResultsReceived();
+
+  void incResultsReceived();
+
+  int getFunctionExecutionCalls();
+
+  void incFunctionExecutionCalls();
+
+  int getFunctionExecutionHasResultCompleteProcessingTime();
+
+  int getFunctionExecutionHasResultRunning();
+
+  void incFunctionExecutionHasResultRunning();
+
+  int getFunctionExecutionExceptions();
+
+  void incFunctionExecutionExceptions();
+
+  long startTime();
+
+  void startFunctionExecution(boolean haveResult);
+
+  void endFunctionExecution(long start, boolean haveResult);
+
+  void endFunctionExecutionWithException(boolean haveResult);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueueStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueueStats.java
new file mode 100644
index 0000000..131a714
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueueStats.java
@@ -0,0 +1,56 @@
+package org.apache.geode.internal.cache.ha;
+
+public interface HARegionQueueStats {
+  /** Name of the events queued statistic */
+  String EVENTS_QUEUED = "eventsQueued";
+
+  void close();
+
+  long getEventsEnqued();
+
+  void incEventsEnqued();
+
+  long getEventsConflated();
+
+  void incEventsConflated();
+
+  long getMarkerEventsConflated();
+
+  void incMarkerEventsConflated();
+
+  long getEventsRemoved();
+
+  void incEventsRemoved();
+
+  long getEventsTaken();
+
+  void incEventsTaken();
+
+  long getEventsExpired();
+
+  void incEventsExpired();
+
+  long getEventsRemovedByQrm();
+
+  void incEventsRemovedByQrm();
+
+  int getThreadIdentiferCount();
+
+  void incThreadIdentifiers();
+
+  void decThreadIdentifiers();
+
+  long getEventsDispatched();
+
+  void incEventsDispatched();
+
+  long getNumVoidRemovals();
+
+  void incNumVoidRemovals();
+
+  long getNumSequenceViolated();
+
+  void incNumSequenceViolated();
+
+  boolean isClosed();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CCUStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CCUStats.java
new file mode 100644
index 0000000..47195b3
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CCUStats.java
@@ -0,0 +1,5 @@
+package org.apache.geode.internal.cache.tier.sockets;
+
+public interface CCUStats extends MessageStats {
+  void close();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierStats.java
new file mode 100644
index 0000000..c7ea4b2
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifierStats.java
@@ -0,0 +1,47 @@
+package org.apache.geode.internal.cache.tier.sockets;
+
+public interface CacheClientNotifierStats {
+  void close();
+
+  int getEvents();
+
+  long getEventProcessingTime();
+
+  long startTime();
+
+  void endEvent(long start);
+
+  void endClientRegistration(long start);
+
+  void endCqProcessing(long start);
+
+  void incClientRegisterRequests();
+
+  int getClientRegisterRequests();
+
+  int get_durableReconnectionCount();
+
+  int get_queueDroppedCount();
+
+  int get_eventEnqueuedWhileClientAwayCount();
+
+  long getCqProcessingTime();
+
+  long getCompiledQueryCount();
+
+  long getCompiledQueryUsedCount();
+
+  void incDurableReconnectionCount();
+
+  void incQueueDroppedCount();
+
+  void incEventEnqueuedWhileClientAwayCount();
+
+  void incClientUnRegisterRequests();
+
+  void incCompiledQueryCount(long count);
+
+  void incCompiledQueryUsedCount(long count);
+
+  int getClientUnRegisterRequests();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerStats.java
new file mode 100644
index 0000000..ee5b7cb
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerStats.java
@@ -0,0 +1,184 @@
+package org.apache.geode.internal.cache.tier.sockets;
+
+import org.apache.geode.distributed.internal.PoolStatHelper;
+import org.apache.geode.statistics.Statistics;
+
+public interface CacheServerStats extends MessageStats {
+  void incAcceptThreadsCreated();
+
+  void incConnectionThreadsCreated();
+
+  void incAcceptsInProgress();
+
+  void decAcceptsInProgress();
+
+  void incConnectionThreads();
+
+  void decConnectionThreads();
+
+  void incAbandonedWriteRequests();
+
+  void incAbandonedReadRequests();
+
+  void incFailedConnectionAttempts();
+
+  void incConnectionsTimedOut();
+
+  void incCurrentClientConnections();
+
+  void decCurrentClientConnections();
+
+  int getCurrentClientConnections();
+
+  void incCurrentQueueConnections();
+
+  void decCurrentQueueConnections();
+
+  int getCurrentQueueConnections();
+
+  void incCurrentClients();
+
+  void decCurrentClients();
+
+  void incThreadQueueSize();
+
+  void decThreadQueueSize();
+
+  void incReadGetRequestTime(long delta);
+
+  void incProcessGetTime(long delta);
+
+  void incWriteGetResponseTime(long delta);
+
+  void incReadPutAllRequestTime(long delta);
+
+  void incProcessPutAllTime(long delta);
+
+  void incWritePutAllResponseTime(long delta);
+
+  void incReadRemoveAllRequestTime(long delta);
+
+  void incProcessRemoveAllTime(long delta);
+
+  void incWriteRemoveAllResponseTime(long delta);
+
+  void incReadGetAllRequestTime(long delta);
+
+  void incProcessGetAllTime(long delta);
+
+  void incWriteGetAllResponseTime(long delta);
+
+  void incReadPutRequestTime(long delta);
+
+  void incProcessPutTime(long delta);
+
+  void incWritePutResponseTime(long delta);
+
+  void incReadDestroyRequestTime(long delta);
+
+  void incProcessDestroyTime(long delta);
+
+  void incWriteDestroyResponseTime(long delta);
+
+  void incReadInvalidateRequestTime(long delta);
+
+  void incProcessInvalidateTime(long delta);
+
+  void incWriteInvalidateResponseTime(long delta);
+
+  void incReadSizeRequestTime(long delta);
+
+  void incProcessSizeTime(long delta);
+
+  void incWriteSizeResponseTime(long delta);
+
+  void incReadQueryRequestTime(long delta);
+
+  void incProcessQueryTime(long delta);
+
+  void incWriteQueryResponseTime(long delta);
+
+  void incProcessCreateCqTime(long delta);
+
+  void incProcessCloseCqTime(long delta);
+
+  void incProcessExecuteCqWithIRTime(long delta);
+
+  void incProcessStopCqTime(long delta);
+
+  void incProcessCloseClientCqsTime(long delta);
+
+  void incProcessGetCqStatsTime(long delta);
+
+  void incReadDestroyRegionRequestTime(long delta);
+
+  void incProcessDestroyRegionTime(long delta);
+
+  void incWriteDestroyRegionResponseTime(long delta);
+
+  void incReadContainsKeyRequestTime(long delta);
+
+  void incProcessContainsKeyTime(long delta);
+
+  void incWriteContainsKeyResponseTime(long delta);
+
+  void incReadClearRegionRequestTime(long delta);
+
+  void incProcessClearRegionTime(long delta);
+
+  void incWriteClearRegionResponseTime(long delta);
+
+  void incReadProcessBatchRequestTime(long delta);
+
+  void incWriteProcessBatchResponseTime(long delta);
+
+  void incProcessBatchTime(long delta);
+
+  void incBatchSize(long size);
+
+  void incReadClientNotificationRequestTime(long delta);
+
+  void incProcessClientNotificationTime(long delta);
+
+  void incReadUpdateClientNotificationRequestTime(long delta);
+
+  void incProcessUpdateClientNotificationTime(long delta);
+
+  void incReadCloseConnectionRequestTime(long delta);
+
+  void incProcessCloseConnectionTime(long delta);
+
+  void incOutOfOrderBatchIds();
+
+  void incReceivedBytes(long v);
+
+  void incSentBytes(long v);
+
+  void incMessagesBeingReceived(int bytes);
+
+  void decMessagesBeingReceived(int bytes);
+
+  void incReadClientReadyRequestTime(long delta);
+
+  void incProcessClientReadyTime(long delta);
+
+  void incWriteClientReadyResponseTime(long delta);
+
+  void setLoad(float connectionLoad, float loadPerConnection, float queueLoad, float loadPerQueue);
+
+  double getQueueLoad();
+
+  double getLoadPerQueue();
+
+  double getConnectionLoad();
+
+  double getLoadPerConnection();
+
+  int getProcessBatchRequests();
+
+  void close();
+
+  PoolStatHelper getCnxPoolHelper();
+
+  Statistics getStats();
+}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageStats.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageStats.java
rename to geode-common/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageStats.java
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverStats.java
new file mode 100644
index 0000000..a1aeb55
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverStats.java
@@ -0,0 +1,45 @@
+package org.apache.geode.internal.cache.wan;
+
+import org.apache.geode.internal.cache.tier.sockets.CacheServerStats;
+
+public interface GatewayReceiverStats extends CacheServerStats {
+  void incDuplicateBatchesReceived();
+
+  int getDuplicateBatchesReceived();
+
+  void incOutoforderBatchesReceived();
+
+  int getOutoforderBatchesReceived();
+
+  void incEarlyAcks();
+
+  int getEarlyAcks();
+
+  void incEventsReceived(int delta);
+
+  int getEventsReceived();
+
+  void incCreateRequest();
+
+  int getCreateRequest();
+
+  void incUpdateRequest();
+
+  int getUpdateRequest();
+
+  void incDestroyRequest();
+
+  int getDestroyRequest();
+
+  void incUnknowsOperationsReceived();
+
+  int getUnknowsOperationsReceived();
+
+  void incExceptionsOccurred();
+
+  int getExceptionsOccurred();
+
+  void incEventsRetried();
+
+  int getEventsRetried();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java b/geode-common/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java
new file mode 100644
index 0000000..5772527
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderStats.java
@@ -0,0 +1,142 @@
+package org.apache.geode.internal.cache.wan;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface GatewaySenderStats {
+
+  void close();
+
+  int getEventsReceived();
+
+  void incEventsReceived();
+
+  int getEventsQueued();
+
+  int getEventsNotQueuedConflated();
+
+  int getEventsConflatedFromBatches();
+
+  int getEventQueueSize();
+
+  int getSecondaryEventQueueSize();
+
+  int getEventsProcessedByPQRM();
+
+  int getTempEventQueueSize();
+
+  int getEventsDistributed();
+
+  int getEventsExceedingAlertThreshold();
+
+  void incEventsExceedingAlertThreshold();
+
+  long getBatchDistributionTime();
+
+  int getBatchesDistributed();
+
+  int getBatchesRedistributed();
+
+  int getBatchesResized();
+
+  void incBatchesRedistributed();
+
+  void incBatchesResized();
+
+  void setQueueSize(int size);
+
+  void setSecondaryQueueSize(int size);
+
+  void setEventsProcessedByPQRM(int size);
+
+  void setTempQueueSize(int size);
+
+  void incQueueSize();
+
+  void incSecondaryQueueSize();
+
+  void incTempQueueSize();
+
+  void incQueueSize(int delta);
+
+  void incSecondaryQueueSize(int delta);
+
+  void incEventsProcessedByPQRM(int delta);
+
+  void incTempQueueSize(int delta);
+
+  void decQueueSize();
+
+  void decSecondaryQueueSize();
+
+  void decTempQueueSize();
+
+  void decQueueSize(int delta);
+
+  void decSecondaryQueueSize(int delta);
+
+  void decTempQueueSize(int delta);
+
+  void incEventsNotQueuedConflated();
+
+  void incEventsConflatedFromBatches(int numEvents);
+
+  int getUnprocessedTokensAddedByPrimary();
+
+  int getUnprocessedEventsAddedBySecondary();
+
+  int getUnprocessedEventsRemovedByPrimary();
+
+  int getUnprocessedTokensRemovedBySecondary();
+
+  int getUnprocessedEventMapSize();
+
+  int getUnprocessedTokenMapSize();
+
+  void incEventsNotQueued();
+
+  int getEventsNotQueued();
+
+  void incEventsDroppedDueToPrimarySenderNotRunning();
+
+  int getEventsDroppedDueToPrimarySenderNotRunning();
+
+  void incEventsFiltered();
+
+  int getEventsFiltered();
+
+  void incUnprocessedTokensAddedByPrimary();
+
+  void incUnprocessedEventsAddedBySecondary();
+
+  void incUnprocessedEventsRemovedByPrimary();
+
+  void incUnprocessedTokensRemovedBySecondary();
+
+  void incUnprocessedEventsRemovedByTimeout(int count);
+
+  void incUnprocessedTokensRemovedByTimeout(int count);
+
+  void clearUnprocessedMaps();
+
+  void incConflationIndexesMapSize();
+
+  void decConflationIndexesMapSize();
+
+  int getConflationIndexesMapSize();
+
+  long startTime();
+
+  void endBatch(long start, int numberOfEvents);
+
+  void endPut(long start);
+
+  long startLoadBalance();
+
+  void endLoadBalance(long start);
+
+  void incSynchronizationEventsEnqueued();
+
+  void incSynchronizationEventsProvided();
+
+  Statistics getStats();
+}
diff --git a/geode-common/src/main/java/org/apache/geode/internal/offheap/OffHeapStorageStats.java b/geode-common/src/main/java/org/apache/geode/internal/offheap/OffHeapStorageStats.java
new file mode 100644
index 0000000..92d1470
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/internal/offheap/OffHeapStorageStats.java
@@ -0,0 +1,53 @@
+package org.apache.geode.internal.offheap;
+
+import org.apache.geode.statistics.Statistics;
+
+public interface OffHeapStorageStats {
+  void incFreeMemory(long value);
+
+  void incMaxMemory(long value);
+
+  void incUsedMemory(long value);
+
+  void incObjects(int value);
+
+  void incReads();
+
+  void setFragments(long value);
+
+  void setLargestFragment(int value);
+
+  long startDefragmentation();
+
+  void endDefragmentation(long start);
+
+  void setFragmentation(int value);
+
+  long getFreeMemory();
+
+  long getMaxMemory();
+
+  long getUsedMemory();
+
+  long getReads();
+
+  int getObjects();
+
+  int getDefragmentations();
+
+  int getDefragmentationsInProgress();
+
+  long getFragments();
+
+  int getLargestFragment();
+
+  int getFragmentation();
+
+  long getDefragmentationTime();
+
+  Statistics getStats();
+
+  void close();
+
+  void initialize(OffHeapStorageStats stats);
+}
diff --git a/geode-common/src/main/java/org/apache/geode/statistics/GFSStatsImplementor.java b/geode-common/src/main/java/org/apache/geode/statistics/GFSStatsImplementor.java
new file mode 100644
index 0000000..cd7c343
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/statistics/GFSStatsImplementor.java
@@ -0,0 +1,14 @@
+package org.apache.geode.statistics;
+
+public interface GFSStatsImplementor extends StatsImplementor {
+  @Override
+  default String getStatsImplementorType(){return "GFS_Stats_Implementor";}
+
+  @Override
+  default void initializeImplementor(StatisticsFactory factory) {initializeStats(factory);}
+
+  default void initializeStats(StatisticsFactory factory){}
+
+  @Override
+  default void registerStatsImplementor(StatisticsFactory factory) { }
+}
diff --git a/geode-core/src/main/java/org/apache/geode/StatisticDescriptor.java b/geode-common/src/main/java/org/apache/geode/statistics/StatisticDescriptor.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/StatisticDescriptor.java
rename to geode-common/src/main/java/org/apache/geode/statistics/StatisticDescriptor.java
index fa3d827..ef176b5 100644
--- a/geode-core/src/main/java/org/apache/geode/StatisticDescriptor.java
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatisticDescriptor.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode;
+package org.apache.geode.statistics;
 
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/Statistics.java b/geode-common/src/main/java/org/apache/geode/statistics/Statistics.java
similarity index 99%
rename from geode-core/src/main/java/org/apache/geode/Statistics.java
rename to geode-common/src/main/java/org/apache/geode/statistics/Statistics.java
index b368fad..fafe650 100644
--- a/geode-core/src/main/java/org/apache/geode/Statistics.java
+++ b/geode-common/src/main/java/org/apache/geode/statistics/Statistics.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode;
+package org.apache.geode.statistics;
 
 
 import java.util.function.DoubleSupplier;
diff --git a/geode-core/src/main/java/org/apache/geode/StatisticsFactory.java b/geode-common/src/main/java/org/apache/geode/statistics/StatisticsFactory.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/StatisticsFactory.java
rename to geode-common/src/main/java/org/apache/geode/statistics/StatisticsFactory.java
index ae952b2..27ae5ef 100644
--- a/geode-core/src/main/java/org/apache/geode/StatisticsFactory.java
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatisticsFactory.java
@@ -12,14 +12,13 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode;
+package org.apache.geode.statistics;
 
 
 /**
  * Instances of this interface provide methods that create instances of {@link Statistics}. It can
  * also be used to create instances of {@link StatisticDescriptor} and {@link StatisticsType}
  * because it implements {@link StatisticsTypeFactory}.
- * {@link org.apache.geode.distributed.DistributedSystem} is the only instance of this interface.
  *
  * <P>
  *
diff --git a/geode-core/src/main/java/org/apache/geode/StatisticsType.java b/geode-common/src/main/java/org/apache/geode/statistics/StatisticsType.java
similarity index 94%
rename from geode-core/src/main/java/org/apache/geode/StatisticsType.java
rename to geode-common/src/main/java/org/apache/geode/statistics/StatisticsType.java
index 076c2d5..a21d4ba 100644
--- a/geode-core/src/main/java/org/apache/geode/StatisticsType.java
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatisticsType.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode;
+package org.apache.geode.statistics;
 
 
 /**
@@ -58,4 +58,9 @@ public interface StatisticsType {
    */
   StatisticDescriptor nameToDescriptor(String name);
 
+  int getIntStatCount();
+
+  int getLongStatCount();
+
+  int getDoubleStatCount();
 }
diff --git a/geode-core/src/main/java/org/apache/geode/StatisticsTypeFactory.java b/geode-common/src/main/java/org/apache/geode/statistics/StatisticsTypeFactory.java
similarity index 75%
rename from geode-core/src/main/java/org/apache/geode/StatisticsTypeFactory.java
rename to geode-common/src/main/java/org/apache/geode/statistics/StatisticsTypeFactory.java
index 563e1ea..aeaaab9 100644
--- a/geode-core/src/main/java/org/apache/geode/StatisticsTypeFactory.java
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatisticsTypeFactory.java
@@ -12,13 +12,11 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode;
+package org.apache.geode.statistics;
 
 import java.io.IOException;
 import java.io.Reader;
 
-import org.apache.geode.internal.statistics.StatArchiveFormat;
-
 /**
  * Instances of this interface provide methods that create instances of {@link StatisticDescriptor}
  * and {@link StatisticsType}. Every {@link StatisticsFactory} is also a type factory.
@@ -37,55 +35,52 @@ import org.apache.geode.internal.statistics.StatArchiveFormat;
  * two stats whose values always increase:
  *
  * <pre>
-    StatisticsTypeFactory f = ...;
-    StatisticsType t = f.createType(
-        "StatSampler",
-        "Stats on the statistic sampler.",
-        new StatisticDescriptor[] {
-            f.createIntCounter("sampleCount",
-                               "Total number of samples taken by this sampler.",
-                               "samples"),
-            f.createLongCounter("sampleTime",
-                                "Total amount of time spent taking samples.",
-                                "milliseconds"),
-        }
-    );
+ * StatisticsTypeFactory f = ...;
+ * StatisticsType t = f.createType(
+ * "StatSampler",
+ * "Stats on the statistic sampler.",
+ * new StatisticDescriptor[] {
+ * f.createIntCounter("sampleCount",
+ * "Total number of samples taken by this sampler.",
+ * "samples"),
+ * f.createLongCounter("sampleTime",
+ * "Total amount of time spent taking samples.",
+ * "milliseconds"),
+ * }
+ * );
  * </pre>
  * <P>
  * The following is an example of how to create the same type using XML. The XML data:
  *
  * <pre>
-    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
-    &lt;!DOCTYPE statistics PUBLIC
-      "-//GemStone Systems, Inc.//GemFire Statistics Type//EN"
-      "http://www.gemstone.com/dtd/statisticsType.dtd"&gt;
-    &lt;statistics&gt;
-      &lt;type name="StatSampler"&gt;
-        &lt;description&gt;Stats on the statistic sampler.&lt;/description&gt;
-        &lt;stat name="sampleCount" storage="int" counter="true"&gt;
-          &lt;description&gt;Total number of samples taken by this sampler.&lt;/description&gt;
-          &lt;unit&gt;samples&lt;/unit&gt;
-        &lt;/stat&gt;
-        &lt;stat name="sampleTime" storage="long" counter="true"&gt;
-          &lt;description&gt;Total amount of time spent taking samples.&lt;/description&gt;
-          &lt;unit&gt;milliseconds&lt;/unit&gt;
-        &lt;/stat&gt;
-      &lt;/type&gt;
-    &lt;/statistics&gt;
+ * &lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ * &lt;!DOCTYPE statistics PUBLIC
+ * "-//GemStone Systems, Inc.//GemFire Statistics Type//EN"
+ * "http://www.gemstone.com/dtd/statisticsType.dtd"&gt;
+ * &lt;statistics&gt;
+ * &lt;type name="StatSampler"&gt;
+ * &lt;description&gt;Stats on the statistic sampler.&lt;/description&gt;
+ * &lt;stat name="sampleCount" storage="int" counter="true"&gt;
+ * &lt;description&gt;Total number of samples taken by this sampler.&lt;/description&gt;
+ * &lt;unit&gt;samples&lt;/unit&gt;
+ * &lt;/stat&gt;
+ * &lt;stat name="sampleTime" storage="long" counter="true"&gt;
+ * &lt;description&gt;Total amount of time spent taking samples.&lt;/description&gt;
+ * &lt;unit&gt;milliseconds&lt;/unit&gt;
+ * &lt;/stat&gt;
+ * &lt;/type&gt;
+ * &lt;/statistics&gt;
  * </pre>
  *
  * The code to create the type:
  *
  * <pre>
-      StatisticsTypeFactory f = ...;
-      Reader r = new InputStreamReader("fileContainingXmlData"));
-      StatisticsType type = f.createTypesFromXml(r)[0];
+ * StatisticsTypeFactory f = ...;
+ * Reader r = new InputStreamReader("fileContainingXmlData"));
+ * StatisticsType type = f.createTypesFromXml(r)[0];
  * </pre>
  * <P>
- *
  * @see <A href="package-summary.html#statistics">Package introduction</A>
- *
- *
  * @since GemFire 3.0
  */
 public interface StatisticsTypeFactory {
@@ -134,45 +129,49 @@ public interface StatisticsTypeFactory {
 
   /**
    * Creates and returns an int counter {@link StatisticDescriptor} with the given
-   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and <code>units</code>.
+   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and
+   * <code>units</code>.
    */
   StatisticDescriptor createIntCounter(String name, String description, String units,
-      boolean largerBetter);
+                                       boolean largerBetter);
 
   /**
    * Creates and returns a long counter {@link StatisticDescriptor} with the given
-   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and <code>units</code>.
+   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and
+   * <code>units</code>.
    */
   StatisticDescriptor createLongCounter(String name, String description, String units,
-      boolean largerBetter);
+                                        boolean largerBetter);
 
   /**
    * Creates and returns a double counter {@link StatisticDescriptor} with the given
-   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and <code>units</code>.
+   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and
+   * <code>units</code>.
    */
   StatisticDescriptor createDoubleCounter(String name, String description, String units,
-      boolean largerBetter);
+                                          boolean largerBetter);
 
   /**
    * Creates and returns an int gauge {@link StatisticDescriptor} with the given <code>name</code>,
    * <code>description</code>, <code>largerBetter</code>, and <code>units</code>.
    */
   StatisticDescriptor createIntGauge(String name, String description, String units,
-      boolean largerBetter);
+                                     boolean largerBetter);
 
   /**
    * Creates and returns a long gauge {@link StatisticDescriptor} with the given <code>name</code>,
    * <code>description</code>, <code>largerBetter</code>, and <code>units</code>.
    */
   StatisticDescriptor createLongGauge(String name, String description, String units,
-      boolean largerBetter);
+                                      boolean largerBetter);
 
   /**
    * Creates and returns a double gauge {@link StatisticDescriptor} with the given
-   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and <code>units</code>.
+   * <code>name</code>, <code>description</code>, <code>largerBetter</code>, and
+   * <code>units</code>.
    */
   StatisticDescriptor createDoubleGauge(String name, String description, String units,
-      boolean largerBetter);
+                                        boolean largerBetter);
 
 
   /**
@@ -180,14 +179,13 @@ public interface StatisticsTypeFactory {
    * <P>
    * Current value is: <code>254</code>
    */
-  int MAX_DESCRIPTORS_PER_TYPE = StatArchiveFormat.ILLEGAL_STAT_OFFSET - 1;
+  int MAX_DESCRIPTORS_PER_TYPE = 254;
 
   /**
    * Creates or finds and returns a {@link StatisticsType} with the given <code>name</code>,
    * <code>description</code>, and {@link StatisticDescriptor statistic descriptions}.
-   *
    * @throws IllegalArgumentException if a type with the given <code>name</code> already exists and
-   *         it differs from the given parameters.
+   * it differs from the given parameters.
    */
   StatisticsType createType(String name, String description, StatisticDescriptor[] stats);
 
@@ -200,12 +198,15 @@ public interface StatisticsTypeFactory {
   /**
    * Creates one or more {@link StatisticsType} from the contents of the given <code>reader</code>.
    * The created types can be found by calling {@link #findType}.
-   *
    * @param reader The source of the XML data which must comply with the
-   *        <code>statisticsType.dtd</code>.
-   *
+   * <code>statisticsType.dtd</code>.
    * @throws IllegalArgumentException if a type defined in the reader already exists
    * @throws IOException Something went wrong while reading from <code>reader</code>
    */
   StatisticsType[] createTypesFromXml(Reader reader) throws IOException;
+
+  default Statistics createOsStatistics(StatisticsType type, String textId, long numericId,
+                                int osStatFlags) {
+    return null;
+  }
 }
diff --git a/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java b/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java
new file mode 100644
index 0000000..4ce3c81
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatsFactory.java
@@ -0,0 +1,321 @@
+package org.apache.geode.statistics;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.reflections.Reflections;
+import org.reflections.scanners.ResourcesScanner;
+import org.reflections.scanners.SubTypesScanner;
+import org.reflections.util.ClasspathHelper;
+import org.reflections.util.ConfigurationBuilder;
+import org.reflections.util.FilterBuilder;
+import sun.security.jgss.GSSCaller;
+import sun.security.jgss.GSSToken;
+
+import org.apache.geode.cache.client.internal.ConnectionStats;
+import org.apache.geode.cache.query.internal.CqQueryVsdStats;
+import org.apache.geode.cache.query.internal.cq.CqServiceVsdStats;
+import org.apache.geode.distributed.internal.DistributionStats;
+import org.apache.geode.distributed.internal.LocatorStats;
+import org.apache.geode.distributed.internal.locks.DistributedLockStats;
+import org.apache.geode.internal.cache.CachePerfStats;
+import org.apache.geode.internal.cache.DiskDirectoryStats;
+import org.apache.geode.internal.cache.DiskRegionStats;
+import org.apache.geode.internal.cache.DiskStoreStats;
+import org.apache.geode.internal.cache.PartitionedRegionStats;
+import org.apache.geode.internal.cache.PoolStats;
+import org.apache.geode.internal.cache.RegionPerfStats;
+import org.apache.geode.internal.cache.control.ResourceManagerStats;
+import org.apache.geode.internal.cache.eviction.CountLRUEvictionStats;
+import org.apache.geode.internal.cache.eviction.EvictionStats;
+import org.apache.geode.internal.cache.eviction.HeapLRUEvictionStats;
+import org.apache.geode.internal.cache.eviction.MemoryLRUEvictionStats;
+import org.apache.geode.internal.cache.execute.FunctionStats;
+import org.apache.geode.internal.cache.ha.HARegionQueueStats;
+import org.apache.geode.internal.cache.wan.GatewayReceiverStats;
+import org.apache.geode.internal.cache.wan.GatewaySenderStats;
+import org.apache.geode.internal.offheap.OffHeapStorageStats;
+
+public class StatsFactory {
+
+  private static StatsFactory statsFactory = new StatsFactory();
+
+  private Class<? extends StatsImplementor> selectedStatsImplementor = null;
+  private Map<Class<?>, Class<? extends StatsImplementor>>
+      resolvedStatsImplForClass =
+      new HashMap<>();
+  private List<ClassLoader> classLoadersList = new LinkedList<>();
+  private Reflections reflections;
+
+  private StatsFactory() {
+    classLoadersList.add(ClasspathHelper.contextClassLoader());
+    classLoadersList.add(ClasspathHelper.staticClassLoader());
+
+    reflections = new Reflections(new ConfigurationBuilder()
+        .setScanners(new SubTypesScanner(false /* don't exclude Object.class */),
+            new ResourcesScanner())
+        .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
+        .filterInputsBy(new FilterBuilder()
+            .includePackage("org.apache.geode.statistics..*", "org.apache.geode.distributed..*")));
+    try {
+      selectedStatsImplementor =
+          (Class<? extends StatsImplementor>) Class
+              .forName("org.apache.geode.statistics.micrometer.MicrometerStatsImplementor");
+    } catch (ClassNotFoundException e) {
+      e.printStackTrace();
+    }
+  }
+
+  public static LocatorStats createLocatorStatsImpl(StatisticsFactory statisticsFactory,
+                                                    String locatorName) {
+    return (LocatorStats) resolveInstanceFromClass(LocatorStats.class, statisticsFactory,
+        locatorName);
+  }
+
+  public static DiskRegionStats createDiskRegionStatsImpl(StatisticsFactory statisticsFactory,
+                                                          String diskRegionName) {
+    return (DiskRegionStats) resolveInstanceFromClass(DiskRegionStats.class, statisticsFactory,
+        diskRegionName);
+  }
+
+  public static PoolStats createPoolStatsImpl(StatisticsFactory statisticsFactory,
+                                              String poolName) {
+    return (PoolStats) resolveInstanceFromClass(PoolStats.class, statisticsFactory, poolName);
+  }
+
+  public static PartitionedRegionStats createPartitionedRegionStatsImpl(
+      StatisticsFactory statisticsFactory, String fullPath) {
+    return (PartitionedRegionStats) resolveInstanceFromClass(PartitionedRegionStats.class,
+        statisticsFactory, fullPath);
+  }
+
+  public static CachePerfStats createCachePerfStatsImpl(StatisticsFactory statisticsFactory,
+                                                        String name) {
+    return (CachePerfStats) resolveCachePerfInstanceFromClass(CachePerfStats.class,
+        statisticsFactory, name);
+  }
+
+  public static GatewaySenderStats createGatewaySenderStatsImpl(StatisticsFactory statisticsFactory,
+                                                                String id) {
+    return (GatewaySenderStats) resolveInstanceFromClass(GatewaySenderStats.class,
+        statisticsFactory, id);
+  }
+
+  public static DistributionStats createDistributionStatsImpl(StatisticsFactory statisticsFactory,
+                                                              String name) {
+    return (DistributionStats) resolveInstanceFromClass(DistributionStats.class, statisticsFactory,
+        name);
+  }
+
+  public static HARegionQueueStats createHARegionQueueStatsImpl(StatisticsFactory factory,
+                                                                String regionName) {
+    return (HARegionQueueStats) resolveInstanceFromClass(HARegionQueueStats.class, factory,
+        regionName);
+  }
+
+  public static FunctionStats createFunctionStatsImpl(StatisticsFactory statisticsFactory,
+                                                      String functionName) {
+    return (FunctionStats) resolveInstanceFromClass(FunctionStats.class, statisticsFactory,
+        functionName);
+  }
+
+  public static ResourceManagerStats createResourceManagerStatsImpl(
+      StatisticsFactory statisticsFactory) {
+    return (ResourceManagerStats) resolveInstanceFromClass(ResourceManagerStats.class,
+        statisticsFactory, null);
+  }
+
+  public static DiskStoreStats createDiskStoreStatsImpl(StatisticsFactory factory, String name) {
+    return (DiskStoreStats) resolveInstanceFromClass(DiskStoreStats.class, factory,
+        name);
+  }
+
+  public static DiskDirectoryStats createDiskDirectoryStatsImpl(StatisticsFactory factory,
+                                                                String ownersName) {
+    return (DiskDirectoryStats) resolveInstanceFromClass(DiskDirectoryStats.class, factory,
+        ownersName);
+  }
+
+  public static ConnectionStats createConnectionStatsImpl(StatisticsFactory dummyStatisticsFactory,
+                                                          String statName, PoolStats poolStats) {
+    return (ConnectionStats) resolveConnectionStatInstanceFromClass(ConnectionStats.class,
+        dummyStatisticsFactory,
+        statName, poolStats);
+  }
+
+  public static GatewayReceiverStats createGatewayReceiverStatsImpl(
+      StatisticsFactory statisticsFactory, String name) {
+    return (GatewayReceiverStats) resolveInstanceFromClass(GatewayReceiverStats.class,
+        statisticsFactory, name);
+  }
+
+
+  private static StatsImplementor resolveInstanceFromClass(Class<?> interfaceClazz,
+                                                           StatisticsFactory statisticsFactory,
+                                                           String name) {
+    resolveClassImplForClass(interfaceClazz);
+    return statsFactory.createInstanceFromClass(interfaceClazz, statisticsFactory, name);
+  }
+
+  private static StatsImplementor resolveCachePerfInstanceFromClass(Class<?> interfaceClazz,
+                                                                    StatisticsFactory statisticsFactory,
+                                                                    String name) {
+    resolveCachePerfClassImplForClass(interfaceClazz);
+    return statsFactory.createInstanceFromClass(interfaceClazz, statisticsFactory, name);
+  }
+
+  private static StatsImplementor resolveConnectionStatInstanceFromClass(Class<?> interfaceClazz,
+                                                                         StatisticsFactory statisticsFactory,
+                                                                         String name,
+                                                                         PoolStats poolStats) {
+    resolveClassImplForClass(interfaceClazz);
+    return statsFactory.createConnectionStatInstanceFromClass(statisticsFactory, name, poolStats);
+  }
+
+
+  private static void resolveClassImplForClass(Class<?> interfaceClazz) {
+    Class<? extends StatsImplementor>
+        resolvedLocatorClassImpl =
+        statsFactory.resolvedStatsImplForClass.get(interfaceClazz);
+    if (resolvedLocatorClassImpl == null) {
+      statsFactory.reflections.getSubTypesOf(interfaceClazz)
+          .stream()
+          .filter(aClass -> statsFactory.selectedStatsImplementor.isAssignableFrom(aClass))
+          .forEach(aClass -> statsFactory.resolvedStatsImplForClass
+              .put(interfaceClazz, (Class<? extends StatsImplementor>) aClass));
+    }
+  }
+
+  private static void resolveCachePerfClassImplForClass(Class<?> interfaceClazz) {
+    Class<? extends StatsImplementor>
+        resolvedLocatorClassImpl =
+        statsFactory.resolvedStatsImplForClass.get(interfaceClazz);
+    if (resolvedLocatorClassImpl == null) {
+      statsFactory.reflections.getSubTypesOf(interfaceClazz)
+          .stream()
+          .filter(aClass -> statsFactory.selectedStatsImplementor.isAssignableFrom(aClass)
+              && !RegionPerfStats.class.isAssignableFrom(aClass))
+          .forEach(aClass -> statsFactory.resolvedStatsImplForClass
+              .put(interfaceClazz, (Class<? extends StatsImplementor>) aClass));
+    }
+  }
+
+  public static CqQueryVsdStats createCqQueryVsdStatsImpl(StatisticsFactory factory,
+                                                          String serverCqName) {
+    return (CqQueryVsdStats) resolveInstanceFromClass(CqQueryVsdStats.class, factory, serverCqName);
+  }
+
+  public static CqServiceVsdStats createCqServiceVsdStatsImpl(StatisticsFactory factory) {
+    return (CqServiceVsdStats) resolveInstanceFromClass(CqQueryVsdStats.class, factory, null);
+  }
+
+  public static DistributedLockStats createDLockStatsImpl(StatisticsFactory statisticsFactory,
+                                                          long statId) {
+    return (DistributedLockStats) resolveInstanceFromClass(DistributedLockStats.class,
+        statisticsFactory,
+        String.valueOf(statId));
+  }
+
+  public static RegionPerfStats createRegionPerfStatsImpl(StatisticsFactory statisticsFactory,
+                                                          CachePerfStats cachePerfStats,
+                                                          String regionName) {
+    return (RegionPerfStats) resolveRegionPerfStatsInstanceFromClass(RegionPerfStats.class,
+        statisticsFactory, cachePerfStats, regionName);
+  }
+
+  private static RegionPerfStats resolveRegionPerfStatsInstanceFromClass(
+      Class<?> interfaceClazz, StatisticsFactory statisticsFactory,
+      CachePerfStats cachePerfStats, String regionName) {
+    resolveClassImplForClass(interfaceClazz);
+    return (RegionPerfStats) statsFactory
+        .createRegionPerfStatsImplFromClass(interfaceClazz, statisticsFactory, cachePerfStats,
+            regionName);
+  }
+
+  public static EvictionStats createHeapLRUStatisticsImpl(StatisticsFactory statisticsFactory,
+                                                          String name) {
+    return (EvictionStats) resolveInstanceFromClass(HeapLRUEvictionStats.class, statisticsFactory,
+        name);
+  }
+
+  public static EvictionStats createCountLRUStatisticsImpl(StatisticsFactory statisticsFactory,
+                                                           String name) {
+    return (EvictionStats) resolveInstanceFromClass(CountLRUEvictionStats.class, statisticsFactory,
+        name);
+  }
+
+  public static EvictionStats createMemoryLRUStatisticsImpl(StatisticsFactory statisticsFactory,
+                                                            String name) {
+    return (EvictionStats) resolveInstanceFromClass(MemoryLRUEvictionStats.class, statisticsFactory,
+        name);
+  }
+
+  public static OffHeapStorageStats createOffHeapStorageStatsImpl(StatisticsFactory statisticsFactory,
+                                                                 String name) {
+    return (OffHeapStorageStats) resolveInstanceFromClass(OffHeapStorageStats.class, statisticsFactory,
+        name);
+  }
+
+  private StatsImplementor createRegionPerfStatsImplFromClass(Class<?> interfaceClazz,
+                                                              StatisticsFactory statisticsFactory,
+                                                              CachePerfStats cachePerfStats,
+                                                              String regionName) {
+    Class<? extends StatsImplementor> resolvedLocatorClassImpl;
+    try {
+      resolvedLocatorClassImpl = resolvedStatsImplForClass.get(interfaceClazz);
+      StatsImplementor statsImplementor = resolvedLocatorClassImpl
+          .getDeclaredConstructor(StatisticsFactory.class, CachePerfStats.class, String.class)
+          .newInstance(statisticsFactory, cachePerfStats, regionName);
+      statsImplementor.initializeImplementor(statisticsFactory);
+      statsImplementor.registerStatsImplementor(statisticsFactory);
+      return statsImplementor;
+    } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+      e.printStackTrace();
+    }
+    return null;
+  }
+
+  private StatsImplementor createConnectionStatInstanceFromClass(
+      StatisticsFactory statisticsFactory,
+      String locatorName, PoolStats poolStats) {
+    Class<? extends StatsImplementor> resolvedLocatorClassImpl;
+    try {
+      resolvedLocatorClassImpl = resolvedStatsImplForClass.get(LocatorStats.class);
+      StatsImplementor statsImplementor = resolvedLocatorClassImpl
+          .getDeclaredConstructor(StatisticsFactory.class, String.class, PoolStats.class)
+          .newInstance(statisticsFactory, locatorName, poolStats);
+      statsImplementor.initializeImplementor(statisticsFactory);
+      statsImplementor.registerStatsImplementor(statisticsFactory);
+      return statsImplementor;
+    } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+      e.printStackTrace();
+    }
+    return null;
+  }
+
+  private StatsImplementor createInstanceFromClass(Class<?> interfaceClazz,
+                                                   StatisticsFactory statisticsFactory,
+                                                   String locatorName) {
+    Class<? extends StatsImplementor> resolvedLocatorClassImpl;
+    try {
+      resolvedLocatorClassImpl = resolvedStatsImplForClass.get(interfaceClazz);
+      if (resolvedLocatorClassImpl == null) {
+        throw new IllegalArgumentException("Excepted to have stats for type: " + interfaceClazz);
+      }
+      StatsImplementor statsImplementor = resolvedLocatorClassImpl
+          .getDeclaredConstructor(StatisticsFactory.class, String.class)
+          .newInstance(statisticsFactory, locatorName);
+      statsImplementor.initializeImplementor(statisticsFactory);
+      statsImplementor.registerStatsImplementor(statisticsFactory);
+      return statsImplementor;
+    } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
+      e.printStackTrace();
+    }
+    return null;
+  }
+}
+
diff --git a/geode-common/src/main/java/org/apache/geode/statistics/StatsImplementor.java b/geode-common/src/main/java/org/apache/geode/statistics/StatsImplementor.java
new file mode 100644
index 0000000..5c27a50
--- /dev/null
+++ b/geode-common/src/main/java/org/apache/geode/statistics/StatsImplementor.java
@@ -0,0 +1,7 @@
+package org.apache.geode.statistics;
+
+public interface StatsImplementor {
+  String getStatsImplementorType();
+  void initializeImplementor(StatisticsFactory factory);
+  void registerStatsImplementor(StatisticsFactory factory);
+}
diff --git a/geode-core/build.gradle b/geode-core/build.gradle
index 94a124c..d5a6326 100755
--- a/geode-core/build.gradle
+++ b/geode-core/build.gradle
@@ -18,12 +18,14 @@
 
 apply plugin: 'antlr'
 apply plugin: 'me.champeau.gradle.jmh'
+apply plugin: 'kotlin'
 
 sourceSets {
   jca {
     compileClasspath += configurations.compile
     runtimeClasspath += configurations.runtime
   }
+  main.kotlin.srcDirs += 'src/main/kotlin'
 }
 
 idea {
@@ -34,6 +36,22 @@ idea {
     testSourceDirs += project.tasks.generateUpgradeTestGrammarSource.outputs.files
   }
 }
+sourceCompatibility = 1.8
+targetCompatibility = sourceCompatibility
+compileKotlin { kotlinOptions.jvmTarget = sourceCompatibility }
+compileTestKotlin { kotlinOptions.jvmTarget = sourceCompatibility }
+
+buildscript {
+  ext.kotlin_version = '1.2.51'
+
+  repositories {
+    mavenCentral()
+  }
+
+  dependencies {
+    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+  }
+}
 
 configurations {
   //declaring new configuration that will be used to associate with artifacts
@@ -45,6 +63,12 @@ dependencies {
   antlr 'antlr:antlr:' + project.'antlr.version'
 
   // External
+  compile project(':geode-micrometer-stats')
+  compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+  compile 'io.micrometer:micrometer-registry-influx:latest.release'
+  compile 'io.micrometer:micrometer-registry-jmx:latest.release'
+
+
   compileOnly files("${System.getProperty('java.home')}/../lib/tools.jar")
   testCompile files("${System.getProperty('java.home')}/../lib/tools.jar")
   compile 'com.github.stephenc.findbugs:findbugs-annotations:' + project.'stephenc-findbugs.version'
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache/ConnectionPoolDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache/ConnectionPoolDUnitTest.java
index 13e857a..1fb3531 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache/ConnectionPoolDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache/ConnectionPoolDUnitTest.java
@@ -62,7 +62,7 @@ import org.apache.geode.internal.cache.EntryExpiryTask;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.PoolStats;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
-import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifierStats;
+import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifierStatsImpl;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.logging.LocalLogWriter;
@@ -868,7 +868,7 @@ public class ConnectionPoolDUnitTest extends JUnit4CacheTestCase {
             LocalRegion region = (LocalRegion) getRootRegion().getSubregion(name);
             PoolStats stats = ((PoolImpl) PoolManager.find(poolName)).getStats();
             int oldConnects = stats.getConnects();
-            int oldDisConnects = stats.getDisConnects();
+            int oldDisConnects = stats.getDisconnects();
             try {
               for (int i = 0; i < numberOfKeys; i++) {
                 String actual = (String) region.get("key-" + i);
@@ -881,7 +881,7 @@ public class ConnectionPoolDUnitTest extends JUnit4CacheTestCase {
               }
             }
             int newConnects = stats.getConnects();
-            int newDisConnects = stats.getDisConnects();
+            int newDisConnects = stats.getDisconnects();
             // System.out.println("#### new connects/disconnects :" + newConnects + ":" +
             // newDisConnects);
             if (newConnects != oldConnects && newDisConnects != oldDisConnects) {
@@ -3505,7 +3505,7 @@ public class ConnectionPoolDUnitTest extends JUnit4CacheTestCase {
           public void run2() throws CacheException {
             for (Iterator bi = getCache().getCacheServers().iterator(); bi.hasNext();) {
               CacheServerImpl bsi = (CacheServerImpl) bi.next();
-              final CacheClientNotifierStats ccnStats =
+              final CacheClientNotifierStatsImpl ccnStats =
                   bsi.getAcceptor().getCacheClientNotifier().getStats();
               WaitCriterion ev = new WaitCriterion() {
                 public boolean done() {
@@ -4434,7 +4434,7 @@ public class ConnectionPoolDUnitTest extends JUnit4CacheTestCase {
       srv1.invoke(new CacheSerializableRunnable("Validate Server1 update") {
         public void run2() throws CacheException {
           CacheClientNotifier ccn = CacheClientNotifier.getInstance();
-          final CacheClientNotifierStats ccnStats = ccn.getStats();
+          final CacheClientNotifierStatsImpl ccnStats = ccn.getStats();
           final int eventCount = ccnStats.getEvents();
           Region r = getRootRegion(name);
           assertNotNull(r);
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache/management/MemoryThresholdsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache/management/MemoryThresholdsDUnitTest.java
index d8cfec4..c8e2f72 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache/management/MemoryThresholdsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache/management/MemoryThresholdsDUnitTest.java
@@ -1745,7 +1745,7 @@ public class MemoryThresholdsDUnitTest extends ClientServerTestCase {
     Cache cache = getCache();
     InternalDistributedSystem internalSystem =
         (InternalDistributedSystem) cache.getDistributedSystem();
-    final GemFireStatSampler sampler = internalSystem.getStatSampler();
+    final GemFireStatSampler sampler = internalSystem.getInternalDistributedSystemStats().getStatSampler();
     sampler.waitForInitialization(10000); // fix: remove infinite wait
     final LocalStatListener l = new LocalStatListener() {
       public void statValueChanged(double value) {
@@ -1754,7 +1754,7 @@ public class MemoryThresholdsDUnitTest extends ClientServerTestCase {
     };
     final String tenuredPoolName = HeapMemoryMonitor.getTenuredMemoryPoolMXBean().getName();
     LogWriterUtils.getLogWriter().info("TenuredPoolName:" + tenuredPoolName);
-    final List list = internalSystem.getStatsList();
+    final List list = internalSystem.getInternalDistributedSystemStats().getStatsList();
     assertFalse(list.isEmpty());
 
     // fix: found race condition here...
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
index 43ca8a1..b4ef284 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ClientMembershipDUnitTest.java
@@ -44,8 +44,8 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.InternalGemFireException;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.CacheException;
 import org.apache.geode.cache.Region;
@@ -117,8 +117,8 @@ public class ClientMembershipDUnitTest extends ClientServerTestCase {
 
   protected int getAcceptsInProgress() {
     DistributedSystem distributedSystem = getCache().getDistributedSystem();
-    StatisticsType st = distributedSystem.findType("CacheServerStats");
-    Statistics[] s = distributedSystem.findStatisticsByType(st);
+    StatisticsType st = distributedSystem.getStatisticsFactory().findType("CacheServerStats");
+    Statistics[] s = distributedSystem.getStatisticsFactory().findStatisticsByType(st);
     return s[0].getInt("acceptsInProgress");
   }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java
index c1ffdc1..2364ecb 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionDUnitTest.java
@@ -238,7 +238,7 @@ public class DistributedMulticastRegionDUnitTest extends JUnit4CacheTestCase {
 
   protected void validateUDPEncryptionStats() {
     long encrptTime =
-        getGemfireCache().getDistributionManager().getStats().getUDPMsgEncryptionTiime();
+        getGemfireCache().getDistributionManager().getStats().getUDPMsgEncryptionTime();
     long decryptTime =
         getGemfireCache().getDistributionManager().getStats().getUDPMsgDecryptionTime();
     assertTrue("Should have multicast writes or reads. encrptTime=  " + encrptTime
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionWithUDPSecurityDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionWithUDPSecurityDUnitTest.java
index 6f0df4b..32432f3 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionWithUDPSecurityDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/DistributedMulticastRegionWithUDPSecurityDUnitTest.java
@@ -29,7 +29,7 @@ public class DistributedMulticastRegionWithUDPSecurityDUnitTest
   @Override
   protected void validateUDPEncryptionStats() {
     long encrptTime =
-        getGemfireCache().getDistributionManager().getStats().getUDPMsgEncryptionTiime();
+        getGemfireCache().getDistributionManager().getStats().getUDPMsgEncryptionTime();
     long decryptTime =
         getGemfireCache().getDistributionManager().getStats().getUDPMsgDecryptionTime();
     assertTrue("Should have multicast writes or reads. encrptTime=  " + encrptTime
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationStatsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationStatsDUnitTest.java
index 3b64344..1c605f4 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationStatsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationStatsDUnitTest.java
@@ -42,6 +42,7 @@ import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.cache.util.CacheListenerAdapter;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.DistributionStats;
+import org.apache.geode.distributed.internal.DistributionStatsImpl;
 import org.apache.geode.internal.AvailablePort;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
@@ -453,7 +454,7 @@ public class DeltaPropagationStatsDUnitTest extends JUnit4DistributedTestCase {
       deltaTime = 1; // dummy assignment
     } else if (path == CLIENT_TO_SERVER) {
       numOfDeltasSent = region.getCachePerfStats().getDeltasSent();
-      if (DistributionStats.enableClockStats) {
+      if (DistributionStatsImpl.enableClockStats) {
         deltaTime = region.getCachePerfStats().getDeltasPreparedTime();
       } else {
         deltaTime = 1; // dummy assignment
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsDUnitTest.java
index 7f6f8c9..dc96ac4 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsDUnitTest.java
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeoutException;
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.geode.Statistics;
+import org.apache.geode.statistics.Statistics;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.PartitionAttributesFactory;
 import org.apache.geode.cache.Region;
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/execute/FunctionServiceStatsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/execute/FunctionServiceStatsDUnitTest.java
index 8bd987a..7a47362 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/execute/FunctionServiceStatsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/execute/FunctionServiceStatsDUnitTest.java
@@ -58,6 +58,7 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionTestHelper;
 import org.apache.geode.internal.cache.functions.TestFunction;
 import org.apache.geode.internal.cache.tier.sockets.CacheServerTestUtil;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.dunit.Assert;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.LogWriterUtils;
@@ -77,7 +78,7 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
 
   static Boolean isByName = null;
 
-  static InternalDistributedSystem ds = null;
+  static InternalDistributedSystem distributedSystem = null;
 
   static int noOfExecutionCalls_Aggregate = 0;
   static int noOfExecutionsCompleted_Aggregate = 0;
@@ -217,7 +218,7 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
             try {
               int j = 0;
               HashSet origVals = new HashSet();
-              for (Iterator i = testKeysSet.iterator(); i.hasNext();) {
+              for (Iterator i = testKeysSet.iterator(); i.hasNext(); ) {
                 Integer val = new Integer(j++);
                 origVals.add(val);
                 region.put(i.next(), val);
@@ -267,8 +268,11 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkStatsOnClient = new SerializableCallable("checkStatsOnClient") {
       public Object call() throws Exception {
         // checks for the aggregate stats
-        InternalDistributedSystem iDS = (InternalDistributedSystem) cache.getDistributedSystem();
-        FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+        InternalDistributedSystem
+            internalDistributedSystem =
+            (InternalDistributedSystem) cache.getDistributedSystem();
+        FunctionServiceStats functionServiceStats =
+            internalDistributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         assertEquals(noOfExecutionCalls_Aggregate,
@@ -279,14 +283,17 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
 
         LogWriterUtils.getLogWriter().info("Calling FunctionStats for  TEST_FUNCTION2 :");
         FunctionStats functionStats =
-            FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION2, iDS);
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION2);
         LogWriterUtils.getLogWriter().info("Called FunctionStats for  TEST_FUNCTION2 :");
         assertEquals(noOfExecutionCalls_TESTFUNCTION2, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION2,
             functionStats.getFunctionExecutionsCompleted());
         assertTrue(functionStats.getResultsReceived() >= resultReceived_TESTFUNCTION2);
 
-        functionStats = FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION3, iDS);
+        functionStats =
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION3);
         assertEquals(noOfExecutionCalls_TESTFUNCTION3, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION3,
             functionStats.getFunctionExecutionsCompleted());
@@ -301,8 +308,11 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkStatsOnServer = new SerializableCallable("checkStatsOnClient") {
       public Object call() throws Exception {
         // checks for the aggregate stats
-        InternalDistributedSystem iDS = (InternalDistributedSystem) cache.getDistributedSystem();
-        FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+        InternalDistributedSystem
+            internalDistributedSystem =
+            (InternalDistributedSystem) cache.getDistributedSystem();
+        FunctionServiceStats functionServiceStats =
+            internalDistributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         // functions are executed 3 times
@@ -314,7 +324,8 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
             .getFunctionExecutionsCompleted() >= noOfExecutionsCompleted_Aggregate);
 
         FunctionStats functionStats =
-            FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION2, iDS);
+            FunctionStatsImpl
+                .getFunctionStats(TestFunction.TEST_FUNCTION2, internalDistributedSystem);
         // TEST_FUNCTION2 is executed twice
         noOfExecutionCalls_TESTFUNCTION2 += 2;
         assertTrue(functionStats.getFunctionExecutionCalls() >= noOfExecutionCalls_TESTFUNCTION2);
@@ -322,7 +333,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
         assertTrue(functionStats
             .getFunctionExecutionsCompleted() >= noOfExecutionsCompleted_TESTFUNCTION2);
 
-        functionStats = FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION3, iDS);
+        functionStats =
+            FunctionStatsImpl
+                .getFunctionStats(TestFunction.TEST_FUNCTION3, internalDistributedSystem);
         // TEST_FUNCTION3 is executed once
         noOfExecutionCalls_TESTFUNCTION3 += 1;
         assertTrue(functionStats.getFunctionExecutionCalls() >= noOfExecutionCalls_TESTFUNCTION3);
@@ -408,7 +421,6 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
           LogWriterUtils.getLogWriter().info("Created Cache on Client");
           assertNotNull(cache);
 
-
           CacheServerTestUtil.disableShufflingOfEndpoints();
           Pool p;
           try {
@@ -504,8 +516,11 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkStatsOnClient = new SerializableCallable("checkStatsOnClient") {
       public Object call() throws Exception {
         // checks for the aggregate stats
-        InternalDistributedSystem iDS = (InternalDistributedSystem) cache.getDistributedSystem();
-        FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+        InternalDistributedSystem
+            internalDistributedSystem =
+            (InternalDistributedSystem) cache.getDistributedSystem();
+        FunctionServiceStats functionServiceStats =
+            internalDistributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         assertEquals(noOfExecutionCalls_Aggregate,
@@ -515,7 +530,8 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
         assertEquals(resultReceived_Aggregate, functionServiceStats.getResultsReceived());
 
         FunctionStats functionStats =
-            FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION2, iDS);
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION2);
         assertEquals(noOfExecutionCalls_TESTFUNCTION2, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION2,
             functionStats.getFunctionExecutionsCompleted());
@@ -596,8 +612,11 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkStatsOnClient = new SerializableCallable("checkStatsOnClient") {
       public Object call() throws Exception {
         // checks for the aggregate stats
-        InternalDistributedSystem iDS = (InternalDistributedSystem) cache.getDistributedSystem();
-        FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+        InternalDistributedSystem
+            internalDistributedSystem =
+            (InternalDistributedSystem) cache.getDistributedSystem();
+        FunctionServiceStats functionServiceStats =
+            internalDistributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         assertEquals(noOfExecutionCalls_Aggregate,
@@ -606,14 +625,18 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
             functionServiceStats.getFunctionExecutionsCompleted());
         assertEquals(resultReceived_Aggregate, functionServiceStats.getResultsReceived());
 
-        FunctionStats functionStats =
-            FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION1, iDS);
+        FunctionStats
+            functionStats =
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION1);
         assertEquals(noOfExecutionCalls_TESTFUNCTION1, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION1,
             functionStats.getFunctionExecutionsCompleted());
         assertEquals(resultReceived_TESTFUNCTION1, functionStats.getResultsReceived());
 
-        functionStats = FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION5, iDS);
+        functionStats =
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION5);
         assertEquals(noOfExecutionCalls_TESTFUNCTION5, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION5,
             functionStats.getFunctionExecutionsCompleted());
@@ -628,8 +651,11 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkStatsOnServer = new SerializableCallable("checkStatsOnClient") {
       public Object call() throws Exception {
         // checks for the aggregate stats
-        InternalDistributedSystem iDS = (InternalDistributedSystem) cache.getDistributedSystem();
-        FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+        InternalDistributedSystem
+            internalDistributedSystem =
+            (InternalDistributedSystem) cache.getDistributedSystem();
+        FunctionServiceStats functionServiceStats =
+            internalDistributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         // functions are executed 2 times
@@ -657,7 +683,8 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
         }
 
         FunctionStats functionStats =
-            FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION1, iDS);
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION1);
         // TEST_FUNCTION1 is executed once
         noOfExecutionCalls_TESTFUNCTION1 += 1;
         assertEquals(noOfExecutionCalls_TESTFUNCTION1, functionStats.getFunctionExecutionCalls());
@@ -665,7 +692,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION1,
             functionStats.getFunctionExecutionsCompleted());
 
-        functionStats = FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION5, iDS);
+        functionStats =
+            FunctionStatsImpl
+                .getFunctionStats(TestFunction.TEST_FUNCTION5, internalDistributedSystem);
         // TEST_FUNCTION5 is executed once
         noOfExecutionCalls_TESTFUNCTION5 += 1;
         assertEquals(noOfExecutionCalls_TESTFUNCTION5, functionStats.getFunctionExecutionCalls());
@@ -771,7 +800,7 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
           testKeys.add("execKey-" + i);
         }
         int j = 0;
-        for (Iterator i = testKeys.iterator(); i.hasNext();) {
+        for (Iterator i = testKeys.iterator(); i.hasNext(); ) {
           Integer val = new Integer(j++);
           pr.put(i.next(), val);
         }
@@ -801,9 +830,10 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
 
     accessor.invoke(new SerializableCallable("checkFunctionExecutionStatsForAccessor") {
       public Object call() throws Exception {
-        InternalDistributedSystem iDS =
+        InternalDistributedSystem internalDistributedSystem =
             ((InternalDistributedSystem) getCache().getDistributedSystem());
-        FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+        FunctionServiceStats functionServiceStats =
+            internalDistributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         assertEquals(noOfExecutionCalls_Aggregate,
@@ -813,13 +843,16 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
         assertEquals(resultReceived_Aggregate, functionServiceStats.getResultsReceived());
 
         FunctionStats functionStats =
-            FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION2, iDS);
+            StatsFactory.createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                TestFunction.TEST_FUNCTION2);
         assertEquals(noOfExecutionCalls_TESTFUNCTION2, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION2,
             functionStats.getFunctionExecutionsCompleted());
         assertEquals(resultReceived_TESTFUNCTION2, functionStats.getResultsReceived());
 
-        functionStats = FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION3, iDS);
+        functionStats =
+            FunctionStatsImpl
+                .getFunctionStats(TestFunction.TEST_FUNCTION3, internalDistributedSystem);
         assertEquals(noOfExecutionCalls_TESTFUNCTION3, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_TESTFUNCTION3,
             functionStats.getFunctionExecutionsCompleted());
@@ -832,10 +865,12 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkFunctionExecutionStatsForDataStore =
         new SerializableCallable("checkFunctionExecutionStatsForDataStore") {
           public Object call() throws Exception {
-            InternalDistributedSystem iDS =
+            InternalDistributedSystem internalDistributedSystem =
                 ((InternalDistributedSystem) getCache().getDistributedSystem());
             // 3 Function Executions took place
-            FunctionServiceStats functionServiceStats = iDS.getFunctionServiceStats();
+            FunctionServiceStats functionServiceStats =
+                internalDistributedSystem.getInternalDistributedSystemStats()
+                    .getFunctionServiceStats();
             waitNoFunctionsRunning(functionServiceStats);
 
             noOfExecutionCalls_Aggregate += 3;
@@ -846,7 +881,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
                 functionServiceStats.getFunctionExecutionsCompleted());
 
             FunctionStats functionStats =
-                FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION2, iDS);
+                StatsFactory
+                    .createFunctionStatsImpl(internalDistributedSystem.getStatisticsFactory(),
+                        TestFunction.TEST_FUNCTION2);
             // TEST_FUNCTION2 is executed twice
             noOfExecutionCalls_TESTFUNCTION2 += 2;
             assertEquals(noOfExecutionCalls_TESTFUNCTION2,
@@ -855,7 +892,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
             assertEquals(noOfExecutionsCompleted_TESTFUNCTION2,
                 functionStats.getFunctionExecutionsCompleted());
 
-            functionStats = FunctionStats.getFunctionStats(TestFunction.TEST_FUNCTION3, iDS);
+            functionStats =
+                FunctionStatsImpl
+                    .getFunctionStats(TestFunction.TEST_FUNCTION3, internalDistributedSystem);
             // TEST_FUNCTION3 is executed once
             noOfExecutionCalls_TESTFUNCTION3 += 1;
             assertEquals(noOfExecutionCalls_TESTFUNCTION3,
@@ -956,11 +995,13 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
               resultReceived_Aggregate += list.size();
               assertEquals(resultReceived_Aggregate,
                   ((InternalDistributedSystem) getCache().getDistributedSystem())
+                      .getInternalDistributedSystemStats()
                       .getFunctionServiceStats().getResultsReceived());
 
               resultReceived_TESTFUNCTION2 += list.size();
               assertEquals(resultReceived_TESTFUNCTION2,
                   ((InternalDistributedSystem) getCache().getDistributedSystem())
+                      .getInternalDistributedSystemStats()
                       .getFunctionServiceStats().getResultsReceived());
 
               return Boolean.TRUE;
@@ -1019,8 +1060,8 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
           public Object call() throws Exception {
             Properties props = new Properties();
             try {
-              ds = getSystem(props);
-              assertNotNull(ds);
+              distributedSystem = getSystem(props);
+              assertNotNull(distributedSystem);
             } catch (Exception e) {
               Assert.fail("Failed while creating the Distribued System", e);
             }
@@ -1059,9 +1100,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     member1.invoke(new SerializableCallable("excuteOnMembers_InlineFunction") {
       public Object call() throws Exception {
 
-        assertNotNull(ds);
+        assertNotNull(distributedSystem);
         Execution memberExecution = null;
-        DistributedMember localmember = ds.getDistributedMember();
+        DistributedMember localmember = distributedSystem.getDistributedMember();
         memberExecution = FunctionService.onMember(localmember);
 
         memberExecution.setArguments("Key");
@@ -1086,7 +1127,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
 
     member1.invoke(new SerializableCallable("checkFunctionExecutionStatsForMember1") {
       public Object call() throws Exception {
-        FunctionServiceStats functionServiceStats = ds.getFunctionServiceStats();
+        FunctionServiceStats
+            functionServiceStats =
+            distributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
         waitNoFunctionsRunning(functionServiceStats);
 
         assertEquals(noOfExecutionCalls_Aggregate,
@@ -1095,7 +1138,10 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
             functionServiceStats.getFunctionExecutionsCompleted());
         assertEquals(resultReceived_Aggregate, functionServiceStats.getResultsReceived());
 
-        FunctionStats functionStats = FunctionStats.getFunctionStats(inlineFunction.getId(), ds);
+        FunctionStats
+            functionStats =
+            StatsFactory.createFunctionStatsImpl(distributedSystem.getStatisticsFactory(),
+                inlineFunction.getId());
         assertEquals(noOfExecutionCalls_Inline, functionStats.getFunctionExecutionCalls());
         assertEquals(noOfExecutionsCompleted_Inline,
             functionStats.getFunctionExecutionsCompleted());
@@ -1107,7 +1153,9 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
     SerializableCallable checkFunctionExecutionStatsForOtherMember =
         new SerializableCallable("checkFunctionExecutionStatsForOtherMember") {
           public Object call() throws Exception {
-            FunctionServiceStats functionServiceStats = ds.getFunctionServiceStats();
+            FunctionServiceStats
+                functionServiceStats =
+                distributedSystem.getInternalDistributedSystemStats().getFunctionServiceStats();
             waitNoFunctionsRunning(functionServiceStats);
 
             // One function Execution took place on there members
@@ -1119,7 +1167,8 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
                 functionServiceStats.getFunctionExecutionsCompleted());
 
             FunctionStats functionStats =
-                FunctionStats.getFunctionStats(inlineFunction.getId(), ds);
+                StatsFactory.createFunctionStatsImpl(distributedSystem.getStatisticsFactory(),
+                    inlineFunction.getId());
             // noOfExecutionCalls_Inline++;
             // noOfExecutionsCompleted_Inline++;
             assertEquals(noOfExecutionCalls_Inline, functionStats.getFunctionExecutionCalls());
@@ -1205,7 +1254,7 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
           testKeys.add("execKey-" + i);
         }
         int j = 0;
-        for (Iterator i = testKeys.iterator(); i.hasNext();) {
+        for (Iterator i = testKeys.iterator(); i.hasNext(); ) {
           Integer key = new Integer(j++);
           pr.put(key, i.next());
         }
@@ -1243,7 +1292,8 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
         new SerializableCallable("checkFunctionExecutionStatsForDataStore") {
           public Object call() throws Exception {
             FunctionStats functionStats =
-                FunctionStats.getFunctionStats("TestFunctionException", getSystem());
+                StatsFactory.createFunctionStatsImpl(getSystem().getStatisticsFactory(),
+                    "TestFunctionException");
             noOfExecutionCalls_TestFunctionException++;
             noOfExecutionExceptions_TestFunctionException++;
             assertEquals(noOfExecutionCalls_TestFunctionException,
@@ -1257,6 +1307,7 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
             noOfExecutionExceptions_Aggregate++;
             FunctionServiceStats functionServiceStats =
                 ((InternalDistributedSystem) getCache().getDistributedSystem())
+                    .getInternalDistributedSystemStats()
                     .getFunctionServiceStats();
             assertEquals(noOfExecutionCalls_Aggregate,
                 functionServiceStats.getFunctionExecutionCalls());
@@ -1268,13 +1319,6 @@ public class FunctionServiceStatsDUnitTest extends PRClientServerTestBase {
           }
         };
 
-    /*
-     * datastore0.invoke(checkFunctionExecutionStatsForDataStore);
-     * datastore1.invoke(checkFunctionExecutionStatsForDataStore);
-     * datastore2.invoke(checkFunctionExecutionStatsForDataStore);
-     * datastore3.invoke(checkFunctionExecutionStatsForDataStore);
-     */
-
     SerializableCallable closeDistributedSystem =
         new SerializableCallable("closeDistributedSystem") {
           public Object call() throws Exception {
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java
index e302798..8dc4614 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java
@@ -281,7 +281,7 @@ public class DurableClientStatsDUnitTest extends JUnit4DistributedTestCase {
           (CacheServerImpl) (new ArrayList(cache.getCacheServers()).get(0));
       AcceptorImpl ai = currentServer.getAcceptor();
       CacheClientNotifier notifier = ai.getCacheClientNotifier();
-      CacheClientNotifierStats stats = notifier.getStats();
+      CacheClientNotifierStatsImpl stats = notifier.getStats();
       logger.info("Stats:" + "\nDurableReconnectionCount:" + stats.get_durableReconnectionCount()
           + "\nQueueDroppedCount" + stats.get_queueDroppedCount()
           + "\nEventsEnqueuedWhileClientAwayCount" + stats.get_eventEnqueuedWhileClientAwayCount());
@@ -299,7 +299,7 @@ public class DurableClientStatsDUnitTest extends JUnit4DistributedTestCase {
           (CacheServerImpl) (new ArrayList(cache.getCacheServers()).get(0));
       AcceptorImpl ai = currentServer.getAcceptor();
       CacheClientNotifier notifier = ai.getCacheClientNotifier();
-      CacheClientNotifierStats stats = notifier.getStats();
+      CacheClientNotifierStatsImpl stats = notifier.getStats();
       logger.info("Stats:" + "\nDurableReconnectionCount:" + stats.get_durableReconnectionCount()
           + "\nQueueDroppedCount" + stats.get_queueDroppedCount()
           + "\nEventsEnqueuedWhileClientAwayCount" + stats.get_eventEnqueuedWhileClientAwayCount());
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/compression/CompressionStatsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/compression/CompressionStatsDUnitTest.java
index 3f0602b..360b5d1 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/compression/CompressionStatsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/compression/CompressionStatsDUnitTest.java
@@ -27,6 +27,7 @@ import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.Region;
 import org.apache.geode.compression.Compressor;
 import org.apache.geode.internal.cache.CachePerfStats;
+import org.apache.geode.internal.cache.CachePerfStatsImpl;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.test.dunit.Host;
@@ -69,7 +70,6 @@ public class CompressionStatsDUnitTest extends JUnit4CacheTestCase {
   /**
    * Creates a new CompressionStatsDUnitTest.
    *
-   * @param name test name.
    */
   public CompressionStatsDUnitTest() {
     super();
@@ -684,9 +684,9 @@ public class CompressionStatsDUnitTest extends JUnit4CacheTestCase {
    * @return previous clock stats value
    */
   private boolean enableClockStats(boolean clockStatsEnabled) {
-    boolean oldValue = CachePerfStats.enableClockStats;
+    boolean oldValue = CachePerfStatsImpl.enableClockStats;
 
-    CachePerfStats.enableClockStats = clockStatsEnabled;
+    CachePerfStatsImpl.enableClockStats = clockStatsEnabled;
 
     return oldValue;
   }
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/statistics/StatisticsDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/statistics/StatisticsDistributedTest.java
index 4497591..5bb5259 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/statistics/StatisticsDistributedTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/statistics/StatisticsDistributedTest.java
@@ -47,11 +47,11 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
-import org.apache.geode.StatisticsTypeFactory;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsType;
+import org.apache.geode.statistics.StatisticsTypeFactory;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheListener;
 import org.apache.geode.cache.EntryEvent;
@@ -149,7 +149,7 @@ public class StatisticsDistributedTest extends JUnit4CacheTestCase {
         InternalDistributedSystem system = getSystem(props);
 
         // assert that sampler is working as expected
-        GemFireStatSampler sampler = system.getStatSampler();
+        GemFireStatSampler sampler = system.getInternalDistributedSystemStats().getStatSampler();
         assertTrue(sampler.isSamplingEnabled());
         assertTrue(sampler.isAlive());
         assertEquals(new File(pubArchives[pubVM]), sampler.getArchiveFileName());
@@ -191,11 +191,11 @@ public class StatisticsDistributedTest extends JUnit4CacheTestCase {
 
       InternalDistributedSystem system = getSystem(props);
 
-      PubSubStats statistics = new PubSubStats(system, "sub-1", 1);
+      PubSubStats statistics = new PubSubStats(system.getStatisticsFactory(), "sub-1", 1);
       subStatsRef.set(statistics);
 
       // assert that sampler is working as expected
-      GemFireStatSampler sampler = system.getStatSampler();
+      GemFireStatSampler sampler = system.getInternalDistributedSystemStats().getStatSampler();
       assertTrue(sampler.isSamplingEnabled());
       assertTrue(sampler.isAlive());
       assertEquals(new File(subArchive), sampler.getArchiveFileName());
@@ -237,7 +237,7 @@ public class StatisticsDistributedTest extends JUnit4CacheTestCase {
         final int pubThread = j;
         publishers[pubThread] = pubs[pubVM]
             .invokeAsync("pub-connect-and-put-data-" + pubVM + "-thread-" + pubThread, () -> {
-              PubSubStats statistics = new PubSubStats(basicGetSystem(), "pub-" + pubThread, pubVM);
+              PubSubStats statistics = new PubSubStats(basicGetSystem().getStatisticsFactory(), "pub-" + pubThread, pubVM);
               pubStatsRef.set(pubThread, statistics);
 
               RegionMembershipListener rml = rmlRef.get();
@@ -279,8 +279,8 @@ public class StatisticsDistributedTest extends JUnit4CacheTestCase {
               assertEquals(MAX_PUTS, statistics.getPuts());
 
               // wait for 2 samples to ensure all stats have been archived
-              StatisticsType statSamplerType = getSystem().findType("StatSampler");
-              Statistics[] statsArray = getSystem().findStatisticsByType(statSamplerType);
+              StatisticsType statSamplerType = getSystem().getInternalDistributedSystemStats().findType("StatSampler");
+              Statistics[] statsArray = getSystem().getInternalDistributedSystemStats().findStatisticsByType(statSamplerType);
               assertEquals(1, statsArray.length);
 
               Statistics statSamplerStats = statsArray[0];
@@ -301,8 +301,8 @@ public class StatisticsDistributedTest extends JUnit4CacheTestCase {
 
     sub.invoke("sub-wait-for-samples", () -> {
       // wait for 2 samples to ensure all stats have been archived
-      StatisticsType statSamplerType = getSystem().findType("StatSampler");
-      Statistics[] statsArray = getSystem().findStatisticsByType(statSamplerType);
+      StatisticsType statSamplerType = getSystem().getInternalDistributedSystemStats().findType("StatSampler");
+      Statistics[] statsArray = getSystem().getInternalDistributedSystemStats().findStatisticsByType(statSamplerType);
       assertEquals(1, statsArray.length);
 
       Statistics statSamplerStats = statsArray[0];
@@ -568,7 +568,7 @@ public class StatisticsDistributedTest extends JUnit4CacheTestCase {
     private static final String UPDATE_EVENTS = "updateEvents";
 
     private static StatisticsType createType(final StatisticsFactory f) {
-      StatisticsTypeFactory stf = StatisticsTypeFactoryImpl.singleton();
+      StatisticsTypeFactory stf = new StatisticsTypeFactoryImpl();
       StatisticsType type = stf.createType(TYPE_NAME, TYPE_DESCRIPTION, createDescriptors(f));
       return type;
     }
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/management/MemberMBeanAttributesDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/management/MemberMBeanAttributesDUnitTest.java
index 4487816..e949ecb 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/management/MemberMBeanAttributesDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/management/MemberMBeanAttributesDUnitTest.java
@@ -84,7 +84,7 @@ public class MemberMBeanAttributesDUnitTest extends ManagementTestBase {
   private void sampleStatistics(final VM vm) {
     vm.invoke("sampleStatistics", () -> {
       InternalDistributedSystem system = getInternalDistributedSystem();
-      HostStatSampler sampler = system.getStatSampler();
+      HostStatSampler sampler = system.getInternalDistributedSystemStats().getStatSampler();
       SampleCollector sampleCollector = sampler.getSampleCollector();
       sampleCollector.sample(NanoTimer.getTime());
     });
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/admin/internal/MemberHealthEvaluatorJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/admin/internal/MemberHealthEvaluatorJUnitTest.java
index 56e4e47..b9d53b0 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/admin/internal/MemberHealthEvaluatorJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/admin/internal/MemberHealthEvaluatorJUnitTest.java
@@ -47,7 +47,7 @@ public class MemberHealthEvaluatorJUnitTest extends HealthEvaluatorTestCase {
   @Test
   public void testCheckVMProcessSize() throws InterruptedException {
     if (PureJavaMode.osStatsAreAvailable()) {
-      GemFireStatSampler sampler = system.getStatSampler();
+      GemFireStatSampler sampler = system.getInternalDistributedSystemStats().getStatSampler();
       assertNotNull(sampler);
 
       sampler.waitForInitialization(10000); // fix: remove infinite wait
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
index 6176e13..848cb5f 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
@@ -74,6 +74,7 @@ import org.apache.geode.internal.cache.tier.InternalClientMembership;
 import org.apache.geode.internal.cache.tier.sockets.TcpServerFactory;
 import org.apache.geode.management.membership.ClientMembershipEvent;
 import org.apache.geode.management.membership.ClientMembershipListener;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @SuppressWarnings("deprecation")
@@ -98,9 +99,9 @@ public class AutoConnectionSourceImplJUnitTest {
     props.setProperty(MCAST_PORT, "0");
     props.setProperty(LOCATORS, "");
 
-    DistributedSystem ds = DistributedSystem.connect(props);
-    cache = CacheFactory.create(ds);
-    poolStats = new PoolStats(ds, "pool");
+    DistributedSystem distributedSystem = DistributedSystem.connect(props);
+    cache = CacheFactory.create(distributedSystem);
+    poolStats = StatsFactory.createPoolStatsImpl(distributedSystem.getStatisticsFactory(), "pool");
     port = AvailablePortHelper.getRandomAvailableTCPPort();
 
     handler = new FakeHandler();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java
index 835f86c..fcde792 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/QueueManagerJUnitTest.java
@@ -56,6 +56,7 @@ import org.apache.geode.internal.cache.tier.sockets.ServerQueueStatus;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.logging.LocalLogWriter;
 import org.apache.geode.internal.util.StopWatch;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category({ClientServerTest.class})
@@ -68,7 +69,7 @@ public class QueueManagerJUnitTest {
 
   private DummyPool pool;
   private LocalLogWriter logger;
-  private DistributedSystem ds;
+  private DistributedSystem distributedSystem;
   private EndpointManagerImpl endpoints;
   private DummySource source;
   private DummyFactory factory;
@@ -82,10 +83,10 @@ public class QueueManagerJUnitTest {
     Properties properties = new Properties();
     properties.put(MCAST_PORT, "0");
     properties.put(LOCATORS, "");
-    ds = DistributedSystem.connect(properties);
-    stats = new PoolStats(ds, "QueueManagerJUnitTest");
+    distributedSystem = DistributedSystem.connect(properties);
+    stats = StatsFactory.createPoolStatsImpl(distributedSystem.getStatisticsFactory(), "QueueManagerJUnitTest");
     pool = new DummyPool();
-    endpoints = new EndpointManagerImpl("pool", ds, ds.getCancelCriterion(), pool.getStats());
+    endpoints = new EndpointManagerImpl("pool", distributedSystem, distributedSystem.getCancelCriterion(), pool.getStats());
     source = new DummySource();
     factory = new DummyFactory();
     background = Executors.newSingleThreadScheduledExecutor();
@@ -93,8 +94,8 @@ public class QueueManagerJUnitTest {
         "<ExpectedException action=add>" + expectedPrimaryErrorMsg + "</ExpectedException>";
     final String addExpectedREM =
         "<ExpectedException action=add>" + expectedRedundantErrorMsg + "</ExpectedException>";
-    ds.getLogWriter().info(addExpectedPEM);
-    ds.getLogWriter().info(addExpectedREM);
+    distributedSystem.getLogWriter().info(addExpectedPEM);
+    distributedSystem.getLogWriter().info(addExpectedREM);
   }
 
   @After
@@ -107,10 +108,10 @@ public class QueueManagerJUnitTest {
     final String removeExpectedREM =
         "<ExpectedException action=remove>" + expectedRedundantErrorMsg + "</ExpectedException>";
 
-    ds.getLogWriter().info(removeExpectedPEM);
-    ds.getLogWriter().info(removeExpectedREM);
+    distributedSystem.getLogWriter().info(removeExpectedPEM);
+    distributedSystem.getLogWriter().info(removeExpectedREM);
 
-    ds.disconnect();
+    distributedSystem.disconnect();
   }
 
   @Test
@@ -119,7 +120,7 @@ public class QueueManagerJUnitTest {
     factory.addConnection(0, 0, 2);
     factory.addConnection(0, 0, 3);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 2, 2000, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
     assertPortEquals(1, manager.getAllConnections().getPrimary());
     assertPortEquals(new int[] {2, 3}, manager.getAllConnections().getBackups());
@@ -131,7 +132,7 @@ public class QueueManagerJUnitTest {
     factory.addConnection(1, 23, 2);
     factory.addConnection(1, 11, 3);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 2, 2000, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
     assertPortEquals(2, manager.getAllConnections().getPrimary());
     assertPortEquals(new int[] {3, 1}, manager.getAllConnections().getBackups());
@@ -148,7 +149,7 @@ public class QueueManagerJUnitTest {
     factory.addError();
     factory.addConnection(0, 0, 3);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 3, 2000, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
 
     // The primary queue can be set before we try to fill in for all of the failed backup servers,
@@ -181,7 +182,7 @@ public class QueueManagerJUnitTest {
     factory.addConnection(0, 0, 2);
     factory.addConnection(0, 0, 3);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 3, 2000, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
 
     // wait for backups to come online.
@@ -210,7 +211,7 @@ public class QueueManagerJUnitTest {
     factory.addConnection(0, 0, 4);
     factory.addConnection(0, 0, 5);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 3, 2000, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
     assertPortEquals(1, manager.getAllConnections().getPrimary());
     assertPortEquals(new int[] {2, 3, 4}, manager.getAllConnections().getBackups());
@@ -228,7 +229,7 @@ public class QueueManagerJUnitTest {
     factory.addConnection(0, 0, 1);
     factory.addConnection(0, 0, 2);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 2, 20, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
     assertPortEquals(1, manager.getAllConnections().getPrimary());
     assertPortEquals(new int[] {2}, manager.getAllConnections().getBackups());
@@ -253,7 +254,7 @@ public class QueueManagerJUnitTest {
   public void testWaitForPrimary() throws Exception {
     factory.addConnection(0, 0, 1);
     manager = new QueueManagerImpl(pool, endpoints, source, factory, 2, 20, logger,
-        ClientProxyMembershipID.getNewProxyMembership(ds));
+        ClientProxyMembershipID.getNewProxyMembership(distributedSystem));
     manager.start(background);
     manager.getAllConnections().getPrimary().destroy();
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
index 9fb3d33..9605f3b 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
@@ -61,6 +61,7 @@ import org.apache.geode.internal.cache.PoolStats;
 import org.apache.geode.internal.cache.tier.sockets.ServerQueueStatus;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.logging.LocalLogWriter;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.dunit.ThreadUtils;
 import org.apache.geode.test.dunit.Wait;
 import org.apache.geode.test.dunit.WaitCriterion;
@@ -76,7 +77,7 @@ public class ConnectionManagerJUnitTest {
   ConnectionManager manager;
   private InternalLogWriter logger;
   protected DummyFactory factory;
-  private DistributedSystem ds;
+  private DistributedSystem distributedSystem;
   private ScheduledExecutorService background;
   protected EndpointManager endpointManager;
   private CancelCriterion cancelCriterion;
@@ -90,10 +91,10 @@ public class ConnectionManagerJUnitTest {
     Properties properties = new Properties();
     properties.put(MCAST_PORT, "0");
     properties.put(LOCATORS, "");
-    ds = DistributedSystem.connect(properties);
+    distributedSystem = DistributedSystem.connect(properties);
     background = Executors.newSingleThreadScheduledExecutor();
-    poolStats = new PoolStats(ds, "connectionManagerJUnitTest");
-    endpointManager = new EndpointManagerImpl("pool", ds, ds.getCancelCriterion(), poolStats);
+    poolStats = StatsFactory.createPoolStatsImpl(distributedSystem.getStatisticsFactory(), "connectionManagerJUnitTest");
+    endpointManager = new EndpointManagerImpl("pool", distributedSystem, distributedSystem.getCancelCriterion(), poolStats);
     cancelCriterion = new CancelCriterion() {
 
       public String cancelInProgress() {
@@ -108,7 +109,7 @@ public class ConnectionManagerJUnitTest {
 
   @After
   public void tearDown() throws InterruptedException {
-    ds.disconnect();
+    distributedSystem.disconnect();
     if (manager != null) {
       manager.close(false);
     }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
index c2b3e97..100efb4 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitorJUnitTest.java
@@ -90,6 +90,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.net.SocketCreatorFactory;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
@@ -143,7 +144,7 @@ public class GMSHealthMonitorJUnitTest {
     when(services.getJoinLeave()).thenReturn(joinLeave);
     when(services.getCancelCriterion()).thenReturn(stopper);
     when(services.getManager()).thenReturn(manager);
-    when(services.getStatistics()).thenReturn(new DistributionStats(system, statsId));
+    when(services.getStatistics()).thenReturn(StatsFactory.createDistributionStatsImpl(system.getStatisticsFactory(), String.valueOf(statsId)));
     when(stopper.isCancelInProgress()).thenReturn(false);
 
     if (mockMembers == null) {
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java
index e7154c1..de3512a 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java
@@ -43,7 +43,6 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.InternalLocator;
-import org.apache.geode.distributed.internal.LocatorStats;
 import org.apache.geode.distributed.internal.membership.DistributedMembershipListener;
 import org.apache.geode.distributed.internal.membership.MemberFactory;
 import org.apache.geode.distributed.internal.membership.MembershipManager;
@@ -53,6 +52,9 @@ import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurityServiceFactory;
+import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
@@ -67,7 +69,8 @@ public class GMSLocatorRecoveryJUnitTest {
     if (this.tempStateFile.exists()) {
       this.tempStateFile.delete();
     }
-    this.locator = new GMSLocator(null, null, false, false, new LocatorStats(), "");
+    this.locator = new GMSLocator(null, null, false, false, StatsFactory.createLocatorStatsImpl(
+        (StatisticsFactory) new StatisticsTypeFactoryImpl(),"testLocator"), "");
     locator.setViewFile(tempStateFile);
     // System.out.println("temp state file: " + tempStateFile);
   }
@@ -177,7 +180,8 @@ public class GMSLocatorRecoveryJUnitTest {
       ((InternalLocator) l).getLocatorHandler().setMembershipManager(m1);
 
       GMSLocator l2 = new GMSLocator(SocketCreator.getLocalHost(),
-          m1.getLocalMember().getHost() + "[" + port + "]", true, true, new LocatorStats(), "");
+          m1.getLocalMember().getHost() + "[" + port + "]", true, true, StatsFactory.createLocatorStatsImpl(
+          (StatisticsFactory) new StatisticsTypeFactoryImpl(),"testLocator"), "");
       l2.setViewFile(new File("l2.dat"));
       l2.init(null);
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
index ce7990d..6628c93 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
@@ -75,6 +75,7 @@ import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.DistributionStats;
+import org.apache.geode.distributed.internal.DistributionStatsImpl;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.SerialAckedMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
@@ -102,6 +103,7 @@ import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.cache.DistributedCacheOperation;
 import org.apache.geode.internal.logging.log4j.AlertAppender;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
@@ -166,7 +168,7 @@ public class JGroupsMessengerJUnitTest {
     DistributionManager dm = mock(DistributionManager.class);
     InternalDistributedSystem system =
         InternalDistributedSystem.newInstanceForTesting(dm, nonDefault);
-    when(services.getStatistics()).thenReturn(new DistributionStats(system, statsId));
+    when(services.getStatistics()).thenReturn(StatsFactory.createDistributionStatsImpl(system.getStatisticsFactory(), String.valueOf(statsId)));
 
     messenger = new JGroupsMessenger();
     messenger.init(services);
@@ -832,7 +834,7 @@ public class JGroupsMessengerJUnitTest {
   @Test
   public void testReceiver() throws Exception {
     try {
-      DistributionStats.enableClockStats = true;
+      DistributionStatsImpl.enableClockStats = true;
       initMocks(false);
       JGroupsReceiver receiver = (JGroupsReceiver) messenger.myChannel.getReceiver();
 
@@ -871,7 +873,7 @@ public class JGroupsMessengerJUnitTest {
       assertTrue("There should be UDPDispatchRequestTime stats",
           services.getStatistics().getUDPDispatchRequestTime() > 0);
     } finally {
-      DistributionStats.enableClockStats = false;
+      DistributionStatsImpl.enableClockStats = false;
     }
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ComplexDiskRegionJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ComplexDiskRegionJUnitTest.java
index e90d41a..39cbb57 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ComplexDiskRegionJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ComplexDiskRegionJUnitTest.java
@@ -19,7 +19,7 @@ import static org.junit.Assert.fail;
 
 import org.junit.Test;
 
-import org.apache.geode.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsFactory;
 import org.apache.geode.cache.Scope;
 
 /**
@@ -52,7 +52,7 @@ public class ComplexDiskRegionJUnitTest extends DiskRegionTestingBase {
     diskProps.setAllowForceCompaction(true);
     region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, diskProps, Scope.LOCAL);
     DiskRegion dr = ((LocalRegion) region).getDiskRegion();
-    StatisticsFactory factory = region.getCache().getDistributedSystem();
+    StatisticsFactory factory = region.getCache().getDistributedSystem().getStatisticsFactory();
     Oplog oplog1 = new Oplog(11, dr.getOplogSet(), new DirectoryHolder(factory, dirs[1], 1000, 0));
     Oplog oplog2 = new Oplog(12, dr.getOplogSet(), new DirectoryHolder(factory, dirs[2], 1000, 1));
     Oplog oplog3 = new Oplog(13, dr.getOplogSet(), new DirectoryHolder(factory, dirs[3], 1000, 2));
@@ -109,7 +109,7 @@ public class ComplexDiskRegionJUnitTest extends DiskRegionTestingBase {
     diskProps.setRolling(false);
     region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, diskProps, Scope.LOCAL);
     DiskRegion dr = ((LocalRegion) region).getDiskRegion();
-    StatisticsFactory factory = region.getCache().getDistributedSystem();
+    StatisticsFactory factory = region.getCache().getDistributedSystem().getStatisticsFactory();
     Oplog oplog1 = new Oplog(11, dr.getOplogSet(), new DirectoryHolder(factory, dirs[1], 1000, 0));
     Oplog oplog2 = new Oplog(12, dr.getOplogSet(), new DirectoryHolder(factory, dirs[2], 1000, 1));
     Oplog oplog3 = new Oplog(13, dr.getOplogSet(), new DirectoryHolder(factory, dirs[3], 1000, 2));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskInitFileJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskInitFileJUnitTest.java
index 0eeca0c..8d3ea63 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskInitFileJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskInitFileJUnitTest.java
@@ -30,7 +30,7 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
-import org.apache.geode.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsFactory;
 import org.apache.geode.internal.cache.persistence.DiskRegionView;
 
 public class DiskInitFileJUnitTest {
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogJUnitTest.java
index 3dad586..2ad0053 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogJUnitTest.java
@@ -41,7 +41,7 @@ import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
 
-import org.apache.geode.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsFactory;
 import org.apache.geode.cache.CacheWriterException;
 import org.apache.geode.cache.DiskAccessException;
 import org.apache.geode.cache.DiskStore;
@@ -193,7 +193,7 @@ public class OplogJUnitTest extends DiskRegionTestingBase {
       long id = oplog.getOplogId();
       oplog.close();
 
-      StatisticsFactory factory = cache.getDistributedSystem();
+      StatisticsFactory factory = cache.getDistributedSystem().getStatisticsFactory();
       Oplog newOplog =
           new Oplog(id, dr.getOplogSet(), new DirectoryHolder(factory, dirs[0], 1000, 0));
       dr.getOplogSet().setChild(newOplog);
@@ -214,7 +214,7 @@ public class OplogJUnitTest extends DiskRegionTestingBase {
       Oplog oplog = dr.testHook_getChild();
       long id = oplog.getOplogId();
       oplog.close();
-      StatisticsFactory factory = cache.getDistributedSystem();
+      StatisticsFactory factory = cache.getDistributedSystem().getStatisticsFactory();
       Oplog newOplog =
           new Oplog(id, dr.getOplogSet(), new DirectoryHolder(factory, dirs[0], 1000, 2));
       dr.setChild(newOplog);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogRVVJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogRVVJUnitTest.java
index c3f3cd3..dd72767 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogRVVJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/OplogRVVJUnitTest.java
@@ -35,13 +35,14 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
-import org.apache.geode.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsFactory;
 import org.apache.geode.i18n.LogWriterI18n;
 import org.apache.geode.internal.cache.DiskInitFile.DiskRegionFlag;
 import org.apache.geode.internal.cache.DiskStoreImpl.OplogEntryIdSet;
 import org.apache.geode.internal.cache.persistence.DiskRecoveryStore;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.cache.versions.DiskRegionVersionVector;
+import org.apache.geode.statistics.StatsFactory;
 
 public class OplogRVVJUnitTest {
 
@@ -114,7 +115,7 @@ public class OplogRVVJUnitTest {
         allowing(parent).getName();
         will(returnValue("test"));
         allowing(parent).getStats();
-        will(returnValue(new DiskStoreStats(sf, "stats")));
+        will(returnValue(StatsFactory.createDiskStoreStatsImpl(sf, "stats")));
         allowing(parent).getDiskInitFile();
         will(returnValue(df));
         allowing(parent).getDiskStoreID();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsJUnitTest.java
index d0d59b8..ba060ea 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/PartitionedRegionStatsJUnitTest.java
@@ -34,7 +34,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.geode.LogWriter;
-import org.apache.geode.Statistics;
+import org.apache.geode.statistics.Statistics;
 import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.DataPolicy;
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/SimpleDiskRegionJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/SimpleDiskRegionJUnitTest.java
index 7a1b326..9b1da16 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/SimpleDiskRegionJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/SimpleDiskRegionJUnitTest.java
@@ -30,7 +30,7 @@ import java.util.Set;
 
 import org.junit.Test;
 
-import org.apache.geode.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsFactory;
 import org.apache.geode.test.dunit.ThreadUtils;
 
 /**
@@ -240,7 +240,7 @@ public class SimpleDiskRegionJUnitTest extends DiskRegionTestingBase {
     Oplog oplog = dr.testHook_getChild();
     long id = oplog.getOplogId();
 
-    StatisticsFactory factory = region.getCache().getDistributedSystem();
+    StatisticsFactory factory = region.getCache().getDistributedSystem().getStatisticsFactory();
     Oplog newOplog =
         new Oplog(id, dr.getOplogSet(), new DirectoryHolder(factory, dirs[0], 1000000, 0));
     dr.getDiskStore().getPersistentOplogs().setChild(newOplog);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java
index bff62c5..8900108 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java
@@ -26,8 +26,8 @@ import org.junit.After;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
@@ -137,8 +137,8 @@ public class CacheServerMaxConnectionsJUnitTest {
   public void testMaxCnxLimit() throws Exception {
     PORT = createServer();
     createProxyAndRegionForClient();
-    StatisticsType st = this.system.findType("CacheServerStats");
-    final Statistics s = this.system.findStatisticsByType(st)[0];
+    StatisticsType st = this.system.getStatisticsFactory().findType("CacheServerStats");
+    final Statistics s = this.system.getStatisticsFactory().findStatisticsByType(st)[0];
     assertEquals(0, s.getInt("currentClients"));
     assertEquals(0, s.getInt("currentClientConnections"));
     Connection[] cnxs = new Connection[MAX_CNXS];
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitorIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitorIntegrationTest.java
index 8df649d..a4264a9 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitorIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitorIntegrationTest.java
@@ -30,8 +30,8 @@ import org.junit.Test;
 import org.junit.contrib.java.lang.system.RestoreSystemProperties;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.cache.AttributesFactory;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
@@ -142,14 +142,14 @@ public class ClientHealthMonitorIntegrationTest {
 
     assertEquals(monitorInterval,
         ClientHealthMonitor
-            .getInstance(mock(InternalCache.class), 0, mock(CacheClientNotifierStats.class))
+            .getInstance(mock(InternalCache.class), 0, mock(CacheClientNotifierStatsImpl.class))
             .getMonitorInterval());
   }
 
   @Test
   public void monitorIntervalDefaultsWhenNotSet() {
     assertNotNull(ClientHealthMonitor
-        .getInstance(mock(InternalCache.class), 0, mock(CacheClientNotifierStats.class))
+        .getInstance(mock(InternalCache.class), 0, mock(CacheClientNotifierStatsImpl.class))
         .getMonitorInterval());
   }
 
@@ -160,7 +160,7 @@ public class ClientHealthMonitorIntegrationTest {
         monitorInterval);
 
     assertNotNull(ClientHealthMonitor
-        .getInstance(mock(InternalCache.class), 0, mock(CacheClientNotifierStats.class))
+        .getInstance(mock(InternalCache.class), 0, mock(CacheClientNotifierStatsImpl.class))
         .getMonitorInterval());
   }
 
@@ -179,8 +179,8 @@ public class ClientHealthMonitorIntegrationTest {
     System.setProperty(ClientHealthMonitor.CLIENT_HEALTH_MONITOR_INTERVAL_PROPERTY, "100");
     PORT = createServer();
     createProxyAndRegionForClient();
-    StatisticsType statisticsType = this.system.findType("CacheServerStats");
-    final Statistics statistics = this.system.findStatisticsByType(statisticsType)[0];
+    StatisticsType statisticsType = this.system.getStatisticsFactory().findType("CacheServerStats");
+    final Statistics statistics = this.system.getStatisticsFactory().findStatisticsByType(statisticsType)[0];
     assertEquals(0, statistics.getInt("currentClients"));
     assertEquals(0, statistics.getInt("currentClientConnections"));
     this.system.getLogWriter()
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
index 7a9e63f..ece5e09 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
@@ -63,7 +63,7 @@ public class ServerConnectionIntegrationTest {
   private Socket socket;
   private InternalCache cache;
   private SecurityService securityService;
-  private CacheServerStats stats;
+  private CacheServerStatsImpl stats;
 
   @Before
   public void setUp() throws IOException {
@@ -78,7 +78,7 @@ public class ServerConnectionIntegrationTest {
     cache = mock(InternalCache.class);
     securityService = mock(SecurityService.class);
 
-    stats = mock(CacheServerStats.class);
+    stats = mock(CacheServerStatsImpl.class);
   }
 
   class TestMessage extends Message {
@@ -124,9 +124,9 @@ public class ServerConnectionIntegrationTest {
      * client over a given <code>Socket</code>.
      */
     public TestServerConnection(Socket socket, InternalCache internalCache,
-        CachedRegionHelper helper, CacheServerStats stats, int hsTimeout, int socketBufferSize,
-        String communicationModeStr, byte communicationMode, Acceptor acceptor,
-        SecurityService securityService) {
+                                CachedRegionHelper helper, CacheServerStatsImpl stats, int hsTimeout, int socketBufferSize,
+                                String communicationModeStr, byte communicationMode, Acceptor acceptor,
+                                SecurityService securityService) {
       super(socket, internalCache, helper, stats, hsTimeout, socketBufferSize, communicationModeStr,
           communicationMode, acceptor, securityService);
 
@@ -178,7 +178,7 @@ public class ServerConnectionIntegrationTest {
   @Test
   public void terminatingConnectionHandlesNewRequestsGracefully() throws Exception {
     when(cache.getCacheTransactionManager()).thenReturn(mock(TXManagerImpl.class));
-    ClientHealthMonitor.createInstance(cache, 100, mock(CacheClientNotifierStats.class));
+    ClientHealthMonitor.createInstance(cache, 100, mock(CacheClientNotifierStatsImpl.class));
     ClientHealthMonitor clientHealthMonitor = ClientHealthMonitor.getInstance();
     when(acceptor.getClientHealthMonitor()).thenReturn(clientHealthMonitor);
     when(acceptor.getConnectionListener()).thenReturn(mock(ConnectionListener.class));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/MemoryAllocatorFillPatternIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/MemoryAllocatorFillPatternIntegrationTest.java
index 0f8f22d..f27a6f5 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/MemoryAllocatorFillPatternIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/MemoryAllocatorFillPatternIntegrationTest.java
@@ -92,7 +92,7 @@ public class MemoryAllocatorFillPatternIntegrationTest {
     System.setProperty(DistributionConfig.GEMFIRE_PREFIX + "validateOffHeapWithFill", "true");
     this.slab = new SlabImpl(SLAB_SIZE);
     this.allocator = MemoryAllocatorImpl.createForUnitTest(new NullOutOfOffHeapMemoryListener(),
-        new NullOffHeapMemoryStats(), new SlabImpl[] {this.slab});
+        new NullOffHeapStorageStats(), new SlabImpl[] {this.slab});
   }
 
   /**
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DiskSpaceLimitIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DiskSpaceLimitIntegrationTest.java
index 23c8e16..4755ca8 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DiskSpaceLimitIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DiskSpaceLimitIntegrationTest.java
@@ -38,9 +38,9 @@ import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.io.MainWithChildrenRollingFileHandler;
 import org.apache.geode.internal.io.RollingFileHandler;
@@ -129,7 +129,6 @@ public class DiskSpaceLimitIntegrationTest {
 
   @After
   public void tearDown() throws Exception {
-    StatisticsTypeFactoryImpl.clear();
   }
 
   @Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsIntegrationTest.java
index 6747722..bd4c56e 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsIntegrationTest.java
@@ -30,10 +30,10 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.test.junit.categories.StatisticsTest;
 
@@ -232,7 +232,7 @@ public class DistributedSystemStatisticsIntegrationTest {
   }
 
   private StatisticsFactory factory() {
-    return this.system;
+    return this.system.getStatisticsFactory();
   }
 
   private Statistics setUpIntStatistics(final int count) {
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsTypeIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsTypeIntegrationTest.java
index a3a324f..d975d27 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsTypeIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/DistributedSystemStatisticsTypeIntegrationTest.java
@@ -29,9 +29,9 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.test.junit.categories.StatisticsTest;
 
@@ -85,7 +85,7 @@ public class DistributedSystemStatisticsTypeIntegrationTest {
   }
 
   private StatisticsFactory factory() {
-    return this.system;
+    return this.system.getStatisticsFactory();
   }
 
 }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/FileSizeLimitIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/FileSizeLimitIntegrationTest.java
index be13360..b19edfd 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/FileSizeLimitIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/FileSizeLimitIntegrationTest.java
@@ -32,9 +32,9 @@ import org.junit.rules.TestName;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.io.MainWithChildrenRollingFileHandler;
 import org.apache.geode.test.junit.categories.StatisticsTest;
@@ -111,7 +111,6 @@ public class FileSizeLimitIntegrationTest {
 
   @After
   public void tearDown() throws Exception {
-    StatisticsTypeFactoryImpl.clear();
   }
 
   @Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/GemFireStatSamplerIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/GemFireStatSamplerIntegrationTest.java
index 250d99a..2bab55e 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/GemFireStatSamplerIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/GemFireStatSamplerIntegrationTest.java
@@ -47,8 +47,8 @@ import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.GemFireVersion;
@@ -75,7 +75,7 @@ public class GemFireStatSamplerIntegrationTest extends StatSamplerTestCase {
 
   private static final int STAT_SAMPLE_RATE = 1000;
 
-  private DistributedSystem system;
+  private DistributedSystem distributedSystem;
   private File testDir;
 
   @Rule
@@ -367,7 +367,7 @@ public class GemFireStatSamplerIntegrationTest extends StatSamplerTestCase {
     final File archiveFile2 = new File(dirName + File.separator + this.testName + "-01-02.gfs");
     final File archiveFile3 = new File(dirName + File.separator + this.testName + "-01-03.gfs");
 
-    // set the system property to use KB instead of MB for file size
+    // set the distributedSystem property to use KB instead of MB for file size
     System.setProperty(HostStatSampler.TEST_FILE_SIZE_LIMIT_IN_KB_PROPERTY, "true");
     Properties props = createGemFireProperties();
     props.setProperty(ARCHIVE_FILE_SIZE_LIMIT, "1");
@@ -415,7 +415,7 @@ public class GemFireStatSamplerIntegrationTest extends StatSamplerTestCase {
 
     final int sampleRate = 1000;
 
-    // set the system property to use KB instead of MB for file size
+    // set the distributedSystem property to use KB instead of MB for file size
     System.setProperty(HostStatSampler.TEST_FILE_SIZE_LIMIT_IN_KB_PROPERTY, "true");
     Properties props = createGemFireProperties();
     props.setProperty(STATISTIC_ARCHIVE_FILE, archiveFileName);
@@ -471,7 +471,7 @@ public class GemFireStatSamplerIntegrationTest extends StatSamplerTestCase {
     final String tenuredPoolName = HeapMemoryMonitor.getTenuredMemoryPoolMXBean().getName();
     logger.info("TenuredPoolName: {}", tenuredPoolName);
 
-    final List<Statistics> list = ((StatisticsManager) this.system).getStatsList();
+    final List<Statistics> list = ((StatisticsManager) this.distributedSystem).getStatsList();
     assertFalse(list.isEmpty());
 
     boolean done = false;
@@ -525,15 +525,15 @@ public class GemFireStatSamplerIntegrationTest extends StatSamplerTestCase {
 
   @Override
   protected StatisticsManager getStatisticsManager() {
-    return (InternalDistributedSystem) this.system;
+    return ((InternalDistributedSystem)this.distributedSystem).getInternalDistributedSystemStats();
   }
 
   protected OsStatisticsFactory getOsStatisticsFactory() {
-    return (InternalDistributedSystem) this.system;
+    return ((InternalDistributedSystem)this.distributedSystem).getInternalDistributedSystemStats();
   }
 
   private GemFireStatSampler getGemFireStatSampler() {
-    return ((InternalDistributedSystem) this.system).getStatSampler();
+    return ((InternalDistributedSystem) this.distributedSystem).getInternalDistributedSystemStats().getStatSampler();
   }
 
   private SampleCollector getSampleCollector() {
@@ -558,65 +558,14 @@ public class GemFireStatSamplerIntegrationTest extends StatSamplerTestCase {
    */
   @SuppressWarnings("deprecation")
   private void connect(Properties props) {
-    this.system = DistributedSystem.connect(props);
+    this.distributedSystem = DistributedSystem.connect(props);
   }
 
   @SuppressWarnings("deprecation")
   private void disconnect() {
-    if (this.system != null) {
-      this.system.disconnect();
-      this.system = null;
+    if (this.distributedSystem != null) {
+      this.distributedSystem.disconnect();
+      this.distributedSystem = null;
     }
   }
-
-  // public static class AsyncInvoker {
-  // public static AsyncInvocation invokeAsync(Runnable r) {
-  // return invokeAsync(r, "run", new Object[0]);
-  // }
-  // public static AsyncInvocation invokeAsync(Callable c) {
-  // return invokeAsync(c, "call", new Object[0]);
-  // }
-  // public static AsyncInvocation invokeAsync(
-  // final Object o, final String methodName, final Object[] args) {
-  // AsyncInvocation ai =
-  // new AsyncInvocation(o, methodName, new Runnable() {
-  // public void run() {
-  // MethExecutorResult result =
-  // MethExecutor.executeObject(o, methodName, args);
-  // if (result.exceptionOccurred()) {
-  // throw new AsyncInvocationException(result.getException());
-  // }
-  // AsyncInvocation.setReturnValue(result.getResult());
-  // }
-  // });
-  // ai.start();
-  // return ai;
-  // }
-  //
-  // public static class AsyncInvocationException extends RuntimeException {
-  // private static final long serialVersionUID = -5522299018650622945L;
-  // /**
-  // * Creates a new <code>AsyncInvocationException</code>.
-  // */
-  // public AsyncInvocationException(String message) {
-  // super(message);
-  // }
-  //
-  // /**
-  // * Creates a new <code>AsyncInvocationException</code> that was
-  // * caused by a given exception
-  // */
-  // public AsyncInvocationException(String message, Throwable thr) {
-  // super(message, thr);
-  // }
-  //
-  // /**
-  // * Creates a new <code>AsyncInvocationException</code> that was
-  // * caused by a given exception
-  // */
-  // public AsyncInvocationException(Throwable thr) {
-  // super(thr.getMessage(), thr);
-  // }
-  // }
-  // }
 }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java
index 21b29ca..714174d 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/LinuxSystemStatsTest.java
@@ -1,4 +1,5 @@
 /*
+/*
  * 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
@@ -42,9 +43,10 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
 import org.apache.geode.CancelCriterion;
-import org.apache.geode.Statistics;
 import org.apache.geode.internal.statistics.platform.LinuxProcFsStatistics;
 import org.apache.geode.internal.statistics.platform.LinuxSystemStats;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsFactory;
 import org.apache.geode.test.junit.categories.StatisticsTest;
 
 /**
@@ -77,7 +79,8 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
         + File.separator + SimpleStatSampler.DEFAULT_ARCHIVE_FILE_NAME);
     LinuxProcFsStatistics.init();
     initStats();
-    StatisticsTypeImpl statisticsType = (StatisticsTypeImpl) LinuxSystemStats.getType();
+    StatisticsTypeImpl statisticsType = (StatisticsTypeImpl) new LinuxSystemStats(
+        (StatisticsFactory) new StatisticsTypeFactoryImpl()).getType();
     LocalStatisticsImpl statistics = (LocalStatisticsImpl) getStatisticsManager()
         .createStatistics(statisticsType, statisticsType.getName());
 
@@ -88,7 +91,6 @@ public class LinuxSystemStatsTest extends StatSamplerTestCase {
 
   @After
   public void tearDown() throws Exception {
-    StatisticsTypeFactoryImpl.clear();
     if (this.statisticsFactory != null) {
       this.statisticsFactory.close();
     }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/SimpleStatSamplerIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/SimpleStatSamplerIntegrationTest.java
index b61b1ec..5d61475 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/SimpleStatSamplerIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/SimpleStatSamplerIntegrationTest.java
@@ -34,8 +34,8 @@ import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 
 import org.apache.geode.CancelCriterion;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.stats50.VMStats50;
 import org.apache.geode.test.junit.categories.StatisticsTest;
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithConsecutiveResourceInstGenerator.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithConsecutiveResourceInstGenerator.java
index 5312686..a420422 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithConsecutiveResourceInstGenerator.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithConsecutiveResourceInstGenerator.java
@@ -38,9 +38,9 @@ import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.statistics.StatArchiveReader.ResourceInst;
 import org.apache.geode.internal.statistics.StatArchiveReader.StatValue;
 
@@ -101,7 +101,7 @@ public class StatArchiveWithConsecutiveResourceInstGenerator {
 
   @After
   public void tearDown() throws Exception {
-    StatisticsTypeFactoryImpl.clear();
+//    StatisticsTypeFactoryImpl.clear();
   }
 
   @Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
index ac1e2e7..016c87c 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWithMissingResourceTypeRegressionTest.java
@@ -65,7 +65,6 @@ public class StatArchiveWithMissingResourceTypeRegressionTest {
 
   @After
   public void tearDown() throws Exception {
-    StatisticsTypeFactoryImpl.clear();
   }
 
   @Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWriterReaderIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWriterReaderIntegrationTest.java
index a320f2a..762f4fe 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWriterReaderIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatArchiveWriterReaderIntegrationTest.java
@@ -48,9 +48,9 @@ import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.statistics.StatArchiveReader.StatValue;
 import org.apache.geode.test.junit.categories.StatisticsTest;
@@ -91,7 +91,6 @@ public class StatArchiveWriterReaderIntegrationTest {
   public void tearDown() throws Exception {
     this.statisticTypes = null;
     this.allStatistics = null;
-    StatisticsTypeFactoryImpl.clear();
   }
 
   @Test
@@ -1598,6 +1597,21 @@ public class StatArchiveWriterReaderIntegrationTest {
       public StatisticDescriptor nameToDescriptor(String name) {
         return null;
       }
+
+      @Override
+      public int getIntStatCount() {
+        return 0;
+      }
+
+      @Override
+      public int getLongStatCount() {
+        return 0;
+      }
+
+      @Override
+      public int getDoubleStatCount() {
+        return 0;
+      }
     };
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatSamplerIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatSamplerIntegrationTest.java
index 59af828..c11b7d3 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatSamplerIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatSamplerIntegrationTest.java
@@ -38,9 +38,9 @@ import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 
 import org.apache.geode.CancelCriterion;
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.statistics.StatArchiveReader.StatValue;
 import org.apache.geode.test.junit.categories.StatisticsTest;
@@ -77,7 +77,6 @@ public class StatSamplerIntegrationTest {
   public void tearDown() {
     this.statisticTypes = null;
     this.allStatistics = null;
-    StatisticsTypeFactoryImpl.clear();
     StatArchiveWriter.clearTraceFilter();
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatTypesAreRolledOverRegressionTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatTypesAreRolledOverRegressionTest.java
index 520cdca..6de8f6c 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatTypesAreRolledOverRegressionTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/StatTypesAreRolledOverRegressionTest.java
@@ -33,9 +33,9 @@ import org.junit.rules.TemporaryFolder;
 import org.junit.rules.TestName;
 import org.mockito.stubbing.Answer;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.io.MainWithChildrenRollingFileHandler;
 import org.apache.geode.internal.statistics.StatArchiveReader.ResourceInst;
@@ -105,7 +105,6 @@ public class StatTypesAreRolledOverRegressionTest {
 
   @After
   public void tearDown() throws Exception {
-    StatisticsTypeFactoryImpl.clear();
   }
 
   @Test
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/ValueMonitorIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/ValueMonitorIntegrationTest.java
index 43392b5..75fbb01 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/ValueMonitorIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/statistics/ValueMonitorIntegrationTest.java
@@ -37,9 +37,9 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.io.MainWithChildrenRollingFileHandler;
 import org.apache.geode.internal.statistics.StatisticsNotification.Type;
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/stats50/AtomicStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/stats50/AtomicStatsJUnitTest.java
index 46753c9..9e2ce45 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/stats50/AtomicStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/stats50/AtomicStatsJUnitTest.java
@@ -25,10 +25,10 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import org.junit.Test;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsType;
-import org.apache.geode.StatisticsTypeFactory;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.Statistics;
+import org.apache.geode.statistics.StatisticsType;
+import org.apache.geode.statistics.StatisticsTypeFactory;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
 
@@ -46,14 +46,14 @@ public class AtomicStatsJUnitTest {
     props.setProperty(MCAST_PORT, "0");
     // props.setProperty("statistic-sample-rate", "60000");
     props.setProperty(STATISTIC_SAMPLING_ENABLED, "false");
-    DistributedSystem ds = DistributedSystem.connect(props);
+    DistributedSystem distributedSystem = DistributedSystem.connect(props);
 
     String statName = "TestStats";
     String statDescription = "Tests stats";
 
     final String statDesc = "blah blah blah";
 
-    StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
+    StatisticsTypeFactory f = new StatisticsTypeFactoryImpl();
 
     StatisticsType type = f.createType(statName, statDescription, new StatisticDescriptor[] {
         f.createIntGauge("stat", statDesc, "bottles of beer on the wall"),});
@@ -102,7 +102,7 @@ public class AtomicStatsJUnitTest {
       thread1.start();
       thread3.start();
       for (int i = 0; i < 5000; i++) {
-        Statistics stats = ds.createAtomicStatistics(type, "stats");
+        Statistics stats = distributedSystem.getStatisticsFactory().createAtomicStatistics(type, "stats");
         statsRef.set(stats);
         beforeIncrement.await();
         afterIncrement.await();
@@ -111,7 +111,7 @@ public class AtomicStatsJUnitTest {
       }
 
     } finally {
-      ds.disconnect();
+      distributedSystem.disconnect();
     }
   }
 }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java
index b777ac0..58cc3ca 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/AsyncEventQueueStatsJUnitTest.java
@@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.StatisticDescriptor;
+import org.apache.geode.statistics.StatisticDescriptor;
 import org.apache.geode.cache.asyncqueue.internal.AsyncEventQueueStats;
 import org.apache.geode.management.internal.beans.AsyncEventQueueMBeanBridge;
 import org.apache.geode.test.junit.categories.JMXTest;
@@ -32,7 +32,7 @@ public class AsyncEventQueueStatsJUnitTest extends MBeanStatsTestCase {
   private AsyncEventQueueStats asyncEventQueueStats;
 
   public void init() {
-    asyncEventQueueStats = new AsyncEventQueueStats(system, "test");
+    asyncEventQueueStats = new AsyncEventQueueStats(system.getStatisticsFactory(), "test");
 
     bridge = new AsyncEventQueueMBeanBridge();
     bridge.addAsyncEventQueueStats(asyncEventQueueStats);
@@ -57,7 +57,7 @@ public class AsyncEventQueueStatsJUnitTest extends MBeanStatsTestCase {
 
   @Test
   public void testStatDescriptors() {
-    StatisticDescriptor[] sds = asyncEventQueueStats.type.getStatistics();
+    StatisticDescriptor[] sds = asyncEventQueueStats.getType().getStatistics();
     int notQueueEvents = 0;
     int notQueueToPrimary = 0;
     int eventsProcessedByPQRM = 0;
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/CacheServerStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/CacheServerStatsJUnitTest.java
index ded4e91..ee18ae5 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/CacheServerStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/CacheServerStatsJUnitTest.java
@@ -21,7 +21,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.server.ServerLoad;
-import org.apache.geode.internal.cache.tier.sockets.CacheServerStats;
+import org.apache.geode.internal.cache.tier.sockets.CacheServerStatsImpl;
 import org.apache.geode.management.internal.beans.CacheServerBridge;
 import org.apache.geode.test.junit.categories.JMXTest;
 
@@ -30,10 +30,10 @@ public class CacheServerStatsJUnitTest extends MBeanStatsTestCase {
 
   private CacheServerBridge bridge;
 
-  private CacheServerStats cacheServerStats;
+  private CacheServerStatsImpl cacheServerStats;
 
   public void init() {
-    cacheServerStats = new CacheServerStats("Test Sock Name");
+    cacheServerStats = new CacheServerStatsImpl("Test Sock Name");
 
     bridge = new CacheServerBridge();
     bridge.addCacheServerStats(cacheServerStats);
@@ -58,7 +58,7 @@ public class CacheServerStatsJUnitTest extends MBeanStatsTestCase {
     cacheServerStats.incProcessPutTime(startTime);
 
     ServerLoad load = new ServerLoad(1, 1, 1, 1);
-    cacheServerStats.setLoad(load);
+    cacheServerStats.setLoad(load.getConnectionLoad(),load.getLoadPerConnection(),load.getSubscriptionConnectionLoad(),load.getLoadPerSubscriptionConnection());
 
     sample();
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DiskStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DiskStatsJUnitTest.java
index 39cc270..4c02ec7 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DiskStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DiskStatsJUnitTest.java
@@ -24,6 +24,7 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.cache.DiskStoreStats;
 import org.apache.geode.management.internal.beans.DiskStoreMBeanBridge;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.JMXTest;
 
 @Category({JMXTest.class})
@@ -36,7 +37,7 @@ public class DiskStatsJUnitTest extends MBeanStatsTestCase {
   private static long testStartTime = NanoTimer.getTime();
 
   public void init() {
-    diskStoreStats = new DiskStoreStats(system, "test");
+    diskStoreStats = StatsFactory.createDiskStoreStatsImpl(system.getStatisticsFactory(), "test");
 
     bridge = new DiskStoreMBeanBridge();
     bridge.addDiskStoreStats(diskStoreStats);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DistributedSystemStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DistributedSystemStatsJUnitTest.java
index d44402d..66f3e6f 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DistributedSystemStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/DistributedSystemStatsJUnitTest.java
@@ -75,8 +75,8 @@ public class DistributedSystemStatsJUnitTest {
     props.setProperty(JMX_MANAGER_PORT, "0");
 
     this.system = (InternalDistributedSystem) DistributedSystem.connect(props);
-    assertNotNull(this.system.getStatSampler());
-    assertNotNull(this.system.getStatSampler().waitForSampleCollector(TIMEOUT));
+    assertNotNull(this.system.getInternalDistributedSystemStats().getStatSampler());
+    assertNotNull(this.system.getInternalDistributedSystemStats().getStatSampler().waitForSampleCollector(TIMEOUT));
 
     this.cache = new CacheFactory().create();
 
@@ -115,12 +115,12 @@ public class DistributedSystemStatsJUnitTest {
   }
 
   protected void waitForNotification() throws InterruptedException {
-    this.system.getStatSampler().waitForSample(TIMEOUT);
+    this.system.getInternalDistributedSystemStats().getStatSampler().waitForSample(TIMEOUT);
     Thread.sleep(SLEEP);
   }
 
   protected void sample() throws InterruptedException {
-    this.system.getStatSampler().getSampleCollector().sample(NanoTimer.getTime());
+    this.system.getInternalDistributedSystemStats().getStatSampler().getSampleCollector().sample(NanoTimer.getTime());
     Thread.sleep(SLEEP);
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayMBeanBridgeJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayMBeanBridgeJUnitTest.java
index 53f1e4b..0f01070 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayMBeanBridgeJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayMBeanBridgeJUnitTest.java
@@ -25,6 +25,7 @@ import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.cache.wan.AbstractGatewaySender;
 import org.apache.geode.internal.cache.wan.GatewaySenderStats;
 import org.apache.geode.management.internal.beans.GatewaySenderMBeanBridge;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.JMXTest;
 
 @Category({JMXTest.class})
@@ -39,7 +40,7 @@ public class GatewayMBeanBridgeJUnitTest extends MBeanStatsTestCase {
   private AbstractGatewaySender sender;
 
   public void init() {
-    senderStats = new GatewaySenderStats(system, "test");
+    senderStats = StatsFactory.createGatewaySenderStatsImpl(system.getStatisticsFactory(), "test");
 
     sender = Mockito.mock(AbstractGatewaySender.class);
     Mockito.when(sender.getStatistics()).thenReturn(senderStats);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayReceiverStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayReceiverStatsJUnitTest.java
index a9c568f..9ee155b 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayReceiverStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/GatewayReceiverStatsJUnitTest.java
@@ -23,6 +23,7 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.cache.server.ServerLoad;
 import org.apache.geode.internal.cache.wan.GatewayReceiverStats;
 import org.apache.geode.management.internal.beans.GatewayReceiverMBeanBridge;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.JMXTest;
 
 @Category({JMXTest.class})
@@ -33,7 +34,7 @@ public class GatewayReceiverStatsJUnitTest extends MBeanStatsTestCase {
   private GatewayReceiverStats receiverStats;
 
   public void init() {
-    receiverStats = GatewayReceiverStats.createGatewayReceiverStats("Test Sock Name");
+    receiverStats = StatsFactory.createGatewayReceiverStatsImpl(null,"Test Sock Name");
 
     bridge = new GatewayReceiverMBeanBridge();
     bridge.addGatewayReceiverStats(receiverStats);
@@ -58,7 +59,7 @@ public class GatewayReceiverStatsJUnitTest extends MBeanStatsTestCase {
     receiverStats.incProcessPutTime(startTime);
 
     ServerLoad load = new ServerLoad(1, 1, 1, 1);
-    receiverStats.setLoad(load);
+    receiverStats.setLoad(load.getConnectionLoad(),load.getLoadPerConnection(),load.getSubscriptionConnectionLoad(),load.getLoadPerSubscriptionConnection());
 
     sample();
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/MemberLevelStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/MemberLevelStatsJUnitTest.java
index ff27c75..5441d35 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/MemberLevelStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/MemberLevelStatsJUnitTest.java
@@ -27,7 +27,8 @@ import org.junit.experimental.categories.Category;
 import org.junit.rules.TestName;
 
 import org.apache.geode.distributed.internal.DistributionStats;
-import org.apache.geode.distributed.internal.locks.DLockStats;
+import org.apache.geode.distributed.internal.DistributionStatsImpl;
+import org.apache.geode.distributed.internal.locks.DistributedLockStats;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.OSProcess;
 import org.apache.geode.internal.cache.CachePerfStats;
@@ -39,6 +40,7 @@ import org.apache.geode.internal.statistics.VMStatsContract;
 import org.apache.geode.internal.stats50.VMStats50;
 import org.apache.geode.management.ManagementService;
 import org.apache.geode.management.internal.beans.MemberMBeanBridge;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.JMXTest;
 
 @Category({JMXTest.class})
@@ -54,7 +56,7 @@ public class MemberLevelStatsJUnitTest extends MBeanStatsTestCase {
 
   private DistributionStats distributionStats;
 
-  private DLockStats dlockStats;
+  private DistributedLockStats dlockStats;
 
   private List<DiskStoreStats> diskStatsList = new ArrayList<DiskStoreStats>();
 
@@ -65,12 +67,12 @@ public class MemberLevelStatsJUnitTest extends MBeanStatsTestCase {
   private static long testStartTime = NanoTimer.getTime();
 
   public void init() {
-    cachePerfStats = new CachePerfStats(system);
-    funcServiceStats = new FunctionServiceStats(system, "FunctionExecution");
+    cachePerfStats = StatsFactory.createCachePerfStatsImpl(system.getStatisticsFactory(),null);
+    funcServiceStats = new FunctionServiceStats(system.getStatisticsFactory(), "FunctionExecution");
     long statId = OSProcess.getId();
-    distributionStats = new DistributionStats(system, statId);
-    DistributionStats.enableClockStats = true;
-    dlockStats = new DLockStats(system, statId);
+    distributionStats = StatsFactory.createDistributionStatsImpl(system.getStatisticsFactory(), String.valueOf(statId));
+    DistributionStatsImpl.enableClockStats = true;
+    dlockStats = StatsFactory.createDLockStatsImpl(system.getStatisticsFactory(), statId);
 
     bridge = new MemberMBeanBridge();
     bridge.addCacheStats(cachePerfStats);
@@ -79,20 +81,20 @@ public class MemberLevelStatsJUnitTest extends MBeanStatsTestCase {
     bridge.addLockServiceStats(dlockStats);
 
 
-    VMStatsContract vmstats = system.getStatSampler().getVMStats();
+    VMStatsContract vmstats = system.getInternalDistributedSystemStats().getStatSampler().getVMStats();
     assertTrue(vmstats instanceof VMStats50);
 
     bridge.addSystemStats();
     bridge.addVMStats();
 
     for (int i = 0; i < 4; i++) {
-      DiskStoreStats stats = new DiskStoreStats(system, name.getMethodName() + i);
+      DiskStoreStats stats = StatsFactory.createDiskStoreStatsImpl(system.getStatisticsFactory(), name.getMethodName() + i);
       diskStatsList.add(stats);
       bridge.addDiskStoreStats(stats);
     }
 
     for (int i = 0; i < 4; i++) {
-      PartitionedRegionStats stats = new PartitionedRegionStats(system, name.getMethodName() + i);
+      PartitionedRegionStats stats = StatsFactory.createPartitionedRegionStatsImpl(system.getStatisticsFactory(), name.getMethodName() + i);
       parRegionStatsList.add(stats);
       bridge.addPartionRegionStats(stats);
     }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/RegionStatsJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/RegionStatsJUnitTest.java
index fea30be..1a52f8e 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/RegionStatsJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/bean/stats/RegionStatsJUnitTest.java
@@ -26,6 +26,7 @@ import org.apache.geode.internal.cache.PartitionedRegionStats;
 import org.apache.geode.management.internal.beans.DiskRegionBridge;
 import org.apache.geode.management.internal.beans.PartitionedRegionBridge;
 import org.apache.geode.management.internal.beans.RegionMBeanBridge;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.categories.JMXTest;
 
 /**
@@ -48,9 +49,9 @@ public class RegionStatsJUnitTest extends MBeanStatsTestCase {
   private DiskRegionStats diskRegionStats;
 
   protected void init() {
-    cachePerfStats = new CachePerfStats(system);
-    partitionedRegionStats = new PartitionedRegionStats(system, "/tests");
-    diskRegionStats = new DiskRegionStats(system, "test-disk");
+    cachePerfStats = StatsFactory.createCachePerfStatsImpl(system.getStatisticsFactory(),null);
+    partitionedRegionStats = StatsFactory.createPartitionedRegionStatsImpl(system.getStatisticsFactory(), "/tests");
+    diskRegionStats = StatsFactory.createDiskRegionStatsImpl(system.getStatisticsFactory(), "test-disk");
 
     bridge = new RegionMBeanBridge(cachePerfStats);
     parBridge = new PartitionedRegionBridge(partitionedRegionStats);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/beans/ManagementAdapterTest.java b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/beans/ManagementAdapterTest.java
index 80f5c83..6ddf862 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/management/internal/beans/ManagementAdapterTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/management/internal/beans/ManagementAdapterTest.java
@@ -38,6 +38,7 @@ import org.apache.geode.distributed.internal.ResourceEvent;
 import org.apache.geode.internal.cache.DiskStoreImpl;
 import org.apache.geode.internal.cache.DiskStoreStats;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.statistics.StatsFactory;
 import org.apache.geode.test.junit.rules.ServerStarterRule;
 
 public class ManagementAdapterTest {
@@ -53,7 +54,7 @@ public class ManagementAdapterTest {
   @Before
   public void before() {
     cache = serverRule.getCache();
-    doReturn(new DiskStoreStats(cache.getInternalDistributedSystem(), "disk-stats")).when(diskStore)
+    doReturn(StatsFactory.createDiskStoreStatsImpl(cache.getInternalDistributedSystem().getStatisticsFactory(), "disk-stats")).when(diskStore)
         .getStats();
     doReturn(new File[] {}).when(diskStore).getDiskDirs();
   }
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/OffHeapByteSourceJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/OffHeapByteSourceJUnitTest.java
index a28c4bc..a30db02 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/OffHeapByteSourceJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/OffHeapByteSourceJUnitTest.java
@@ -18,7 +18,7 @@ import org.junit.After;
 import org.junit.Before;
 
 import org.apache.geode.internal.offheap.MemoryAllocatorImpl;
-import org.apache.geode.internal.offheap.NullOffHeapMemoryStats;
+import org.apache.geode.internal.offheap.NullOffHeapStorageStats;
 import org.apache.geode.internal.offheap.NullOutOfOffHeapMemoryListener;
 import org.apache.geode.internal.offheap.OffHeapStoredObject;
 import org.apache.geode.internal.offheap.SlabImpl;
@@ -32,7 +32,7 @@ public class OffHeapByteSourceJUnitTest extends ByteSourceJUnitTest {
   @Before
   public final void setUp() throws Exception {
     MemoryAllocatorImpl.createForUnitTest(new NullOutOfOffHeapMemoryListener(),
-        new NullOffHeapMemoryStats(), new SlabImpl[] {new SlabImpl(1024 * 1024)});
+        new NullOffHeapStorageStats(), new SlabImpl[] {new SlabImpl(1024 * 1024)});
   }
 
   @After
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/test/dunit/internal/JUnit4DistributedTestCase.java b/geode-core/src/integrationTest/java/org/apache/geode/test/dunit/internal/JUnit4DistributedTestCase.java
index 72733a9..6b8d8a9 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/test/dunit/internal/JUnit4DistributedTestCase.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/test/dunit/internal/JUnit4DistributedTestCase.java
@@ -260,7 +260,7 @@ public abstract class JUnit4DistributedTestCase implements DistributedTestFixtur
   }
 
   public final InternalDistributedSystem basicGetSystem() {
-    return system;
+    return system ;
   }
 
   public final void nullSystem() { // TODO: delete
diff --git a/geode-core/src/main/java/org/apache/geode/admin/internal/MemberHealthEvaluator.java b/geode-core/src/main/java/org/apache/geode/admin/internal/MemberHealthEvaluator.java
index 57ba1b2..471f196 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/internal/MemberHealthEvaluator.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/internal/MemberHealthEvaluator.java
@@ -62,7 +62,7 @@ class MemberHealthEvaluator extends AbstractHealthEvaluator {
     this.config = config;
     InternalDistributedSystem system = dm.getSystem();
 
-    GemFireStatSampler sampler = system.getStatSampler();
+    GemFireStatSampler sampler = system.getInternalDistributedSystemStats().getStatSampler();
     if (sampler != null) {
       // Sampling is enabled
       this.processStats = sampler.getProcessStats();
diff --git a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java
index 2f317cf..b16012a 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/AsyncEventQueueStats.java
@@ -14,98 +14,114 @@
  */
 package org.apache.geode.cache.asyncqueue.internal;
 
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
-import org.apache.geode.StatisticsTypeFactory;
 import org.apache.geode.internal.cache.wan.GatewaySenderStats;
-import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
+import org.apache.geode.internal.cache.wan.GatewaySenderStatsImpl;
+import org.apache.geode.statistics.StatisticDescriptor;
+import org.apache.geode.statistics.StatisticsFactory;
+import org.apache.geode.statistics.StatisticsType;
 
-public class AsyncEventQueueStats extends GatewaySenderStats {
 
-  public static final String typeName = "AsyncEventQueueStatistics";
+public class AsyncEventQueueStats extends GatewaySenderStatsImpl {
 
-  /** The <code>StatisticsType</code> of the statistics */
-  public static final StatisticsType type;
+  public static final String typeName = "AsyncEventQueueStatistics";
 
+  /**
+   * The <code>StatisticsType</code> of the statistics
+   */
+  private StatisticsType type;
 
-  static {
+  /**
+   * Returns the internal ID for {@link #getEventQueueSize()} statistic
+   */
+  public static String getEventQueueSizeId() {
+    return GatewaySenderStatsImpl.EVENT_QUEUE_SIZE;
+  }
 
-    StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
+  /**
+   * Returns the internal ID for {@link #getTempEventQueueSize()} statistic
+   */
+  public static String getEventTempQueueSizeId() {
+    return GatewaySenderStatsImpl.TMP_EVENT_QUEUE_SIZE;
+  }
 
-    type = f.createType(typeName, "Stats for activity in the AsyncEventQueue",
-        new StatisticDescriptor[] {
-            f.createIntCounter(EVENTS_RECEIVED, "Number of events received by this queue.",
+  @Override
+  public void initializeStats(StatisticsFactory factory) {
+    type = factory.createType(typeName, "Stats for activity in the AsyncEventQueue",
+        new StatisticDescriptor[]{
+            factory.createIntCounter(EVENTS_RECEIVED, "Number of events received by this queue.",
                 "operations"),
-            f.createIntCounter(EVENTS_QUEUED, "Number of events added to the event queue.",
+            factory.createIntCounter(EVENTS_QUEUED, "Number of events added to the event queue.",
                 "operations"),
-            f.createLongCounter(EVENT_QUEUE_TIME, "Total time spent queueing events.",
+            factory.createLongCounter(EVENT_QUEUE_TIME, "Total time spent queueing events.",
                 "nanoseconds"),
-            f.createIntGauge(EVENT_QUEUE_SIZE, "Size of the event queue.", "operations", false),
-            f.createIntGauge(SECONDARY_EVENT_QUEUE_SIZE, "Size of the secondary event queue.",
+            factory.createIntGauge(EVENT_QUEUE_SIZE, "Size of the event queue.", "operations",
+                false),
+            factory.createIntGauge(SECONDARY_EVENT_QUEUE_SIZE, "Size of the secondary event queue.",
                 "operations", false),
-            f.createIntGauge(EVENTS_PROCESSED_BY_PQRM,
+            factory.createIntGauge(EVENTS_PROCESSED_BY_PQRM,
                 "Total number of events processed by Parallel Queue Removal Message(PQRM).",
                 "operations", false),
-            f.createIntGauge(TMP_EVENT_QUEUE_SIZE, "Size of the temporary events queue.",
+            factory.createIntGauge(TMP_EVENT_QUEUE_SIZE, "Size of the temporary events queue.",
                 "operations", false),
-            f.createIntCounter(EVENTS_NOT_QUEUED_CONFLATED,
+            factory.createIntCounter(EVENTS_NOT_QUEUED_CONFLATED,
                 "Number of events received but not added to the event queue because the queue already contains an event with the event's key.",
                 "operations"),
-            f.createIntCounter(EVENTS_CONFLATED_FROM_BATCHES,
+            factory.createIntCounter(EVENTS_CONFLATED_FROM_BATCHES,
                 "Number of events conflated from batches.", "operations"),
-            f.createIntCounter(EVENTS_DISTRIBUTED,
+            factory.createIntCounter(EVENTS_DISTRIBUTED,
                 "Number of events removed from the event queue and sent.", "operations"),
-            f.createIntCounter(EVENTS_EXCEEDING_ALERT_THRESHOLD,
+            factory.createIntCounter(EVENTS_EXCEEDING_ALERT_THRESHOLD,
                 "Number of events exceeding the alert threshold.", "operations", false),
-            f.createLongCounter(BATCH_DISTRIBUTION_TIME,
+            factory.createLongCounter(BATCH_DISTRIBUTION_TIME,
                 "Total time spent distributing batches of events to receivers.", "nanoseconds"),
-            f.createIntCounter(BATCHES_DISTRIBUTED,
+            factory.createIntCounter(BATCHES_DISTRIBUTED,
                 "Number of batches of events removed from the event queue and sent.", "operations"),
-            f.createIntCounter(BATCHES_REDISTRIBUTED,
+            factory.createIntCounter(BATCHES_REDISTRIBUTED,
                 "Number of batches of events removed from the event queue and resent.",
                 "operations", false),
-            f.createIntCounter(UNPROCESSED_TOKENS_ADDED_BY_PRIMARY,
+            factory.createIntCounter(UNPROCESSED_TOKENS_ADDED_BY_PRIMARY,
                 "Number of tokens added to the secondary's unprocessed token map by the primary (though a listener).",
                 "tokens"),
-            f.createIntCounter(UNPROCESSED_EVENTS_ADDED_BY_SECONDARY,
+            factory.createIntCounter(UNPROCESSED_EVENTS_ADDED_BY_SECONDARY,
                 "Number of events added to the secondary's unprocessed event map by the secondary.",
                 "events"),
-            f.createIntCounter(UNPROCESSED_EVENTS_REMOVED_BY_PRIMARY,
+            factory.createIntCounter(UNPROCESSED_EVENTS_REMOVED_BY_PRIMARY,
                 "Number of events removed from the secondary's unprocessed event map by the primary (though a listener).",
                 "events"),
-            f.createIntCounter(UNPROCESSED_TOKENS_REMOVED_BY_SECONDARY,
+            factory.createIntCounter(UNPROCESSED_TOKENS_REMOVED_BY_SECONDARY,
                 "Number of tokens removed from the secondary's unprocessed token map by the secondary.",
                 "tokens"),
-            f.createIntCounter(UNPROCESSED_EVENTS_REMOVED_BY_TIMEOUT,
+            factory.createIntCounter(UNPROCESSED_EVENTS_REMOVED_BY_TIMEOUT,
                 "Number of events removed from the secondary's unprocessed event map by a timeout.",
                 "events"),
-            f.createIntCounter(UNPROCESSED_TOKENS_REMOVED_BY_TIMEOUT,
+            factory.createIntCounter(UNPROCESSED_TOKENS_REMOVED_BY_TIMEOUT,
                 "Number of tokens removed from the secondary's unprocessed token map by a timeout.",
                 "tokens"),
-            f.createIntGauge(UNPROCESSED_EVENT_MAP_SIZE,
+            factory.createIntGauge(UNPROCESSED_EVENT_MAP_SIZE,
                 "Current number of entries in the secondary's unprocessed event map.", "events",
                 false),
-            f.createIntGauge(UNPROCESSED_TOKEN_MAP_SIZE,
+            factory.createIntGauge(UNPROCESSED_TOKEN_MAP_SIZE,
                 "Current number of entries in the secondary's unprocessed token map.", "tokens",
                 false),
-            f.createIntGauge(CONFLATION_INDEXES_MAP_SIZE,
+            factory.createIntGauge(CONFLATION_INDEXES_MAP_SIZE,
                 "Current number of entries in the conflation indexes map.", "events"),
-            f.createIntCounter(NOT_QUEUED_EVENTS, "Number of events not added to queue.", "events"),
-            f.createIntCounter(EVENTS_DROPPED_DUE_TO_PRIMARY_SENDER_NOT_RUNNING,
+            factory.createIntCounter(NOT_QUEUED_EVENTS, "Number of events not added to queue.",
+                "events"),
+            factory.createIntCounter(EVENTS_DROPPED_DUE_TO_PRIMARY_SENDER_NOT_RUNNING,
                 "Number of events dropped because the primary gateway sender is not running.",
                 "events"),
-            f.createIntCounter(EVENTS_FILTERED,
+            factory.createIntCounter(EVENTS_FILTERED,
                 "Number of events filtered through GatewayEventFilter.", "events"),
-            f.createIntCounter(LOAD_BALANCES_COMPLETED, "Number of load balances completed",
+            factory.createIntCounter(LOAD_BALANCES_COMPLETED, "Number of load balances completed",
                 "operations"),
-            f.createIntGauge(LOAD_BALANCES_IN_PROGRESS, "Number of load balances in progress",
+            factory.createIntGauge(LOAD_BALANCES_IN_PROGRESS, "Number of load balances in progress",
                 "operations"),
-            f.createLongCounter(LOAD_BALANCE_TIME, "Total time spent load balancing this sender",
+            factory.createLongCounter(LOAD_BALANCE_TIME,
+                "Total time spent load balancing this sender",
                 "nanoseconds"),
-            f.createIntCounter(SYNCHRONIZATION_EVENTS_ENQUEUED,
+            factory.createIntCounter(SYNCHRONIZATION_EVENTS_ENQUEUED,
                 "Number of synchronization events added to the event queue.", "operations"),
-            f.createIntCounter(SYNCHRONIZATION_EVENTS_PROVIDED,
+            factory.createIntCounter(SYNCHRONIZATION_EVENTS_PROVIDED,
                 "Number of synchronization events provided to other members.", "operations"),});
 
     // Initialize id fields
@@ -145,12 +161,19 @@ public class AsyncEventQueueStats extends GatewaySenderStats {
 
   /**
    * Constructor.
-   *
-   * @param f The <code>StatisticsFactory</code> which creates the <code>Statistics</code> instance
-   * @param asyncQueueId The id of the <code>AsyncEventQueue</code> used to generate the name of the
-   *        <code>Statistics</code>
+   * @param factory The <code>StatisticsFactory</code> which creates the <code>Statistics</code>
+   * instance
+   * @param asyncQueueId The id of the <code>AsyncEventQueue</code> used to generate the name of
+   * the
+   * <code>Statistics</code>
    */
-  public AsyncEventQueueStats(StatisticsFactory f, String asyncQueueId) {
-    super(f, asyncQueueId, type);
+  public AsyncEventQueueStats(StatisticsFactory factory, String asyncQueueId) {
+    super();
+    initializeStats(factory);
+    this.stats = factory.createAtomicStatistics(type, "asyncEventQueueStats-" + asyncQueueId);
+  }
+
+  public StatisticsType getType() {
+    return type;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/ParallelAsyncEventQueueImpl.java b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/ParallelAsyncEventQueueImpl.java
index 863cfdb..3c2cdba 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/ParallelAsyncEventQueueImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/ParallelAsyncEventQueueImpl.java
@@ -50,7 +50,7 @@ public class ParallelAsyncEventQueueImpl extends AbstractGatewaySender {
     if (!(this.cache instanceof CacheCreation)) {
       // this sender lies underneath the AsyncEventQueue. Need to have
       // AsyncEventQueueStats
-      this.statistics = new AsyncEventQueueStats(cache.getDistributedSystem(),
+      this.statistics = new AsyncEventQueueStats(cache.getDistributedSystem().getStatisticsFactory(),
           AsyncEventQueueImpl.getAsyncEventQueueIdFromSenderId(id));
     }
     this.isForInternalUse = true;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImpl.java b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImpl.java
index 05c2f77..453e532 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/asyncqueue/internal/SerialAsyncEventQueueImpl.java
@@ -52,7 +52,7 @@ public class SerialAsyncEventQueueImpl extends AbstractGatewaySender {
     if (!(this.cache instanceof CacheCreation)) {
       // this sender lies underneath the AsyncEventQueue. Need to have
       // AsyncEventQueueStats
-      this.statistics = new AsyncEventQueueStats(cache.getDistributedSystem(),
+      this.statistics = new AsyncEventQueueStats(cache.getDistributedSystem().getStatisticsFactory(),
           AsyncEventQueueImpl.getAsyncEventQueueIdFromSenderId(id));
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
deleted file mode 100644
index 20b00f1..0000000
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionStats.java
+++ /dev/null
@@ -1,3787 +0,0 @@
-/*
- * 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
- *
- * http://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.
- */
-package org.apache.geode.cache.client.internal;
-
-import org.apache.geode.StatisticDescriptor;
-import org.apache.geode.Statistics;
-import org.apache.geode.StatisticsFactory;
-import org.apache.geode.StatisticsType;
-import org.apache.geode.StatisticsTypeFactory;
-import org.apache.geode.distributed.internal.DistributionStats;
-import org.apache.geode.internal.cache.PoolStats;
-import org.apache.geode.internal.cache.tier.sockets.MessageStats;
-import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
-
-/**
- * Stats for a client to server {@link Connection}
- *
- * @since GemFire 5.7
- */
-public class ConnectionStats implements MessageStats {
-  // static fields
-  private static final StatisticsType type;
-  private static final StatisticsType sendType;
-
-  ///////////////////////////////////////////////////////////////////////
-  /*
-   * private static final int opInProgressId; private static final int opSendInProgressId; private
-   * static final int opSendFailedId; private static final int opSendId; private static final int
-   * opSendDurationId; private static final int opTimedOutId; private static final int opFailedId;
-   * private static final int opId; private static final int opDurationId;
-   */
-  ///////////////////////////////////////////////////////////////////////
-
-  private static final int getInProgressId;
-  private static final int getSendInProgressId;
-  private static final int getSendFailedId;
-  private static final int getSendId;
-  private static final int getSendDurationId;
-  private static final int getTimedOutId;
-  private static final int getFailedId;
-  private static final int getId;
-  private static final int getDurationId;
-
-  private static final int putInProgressId;
-  private static final int putSendInProgressId;
-  private static final int putSendFailedId;
-  private static final int putSendId;
-  private static final int putSendDurationId;
-  private static final int putTimedOutId;
-  private static final int putFailedId;
-  private static final int putId;
-  private static final int putDurationId;
-
-  private static final int destroyInProgressId;
-  private static final int destroySendInProgressId;
-  private static final int destroySendFailedId;
-  private static final int destroySendId;
-  private static final int destroySendDurationId;
-  private static final int destroyTimedOutId;
-  private static final int destroyFailedId;
-  private static final int destroyId;
-  private static final int destroyDurationId;
-
-  private static final int destroyRegionInProgressId;
-  private static final int destroyRegionSendInProgressId;
-  private static final int destroyRegionSendFailedId;
-  private static final int destroyRegionSendId;
-  private static final int destroyRegionSendDurationId;
-  private static final int destroyRegionTimedOutId;
-  private static final int destroyRegionFailedId;
-  private static final int destroyRegionId;
-  private static final int destroyRegionDurationId;
-
-  private static final int clearInProgressId;
-  private static final int clearSendInProgressId;
-  private static final int clearSendFailedId;
-  private static final int clearSendId;
-  private static final int clearSendDurationId;
-  private static final int clearTimedOutId;
-  private static final int clearFailedId;
-  private static final int clearId;
-  private static final int clearDurationId;
-
-  private static final int containsKeyInProgressId;
-  private static final int containsKeySendInProgressId;
-  private static final int containsKeySendFailedId;
-  private static final int containsKeySendId;
-  private static final int containsKeySendDurationId;
-  private static final int containsKeyTimedOutId;
-  private static final int containsKeyFailedId;
-  private static final int containsKeyId;
-  private static final int containsKeyDurationId;
-
-  private static final int keySetInProgressId;
-  private static final int keySetSendInProgressId;
-  private static final int keySetSendFailedId;
-  private static final int keySetSendId;
-  private static final int keySetSendDurationId;
-  private static final int keySetTimedOutId;
-  private static final int keySetFailedId;
-  private static final int keySetId;
-  private static final int keySetDurationId;
-
-  private static final int commitInProgressId;
-  private static final int commitSendInProgressId;
-  private static final int commitSendFailedId;
-  private static final int commitSendId;
-  private static final int commitSendDurationId;
-
-  private static final int commitFailedId;
-  private static final int commitTimedOutId;
-  private static final int commitId;
-  private static final int commitDurationId;
-
-  private static final int rollbackInProgressId;
-  private static final int rollbackSendInProgressId;
-  private static final int rollbackSendFailedId;
-  private static final int rollbackSendId;
-  private static final int rollbackSendDurationId;
-
-  private static final int rollbackFailedId;
-  private static final int rollbackTimedOutId;
-  private static final int rollbackId;
-  private static final int rollbackDurationId;
-
-  private static final int getEntryInProgressId;
-  private static final int getEntrySendInProgressId;
-  private static final int getEntrySendFailedId;
-  private static final int getEntrySendId;
-  private static final int getEntrySendDurationId;
-
-  private static final int getEntryFailedId;
-  private static final int getEntryTimedOutId;
-  private static final int getEntryId;
-  private static final int getEntryDurationId;
-
-  private static final int txSynchronizationInProgressId;
-  private static final int txSynchronizationSendInProgressId;
-  private static final int txSynchronizationSendFailedId;
-  private static final int txSynchronizationSendId;
-  private static final int txSynchronizationSendDurationId;
-
-  private static final int txSynchronizationFailedId;
-  private static final int txSynchronizationTimedOutId;
-  private static final int txSynchronizationId;
-  private static final int txSynchronizationDurationId;
-
-  private static final int txFailoverInProgressId;
-  private static final int txFailoverSendInProgressId;
-  private static final int txFailoverSendFailedId;
-  private static final int txFailoverSendId;
-  private static final int txFailoverSendDurationId;
-
-  private static final int txFailoverFailedId;
-  private static final int txFailoverTimedOutId;
-  private static final int txFailoverId;
-  private static final int txFailoverDurationId;
-
-  private static final int sizeInProgressId;
-  private static final int sizeSendInProgressId;
-  private static final int sizeSendFailedId;
-  private static final int sizeSendId;
-  private static final int sizeSendDurationId;
-
-  private static final int sizeFailedId;
-  private static final int sizeTimedOutId;
-  private static final int sizeId;
-  private static final int sizeDurationId;
-
-  private static final int invalidateInProgressId;
-  private static final int invalidateSendInProgressId;
-  private static final int invalidateSendFailedId;
-  private static final int invalidateSendId;
-  private static final int invalidateSendDurationId;
-
-  private static final int invalidateFailedId;
-  private static final int invalidateTimedOutId;
-  private static final int invalidateId;
-  private static final int invalidateDurationId;
-
-
-  private static final int registerInterestInProgressId;
-  private static final int registerInterestSendInProgressId;
-  private static final int registerInterestSendFailedId;
-  private static final int registerInterestSendId;
-  private static final int registerInterestSendDurationId;
-  private static final int registerInterestTimedOutId;
-  private static final int registerInterestFailedId;
-  private static final int registerInterestId;
-  private static final int registerInterestDurationId;
-
-  private static final int unregisterInterestInProgressId;
-  private static final int unregisterInterestSendInProgressId;
-  private static final int unregisterInterestSendFailedId;
-  private static final int unregisterInterestSendId;
-  private static final int unregisterInterestSendDurationId;
-  private static final int unregisterInterestTimedOutId;
-  private static final int unregisterInterestFailedId;
-  private static final int unregisterInterestId;
-  private static final int unregisterInterestDurationId;
-
-  private static final int queryInProgressId;
-  private static final int querySendInProgressId;
-  private static final int querySendFailedId;
-  private static final int querySendId;
-  private static final int querySendDurationId;
-  private static final int queryTimedOutId;
-  private static final int queryFailedId;
-  private static final int queryId;
-  private static final int queryDurationId;
-
-  private static final int createCQInProgressId;
-  private static final int createCQSendInProgressId;
-  private static final int createCQSendFailedId;
-  private static final int createCQSendId;
-  private static final int createCQSendDurationId;
-  private static final int createCQTimedOutId;
-  private static final int createCQFailedId;
-  private static final int createCQId;
-  private static final int createCQDurationId;
-  private static final int stopCQInProgressId;
-  private static final int stopCQSendInProgressId;
-  private static final int stopCQSendFailedId;
-  private static final int stopCQSendId;
-  private static final int stopCQSendDurationId;
-  private static final int stopCQTimedOutId;
-  private static final int stopCQFailedId;
-  private static final int stopCQId;
-  private static final int stopCQDurationId;
-  private static final int closeCQInProgressId;
-  private static final int closeCQSendInProgressId;
-  private static final int closeCQSendFailedId;
-  private static final int closeCQSendId;
-  private static final int closeCQSendDurationId;
-  private static final int closeCQTimedOutId;
-  private static final int closeCQFailedId;
-  private static final int closeCQId;
-  private static final int closeCQDurationId;
-  private static final int gatewayBatchInProgressId;
-  private static final int gatewayBatchSendInProgressId;
-  private static final int gatewayBatchSendFailedId;
-  private static final int gatewayBatchSendId;
-  private static final int gatewayBatchSendDurationId;
-  private static final int gatewayBatchTimedOutId;
-  private static final int gatewayBatchFailedId;
-  private static final int gatewayBatchId;
-  private static final int gatewayBatchDurationId;
-  private static final int getDurableCQsInProgressId;
-  private static final int getDurableCQsSendsInProgressId;
-  private static final int getDurableCQsSendFailedId;
-  private static final int getDurableCQsSendId;
-  private static final int getDurableCQsSendDurationId;
-  private static final int getDurableCQsTimedOutId;
-  private static final int getDurableCQsFailedId;
-  private static final int getDurableCQsId;
-  private static final int getDurableCQsDurationId;
-
-  private static final int readyForEventsInProgressId;
-  private static final int readyForEventsSendInProgressId;
-  private static final int readyForEventsSendFailedId;
-  private static final int readyForEventsSendId;
-  private static final int readyForEventsSendDurationId;
-  private static final int readyForEventsTimedOutId;
-  private static final int readyForEventsFailedId;
-  private static final int readyForEventsId;
-  private static final int readyForEventsDurationId;
-
-  private static final int makePrimaryInProgressId;
-  private static final int makePrimarySendInProgressId;
-  private static final int makePrimarySendFailedId;
-  private static final int makePrimarySendId;
-  private static final int makePrimarySendDurationId;
-  private static final int makePrimaryTimedOutId;
-  private static final int makePrimaryFailedId;
-  private static final int makePrimaryId;
-  private static final int makePrimaryDurationId;
-
-  private static final int closeConInProgressId;
-  private static final int closeConSendInProgressId;
-  private static final int closeConSendFailedId;
-  private static final int closeConSendId;
-  private static final int closeConSendDurationId;
-  private static final int closeConTimedOutId;
-  private static final int closeConFailedId;
-  private static final int closeConId;
-  private static final int closeConDurationId;
-
-  private static final int primaryAckInProgressId;
-  private static final int primaryAckSendInProgressId;
-  private static final int primaryAckSendFailedId;
-  private static final int primaryAckSendId;
-  private static final int primaryAckSendDurationId;
-  private static final int primaryAckTimedOutId;
-  private static final int primaryAckFailedId;
-  private static final int primaryAckId;
-  private static final int primaryAckDurationId;
-
-  private static final int pingInProgressId;
-  private static final int pingSendInProgressId;
-  private static final int pingSendFailedId;
-  private static final int pingSendId;
-  private static final int pingSendDurationId;
-  private static final int pingTimedOutId;
-  private static final int pingFailedId;
-  private static final int pingId;
-  private static final int pingDurationId;
-
-  private static final int registerInstantiatorsInProgressId;
-  private static final int registerInstantiatorsSendInProgressId;
-  private static final int registerInstantiatorsSendFailedId;
-  private static final int registerInstantiatorsSendId;
-  private static final int registerInstantiatorsSendDurationId;
-  private static final int registerInstantiatorsTimedOutId;
-  private static final int registerInstantiatorsFailedId;
-  private static final int registerInstantiatorsId;
-  private static final int registerInstantiatorsDurationId;
-
-  private static final int registerDataSerializersInProgressId;
-  private static final int registerDataSerializersSendInProgressId;
-  private static final int registerDataSerializersSendFailedId;
-  private static final int registerDataSerializersSendId;
-  private static final int registerDataSerializersSendDurationId;
-  private static final int registerDataSerializersTimedOutId;
-  private static final int registerDataSerializersFailedId;
-  private static final int registerDataSerializersId;
-  private static final int registerDataSerializersDurationId;
-
-  private static final int putAllInProgressId;
-  private static final int putAllSendInProgressId;
-  private static final int putAllSendFailedId;
-  private static final int putAllSendId;
-  private static final int putAllSendDurationId;
-  private static final int putAllTimedOutId;
-  private static final int putAllFailedId;
-  private static final int putAllId;
-  private static final int putAllDurationId;
-
-  private static final int removeAllInProgressId;
-  private static final int removeAllSendInProgressId;
-  private static final int removeAllSendFailedId;
-  private static final int removeAllSendId;
-  private static final int removeAllSendDurationId;
-  private static final int removeAllTimedOutId;
-  private static final int removeAllFailedId;
-  private static final int removeAllId;
-  private static final int removeAllDurationId;
-
-  private static final int getAllInProgressId;
-  private static final int getAllSendInProgressId;
-  private static final int getAllSendFailedId;
-  private static final int getAllSendId;
-  private static final int getAllSendDurationId;
-  private static final int getAllTimedOutId;
-  private static final int getAllFailedId;
-  private static final int getAllId;
-  private static final int getAllDurationId;
-
-  private static final int connectionsId;
-  private static final int connectsId;
-  private static final int disconnectsId;
-  private static final int messagesBeingReceivedId;
-  private static final int messageBytesBeingReceivedId;
-  private static final int receivedBytesId;
-  private static final int sentBytesId;
-
-  private static final int executeFunctionInProgressId;
-  private static final int executeFunctionSendInProgressId;
-  private static final int executeFunctionSendFailedId;
-  private static final int executeFunctionSendId;
-  private static final int executeFunctionSendDurationId;
-  private static final int executeFunctionTimedOutId;
-  private static final int executeFunctionFailedId;
-  private static final int executeFunctionId;
-  private static final int executeFunctionDurationId;
-
-  private static final int getClientPRMetadataInProgressId;
-  private static final int getClientPRMetadataSendInProgressId;
-  private static final int getClientPRMetadataSendFailedId;
-  private static final int getClientPRMetadataSendId;
-  private static final int getClientPRMetadataSendDurationId;
-  private static final int getClientPRMetadataTimedOutId;
-  private static final int getClientPRMetadataFailedId;
-  private static final int getClientPRMetadataId;
-  private static final int getClientPRMetadataDurationId;
-
-  private static final int getClientPartitionAttributesInProgressId;
-  private static final int getClientPartitionAttributesSendInProgressId;
-  private static final int getClientPartitionAttributesSendFailedId;
-  private static final int getClientPartitionAttributesSendId;
-  private static final int getClientPartitionAttributesSendDurationId;
-  private static final int getClientPartitionAttributesTimedOutId;
-  private static final int getClientPartitionAttributesFailedId;
-  private static final int getClientPartitionAttributesId;
-  private static final int getClientPartitionAttributesDurationId;
-
-  private static final int getPDXIdForTypeInProgressId;
-  private static final int getPDXIdForTypeSendInProgressId;
-  private static final int getPDXIdForTypeSendFailedId;
-  private static final int getPDXIdForTypeSendId;
-  private static final int getPDXIdForTypeSendDurationId;
-  private static final int getPDXIdForTypeTimedOutId;
-  private static final int getPDXIdForTypeFailedId;
-  private static final int getPDXIdForTypeId;
-  private static final int getPDXIdForTypeDurationId;
-
-  private static final int getPDXTypeByIdInProgressId;
-  private static final int getPDXTypeByIdSendInProgressId;
-  private static final int getPDXTypeByIdSendFailedId;
-  private static final int getPDXTypeByIdSendId;
-  private static final int getPDXTypeByIdSendDurationId;
-  private static final int getPDXTypeByIdTimedOutId;
-  private static final int getPDXTypeByIdFailedId;
-  private static final int getPDXTypeByIdId;
-  private static final int getPDXTypeByIdDurationId;
-
-  private static final int addPdxTypeInProgressId;
-  private static final int addPdxTypeSendInProgressId;
-  private static final int addPdxTypeSendFailedId;
-  private static final int addPdxTypeSendId;
-  private static final int addPdxTypeSendDurationId;
-  private static final int addPdxTypeTimedOutId;
-  private static final int addPdxTypeFailedId;
-  private static final int addPdxTypeId;
-  private static final int addPdxTypeDurationId;
-
-
-  // An array of all of the ids that represent operation statistics. This
-  // is used by the getOps method to aggregate the individual stats
-  // into a total value for all operations.
-  private static int[] opIds;
-
-  static {
-    try {
-      StatisticsTypeFactory f = StatisticsTypeFactoryImpl.singleton();
-      type = f.createType("ClientStats", "Statistics about client to server communication",
-          new StatisticDescriptor[] {
-              ///////////////////////////////////////////////////////////////////////
-              /*
-               * f.createIntGauge("opsInProgress", "Current number of ops being executed", "ops"),
-               * f.createIntCounter("ops", "Total number of ops completed successfully", "ops"),
-               * f.createIntCounter("opFailures", "Total number of op attempts that have failed",
-               * "ops"), f.createIntCounter("opTimeouts",
-               * "Total number of op attempts that have timed out", "ops"),
-               * f.createLongCounter("opTime",
-               * "Total amount of time, in nanoseconds spent doing ops", "nanoseconds"),
-               */
-              ///////////////////////////////////////////////////////////////////////
-              f.createIntGauge("getsInProgress", "Current number of gets being executed", "gets"),
-              f.createIntCounter("gets", "Total number of gets completed successfully", "gets"),
-              f.createIntCounter("getFailures", "Total number of get attempts that have failed",
-                  "gets"),
-              f.createIntCounter("getTimeouts", "Total number of get attempts that have timed out",
-                  "gets"),
-              f.createLongCounter("getTime",
-                  "Total amount of time, in nanoseconds spent doing gets", "nanoseconds"),
-              f.createIntGauge("putsInProgress", "Current number of puts being executed", "puts"),
-              f.createIntCounter("puts", "Total number of puts completed successfully", "puts"),
-              f.createIntCounter("putFailures", "Total number of put attempts that have failed",
-                  "puts"),
-              f.createIntCounter("putTimeouts", "Total number of put attempts that have timed out",
-                  "puts"),
-              f.createLongCounter("putTime",
-                  "Total amount of time, in nanoseconds spent doing puts", "nanoseconds"),
-              f.createIntGauge("destroysInProgress", "Current number of destroys being executed",
-                  "destroys"),
-              f.createIntCounter("destroys", "Total number of destroys completed successfully",
-                  "destroys"),
-              f.createIntCounter("destroyFailures",
-                  "Total number of destroy attempts that have failed", "destroys"),
-              f.createIntCounter("destroyTimeouts",
-                  "Total number of destroy attempts that have timed out", "destroys"),
-              f.createLongCounter("destroyTime",
-                  "Total amount of time, in nanoseconds spent doing destroys", "nanoseconds"),
-              f.createIntGauge("destroyRegionsInProgress",
-                  "Current number of destroyRegions being executed", "destroyRegions"),
-              f.createIntCounter("destroyRegions",
-                  "Total number of destroyRegions completed successfully", "destroyRegions"),
-              f.createIntCounter("destroyRegionFailures",
-                  "Total number of destroyRegion attempts that have failed", "destroyRegions"),
-              f.createIntCounter("destroyRegionTimeouts",
-                  "Total number of destroyRegion attempts that have timed out", "destroyRegions"),
-              f.createLongCounter("destroyRegionTime",
-                  "Total amount of time, in nanoseconds spent doing destroyRegions", "nanoseconds"),
-              f.createIntGauge("clearsInProgress", "Current number of clears being executed",
-                  "clears"),
-              f.createIntCounter("clears", "Total number of clears completed successfully",
-                  "clears"),
-              f.createIntCounter("clearFailures", "Total number of clear attempts that have failed",
-                  "clears"),
-              f.createIntCounter("clearTimeouts",
-                  "Total number of clear attempts that have timed out", "clears"),
-              f.createLongCounter("clearTime",
-                  "Total amount of time, in nanoseconds spent doing clears", "nanoseconds"),
-              f.createIntGauge("containsKeysInProgress",
-                  "Current number of containsKeys being executed", "containsKeys"),
-              f.createIntCounter("containsKeys",
-                  "Total number of containsKeys completed successfully", "containsKeys"),
-              f.createIntCounter("containsKeyFailures",
-                  "Total number of containsKey attempts that have failed", "containsKeys"),
-              f.createIntCounter("containsKeyTimeouts",
-                  "Total number of containsKey attempts that have timed out", "containsKeys"),
-              f.createLongCounter("containsKeyTime",
-                  "Total amount of time, in nanoseconds spent doing containsKeys", "nanoseconds"),
-              f.createIntGauge("keySetsInProgress", "Current number of keySets being executed",
-                  "keySets"),
-              f.createIntCounter("keySets", "Total number of keySets completed successfully",
-                  "keySets"),
-              f.createIntCounter("keySetFailures",
-                  "Total number of keySet attempts that have failed", "keySets"),
-              f.createIntCounter("keySetTimeouts",
-                  "Total number of keySet attempts that have timed out", "keySets"),
-              f.createLongCounter("keySetTime",
-                  "Total amount of time, in nanoseconds spent doing keySets", "nanoseconds"),
-
-              f.createIntGauge("commitsInProgress", "Current number of commits being executed",
-                  "commits"),
-              f.createIntCounter("commits", "Total number of commits completed successfully",
-                  "commits"),
-              f.createIntCounter("commitFailures",
-                  "Total number of commit attempts that have failed", "commits"),
-              f.createIntCounter("commitTimeouts",
-                  "Total number of commit attempts that have timed out", "commits"),
-              f.createLongCounter("commitTime",
-                  "Total amount of time, in nanoseconds spent doing commits", "nanoseconds"),
-
-              f.createIntGauge("rollbacksInProgress", "Current number of rollbacks being executed",
-                  "rollbacks"),
-              f.createIntCounter("rollbacks", "Total number of rollbacks completed successfully",
-                  "rollbacks"),
-              f.createIntCounter("rollbackFailures",
-                  "Total number of rollback attempts that have failed", "rollbacks"),
-              f.createIntCounter("rollbackTimeouts",
-                  "Total number of rollback attempts that have timed out", "rollbacks"),
-              f.createLongCounter("rollbackTime",
-                  "Total amount of time, in nanoseconds spent doing rollbacks", "nanoseconds"),
-
-              f.createIntGauge("getEntrysInProgress",
-                  "Current number of getEntry messages being executed", "messages"),
-              f.createIntCounter("getEntrys",
-                  "Total number of getEntry messages completed successfully", "messages"),
-              f.createIntCounter("getEntryFailures",
-                  "Total number of getEntry attempts that have failed", "attempts"),
-              f.createIntCounter("getEntryTimeouts",
-                  "Total number of getEntry attempts that have timed out", "attempts"),
-              f.createLongCounter("getEntryTime",
-                  "Total amount of time, in nanoseconds spent doing getEntry processings",
-                  "nanoseconds"),
-
-              f.createIntGauge("jtaSynchronizationsInProgress",
-                  "Current number of jtaSynchronizations being executed", "sizes"),
-              f.createIntCounter("jtaSynchronizations",
-                  "Total number of jtaSynchronizations completed successfully",
-                  "jtaSynchronizations"),
-              f.createIntCounter("jtaSynchronizationFailures",
-                  "Total number of jtaSynchronization attempts that have failed",
-                  "jtaSynchronizations"),
-              f.createIntCounter("jtaSynchronizationTimeouts",
-                  "Total number of jtaSynchronization attempts that have timed out",
-                  "jtaSynchronizations"),
-              f.createLongCounter("jtaSynchronizationTime",
-                  "Total amount of time, in nanoseconds spent doing jtaSynchronizations",
-                  "nanoseconds"),
-
-              f.createIntGauge("txFailoversInProgress",
-                  "Current number of txFailovers being executed", "txFailovers"),
-              f.createIntCounter("txFailovers",
-                  "Total number of txFailovers completed successfully", "txFailovers"),
-              f.createIntCounter("txFailoverFailures",
-                  "Total number of txFailover attempts that have failed", "txFailovers"),
-              f.createIntCounter("txFailoverTimeouts",
-                  "Total number of txFailover attempts that have timed out", "sizes"),
-              f.createLongCounter("txFailoverTime",
-                  "Total amount of time, in nanoseconds spent doing txFailovers", "nanoseconds"),
-
-              f.createIntGauge("sizesInProgress", "Current number of sizes being executed",
-                  "sizes"),
-              f.createIntCounter("sizes", "Total number of sizes completed successfully", "sizes"),
-              f.createIntCounter("sizeFailures", "Total number of size attempts that have failed",
-                  "sizes"),
-              f.createIntCounter("sizeTimeouts",
-                  "Total number of size attempts that have timed out", "sizes"),
-              f.createLongCounter("sizeTime",
-                  "Total amount of time, in nanoseconds spent doing sizes", "nanoseconds"),
-
-              f.createIntGauge("invalidatesInProgress",
-                  "Current number of invalidates being executed", "invalidates"),
-              f.createIntCounter("invalidates",
-                  "Total number of invalidates completed successfully", "invalidates"),
-              f.createIntCounter("invalidateFailures",
-                  "Total number of invalidate attempts that have failed", "invalidates"),
-              f.createIntCounter("invalidateTimeouts",
-                  "Total number of invalidate attempts that have timed out", "invalidates"),
-              f.createLongCounter("invalidateTime",
-                  "Total amount of time, in nanoseconds spent doing invalidates", "nanoseconds"),
-
-
-              f.createIntGauge("registerInterestsInProgress",
-                  "Current number of registerInterests being executed", "registerInterests"),
-              f.createIntCounter("registerInterests",
-                  "Total number of registerInterests completed successfully", "registerInterests"),
-              f.createIntCounter("registerInterestFailures",
-                  "Total number of registerInterest attempts that have failed",
-                  "registerInterests"),
-              f.createIntCounter("registerInterestTimeouts",
-                  "Total number of registerInterest attempts that have timed out",
-                  "registerInterests"),
-              f.createLongCounter("registerInterestTime",
-                  "Total amount of time, in nanoseconds spent doing registerInterests",
-                  "nanoseconds"),
-              f.createIntGauge("unregisterInterestsInProgress",
-                  "Current number of unregisterInterests being executed", "unregisterInterests"),
-              f.createIntCounter("unregisterInterests",
-                  "Total number of unregisterInterests completed successfully",
-                  "unregisterInterests"),
-              f.createIntCounter("unregisterInterestFailures",
-                  "Total number of unregisterInterest attempts that have failed",
-                  "unregisterInterests"),
-              f.createIntCounter("unregisterInterestTimeouts",
-                  "Total number of unregisterInterest attempts that have timed out",
-                  "unregisterInterests"),
-              f.createLongCounter("unregisterInterestTime",
-                  "Total amount of time, in nanoseconds spent doing unregisterInterests",
-                  "nanoseconds"),
-              f.createIntGauge("querysInProgress", "Current number of querys being executed",
-                  "querys"),
-              f.createIntCounter("querys", "Total number of querys completed successfully",
-                  "querys"),
-              f.createIntCounter("queryFailures", "Total number of query attempts that have failed",
-                  "querys"),
-              f.createIntCounter("queryTimeouts",
-                  "Total number of query attempts that have timed out", "querys"),
-              f.createLongCounter("queryTime",
-                  "Total amount of time, in nanoseconds spent doing querys", "nanoseconds"),
-              f.createIntGauge("createCQsInProgress", "Current number of createCQs being executed",
-                  "createCQs"),
-              f.createIntCounter("createCQs", "Total number of createCQs completed successfully",
-                  "createCQs"),
-              f.createIntCounter("createCQFailures",
-                  "Total number of createCQ attempts that have failed", "createCQs"),
-              f.createIntCounter("createCQTimeouts",
-                  "Total number of createCQ attempts that have timed out", "createCQs"),
-              f.createLongCounter("createCQTime",
-                  "Total amount of time, in nanoseconds spent doing createCQs", "nanoseconds"),
-              f.createIntGauge("stopCQsInProgress", "Current number of stopCQs being executed",
-                  "stopCQs"),
-              f.createIntCounter("stopCQs", "Total number of stopCQs completed successfully",
-                  "stopCQs"),
-              f.createIntCounter("stopCQFailures",
-                  "Total number of stopCQ attempts that have failed", "stopCQs"),
-              f.createIntCounter("stopCQTimeouts",
-                  "Total number of stopCQ attempts that have timed out", "stopCQs"),
-              f.createLongCounter("stopCQTime",
-                  "Total amount of time, in nanoseconds spent doing stopCQs", "nanoseconds"),
-              f.createIntGauge("closeCQsInProgress", "Current number of closeCQs being executed",
-                  "closeCQs"),
-              f.createIntCounter("closeCQs", "Total number of closeCQs completed successfully",
-                  "closeCQs"),
-              f.createIntCounter("closeCQFailures",
-                  "Total number of closeCQ attempts that have failed", "closeCQs"),
-              f.createIntCounter("closeCQTimeouts",
-                  "Total number of closeCQ attempts that have timed out", "closeCQs"),
-              f.createLongCounter("closeCQTime",
-                  "Total amount of time, in nanoseconds spent doing closeCQs", "nanoseconds"),
-              f.createIntGauge("gatewayBatchsInProgress",
-                  "Current number of gatewayBatchs being executed", "gatewayBatchs"),
-              f.createIntCounter("gatewayBatchs",
-                  "Total number of gatewayBatchs completed successfully", "gatewayBatchs"),
-              f.createIntCounter("gatewayBatchFailures",
-                  "Total number of gatewayBatch attempts that have failed", "gatewayBatchs"),
-              f.createIntCounter("gatewayBatchTimeouts",
-                  "Total number of gatewayBatch attempts that have timed out", "gatewayBatchs"),
-              f.createLongCounter("gatewayBatchTime",
-                  "Total amount of time, in nanoseconds spent doing gatewayBatchs", "nanoseconds"),
-              f.createIntGauge("getDurableCQsInProgress",
-                  "Current number of getDurableCQs being executed", "getDurableCQs"),
-              f.createIntCounter("getDurableCQs",
-                  "Total number of getDurableCQs completed successfully", "getDurableCQs"),
-              f.createIntCounter("getDurableCQsFailures",
-                  "Total number of getDurableCQs attempts that have failed", "getDurableCQs"),
-              f.createIntCounter("getDurableCQsTimeouts",
-                  "Total number of getDurableCQs attempts that have timed out", "getDurableCQs"),
-              f.createLongCounter("getDurableCQsTime",
-                  "Total amount of time, in nanoseconds spent doing getDurableCQs", "nanoseconds"),
-              f.createIntGauge("readyForEventsInProgress",
-                  "Current number of readyForEvents being executed", "readyForEvents"),
-              f.createIntCounter("readyForEvents",
-                  "Total number of readyForEvents completed successfully", "readyForEvents"),
-              f.createIntCounter("readyForEventsFailures",
-                  "Total number of readyForEvents attempts that have failed", "readyForEvents"),
-              f.createIntCounter("readyForEventsTimeouts",
-                  "Total number of readyForEvents attempts that have timed out", "readyForEvents"),
-              f.createLongCounter("readyForEventsTime",
-                  "Total amount of time, in nanoseconds spent doing readyForEvents", "nanoseconds"),
-              f.createIntGauge("makePrimarysInProgress",
-                  "Current number of makePrimarys being executed", "makePrimarys"),
-              f.createIntCounter("makePrimarys",
-                  "Total number of makePrimarys completed successfully", "makePrimarys"),
-              f.createIntCounter("makePrimaryFailures",
-                  "Total number of makePrimary attempts that have failed", "makePrimarys"),
-              f.createIntCounter("makePrimaryTimeouts",
-                  "Total number of makePrimary attempts that have timed out", "makePrimarys"),
-              f.createLongCounter("makePrimaryTime",
-                  "Total amount of time, in nanoseconds spent doing makePrimarys", "nanoseconds"),
-
-              f.createIntGauge("closeConsInProgress", "Current number of closeCons being executed",
-                  "closeCons"),
-              f.createIntCounter("closeCons", "Total number of closeCons completed successfully",
-                  "closeCons"),
-              f.createIntCounter("closeConFailures",
-                  "Total number of closeCon attempts that have failed", "closeCons"),
-              f.createIntCounter("closeConTimeouts",
-                  "Total number of closeCon attempts that have timed out", "closeCons"),
-              f.createLongCounter("closeConTime",
-                  "Total amount of time, in nanoseconds spent doing closeCons", "nanoseconds"),
-
-              f.createIntGauge("primaryAcksInProgress",
-                  "Current number of primaryAcks being executed", "primaryAcks"),
-              f.createIntCounter("primaryAcks",
-                  "Total number of primaryAcks completed successfully", "primaryAcks"),
-              f.createIntCounter("primaryAckFailures",
-                  "Total number of primaryAck attempts that have failed", "primaryAcks"),
-              f.createIntCounter("primaryAckTimeouts",
-                  "Total number of primaryAck attempts that have timed out", "primaryAcks"),
-              f.createLongCounter("primaryAckTime",
-                  "Total amount of time, in nanoseconds spent doing primaryAcks", "nanoseconds"),
-
-              f.createIntGauge("pingsInProgress", "Current number of pings being executed",
-                  "pings"),
-              f.createIntCounter("pings", "Total number of pings completed successfully", "pings"),
-              f.createIntCounter("pingFailures", "Total number of ping attempts that have failed",
-                  "pings"),
-              f.createIntCounter("pingTimeouts",
-                  "Total number of ping attempts that have timed out", "pings"),
-              f.createLongCounter("pingTime",
-                  "Total amount of time, in nanoseconds spent doing pings", "nanoseconds"),
-
-              f.createIntGauge("registerInstantiatorsInProgress",
-                  "Current number of registerInstantiators being executed",
-                  "registerInstantiators"),
-              f.createIntCounter("registerInstantiators",
-                  "Total number of registerInstantiators completed successfully",
-                  "registerInstantiators"),
-              f.createIntCounter("registerInstantiatorsFailures",
-                  "Total number of registerInstantiators attempts that have failed",
-                  "registerInstantiators"),
-              f.createIntCounter("registerInstantiatorsTimeouts",
-                  "Total number of registerInstantiators attempts that have timed out",
-                  "registerInstantiators"),
-              f.createLongCounter("registerInstantiatorsTime",
-                  "Total amount of time, in nanoseconds spent doing registerInstantiators",
-                  "nanoseconds"),
-
-              f.createIntGauge("registerDataSerializersInProgress",
-                  "Current number of registerDataSerializers being executed",
-                  "registerDataSerializers"),
-              f.createIntCounter("registerDataSerializers",
-                  "Total number of registerDataSerializers completed successfully",
-                  "registerDataSerializers"),
-              f.createIntCounter("registerDataSerializersFailures",
-                  "Total number of registerDataSerializers attempts that have failed",
-                  "registerDataSerializers"),
-              f.createIntCounter("registerDataSerializersTimeouts",
-                  "Total number of registerDataSerializers attempts that have timed out",
-                  "registerDataSerializers"),
-              f.createLongCounter("registerDataSerializersTime",
-                  "Total amount of time, in nanoseconds spent doing registerDataSerializers",
-                  "nanoseconds"),
-
-              f.createIntGauge("connections", "Current number of connections", "connections"),
-              f.createIntCounter("connects", "Total number of times a connection has been created.",
-                  "connects"),
-              f.createIntCounter("disconnects",
-                  "Total number of times a connection has been destroyed.", "disconnects"),
-              f.createIntGauge("putAllsInProgress", "Current number of putAlls being executed",
-                  "putAlls"),
-              f.createIntCounter("putAlls", "Total number of putAlls completed successfully",
-                  "putAlls"),
-              f.createIntCounter("putAllFailures",
-                  "Total number of putAll attempts that have failed", "putAlls"),
-              f.createIntCounter("putAllTimeouts",
-                  "Total number of putAll attempts that have timed out", "putAlls"),
-              f.createLongCounter("putAllTime",
-                  "Total amount of time, in nanoseconds spent doing putAlls", "nanoseconds"),
-              f.createIntGauge("removeAllsInProgress",
-                  "Current number of removeAlls being executed", "removeAlls"),
-              f.createIntCounter("removeAlls", "Total number of removeAlls completed successfully",
-                  "removeAlls"),
-              f.createIntCounter("removeAllFailures",
-                  "Total number of removeAll attempts that have failed", "removeAlls"),
-              f.createIntCounter("removeAllTimeouts",
-                  "Total number of removeAll attempts that have timed out", "removeAlls"),
-              f.createLongCounter("removeAllTime",
-                  "Total amount of time, in nanoseconds spent doing removeAlls", "nanoseconds"),
-              f.createIntGauge("getAllsInProgress", "Current number of getAlls being executed",
-                  "getAlls"),
-              f.createIntCounter("getAlls", "Total number of getAlls completed successfully",
-                  "getAlls"),
-              f.createIntCounter("getAllFailures",
-                  "Total number of getAll attempts that have failed", "getAlls"),
-              f.createIntCounter("getAllTimeouts",
-                  "Total number of getAll attempts that have timed out", "getAlls"),
-              f.createLongCounter("getAllTime",
-                  "Total amount of time, in nanoseconds spent doing getAlls", "nanoseconds"),
-              f.createLongCounter("receivedBytes",
-                  "Total number of bytes received (as responses) from server over a client-to-server connection.",
-                  "bytes"),
-              f.createLongCounter("sentBytes",
-                  "Total number of bytes sent to server over a client-to-server connection.",
-                  "bytes"),
-              f.createIntGauge("messagesBeingReceived",
-                  "Current number of message being received off the network or being processed after reception over a client-to-server connection.",
-                  "messages"),
-              f.createLongGauge("messageBytesBeingReceived",
-                  "Current number of bytes consumed by messages being received or processed over a client-to-server connection.",
-                  "bytes"),
-
-              f.createIntGauge("executeFunctionsInProgress",
-                  "Current number of Functions being executed", "executeFunctions"),
-              f.createIntCounter("executeFunctions",
-                  "Total number of Functions completed successfully", "executeFunctions"),
-              f.createIntCounter("executeFunctionFailures",
-                  "Total number of Function attempts that have failed", "executeFunctions"),
-              f.createIntCounter("executeFunctionTimeouts",
-                  "Total number of Function attempts that have timed out", "executeFunctions"),
-              f.createLongCounter("executeFunctionTime",
-                  "Total amount of time, in nanoseconds spent doing Functions", "nanoseconds"),
-
-              f.createIntGauge("asyncExecuteFunctionsInProgress",
-                  "Current number of Functions being executed asynchronously",
-                  "asyncExecuteFunctions"),
-              f.createIntCounter("asyncExecuteFunctions",
-                  "Total number of asynchronous Functions completed successfully",
-                  "asyncExecuteFunctions"),
-              f.createIntCounter("asyncExecuteFunctionFailures",
-                  "Total number of asynchronous Function attempts that have failed",
-                  "asyncExecuteFunctions"),
-              f.createIntCounter("asyncExecuteFunctionTimeouts",
-                  "Total number of asynchronous Function attempts that have timed out",
-                  "asyncExecuteFunctions"),
-              f.createLongCounter("asyncExecuteFunctionTime",
-                  "Total amount of time, in nanoseconds spent doing asynchronous Functions",
-                  "nanoseconds"),
-
-              f.createIntGauge("getClientPRMetadataInProgress",
-                  "Current number of getClientPRMetadata operations being executed",
-                  "getClientPRMetadata"),
-              f.createIntCounter("getClientPRMetadataFailures",
-                  "Total number of getClientPRMetadata operation attempts that have failed",
-                  "getClientPRMetadata"),
-              f.createIntCounter("getClientPRMetadataSuccessful",
-                  "Total number of getClientPRMetadata operations completed successfully",
-                  "getClientPRMetadata"),
-              f.createIntCounter("getClientPRMetadataTimeouts",
-                  "Total number of getClientPRMetadata operation attempts that have timed out",
-                  "getClientPRMetadata"),
-              f.createLongCounter("getClientPRMetadataTime",
-                  "Total amount of time, in nanoseconds spent doing getClientPRMetadata successfully/unsuccessfully",
-                  "nanoseconds"),
-
-              f.createIntGauge("getClientPartitionAttributesInProgress",
-                  "Current number of getClientPartitionAttributes operations being executed",
-                  "getClientPartitionAttributes"),
-              f.createIntCounter("getClientPartitionAttributesFailures",
-                  "Total number of getClientPartitionAttributes operation attempts that have failed",
-                  "getClientPartitionAttributes"),
-              f.createIntCounter("getClientPartitionAttributesSuccessful",
-                  "Total number of getClientPartitionAttributes operations completed successfully",
-                  "getClientPartitionAttributes"),
-              f.createIntCounter("getClientPartitionAttributesTimeouts",
-                  "Total number of getClientPartitionAttributes operation attempts that have timed out",
-                  "getClientPartitionAttributes"),
-              f.createLongCounter("getClientPartitionAttributesTime",
-                  "Total amount of time, in nanoseconds spent doing getClientPartitionAttributes successfully/unsuccessfully.",
-                  "nanoseconds"),
-
-              f.createIntGauge("getPDXTypeByIdInProgress",
-                  "Current number of getPDXTypeById operations being executed", "getPDXTypeById"),
-              f.createIntCounter("getPDXTypeByIdFailures",
-                  "Total number of getPDXTypeById operation attempts that have failed",
-                  "getPDXTypeById"),
-              f.createIntCounter("getPDXTypeByIdSuccessful",
-                  "Total number of getPDXTypeById operations completed successfully",
-                  "getPDXTypeById"),
-              f.createIntCounter("getPDXTypeByIdTimeouts",
-                  "Total number of getPDXTypeById operation attempts that have timed out",
-                  "getPDXTypeById"),
-              f.createLongCounter("getPDXTypeByIdTime",
-                  "Total amount of time, in nanoseconds spent doing getPDXTypeById successfully/unsuccessfully.",
-                  "nanoseconds"),
-
-              f.createIntGauge("getPDXIdForTypeInProgress",
-                  "Current number of getPDXIdForType operations being executed", "getPDXIdForType"),
-              f.createIntCounter("getPDXIdForTypeFailures",
-                  "Total number of getPDXIdForType operation attempts that have failed",
-                  "getPDXIdForType"),
-              f.createIntCounter("getPDXIdForTypeSuccessful",
-                  "Total number of getPDXIdForType operations completed successfully",
-                  "getPDXIdForType"),
-              f.createIntCounter("getPDXIdForTypeTimeouts",
-                  "Total number of getPDXIdForType operation attempts that have timed out",
-                  "getPDXIdForType"),
-              f.createLongCounter("getPDXIdForTypeTime",
-                  "Total amount of time, in nanoseconds spent doing getPDXIdForType successfully/unsuccessfully.",
-                  "nanoseconds"),
-
-              f.createIntGauge("addPdxTypeInProgress",
-                  "Current number of addPdxType operations being executed", "addPdxType"),
-              f.createIntCounter("addPdxTypeFailures",
-                  "Total number of addPdxType operation attempts that have failed", "addPdxType"),
-              f.createIntCounter("addPdxTypeSuccessful",
-                  "Total number of addPdxType operations completed successfully", "addPdxType"),
-              f.createIntCounter("addPdxTypeTimeouts",
-                  "Total number of addPdxType operation attempts that have timed out",
-                  "addPdxType"),
-              f.createLongCounter("addPdxTypeTime",
-                  "Total amount of time, in nanoseconds spent doing addPdxType successfully/unsuccessfully.",
-                  "nanoseconds"),});
-
-      sendType = f.createType("ClientSendStats", "Statistics about client to server communication",
-          new StatisticDescriptor[] {
-              ///////////////////////////////////////////////////////////////////////
-              /*
-               * f.createIntGauge("opSendsInProgress", "Current number of op sends being executed",
-               * "sends"), f.createIntCounter("opSends",
-               * "Total number of op sends that have completed successfully", "sends"),
-               * f.createIntCounter("opSendFailures", "Total number of op sends that have failed",
-               * "sends"), f.createLongCounter("opSendTime",
-               * "Total amount of time, in nanoseconds spent doing op sends", "nanoseconds"),
-               */
-              ///////////////////////////////////////////////////////////////////////
-              f.createIntGauge("getSendsInProgress", "Current number of get sends being executed",
-                  "sends"),
-              f.createIntCounter("getSends",
-                  "Total number of get sends that have completed successfully", "sends"),
-              f.createIntCounter("getSendFailures", "Total number of get sends that have failed",
-                  "sends"),
-              f.createLongCounter("getSendTime",
-                  "Total amount of time, in nanoseconds spent doing get sends", "nanoseconds"),
-              f.createIntGauge("putSendsInProgress", "Current number of put sends being executed",
-                  "sends"),
-              f.createIntCounter("putSends",
-                  "Total number of put sends that have completed successfully", "sends"),
-              f.createIntCounter("putSendFailures", "Total number of put sends that have failed",
-                  "sends"),
-              f.createLongCounter("putSendTime",
-                  "Total amount of time, in nanoseconds spent doing put sends", "nanoseconds"),
-              f.createIntGauge("destroySendsInProgress",
-                  "Current number of destroy sends being executed", "sends"),
-              f.createIntCounter("destroySends",
-                  "Total number of destroy sends that have completed successfully", "sends"),
-              f.createIntCounter("destroySendFailures",
-                  "Total number of destroy sends that have failed", "sends"),
-              f.createLongCounter("destroySendTime",
-                  "Total amount of time, in nanoseconds spent doing destroy sends", "nanoseconds"),
-              f.createIntGauge("destroyRegionSendsInProgress",
-                  "Current number of destroyRegion sends being executed", "sends"),
-              f.createIntCounter("destroyRegionSends",
-                  "Total number of destroyRegion sends that have completed successfully", "sends"),
-              f.createIntCounter("destroyRegionSendFailures",
-                  "Total number of destroyRegion sends that have failed", "sends"),
-              f.createLongCounter("destroyRegionSendTime",
-                  "Total amount of time, in nanoseconds spent doing destroyRegion sends",
-                  "nanoseconds"),
-              f.createIntGauge("clearSendsInProgress",
-                  "Current number of clear sends being executed", "sends"),
-              f.createIntCounter("clearSends",
-                  "Total number of clear sends that have completed successfully", "sends"),
-              f.createIntCounter("clearSendFailures",
-                  "Total number of clear sends that have failed", "sends"),
-              f.createLongCounter("clearSendTime",
-                  "Total amount of time, in nanoseconds spent doing clear sends", "nanoseconds"),
-              f.createIntGauge("containsKeySendsInProgress",
-                  "Current number of containsKey sends being executed", "sends"),
-              f.createIntCounter("containsKeySends",
-                  "Total number of containsKey sends that have completed successfully", "sends"),
-              f.createIntCounter("containsKeySendFailures",
-                  "Total number of containsKey sends that have failed", "sends"),
-              f.createLongCounter("containsKeySendTime",
-                  "Total amount of time, in nanoseconds spent doing containsKey sends",
-                  "nanoseconds"),
-              f.createIntGauge("keySetSendsInProgress",
-                  "Current number of keySet sends being executed", "sends"),
-              f.createIntCounter("keySetSends",
-                  "Total number of keySet sends that have completed successfully", "sends"),
-              f.createIntCounter("keySetSendFailures",
-                  "Total number of keySet sends that have failed", "sends"),
-              f.createLongCounter("keySetSendTime",
-                  "Total amount of time, in nanoseconds spent doing keySet sends", "nanoseconds"),
-
-              f.createIntGauge("commitSendsInProgress",
-                  "Current number of commit sends being executed", "sends"),
-              f.createIntCounter("commitSendFailures",
-                  "Total number of commit sends that have failed", "sends"),
-              f.createIntCounter("commitSends", "Total number of commit sends that have failed",
-                  "sends"),
-              f.createLongCounter("commitSendTime",
-                  "Total amount of time, in nanoseconds spent doing commits", "nanoseconds"),
-              f.createIntGauge("rollbackSendsInProgress",
-                  "Current number of rollback sends being executed", "sends"),
-              f.createIntCounter("rollbackSendFailures",
-                  "Total number of rollback sends that have failed", "sends"),
-              f.createIntCounter("rollbackSends", "Total number of rollback sends that have failed",
-                  "sends"),
-              f.createLongCounter("rollbackSendTime",
-                  "Total amount of time, in nanoseconds spent doing rollbacks", "nanoseconds"),
-              f.createIntGauge("getEntrySendsInProgress",
-                  "Current number of getEntry sends being executed", "sends"),
-              f.createIntCounter("getEntrySendFailures",
-                  "Total number of getEntry sends that have failed", "sends"),
-              f.createIntCounter("getEntrySends", "Total number of getEntry sends that have failed",
-                  "sends"),
-              f.createLongCounter("getEntrySendTime",
-                  "Total amount of time, in nanoseconds spent sending getEntry messages",
-                  "nanoseconds"),
-              f.createIntGauge("jtaSynchronizationSendsInProgress",
-                  "Current number of jtaSynchronization sends being executed", "sends"),
-              f.createIntCounter("jtaSynchronizationSendFailures",
-                  "Total number of jtaSynchronization sends that have failed", "sends"),
-              f.createIntCounter("jtaSynchronizationSends",
-                  "Total number of jtaSynchronization sends that have failed", "sends"),
-              f.createLongCounter("jtaSynchronizationSendTime",
-                  "Total amount of time, in nanoseconds spent doing jtaSynchronizations",
-                  "nanoseconds"),
-              f.createIntGauge("txFailoverSendsInProgress",
-                  "Current number of txFailover sends being executed", "sends"),
-              f.createIntCounter("txFailoverSendFailures",
-                  "Total number of txFailover sends that have failed", "sends"),
-              f.createIntCounter("txFailoverSends",
-                  "Total number of txFailover sends that have failed", "sends"),
-              f.createLongCounter("txFailoverSendTime",
-                  "Total amount of time, in nanoseconds spent doing txFailovers", "nanoseconds"),
-              f.createIntGauge("sizeSendsInProgress", "Current number of size sends being executed",
-                  "sends"),
-              f.createIntCounter("sizeSendFailures", "Total number of size sends that have failed",
-                  "sends"),
-              f.createIntCounter("sizeSends", "Total number of size sends that have failed",
-                  "sends"),
-              f.createLongCounter("sizeSendTime",
-                  "Total amount of time, in nanoseconds spent doing sizes", "nanoseconds"),
-              f.createIntGauge("invalidateSendsInProgress",
-                  "Current number of invalidate sends being executed", "sends"),
-              f.createIntCounter("invalidateSendFailures",
-                  "Total number of invalidate sends that have failed", "sends"),
-              f.createIntCounter("invalidateSends",
-                  "Total number of invalidate sends that have failed", "sends"),
-              f.createLongCounter("invalidateSendTime",
-                  "Total amount of time, in nanoseconds spent doing invalidates", "nanoseconds"),
-              f.createIntGauge("registerInterestSendsInProgress",
-                  "Current number of registerInterest sends being executed", "sends"),
-              f.createIntCounter("registerInterestSends",
-                  "Total number of registerInterest sends that have completed successfully",
-                  "sends"),
-              f.createIntCounter("registerInterestSendFailures",
-                  "Total number of registerInterest sends that have failed", "sends"),
-              f.createLongCounter("registerInterestSendTime",
-                  "Total amount of time, in nanoseconds spent doing registerInterest sends",
-                  "nanoseconds"),
-              f.createIntGauge("unregisterInterestSendsInProgress",
-                  "Current number of unregisterInterest sends being executed", "sends"),
-              f.createIntCounter("unregisterInterestSends",
-                  "Total number of unregisterInterest sends that have completed successfully",
-                  "sends"),
-              f.createIntCounter("unregisterInterestSendFailures",
-                  "Total number of unregisterInterest sends that have failed", "sends"),
-              f.createLongCounter("unregisterInterestSendTime",
-                  "Total amount of time, in nanoseconds spent doing unregisterInterest sends",
-                  "nanoseconds"),
-              f.createIntGauge("querySendsInProgress",
-                  "Current number of query sends being executed", "sends"),
-              f.createIntCounter("querySends",
-                  "Total number of query sends that have completed successfully", "sends"),
-              f.createIntCounter("querySendFailures",
-                  "Total number of query sends that have failed", "sends"),
-              f.createLongCounter("querySendTime",
-                  "Total amount of time, in nanoseconds spent doing query sends", "nanoseconds"),
-              f.createIntGauge("createCQSendsInProgress",
-                  "Current number of createCQ sends being executed", "sends"),
-              f.createIntCounter("createCQSends",
-                  "Total number of createCQ sends that have completed successfully", "sends"),
-              f.createIntCounter("createCQSendFailures",
-                  "Total number of createCQ sends that have failed", "sends"),
-              f.createLongCounter("createCQSendTime",
-                  "Total amount of time, in nanoseconds spent doing createCQ sends", "nanoseconds"),
-              f.createIntGauge("stopCQSendsInProgress",
-                  "Current number of stopCQ sends being executed", "sends"),
-              f.createIntCounter("stopCQSends",
-                  "Total number of stopCQ sends that have completed successfully", "sends"),
-              f.createIntCounter("stopCQSendFailures",
-                  "Total number of stopCQ sends that have failed", "sends"),
-              f.createLongCounter("stopCQSendTime",
-                  "Total amount of time, in nanoseconds spent doing stopCQ sends", "nanoseconds"),
-              f.createIntGauge("closeCQSendsInProgress",
-                  "Current number of closeCQ sends being executed", "sends"),
-              f.createIntCounter("closeCQSends",
-                  "Total number of closeCQ sends that have completed successfully", "sends"),
-              f.createIntCounter("closeCQSendFailures",
-                  "Total number of closeCQ sends that have failed", "sends"),
-              f.createLongCounter("closeCQSendTime",
-                  "Total amount of time, in nanoseconds spent doing closeCQ sends", "nanoseconds"),
-              f.createIntGauge("gatewayBatchSendsInProgress",
-                  "Current number of gatewayBatch sends being executed", "sends"),
-              f.createIntCounter("gatewayBatchSends",
-                  "Total number of gatewayBatch sends that have completed successfully", "sends"),
-              f.createIntCounter("gatewayBatchSendFailures",
-                  "Total number of gatewayBatch sends that have failed", "sends"),
-              f.createLongCounter("gatewayBatchSendTime",
-                  "Total amount of time, in nanoseconds spent doing gatewayBatch sends",
-                  "nanoseconds"),
-              f.createIntGauge("getDurableCQsSendsInProgressId",
-                  "Current number of getDurableCQs sends being executed", "sends"),
-              f.createIntCounter("getDurableCQsSends",
-                  "Total number of getDurableCQs sends that have completed successfully", "sends"),
-              f.createIntCounter("getDurableCQsSendFailures",
-                  "Total number of getDurableCQs sends that have failed", "sends"),
-              f.createLongCounter("getDurableCQsSendTime",
-                  "Total amount of time, in nanoseconds spent doing getDurableCQs sends",
-                  "nanoseconds"),
-              f.createIntGauge("readyForEventsSendsInProgress",
-                  "Current number of readyForEvents sends being executed", "sends"),
-              f.createIntCounter("readyForEventsSends",
-                  "Total number of readyForEvents sends that have completed successfully", "sends"),
-              f.createIntCounter("readyForEventsSendFailures",
-                  "Total number of readyForEvents sends that have failed", "sends"),
-              f.createLongCounter("readyForEventsSendTime",
-                  "Total amount of time, in nanoseconds spent doing readyForEvents sends",
-                  "nanoseconds"),
-              f.createIntGauge("makePrimarySendsInProgress",
-                  "Current number of makePrimary sends being executed", "sends"),
-              f.createIntCounter("makePrimarySends",
-                  "Total number of makePrimary sends that have completed successfully", "sends"),
-              f.createIntCounter("makePrimarySendFailures",
-                  "Total number of makePrimary sends that have failed", "sends"),
-              f.createLongCounter("makePrimarySendTime",
-                  "Total amount of time, in nanoseconds spent doing makePrimary sends",
-                  "nanoseconds"),
-              f.createIntGauge("closeConSendsInProgress",
-                  "Current number of closeCon sends being executed", "sends"),
-              f.createIntCounter("closeConSends",
-                  "Total number of closeCon sends that have completed successfully", "sends"),
-              f.createIntCounter("closeConSendFailures",
-                  "Total number of closeCon sends that have failed", "sends"),
-              f.createLongCounter("closeConSendTime",
-                  "Total amount of time, in nanoseconds spent doing closeCon sends", "nanoseconds"),
-              f.createIntGauge("primaryAckSendsInProgress",
-                  "Current number of primaryAck sends being executed", "sends"),
-              f.createIntCounter("primaryAckSends",
-                  "Total number of primaryAck sends that have completed successfully", "sends"),
-              f.createIntCounter("primaryAckSendFailures",
-                  "Total number of primaryAck sends that have failed", "sends"),
-              f.createLongCounter("primaryAckSendTime",
-                  "Total amount of time, in nanoseconds spent doing primaryAck sends",
-                  "nanoseconds"),
-              f.createIntGauge("pingSendsInProgress", "Current number of ping sends being executed",
-                  "sends"),
-              f.createIntCounter("pingSends",
-                  "Total number of ping sends that have completed successfully", "sends"),
-              f.createIntCounter("pingSendFailures", "Total number of ping sends that have failed",
-                  "sends"),
-              f.createLongCounter("pingSendTime",
-                  "Total amount of time, in nanoseconds spent doing ping sends", "nanoseconds"),
-              f.createIntGauge("registerInstantiatorsSendsInProgress",
-                  "Current number of registerInstantiators sends being executed", "sends"),
-              f.createIntCounter("registerInstantiatorsSends",
-                  "Total number of registerInstantiators sends that have completed successfully",
-                  "sends"),
-              f.createIntCounter("registerInstantiatorsSendFailures",
-                  "Total number of registerInstantiators sends that have failed", "sends"),
-              f.createLongCounter("registerInstantiatorsSendTime",
-                  "Total amount of time, in nanoseconds spent doing registerInstantiators sends",
-                  "nanoseconds"),
-              f.createIntGauge("registerDataSerializersSendInProgress",
-                  "Current number of registerDataSerializers sends being executed", "sends"),
-              f.createIntCounter("registerDataSerializersSends",
-                  "Total number of registerDataSerializers sends that have completed successfully",
-                  "sends"),
-              f.createIntCounter("registerDataSerializersSendFailures",
-                  "Total number of registerDataSerializers sends that have failed", "sends"),
-              f.createLongCounter("registerDataSerializersSendTime",
-                  "Total amount of time, in nanoseconds spent doing registerDataSerializers sends",
-                  "nanoseconds"),
-              f.createIntGauge("putAllSendsInProgress",
-                  "Current number of putAll sends being executed", "sends"),
-              f.createIntCounter("putAllSends",
-                  "Total number of putAll sends that have completed successfully", "sends"),
-              f.createIntCounter("putAllSendFailures",
-                  "Total number of putAll sends that have failed", "sends"),
-              f.createLongCounter("putAllSendTime",
-                  "Total amount of time, in nanoseconds spent doing putAll sends", "nanoseconds"),
-              f.createIntGauge("removeAllSendsInProgress",
-                  "Current number of removeAll sends being executed", "sends"),
-              f.createIntCounter("removeAllSends",
-                  "Total number of removeAll sends that have completed successfully", "sends"),
-              f.createIntCounter("removeAllSendFailures",
-                  "Total number of removeAll sends that have failed", "sends"),
-              f.createLongCounter("removeAllSendTime",
-                  "Total amount of time, in nanoseconds spent doing removeAll sends",
-                  "nanoseconds"),
-              f.createIntGauge("getAllSendsInProgress",
-                  "Current number of getAll sends being executed", "sends"),
-              f.createIntCounter("getAllSends",
-                  "Total number of getAll sends that have completed successfully", "sends"),
-              f.createIntCounter("getAllSendFailures",
-                  "Total number of getAll sends that have failed", "sends"),
-              f.createLongCounter("getAllSendTime",
-                  "Total amount of time, in nanoseconds spent doing getAll sends", "nanoseconds"),
-              f.createIntGauge("executeFunctionSendsInProgress",
-                  "Current number of Function sends being executed", "sends"),
-              f.createIntCounter("executeFunctionSends",
-                  "Total number of Function sends that have completed successfully", "sends"),
-              f.createIntCounter("executeFunctionSendFailures",
-                  "Total number of Function sends that have failed", "sends"),
-              f.createLongCounter("executeFunctionSendTime",
-                  "Total amount of time, in nanoseconds spent doing Function sends", "nanoseconds"),
-              f.createIntGauge("asyncExecuteFunctionSendsInProgress",
-                  "Current number of Function sends being executed asynchronously", "sends"),
-              f.createIntCounter("asyncExecuteFunctionSends",
-                  "Total number of asynchronous Function sends that have completed successfully",
-                  "sends"),
-              f.createIntCounter("asyncExecuteFunctionSendFailures",
-                  "Total number of asynchronous Function sends that have failed", "sends"),
-              f.createLongCounter("asyncExecuteFunctionSendTime",
-                  "Total amount of time, in nanoseconds spent doing asynchronous Function sends",
-                  "nanoseconds"),
-              f.createIntGauge("getClientPRMetadataSendsInProgress",
-                  "Current number of getClientPRMetadata operation's request messages being send from the client to server",
-                  "sends"),
-              f.createIntCounter("getClientPRMetadataSendFailures",
-                  "Total number of getClientPRMetadata operation's request messages not sent successfully from the client to server",
-                  "sends"),
-              f.createIntCounter("getClientPRMetadataSendsSuccessful",
-                  "Total number of getClientPRMetadata operation's request messages sent successfully from the client to server",
-                  "sends"),
-              f.createLongCounter("getClientPRMetadataSendTime",
-                  "Total amount of time, in nanoseconds spent sending getClientPRMetadata operation's request messages successfully/unsuccessfully from the client to server",
-                  "nanoseconds"),
-              f.createIntGauge("getClientPartitionAttributesSendsInProgress",
-                  "Current number of getClientPartitionAttributes operation's request messages being send from the client to server",
-                  "sends"),
-              f.createIntCounter("getClientPartitionAttributesSendFailures",
-                  "Total number of getClientPartitionAttributes operation's request messages not sent successfully from the client to server",
-                  "sends"),
-              f.createIntCounter("getClientPartitionAttributesSendsSuccessful",
-                  "Total number of getClientPartitionAttributes operation's request messages sent successfully from the client to server",
-                  "sends"),
-              f.createLongCounter("getClientPartitionAttributesSendTime",
-                  "Total amount of time, in nanoseconds spent sending getClientPartitionAttributes operation's request messages successfully/unsuccessfully from the client to server",
-                  "nanoseconds"),
-              f.createIntGauge("getPDXTypeByIdSendsInProgress",
-                  "Current number of getPDXTypeById operation's request messages being send from the client to server",
-                  "sends"),
-              f.createIntCounter("getPDXTypeByIdSendFailures",
-                  "Total number of getPDXTypeById operation's request messages not sent successfully from the client to server",
-                  "sends"),
-              f.createIntCounter("getPDXTypeByIdSendsSuccessful",
-                  "Total number of getPDXTypeById operation's request messages sent successfully from the client to server",
-                  "sends"),
-              f.createLongCounter("getPDXTypeByIdSendTime",
-                  "Total amount of time, in nanoseconds spent sending getPDXTypeById operation's request messages successfully/unsuccessfully from the client to server",
-                  "nanoseconds"),
-              f.createIntGauge("getPDXIdForTypeSendsInProgress",
-                  "Current number of getPDXIdForType operation's request messages being send from the client to server",
-                  "sends"),
-              f.createIntCounter("getPDXIdForTypeSendFailures",
-                  "Total number of getPDXIdForType operation's request messages not sent successfully from the client to server",
-                  "sends"),
-              f.createIntCounter("getPDXIdForTypeSendsSuccessful",
-                  "Total number of getPDXIdForType operation's request messages sent successfully from the client to server",
-                  "sends"),
-              f.createLongCounter("getPDXIdForTypeSendTime",
-                  "Total amount of time, in nanoseconds spent sending getPDXIdForType operation's request messages successfully/unsuccessfully from the client to server",
-                  "nanoseconds"),
-              f.createIntGauge("addPdxTypeSendsInProgress",
-                  "Current number of addPdxType operation's request messages being send from the client to server",
-                  "sends"),
-              f.createIntCounter("addPdxTypeSendFailures",
-                  "Total number of addPdxType operation's request messages not sent successfully from the client to server",
-                  "sends"),
-              f.createIntCounter("addPdxTypeSendsSuccessful",
-                  "Total number of addPdxType operation's request messages sent successfully from the client to server",
-                  "sends"),
-              f.createLongCounter("addPdxTypeSendTime",
-                  "Total amount of time, in nanoseconds spent sending addPdxType operation's request messages successfully/unsuccessfully from the client to server",
-                  "nanoseconds"),});
-      ///////////////////////////////////////////////////////////////////////
-      /*
-       * opInProgressId = type.nameToId("opsInProgress"); opSendInProgressId =
-       * sendType.nameToId("opSendsInProgress"); opSendFailedId =
-       * sendType.nameToId("opSendFailures"); opSendId = sendType.nameToId("opSends");
-       * opSendDurationId = sendType.nameToId("opSendTime"); opTimedOutId =
-       * type.nameToId("opTimeouts"); opFailedId = type.nameToId("opFailures"); opId =
-       * type.nameToId("ops"); opDurationId = type.nameToId("opTime");
-       */
-      ///////////////////////////////////////////////////////////////////////
-      getInProgressId = type.nameToId("getsInProgress");
-      getSendInProgressId = sendType.nameToId("getSendsInProgress");
-      getSendFailedId = sendType.nameToId("getSendFailures");
-      getSendId = sendType.nameToId("getSends");
-      getSendDurationId = sendType.nameToId("getSendTime");
-      getTimedOutId = type.nameToId("getTimeouts");
-      getFailedId = type.nameToId("getFailures");
-      getId = type.nameToId("gets");
-      getDurationId = type.nameToId("getTime");
-      putInProgressId = type.nameToId("putsInProgress");
-      putSendInProgressId = sendType.nameToId("putSendsInProgress");
-      putSendFailedId = sendType.nameToId("putSendFailures");
-      putSendId = sendType.nameToId("putSends");
-      putSendDurationId = sendType.nameToId("putSendTime");
-      putTimedOutId = type.nameToId("putTimeouts");
-      putFailedId = type.nameToId("putFailures");
-      putId = type.nameToId("puts");
-      putDurationId = type.nameToId("putTime");
-      destroyInProgressId = type.nameToId("destroysInProgress");
-      destroySendInProgressId = sendType.nameToId("destroySendsInProgress");
-      destroySendFailedId = sendType.nameToId("destroySendFailures");
-      destroySendId = sendType.nameToId("destroySends");
-      destroySendDurationId = sendType.nameToId("destroySendTime");
-      destroyTimedOutId = type.nameToId("destroyTimeouts");
-      destroyFailedId = type.nameToId("destroyFailures");
-      destroyId = type.nameToId("destroys");
-      destroyDurationId = type.nameToId("destroyTime");
-      destroyRegionInProgressId = type.nameToId("destroyRegionsInProgress");
-      destroyRegionSendInProgressId = sendType.nameToId("destroyRegionSendsInProgress");
-      destroyRegionSendFailedId = sendType.nameToId("destroyRegionSendFailures");
-      destroyRegionSendId = sendType.nameToId("destroyRegionSends");
-      destroyRegionSendDurationId = sendType.nameToId("destroyRegionSendTime");
-      destroyRegionTimedOutId = type.nameToId("destroyRegionTimeouts");
-      destroyRegionFailedId = type.nameToId("destroyRegionFailures");
-      destroyRegionId = type.nameToId("destroyRegions");
-      destroyRegionDurationId = type.nameToId("destroyRegionTime");
-      clearInProgressId = type.nameToId("clearsInProgress");
-      clearSendInProgressId = sendType.nameToId("clearSendsInProgress");
-      clearSendFailedId = sendType.nameToId("clearSendFailures");
-      clearSendId = sendType.nameToId("clearSends");
-      clearSendDurationId = sendType.nameToId("clearSendTime");
-      clearTimedOutId = type.nameToId("clearTimeouts");
-      clearFailedId = type.nameToId("clearFailures");
-      clearId = type.nameToId("clears");
-      clearDurationId = type.nameToId("clearTime");
-      containsKeyInProgressId = type.nameToId("containsKeysInProgress");
-      containsKeySendInProgressId = sendType.nameToId("containsKeySendsInProgress");
-      containsKeySendFailedId = sendType.nameToId("containsKeySendFailures");
-      containsKeySendId = sendType.nameToId("containsKeySends");
-      containsKeySendDurationId = sendType.nameToId("containsKeySendTime");
-      containsKeyTimedOutId = type.nameToId("containsKeyTimeouts");
-      containsKeyFailedId = type.nameToId("containsKeyFailures");
-      containsKeyId = type.nameToId("containsKeys");
-      containsKeyDurationId = type.nameToId("containsKeyTime");
-
-      keySetInProgressId = type.nameToId("keySetsInProgress");
-      keySetSendInProgressId = sendType.nameToId("keySetSendsInProgress");
-      keySetSendFailedId = sendType.nameToId("keySetSendFailures");
-      keySetSendId = sendType.nameToId("keySetSends");
-      keySetSendDurationId = sendType.nameToId("keySetSendTime");
-      keySetTimedOutId = type.nameToId("keySetTimeouts");
-      keySetFailedId = type.nameToId("keySetFailures");
-      keySetId = type.nameToId("keySets");
-      keySetDurationId = type.nameToId("keySetTime");
-
-      commitInProgressId = type.nameToId("commitsInProgress");
-      commitSendInProgressId = sendType.nameToId("commitSendsInProgress");
-      commitSendFailedId = sendType.nameToId("commitSendFailures");
-      commitSendId = sendType.nameToId("commitSends");
-      commitSendDurationId = sendType.nameToId("commitSendTime");
-      commitDurationId = type.nameToId("commitTime");
-      commitTimedOutId = type.nameToId("commitTimeouts");
-      commitFailedId = type.nameToId("commitFailures");
-      commitId = type.nameToId("commits");
-
-      rollbackInProgressId = type.nameToId("rollbacksInProgress");
-      rollbackSendInProgressId = sendType.nameToId("rollbackSendsInProgress");
-      rollbackSendFailedId = sendType.nameToId("rollbackSendFailures");
-      rollbackSendId = sendType.nameToId("rollbackSends");
-      rollbackSendDurationId = sendType.nameToId("rollbackSendTime");
-      rollbackDurationId = type.nameToId("rollbackTime");
-      rollbackTimedOutId = type.nameToId("rollbackTimeouts");
-      rollbackFailedId = type.nameToId("rollbackFailures");
-      rollbackId = type.nameToId("rollbacks");
-
-      getEntryInProgressId = type.nameToId("getEntrysInProgress");
-      getEntrySendInProgressId = sendType.nameToId("getEntrySendsInProgress");
-      getEntrySendFailedId = sendType.nameToId("getEntrySendFailures");
-      getEntrySendId = sendType.nameToId("getEntrySends");
-      getEntrySendDurationId = sendType.nameToId("getEntrySendTime");
-      getEntryDurationId = type.nameToId("getEntryTime");
-      getEntryTimedOutId = type.nameToId("getEntryTimeouts");
-      getEntryFailedId = type.nameToId("getEntryFailures");
-      getEntryId = type.nameToId("getEntrys");
-
-      txSynchronizationInProgressId = type.nameToId("jtaSynchronizationsInProgress");
-      txSynchronizationSendInProgressId = sendType.nameToId("jtaSynchronizationSendsInProgress");
-      txSynchronizationSendFailedId = sendType.nameToId("jtaSynchronizationSendFailures");
-      txSynchronizationSendId = sendType.nameToId("jtaSynchronizationSends");
-      txSynchronizationSendDurationId = sendType.nameToId("jtaSynchronizationSendTime");
-      txSynchronizationDurationId = type.nameToId("jtaSynchronizationTime");
-      txSynchronizationTimedOutId = type.nameToId("jtaSynchronizationTimeouts");
-      txSynchronizationFailedId = type.nameToId("jtaSynchronizationFailures");
-      txSynchronizationId = type.nameToId("jtaSynchronizations");
-
-      txFailoverInProgressId = type.nameToId("txFailoversInProgress");
-      txFailoverSendInProgressId = sendType.nameToId("txFailoverSendsInProgress");
-      txFailoverSendFailedId = sendType.nameToId("txFailoverSendFailures");
-      txFailoverSendId = sendType.nameToId("txFailoverSends");
-      txFailoverSendDurationId = sendType.nameToId("txFailoverSendTime");
-      txFailoverDurationId = type.nameToId("txFailoverTime");
-      txFailoverTimedOutId = type.nameToId("txFailoverTimeouts");
-      txFailoverFailedId = type.nameToId("txFailoverFailures");
-      txFailoverId = type.nameToId("txFailovers");
-
-      sizeInProgressId = type.nameToId("sizesInProgress");
-      sizeSendInProgressId = sendType.nameToId("sizeSendsInProgress");
-      sizeSendFailedId = sendType.nameToId("sizeSendFailures");
-      sizeSendId = sendType.nameToId("sizeSends");
-      sizeSendDurationId = sendType.nameToId("sizeSendTime");
-      sizeDurationId = type.nameToId("sizeTime");
-      sizeTimedOutId = type.nameToId("sizeTimeouts");
-      sizeFailedId = type.nameToId("sizeFailures");
-      sizeId = type.nameToId("sizes");
-
-
-      invalidateInProgressId = type.nameToId("invalidatesInProgress");
-      invalidateSendInProgressId = sendType.nameToId("invalidateSendsInProgress");
-      invalidateSendFailedId = sendType.nameToId("invalidateSendFailures");
-      invalidateSendId = sendType.nameToId("invalidateSends");
-      invalidateSendDurationId = sendType.nameToId("invalidateSendTime");
-      invalidateDurationId = type.nameToId("invalidateTime");
-      invalidateTimedOutId = type.nameToId("invalidateTimeouts");
-      invalidateFailedId = type.nameToId("invalidateFailures");
-      invalidateId = type.nameToId("invalidates");
-
-
-      registerInterestInProgressId = type.nameToId("registerInterestsInProgress");
-      registerInterestSendInProgressId = sendType.nameToId("registerInterestSendsInProgress");
-      registerInterestSendFailedId = sendType.nameToId("registerInterestSendFailures");
-      registerInterestSendId = sendType.nameToId("registerInterestSends");
-      registerInterestSendDurationId = sendType.nameToId("registerInterestSendTime");
-      registerInterestTimedOutId = type.nameToId("registerInterestTimeouts");
-      registerInterestFailedId = type.nameToId("registerInterestFailures");
-      registerInterestId = type.nameToId("registerInterests");
-      registerInterestDurationId = type.nameToId("registerInterestTime");
-      unregisterInterestInProgressId = type.nameToId("unregisterInterestsInProgress");
-      unregisterInterestSendInProgressId = sendType.nameToId("unregisterInterestSendsInProgress");
-      unregisterInterestSendFailedId = sendType.nameToId("unregisterInterestSendFailures");
-      unregisterInterestSendId = sendType.nameToId("unregisterInterestSends");
-      unregisterInterestSendDurationId = sendType.nameToId("unregisterInterestSendTime");
-      unregisterInterestTimedOutId = type.nameToId("unregisterInterestTimeouts");
-      unregisterInterestFailedId = type.nameToId("unregisterInterestFailures");
-      unregisterInterestId = type.nameToId("unregisterInterests");
-      unregisterInterestDurationId = type.nameToId("unregisterInterestTime");
-      queryInProgressId = type.nameToId("querysInProgress");
-      querySendInProgressId = sendType.nameToId("querySendsInProgress");
-      querySendFailedId = sendType.nameToId("querySendFailures");
-      querySendId = sendType.nameToId("querySends");
-      querySendDurationId = sendType.nameToId("querySendTime");
-      queryTimedOutId = type.nameToId("queryTimeouts");
-      queryFailedId = type.nameToId("queryFailures");
-      queryId = type.nameToId("querys");
-      queryDurationId = type.nameToId("queryTime");
-      createCQInProgressId = type.nameToId("createCQsInProgress");
-      createCQSendInProgressId = sendType.nameToId("createCQSendsInProgress");
-      createCQSendFailedId = sendType.nameToId("createCQSendFailures");
-      createCQSendId = sendType.nameToId("createCQSends");
-      createCQSendDurationId = sendType.nameToId("createCQSendTime");
-      createCQTimedOutId = type.nameToId("createCQTimeouts");
-      createCQFailedId = type.nameToId("createCQFailures");
-      createCQId = type.nameToId("createCQs");
-      createCQDurationId = type.nameToId("createCQTime");
-      stopCQInProgressId = type.nameToId("stopCQsInProgress");
-      stopCQSendInProgressId = sendType.nameToId("stopCQSendsInProgress");
-      stopCQSendFailedId = sendType.nameToId("stopCQSendFailures");
-      stopCQSendId = sendType.nameToId("stopCQSends");
-      stopCQSendDurationId = sendType.nameToId("stopCQSendTime");
-      stopCQTimedOutId = type.nameToId("stopCQTimeouts");
-      stopCQFailedId = type.nameToId("stopCQFailures");
-      stopCQId = type.nameToId("stopCQs");
-      stopCQDurationId = type.nameToId("stopCQTime");
-      closeCQInProgressId = type.nameToId("closeCQsInProgress");
-      closeCQSendInProgressId = sendType.nameToId("closeCQSendsInProgress");
-      closeCQSendFailedId = sendType.nameToId("closeCQSendFailures");
-      closeCQSendId = sendType.nameToId("closeCQSends");
-      closeCQSendDurationId = sendType.nameToId("closeCQSendTime");
-      closeCQTimedOutId = type.nameToId("closeCQTimeouts");
-      closeCQFailedId = type.nameToId("closeCQFailures");
-      closeCQId = type.nameToId("closeCQs");
-      closeCQDurationId = type.nameToId("closeCQTime");
-      gatewayBatchInProgressId = type.nameToId("gatewayBatchsInProgress");
-      gatewayBatchSendInProgressId = sendType.nameToId("gatewayBatchSendsInProgress");
-      gatewayBatchSendFailedId = sendType.nameToId("gatewayBatchSendFailures");
-      gatewayBatchSendId = sendType.nameToId("gatewayBatchSends");
-      gatewayBatchSendDurationId = sendType.nameToId("gatewayBatchSendTime");
-      gatewayBatchTimedOutId = type.nameToId("gatewayBatchTimeouts");
-      gatewayBatchFailedId = type.nameToId("gatewayBatchFailures");
-      gatewayBatchId = type.nameToId("gatewayBatchs");
-      gatewayBatchDurationId = type.nameToId("gatewayBatchTime");
-      getDurableCQsInProgressId = type.nameToId("getDurableCQsInProgress");
-      getDurableCQsSendsInProgressId = sendType.nameToId("getDurableCQsSendsInProgressId");
-      getDurableCQsSendFailedId = sendType.nameToId("getDurableCQsSendFailures");
-      getDurableCQsSendId = sendType.nameToId("getDurableCQsSends");
-      getDurableCQsSendDurationId = sendType.nameToId("getDurableCQsSendTime");
-      getDurableCQsTimedOutId = type.nameToId("getDurableCQsTimeouts");
-      getDurableCQsFailedId = type.nameToId("getDurableCQsFailures");
-      getDurableCQsId = type.nameToId("getDurableCQs");
-      getDurableCQsDurationId = type.nameToId("getDurableCQsTime");
-      readyForEventsInProgressId = type.nameToId("readyForEventsInProgress");
-      readyForEventsSendInProgressId = sendType.nameToId("readyForEventsSendsInProgress");
-      readyForEventsSendFailedId = sendType.nameToId("readyForEventsSendFailures");
-      readyForEventsSendId = sendType.nameToId("readyForEventsSends");
-      readyForEventsSendDurationId = sendType.nameToId("readyForEventsSendTime");
-      readyForEventsTimedOutId = type.nameToId("readyForEventsTimeouts");
-      readyForEventsFailedId = type.nameToId("readyForEventsFailures");
-      readyForEventsId = type.nameToId("readyForEvents");
-      readyForEventsDurationId = type.nameToId("readyForEventsTime");
-      makePrimaryInProgressId = type.nameToId("makePrimarysInProgress");
-      makePrimarySendInProgressId = sendType.nameToId("makePrimarySendsInProgress");
-      makePrimarySendFailedId = sendType.nameToId("makePrimarySendFailures");
-      makePrimarySendId = sendType.nameToId("makePrimarySends");
-      makePrimarySendDurationId = sendType.nameToId("makePrimarySendTime");
-      makePrimaryTimedOutId = type.nameToId("makePrimaryTimeouts");
-      makePrimaryFailedId = type.nameToId("makePrimaryFailures");
-      makePrimaryId = type.nameToId("makePrimarys");
-      makePrimaryDurationId = type.nameToId("makePrimaryTime");
-
-      closeConInProgressId = type.nameToId("closeConsInProgress");
-      closeConSendInProgressId = sendType.nameToId("closeConSendsInProgress");
-      closeConSendFailedId = sendType.nameToId("closeConSendFailures");
-      closeConSendId = sendType.nameToId("closeConSends");
-      closeConSendDurationId = sendType.nameToId("closeConSendTime");
-      closeConTimedOutId = type.nameToId("closeConTimeouts");
-      closeConFailedId = type.nameToId("closeConFailures");
-      closeConId = type.nameToId("closeCons");
-      closeConDurationId = type.nameToId("closeConTime");
-
-      primaryAckInProgressId = type.nameToId("primaryAcksInProgress");
-      primaryAckSendInProgressId = sendType.nameToId("primaryAckSendsInProgress");
-      primaryAckSendFailedId = sendType.nameToId("primaryAckSendFailures");
-      primaryAckSendId = sendType.nameToId("primaryAckSends");
-      primaryAckSendDurationId = sendType.nameToId("primaryAckSendTime");
-      primaryAckTimedOutId = type.nameToId("primaryAckTimeouts");
-      primaryAckFailedId = type.nameToId("primaryAckFailures");
-      primaryAckId = type.nameToId("primaryAcks");
-      primaryAckDurationId = type.nameToId("primaryAckTime");
-
-      pingInProgressId = type.nameToId("pingsInProgress");
-      pingSendInProgressId = sendType.nameToId("pingSendsInProgress");
-      pingSendFailedId = sendType.nameToId("pingSendFailures");
-      pingSendId = sendType.nameToId("pingSends");
-      pingSendDurationId = sendType.nameToId("pingSendTime");
-      pingTimedOutId = type.nameToId("pingTimeouts");
-      pingFailedId = type.nameToId("pingFailures");
-      pingId = type.nameToId("pings");
-      pingDurationId = type.nameToId("pingTime");
-
-      registerInstantiatorsInProgressId = type.nameToId("registerInstantiatorsInProgress");
-      registerInstantiatorsSendInProgressId =
-          sendType.nameToId("registerInstantiatorsSendsInProgress");
-      registerInstantiatorsSendFailedId = sendType.nameToId("registerInstantiatorsSendFailures");
-      registerInstantiatorsSendId = sendType.nameToId("registerInstantiatorsSends");
-      registerInstantiatorsSendDurationId = sendType.nameToId("registerInstantiatorsSendTime");
-      registerInstantiatorsTimedOutId = type.nameToId("registerInstantiatorsTimeouts");
-      registerInstantiatorsFailedId = type.nameToId("registerInstantiatorsFailures");
-      registerInstantiatorsId = type.nameToId("registerInstantiators");
-      registerInstantiatorsDurationId = type.nameToId("registerInstantiatorsTime");
-
-      registerDataSerializersInProgressId = type.nameToId("registerDataSerializersInProgress");
-      registerDataSerializersSendInProgressId =
-          sendType.nameToId("registerDataSerializersSendInProgress");
-      registerDataSerializersSendFailedId =
-          sendType.nameToId("registerDataSerializersSendFailures");
-      registerDataSerializersSendId = sendType.nameToId("registerDataSerializersSends");
-      registerDataSerializersSendDurationId = sendType.nameToId("registerDataSerializersSendTime");
-      registerDataSerializersTimedOutId = type.nameToId("registerDataSerializersTimeouts");
-      registerDataSerializersFailedId = type.nameToId("registerDataSerializersFailures");
-      registerDataSerializersId = type.nameToId("registerDataSerializers");
-      registerDataSerializersDurationId = type.nameToId("registerDataSerializersTime");
-
-      putAllInProgressId = type.nameToId("putAllsInProgress");
-      putAllSendInProgressId = sendType.nameToId("putAllSendsInProgress");
-      putAllSendFailedId = sendType.nameToId("putAllSendFailures");
-      putAllSendId = sendType.nameToId("putAllSends");
-      putAllSendDurationId = sendType.nameToId("putAllSendTime");
-      putAllTimedOutId = type.nameToId("putAllTimeouts");
-      putAllFailedId = type.nameToId("putAllFailures");
-      putAllId = type.nameToId("putAlls");
-      putAllDurationId = type.nameToId("putAllTime");
-
-      removeAllInProgressId = type.nameToId("removeAllsInProgress");
-      removeAllSendInProgressId = sendType.nameToId("removeAllSendsInProgress");
-      removeAllSendFailedId = sendType.nameToId("removeAllSendFailures");
-      removeAllSendId = sendType.nameToId("removeAllSends");
-      removeAllSendDurationId = sendType.nameToId("removeAllSendTime");
-      removeAllTimedOutId = type.nameToId("removeAllTimeouts");
-      removeAllFailedId = type.nameToId("removeAllFailures");
-      removeAllId = type.nameToId("removeAlls");
-      removeAllDurationId = type.nameToId("removeAllTime");
-
-      getAllInProgressId = type.nameToId("getAllsInProgress");
-      getAllSendInProgressId = sendType.nameToId("getAllSendsInProgress");
-      getAllSendFailedId = sendType.nameToId("getAllSendFailures");
-      getAllSendId = sendType.nameToId("getAllSends");
-      getAllSendDurationId = sendType.nameToId("getAllSendTime");
-      getAllTimedOutId = type.nameToId("getAllTimeouts");
-      getAllFailedId = type.nameToId("getAllFailures");
-      getAllId = type.nameToId("getAlls");
-      getAllDurationId = type.nameToId("getAllTime");
-
-      connectionsId = type.nameToId("connections");
-      connectsId = type.nameToId("connects");
-      disconnectsId = type.nameToId("disconnects");
-
-      receivedBytesId = type.nameToId("receivedBytes");
-      sentBytesId = type.nameToId("sentBytes");
-      messagesBeingReceivedId = type.nameToId("messagesBeingReceived");
-      messageBytesBeingReceivedId = type.nameToId("messageBytesBeingReceived");
-
-      executeFunctionInProgressId = type.nameToId("executeFunctionsInProgress");
-      executeFunctionSendInProgressId = sendType.nameToId("executeFunctionSendsInProgress");
-      executeFunctionSendFailedId = sendType.nameToId("executeFunctionSendFailures");
-      executeFunctionSendId = sendType.nameToId("executeFunctionSends");
-      executeFunctionSendDurationId = sendType.nameToId("executeFunctionSendTime");
-      executeFunctionTimedOutId = type.nameToId("executeFunctionTimeouts");
-      executeFunctionFailedId = type.nameToId("executeFunctionFailures");
-      executeFunctionId = type.nameToId("executeFunctions");
-      executeFunctionDurationId = type.nameToId("executeFunctionTime");
-
-      getClientPRMetadataInProgressId = type.nameToId("getClientPRMetadataInProgress");
-      getClientPRMetadataSendInProgressId = sendType.nameToId("getClientPRMetadataSendsInProgress");
-      getClientPRMetadataSendFailedId = sendType.nameToId("getClientPRMetadataSendFailures");
-      getClientPRMetadataSendId = sendType.nameToId("getClientPRMetadataSendsSuccessful");
-      getClientPRMetadataSendDurationId = sendType.nameToId("getClientPRMetadataSendTime");
-      getClientPRMetadataTimedOutId = type.nameToId("getClientPRMetadataTimeouts");
-      getClientPRMetadataFailedId = type.nameToId("getClientPRMetadataFailures");
-      getClientPRMetadataId = type.nameToId("getClientPRMetadataSuccessful");
-      getClientPRMetadataDurationId = type.nameToId("getClientPRMetadataTime");
-
-      getClientPartitionAttributesInProgressId =
-          type.nameToId("getClientPartitionAttributesInProgress");
-      getClientPartitionAttributesSendInProgressId =
-          sendType.nameToId("getClientPartitionAttributesSendsInProgress");
-      getClientPartitionAttributesSendFailedId =
-          sendType.nameToId("getClientPartitionAttributesSendFailures");
-      getClientPartitionAttributesSendId =
-          sendType.nameToId("getClientPartitionAttributesSendsSuccessful");
-      getClientPartitionAttributesSendDurationId =
-          sendType.nameToId("getClientPartitionAttributesSendTime");
-      getClientPartitionAttributesTimedOutId =
-          type.nameToId("getClientPartitionAttributesTimeouts");
-      getClientPartitionAttributesFailedId = type.nameToId("getClientPartitionAttributesFailures");
-      getClientPartitionAttributesId = type.nameToId("getClientPartitionAttributesSuccessful");
-      getClientPartitionAttributesDurationId = type.nameToId("getClientPartitionAttributesTime");
-
-      getPDXTypeByIdInProgressId = type.nameToId("getPDXTypeByIdInProgress");
-      getPDXTypeByIdSendInProgressId = sendType.nameToId("getPDXTypeByIdSendsInProgress");
-      getPDXTypeByIdSendFailedId = sendType.nameToId("getPDXTypeByIdSendFailures");
-      getPDXTypeByIdSendId = sendType.nameToId("getPDXTypeByIdSendsSuccessful");
-      getPDXTypeByIdSendDurationId = sendType.nameToId("getPDXTypeByIdSendTime");
-      getPDXTypeByIdTimedOutId = type.nameToId("getPDXTypeByIdTimeouts");
-      getPDXTypeByIdFailedId = type.nameToId("getPDXTypeByIdFailures");
-      getPDXTypeByIdId = type.nameToId("getPDXTypeByIdSuccessful");
-      getPDXTypeByIdDurationId = type.nameToId("getPDXTypeByIdTime");
-
-      getPDXIdForTypeInProgressId = type.nameToId("getPDXIdForTypeInProgress");
-      getPDXIdForTypeSendInProgressId = sendType.nameToId("getPDXIdForTypeSendsInProgress");
-      getPDXIdForTypeSendFailedId = sendType.nameToId("getPDXIdForTypeSendFailures");
-      getPDXIdForTypeSendId = sendType.nameToId("getPDXIdForTypeSendsSuccessful");
-      getPDXIdForTypeSendDurationId = sendType.nameToId("getPDXIdForTypeSendTime");
-      getPDXIdForTypeTimedOutId = type.nameToId("getPDXIdForTypeTimeouts");
-      getPDXIdForTypeFailedId = type.nameToId("getPDXIdForTypeFailures");
-      getPDXIdForTypeId = type.nameToId("getPDXIdForTypeSuccessful");
-      getPDXIdForTypeDurationId = type.nameToId("getPDXIdForTypeTime");
-
-      addPdxTypeInProgressId = type.nameToId("addPdxTypeInProgress");
-      addPdxTypeSendInProgressId = sendType.nameToId("addPdxTypeSendsInProgress");
-      addPdxTypeSendFailedId = sendType.nameToId("addPdxTypeSendFailures");
-      addPdxTypeSendId = sendType.nameToId("addPdxTypeSendsSuccessful");
-      addPdxTypeSendDurationId = sendType.nameToId("addPdxTypeSendTime");
-      addPdxTypeTimedOutId = type.nameToId("addPdxTypeTimeouts");
-      addPdxTypeFailedId = type.nameToId("addPdxTypeFailures");
-      addPdxTypeId = type.nameToId("addPdxTypeSuccessful");
-      addPdxTypeDurationId = type.nameToId("addPdxTypeTime");
-
-
-      opIds = new int[] {getId, putId, destroyId, destroyRegionId, clearId, containsKeyId, keySetId,
-          registerInterestId, unregisterInterestId, queryId, createCQId, stopCQId, closeCQId,
-          gatewayBatchId, readyForEventsId, makePrimaryId, closeConId, primaryAckId, pingId,
-          putAllId, removeAllId, getAllId, registerInstantiatorsId, executeFunctionId,
-          getClientPRMetadataId, getClientPartitionAttributesId, getPDXTypeByIdId,
-          getPDXIdForTypeId, addPdxTypeId};
-    } catch (RuntimeException t) {
-      t.printStackTrace();
-      throw t;
-    }
-  }
-
-  private static long getStatTime() {
-    return DistributionStats.getStatTime();
-  }
-
-  // instance fields
-  private final Statistics stats;
-  private final Statistics sendStats;
-  private final PoolStats poolStats;
-
-  public ConnectionStats(StatisticsFactory factory, String name,
-      PoolStats poolStats/* , GatewayStats gatewayStats */) {
-    this.stats = factory.createAtomicStatistics(type, "ClientStats-" + name);
-    this.sendStats = factory.createAtomicStatistics(sendType, "ClientSendStats-" + name);
-    this.poolStats = poolStats;
-  }
-
-  /**
-   * Records that the specified get is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endGetSend} and
-   * {@link #endGet}.
-   *
-   * @return the start time of this get
-   */
-  public long startGet() {
-    this.stats.incInt(getInProgressId, 1);
-    this.sendStats.incInt(getSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the get has completed
-   *
-   * @param startTime the value returned by {@link #startGet}.
-   * @param failed true if the send of the get failed
-   */
-  public void endGetSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getSendInProgressId, -1);
-    int endGetSendId;
-    if (failed) {
-      endGetSendId = getSendFailedId;
-    } else {
-      endGetSendId = getSendId;
-    }
-    this.sendStats.incInt(endGetSendId, 1);
-    this.stats.incLong(getSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified get has ended
-   *
-   * @param startTime the value returned by {@link #startGet}.
-   * @param timedOut true if get timed out
-   * @param failed true if get failed
-   */
-  public void endGet(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getInProgressId, -1);
-    int endGetId;
-    if (timedOut) {
-      endGetId = getTimedOutId;
-    } else if (failed) {
-      endGetId = getFailedId;
-    } else {
-      endGetId = getId;
-    }
-    this.stats.incInt(endGetId, 1);
-    this.stats.incLong(getDurationId, duration);
-  }
-
-  public int getGets() {
-    return this.stats.getInt(getId);
-  }
-
-  public long getGetDuration() {
-    return this.stats.getLong(getDurationId);
-  }
-
-  /**
-   * Records that the specified put is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endPutSend} and
-   * {@link #endPut}.
-   *
-   * @return the start time of this put
-   */
-  public long startPut() {
-    this.stats.incInt(putInProgressId, 1);
-    this.sendStats.incInt(putSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the put has completed
-   *
-   * @param startTime the value returned by {@link #startPut}.
-   * @param failed true if the send of the put failed
-   */
-  public void endPutSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(putSendInProgressId, -1);
-    int endPutSendId;
-    if (failed) {
-      endPutSendId = putSendFailedId;
-    } else {
-      endPutSendId = putSendId;
-    }
-    this.sendStats.incInt(endPutSendId, 1);
-    this.stats.incLong(putSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified put has ended
-   *
-   * @param startTime the value returned by {@link #startPut}.
-   * @param timedOut true if put timed out
-   * @param failed true if put failed
-   */
-  public void endPut(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(putInProgressId, -1);
-    int endPutId;
-    if (timedOut) {
-      endPutId = putTimedOutId;
-    } else if (failed) {
-      endPutId = putFailedId;
-    } else {
-      endPutId = putId;
-    }
-    this.stats.incInt(endPutId, 1);
-    this.stats.incLong(putDurationId, duration);
-  }
-
-  public int getPuts() {
-    return this.stats.getInt(putId);
-  }
-
-  public long getPutDuration() {
-    return this.stats.getLong(putDurationId);
-  }
-
-  /**
-   * Records that the specified destroy is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endDestroySend} and
-   * {@link #endDestroy}.
-   *
-   * @return the start time of this destroy
-   */
-  public long startDestroy() {
-    this.stats.incInt(destroyInProgressId, 1);
-    this.sendStats.incInt(destroySendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the destroy has completed
-   *
-   * @param startTime the value returned by {@link #startDestroy}.
-   * @param failed true if the send of the destroy failed
-   */
-  public void endDestroySend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(destroySendInProgressId, -1);
-    int endDestroySendId;
-    if (failed) {
-      endDestroySendId = destroySendFailedId;
-    } else {
-      endDestroySendId = destroySendId;
-    }
-    this.sendStats.incInt(endDestroySendId, 1);
-    this.stats.incLong(destroySendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified destroy has ended
-   *
-   * @param startTime the value returned by {@link #startDestroy}.
-   * @param timedOut true if destroy timed out
-   * @param failed true if destroy failed
-   */
-  public void endDestroy(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(destroyInProgressId, -1);
-    int endDestroyId;
-    if (timedOut) {
-      endDestroyId = destroyTimedOutId;
-    } else if (failed) {
-      endDestroyId = destroyFailedId;
-    } else {
-      endDestroyId = destroyId;
-    }
-    this.stats.incInt(endDestroyId, 1);
-    this.stats.incLong(destroyDurationId, duration);
-  }
-
-  /**
-   * Records that the specified destroyRegion is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endDestroyRegionSend} and
-   * {@link #endDestroyRegion}.
-   *
-   * @return the start time of this destroyRegion
-   */
-  public long startDestroyRegion() {
-    this.stats.incInt(destroyRegionInProgressId, 1);
-    this.sendStats.incInt(destroyRegionSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the destroyRegion has completed
-   *
-   * @param startTime the value returned by {@link #startDestroyRegion}.
-   * @param failed true if the send of the destroyRegion failed
-   */
-  public void endDestroyRegionSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(destroyRegionSendInProgressId, -1);
-    int endDestroyRegionSendId;
-    if (failed) {
-      endDestroyRegionSendId = destroyRegionSendFailedId;
-    } else {
-      endDestroyRegionSendId = destroyRegionSendId;
-    }
-    this.sendStats.incInt(endDestroyRegionSendId, 1);
-    this.stats.incLong(destroyRegionSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified destroyRegion has ended
-   *
-   * @param startTime the value returned by {@link #startDestroyRegion}.
-   * @param timedOut true if destroyRegion timed out
-   * @param failed true if destroyRegion failed
-   */
-  public void endDestroyRegion(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(destroyRegionInProgressId, -1);
-    int endDestroyRegionId;
-    if (timedOut) {
-      endDestroyRegionId = destroyRegionTimedOutId;
-    } else if (failed) {
-      endDestroyRegionId = destroyRegionFailedId;
-    } else {
-      endDestroyRegionId = destroyRegionId;
-    }
-    this.stats.incInt(endDestroyRegionId, 1);
-    this.stats.incLong(destroyRegionDurationId, duration);
-  }
-
-  /**
-   * Records that the specified clear is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endClearSend} and
-   * {@link #endClear}.
-   *
-   * @return the start time of this clear
-   */
-  public long startClear() {
-    this.stats.incInt(clearInProgressId, 1);
-    this.sendStats.incInt(clearSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the clear has completed
-   *
-   * @param startTime the value returned by {@link #startClear}.
-   * @param failed true if the send of the clear failed
-   */
-  public void endClearSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(clearSendInProgressId, -1);
-    int endClearSendId;
-    if (failed) {
-      endClearSendId = clearSendFailedId;
-    } else {
-      endClearSendId = clearSendId;
-    }
-    this.sendStats.incInt(endClearSendId, 1);
-    this.stats.incLong(clearSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified clear has ended
-   *
-   * @param startTime the value returned by {@link #startClear}.
-   * @param timedOut true if clear timed out
-   * @param failed true if clear failed
-   */
-  public void endClear(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(clearInProgressId, -1);
-    int endClearId;
-    if (timedOut) {
-      endClearId = clearTimedOutId;
-    } else if (failed) {
-      endClearId = clearFailedId;
-    } else {
-      endClearId = clearId;
-    }
-    this.stats.incInt(endClearId, 1);
-    this.stats.incLong(clearDurationId, duration);
-  }
-
-  /**
-   * Records that the specified containsKey is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endContainsKeySend} and
-   * {@link #endContainsKey}.
-   *
-   * @return the start time of this containsKey
-   */
-  public long startContainsKey() {
-    this.stats.incInt(containsKeyInProgressId, 1);
-    this.sendStats.incInt(containsKeySendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the containsKey has completed
-   *
-   * @param startTime the value returned by {@link #startContainsKey}.
-   * @param failed true if the send of the containsKey failed
-   */
-  public void endContainsKeySend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(containsKeySendInProgressId, -1);
-    int endContainsKeySendId;
-    if (failed) {
-      endContainsKeySendId = containsKeySendFailedId;
-    } else {
-      endContainsKeySendId = containsKeySendId;
-    }
-    this.sendStats.incInt(endContainsKeySendId, 1);
-    this.stats.incLong(containsKeySendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified containsKey has ended
-   *
-   * @param startTime the value returned by {@link #startContainsKey}.
-   * @param timedOut true if containsKey timed out
-   * @param failed true if containsKey failed
-   */
-  public void endContainsKey(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(containsKeyInProgressId, -1);
-    int endContainsKeyId;
-    if (timedOut) {
-      endContainsKeyId = containsKeyTimedOutId;
-    } else if (failed) {
-      endContainsKeyId = containsKeyFailedId;
-    } else {
-      endContainsKeyId = containsKeyId;
-    }
-    this.stats.incInt(endContainsKeyId, 1);
-    this.stats.incLong(containsKeyDurationId, duration);
-  }
-
-  /**
-   * Records that the specified keySet is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endKeySetSend} and
-   * {@link #endKeySet}.
-   *
-   * @return the start time of this keySet
-   */
-  public long startKeySet() {
-    this.stats.incInt(keySetInProgressId, 1);
-    this.sendStats.incInt(keySetSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the keySet has completed
-   *
-   * @param startTime the value returned by {@link #startKeySet}.
-   * @param failed true if the send of the keySet failed
-   */
-  public void endKeySetSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(keySetSendInProgressId, -1);
-    int endKeySetSendId;
-    if (failed) {
-      endKeySetSendId = keySetSendFailedId;
-    } else {
-      endKeySetSendId = keySetSendId;
-    }
-    this.sendStats.incInt(endKeySetSendId, 1);
-    this.stats.incLong(keySetSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified keySet has ended
-   *
-   * @param startTime the value returned by {@link #startKeySet}.
-   * @param timedOut true if keySet timed out
-   * @param failed true if keySet failed
-   */
-  public void endKeySet(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(keySetInProgressId, -1);
-    int endKeySetId;
-    if (timedOut) {
-      endKeySetId = keySetTimedOutId;
-    } else if (failed) {
-      endKeySetId = keySetFailedId;
-    } else {
-      endKeySetId = keySetId;
-    }
-    this.stats.incInt(endKeySetId, 1);
-    this.stats.incLong(keySetDurationId, duration);
-  }
-
-  /**
-   * Records that the specified registerInterest is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endRegisterInterestSend}
-   * and {@link #endRegisterInterest}.
-   *
-   * @return the start time of this registerInterest
-   */
-  public long startRegisterInterest() {
-    this.stats.incInt(registerInterestInProgressId, 1);
-    this.sendStats.incInt(registerInterestSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the registerInterest has completed
-   *
-   * @param startTime the value returned by {@link #startRegisterInterest}.
-   * @param failed true if the send of the registerInterest failed
-   */
-  public void endRegisterInterestSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(registerInterestSendInProgressId, -1);
-    int endRegisterInterestSendId;
-    if (failed) {
-      endRegisterInterestSendId = registerInterestSendFailedId;
-    } else {
-      endRegisterInterestSendId = registerInterestSendId;
-    }
-    this.sendStats.incInt(endRegisterInterestSendId, 1);
-    this.stats.incLong(registerInterestSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified registerInterest has ended
-   *
-   * @param startTime the value returned by {@link #startRegisterInterest}.
-   * @param timedOut true if registerInterest timed out
-   * @param failed true if registerInterest failed
-   */
-  public void endRegisterInterest(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(registerInterestInProgressId, -1);
-    int endRegisterInterestId;
-    if (timedOut) {
-      endRegisterInterestId = registerInterestTimedOutId;
-    } else if (failed) {
-      endRegisterInterestId = registerInterestFailedId;
-    } else {
-      endRegisterInterestId = registerInterestId;
-    }
-    this.stats.incInt(endRegisterInterestId, 1);
-    this.stats.incLong(registerInterestDurationId, duration);
-  }
-
-  /**
-   * Records that the specified unregisterInterest is starting
-   * <p>
-   * Note: for every call of this method the caller must also call
-   * {@link #endUnregisterInterestSend} and {@link #endUnregisterInterest}.
-   *
-   * @return the start time of this unregisterInterest
-   */
-  public long startUnregisterInterest() {
-    this.stats.incInt(unregisterInterestInProgressId, 1);
-    this.sendStats.incInt(unregisterInterestSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the unregisterInterest has completed
-   *
-   * @param startTime the value returned by {@link #startUnregisterInterest}.
-   * @param failed true if the send of the unregisterInterest failed
-   */
-  public void endUnregisterInterestSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(unregisterInterestSendInProgressId, -1);
-    int endUnregisterInterestSendId;
-    if (failed) {
-      endUnregisterInterestSendId = unregisterInterestSendFailedId;
-    } else {
-      endUnregisterInterestSendId = unregisterInterestSendId;
-    }
-    this.sendStats.incInt(endUnregisterInterestSendId, 1);
-    this.stats.incLong(unregisterInterestSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified unregisterInterest has ended
-   *
-   * @param startTime the value returned by {@link #startUnregisterInterest}.
-   * @param timedOut true if unregisterInterest timed out
-   * @param failed true if unregisterInterest failed
-   */
-  public void endUnregisterInterest(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(unregisterInterestInProgressId, -1);
-    int endUnregisterInterestId;
-    if (timedOut) {
-      endUnregisterInterestId = unregisterInterestTimedOutId;
-    } else if (failed) {
-      endUnregisterInterestId = unregisterInterestFailedId;
-    } else {
-      endUnregisterInterestId = unregisterInterestId;
-    }
-    this.stats.incInt(endUnregisterInterestId, 1);
-    this.stats.incLong(unregisterInterestDurationId, duration);
-  }
-
-  /**
-   * Records that the specified query is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endQuerySend} and
-   * {@link #endQuery}.
-   *
-   * @return the start time of this query
-   */
-  public long startQuery() {
-    this.stats.incInt(queryInProgressId, 1);
-    this.sendStats.incInt(querySendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the query has completed
-   *
-   * @param startTime the value returned by {@link #startQuery}.
-   * @param failed true if the send of the query failed
-   */
-  public void endQuerySend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(querySendInProgressId, -1);
-    int endQuerySendId;
-    if (failed) {
-      endQuerySendId = querySendFailedId;
-    } else {
-      endQuerySendId = querySendId;
-    }
-    this.sendStats.incInt(endQuerySendId, 1);
-    this.stats.incLong(querySendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified query has ended
-   *
-   * @param startTime the value returned by {@link #startQuery}.
-   * @param timedOut true if query timed out
-   * @param failed true if query failed
-   */
-  public void endQuery(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(queryInProgressId, -1);
-    int endQueryId;
-    if (timedOut) {
-      endQueryId = queryTimedOutId;
-    } else if (failed) {
-      endQueryId = queryFailedId;
-    } else {
-      endQueryId = queryId;
-    }
-    this.stats.incInt(endQueryId, 1);
-    this.stats.incLong(queryDurationId, duration);
-  }
-
-  /**
-   * Records that the specified createCQ is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endCreateCQSend} and
-   * {@link #endCreateCQ}.
-   *
-   * @return the start time of this createCQ
-   */
-  public long startCreateCQ() {
-    this.stats.incInt(createCQInProgressId, 1);
-    this.sendStats.incInt(createCQSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the createCQ has completed
-   *
-   * @param startTime the value returned by {@link #startCreateCQ}.
-   * @param failed true if the send of the createCQ failed
-   */
-  public void endCreateCQSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(createCQSendInProgressId, -1);
-    int endCreateCQSendId;
-    if (failed) {
-      endCreateCQSendId = createCQSendFailedId;
-    } else {
-      endCreateCQSendId = createCQSendId;
-    }
-    this.sendStats.incInt(endCreateCQSendId, 1);
-    this.stats.incLong(createCQSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified createCQ has ended
-   *
-   * @param startTime the value returned by {@link #startCreateCQ}.
-   * @param timedOut true if createCQ timed out
-   * @param failed true if createCQ failed
-   */
-  public void endCreateCQ(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(createCQInProgressId, -1);
-    int endCreateCQId;
-    if (timedOut) {
-      endCreateCQId = createCQTimedOutId;
-    } else if (failed) {
-      endCreateCQId = createCQFailedId;
-    } else {
-      endCreateCQId = createCQId;
-    }
-    this.stats.incInt(endCreateCQId, 1);
-    this.stats.incLong(createCQDurationId, duration);
-  }
-
-  /**
-   * Records that the specified stopCQ is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endStopCQSend} and
-   * {@link #endStopCQ}.
-   *
-   * @return the start time of this stopCQ
-   */
-  public long startStopCQ() {
-    this.stats.incInt(stopCQInProgressId, 1);
-    this.sendStats.incInt(stopCQSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the stopCQ has completed
-   *
-   * @param startTime the value returned by {@link #startStopCQ}.
-   * @param failed true if the send of the stopCQ failed
-   */
-  public void endStopCQSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(stopCQSendInProgressId, -1);
-    int endStopCQSendId;
-    if (failed) {
-      endStopCQSendId = stopCQSendFailedId;
-    } else {
-      endStopCQSendId = stopCQSendId;
-    }
-    this.sendStats.incInt(endStopCQSendId, 1);
-    this.stats.incLong(stopCQSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified stopCQ has ended
-   *
-   * @param startTime the value returned by {@link #startStopCQ}.
-   * @param timedOut true if stopCQ timed out
-   * @param failed true if stopCQ failed
-   */
-  public void endStopCQ(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(stopCQInProgressId, -1);
-    int endStopCQId;
-    if (timedOut) {
-      endStopCQId = stopCQTimedOutId;
-    } else if (failed) {
-      endStopCQId = stopCQFailedId;
-    } else {
-      endStopCQId = stopCQId;
-    }
-    this.stats.incInt(endStopCQId, 1);
-    this.stats.incLong(stopCQDurationId, duration);
-  }
-
-  /**
-   * Records that the specified closeCQ is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endCloseCQSend} and
-   * {@link #endCloseCQ}.
-   *
-   * @return the start time of this closeCQ
-   */
-  public long startCloseCQ() {
-    this.stats.incInt(closeCQInProgressId, 1);
-    this.sendStats.incInt(closeCQSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the closeCQ has completed
-   *
-   * @param startTime the value returned by {@link #startCloseCQ}.
-   * @param failed true if the send of the closeCQ failed
-   */
-  public void endCloseCQSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(closeCQSendInProgressId, -1);
-    int endCloseCQSendId;
-    if (failed) {
-      endCloseCQSendId = closeCQSendFailedId;
-    } else {
-      endCloseCQSendId = closeCQSendId;
-    }
-    this.sendStats.incInt(endCloseCQSendId, 1);
-    this.stats.incLong(closeCQSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified closeCQ has ended
-   *
-   * @param startTime the value returned by {@link #startCloseCQ}.
-   * @param timedOut true if closeCQ timed out
-   * @param failed true if closeCQ failed
-   */
-  public void endCloseCQ(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(closeCQInProgressId, -1);
-    int endCloseCQId;
-    if (timedOut) {
-      endCloseCQId = closeCQTimedOutId;
-    } else if (failed) {
-      endCloseCQId = closeCQFailedId;
-    } else {
-      endCloseCQId = closeCQId;
-    }
-    this.stats.incInt(endCloseCQId, 1);
-    this.stats.incLong(closeCQDurationId, duration);
-  }
-
-  /**
-   * Records that the specified stopCQ is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endStopCQSend} and
-   * {@link #endStopCQ}.
-   *
-   * @return the start time of this stopCQ
-   */
-  public long startGetDurableCQs() {
-    this.stats.incInt(getDurableCQsInProgressId, 1);
-    this.sendStats.incInt(getDurableCQsSendsInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the stopCQ has completed
-   *
-   * @param startTime the value returned by {@link #startStopCQ}.
-   * @param failed true if the send of the stopCQ failed
-   */
-  public void endGetDurableCQsSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getDurableCQsSendsInProgressId, -1);
-    int endGetDurableCQsSendId;
-    if (failed) {
-      endGetDurableCQsSendId = getDurableCQsSendFailedId;
-    } else {
-      endGetDurableCQsSendId = getDurableCQsSendId;
-    }
-    this.sendStats.incInt(endGetDurableCQsSendId, 1);
-    this.stats.incLong(getDurableCQsSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified stopCQ has ended
-   *
-   * @param startTime the value returned by {@link #startStopCQ}.
-   * @param timedOut true if stopCQ timed out
-   * @param failed true if stopCQ failed
-   */
-  public void endGetDurableCQs(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getDurableCQsInProgressId, -1);
-    int endGetDurableCQsId;
-    if (timedOut) {
-      endGetDurableCQsId = getDurableCQsTimedOutId;
-    } else if (failed) {
-      endGetDurableCQsId = getDurableCQsFailedId;
-    } else {
-      endGetDurableCQsId = getDurableCQsId;
-    }
-    this.stats.incInt(endGetDurableCQsId, 1);
-    this.stats.incLong(getDurableCQsDurationId, duration);
-  }
-
-  /**
-   * Records that the specified gatewayBatch is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endGatewayBatchSend} and
-   * {@link #endGatewayBatch}.
-   *
-   * @return the start time of this gatewayBatch
-   */
-  public long startGatewayBatch() {
-    this.stats.incInt(gatewayBatchInProgressId, 1);
-    this.sendStats.incInt(gatewayBatchSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the gatewayBatch has completed
-   *
-   * @param startTime the value returned by {@link #startGatewayBatch}.
-   * @param failed true if the send of the gatewayBatch failed
-   */
-  public void endGatewayBatchSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(gatewayBatchSendInProgressId, -1);
-    int endGatewayBatchSendId;
-    if (failed) {
-      endGatewayBatchSendId = gatewayBatchSendFailedId;
-    } else {
-      endGatewayBatchSendId = gatewayBatchSendId;
-    }
-    this.sendStats.incInt(endGatewayBatchSendId, 1);
-    this.stats.incLong(gatewayBatchSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified gatewayBatch has ended
-   *
-   * @param startTime the value returned by {@link #startGatewayBatch}.
-   * @param timedOut true if gatewayBatch timed out
-   * @param failed true if gatewayBatch failed
-   */
-  public void endGatewayBatch(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(gatewayBatchInProgressId, -1);
-    int endGatewayBatchId;
-    if (timedOut) {
-      endGatewayBatchId = gatewayBatchTimedOutId;
-    } else if (failed) {
-      endGatewayBatchId = gatewayBatchFailedId;
-    } else {
-      endGatewayBatchId = gatewayBatchId;
-    }
-    this.stats.incInt(endGatewayBatchId, 1);
-    this.stats.incLong(gatewayBatchDurationId, duration);
-  }
-
-  /**
-   * Records that the specified readyForEvents is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endReadyForEventsSend}
-   * and {@link #endReadyForEvents}.
-   *
-   * @return the start time of this readyForEvents
-   */
-  public long startReadyForEvents() {
-    this.stats.incInt(readyForEventsInProgressId, 1);
-    this.sendStats.incInt(readyForEventsSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the readyForEvents has completed
-   *
-   * @param startTime the value returned by {@link #startReadyForEvents}.
-   * @param failed true if the send of the readyForEvents failed
-   */
-  public void endReadyForEventsSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(readyForEventsSendInProgressId, -1);
-    int endReadyForEventsSendId;
-    if (failed) {
-      endReadyForEventsSendId = readyForEventsSendFailedId;
-    } else {
-      endReadyForEventsSendId = readyForEventsSendId;
-    }
-    this.sendStats.incInt(endReadyForEventsSendId, 1);
-    this.stats.incLong(readyForEventsSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified readyForEvents has ended
-   *
-   * @param startTime the value returned by {@link #startReadyForEvents}.
-   * @param timedOut true if readyForEvents timed out
-   * @param failed true if readyForEvents failed
-   */
-  public void endReadyForEvents(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(readyForEventsInProgressId, -1);
-    int endReadyForEventsId;
-    if (timedOut) {
-      endReadyForEventsId = readyForEventsTimedOutId;
-    } else if (failed) {
-      endReadyForEventsId = readyForEventsFailedId;
-    } else {
-      endReadyForEventsId = readyForEventsId;
-    }
-    this.stats.incInt(endReadyForEventsId, 1);
-    this.stats.incLong(readyForEventsDurationId, duration);
-  }
-
-  /**
-   * Records that the specified makePrimary is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endMakePrimarySend} and
-   * {@link #endMakePrimary}.
-   *
-   * @return the start time of this makePrimary
-   */
-  public long startMakePrimary() {
-    this.stats.incInt(makePrimaryInProgressId, 1);
-    this.sendStats.incInt(makePrimarySendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the makePrimary has completed
-   *
-   * @param startTime the value returned by {@link #startMakePrimary}.
-   * @param failed true if the send of the makePrimary failed
-   */
-  public void endMakePrimarySend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(makePrimarySendInProgressId, -1);
-    int endMakePrimarySendId;
-    if (failed) {
-      endMakePrimarySendId = makePrimarySendFailedId;
-    } else {
-      endMakePrimarySendId = makePrimarySendId;
-    }
-    this.sendStats.incInt(endMakePrimarySendId, 1);
-    this.stats.incLong(makePrimarySendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified makePrimary has ended
-   *
-   * @param startTime the value returned by {@link #startMakePrimary}.
-   * @param timedOut true if makePrimary timed out
-   * @param failed true if makePrimary failed
-   */
-  public void endMakePrimary(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(makePrimaryInProgressId, -1);
-    int endMakePrimaryId;
-    if (timedOut) {
-      endMakePrimaryId = makePrimaryTimedOutId;
-    } else if (failed) {
-      endMakePrimaryId = makePrimaryFailedId;
-    } else {
-      endMakePrimaryId = makePrimaryId;
-    }
-    this.stats.incInt(endMakePrimaryId, 1);
-    this.stats.incLong(makePrimaryDurationId, duration);
-  }
-
-  /**
-   * Records that the specified closeCon is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endCloseConSend} and
-   * {@link #endCloseCon}.
-   *
-   * @return the start time of this closeCon
-   */
-  public long startCloseCon() {
-    this.stats.incInt(closeConInProgressId, 1);
-    this.sendStats.incInt(closeConSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the closeCon has completed
-   *
-   * @param startTime the value returned by {@link #startCloseCon}.
-   * @param failed true if the send of the closeCon failed
-   */
-  public void endCloseConSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(closeConSendInProgressId, -1);
-    int endCloseConSendId;
-    if (failed) {
-      endCloseConSendId = closeConSendFailedId;
-    } else {
-      endCloseConSendId = closeConSendId;
-    }
-    this.sendStats.incInt(endCloseConSendId, 1);
-    this.stats.incLong(closeConSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified closeCon has ended
-   *
-   * @param startTime the value returned by {@link #startCloseCon}.
-   * @param timedOut true if closeCon timed out
-   * @param failed true if closeCon failed
-   */
-  public void endCloseCon(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(closeConInProgressId, -1);
-    int endCloseConId;
-    if (timedOut) {
-      endCloseConId = closeConTimedOutId;
-    } else if (failed) {
-      endCloseConId = closeConFailedId;
-    } else {
-      endCloseConId = closeConId;
-    }
-    this.stats.incInt(endCloseConId, 1);
-    this.stats.incLong(closeConDurationId, duration);
-  }
-
-  /**
-   * Records that the specified primaryAck is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endPrimaryAckSend} and
-   * {@link #endPrimaryAck}.
-   *
-   * @return the start time of this primaryAck
-   */
-  public long startPrimaryAck() {
-    this.stats.incInt(primaryAckInProgressId, 1);
-    this.sendStats.incInt(primaryAckSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the primaryAck has completed
-   *
-   * @param startTime the value returned by {@link #startPrimaryAck}.
-   * @param failed true if the send of the primaryAck failed
-   */
-  public void endPrimaryAckSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(primaryAckSendInProgressId, -1);
-    int endPrimaryAckSendId;
-    if (failed) {
-      endPrimaryAckSendId = primaryAckSendFailedId;
-    } else {
-      endPrimaryAckSendId = primaryAckSendId;
-    }
-    this.sendStats.incInt(endPrimaryAckSendId, 1);
-    this.stats.incLong(primaryAckSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified primaryAck has ended
-   *
-   * @param startTime the value returned by {@link #startPrimaryAck}.
-   * @param timedOut true if primaryAck timed out
-   * @param failed true if primaryAck failed
-   */
-  public void endPrimaryAck(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(primaryAckInProgressId, -1);
-    int endPrimaryAckId;
-    if (timedOut) {
-      endPrimaryAckId = primaryAckTimedOutId;
-    } else if (failed) {
-      endPrimaryAckId = primaryAckFailedId;
-    } else {
-      endPrimaryAckId = primaryAckId;
-    }
-    this.stats.incInt(endPrimaryAckId, 1);
-    this.stats.incLong(primaryAckDurationId, duration);
-  }
-
-  /**
-   * Records that the specified ping is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endPingSend} and
-   * {@link #endPing}.
-   *
-   * @return the start time of this ping
-   */
-  public long startPing() {
-    this.stats.incInt(pingInProgressId, 1);
-    this.sendStats.incInt(pingSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the ping has completed
-   *
-   * @param startTime the value returned by {@link #startPing}.
-   * @param failed true if the send of the ping failed
-   */
-  public void endPingSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(pingSendInProgressId, -1);
-    int endPingSendId;
-    if (failed) {
-      endPingSendId = pingSendFailedId;
-    } else {
-      endPingSendId = pingSendId;
-    }
-    this.sendStats.incInt(endPingSendId, 1);
-    this.stats.incLong(pingSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified ping has ended
-   *
-   * @param startTime the value returned by {@link #startPing}.
-   * @param timedOut true if ping timed out
-   * @param failed true if ping failed
-   */
-  public void endPing(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(pingInProgressId, -1);
-    int endPingId;
-    if (timedOut) {
-      endPingId = pingTimedOutId;
-    } else if (failed) {
-      endPingId = pingFailedId;
-    } else {
-      endPingId = pingId;
-    }
-    this.stats.incInt(endPingId, 1);
-    this.stats.incLong(pingDurationId, duration);
-  }
-
-  /**
-   * Records that the specified registerInstantiators is starting
-   * <p>
-   * Note: for every call of this method the caller must also call
-   * {@link #endRegisterInstantiatorsSend} and {@link #endRegisterInstantiators}.
-   *
-   * @return the start time of this registerInstantiators
-   */
-  public long startRegisterInstantiators() {
-    this.stats.incInt(registerInstantiatorsInProgressId, 1);
-    this.sendStats.incInt(registerInstantiatorsSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public long startRegisterDataSerializers() {
-    this.stats.incInt(registerDataSerializersInProgressId, 1);
-    this.sendStats.incInt(registerDataSerializersSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the registerInstantiators has completed
-   *
-   * @param startTime the value returned by {@link #startRegisterInstantiators}.
-   * @param failed true if the send of the registerInstantiators failed
-   */
-  public void endRegisterInstantiatorsSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(registerInstantiatorsSendInProgressId, -1);
-    int endRegisterInstantiatorsSendId;
-    if (failed) {
-      endRegisterInstantiatorsSendId = registerInstantiatorsSendFailedId;
-    } else {
-      endRegisterInstantiatorsSendId = registerInstantiatorsSendId;
-    }
-    this.sendStats.incInt(endRegisterInstantiatorsSendId, 1);
-    this.stats.incLong(registerInstantiatorsSendDurationId, duration);
-  }
-
-  public void endRegisterDataSerializersSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(registerDataSerializersSendInProgressId, -1);
-    int endDataSerializersSendId;
-    if (failed) {
-      endDataSerializersSendId = registerDataSerializersSendFailedId;
-    } else {
-      endDataSerializersSendId = registerDataSerializersSendId;
-    }
-    this.sendStats.incInt(endDataSerializersSendId, 1);
-    this.stats.incLong(registerDataSerializersSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified registerInstantiators has ended
-   *
-   * @param startTime the value returned by {@link #startRegisterInstantiators}.
-   * @param timedOut true if registerInstantiators timed out
-   * @param failed true if registerInstantiators failed
-   */
-  public void endRegisterInstantiators(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(registerInstantiatorsInProgressId, -1);
-    int endRegisterInstantiatorsId;
-    if (timedOut) {
-      endRegisterInstantiatorsId = registerInstantiatorsTimedOutId;
-    } else if (failed) {
-      endRegisterInstantiatorsId = registerInstantiatorsFailedId;
-    } else {
-      endRegisterInstantiatorsId = registerInstantiatorsId;
-    }
-    this.stats.incInt(endRegisterInstantiatorsId, 1);
-    this.stats.incLong(registerInstantiatorsDurationId, duration);
-  }
-
-  public void endRegisterDataSerializers(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(registerDataSerializersInProgressId, -1);
-    int endRegisterDataSerializersId;
-    if (timedOut) {
-      endRegisterDataSerializersId = registerDataSerializersTimedOutId;
-    } else if (failed) {
-      endRegisterDataSerializersId = registerDataSerializersFailedId;
-    } else {
-      endRegisterDataSerializersId = registerDataSerializersId;
-    }
-    this.stats.incInt(endRegisterDataSerializersId, 1);
-    this.stats.incLong(registerDataSerializersDurationId, duration);
-  }
-
-  /**
-   * Records that the specified putAll is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endPutAllSend} and
-   * {@link #endPutAll}.
-   *
-   * @return the start time of this putAll
-   */
-  public long startPutAll() {
-    this.stats.incInt(putAllInProgressId, 1);
-    this.sendStats.incInt(putAllSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the putAll has completed
-   *
-   * @param startTime the value returned by {@link #startPutAll}.
-   * @param failed true if the send of the putAll failed
-   */
-  public void endPutAllSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(putAllSendInProgressId, -1);
-    int endPutAllSendId;
-    if (failed) {
-      endPutAllSendId = putAllSendFailedId;
-    } else {
-      endPutAllSendId = putAllSendId;
-    }
-    this.sendStats.incInt(endPutAllSendId, 1);
-    this.stats.incLong(putAllSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified putAll has ended
-   *
-   * @param startTime the value returned by {@link #startPutAll}.
-   * @param timedOut true if putAll timed out
-   * @param failed true if putAll failed
-   */
-  public void endPutAll(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(putAllInProgressId, -1);
-    int endPutAllId;
-    if (timedOut) {
-      endPutAllId = putAllTimedOutId;
-    } else if (failed) {
-      endPutAllId = putAllFailedId;
-    } else {
-      endPutAllId = putAllId;
-    }
-    this.stats.incInt(endPutAllId, 1);
-    this.stats.incLong(putAllDurationId, duration);
-  }
-
-  /**
-   * Records that the specified removeAll is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endRemoveAllSend} and
-   * {@link #endRemoveAll}.
-   *
-   * @return the start time of this removeAll
-   */
-  public long startRemoveAll() {
-    this.stats.incInt(removeAllInProgressId, 1);
-    this.sendStats.incInt(removeAllSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the removeAll has completed
-   *
-   * @param startTime the value returned by {@link #startRemoveAll}.
-   * @param failed true if the send of the removeAll failed
-   */
-  public void endRemoveAllSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(removeAllSendInProgressId, -1);
-    int endRemoveAllSendId;
-    if (failed) {
-      endRemoveAllSendId = removeAllSendFailedId;
-    } else {
-      endRemoveAllSendId = removeAllSendId;
-    }
-    this.sendStats.incInt(endRemoveAllSendId, 1);
-    this.stats.incLong(removeAllSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified removeAll has ended
-   *
-   * @param startTime the value returned by {@link #startRemoveAll}.
-   * @param timedOut true if removeAll timed out
-   * @param failed true if removeAll failed
-   */
-  public void endRemoveAll(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(removeAllInProgressId, -1);
-    int endRemoveAllId;
-    if (timedOut) {
-      endRemoveAllId = removeAllTimedOutId;
-    } else if (failed) {
-      endRemoveAllId = removeAllFailedId;
-    } else {
-      endRemoveAllId = removeAllId;
-    }
-    this.stats.incInt(endRemoveAllId, 1);
-    this.stats.incLong(removeAllDurationId, duration);
-  }
-
-  /**
-   * Records that the specified getAll is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endGetAllSend} and
-   * {@link #endGetAll}.
-   *
-   * @return the start time of this getAll
-   */
-  public long startGetAll() {
-    this.stats.incInt(getAllInProgressId, 1);
-    this.sendStats.incInt(getAllSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the getAll has completed
-   *
-   * @param startTime the value returned by {@link #startGetAll}.
-   * @param failed true if the send of the getAll failed
-   */
-  public void endGetAllSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getAllSendInProgressId, -1);
-    int endGetAllSendId;
-    if (failed) {
-      endGetAllSendId = getAllSendFailedId;
-    } else {
-      endGetAllSendId = getAllSendId;
-    }
-    this.sendStats.incInt(endGetAllSendId, 1);
-    this.stats.incLong(getAllSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified getAll has ended
-   *
-   * @param startTime the value returned by {@link #startGetAll}.
-   * @param timedOut true if getAll timed out
-   * @param failed true if getAll failed
-   */
-  public void endGetAll(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getAllInProgressId, -1);
-    int endGetAllId;
-    if (timedOut) {
-      endGetAllId = getAllTimedOutId;
-    } else if (failed) {
-      endGetAllId = getAllFailedId;
-    } else {
-      endGetAllId = getAllId;
-    }
-    this.stats.incInt(endGetAllId, 1);
-    this.stats.incLong(getAllDurationId, duration);
-  }
-
-  public int getConnections() {
-    return this.stats.getInt(connectionsId);
-  }
-
-  public int getOps() {
-    int ops = 0;
-    for (int i = 0; i < opIds.length; i++) {
-      ops += this.stats.getInt(i);
-    }
-    return ops;
-  }
-
-  public void incConnections(int delta) {
-    this.stats.incInt(connectionsId, delta);
-    if (delta > 0) {
-      this.stats.incInt(connectsId, delta);
-    } else if (delta < 0) {
-      this.stats.incInt(disconnectsId, -delta);
-    }
-    this.poolStats.incConnections(delta);
-  }
-
-  private void startClientOp() {
-    this.poolStats.startClientOp();
-  }
-
-  private void endClientOpSend(long duration, boolean failed) {
-    this.poolStats.endClientOpSend(duration, failed);
-  }
-
-  private void endClientOp(long duration, boolean timedOut, boolean failed) {
-    this.poolStats.endClientOp(duration, timedOut, failed);
-  }
-
-  public void close() {
-    this.stats.close();
-    this.sendStats.close();
-  }
-
-  public void incReceivedBytes(long v) {
-    this.stats.incLong(receivedBytesId, v);
-  }
-
-  public void incSentBytes(long v) {
-    this.stats.incLong(sentBytesId, v);
-  }
-
-  public void incMessagesBeingReceived(int bytes) {
-    stats.incInt(messagesBeingReceivedId, 1);
-    if (bytes > 0) {
-      stats.incLong(messageBytesBeingReceivedId, bytes);
-    }
-  }
-
-  public void decMessagesBeingReceived(int bytes) {
-    stats.incInt(messagesBeingReceivedId, -1);
-    if (bytes > 0) {
-      stats.incLong(messageBytesBeingReceivedId, -bytes);
-    }
-  }
-
-  /**
-   * Records that the specified execute Function is starting
-   * <p>
-   * Note: for every call of this method the caller must also call {@link #endExecuteFunctionSend}
-   * and {@link #endExecuteFunction}.
-   *
-   * @return the start time of this ExecuteFunction
-   */
-  public long startExecuteFunction() {
-    this.stats.incInt(executeFunctionInProgressId, 1);
-    this.sendStats.incInt(executeFunctionSendInProgressId, 1);
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the executeFunction has completed
-   *
-   * @param startTime the value returned by {@link #startExecuteFunction}.
-   * @param failed true if the send of the executeFunction failed
-   */
-  public void endExecuteFunctionSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    this.sendStats.incInt(executeFunctionSendInProgressId, -1);
-    int endExecuteFunctionSendId;
-    if (failed) {
-      endExecuteFunctionSendId = executeFunctionSendFailedId;
-    } else {
-      endExecuteFunctionSendId = executeFunctionSendId;
-    }
-    this.sendStats.incInt(endExecuteFunctionSendId, 1);
-    this.stats.incLong(executeFunctionSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified executeFunction has ended
-   *
-   * @param startTime the value returned by {@link #startExecuteFunction}.
-   * @param timedOut true if executeFunction timed out
-   * @param failed true if executeFunction failed
-   */
-  public void endExecuteFunction(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    this.stats.incInt(executeFunctionInProgressId, -1);
-    int endExecuteFunctionId;
-    if (timedOut) {
-      endExecuteFunctionId = executeFunctionTimedOutId;
-    } else if (failed) {
-      endExecuteFunctionId = executeFunctionFailedId;
-    } else {
-      endExecuteFunctionId = executeFunctionId;
-    }
-    this.stats.incInt(endExecuteFunctionId, 1);
-    this.stats.incLong(executeFunctionDurationId, duration);
-  }
-
-  public int getExecuteFunctions() {
-    return this.stats.getInt(executeFunctionId);
-  }
-
-  public long getExecuteFunctionDuration() {
-    return this.stats.getLong(executeFunctionDurationId);
-  }
-
-  public int getGetDurableCqs() {
-    return this.stats.getInt(getDurableCQsId);
-  }
-
-  /**
-   * Records that the specified GetClientPRMetadata operation is starting
-   * <p>
-   * Note: for every call of this method the caller must also call
-   * {@link #endGetClientPRMetadataSend} and {@link #endGetClientPRMetadata}.
-   *
-   * @return the start time of this ExecuteFunction
-   */
-  public long startGetClientPRMetadata() {
-    this.stats.incInt(getClientPRMetadataInProgressId, 1);
-    this.sendStats.incInt(getClientPRMetadataSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the GetClientPRMetadata has completed
-   *
-   * @param startTime the value returned by {@link #startGetClientPRMetadata}.
-   * @param failed true if the send of the GetClientPRMetadata failed
-   */
-  public void endGetClientPRMetadataSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getClientPRMetadataSendInProgressId, -1);
-    int endGetClientPRMetadataSendId;
-    if (failed) {
-      endGetClientPRMetadataSendId = getClientPRMetadataSendFailedId;
-    } else {
-      endGetClientPRMetadataSendId = getClientPRMetadataSendId;
-    }
-    this.sendStats.incInt(endGetClientPRMetadataSendId, 1);
-    this.stats.incLong(getClientPRMetadataSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified GetClientPRMetadata has ended
-   *
-   * @param startTime the value returned by {@link #startGetClientPRMetadata}.
-   * @param timedOut true if GetClientPRMetadata timed out
-   * @param failed true if GetClientPRMetadata failed
-   */
-  public void endGetClientPRMetadata(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getClientPRMetadataInProgressId, -1);
-    int endGetClientPRMetadataId;
-    if (timedOut) {
-      endGetClientPRMetadataId = getClientPRMetadataTimedOutId;
-    } else if (failed) {
-      endGetClientPRMetadataId = getClientPRMetadataFailedId;
-    } else {
-      endGetClientPRMetadataId = getClientPRMetadataId;
-    }
-    this.stats.incInt(endGetClientPRMetadataId, 1);
-    this.stats.incLong(getClientPRMetadataDurationId, duration);
-  }
-
-  /**
-   * Records that the specified GetClientPartitionAttributes operation is starting
-   * <p>
-   * Note: for every call of this method the caller must also call
-   * {@link #endGetClientPartitionAttributesSend} and {@link #endGetClientPartitionAttributes}.
-   *
-   * @return the start time of this GetClientPartitionAttributes
-   */
-  public long startGetClientPartitionAttributes() {
-    this.stats.incInt(getClientPartitionAttributesInProgressId, 1);
-    this.sendStats.incInt(getClientPartitionAttributesSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  /**
-   * Records that the send part of the GetClientPartitionAttributes operation has completed
-   *
-   * @param startTime the value returned by {@link #startGetClientPartitionAttributes}.
-   * @param failed true if the send of the GetClientPartitionAttributes failed
-   */
-  public void endGetClientPartitionAttributesSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getClientPartitionAttributesSendInProgressId, -1);
-    int endGetClientPartitionAttributesSendId;
-    if (failed) {
-      endGetClientPartitionAttributesSendId = getClientPartitionAttributesSendFailedId;
-    } else {
-      endGetClientPartitionAttributesSendId = getClientPartitionAttributesSendId;
-    }
-    this.sendStats.incInt(endGetClientPartitionAttributesSendId, 1);
-    this.stats.incLong(getClientPartitionAttributesSendDurationId, duration);
-  }
-
-  /**
-   * Records that the specified GetClientPartitionAttributes has ended
-   *
-   * @param startTime the value returned by {@link #startGetClientPartitionAttributes}.
-   * @param timedOut true if GetClientPartitionAttributes timed out
-   * @param failed true if GetClientPartitionAttributes failed
-   */
-  public void endGetClientPartitionAttributes(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getClientPartitionAttributesInProgressId, -1);
-    int endGetClientPartitionAttributesId;
-    if (timedOut) {
-      endGetClientPartitionAttributesId = getClientPartitionAttributesTimedOutId;
-    } else if (failed) {
-      endGetClientPartitionAttributesId = getClientPartitionAttributesFailedId;
-    } else {
-      endGetClientPartitionAttributesId = getClientPartitionAttributesId;
-    }
-    this.stats.incInt(endGetClientPartitionAttributesId, 1);
-    this.stats.incLong(getClientPartitionAttributesDurationId, duration);
-  }
-
-  public long startGetPDXTypeById() {
-    this.stats.incInt(getPDXTypeByIdInProgressId, 1);
-    this.sendStats.incInt(getPDXTypeByIdSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public long startGetPDXIdForType() {
-    this.stats.incInt(getPDXIdForTypeInProgressId, 1);
-    this.sendStats.incInt(getPDXIdForTypeSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public void endGetPDXTypeByIdSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getPDXTypeByIdSendInProgressId, -1);
-    int endGetPDXTypeByIdSendId;
-    if (failed) {
-      endGetPDXTypeByIdSendId = getPDXTypeByIdSendFailedId;
-    } else {
-      endGetPDXTypeByIdSendId = getPDXTypeByIdSendId;
-    }
-    this.sendStats.incInt(endGetPDXTypeByIdSendId, 1);
-    this.stats.incLong(getPDXTypeByIdSendDurationId, duration);
-  }
-
-  public void endGetPDXIdForTypeSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(getPDXIdForTypeSendInProgressId, -1);
-    int endGetPDXIdForTypeSendId;
-    if (failed) {
-      endGetPDXIdForTypeSendId = getPDXIdForTypeSendFailedId;
-    } else {
-      endGetPDXIdForTypeSendId = getPDXIdForTypeSendId;
-    }
-    this.stats.incInt(endGetPDXIdForTypeSendId, 1);
-    this.stats.incLong(getPDXIdForTypeSendDurationId, duration);
-  }
-
-  public void endGetPDXTypeById(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getPDXTypeByIdInProgressId, -1);
-    int statId;
-    if (timedOut) {
-      statId = getPDXTypeByIdTimedOutId;
-    } else if (failed) {
-      statId = getPDXTypeByIdFailedId;
-    } else {
-      statId = getPDXTypeByIdId;
-    }
-    this.stats.incInt(statId, 1);
-    this.stats.incLong(getPDXTypeByIdDurationId, duration);
-  }
-
-  public void endGetPDXIdForType(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(getPDXIdForTypeInProgressId, -1);
-    int statId;
-    if (timedOut) {
-      statId = getPDXIdForTypeTimedOutId;
-    } else if (failed) {
-      statId = getPDXIdForTypeFailedId;
-    } else {
-      statId = getPDXIdForTypeId;
-    }
-    this.stats.incInt(statId, 1);
-    this.stats.incLong(getPDXIdForTypeDurationId, duration);
-  }
-
-  public long startAddPdxType() {
-    this.stats.incInt(addPdxTypeInProgressId, 1);
-    this.sendStats.incInt(addPdxTypeSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public void endAddPdxTypeSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(addPdxTypeSendInProgressId, -1);
-    int endAddPdxTypeSendId;
-    if (failed) {
-      endAddPdxTypeSendId = addPdxTypeSendFailedId;
-    } else {
-      endAddPdxTypeSendId = addPdxTypeSendId;
-    }
-    this.sendStats.incInt(endAddPdxTypeSendId, 1);
-    this.stats.incLong(addPdxTypeSendDurationId, duration);
-  }
-
-  public void endAddPdxType(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(addPdxTypeInProgressId, -1);
-    int statId;
-    if (timedOut) {
-      statId = addPdxTypeTimedOutId;
-    } else if (failed) {
-      statId = addPdxTypeFailedId;
-    } else {
-      statId = addPdxTypeId;
-    }
-    this.stats.incInt(statId, 1);
-    this.stats.incLong(addPdxTypeDurationId, duration);
-  }
-
-  public long startSize() {
-    this.stats.incInt(sizeInProgressId, 1);
-    this.sendStats.incInt(sizeSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public void endSizeSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(sizeSendInProgressId, -1);
-    int endSizeSendId;
-    if (failed) {
-      endSizeSendId = sizeSendFailedId;
-    } else {
-      endSizeSendId = sizeSendId;
-    }
-    this.sendStats.incInt(endSizeSendId, 1);
-    this.stats.incLong(sizeSendDurationId, duration);
-
-  }
-
-  public void endSize(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(sizeInProgressId, -1);
-    int endSizeId;
-    if (timedOut) {
-      endSizeId = sizeTimedOutId;
-    } else if (failed) {
-      endSizeId = sizeFailedId;
-    } else {
-      endSizeId = sizeId;
-    }
-    this.stats.incInt(endSizeId, 1);
-    this.stats.incLong(sizeDurationId, duration);
-  }
-
-
-
-  public long startInvalidate() {
-    this.stats.incInt(invalidateInProgressId, 1);
-    this.sendStats.incInt(invalidateSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public void endInvalidateSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(invalidateSendInProgressId, -1);
-    int endInvalidateSendId;
-    if (failed) {
-      endInvalidateSendId = invalidateSendFailedId;
-    } else {
-      endInvalidateSendId = invalidateSendId;
-    }
-    this.sendStats.incInt(endInvalidateSendId, 1);
-    this.stats.incLong(invalidateSendDurationId, duration);
-  }
-
-  public void endInvalidate(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(invalidateInProgressId, -1);
-    int endInvalidateId;
-    if (timedOut) {
-      endInvalidateId = invalidateTimedOutId;
-    } else if (failed) {
-      endInvalidateId = invalidateFailedId;
-    } else {
-      endInvalidateId = invalidateId;
-    }
-    this.stats.incInt(endInvalidateId, 1);
-    this.stats.incLong(invalidateDurationId, duration);
-  }
-
-  public long startCommit() {
-    this.stats.incInt(commitInProgressId, 1);
-    this.sendStats.incInt(commitSendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public void endCommitSend(long startTime, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOpSend(duration, failed);
-    this.sendStats.incInt(commitSendInProgressId, -1);
-    int endcommitSendId;
-    if (failed) {
-      endcommitSendId = commitSendFailedId;
-    } else {
-      endcommitSendId = commitSendId;
-    }
-    this.sendStats.incInt(endcommitSendId, 1);
-    this.stats.incLong(commitSendDurationId, duration);
-  }
-
-  public void endCommit(long startTime, boolean timedOut, boolean failed) {
-    long duration = getStatTime() - startTime;
-    endClientOp(duration, timedOut, failed);
-    this.stats.incInt(commitInProgressId, -1);
-    int endcommitId;
-    if (timedOut) {
-      endcommitId = commitTimedOutId;
-    } else if (failed) {
-      endcommitId = commitFailedId;
-    } else {
-      endcommitId = commitId;
-    }
-    this.stats.incInt(endcommitId, 1);
-    this.stats.incLong(commitDurationId, duration);
-  }
-
-
-  public long startGetEntry() {
-    this.stats.incInt(getEntryInProgressId, 1);
-    this.sendStats.incInt(getEntrySendInProgressId, 1);
-    startClientOp();
-    return getStatTime();
-  }
-
-  public void endGetEntrySend(long startTime, boolean failed) {
... 47086 lines suppressed ...