You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jb...@apache.org on 2017/11/02 23:08:42 UTC

[geode-native] 01/02: GEODE-3754: Replace all public API function out parameters with return values

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

jbarrett pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git

commit 89d6d3f0603156c682889a80cca2c4903d7af9f3
Author: David Kimura <dk...@pivotal.io>
AuthorDate: Mon Oct 9 16:12:45 2017 -0700

    GEODE-3754: Replace all public API function out parameters with return values
---
 clicache/integration-test/CacheHelperN.cs          |   2 +-
 clicache/integration-test/DistOpsStepsN.cs         |   4 +-
 .../integration-test/ThinClientListenerWriterN.cs  |   2 +-
 clicache/integration-test/ThinClientPoolTestsN.cs  |   6 +-
 ...inClientRegionInterestFailoverInterest2Tests.cs |   2 +-
 ...hinClientRegionInterestFailoverInterestTests.cs |   2 +-
 ...ientRegionInterestFailoverRegexInterestTests.cs |   2 +-
 .../ThinClientRegionInterestList2Tests.cs          |   2 +-
 .../ThinClientRegionInterestListTests.cs           |   2 +-
 .../ThinClientRegionInterestListWithPdxTests.cs    |   2 +-
 .../ThinClientRegionInterestNotifyTests.cs         |   2 +-
 .../ThinClientRegionInterestRegexInterest2Tests.cs |   2 +-
 .../ThinClientRegionInterestRegexInterest3Tests.cs |   2 +-
 .../ThinClientRegionInterestRegexInterestTests.cs  |   2 +-
 ...ThinClientRegionInterestResultPolicyInvTests.cs |   2 +-
 .../integration-test/ThinClientRegionTestsN.cs     |  52 +---
 clicache/src/Cache.cpp                             |   2 +-
 clicache/src/CacheableBuiltins.hpp                 |   2 +-
 clicache/src/CqAttributes.cpp                      |   2 +-
 clicache/src/DataInput.cpp                         |   2 +-
 clicache/src/DataOutput.cpp                        |   2 +-
 clicache/src/DistributedSystem.cpp                 |   2 +-
 clicache/src/GeodeClassIds.hpp                     |   2 +-
 clicache/src/IResultCollector.hpp                  |   2 +-
 clicache/src/ISubscriptionService.hpp              |  65 +---
 clicache/src/LocalRegion.cpp                       |  16 +-
 clicache/src/QueryService.cpp                      |   4 +-
 clicache/src/Region.cpp                            | 145 +++------
 clicache/src/Region.hpp                            |  11 +-
 clicache/src/RegionEntry.cpp                       |   2 +-
 clicache/src/ResultCollector.cpp                   |   2 +-
 clicache/src/ResultCollector.hpp                   |   2 +-
 clicache/src/Serializable.cpp                      |   8 +-
 clicache/src/Serializable.hpp                      |   2 +-
 clicache/src/impl/AuthenticatedCache.cpp           |   2 +-
 clicache/src/impl/ManagedPersistenceManager.cpp    |   2 +-
 clicache/src/impl/ManagedPersistenceManager.hpp    |   2 +-
 clicache/src/impl/ManagedResultCollector.cpp       |   2 +-
 clicache/src/impl/ManagedResultCollector.hpp       |   2 +-
 clicache/src/impl/ManagedVisitor.cpp               |   2 +-
 clicache/src/impl/ManagedVisitor.hpp               |   2 +-
 clicache/src/impl/PersistenceManagerProxy.hpp      |   4 +-
 clicache/src/impl/ResultCollectorProxy.hpp         |   6 +-
 cppcache/include/geode/Cache.hpp                   |  26 +-
 cppcache/include/geode/CacheableBuiltins.hpp       |   6 +-
 cppcache/include/geode/CqAttributes.hpp            |   2 +-
 cppcache/include/geode/DataInput.hpp               | 255 ++++++----------
 cppcache/include/geode/Execution.hpp               |   5 +-
 cppcache/include/geode/ExpirationAttributes.hpp    |   2 +-
 cppcache/include/geode/FunctionService.hpp         |   2 +-
 cppcache/include/geode/GeodeTypeIds.hpp            |   2 +-
 cppcache/include/geode/PdxInstance.hpp             |  61 +---
 cppcache/include/geode/PdxInstanceFactory.hpp      |   4 +-
 cppcache/include/geode/PdxWriter.hpp               |   2 +-
 cppcache/include/geode/PersistenceManager.hpp      |   5 +-
 cppcache/include/geode/Properties.hpp              |   3 +-
 cppcache/include/geode/QueryService.hpp            |   7 +-
 cppcache/include/geode/Region.hpp                  |  39 +--
 cppcache/include/geode/RegionEntry.hpp             |   2 +-
 cppcache/include/geode/RegionService.hpp           |   2 +-
 cppcache/include/geode/ResultCollector.hpp         |   2 +-
 cppcache/include/geode/Serializer.hpp              |  41 ++-
 cppcache/include/geode/TypeRegistry.hpp            |   4 +-
 cppcache/include/geode/WritablePdxInstance.hpp     |  17 +-
 .../integration-test/BuiltinCacheableWrappers.hpp  |  14 +-
 cppcache/integration-test/DeltaEx.hpp              |   8 +-
 cppcache/integration-test/ThinClientDistOps.hpp    |   5 +-
 cppcache/integration-test/ThinClientDistOps2.hpp   | 246 ++++++---------
 cppcache/integration-test/ThinClientFailover2.hpp  |  13 +-
 .../ThinClientFailoverInterestAllWithCache.hpp     |  42 +--
 .../integration-test/ThinClientFailoverRegex.hpp   |   8 +-
 cppcache/integration-test/ThinClientInterest1.hpp  |   2 +-
 .../integration-test/ThinClientListenerWriter.hpp  |   4 +-
 .../integration-test/ThinClientNotification.hpp    |   8 +-
 cppcache/integration-test/ThinClientPutAll.hpp     |  28 +-
 .../ThinClientPutAllWithCallBack.hpp               |  15 +-
 cppcache/integration-test/ThinClientPutGetAll.hpp  |  62 ++--
 cppcache/integration-test/ThinClientSSL.hpp        |   8 +-
 .../integration-test/ThinClientSSLWithPassword.hpp |   8 +-
 .../integration-test/ThinClientSecurityHelper.hpp  |   4 +-
 .../integration-test/ThinClientTransactions.hpp    |   5 +-
 .../integration-test/ThinClientTransactionsXA.hpp  |   5 +-
 cppcache/integration-test/fw_dunit.cpp             |   9 +-
 cppcache/integration-test/testCache.cpp            |   6 +-
 cppcache/integration-test/testDataOutput.cpp       |  26 +-
 cppcache/integration-test/testExpiration.cpp       |   3 +-
 .../integration-test/testOverflowPutGetSqLite.cpp  |  30 +-
 cppcache/integration-test/testRegionMap.cpp        |  30 +-
 cppcache/integration-test/testSerialization.cpp    |   5 +-
 .../integration-test/testThinClientBigValue.cpp    |  45 +--
 cppcache/integration-test/testThinClientCq.cpp     |  46 ++-
 .../integration-test/testThinClientCqFailover.cpp  |   6 +-
 .../testThinClientCqHAFailover.cpp                 |   6 +-
 .../testThinClientExecuteFunctionPrSHOP.cpp        |   4 +-
 .../testThinClientFixedPartitionResolver.cpp       |  13 +-
 .../testThinClientGetInterests.cpp                 |   9 +-
 .../integration-test/testThinClientHADistOps.cpp   |   5 +-
 .../testThinClientHAFailoverRegex.cpp              |   5 +-
 .../integration-test/testThinClientHeapLRU.cpp     |   3 +-
 .../testThinClientInterest1Cacheless.cpp           |   2 +-
 .../testThinClientInterest1_Bug1001.cpp            |   2 +-
 .../testThinClientInterestNotify.cpp               |   2 +-
 .../testThinClientLRUExpiration.cpp                |   8 +-
 .../integration-test/testThinClientPRSingleHop.cpp |  36 +--
 .../testThinClientPRSingleHopServerGroup.cpp       |  15 +-
 .../integration-test/testThinClientPdxInstance.cpp | 157 ++++------
 .../integration-test/testThinClientPdxTests.cpp    |   3 +-
 .../testThinClientPoolExecuteFunction.cpp          |   2 +-
 .../testThinClientPoolExecuteFunctionPrSHOP.cpp    |   2 +-
 ...hinClientPoolExecuteFunctionThrowsException.cpp |   2 +-
 .../testThinClientPoolExecuteHAFunction.cpp        |   2 +-
 .../testThinClientPoolExecuteHAFunctionPrSHOP.cpp  |   2 +-
 .../testThinClientPoolRedundancy.cpp               |  24 +-
 .../testThinClientRemoteQuerySS.cpp                |  51 ++--
 .../integration-test/testThinClientRemoveOps.cpp   |  10 +-
 .../testThinClientSSLAuthCorrupt.cpp               |   2 +-
 .../integration-test/testThinClientSSLAuthFail.cpp |   2 +-
 .../testThinClientSSLAuthUntrusted.cpp             |   2 +-
 .../testThinClientSSLWithSecurityAuthz.cpp         |  20 +-
 .../testThinClientSecurityAuthorization.cpp        |  27 +-
 .../testThinClientSecurityAuthorizationMU.cpp      |  29 +-
 .../testThinClientSecurityCQAuthorizationMU.cpp    |  14 +-
 ...tThinClientSecurityDurableCQAuthorizationMU.cpp |  21 +-
 .../testThinClientSecurityPostAuthorization.cpp    |  42 +--
 .../integration-test/testThinClientStatistics.cpp  |   2 +-
 cppcache/integration-test/testUtils.hpp            |   9 +-
 .../testXmlCacheCreationWithOverFlow.cpp           |   9 +-
 .../testXmlCacheCreationWithPools.cpp              |  13 +-
 cppcache/src/BucketServerLocation.hpp              |  10 +-
 cppcache/src/Cache.cpp                             |   4 +-
 cppcache/src/CacheImpl.cpp                         |   4 +-
 cppcache/src/CacheableBuiltins.cpp                 |   2 +-
 cppcache/src/CacheableDate.cpp                     |   2 +-
 cppcache/src/CacheableEnum.cpp                     |   6 +-
 cppcache/src/CacheableFileName.cpp                 |   2 +-
 cppcache/src/CacheableObjectArray.cpp              |  11 +-
 cppcache/src/CacheableObjectPartList.cpp           |  17 +-
 cppcache/src/CacheableToken.cpp                    |   2 +-
 cppcache/src/ClientConnectionResponse.cpp          |   2 +-
 cppcache/src/ClientHealthStats.cpp                 |  14 +-
 cppcache/src/ClientProxyMembershipID.cpp           |  45 ++-
 cppcache/src/ConcurrentEntriesMap.cpp              |  18 +-
 cppcache/src/ConcurrentEntriesMap.hpp              |   6 +-
 cppcache/src/CqAttributesFactory.cpp               |   3 +-
 cppcache/src/CqAttributesImpl.cpp                  |  15 +-
 cppcache/src/CqAttributesImpl.hpp                  |   2 +-
 cppcache/src/CqQueryImpl.cpp                       |   5 +-
 cppcache/src/CqService.cpp                         |  36 +--
 cppcache/src/CqService.hpp                         |   2 +-
 cppcache/src/DataInput.cpp                         |   4 +-
 cppcache/src/DiskStoreId.hpp                       |   4 +-
 cppcache/src/EntriesMap.hpp                        |   6 +-
 cppcache/src/EnumInfo.cpp                          |   6 +-
 cppcache/src/EventId.cpp                           |  28 +-
 cppcache/src/ExecutionImpl.cpp                     |  18 +-
 cppcache/src/ExecutionImpl.hpp                     |   5 +-
 cppcache/src/ExpirationAttributes.cpp              |   2 +-
 cppcache/src/FarSideEntryOp.cpp                    | 100 ++----
 cppcache/src/FixedPartitionAttributesImpl.hpp      |   8 +-
 cppcache/src/FunctionService.cpp                   |  25 +-
 cppcache/src/GetAllServersRequest.cpp              |   2 +-
 cppcache/src/GetAllServersResponse.cpp             |   4 +-
 cppcache/src/LocalRegion.cpp                       | 187 ++++--------
 cppcache/src/LocalRegion.hpp                       |  32 +-
 cppcache/src/LocatorListResponse.cpp               |   5 +-
 cppcache/src/MapSegment.cpp                        |   6 +-
 cppcache/src/MapSegment.hpp                        |   6 +-
 cppcache/src/NoResult.hpp                          |   2 +-
 cppcache/src/PdxFieldType.cpp                      |  15 +-
 cppcache/src/PdxHelper.cpp                         |  14 +-
 cppcache/src/PdxInstanceFactoryImpl.cpp            |  15 +-
 cppcache/src/PdxInstanceFactoryImpl.hpp            |   4 +-
 cppcache/src/PdxInstanceImpl.cpp                   | 173 +++--------
 cppcache/src/PdxInstanceImpl.hpp                   |  67 +---
 cppcache/src/PdxLocalReader.cpp                    |  40 +--
 cppcache/src/PdxLocalWriter.cpp                    |   6 +-
 cppcache/src/PdxLocalWriter.hpp                    |   2 +-
 cppcache/src/PdxRemoteReader.cpp                   | 294 ------------------
 cppcache/src/PdxRemoteWriter.cpp                   |   5 +-
 cppcache/src/PdxRemoteWriter.hpp                   |   2 +-
 cppcache/src/PdxType.cpp                           |  21 +-
 cppcache/src/PdxWriterWithTypeCollector.cpp        |   6 +-
 cppcache/src/PdxWriterWithTypeCollector.hpp        |   2 +-
 cppcache/src/Properties.cpp                        |  11 +-
 cppcache/src/ProxyCache.cpp                        |  41 +--
 cppcache/src/ProxyCache.hpp                        |  13 +-
 cppcache/src/ProxyRegion.cpp                       |  29 --
 cppcache/src/ProxyRegion.hpp                       | 131 ++++----
 cppcache/src/ProxyRemoteQueryService.cpp           |   8 +-
 cppcache/src/ProxyRemoteQueryService.hpp           |   7 +-
 cppcache/src/QueueConnectionResponse.cpp           |   5 +-
 cppcache/src/RegionAttributes.cpp                  |  39 ++-
 cppcache/src/RegionCommit.cpp                      |  13 +-
 cppcache/src/RegionEntry.cpp                       |   4 +-
 cppcache/src/RegionInternal.cpp                    |   2 -
 cppcache/src/RegionInternal.hpp                    |   9 +-
 cppcache/src/RemoteQueryService.cpp                |  12 +-
 cppcache/src/RemoteQueryService.hpp                |   7 +-
 cppcache/src/ResultCollector.cpp                   |   2 +-
 cppcache/src/SerializationRegistry.cpp             |  28 +-
 cppcache/src/ServerLocation.hpp                    |   4 +-
 cppcache/src/Struct.cpp                            |  30 +-
 cppcache/src/SystemProperties.cpp                  |   2 +-
 cppcache/src/TXCommitMessage.cpp                   |  61 +---
 cppcache/src/TcrConnection.cpp                     |  87 ++----
 cppcache/src/TcrMessage.cpp                        | 339 +++++++--------------
 cppcache/src/TcrMessage.hpp                        |  22 +-
 cppcache/src/ThinClientLocatorHelper.cpp           |  21 +-
 cppcache/src/ThinClientRegion.cpp                  | 248 +++++++--------
 cppcache/src/ThinClientRegion.hpp                  |   8 +-
 cppcache/src/TransactionalOperation.cpp            |  36 ++-
 cppcache/src/TypeRegistry.cpp                      |   2 +-
 cppcache/src/VersionTag.cpp                        |  20 +-
 cppcache/src/VersionedCacheableObjectPartList.cpp  |  44 +--
 cppcache/test/ClientConnectionResponseTest.cpp     |  50 +++
 cppcache/test/DataInputTest.cpp                    |  78 ++---
 cppcache/test/StructSetTest.cpp                    |  35 +--
 sqliteimpl/SqLiteImpl.cpp                          |   3 +-
 sqliteimpl/SqLiteImpl.hpp                          |   2 +-
 tests/cli/NewFwkLib/CacheServer.cs                 |   3 +-
 tests/cli/NewFwkLib/DeltaTest/DeltaTest.cs         |   2 +-
 tests/cli/NewFwkLib/PdxTest/PdxTests.cs            |   2 +-
 tests/cli/NewFwkLib/PerfTest/PerfTests.cs          |   4 +-
 tests/cli/NewFwkLib/ResumableTx/ResumableTx.cs     |   2 +-
 tests/cpp/fwklib/FrameworkTest.cpp                 |   4 +-
 tests/cpp/fwklib/PerfFwk.hpp                       |   4 +-
 tests/cpp/security/Security.cpp                    |   8 +-
 tests/cpp/testobject/ArrayOfByte.hpp               |  11 +-
 tests/cpp/testobject/BatchObject.cpp               |   8 +-
 tests/cpp/testobject/DeltaFastAssetAccount.cpp     |  16 +-
 tests/cpp/testobject/DeltaPSTObject.cpp            |  12 +-
 tests/cpp/testobject/DeltaTestImpl.cpp             |  22 +-
 tests/cpp/testobject/EqStruct.cpp                  |  38 +--
 tests/cpp/testobject/FastAsset.cpp                 |   4 +-
 tests/cpp/testobject/FastAssetAccount.cpp          |  10 +-
 tests/cpp/testobject/InvalidPdxUsage.cpp           |   2 +-
 tests/cpp/testobject/InvalidPdxUsage.hpp           |   6 +-
 tests/cpp/testobject/NestedPdxObject.cpp           |   2 +-
 tests/cpp/testobject/NestedPdxObject.hpp           |   2 +-
 tests/cpp/testobject/PSTObject.cpp                 |   8 +-
 tests/cpp/testobject/PdxType.cpp                   |   2 +-
 tests/cpp/testobject/PdxType.hpp                   |   8 +-
 tests/cpp/testobject/PdxVersioned1.cpp             |   2 +-
 tests/cpp/testobject/PdxVersioned1.hpp             |   2 +-
 tests/cpp/testobject/PdxVersioned2.cpp             |   2 +-
 tests/cpp/testobject/PdxVersioned2.hpp             |   2 +-
 tests/cpp/testobject/Portfolio.cpp                 |  16 +-
 tests/cpp/testobject/Position.cpp                  |  30 +-
 tests/cpp/testobject/TestObject1.cpp               |   4 +-
 tests/cpp/testobject/VariousPdxTypes.cpp           |  12 +-
 250 files changed, 1837 insertions(+), 3312 deletions(-)

diff --git a/clicache/integration-test/CacheHelperN.cs b/clicache/integration-test/CacheHelperN.cs
index 5270e58..3785754 100644
--- a/clicache/integration-test/CacheHelperN.cs
+++ b/clicache/integration-test/CacheHelperN.cs
@@ -613,7 +613,7 @@ namespace Apache.Geode.Client.UnitTests
           m_cache = cf
               .SetPdxIgnoreUnreadFields(PdxIgnoreUnreadFields)
               .SetPdxReadSerialized(PdxReadSerialized)
-							.SetAuthInitialize(authIntialize)
+              .SetAuthInitialize(authIntialize)
               .Create();
 
           PdxIgnoreUnreadFields = false; //reset so next test will have default value
diff --git a/clicache/integration-test/DistOpsStepsN.cs b/clicache/integration-test/DistOpsStepsN.cs
index 91868cd..365e05b 100644
--- a/clicache/integration-test/DistOpsStepsN.cs
+++ b/clicache/integration-test/DistOpsStepsN.cs
@@ -682,13 +682,13 @@ namespace Apache.Geode.Client.UnitTests
     public virtual void RegisterAllKeysR0WithoutValues()
     {
       IRegion<object, object> region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
-      region0.GetSubscriptionService().RegisterAllKeys(false, null, false, false);
+      region0.GetSubscriptionService().RegisterAllKeys(false, false, false);
     }
 
     public virtual void RegisterAllKeysR1WithoutValues()
     {
       IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
-      region1.GetSubscriptionService().RegisterAllKeys(false, null, false, false);
+      region1.GetSubscriptionService().RegisterAllKeys(false, false, false);
     }
 
     public virtual void StepThree()
diff --git a/clicache/integration-test/ThinClientListenerWriterN.cs b/clicache/integration-test/ThinClientListenerWriterN.cs
index 2a7ccfc..3c0afc5 100644
--- a/clicache/integration-test/ThinClientListenerWriterN.cs
+++ b/clicache/integration-test/ThinClientListenerWriterN.cs
@@ -105,7 +105,7 @@ namespace Apache.Geode.Client.UnitTests
     public void RegisterAllKeysRN()
     {
       Region region = CacheHelper.GetVerifyRegion<object, object>(RegionName);
-      region.GetSubscriptionService().RegisterAllKeys(false, null, false, false);
+      region.GetSubscriptionService().RegisterAllKeys(false, false, false);
     }
 
     public void CallOp()
diff --git a/clicache/integration-test/ThinClientPoolTestsN.cs b/clicache/integration-test/ThinClientPoolTestsN.cs
index d2a3538..726302a 100644
--- a/clicache/integration-test/ThinClientPoolTestsN.cs
+++ b/clicache/integration-test/ThinClientPoolTestsN.cs
@@ -717,11 +717,11 @@ namespace Apache.Geode.Client.UnitTests
     public void registerAllKeys()
     {
       Region region1 = CacheHelper.GetVerifyRegion<object, object>("PoolRegion1");
-      region1.GetSubscriptionService().RegisterAllKeys(false, null, true);
+      region1.GetSubscriptionService().RegisterAllKeys(false, true);
       Region region2 = CacheHelper.GetVerifyRegion<object, object>("PoolRegion2");
-      region2.GetSubscriptionService().RegisterAllKeys(false, null, true);
+      region2.GetSubscriptionService().RegisterAllKeys(false, true);
       Region region3 = CacheHelper.GetVerifyRegion<object, object>("PoolRegion3");
-      region3.GetSubscriptionService().RegisterAllKeys(false, null, true);
+      region3.GetSubscriptionService().RegisterAllKeys(false, true);
     }
 
     void runPoolRedundancy()
diff --git a/clicache/integration-test/ThinClientRegionInterestFailoverInterest2Tests.cs b/clicache/integration-test/ThinClientRegionInterestFailoverInterest2Tests.cs
index 3c89f2b..5131e8d 100644
--- a/clicache/integration-test/ThinClientRegionInterestFailoverInterest2Tests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestFailoverInterest2Tests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestFailoverInterestTests.cs b/clicache/integration-test/ThinClientRegionInterestFailoverInterestTests.cs
index 711da57..b5d6a93 100644
--- a/clicache/integration-test/ThinClientRegionInterestFailoverInterestTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestFailoverInterestTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestFailoverRegexInterestTests.cs b/clicache/integration-test/ThinClientRegionInterestFailoverRegexInterestTests.cs
index 26475c3..d7b264f 100644
--- a/clicache/integration-test/ThinClientRegionInterestFailoverRegexInterestTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestFailoverRegexInterestTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestList2Tests.cs b/clicache/integration-test/ThinClientRegionInterestList2Tests.cs
index 059f3dd..efe61bd 100644
--- a/clicache/integration-test/ThinClientRegionInterestList2Tests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestList2Tests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestListTests.cs b/clicache/integration-test/ThinClientRegionInterestListTests.cs
index 79e92ef..a6ea068 100644
--- a/clicache/integration-test/ThinClientRegionInterestListTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestListTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestListWithPdxTests.cs b/clicache/integration-test/ThinClientRegionInterestListWithPdxTests.cs
index ff0454f..7911eab 100644
--- a/clicache/integration-test/ThinClientRegionInterestListWithPdxTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestListWithPdxTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestNotifyTests.cs b/clicache/integration-test/ThinClientRegionInterestNotifyTests.cs
index 4c8b3bd..6035772 100644
--- a/clicache/integration-test/ThinClientRegionInterestNotifyTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestNotifyTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestRegexInterest2Tests.cs b/clicache/integration-test/ThinClientRegionInterestRegexInterest2Tests.cs
index 351e9b2..8a07787 100644
--- a/clicache/integration-test/ThinClientRegionInterestRegexInterest2Tests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestRegexInterest2Tests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestRegexInterest3Tests.cs b/clicache/integration-test/ThinClientRegionInterestRegexInterest3Tests.cs
index a4c7a82..cbc7e60 100644
--- a/clicache/integration-test/ThinClientRegionInterestRegexInterest3Tests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestRegexInterest3Tests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestRegexInterestTests.cs b/clicache/integration-test/ThinClientRegionInterestRegexInterestTests.cs
index ec8bec9..c0ae9ca 100644
--- a/clicache/integration-test/ThinClientRegionInterestRegexInterestTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestRegexInterestTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionInterestResultPolicyInvTests.cs b/clicache/integration-test/ThinClientRegionInterestResultPolicyInvTests.cs
index 05f5c08..f725810 100644
--- a/clicache/integration-test/ThinClientRegionInterestResultPolicyInvTests.cs
+++ b/clicache/integration-test/ThinClientRegionInterestResultPolicyInvTests.cs
@@ -489,7 +489,7 @@ namespace Apache.Geode.Client.UnitTests
         keys.Add(key);
       }
       region.GetSubscriptionService().RegisterKeys(keys.ToArray(), false, false, receiveValues);
-      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, null, false, receiveValues);
+      region.GetSubscriptionService().RegisterRegex("key-regex.*", false, false, receiveValues);
     }
 
     public void DoUnregister()
diff --git a/clicache/integration-test/ThinClientRegionTestsN.cs b/clicache/integration-test/ThinClientRegionTestsN.cs
index 737ebac..110e7b7 100644
--- a/clicache/integration-test/ThinClientRegionTestsN.cs
+++ b/clicache/integration-test/ThinClientRegionTestsN.cs
@@ -490,24 +490,14 @@ namespace Apache.Geode.Client.UnitTests
       Util.Log("RegexInterestAllStep2 Enters.");
       IRegion<object, object> region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
       IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
-      List<object> resultKeys = new List<object>();
       //CreateEntry(m_regionNames[0], m_keys[1], m_vals[1]);
       //CreateEntry(m_regionNames[1], m_keys[1], m_vals[1]);
-      region0.GetSubscriptionService().RegisterAllKeys(false, resultKeys, true);
-      region1.GetSubscriptionService().RegisterAllKeys(false, null, true);
+      region0.GetSubscriptionService().RegisterAllKeys(false, true);
+      region1.GetSubscriptionService().RegisterAllKeys(false, true);
       if (region0.Count != 1 || region1.Count != 1)
       {
         Assert.Fail("Expected one entry in region");
       }
-      if (resultKeys.Count != 1)
-      {
-        Assert.Fail("Expected one key from registerAllKeys");
-      }
-      object value = resultKeys[0];
-      if (!(value.ToString().Equals(m_keys[0])))
-      {
-        Assert.Fail("Unexpected key from RegisterAllKeys");
-      }
       Util.Log("RegexInterestAllStep2 complete.");
     }
 
@@ -718,13 +708,12 @@ namespace Apache.Geode.Client.UnitTests
       region1.GetSubscriptionService().UnregisterAllKeys();
       region0.GetLocalView().DestroyRegion();
       region1.GetLocalView().DestroyRegion();
-      List<object> resultKeys = new List<object>();
       CreateTCRegions_Pool(RegionNames, locators, "__TESTPOOL1_", true);
       region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
       region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
       CreateEntry(m_regionNames[0], m_keys[0], m_nvals[0]);
-      region0.GetSubscriptionService().RegisterRegex(".*", false, resultKeys, true);
-      region1.GetSubscriptionService().RegisterRegex(".*", false, null, true);
+      region0.GetSubscriptionService().RegisterRegex(".*", false, true);
+      region1.GetSubscriptionService().RegisterRegex(".*", false, true);
       if (region0.Count != 1)
       {
         Assert.Fail("Expected one entry in region");
@@ -733,15 +722,6 @@ namespace Apache.Geode.Client.UnitTests
       {
         Assert.Fail("Expected one entry in region");
       }
-      if (resultKeys.Count != 1)
-      {
-        Assert.Fail("Expected one key from registerAllKeys");
-      }
-      object value = resultKeys[0];
-      if (!(value.ToString().Equals(m_keys[0])))
-      {
-        Assert.Fail("Unexpected key from RegisterAllKeys");
-      }
       VerifyCreated(m_regionNames[0], m_keys[0]);
       VerifyCreated(m_regionNames[1], m_keys[2]);
       VerifyEntry(m_regionNames[0], m_keys[0], m_nvals[0]);
@@ -751,9 +731,8 @@ namespace Apache.Geode.Client.UnitTests
 
     public void RegexInterestAllStep4()
     {
-      List<object> resultKeys = new List<object>();
       IRegion<object, object> region0 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[0]);
-      region0.GetSubscriptionService().RegisterAllKeys(false, resultKeys, false);
+      region0.GetSubscriptionService().RegisterAllKeys(false, false);
       if (region0.Count != 1)
       {
         Assert.Fail("Expected one entry in region");
@@ -767,19 +746,9 @@ namespace Apache.Geode.Client.UnitTests
       {
         Assert.Fail("Expected region to not contain the value");
       }
-      if (resultKeys.Count != 1)
-      {
-        Assert.Fail("Expected one key from registerAllKeys");
-      }
-      object value = resultKeys[0];
-      if (!(value.ToString().Equals(m_keys[0])))
-      {
-        Assert.Fail("Unexpected key from RegisterAllKeys");
-      }
 
       IRegion<object, object> region1 = CacheHelper.GetVerifyRegion<object, object>(m_regionNames[1]);
-      resultKeys.Clear();
-      region1.GetSubscriptionService().RegisterRegex(".*", false, resultKeys, false);
+      region1.GetSubscriptionService().RegisterRegex(".*", false, false);
 
       if (region1.Count != 1)
       {
@@ -795,15 +764,6 @@ namespace Apache.Geode.Client.UnitTests
       {
         Assert.Fail("Expected region to not contain the value");
       }
-      if (resultKeys.Count != 1)
-      {
-        Assert.Fail("Expected one key from registerAllKeys");
-      }
-      value = resultKeys[0];
-      if (!(value.ToString().Equals(m_keys[2])))
-      {
-        Assert.Fail("Unexpected key from RegisterAllKeys");
-      }
       CreateEntry(m_regionNames[0], m_keys[1], m_vals[1]);
       UpdateEntry(m_regionNames[0], m_keys[0], m_vals[0], false);
       CreateEntry(m_regionNames[1], m_keys[3], m_vals[3]);
diff --git a/clicache/src/Cache.cpp b/clicache/src/Cache.cpp
index 8fd30c4..d15c25b 100644
--- a/clicache/src/Cache.cpp
+++ b/clicache/src/Cache.cpp
@@ -184,7 +184,7 @@ namespace Apache
         apache::geode::client::VectorOfRegion vrr;
         try
         {
-          m_nativeptr->get()->rootRegions( vrr );
+			vrr = m_nativeptr->get()->rootRegions( );
         }
         finally
         {
diff --git a/clicache/src/CacheableBuiltins.hpp b/clicache/src/CacheableBuiltins.hpp
index 39d145f..fdb845a 100644
--- a/clicache/src/CacheableBuiltins.hpp
+++ b/clicache/src/CacheableBuiltins.hpp
@@ -507,7 +507,7 @@ namespace Apache
       /// An immutable wrapper for 16-bit characters that can serve
       /// as a distributable key object for caching.
       /// </summary>
-      _GFCLI_CACHEABLE_KEY_DEF_NEW(native::CacheableWideChar,
+      _GFCLI_CACHEABLE_KEY_DEF_NEW(native::CacheableCharacter,
                                    CacheableCharacter, Char);
 
       /// <summary>
diff --git a/clicache/src/CqAttributes.cpp b/clicache/src/CqAttributes.cpp
index ef10045..2e4c9c4 100644
--- a/clicache/src/CqAttributes.cpp
+++ b/clicache/src/CqAttributes.cpp
@@ -43,7 +43,7 @@ namespace Apache
         native::CqAttributes::listener_container_type vrr;
         try
         {
-          m_nativeptr->get()->getCqListeners(vrr);
+          vrr = m_nativeptr->get()->getCqListeners();
         }
         finally
         {
diff --git a/clicache/src/DataInput.cpp b/clicache/src/DataInput.cpp
index 85e0363..b50f388 100644
--- a/clicache/src/DataInput.cpp
+++ b/clicache/src/DataInput.cpp
@@ -456,7 +456,7 @@ namespace Apache
           ReadObject(obj);
           return obj;
         }
-        case apache::geode::client::GeodeTypeIds::CacheableWideChar:
+        case apache::geode::client::GeodeTypeIds::CacheableCharacter:
         {
           Char obj;
           ReadObject(obj);
diff --git a/clicache/src/DataOutput.cpp b/clicache/src/DataOutput.cpp
index ae50af2..726ccb9 100644
--- a/clicache/src/DataOutput.cpp
+++ b/clicache/src/DataOutput.cpp
@@ -500,7 +500,7 @@ namespace Apache
           WriteBoolean((bool)obj);
           return;
         }
-        case apache::geode::client::GeodeTypeIds::CacheableWideChar:
+        case apache::geode::client::GeodeTypeIds::CacheableCharacter:
         {
           WriteByte(typeId);
           WriteObject((Char)obj);
diff --git a/clicache/src/DistributedSystem.cpp b/clicache/src/DistributedSystem.cpp
index 44cf5e3..27d961e 100644
--- a/clicache/src/DistributedSystem.cpp
+++ b/clicache/src/DistributedSystem.cpp
@@ -192,7 +192,7 @@ namespace Apache
         //wide char
         Serializable::RegisterWrapperGeneric(
           gcnew WrapperDelegateGeneric(CacheableCharacter::Create),
-          native::GeodeTypeIds::CacheableWideChar, Char::typeid);
+          native::GeodeTypeIds::CacheableCharacter, Char::typeid);
         //double
         Serializable::RegisterWrapperGeneric(
           gcnew WrapperDelegateGeneric(CacheableDouble::Create),
diff --git a/clicache/src/GeodeClassIds.hpp b/clicache/src/GeodeClassIds.hpp
index 9d6eebd..e73461d 100644
--- a/clicache/src/GeodeClassIds.hpp
+++ b/clicache/src/GeodeClassIds.hpp
@@ -174,7 +174,7 @@ namespace Apache
         /// ClassId of <c>CacheableInt16</c> class for wide-characters
         /// </summary>
         literal System::UInt32 CacheableCharacter =
-          apache::geode::client::GeodeTypeIds::CacheableWideChar + 0x80000000;
+          apache::geode::client::GeodeTypeIds::CacheableCharacter + 0x80000000;
 
         /// <summary>
         /// ClassId of <c>CacheableByte</c> class
diff --git a/clicache/src/IResultCollector.hpp b/clicache/src/IResultCollector.hpp
index 3d97f27..f4d6417 100644
--- a/clicache/src/IResultCollector.hpp
+++ b/clicache/src/IResultCollector.hpp
@@ -45,7 +45,7 @@ namespace Apache
         /// <summary>
         /// add result from a single function execution
         /// </summary>
-        void AddResult(TResult rs);
+        void AddResult(const TResult rs);
 
         /// <summary>
         /// get result 
diff --git a/clicache/src/ISubscriptionService.hpp b/clicache/src/ISubscriptionService.hpp
index 1c91efd..4e4e150 100644
--- a/clicache/src/ISubscriptionService.hpp
+++ b/clicache/src/ISubscriptionService.hpp
@@ -254,9 +254,6 @@ namespace Apache
         /// Should only be called for durable clients and with cache server version 5.5 onwards.
         /// </summary>
         /// <param name="isDurable">whether the registration should be durable</param>
-        /// <param name="resultKeys">
-        /// if non-null then all keys on the server are returned
-        /// </param>
         /// <param name="getInitialValues">
         /// true to populate the cache with values of all the keys
         /// from the server
@@ -282,7 +279,6 @@ namespace Apache
         /// </exception>
         /// <exception cref="UnknownException">For other exceptions.</exception>
         void RegisterAllKeys(bool isDurable,
-                             System::Collections::Generic::ICollection<TKey>^ resultKeys,
                              bool getInitialValues);
 
         /// <summary>
@@ -293,9 +289,6 @@ namespace Apache
         /// Should only be called for durable clients and with cache server version 5.5 onwards.
         /// </summary>
         /// <param name="isDurable">whether the registration should be durable</param>
-        /// <param name="resultKeys">
-        /// if non-null then all keys on the server are returned
-        /// </param>
         /// <param name="getInitialValues">
         /// true to populate the cache with values of all the keys
         /// from the server
@@ -322,7 +315,6 @@ namespace Apache
         /// </exception>
         /// <exception cref="UnknownException">For other exceptions.</exception>
         void RegisterAllKeys(bool isDurable,
-                             System::Collections::Generic::ICollection<TKey>^ resultKeys,
                              bool getInitialValues,
                              bool receiveValues);
 
@@ -451,54 +443,6 @@ namespace Apache
         /// </summary>
         /// <param name="regex">the regular expression to register</param>
         /// <param name="isDurable">whether the registration should be durable</param>
-        /// <param name="resultKeys">
-        /// if non-null then the keys that match the regular expression
-        /// on the server are returned
-        ///</param>
-        /// <exception cref="IllegalArgumentException">
-        /// If the regular expression string is empty.
-        /// </exception>
-        /// <exception cref="CacheServerException">
-        /// If an exception is received from the Java cache server.
-        /// </exception>
-        /// <exception cref="NotConnectedException">
-        /// if not connected to the Geode system because the client cannot
-        /// establish usable connections to any of the servers given to it.
-        /// For pools configured with locators, if no locators are available, innerException
-        /// of NotConnectedException is set to NoAvailableLocatorsException.
-        /// </exception>
-        /// <exception cref="MessageException">
-        /// If the message received from server could not be handled. This will
-        /// be the case when an unregistered typeId is received in the reply or
-        /// reply is not well formed. More information can be found in the log.
-        /// </exception>
-        /// <exception cref="RegionDestroyedException">
-        /// If region destroy is pending.
-        /// </exception>
-        /// <exception cref="UnsupportedOperationException">
-        /// If the region is not a Native Client region or
-        /// <see cref="AttributesFactory.SetClientNotificationEnabled" /> is false.
-        /// </exception>
-        /// <exception cref="TimeoutException">
-        /// if the operation timed out
-        /// </exception>
-        /// <exception cref="UnknownException">For other exceptions.</exception>
-        void RegisterRegex(String^ regex, bool isDurable,
-                           System::Collections::Generic::ICollection<TKey>^ resultKeys);
-
-        /// <summary>
-        /// Register interest for the keys of the region that match the
-        /// given regular expression to get updates from the server.
-        /// Valid only for a Native Client region when client notification
-        /// ( <see cref="AttributesFactory.SetClientNotificationEnabled" /> ) is true.
-        /// Should only be called for durable clients and with cache server version 5.5 onwards.
-        /// </summary>
-        /// <param name="regex">the regular expression to register</param>
-        /// <param name="isDurable">whether the registration should be durable</param>
-        /// <param name="resultKeys">
-        /// if non-null then the keys that match the regular expression
-        /// on the server are returned
-        ///</param>
         /// <param name="getInitialValues">
         /// true to populate the cache with values of the keys
         /// that were registered on the server
@@ -531,8 +475,7 @@ namespace Apache
         /// if the operation timed out
         /// </exception>
         /// <exception cref="UnknownException">For other exceptions.</exception>
-        void RegisterRegex(String^ regex, bool isDurable,
-                           System::Collections::Generic::ICollection<TKey>^ resultKeys, bool getInitialValues);
+        void RegisterRegex(String^ regex, bool isDurable, bool getInitialValues);
 
         /// <summary>
         /// Register interest for the keys of the region that match the
@@ -543,10 +486,6 @@ namespace Apache
         /// </summary>
         /// <param name="regex">the regular expression to register</param>
         /// <param name="isDurable">whether the registration should be durable</param>
-        /// <param name="resultKeys">
-        /// if non-null then the keys that match the regular expression
-        /// on the server are returned
-        ///</param>
         /// <param name="getInitialValues">
         /// true to populate the cache with values of the keys
         /// that were registered on the server
@@ -581,7 +520,7 @@ namespace Apache
         /// </exception>
         /// <exception cref="UnknownException">For other exceptions.</exception>
         void RegisterRegex(String^ regex, bool isDurable,
-                           System::Collections::Generic::ICollection<TKey>^ resultKeys, bool getInitialValues, bool receiveValues);
+                           bool getInitialValues, bool receiveValues);
 
         /// <summary>
         /// Unregister interest for the keys of the region that match the
diff --git a/clicache/src/LocalRegion.cpp b/clicache/src/LocalRegion.cpp
index 0061364..a84568a 100644
--- a/clicache/src/LocalRegion.cpp
+++ b/clicache/src/LocalRegion.cpp
@@ -133,7 +133,7 @@ namespace Apache
 
           try
           {
-            m_nativeptr->get()->entries( vc, false );
+            vc = m_nativeptr->get()->entries( false );
           }
           finally
           {
@@ -163,7 +163,7 @@ namespace Apache
 
           try
           {
-            m_nativeptr->get()->entries( vc, false );
+            vc = m_nativeptr->get()->entries( false );
           }
           finally
           {
@@ -272,7 +272,7 @@ namespace Apache
         apache::geode::client::VectorOfCacheableKey vc;
         try
         {
-          m_nativeptr->get()->keys(vc);
+          vc = m_nativeptr->get()->keys();
         }
         finally
         {
@@ -299,7 +299,7 @@ namespace Apache
           apache::geode::client::VectorOfCacheable vc;
           try
           {
-            m_nativeptr->get()->values( vc );
+            vc = m_nativeptr->get()->values(  );
           }
           finally
           {
@@ -685,7 +685,7 @@ namespace Apache
       }
 
       generic<class TKey, class TValue>
-			Apache::Geode::Client::CacheStatistics^ LocalRegion<TKey, TValue>::Statistics::get()
+      Apache::Geode::Client::CacheStatistics^ LocalRegion<TKey, TValue>::Statistics::get()
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
@@ -753,7 +753,7 @@ namespace Apache
           apache::geode::client::VectorOfRegion vsr;
           try
           {
-            m_nativeptr->get()->subregions( recursive, vsr );
+            vsr = m_nativeptr->get()->subregions( recursive );
           }
           finally
           {
@@ -800,7 +800,7 @@ namespace Apache
           apache::geode::client::VectorOfRegionEntry vc;
           try
           {
-            m_nativeptr->get()->entries( vc, recursive );
+            vc = m_nativeptr->get()->entries( recursive );
           }
           finally
           {
@@ -896,7 +896,7 @@ namespace Apache
         apache::geode::client::VectorOfRegionEntry vc;
         try
         {
-          m_nativeptr->get()->entries( vc, false );
+          vc = m_nativeptr->get()->entries( false );
         }
         finally
         {
diff --git a/clicache/src/QueryService.cpp b/clicache/src/QueryService.cpp
index acb38cf..a3ddfbe 100644
--- a/clicache/src/QueryService.cpp
+++ b/clicache/src/QueryService.cpp
@@ -116,8 +116,8 @@ namespace Apache
       {
         try
         {
-          apache::geode::client::QueryService::query_container_type vrr;
-          m_nativeptr->get()->getCqs(vrr);
+          apache::geode::client::QueryService::query_container_type vrr =
+              m_nativeptr->get()->getCqs();
           auto cqs = gcnew array<CqQuery<TKey, TResult>^>(vrr.size());
 
           for (System::Int32 index = 0; index < vrr.size(); index++)
diff --git a/clicache/src/Region.cpp b/clicache/src/Region.cpp
index b4985fb..67a831f 100644
--- a/clicache/src/Region.cpp
+++ b/clicache/src/Region.cpp
@@ -16,6 +16,7 @@
  */
 
 #include "begin_native.hpp"
+#include <tuple>
 #include "geode/Region.hpp"
 #include "geode/Cache.hpp"
 #include "end_native.hpp"
@@ -173,7 +174,7 @@ namespace Apache
 
           try
           {
-            m_nativeptr->get()->entries(vc, false);
+            vc = m_nativeptr->get()->entries(false);
           }
           finally
           {
@@ -204,7 +205,7 @@ namespace Apache
 
           try
           {
-            m_nativeptr->get()->entries(vc, false);
+            vc = m_nativeptr->get()->entries(false);
           }
           finally
           {
@@ -320,7 +321,7 @@ namespace Apache
           native::VectorOfCacheableKey vc;
         try
         {
-          m_nativeptr->get()->serverKeys(vc);
+          vc = m_nativeptr->get()->serverKeys();
         }
         finally
         {
@@ -346,7 +347,7 @@ namespace Apache
           native::VectorOfCacheable vc;
         try
         {
-          m_nativeptr->get()->values(vc);
+          vc = m_nativeptr->get()->values();
         }
         finally
         {
@@ -678,36 +679,23 @@ namespace Apache
               Serializable::GetUnmanagedValueGeneric<TKey>(item));
           }
 
-          native::HashMapOfCacheablePtr valuesPtr;
-          if (values != nullptr) {
-            valuesPtr = std::make_shared<native::HashMapOfCacheable>();
-          }
-          native::HashMapOfExceptionPtr exceptionsPtr;
-          if (exceptions != nullptr) {
-            exceptionsPtr = std::make_shared<native::HashMapOfException>();
-          }
+          native::HashMapOfCacheable native_value;
+        
           try
           {
-            m_nativeptr->get()->getAll(vecKeys, valuesPtr, exceptionsPtr, addToLocalCache);
+            native_value = m_nativeptr->get()->getAll(vecKeys);
           }
           finally
           {
             GC::KeepAlive(m_nativeptr);
           }
           if (values != nullptr) {
-            for (const auto& iter : *valuesPtr) {
+            for (const auto& iter : native_value) {
               TKey key = Serializable::GetManagedValueGeneric<TKey>(iter.first);
               TValue val = Serializable::GetManagedValueGeneric<TValue>(iter.second);
               values->Add(key, val);
             }
           }
-          if (exceptions != nullptr) {
-            for (const auto& iter : *exceptionsPtr) {
-              TKey key = Serializable::GetManagedValueGeneric<TKey>(iter.first);
-              System::Exception^ ex = GeodeException::Get(*(iter.second));
-              exceptions->Add(key, ex);
-            }
-          }
 
           _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
         }
@@ -737,36 +725,24 @@ namespace Apache
           if (values != nullptr) {
             valuesPtr = std::make_shared<native::HashMapOfCacheable>();
           }
-          native::HashMapOfExceptionPtr exceptionsPtr;
-          if (exceptions != nullptr) {
-            exceptionsPtr = std::make_shared<native::HashMapOfException>();
-          }
-
-         native::SerializablePtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
-
+         native::SerializablePtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
+         native::HashMapOfCacheable native_value;
           try
           {
-            m_nativeptr->get()->getAll(vecKeys, valuesPtr, exceptionsPtr, addToLocalCache, callbackptr);
+            native_value = m_nativeptr->get()->getAll(vecKeys, callbackptr);
           }
           finally
           {
             GC::KeepAlive(m_nativeptr);
           }
           if (values != nullptr) {
-            for (const auto& iter : *valuesPtr) {
+            for (const auto& iter : native_value) {
               TKey key = Serializable::GetManagedValueGeneric<TKey>(iter.first);
               TValue val = Serializable::GetManagedValueGeneric<TValue>(iter.second);
               values->Add(key, val);
             }
           }
-          if (exceptions != nullptr) {
-            for (const auto& iter : *exceptionsPtr) {
-              TKey key = Serializable::GetManagedValueGeneric<TKey>(iter.first);
-              System::Exception^ ex = GeodeException::Get(*(iter.second));
-              exceptions->Add(key, ex);
-            }
-          }
-
+ 
           _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
         }
         else {
@@ -955,7 +931,7 @@ namespace Apache
           native::VectorOfRegion vsr;
         try
         {
-          m_nativeptr->get()->subregions(recursive, vsr);
+          vsr = m_nativeptr->get()->subregions(recursive);
         }
         finally
         {
@@ -1002,7 +978,7 @@ namespace Apache
         native::VectorOfRegionEntry vc;
         try
         {
-          m_nativeptr->get()->entries(vc, recursive);
+          vc = m_nativeptr->get()->entries(recursive);
         }
         finally
         {
@@ -1102,7 +1078,7 @@ namespace Apache
           native::VectorOfRegionEntry vc;
         try
         {
-          m_nativeptr->get()->entries(vc, false);
+          vc = m_nativeptr->get()->entries(false);
         }
         finally
         {
@@ -1211,60 +1187,39 @@ namespace Apache
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterAllKeys()
       {
-        RegisterAllKeys(false, nullptr, false);
+        RegisterAllKeys(false, false);
       }
 
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterAllKeys(bool isDurable)
       {
-        RegisterAllKeys(isDurable, nullptr, false);
+        RegisterAllKeys(isDurable, false);
       }
 
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterAllKeys(bool isDurable,
-                                                  System::Collections::Generic::ICollection<TKey>^ resultKeys,
                                                   bool getInitialValues)
       {
-        RegisterAllKeys(isDurable, resultKeys, getInitialValues, true);
+        RegisterAllKeys(isDurable, getInitialValues, true);
       }
 
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterAllKeys(bool isDurable,
-                                                  System::Collections::Generic::ICollection<TKey>^ resultKeys,
                                                   bool getInitialValues,
                                                   bool receiveValues)
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
+          
+        try
+        {
+            m_nativeptr->get()->registerAllKeys(isDurable, getInitialValues, receiveValues);
+        }
+        finally
+        {
+            GC::KeepAlive(m_nativeptr);
+        }
 
-          if (resultKeys != nullptr) {
-            auto mg_keys = std::make_shared<native::VectorOfCacheableKey>();
-
-            try
-            {
-              m_nativeptr->get()->registerAllKeys(isDurable, mg_keys, getInitialValues, receiveValues);
-            }
-            finally
-            {
-              GC::KeepAlive(m_nativeptr);
-            }
-
-            for (System::Int32 index = 0; index < mg_keys->size(); ++index) {
-              resultKeys->Add(Serializable::GetManagedValueGeneric<TKey>(
-                mg_keys->operator[](index)));
-            }
-          }
-          else {
-            try
-            {
-              m_nativeptr->get()->registerAllKeys(isDurable, nullptr, getInitialValues, receiveValues);
-            }
-            finally
-            {
-              GC::KeepAlive(m_nativeptr);
-            }
-          }
-
-          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
+        _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
       generic<class TKey, class TValue>
@@ -1275,7 +1230,7 @@ namespace Apache
           native::VectorOfCacheableKey vc;
         try
         {
-          m_nativeptr->get()->getInterestList(vc);
+          vc = m_nativeptr->get()->getInterestList();
         }
         finally
         {
@@ -1302,7 +1257,7 @@ namespace Apache
           native::VectorOfCacheableString vc;
         try
         {
-          m_nativeptr->get()->getInterestListRegex(vc);
+          vc = m_nativeptr->get()->getInterestListRegex();
         }
         finally
         {
@@ -1341,52 +1296,32 @@ namespace Apache
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterRegex(String^ regex)
       {
-        RegisterRegex(regex, false, nullptr, false);
+        RegisterRegex(regex, false, false);
       }
 
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterRegex(String^ regex, bool isDurable)
       {
-        RegisterRegex(regex, isDurable, nullptr, false);
-      }
-
-      generic<class TKey, class TValue>
-      void Region<TKey, TValue>::RegisterRegex(String^ regex, bool isDurable,
-                                                System::Collections::Generic::ICollection<TKey>^ resultKeys)
-      {
-        RegisterRegex(regex, isDurable, resultKeys, false);
+        RegisterRegex(regex, isDurable, false);
       }
 
       generic<class TKey, class TValue>
-      void Region<TKey, TValue>::RegisterRegex(String^ regex, bool isDurable,
-                                                System::Collections::Generic::ICollection<TKey>^ resultKeys, bool getInitialValues)
+      void Region<TKey, TValue>::RegisterRegex(String^ regex, bool isDurable, bool getInitialValues)
       {
-        RegisterRegex(regex, isDurable, resultKeys, getInitialValues, true);
+        RegisterRegex(regex, isDurable, getInitialValues, true);
       }
 
       generic<class TKey, class TValue>
       void Region<TKey, TValue>::RegisterRegex(String^ regex, bool isDurable,
-                                                System::Collections::Generic::ICollection<TKey>^ resultKeys, bool getInitialValues, bool receiveValues)
+          bool getInitialValues, bool receiveValues)
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          try
+        try
         {
           ManagedString mg_regex(regex);
-          if (resultKeys != nullptr) {
-            auto mg_keys = std::make_shared<native::VectorOfCacheableKey>();
-            m_nativeptr->get()->registerRegex(mg_regex.CharPtr, isDurable,
-              mg_keys, getInitialValues, receiveValues);
-
-            for (System::Int32 index = 0; index < mg_keys->size(); ++index) {
-              resultKeys->Add(Serializable::GetManagedValueGeneric<TKey>(
-                mg_keys->operator[](index)));
-            }
-          }
-          else {
-            m_nativeptr->get()->registerRegex(mg_regex.CharPtr, isDurable,
-              nullptr, getInitialValues, receiveValues);
-          }
+          m_nativeptr->get()->registerRegex(mg_regex.CharPtr, isDurable,
+            getInitialValues, receiveValues);
         }
         finally
         {
diff --git a/clicache/src/Region.hpp b/clicache/src/Region.hpp
index 9aa7c27..e6ffd37 100644
--- a/clicache/src/Region.hpp
+++ b/clicache/src/Region.hpp
@@ -215,11 +215,9 @@ namespace Apache
           virtual void RegisterAllKeys( bool isDurable );
 
           virtual void RegisterAllKeys(bool isDurable,
-            System::Collections::Generic::ICollection<TKey>^ resultKeys,
             bool getInitialValues);
 
           virtual void RegisterAllKeys(bool isDurable,
-            System::Collections::Generic::ICollection<TKey>^ resultKeys,
             bool getInitialValues,
             bool receiveValues);
 
@@ -231,16 +229,13 @@ namespace Apache
 
           virtual void RegisterRegex(String^ regex );
 
-          virtual void RegisterRegex( String^ regex, bool isDurable );
+          virtual void RegisterRegex(String^ regex, bool isDurable);
 
           virtual void RegisterRegex(String^ regex, bool isDurable,
-            System::Collections::Generic::ICollection<TKey>^ resultKeys);
-
-          virtual void RegisterRegex(String^ regex, bool isDurable,
-            System::Collections::Generic::ICollection<TKey>^ resultKeys, bool getInitialValues);
+            bool getInitialValues);
 
           virtual void RegisterRegex(String^ regex, bool isDurable,
-            System::Collections::Generic::ICollection<TKey>^ resultKeys, bool getInitialValues, bool receiveValues);
+            bool getInitialValues, bool receiveValues);
 
           virtual void UnregisterRegex( String^ regex );
 
diff --git a/clicache/src/RegionEntry.cpp b/clicache/src/RegionEntry.cpp
index 95b5b57..6cafac0 100644
--- a/clicache/src/RegionEntry.cpp
+++ b/clicache/src/RegionEntry.cpp
@@ -75,7 +75,7 @@ namespace Apache
         apache::geode::client::CacheStatisticsPtr nativeptr;
         try
         {
-          m_nativeptr->get()->getStatistics( nativeptr );
+          nativeptr = m_nativeptr->get()->getStatistics();
         }
         finally
         {
diff --git a/clicache/src/ResultCollector.cpp b/clicache/src/ResultCollector.cpp
index 9b0e249..c0785c4 100644
--- a/clicache/src/ResultCollector.cpp
+++ b/clicache/src/ResultCollector.cpp
@@ -34,7 +34,7 @@ namespace Apache
       namespace native = apache::geode::client;
 
       generic<class TResult>
-      void ResultCollector<TResult>::AddResult( TResult rs )
+      void ResultCollector<TResult>::AddResult( const TResult rs )
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
diff --git a/clicache/src/ResultCollector.hpp b/clicache/src/ResultCollector.hpp
index f75ffdc..f07a886 100644
--- a/clicache/src/ResultCollector.hpp
+++ b/clicache/src/ResultCollector.hpp
@@ -53,7 +53,7 @@ namespace Apache
         /// <summary>
         /// add result from a single function execution
         /// </summary>
-        virtual void AddResult( TResult rs );
+        virtual void AddResult( const TResult rs );
 
         /// <summary>
         /// get result 
diff --git a/clicache/src/Serializable.cpp b/clicache/src/Serializable.cpp
index e9e07d7..6a66948 100644
--- a/clicache/src/Serializable.cpp
+++ b/clicache/src/Serializable.cpp
@@ -664,7 +664,7 @@ namespace Apache
         {
           return safe_cast<TValue>(Serializable::getBoolean(val));
         }
-        case native::GeodeTypeIds::CacheableWideChar:
+        case native::GeodeTypeIds::CacheableCharacter:
         {
           return safe_cast<TValue>(Serializable::getChar(val));
         }
@@ -1072,7 +1072,7 @@ namespace Apache
         }
         case native::GeodeTypeIds::CacheableBoolean:
           return Serializable::getCacheableBoolean((bool)key);
-        case native::GeodeTypeIds::CacheableWideChar:
+        case native::GeodeTypeIds::CacheableCharacter:
           return Serializable::getCacheableWideChar((Char)key);
         case native::GeodeTypeIds::CacheableDouble:
           return Serializable::getCacheableDouble((double)key);
@@ -1258,13 +1258,13 @@ namespace Apache
       //widechar
       Char Serializable::getChar(native::SerializablePtr nativeptr)
       {
-        native::CacheableWideChar* ci = static_cast<native::CacheableWideChar*>(nativeptr.get());
+        native::CacheableCharacter* ci = static_cast<native::CacheableCharacter*>(nativeptr.get());
         return ci->value();
       }
 
       native::CacheableKeyPtr Serializable::getCacheableWideChar(Char val)
       {
-        return native::CacheableWideChar::create(val);
+        return native::CacheableCharacter::create(val);
       }
 
       //double
diff --git a/clicache/src/Serializable.hpp b/clicache/src/Serializable.hpp
index bab74bd..b124c78 100644
--- a/clicache/src/Serializable.hpp
+++ b/clicache/src/Serializable.hpp
@@ -663,7 +663,7 @@ namespace Apache
           {
             ManagedTypeMappingGeneric[SByte::typeid] = native::GeodeTypeIds::CacheableByte;
             ManagedTypeMappingGeneric[Boolean::typeid] = native::GeodeTypeIds::CacheableBoolean;
-            ManagedTypeMappingGeneric[Char::typeid] = native::GeodeTypeIds::CacheableWideChar;
+            ManagedTypeMappingGeneric[Char::typeid] = native::GeodeTypeIds::CacheableCharacter;
             ManagedTypeMappingGeneric[Double::typeid] = native::GeodeTypeIds::CacheableDouble;
             ManagedTypeMappingGeneric[String::typeid] = native::GeodeTypeIds::CacheableASCIIString;
             ManagedTypeMappingGeneric[float::typeid] = native::GeodeTypeIds::CacheableFloat;
diff --git a/clicache/src/impl/AuthenticatedCache.cpp b/clicache/src/impl/AuthenticatedCache.cpp
index d721493..e9871de 100644
--- a/clicache/src/impl/AuthenticatedCache.cpp
+++ b/clicache/src/impl/AuthenticatedCache.cpp
@@ -111,7 +111,7 @@ namespace Apache
         apache::geode::client::VectorOfRegion vrr;
         try
         {
-          m_nativeptr->get()->rootRegions( vrr );
+          vrr = m_nativeptr->get()->rootRegions( );
         }
         finally
         {
diff --git a/clicache/src/impl/ManagedPersistenceManager.cpp b/clicache/src/impl/ManagedPersistenceManager.cpp
index 5eeeeb4..cdaf9bc 100644
--- a/clicache/src/impl/ManagedPersistenceManager.cpp
+++ b/clicache/src/impl/ManagedPersistenceManager.cpp
@@ -219,7 +219,7 @@ namespace apache
         throw gcnew System::NotSupportedException;
       }
 
-      void ManagedPersistenceManagerGeneric::init(const RegionPtr& region, PropertiesPtr& diskProperties)
+      void ManagedPersistenceManagerGeneric::init(const RegionPtr& region, const PropertiesPtr& diskProperties)
       {
         m_managedptr->init(region, diskProperties);
       }
diff --git a/clicache/src/impl/ManagedPersistenceManager.hpp b/clicache/src/impl/ManagedPersistenceManager.hpp
index 6f19e0a..81dfa62 100644
--- a/clicache/src/impl/ManagedPersistenceManager.hpp
+++ b/clicache/src/impl/ManagedPersistenceManager.hpp
@@ -47,7 +47,7 @@ namespace apache {
 
         virtual void write(const CacheableKeyPtr&  key, const CacheablePtr&  value, void *& PersistenceInfo);
         virtual bool writeAll();
-        virtual void init(const RegionPtr& region, PropertiesPtr& diskProperties);
+        virtual void init(const RegionPtr& region, const PropertiesPtr& diskProperties);
         virtual CacheablePtr read(const CacheableKeyPtr& key, void *& PersistenceInfo);
         virtual bool readAll();
         virtual void destroy(const CacheableKeyPtr& key, void *& PersistenceInfo);
diff --git a/clicache/src/impl/ManagedResultCollector.cpp b/clicache/src/impl/ManagedResultCollector.cpp
index 91a353d..fd66aa5 100644
--- a/clicache/src/impl/ManagedResultCollector.cpp
+++ b/clicache/src/impl/ManagedResultCollector.cpp
@@ -146,7 +146,7 @@ namespace apache
         return NULL;
       }
 
-      void ManagedResultCollectorGeneric::addResult(CacheablePtr& result)
+      void ManagedResultCollectorGeneric::addResult(const CacheablePtr& result)
       {
         try {
           Object^ rs = Apache::Geode::Client::Serializable::GetManagedValueGeneric<Object^>(result);
diff --git a/clicache/src/impl/ManagedResultCollector.hpp b/clicache/src/impl/ManagedResultCollector.hpp
index 3dd419e..545ec29 100644
--- a/clicache/src/impl/ManagedResultCollector.hpp
+++ b/clicache/src/impl/ManagedResultCollector.hpp
@@ -74,7 +74,7 @@ namespace apache {
         virtual ~ManagedResultCollectorGeneric() { }
 
         CacheableVectorPtr getResult(System::UInt32 timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT);
-        void addResult(CacheablePtr& result);
+        void addResult(const CacheablePtr& result);
         void endResults();
         void clearResults();
         /// <summary>
diff --git a/clicache/src/impl/ManagedVisitor.cpp b/clicache/src/impl/ManagedVisitor.cpp
index 3808ea8..568de28 100644
--- a/clicache/src/impl/ManagedVisitor.cpp
+++ b/clicache/src/impl/ManagedVisitor.cpp
@@ -30,7 +30,7 @@ namespace apache
     namespace client
     {
 
-      void ManagedVisitorGeneric::visit(CacheableKeyPtr& key, CacheablePtr& value)
+      void ManagedVisitorGeneric::visit(const CacheableKeyPtr& key, const CacheablePtr& value)
       {
         using namespace Apache::Geode::Client;
         try {
diff --git a/clicache/src/impl/ManagedVisitor.hpp b/clicache/src/impl/ManagedVisitor.hpp
index a9f5947..865e87c 100644
--- a/clicache/src/impl/ManagedVisitor.hpp
+++ b/clicache/src/impl/ManagedVisitor.hpp
@@ -52,7 +52,7 @@ namespace apache
         /// Invokes the managed <c>PropertyVisitor</c> delegate for the given
         /// <c>Property</c> key and value.
         /// </summary>
-        virtual void visit(CacheableKeyPtr& key, CacheablePtr& value);
+        virtual void visit(const CacheableKeyPtr& key, const CacheablePtr& value);
 
         /// <summary>
         /// Destructor -- does nothing.
diff --git a/clicache/src/impl/PersistenceManagerProxy.hpp b/clicache/src/impl/PersistenceManagerProxy.hpp
index a88d0bd..e450c68 100644
--- a/clicache/src/impl/PersistenceManagerProxy.hpp
+++ b/clicache/src/impl/PersistenceManagerProxy.hpp
@@ -33,7 +33,7 @@ namespace Apache
           public:
             void write(const CacheableKeyPtr&  key, const CacheablePtr&  value/*, void *& PersistenceInfo*/);
             bool writeAll();
-            void init(const RegionPtr& region, PropertiesPtr& diskProperties);
+            void init(const RegionPtr& region, const PropertiesPtr& diskProperties);
             CacheablePtr read(const CacheableKeyPtr& key/*, void *& PersistenceInfo*/);
             bool readAll();
             void destroy(const CacheableKeyPtr& key/*, void *& PersistenceInfo*/);
@@ -62,7 +62,7 @@ namespace Apache
               throw gcnew System::NotSupportedException;
             }
 
-            virtual void init(const RegionPtr& region, PropertiesPtr& diskProperties)
+            virtual void init(const RegionPtr& region, const PropertiesPtr& diskProperties)
             {
               auto gRegion = Region<TKey, TValue>::Create(region);
               auto gProps = Properties<String^, String^>::Create(diskProperties);
diff --git a/clicache/src/impl/ResultCollectorProxy.hpp b/clicache/src/impl/ResultCollectorProxy.hpp
index 3bab985..01b1b6a 100644
--- a/clicache/src/impl/ResultCollectorProxy.hpp
+++ b/clicache/src/impl/ResultCollectorProxy.hpp
@@ -33,7 +33,7 @@ namespace Apache
       public interface class ResultCollectorG
       {
       public:
-        void AddResult(Object^ result);
+        void AddResult(const Object^ result);
         void EndResults();
         void ClearResults();
       };
@@ -52,11 +52,11 @@ namespace Apache
             m_rscoll = rscoll;
           }
 
-          virtual void AddResult( Object^ rs ) 
+          virtual void AddResult( const Object^ rs ) 
           {
             //apache::geode::client::CacheablePtr nativeptr(rs);
             //TResult grs =  Serializable::GetManagedValueGeneric<TResult>( nativeptr);
-            m_rscoll->AddResult(safe_cast<TResult>(rs));
+            m_rscoll->AddResult(safe_cast<const TResult>(rs));
           }
 
           virtual void EndResults() 
diff --git a/cppcache/include/geode/Cache.hpp b/cppcache/include/geode/Cache.hpp
index 523827a..3039969 100644
--- a/cppcache/include/geode/Cache.hpp
+++ b/cppcache/include/geode/Cache.hpp
@@ -84,12 +84,12 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @param cacheXml
    *        Valid cache.xml file
    */
-  virtual void initializeDeclarativeCache(const char* cacheXml);
+  virtual void initializeDeclarativeCache(const char* cacheXml) override;
 
   /** Returns the name of this cache.
    * @return the string name of this cache
    */
-  virtual const std::string& getName() const;
+  virtual const std::string& getName() const override;
 
   /**
    * Indicates if this cache has been closed.
@@ -99,13 +99,13 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    *
    * @return true, if this cache is closed; false, otherwise
    */
-  virtual bool isClosed() const;
+  virtual bool isClosed() const override;
 
   /**
    * Returns the distributed system that this cache was
    * {@link CacheFactory::createCacheFactory created} with.
    */
-  virtual DistributedSystem& getDistributedSystem() const;
+  virtual DistributedSystem& getDistributedSystem() const override;
 
   /**
    * Terminates this object cache and releases all the local resources.
@@ -116,7 +116,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * reset user related security data.
    * @throws CacheClosedException,  if the cache is already closed.
    */
-  virtual void close();
+  virtual void close() override;
 
   /**
    * Terminates this object cache and releases all the local resources.
@@ -140,7 +140,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @param path the region's name, such as <code>AuthRegion</code>.
    * @returns region, or nullptr if no such region exists.
    */
-  virtual RegionPtr getRegion(const char* path);
+  virtual RegionPtr getRegion(const char* path) override;
 
   /**
    * Returns a set of root regions in the cache. This set is a snapshot and
@@ -150,13 +150,13 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @param regions the returned set of
    * regions
    */
-  virtual void rootRegions(VectorOfRegion& regions);
+  virtual VectorOfRegion rootRegions() override;
 
   /**
    * Gets the QueryService from which a new Query can be obtained.
    * @returns A smart pointer to the QueryService.
    */
-  virtual QueryServicePtr getQueryService();
+  virtual QueryServicePtr getQueryService() override;
 
   /**
    * Gets the QueryService from which a new Query can be obtained.
@@ -196,7 +196,8 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    */
 
   virtual RegionServicePtr createAuthenticatedView(
-      PropertiesPtr userSecurityProperties, const char* poolName = nullptr);
+      PropertiesPtr userSecurityProperties,
+      const char* poolName = nullptr);
 
   /**
    * Get the CacheTransactionManager instance for this Cache.
@@ -208,13 +209,13 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
   /**
    * Returns whether Cache saves unread fields for Pdx types.
    */
-  virtual bool getPdxIgnoreUnreadFields();
+  virtual bool getPdxIgnoreUnreadFields() override;
 
   /**
    * Returns whether { @link PdxInstance} is preferred for PDX types instead of
    * C++ object.
    */
-  virtual bool getPdxReadSerialized();
+  virtual bool getPdxReadSerialized() override;
 
   virtual TypeRegistry& getTypeRegistry();
 
@@ -226,7 +227,8 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @throws IllegalStateException if the className is nullptr or invalid.
    * @return the factory
    */
-  virtual PdxInstanceFactoryPtr createPdxInstanceFactory(const char* className);
+  virtual PdxInstanceFactoryPtr createPdxInstanceFactory(
+      const char* className) override;
 
   virtual statistics::StatisticsFactory* getStatisticsFactory() const;
 
diff --git a/cppcache/include/geode/CacheableBuiltins.hpp b/cppcache/include/geode/CacheableBuiltins.hpp
index 03b8e4a..f1ed38d 100644
--- a/cppcache/include/geode/CacheableBuiltins.hpp
+++ b/cppcache/include/geode/CacheableBuiltins.hpp
@@ -504,12 +504,12 @@ _GF_CACHEABLE_KEY_TYPE_DEF_(int64_t, CacheableInt64, 31);
  */
 _GF_CACHEABLE_KEY_TYPE_(int64_t, CacheableInt64, 31);
 
-_GF_CACHEABLE_KEY_TYPE_DEF_(wchar_t, CacheableWideChar, 3);
+_GF_CACHEABLE_KEY_TYPE_DEF_(char16_t, CacheableCharacter, 3);
 /**
- * An immutable wrapper for wide-characters that can serve as
+ * An immutable wrapper for characters that can serve as
  * a distributable key object for caching.
  */
-_GF_CACHEABLE_KEY_TYPE_(wchar_t, CacheableWideChar, 3);
+_GF_CACHEABLE_KEY_TYPE_(char16_t, CacheableCharacter, 3);
 
 _GF_CACHEABLE_ARRAY_TYPE_DEF_(wchar_t, CharArray);
 /**
diff --git a/cppcache/include/geode/CqAttributes.hpp b/cppcache/include/geode/CqAttributes.hpp
index d4dba2a..b4bbf07 100644
--- a/cppcache/include/geode/CqAttributes.hpp
+++ b/cppcache/include/geode/CqAttributes.hpp
@@ -57,7 +57,7 @@ class CPPCACHE_EXPORT CqAttributes {
    * @see CqListener
    * @param[out] std::vector<CqListenerPtr> of CqListnerPtr
    */
-  virtual void getCqListeners(listener_container_type& vl) = 0;
+  virtual listener_container_type getCqListeners() = 0;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/DataInput.hpp b/cppcache/include/geode/DataInput.hpp
index 61b768e..9b99514 100644
--- a/cppcache/include/geode/DataInput.hpp
+++ b/cppcache/include/geode/DataInput.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_DATAINPUT_H_
-#define GEODE_DATAINPUT_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,6 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#pragma once
+
+#ifndef GEODE_DATAINPUT_H_
+#define GEODE_DATAINPUT_H_
 
 #include "geode_globals.hpp"
 #include "ExceptionTypes.hpp"
@@ -58,24 +57,15 @@ class DataInputInternal;
  */
 class CPPCACHE_EXPORT DataInput {
  public:
-  /**
-   * Read an unsigned byte from the <code>DataInput</code>.
-   *
-   * @param value output parameter to hold the unsigned byte read from stream
-   */
-  inline void read(uint8_t* value) {
-    checkBufferSize(1);
-    *value = *(m_buf++);
-  }
 
   /**
    * Read a signed byte from the <code>DataInput</code>.
    *
-   * @param value output parameter to hold the signed byte read from stream
+   * @@return signed byte read from stream
    */
-  inline void read(int8_t* value) {
+  inline int8_t read() {
     checkBufferSize(1);
-    *value = *(m_buf++);
+    return *(m_buf++);
   }
 
   /**
@@ -83,10 +73,9 @@ class CPPCACHE_EXPORT DataInput {
    *
    * @param value output parameter to hold the boolean read from stream
    */
-  inline void readBoolean(bool* value) {
+  inline bool readBoolean() {
     checkBufferSize(1);
-    *value = (*m_buf == 1 ? true : false);
-    m_buf++;
+    return *(m_buf++) == 1 ? true : false;
   }
 
   /**
@@ -136,8 +125,7 @@ class CPPCACHE_EXPORT DataInput {
    * @param len output parameter to hold the length of array read from stream
    */
   inline void readBytes(uint8_t** bytes, int32_t* len) {
-    int32_t length;
-    readArrayLen(&length);
+    int32_t length = readArrayLen();
     *len = length;
     uint8_t* buffer = nullptr;
     if (length > 0) {
@@ -160,8 +148,7 @@ class CPPCACHE_EXPORT DataInput {
    * @param len output parameter to hold the length of array read from stream
    */
   inline void readBytes(int8_t** bytes, int32_t* len) {
-    int32_t length;
-    readArrayLen(&length);
+    int32_t length = readArrayLen();
     *len = length;
     int8_t* buffer = nullptr;
     if (length > 0) {
@@ -174,42 +161,41 @@ class CPPCACHE_EXPORT DataInput {
   }
 
   /**
-   * Read a 16-bit unsigned integer from the <code>DataInput</code>.
+   * Read a 16-bit signed integer from the <code>DataInput</code>.
    *
-   * @param value output parameter to hold the 16-bit unsigned integer
-   *   read from stream
+   * @return 16-bit signed integer read from stream
    */
-  inline void readInt(uint16_t* value) {
+  inline int16_t  readInt16() {
     checkBufferSize(2);
-    uint16_t tmp = *(m_buf++);
-    tmp = static_cast<uint16_t>((tmp << 8) | *(m_buf++));
-    *value = tmp;
+    int16_t tmp = *(m_buf++);
+    tmp = static_cast<int16_t>((tmp << 8) | *(m_buf++));
+    return tmp;
   }
 
   /**
-   * Read a 32-bit unsigned integer from the <code>DataInput</code>.
+   * Read a 32-bit signed integer from the <code>DataInput</code>.g
    *
-   * @param value output parameter to hold the 32-bit unsigned integer
+   * @param value output parameter to hold the 32-bit signed integer
    *   read from stream
    */
-  inline void readInt(uint32_t* value) {
+  inline int32_t readInt32() {
     checkBufferSize(4);
-    uint32_t tmp = *(m_buf++);
+    int32_t tmp = *(m_buf++);
     tmp = (tmp << 8) | *(m_buf++);
     tmp = (tmp << 8) | *(m_buf++);
     tmp = (tmp << 8) | *(m_buf++);
-    *value = tmp;
+    return tmp;
   }
 
   /**
-   * Read a 64-bit unsigned integer from the <code>DataInput</code>.
+   * Read a 64-bit signed integer from the <code>DataInput</code>.
    *
-   * @param value output parameter to hold the 64-bit unsigned integer
+   * @param value output parameter to hold the 64-bit signed integer
    *   read from stream
    */
-  inline void readInt(uint64_t* value) {
+  inline int64_t readInt64() {
     checkBufferSize(8);
-    uint64_t tmp;
+    int64_t tmp;
     if (sizeof(long) == 8) {
       tmp = *(m_buf++);
       tmp = (tmp << 8) | *(m_buf++);
@@ -232,40 +218,7 @@ class CPPCACHE_EXPORT DataInput {
       hword = (hword << 8) | *(m_buf++);
       tmp = (tmp << 32) | hword;
     }
-    *value = tmp;
-  }
-
-  /**
-   * Read a 16-bit signed integer from the <code>DataInput</code>.
-   *
-   * @param value output parameter to hold the 16-bit signed integer
-   *   read from stream
-   */
-  inline void readInt(int16_t* value) {
-    checkBufferSize(2);
-    readInt(reinterpret_cast<uint16_t*>(value));
-  }
-
-  /**
-   * Read a 32-bit signed integer from the <code>DataInput</code>.
-   *
-   * @param value output parameter to hold the 32-bit signed integer
-   *   read from stream
-   */
-  inline void readInt(int32_t* value) {
-    checkBufferSize(4);
-    readInt(reinterpret_cast<uint32_t*>(value));
-  }
-
-  /**
-   * Read a 64-bit signed integer from the <code>DataInput</code>.
-   *
-   * @param value output parameter to hold the 64-bit signed integer
-   *   read from stream
-   */
-  inline void readInt(int64_t* value) {
-    checkBufferSize(8);
-    readInt(reinterpret_cast<uint64_t*>(value));
+    return tmp;
   }
 
   /**
@@ -276,27 +229,24 @@ class CPPCACHE_EXPORT DataInput {
    * @param len output parameter to hold the 32-bit signed length
    *   read from stream
    */
-  inline void readArrayLen(int32_t* len) {
-    uint8_t code;
-    read(&code);
+  inline int32_t readArrayLen() {
+    const uint8_t code = read();
     if (code == 0xFF) {
-      *len = -1;
+      return -1;
     } else {
       int32_t result = code;
       if (result > 252) {  // 252 is java's ((byte)-4 && 0xFF)
         if (code == 0xFE) {
-          uint16_t val;
-          readInt(&val);
+          uint16_t val =  readInt16();
           result = val;
         } else if (code == 0xFD) {
-          uint32_t val;
-          readInt(&val);
+          uint32_t val = readInt32();
           result = val;
         } else {
           throw IllegalStateException("unexpected array length code");
         }
       }
-      *len = result;
+      return result;
     }
   }
 
@@ -306,16 +256,14 @@ class CPPCACHE_EXPORT DataInput {
    * This is taken from the varint encoding in protobufs (BSD licensed).
    * See https://developers.google.com/protocol-buffers/docs/encoding
    */
-  inline void readUnsignedVL(int64_t* value) {
+  inline int64_t readUnsignedVL() {
     int32_t shift = 0;
     int64_t result = 0;
     while (shift < 64) {
-      int8_t b;
-      read(&b);
+      const auto b = read();
       result |= static_cast<int64_t>(b & 0x7F) << shift;
       if ((b & 0x80) == 0) {
-        *value = result;
-        return;
+        return result;
       }
       shift += 7;
     }
@@ -327,14 +275,14 @@ class CPPCACHE_EXPORT DataInput {
    *
    * @param value output parameter to hold the float read from stream
    */
-  inline void readFloat(float* value) {
+  inline float readFloat() {
     checkBufferSize(4);
     union float_uint32_t {
       float f;
       uint32_t u;
     } v;
-    readInt(&v.u);
-    *value = v.f;
+    v.u = readInt32();
+    return v.f;
   }
 
   /**
@@ -343,14 +291,14 @@ class CPPCACHE_EXPORT DataInput {
    * @param value output parameter to hold the double precision number
    *   read from stream
    */
-  inline void readDouble(double* value) {
+  inline double readDouble() {
     checkBufferSize(8);
     union double_uint64_t {
       double d;
       uint64_t ll;
     } v;
-    readInt(&v.ll);
-    *value = v.d;
+    v.ll = readInt64();
+     return v.d;
   }
 
   /**
@@ -383,8 +331,7 @@ class CPPCACHE_EXPORT DataInput {
    *   stream; not set if nullptr
    */
   inline void readASCII(char** value, uint16_t* len = nullptr) {
-    uint16_t length;
-    readInt(&length);
+    uint16_t length = readInt16();
     checkBufferSize(length);
     if (len != nullptr) {
       *len = length;
@@ -411,8 +358,7 @@ class CPPCACHE_EXPORT DataInput {
    *   stream; not set if nullptr
    */
   inline void readASCIIHuge(char** value, uint32_t* len = nullptr) {
-    uint32_t length;
-    readInt(&length);
+    uint32_t length = readInt32();
     if (len != nullptr) {
       *len = length;
     }
@@ -440,8 +386,7 @@ class CPPCACHE_EXPORT DataInput {
    *   stream; not set if nullptr
    */
   inline void readUTF(char** value, uint16_t* len = nullptr) {
-    uint16_t length;
-    readInt(&length);
+    uint16_t length = readInt16();
     checkBufferSize(length);
     uint16_t decodedLen =
         static_cast<uint16_t>(getDecodedLength(m_buf, length));
@@ -491,8 +436,7 @@ class CPPCACHE_EXPORT DataInput {
    *   stream; not set if nullptr
    */
   inline void readUTFHuge(char** value, uint32_t* len = nullptr) {
-    uint32_t length;
-    readInt(&length);
+    uint32_t length = readInt32();
     if (len != nullptr) {
       *len = length;
     }
@@ -500,10 +444,8 @@ class CPPCACHE_EXPORT DataInput {
     GF_NEW(str, char[length + 1]);
     *value = str;
     for (uint32_t i = 0; i < length; i++) {
-      int8_t item;
-      read(&item);  // ignore this - should be higher order zero byte
-      read(&item);
-      *str = item;
+      read();  // ignore this - should be higher order zero byte
+      *str = read();
       str++;
     }
     *str = '\0';  // null terminate for c-string.
@@ -526,8 +468,7 @@ class CPPCACHE_EXPORT DataInput {
    *   stream; not set if nullptr
    */
   inline void readUTF(wchar_t** value, uint16_t* len = nullptr) {
-    uint16_t length;
-    readInt(&length);
+    uint16_t length = readInt16();
     checkBufferSize(length);
     uint16_t decodedLen =
         static_cast<uint16_t>(getDecodedLength(m_buf, length));
@@ -558,8 +499,7 @@ class CPPCACHE_EXPORT DataInput {
    *   stream; not set if nullptr
    */
   inline void readUTFHuge(wchar_t** value, uint32_t* len = nullptr) {
-    uint32_t length;
-    readInt(&length);
+    uint32_t length = readInt32();
     if (len != nullptr) {
       *len = length;
     }
@@ -567,10 +507,8 @@ class CPPCACHE_EXPORT DataInput {
     GF_NEW(str, wchar_t[length + 1]);
     *value = str;
     for (uint32_t i = 0; i < length; i++) {
-      uint8_t hibyte;
-      read(&hibyte);
-      uint8_t lobyte;
-      read(&lobyte);
+      const auto hibyte = read();
+      const auto lobyte = read();
       *str = ((static_cast<uint16_t>(hibyte)) << 8) |
              static_cast<uint16_t>(lobyte);
       str++;
@@ -598,39 +536,30 @@ class CPPCACHE_EXPORT DataInput {
    * @see staticCast
    */
   template <class PTR>
-  inline void readObject(std::shared_ptr<PTR>& ptr,
+  inline std::shared_ptr<PTR> readObject(
                          bool throwOnError = DINP_THROWONERROR_DEFAULT) {
-    SerializablePtr sPtr;
-    readObjectInternal(sPtr);
+    SerializablePtr sPtr = readObjectInternal();
     if (throwOnError) {
-      ptr = std::dynamic_pointer_cast<PTR>(sPtr);
+      return std::dynamic_pointer_cast<PTR>(sPtr);
     } else {
-      ptr = std::static_pointer_cast<PTR>(sPtr);
+      return std::static_pointer_cast<PTR>(sPtr);
     }
   }
 
   inline bool readNativeBool() {
-    int8_t typeId = 0;
-    read(&typeId);
+    read(); // ignore type id
 
-    bool val;
-    readBoolean(&val);
-    return val;
+    return readBoolean();
   }
 
   inline int32_t readNativeInt32() {
-    int8_t typeId = 0;
-    read(&typeId);
-
-    int32_t val;
-    readInt(&val);
-    return val;
+    read(); // ignore type id
+    return readInt32();
   }
 
-  inline bool readNativeString(CacheableStringPtr& csPtr) {
-    int8_t typeId = 0;
-    read(&typeId);
-    int64_t compId = typeId;
+  inline CacheableStringPtr readNativeString() {
+    CacheableStringPtr csPtr;
+    const int64_t compId = read();
     if (compId == GeodeTypeIds::NullObj) {
       csPtr = nullptr;
     } else if (compId == GeodeTypeIds::CacheableNullString) {
@@ -659,52 +588,48 @@ class CPPCACHE_EXPORT DataInput {
       LOGDEBUG("In readNativeString something is wrong while expecting string");
       rewindCursor(1);
       csPtr = nullptr;
-      return false;
     }
-    return true;
+    return csPtr;
   }
 
-  inline void readDirectObject(SerializablePtr& ptr, int8_t typeId = -1) {
-    readObjectInternal(ptr, typeId);
+  inline SerializablePtr readDirectObject(int8_t typeId = -1) {
+    return readObjectInternal(typeId);
   }
 
   /**
    * Read a <code>Serializable</code> object from the <code>DataInput</code>.
    * Null objects are handled.
    */
-  inline void readObject(SerializablePtr& ptr) { readObjectInternal(ptr); }
+  inline void readObject(SerializablePtr& ptr) { ptr = readObjectInternal(); }
 
   inline void readObject(wchar_t* value) {
-    uint16_t temp = 0;
-    readInt(&temp);
+    uint16_t temp = readInt16();
     *value = static_cast<wchar_t>(temp);
   }
 
-  inline void readObject(bool* value) { readBoolean(value); }
+  inline void readObject(bool* value) { *value = readBoolean(); }
 
-  inline void readObject(int8_t* value) { read(value); }
+  inline void readObject(int8_t* value) { *value = read(); }
 
-  inline void readObject(int16_t* value) { readInt(value); }
+  inline void readObject(int16_t* value) { *value = readInt16(); }
 
-  inline void readObject(int32_t* value) { readInt(value); }
+  inline void readObject(int32_t* value) { *value = readInt32(); }
 
-  inline void readObject(int64_t* value) { readInt(value); }
+  inline void readObject(int64_t* value) { *value = readInt64(); }
 
-  inline void readObject(float* value) { readFloat(value); }
+  inline void readObject(float* value) { *value = readFloat(); }
 
-  inline void readObject(double* value) { readDouble(value); }
+  inline void readObject(double* value) { *value = readDouble(); }
 
   inline void readCharArray(char** value, int32_t& length) {
-    int arrayLen = 0;
-    readArrayLen(&arrayLen);
+    int arrayLen = readArrayLen();
     length = arrayLen;
     char* objArray = nullptr;
     if (arrayLen > 0) {
       objArray = new char[arrayLen];
       int i = 0;
       for (i = 0; i < arrayLen; i++) {
-        char tmp = 0;
-        readPdxChar(&tmp);
+        char tmp = readPdxChar();
         objArray[i] = tmp;
       }
       *value = objArray;
@@ -744,8 +669,7 @@ class CPPCACHE_EXPORT DataInput {
   }
 
   inline void readString(char** value) {
-    int8_t typeId;
-    read(&typeId);
+    const auto typeId = read();
 
     // Check for nullptr String
     if (typeId == GeodeTypeIds::CacheableNullString) {
@@ -777,8 +701,7 @@ class CPPCACHE_EXPORT DataInput {
   }
 
   inline void readWideString(wchar_t** value) {
-    int8_t typeId;
-    read(&typeId);
+    const auto typeId = read();
 
     // Check for nullptr String
     if (typeId == GeodeTypeIds::CacheableNullString) {
@@ -802,8 +725,7 @@ class CPPCACHE_EXPORT DataInput {
   }
 
   inline void readStringArray(char*** strArray, int32_t& length) {
-    int32_t arrLen;
-    readArrayLen(&arrLen);
+    int32_t arrLen = readArrayLen();
     length = arrLen;
     if (arrLen == -1) {
       *strArray = nullptr;
@@ -819,8 +741,7 @@ class CPPCACHE_EXPORT DataInput {
   }
 
   inline void readWideStringArray(wchar_t*** strArray, int32_t& length) {
-    int32_t arrLen;
-    readArrayLen(&arrLen);
+    int32_t arrLen = readArrayLen();
     length = arrLen;
     if (arrLen == -1) {
       *strArray = nullptr;
@@ -838,8 +759,7 @@ class CPPCACHE_EXPORT DataInput {
   inline void readArrayOfByteArrays(int8_t*** arrayofBytearr,
                                     int32_t& arrayLength,
                                     int32_t** elementLength) {
-    int32_t arrLen;
-    readArrayLen(&arrLen);
+    int32_t arrLen = readArrayLen();
     arrayLength = arrLen;
 
     if (arrLen == -1) {
@@ -980,12 +900,11 @@ class CPPCACHE_EXPORT DataInput {
   const char* m_poolName;
   const Cache* m_cache;
 
-  void readObjectInternal(SerializablePtr& ptr, int8_t typeId = -1);
+  SerializablePtr readObjectInternal(int8_t typeId = -1);
 
   template <typename mType>
   void readObject(mType** value, int32_t& length) {
-    int arrayLen;
-    readArrayLen(&arrayLen);
+    int arrayLen = readArrayLen();
     length = arrayLen;
     mType* objArray;
     if (arrayLen > 0) {
@@ -1000,10 +919,8 @@ class CPPCACHE_EXPORT DataInput {
     }
   }
 
-  inline void readPdxChar(char* value) {
-    int16_t val = 0;
-    readInt(&val);
-    *value = static_cast<char>(val);
+  inline char readPdxChar() {
+    return static_cast<char>(readInt16());
   }
 
   inline void _checkBufferSize(int32_t size, int32_t line) {
diff --git a/cppcache/include/geode/Execution.hpp b/cppcache/include/geode/Execution.hpp
index 71eabdc..812e39e 100644
--- a/cppcache/include/geode/Execution.hpp
+++ b/cppcache/include/geode/Execution.hpp
@@ -105,8 +105,9 @@ class CPPCACHE_EXPORT Execution {
    * @return either a default result collector or one specified by {@link
    * #withCollector(ResultCollector)}
    */
-  virtual ResultCollectorPtr execute(CacheableVectorPtr& routingObj,
-                                     CacheablePtr& args, ResultCollectorPtr& rs,
+  virtual ResultCollectorPtr execute(const CacheableVectorPtr& routingObj,
+                                     const CacheablePtr& args,
+                                     const ResultCollectorPtr& rs,
                                      const char* func, uint32_t timeout) = 0;
 };
 }  // namespace client
diff --git a/cppcache/include/geode/ExpirationAttributes.hpp b/cppcache/include/geode/ExpirationAttributes.hpp
index b52ebd0..014f370 100644
--- a/cppcache/include/geode/ExpirationAttributes.hpp
+++ b/cppcache/include/geode/ExpirationAttributes.hpp
@@ -86,7 +86,7 @@ class CPPCACHE_EXPORT ExpirationAttributes {
    * @return the action to take when expiring
    */
   ExpirationAction::Action getAction() const;
-  void setAction(ExpirationAction::Action& action);
+  void setAction(const ExpirationAction::Action& action);
 
  private:
   /** The action that should take place when this object or region expires.
diff --git a/cppcache/include/geode/FunctionService.hpp b/cppcache/include/geode/FunctionService.hpp
index 36fffdd..8041eff 100644
--- a/cppcache/include/geode/FunctionService.hpp
+++ b/cppcache/include/geode/FunctionService.hpp
@@ -57,7 +57,7 @@ class CPPCACHE_EXPORT FunctionService {
    * @throws NullPointerException
    *                 if the region passed in is nullptr
    */
-  static ExecutionPtr onRegion(RegionPtr region);
+  static ExecutionPtr onRegion(const RegionPtr& region);
 
   /**
    * Returns a {@link Execution} object that can be used to execute a data
diff --git a/cppcache/include/geode/GeodeTypeIds.hpp b/cppcache/include/geode/GeodeTypeIds.hpp
index 48c001e..5be6da4 100644
--- a/cppcache/include/geode/GeodeTypeIds.hpp
+++ b/cppcache/include/geode/GeodeTypeIds.hpp
@@ -55,7 +55,7 @@ class GeodeTypeIds {
     CacheableDoubleArray = 51,
     CacheableObjectArray = 52,
     CacheableBoolean = 53,
-    CacheableWideChar = 54,
+    CacheableCharacter = 54,
     CacheableByte = 55,
     CacheableInt16 = 56,
     CacheableInt32 = 57,
diff --git a/cppcache/include/geode/PdxInstance.hpp b/cppcache/include/geode/PdxInstance.hpp
index 3676c04..a64fd81 100644
--- a/cppcache/include/geode/PdxInstance.hpp
+++ b/cppcache/include/geode/PdxInstance.hpp
@@ -85,7 +85,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @see serializationRegistry->addPdxType
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, CacheablePtr& value) const = 0;
+  virtual CacheablePtr getCacheableField(const char *fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in bool type out param.
@@ -96,37 +96,18 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, bool& value) const = 0;
+  virtual bool getBooleanField(const char *fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in signed char type out param.
    * signed char type is corresponding to java byte type.
-   * For C++ on Windows and Linux, signed char type is corresponding to int8_t
-   * type.
-   * However C++ users on Solaris should always use this api after casting
-   * int8_t to signed char.
    * @param fieldname name of the field to read
    * @param value value of the field to be set with signed char type.
    * @throws IllegalStateException if PdxInstance doesn't has the named field.
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, signed char& value) const = 0;
-
-  /**
-   * Reads the named field and set its value in unsigned char type out param.
-   * unsigned char type is corresponding to java byte type.
-   * For C++ on Windows and Linux, unsigned char type is corresponding to int8_t
-   * type.
-   * However C++ users on Solaris should always use this api after casting
-   * int8_t to unsigned char.
-   * @param fieldname name of the field to read
-   * @param value value of the field to be set with unsigned char type.
-   * @throws IllegalStateException if PdxInstance doesn't has the named field.
-   *
-   * @see PdxInstance#hasField
-   */
-  virtual void getField(const char* fieldname, unsigned char& value) const = 0;
+  virtual int8_t getByteField(const char* fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in int16_t type out param.
@@ -137,7 +118,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int16_t& value) const = 0;
+  virtual int16_t getShortField(const char *fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in int32_t type out param.
@@ -146,7 +127,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @param value value of the field to be set with int32_t type.
    * @throws IllegalStateException if PdxInstance doesn't has the named field.
    */
-  virtual void getField(const char* fieldname, int32_t& value) const = 0;
+  virtual int32_t getIntField(const char* fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in int64_t type out param.
@@ -157,7 +138,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int64_t& value) const = 0;
+  virtual int64_t getLongField(const char* fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in float type out param.
@@ -168,7 +149,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, float& value) const = 0;
+  virtual float getFloatField(const char* fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in double type out param.
@@ -179,18 +160,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, double& value) const = 0;
-
-  /**
-   * Reads the named field and set its value in wchar_t type out param.
-   * wchar_t type is corresponding to java char type.
-   * @param fieldname name of the field to read
-   * @param value value of the field to be set with wchar_t type.
-   * @throws IllegalStateException if PdxInstance doesn't has the named field.
-   *
-   * @see PdxInstance#hasField
-   */
-  virtual void getField(const char* fieldName, wchar_t& value) const = 0;
+  virtual double getDoubleField(const char* fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in char type out param.
@@ -201,7 +171,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, char& value) const = 0;
+  virtual char16_t getCharField(const char* fieldName) const = 0;
 
   /**
    * Reads the named field and set its value in bool array type out param.
@@ -218,10 +188,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
 
   /**
    * Reads the named field and set its value in signed char array type out
-   * param. signed char* type is corresponding to java byte[] type. For C++ on
-   * Windows and Linux, signed char* type is corresponding to int8_t* type.
-   * However C++ users on Solaris should always use this api after casting
-   * int8_t* to signed char*.
+   * param. signed char* type is corresponding to java byte[] type.
    * @param fieldname name of the field to read
    * @param value value of the field to be set with signed char array type.
    * @param length length is set with number of signed char elements.
@@ -401,8 +368,8 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname,
-                        CacheableDatePtr& value) const = 0;
+  virtual CacheableDatePtr getCacheableDateField(
+                                              const char* fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in array of byte arrays type out
@@ -434,8 +401,8 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @see serializationRegistry->addPdxType
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname,
-                        CacheableObjectArrayPtr& value) const = 0;
+  virtual CacheableObjectArrayPtr getCacheableObjectArrayField(
+                                            const char* fieldname) const = 0;
 
   /**
    * Checks if the named field was {@link PdxWriter#markIdentityField}marked as
diff --git a/cppcache/include/geode/PdxInstanceFactory.hpp b/cppcache/include/geode/PdxInstanceFactory.hpp
index 349c82f..e2b134f 100644
--- a/cppcache/include/geode/PdxInstanceFactory.hpp
+++ b/cppcache/include/geode/PdxInstanceFactory.hpp
@@ -80,8 +80,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual PdxInstanceFactoryPtr writeWideChar(const char* fieldName,
-                                              wchar_t value) = 0;
+  virtual PdxInstanceFactoryPtr writeChar(const char* fieldName,
+                                              char16_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
diff --git a/cppcache/include/geode/PdxWriter.hpp b/cppcache/include/geode/PdxWriter.hpp
index c4add8f..b59f5ef 100644
--- a/cppcache/include/geode/PdxWriter.hpp
+++ b/cppcache/include/geode/PdxWriter.hpp
@@ -72,7 +72,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual PdxWriterPtr writeWideChar(const char* fieldName, wchar_t value) = 0;
+  virtual PdxWriterPtr writeChar(const char* fieldName, char16_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
diff --git a/cppcache/include/geode/PersistenceManager.hpp b/cppcache/include/geode/PersistenceManager.hpp
index 185a495..338168b 100644
--- a/cppcache/include/geode/PersistenceManager.hpp
+++ b/cppcache/include/geode/PersistenceManager.hpp
@@ -88,7 +88,7 @@ class CPPCACHE_EXPORT PersistenceManager {
    * @throws InitfailedException if the persistence manager cannot be
    * initialized.
    */
-  virtual void init(const RegionPtr& region, PropertiesPtr& diskProperties) = 0;
+  virtual void init(const RegionPtr& region, const PropertiesPtr& diskProperties) = 0;
 
   /**
   * Reads the value for the key from the disk.
@@ -113,7 +113,8 @@ class CPPCACHE_EXPORT PersistenceManager {
   * @throws RegionDestroyedException is the region is already destroyed.
   * @throws EntryNotFoundException if the entry is not found on the disk.
   */
-  virtual void destroy(const CacheableKeyPtr& key, void*& PersistenceInfo) = 0;
+  virtual void destroy(const CacheableKeyPtr& key,
+                       void*& PersistenceInfo) = 0;
 
   /**
    * Closes the persistence manager instance.
diff --git a/cppcache/include/geode/Properties.hpp b/cppcache/include/geode/Properties.hpp
index 5fb0a61..4feaba9 100644
--- a/cppcache/include/geode/Properties.hpp
+++ b/cppcache/include/geode/Properties.hpp
@@ -47,7 +47,8 @@ class CPPCACHE_EXPORT Properties : public Serializable {
  public:
   class Visitor {
    public:
-    virtual void visit(CacheableKeyPtr& key, CacheablePtr& value) = 0;
+    virtual void visit(const CacheableKeyPtr& key,
+                       const CacheablePtr& value) = 0;
     virtual ~Visitor() {}
   };
 
diff --git a/cppcache/include/geode/QueryService.hpp b/cppcache/include/geode/QueryService.hpp
index a61b974..97af16c 100644
--- a/cppcache/include/geode/QueryService.hpp
+++ b/cppcache/include/geode/QueryService.hpp
@@ -89,7 +89,8 @@ class CPPCACHE_EXPORT QueryService {
    * @endnativeclient
    */
   virtual CqQueryPtr newCq(const char* name, const char* querystr,
-                           CqAttributesPtr& cqAttr, bool isDurable = false) = 0;
+                           const CqAttributesPtr& cqAttr,
+                           bool isDurable = false) = 0;
   /**
    * @nativeclient
    * Constructs a new named continuous query, represented by an instance of
@@ -122,7 +123,7 @@ class CPPCACHE_EXPORT QueryService {
    *
    * @endnativeclient
    */
-  virtual CqQueryPtr newCq(const char* querystr, CqAttributesPtr& cqAttr,
+  virtual CqQueryPtr newCq(const char* querystr, const CqAttributesPtr& cqAttr,
                            bool isDurable = false) = 0;
   /**
    * @nativeclient
@@ -136,7 +137,7 @@ class CPPCACHE_EXPORT QueryService {
    * Retrieve  all registered CQs
    * @endnativeclient
    */
-  virtual void getCqs(query_container_type& vec) = 0;
+  virtual query_container_type getCqs() = 0;
   /**
    * @nativeclient
    * Retrieve a CqQuery by name.
diff --git a/cppcache/include/geode/Region.hpp b/cppcache/include/geode/Region.hpp
index 4b51332..03305c5 100644
--- a/cppcache/include/geode/Region.hpp
+++ b/cppcache/include/geode/Region.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_REGION_H_
-#define GEODE_REGION_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,6 +15,11 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_REGION_H_
+#define GEODE_REGION_H_
+
 //#### Warning: DO NOT directly include Region.hpp, include Cache.hpp instead.
 
 #include "geode_globals.hpp"
@@ -249,7 +249,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @param[out] sr subregions
    * @throws RegionDestroyedException
    */
-  virtual void subregions(const bool recursive, VectorOfRegion& sr) = 0;
+  virtual VectorOfRegion subregions(const bool recursive) = 0;
 
   /** Return the meta-object RegionEntry for key.
    * @throws IllegalArgumentException, RegionDestroyedException.
@@ -952,7 +952,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * Return all the keys in the local process for this region. This includes
    * keys for which the entry is invalid.
    */
-  virtual void keys(VectorOfCacheableKey& v) = 0;
+  virtual VectorOfCacheableKey keys() = 0;
 
   /**
    * Return the set of keys defined in the server process associated to this
@@ -979,15 +979,15 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @throws UnsupportedOperationException if the member type is not CLIENT
    *                                       or region is not a native client one.
    */
-  virtual void serverKeys(VectorOfCacheableKey& v) = 0;
+  virtual VectorOfCacheableKey serverKeys() = 0;
 
   /**
    * Return all values in the local process for this region. No value is
    * included for entries that are invalidated.
    */
-  virtual void values(VectorOfCacheable& vc) = 0;
+  virtual VectorOfCacheable values() = 0;
 
-  virtual void entries(VectorOfRegionEntry& me, bool recursive) = 0;
+  virtual VectorOfRegionEntry entries(bool recursive) = 0;
 
   /**
    * Returns the <code>cache</code> associated with this region.
@@ -1034,14 +1034,14 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @throws UnsupportedOperationException if the region's scope is
    * ScopeType::LOCAL.
    */
-  virtual void getInterestList(VectorOfCacheableKey& vlist) const = 0;
+  virtual VectorOfCacheableKey getInterestList() const = 0;
   /**
    * Returns the list of regular expresssions on which this client is
    * interested and will be notified of changes.
    * @throws UnsupportedOperationException if the region's scope is
    * ScopeType::LOCAL.
    */
-  virtual void getInterestListRegex(VectorOfCacheableString& vregex) const = 0;
+  virtual VectorOfCacheableString getInterestListRegex() const = 0;
   /**
    * Convenience method allowing key to be a const char*
    * This operations checks for the key in the local cache .
@@ -1126,9 +1126,6 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * ( {@link AttributesFactory::setClientNotification} ) is true.
    *
    * @param isDurable flag to indicate whether this is a durable registration
-   * @param resultKeys If non-nullptr then all the keys on the server that got
-   *   registered are returned. The vector is cleared at the start to discard
-   *   any existing keys in the vector.
    * @param getInitialValues true to populate the cache with values of all keys
    *   from the server
    * @param receiveValues whether to act like notify-by-subscription is set
@@ -1156,7 +1153,6 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @throws TimeoutException if operation timed out
    */
   virtual void registerAllKeys(bool isDurable = false,
-                               VectorOfCacheableKeyPtr resultKeys = nullptr,
                                bool getInitialValues = false,
                                bool receiveValues = true) = 0;
 
@@ -1228,7 +1224,6 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @throws TimeoutException if operation timed out
    */
   virtual void registerRegex(const char* regex, bool isDurable = false,
-                             VectorOfCacheableKeyPtr resultKeys = nullptr,
                              bool getInitialValues = false,
                              bool receiveValues = true) = 0;
 
@@ -1282,8 +1277,6 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    *   otherwise an <code>IllegalArgumentException</code> is thrown.
    * @param exceptions Output parameter that provides the map of keys
    *   to any exceptions while obtaining the key. It is ignored if nullptr.
-   * @param addToLocalCache true if the obtained values have also to be added
-   *   to the local cache
    * @since 8.1
    * @param aCallbackArgument an argument that is passed to the callback
    *functions.
@@ -1305,11 +1298,9 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    *
    * @see get
    */
-  virtual void getAll(const VectorOfCacheableKey& keys,
-                      HashMapOfCacheablePtr values,
-                      HashMapOfExceptionPtr exceptions,
-                      bool addToLocalCache = false,
-                      const SerializablePtr& aCallbackArgument = nullptr) = 0;
+  virtual HashMapOfCacheable getAll(
+      const VectorOfCacheableKey& keys,
+      const SerializablePtr& aCallbackArgument = nullptr) = 0;
 
   /**
    * Executes the query on the server based on the predicate.
diff --git a/cppcache/include/geode/RegionEntry.hpp b/cppcache/include/geode/RegionEntry.hpp
index edd5e78..024ad26 100644
--- a/cppcache/include/geode/RegionEntry.hpp
+++ b/cppcache/include/geode/RegionEntry.hpp
@@ -75,7 +75,7 @@ class CPPCACHE_EXPORT RegionEntry {
    * @throws StatisticsDisabledException if statistics have been disabled for
    * this region
    */
-  void getStatistics(CacheStatisticsPtr& csptr);
+  CacheStatisticsPtr getStatistics();
 
   /**
    * Returns whether this entry has been destroyed.
diff --git a/cppcache/include/geode/RegionService.hpp b/cppcache/include/geode/RegionService.hpp
index 468d602..108b476 100644
--- a/cppcache/include/geode/RegionService.hpp
+++ b/cppcache/include/geode/RegionService.hpp
@@ -105,7 +105,7 @@ class CPPCACHE_EXPORT RegionService {
    * @param regions the returned set of
    * regions
    */
-  virtual void rootRegions(VectorOfRegion& regions) = 0;
+  virtual VectorOfRegion rootRegions() = 0;
 
   /**
   * Returns a factory that can create a {@link PdxInstance}.
diff --git a/cppcache/include/geode/ResultCollector.hpp b/cppcache/include/geode/ResultCollector.hpp
index 64c5f22..35a50a4 100644
--- a/cppcache/include/geode/ResultCollector.hpp
+++ b/cppcache/include/geode/ResultCollector.hpp
@@ -88,7 +88,7 @@ class CPPCACHE_EXPORT ResultCollector {
    * @param resultOfSingleExecution
    * @since 5.8LA
    */
-  virtual void addResult(CacheablePtr& resultOfSingleExecution);
+  virtual void addResult(const CacheablePtr& resultOfSingleExecution);
   /**
    * Geode will invoke this method when function execution has completed
    * and all results for the execution have been obtained and  added to the
diff --git a/cppcache/include/geode/Serializer.hpp b/cppcache/include/geode/Serializer.hpp
index 0a5279e..29e955f 100644
--- a/cppcache/include/geode/Serializer.hpp
+++ b/cppcache/include/geode/Serializer.hpp
@@ -48,7 +48,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        uint8_t& value) {
-  input.read(&value);
+  value = input.read();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -57,7 +57,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 }
 
 inline void readObject(apache::geode::client::DataInput& input, int8_t& value) {
-  input.read(&value);
+  value = input.read();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -87,7 +87,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        int16_t& value) {
-  input.readInt(&value);
+  value = input.readInt16();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -97,7 +97,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        int32_t& value) {
-  input.readInt(&value);
+  value = input.readInt32();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -107,7 +107,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        int64_t& value) {
-  input.readInt(&value);
+  value = input.readInt64();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -117,7 +117,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        uint16_t& value) {
-  input.readInt(&value);
+  value = input.readInt16();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -127,7 +127,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        uint32_t& value) {
-  input.readInt(&value);
+  value = input.readInt32();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -137,7 +137,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 
 inline void readObject(apache::geode::client::DataInput& input,
                        uint64_t& value) {
-  input.readInt(&value);
+  value = input.readInt64();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output, bool value) {
@@ -145,7 +145,7 @@ inline void writeObject(apache::geode::client::DataOutput& output, bool value) {
 }
 
 inline void readObject(apache::geode::client::DataInput& input, bool& value) {
-  input.readBoolean(&value);
+  value = input.readBoolean();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -154,7 +154,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 }
 
 inline void readObject(apache::geode::client::DataInput& input, double& value) {
-  input.readDouble(&value);
+  value = input.readDouble();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -163,7 +163,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 }
 
 inline void readObject(apache::geode::client::DataInput& input, float& value) {
-  input.readFloat(&value);
+  value = input.readFloat();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -172,10 +172,8 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 }
 
 inline void readObject(apache::geode::client::DataInput& input,
-                       wchar_t& value) {
-  int16_t val;
-  input.readInt(&val);
-  value = val;
+                       char16_t& value) {
+  value = input.readInt16();
 }
 
 inline void writeObject(apache::geode::client::DataOutput& output,
@@ -236,7 +234,7 @@ template <typename TObj,
                                   Serializable>::type* = nullptr>
 inline void readObject(apache::geode::client::DataInput& input,
                        std::shared_ptr<TObj>& value) {
-  input.readObject(value, true);
+  value = input.readObject<TObj>(true);
 }
 
 // For arrays
@@ -258,7 +256,7 @@ inline void writeObject(apache::geode::client::DataOutput& output,
 template <typename TObj, typename TLen>
 inline void readObject(apache::geode::client::DataInput& input, TObj*& array,
                        TLen& len) {
-  input.readArrayLen(&len);
+  len = input.readArrayLen();
   if (len > 0) {
     GF_NEW(array, TObj[len]);
     TObj* startArray = array;
@@ -319,8 +317,7 @@ inline uint32_t objectSize(const VectorOfCacheable& value) {
 template <typename TObj, typename _tail>
 inline void readObject(apache::geode::client::DataInput& input,
                        std::vector<TObj, _tail>& value) {
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
   if (len >= 0) {
     TObj obj;
     for (int32_t index = 0; index < len; index++) {
@@ -357,8 +354,7 @@ inline uint32_t objectSize(const HashMapOfCacheable& value) {
 template <typename TKey, typename TValue, typename Hash, typename KeyEqual, typename Allocator>
 inline void readObject(apache::geode::client::DataInput& input,
                        std::unordered_map<TKey, TValue, Hash, KeyEqual, Allocator>& value) {
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
   value.reserve(len);
   TKey key;
   TValue val;
@@ -392,8 +388,7 @@ inline uint32_t objectSize(const HashSetOfCacheableKey& value) {
 template <typename TKey, typename Hash, typename KeyEqual, typename Allocator>
 inline void readObject(apache::geode::client::DataInput& input,
                        std::unordered_set<TKey, Hash, KeyEqual, Allocator>& value) {
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
   if (len > 0) {
     TKey key;
     for (int32_t index = 0; index < len; index++) {
diff --git a/cppcache/include/geode/TypeRegistry.hpp b/cppcache/include/geode/TypeRegistry.hpp
index 87f6a87..1229daf 100644
--- a/cppcache/include/geode/TypeRegistry.hpp
+++ b/cppcache/include/geode/TypeRegistry.hpp
@@ -30,7 +30,7 @@ namespace client {
 
 class TypeRegistry {
  public:
-  TypeRegistry(Cache& cache);
+  TypeRegistry(const Cache& cache);
 
   /**
    * @brief register an instance factory method for a given type.
@@ -59,7 +59,7 @@ class TypeRegistry {
 
  protected:
  private:
-  Cache& m_cache;
+  const Cache& m_cache;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/WritablePdxInstance.hpp b/cppcache/include/geode/WritablePdxInstance.hpp
index 029119c..d4ea0db 100644
--- a/cppcache/include/geode/WritablePdxInstance.hpp
+++ b/cppcache/include/geode/WritablePdxInstance.hpp
@@ -194,21 +194,6 @@ class CPPCACHE_EXPORT WritablePdxInstance : public PdxInstance {
    * The setField method has copy-on-write semantics.
    * So for the modifications to be stored in the cache the WritablePdxInstance
    * must be put into a region after setField has been called one or more times.
-   * wchar_t type is corresponding to java char type.
-   * @param fieldName
-   *          name of the field whose value will be set
-   * @param value
-   *          value that will be set to the field of type wchar_t
-   * @throws IllegalStateException if the named field does not exist
-   * or if the type of the value is not compatible with the field.
-   */
-  virtual void setField(const char* fieldName, wchar_t value) = 0;
-
-  /**
-   * Set the existing named field to the given value.
-   * The setField method has copy-on-write semantics.
-   * So for the modifications to be stored in the cache the WritablePdxInstance
-   * must be put into a region after setField has been called one or more times.
    * char type is corresponding to java char type.
    * @param fieldName
    *          name of the field whose value will be set
@@ -217,7 +202,7 @@ class CPPCACHE_EXPORT WritablePdxInstance : public PdxInstance {
    * @throws IllegalStateException if the named field does not exist
    * or if the type of the value is not compatible with the field.
    */
-  virtual void setField(const char* fieldName, char value) = 0;
+  virtual void setField(const char* fieldName, char16_t value) = 0;
 
   /**
    * Set the existing named field to the given value.
diff --git a/cppcache/integration-test/BuiltinCacheableWrappers.hpp b/cppcache/integration-test/BuiltinCacheableWrappers.hpp
index 5cef85b..8969460 100644
--- a/cppcache/integration-test/BuiltinCacheableWrappers.hpp
+++ b/cppcache/integration-test/BuiltinCacheableWrappers.hpp
@@ -663,20 +663,18 @@ class CacheableWideCharWrapper : public CacheableWrapper {
   virtual int32_t maxKeys() const { return SHRT_MAX; }
 
   virtual void initKey(int32_t keyIndex, int32_t maxSize) {
-    m_cacheableObject =
-        CacheableWideChar::create(static_cast<wchar_t>(keyIndex));
+    m_cacheableObject = CacheableCharacter::create(keyIndex);
   }
 
   virtual void initRandomValue(int32_t maxSize) {
     m_cacheableObject =
-        CacheableWideChar::create(CacheableHelper::random<wchar_t>(SHRT_MAX));
+      CacheableCharacter::create(CacheableHelper::random<char16_t>(SHRT_MAX));
   }
 
   virtual uint32_t getCheckSum(const CacheablePtr object) const {
-    const CacheableWideChar* obj =
-        dynamic_cast<const CacheableWideChar*>(object.get());
+    auto obj = std::dynamic_pointer_cast<const CacheableCharacter>(object);
     ASSERT(obj != nullptr, "getCheckSum: null object.");
-    return CacheableHelper::crc32<wchar_t>(obj->value());
+    return CacheableHelper::crc32<char16_t>(obj->value());
   }
 };
 
@@ -1245,8 +1243,8 @@ void registerBuiltins(bool isRegisterFileName = false) {
   CacheableWrapperFactory::registerType(
       GeodeTypeIds::CacheableStringHuge, "CacheableHugeUnicodeString",
       CacheableHugeUnicodeStringWrapper::create, true);
-  CacheableWrapperFactory::registerType(GeodeTypeIds::CacheableWideChar,
-                                        "CacheableWideChar",
+  CacheableWrapperFactory::registerType(GeodeTypeIds::CacheableCharacter,
+                                        "CacheableCharacter",
                                         CacheableWideCharWrapper::create, true);
 
   // Register other builtin cacheables
diff --git a/cppcache/integration-test/DeltaEx.hpp b/cppcache/integration-test/DeltaEx.hpp
index 2b0115d..e0dc9e4 100644
--- a/cppcache/integration-test/DeltaEx.hpp
+++ b/cppcache/integration-test/DeltaEx.hpp
@@ -50,8 +50,7 @@ class DeltaEx : public Cacheable, public Delta {
 
   virtual void fromDelta(DataInput& in) {
     LOG("From delta gets called");
-    int32_t val;
-    in.readInt(&val);
+    int32_t val = in.readInt32();
     if (fromDeltaCount == 1) {
       fromDeltaCount++;
       LOG("Invalid Delta expetion thrown");
@@ -65,7 +64,7 @@ class DeltaEx : public Cacheable, public Delta {
     toDataCount++;
   }
   virtual void fromData(DataInput& input) {
-    input.readInt(&counter);
+    counter = input.readInt32();
     fromDataCount++;
   }
   virtual int32_t classId() const { return 1; }
@@ -106,8 +105,7 @@ class PdxDeltaEx : public PdxSerializable, public Delta {
 
   virtual void fromDelta(DataInput& in) {
     LOG("From delta gets called");
-    int32_t val;
-    in.readInt(&val);
+    int32_t val = in.readInt32();
     if (m_fromDeltaCount == 1) {
       m_fromDeltaCount++;
       LOG("Invalid Delta expetion thrown");
diff --git a/cppcache/integration-test/ThinClientDistOps.hpp b/cppcache/integration-test/ThinClientDistOps.hpp
index 2bc4fa8..aa97a3a 100644
--- a/cppcache/integration-test/ThinClientDistOps.hpp
+++ b/cppcache/integration-test/ThinClientDistOps.hpp
@@ -698,11 +698,10 @@ END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
   {
-    VectorOfCacheableKey vec0, vec1;
     RegionPtr reg0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr reg1 = getHelper()->getRegion(regionNames[1]);
-    reg0->serverKeys(vec0);
-    reg1->serverKeys(vec1);
+    auto vec0 = reg0->serverKeys();
+    auto vec1 = reg1->serverKeys();
     ASSERT(vec0.size() == 2, "Should have 2 keys in first region.");
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
     std::string key0, key1;
diff --git a/cppcache/integration-test/ThinClientDistOps2.hpp b/cppcache/integration-test/ThinClientDistOps2.hpp
index b645e11..f3fe888 100644
--- a/cppcache/integration-test/ThinClientDistOps2.hpp
+++ b/cppcache/integration-test/ThinClientDistOps2.hpp
@@ -158,20 +158,6 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1GetAll)
     CacheableKeyPtr key0 = CacheableString::create(_keys[0]);
     CacheableKeyPtr key1 = CacheableString::create(_keys[1]);
 
-    // test invalid combination with caching disabled for getAll
-    reg0->localDestroyRegion();
-    reg0 = nullptr;
-    getHelper()->createPooledRegion(regionNames[0], USE_ACK, 0,
-                                    "__TEST_POOL1__", false, false);
-    reg0 = getHelper()->getRegion(_regionNames[0]);
-    keys0.push_back(key0);
-    keys0.push_back(key1);
-    try {
-      reg0->getAll(keys0, nullptr, nullptr, true);
-      FAIL("Expected IllegalArgumentException");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
-    }
     // re-create region with caching enabled
     reg0->localDestroyRegion();
     reg0 = nullptr;
@@ -179,34 +165,25 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1GetAll)
                                     "__TEST_POOL1__", true, true);
     reg0 = getHelper()->getRegion(_regionNames[0]);
     // check for IllegalArgumentException for empty key list
-    auto values = std::make_shared<HashMapOfCacheable>();
-    auto exceptions = std::make_shared<HashMapOfException>();
     keys0.clear();
     try {
-      reg0->getAll(keys0, values, exceptions);
+      reg0->getAll(keys0);
       FAIL("Expected IllegalArgumentException");
     } catch (const IllegalArgumentException&) {
       LOG("Got expected IllegalArgumentException");
     }
+
     keys0.push_back(key0);
     keys0.push_back(key1);
-    try {
-      reg0->getAll(keys0, nullptr, nullptr, false);
-      FAIL("Expected IllegalArgumentException");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
+    {
+      auto values = reg0->getAll(keys0);
+      ASSERT(values.size() == 2, "Expected 2 values");
+      auto val0 = std::dynamic_pointer_cast<CacheableString>(values[key0]);
+      auto val1 = std::dynamic_pointer_cast<CacheableString>(values[key1]);
+      ASSERT(strcmp(_nvals[0], val0->asChar()) == 0, "Got unexpected value");
+      ASSERT(strcmp(_nvals[1], val1->asChar()) == 0, "Got unexpected value");
     }
 
-    reg0->getAll(keys0, values, exceptions);
-    ASSERT(values->size() == 2, "Expected 2 values");
-    ASSERT(exceptions->size() == 0, "Expected no exceptions");
-    auto val0 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key0));
-    auto val1 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key1));
-    ASSERT(strcmp(_nvals[0], val0->asChar()) == 0, "Got unexpected value");
-    ASSERT(strcmp(_nvals[1], val1->asChar()) == 0, "Got unexpected value");
-
     // for second region invalidate only one key to have a partial get
     // from java server
     RegionPtr reg1 = getHelper()->getRegion(_regionNames[1]);
@@ -217,139 +194,108 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1GetAll)
     keys1.push_back(key2);
     keys1.push_back(key3);
 
-    values->clear();
-    exceptions->clear();
-    reg1->getAll(keys1, values, exceptions, true);
-    ASSERT(values->size() == 2, "Expected 2 values");
-    ASSERT(exceptions->size() == 0, "Expected no exceptions");
-    auto val2 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key2));
-    auto val3 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key3));
-    ASSERT(strcmp(_nvals[2], val2->asChar()) == 0, "Got unexpected value");
-    ASSERT(strcmp(_vals[3], val3->asChar()) == 0, "Got unexpected value");
+    {
+      auto values = reg1->getAll(keys1);
+      ASSERT(values.size() == 2, "Expected 2 values");
+      auto val2 = std::dynamic_pointer_cast<CacheableString>(values[key2]);
+      auto val3 = std::dynamic_pointer_cast<CacheableString>(values[key3]);
+      ASSERT(strcmp(_nvals[2], val2->asChar()) == 0, "Got unexpected value");
+      ASSERT(strcmp(_vals[3], val3->asChar()) == 0, "Got unexpected value");
+    }
 
     // also check that the region is properly populated
     ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
-    VectorOfRegionEntry regEntries;
-    reg1->entries(regEntries, false);
+    auto regEntries = reg1->entries(false);
     ASSERT(regEntries.size() == 2, "Expected 2 entries in the region.entries");
     verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
     verifyEntry(_regionNames[1], _keys[3], _vals[3], true);
 
     // also check with nullptr values that region is properly populated
-    reg1->localInvalidate(key3);
-    values = nullptr;
-    exceptions->clear();
-    reg1->getAll(keys1, values, exceptions, true);
-    // now check that the region is properly populated
-    ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
-    regEntries.clear();
-    reg1->entries(regEntries, false);
-    ASSERT(regEntries.size() == 2, "Expected 2 entries in the region.entries");
-    verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
-    verifyEntry(_regionNames[1], _keys[3], _nvals[3], true);
+    {
+      reg1->localInvalidate(key3);
+      auto values = reg1->getAll(keys1);
+      // now check that the region is properly populated
+      ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
+      regEntries = reg1->entries(false);
+      ASSERT(regEntries.size() == 2,
+             "Expected 2 entries in the region.entries");
+      verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
+      verifyEntry(_regionNames[1], _keys[3], _nvals[3], true);
+    }
   }
 END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT1, Client1GetAll_Pool)
   {
-    RegionPtr reg0 = getHelper()->getRegion(_regionNames[0]);
-
-    VectorOfCacheableKey keys0;
-    CacheableKeyPtr key0 = CacheableString::create(_keys[0]);
-    CacheableKeyPtr key1 = CacheableString::create(_keys[1]);
-
-    // test invalid combination with caching disabled for getAll
-    reg0->localDestroyRegion();
-    reg0 = nullptr;
-    getHelper()->createRegionAndAttachPool(_regionNames[0], USE_ACK, poolName,
-                                           false);
-    reg0 = getHelper()->getRegion(_regionNames[0]);
-    keys0.push_back(key0);
-    keys0.push_back(key1);
-    try {
-      reg0->getAll(keys0, nullptr, nullptr, true);
-      FAIL("Expected IllegalArgumentException");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
-    }
-    // re-create region with caching enabled
-    reg0->localDestroyRegion();
-    reg0 = nullptr;
-    getHelper()->createRegionAndAttachPool(_regionNames[0], USE_ACK, poolName);
-    reg0 = getHelper()->getRegion(_regionNames[0]);
-    // check for IllegalArgumentException for empty key list
-    auto values = std::make_shared<HashMapOfCacheable>();
-    auto exceptions = std::make_shared<HashMapOfException>();
-    keys0.clear();
-    try {
-      reg0->getAll(keys0, values, exceptions);
-      FAIL("Expected IllegalArgumentException");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
-    }
-    keys0.push_back(key0);
-    keys0.push_back(key1);
-    try {
-      reg0->getAll(keys0, nullptr, nullptr, false);
-      FAIL("Expected IllegalArgumentException");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
+    {
+      RegionPtr reg0 = getHelper()->getRegion(_regionNames[0]);
+
+      VectorOfCacheableKey keys0;
+      CacheableKeyPtr key0 = CacheableString::create(_keys[0]);
+      CacheableKeyPtr key1 = CacheableString::create(_keys[1]);
+
+      getHelper()->createRegionAndAttachPool(_regionNames[0], USE_ACK, poolName);
+      reg0 = getHelper()->getRegion(_regionNames[0]);
+      // check for IllegalArgumentException for empty key list
+      keys0.clear();
+      try {
+        reg0->getAll(keys0);
+        FAIL("Expected IllegalArgumentException");
+      } catch (const IllegalArgumentException&) {
+        LOG("Got expected IllegalArgumentException");
+      }
+
+      keys0.push_back(key0);
+      keys0.push_back(key1);
+
+      auto values = reg0->getAll(keys0);
+
+      ASSERT(values.size() == 2, "Expected 2 values");
+      auto val0 = std::dynamic_pointer_cast<CacheableString>(values[key0]);
+      auto val1 = std::dynamic_pointer_cast<CacheableString>(values[key1]);
+      ASSERT(strcmp(_nvals[0], val0->asChar()) == 0, "Got unexpected value");
+      ASSERT(strcmp(_nvals[1], val1->asChar()) == 0, "Got unexpected value");
     }
 
-    reg0->getAll(keys0, values, exceptions);
-    ASSERT(values->size() == 2, "Expected 2 values");
-    ASSERT(exceptions->size() == 0, "Expected no exceptions");
-    auto val0 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key0));
-    auto val1 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key1));
-    ASSERT(strcmp(_nvals[0], val0->asChar()) == 0, "Got unexpected value");
-    ASSERT(strcmp(_nvals[1], val1->asChar()) == 0, "Got unexpected value");
-
-    // for second region invalidate only one key to have a partial get
-    // from java server
-    RegionPtr reg1 = getHelper()->getRegion(_regionNames[1]);
-    CacheableKeyPtr key2 = CacheableString::create(_keys[2]);
-    CacheableKeyPtr key3 = CacheableString::create(_keys[3]);
-    reg1->localInvalidate(key2);
-    VectorOfCacheableKey keys1;
-    keys1.push_back(key2);
-    keys1.push_back(key3);
-
-    values->clear();
-    exceptions->clear();
-    reg1->getAll(keys1, values, exceptions, true);
-    ASSERT(values->size() == 2, "Expected 2 values");
-    ASSERT(exceptions->size() == 0, "Expected no exceptions");
-    auto val2 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key2));
-    auto val3 =
-        std::dynamic_pointer_cast<CacheableString>(values->operator[](key3));
-    ASSERT(strcmp(_nvals[2], val2->asChar()) == 0, "Got unexpected value");
-    ASSERT(strcmp(_vals[3], val3->asChar()) == 0, "Got unexpected value");
-
-    // also check that the region is properly populated
-    ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
-    VectorOfRegionEntry regEntries;
-    reg1->entries(regEntries, false);
-    ASSERT(regEntries.size() == 2, "Expected 2 entries in the region.entries");
-    verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
-    verifyEntry(_regionNames[1], _keys[3], _vals[3], true);
-
-    // also check with nullptr values that region is properly populated
-    reg1->localInvalidate(key3);
-    values = nullptr;
-    exceptions->clear();
-    reg1->getAll(keys1, values, exceptions, true);
-    // now check that the region is properly populated
-    ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
-    regEntries.clear();
-    reg1->entries(regEntries, false);
-    ASSERT(regEntries.size() == 2, "Expected 2 entries in the region.entries");
-    verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
-    verifyEntry(_regionNames[1], _keys[3], _nvals[3], true);
+    {
+      // for second region invalidate only one key to have a partial get
+      // from java server
+      RegionPtr reg1 = getHelper()->getRegion(_regionNames[1]);
+      CacheableKeyPtr key2 = CacheableString::create(_keys[2]);
+      CacheableKeyPtr key3 = CacheableString::create(_keys[3]);
+      reg1->localInvalidate(key2);
+      VectorOfCacheableKey keys1;
+      keys1.push_back(key2);
+      keys1.push_back(key3);
+
+      auto values = reg1->getAll(keys1);
+
+      ASSERT(values.size() == 2, "Expected 2 values");
+      auto val2 = std::dynamic_pointer_cast<CacheableString>(values[key2]);
+      auto val3 = std::dynamic_pointer_cast<CacheableString>(values[key3]);
+      ASSERT(strcmp(_nvals[2], val2->asChar()) == 0, "Got unexpected value");
+      ASSERT(strcmp(_vals[3], val3->asChar()) == 0, "Got unexpected value");
+
+      // also check that the region is properly populated
+      ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
+      auto regEntries = reg1->entries(false);
+      ASSERT(regEntries.size() == 2,
+             "Expected 2 entries in the region.entries");
+      verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
+      verifyEntry(_regionNames[1], _keys[3], _vals[3], true);
+
+      // also check with nullptr values that region is properly populated
+      reg1->localInvalidate(key3);
+
+      reg1->getAll(keys1);
+      // now check that the region is properly populated
+      ASSERT(reg1->size() == 2, "Expected 2 entries in the region");
+      regEntries = reg1->entries(false);
+      ASSERT(regEntries.size() == 2,
+             "Expected 2 entries in the region.entries");
+      verifyEntry(_regionNames[1], _keys[2], _nvals[2], true);
+      verifyEntry(_regionNames[1], _keys[3], _nvals[3], true);
+    }
   }
 END_TASK_DEFINITION
 
diff --git a/cppcache/integration-test/ThinClientFailover2.hpp b/cppcache/integration-test/ThinClientFailover2.hpp
index 27e70d9..ba5c95d 100644
--- a/cppcache/integration-test/ThinClientFailover2.hpp
+++ b/cppcache/integration-test/ThinClientFailover2.hpp
@@ -358,9 +358,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepOne_Pool_Locator)
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TEST_POOL1__",
                        true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("StepOne complete.");
   }
 END_TASK_DEFINITION
@@ -376,9 +376,9 @@ DUNIT_TASK_DEFINITION(CLIENT2, StepTwo_Pool_Locator)
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TEST_POOL1__",
                        true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("StepTwo complete.");
   }
 END_TASK_DEFINITION
@@ -420,11 +420,10 @@ END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
   {
-    VectorOfCacheableKey vec0, vec1;
     RegionPtr reg0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr reg1 = getHelper()->getRegion(regionNames[1]);
-    reg0->serverKeys(vec0);
-    reg1->serverKeys(vec1);
+    auto vec0 = reg0->serverKeys();
+    auto vec1 = reg1->serverKeys();
     ASSERT(vec0.size() == 3, "Should have 3 keys in first region.");
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
 
diff --git a/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp b/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp
index 7ea1372..c09edcf 100644
--- a/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp
+++ b/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp
@@ -317,21 +317,14 @@ DUNIT_TASK_DEFINITION(CLIENT2, InitializeClient2)
 
     RegionPtr regPtr0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr regPtr1 = getHelper()->getRegion(regionNames[1]);
-    auto resultKeys = std::make_shared<VectorOfCacheableKey>();
     // create a local entry to check for no change after register interest
     createEntry(regionNames[0], keys[1], nvals[1]);
-    regPtr0->registerAllKeys(false, resultKeys, true);
-    regPtr1->registerAllKeys(false, nullptr, true);
+    regPtr0->registerAllKeys(false, true);
+    regPtr1->registerAllKeys(false, true);
 
     // check that initial entries are created properly
     ASSERT(regPtr0->size() == 1, "Expected one entry in region");
     ASSERT(regPtr1->size() == 1, "Expected one entry in region");
-    ASSERT(resultKeys->size() == 1, "Expected one key from registerAllKeys");
-    ASSERT(strcmp(std::dynamic_pointer_cast<CacheableString>(
-                      resultKeys->operator[](0))
-                      ->asChar(),
-                  keys[1]) == 0,
-           "Unexpected key from registerAllKeys");
 
     LOG("InitializeClient2 complete.");
   }
@@ -346,21 +339,14 @@ DUNIT_TASK_DEFINITION(CLIENT2, InitializeClient2Regex)
 
     RegionPtr regPtr0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr regPtr1 = getHelper()->getRegion(regionNames[1]);
-    auto resultKeys = std::make_shared<VectorOfCacheableKey>();
     // create a local entry to check for no change after register interest
     createEntry(regionNames[0], keys[1], nvals[1]);
-    regPtr0->registerRegex(".*", false, resultKeys, true);
-    regPtr1->registerRegex(".*", false, nullptr, true);
+    regPtr0->registerRegex(".*", false, true);
+    regPtr1->registerRegex(".*", false, true);
 
     // check that initial entries are created properly
     ASSERT(regPtr0->size() == 1, "Expected one entry in region");
     ASSERT(regPtr1->size() == 1, "Expected one entry in region");
-    ASSERT(resultKeys->size() == 1, "Expected one key from registerAllKeys");
-    ASSERT(strcmp(std::dynamic_pointer_cast<CacheableString>(
-                      resultKeys->operator[](0))
-                      ->asChar(),
-                  keys[1]) == 0,
-           "Unexpected key from registerAllKeys");
 
     verifyCreated(regionNames[0], keys[1]);
     verifyCreated(regionNames[1], keys[3]);
@@ -373,38 +359,22 @@ END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT1, VerifyClient1)
   {
-    // check the combination of (resultKeys != nullptr) and
-    // (getValues == false) in registerAllKeys
-    auto resultKeys = std::make_shared<VectorOfCacheableKey>();
     RegionPtr regPtr0 = getHelper()->getRegion(regionNames[0]);
-    regPtr0->registerAllKeys(false, resultKeys, false);
+    regPtr0->registerAllKeys(false, false);
 
     ASSERT(regPtr0->size() == 1, "Expected one entry in region");
     ASSERT(regPtr0->containsKey(keys[1]), "Expected region to contain the key");
     ASSERT(!regPtr0->containsValueForKey(keys[1]),
            "Expected region to not contain the value");
-    ASSERT(resultKeys->size() == 1, "Expected one key from registerAllKeys");
-    ASSERT(strcmp(std::dynamic_pointer_cast<CacheableString>(
-                      resultKeys->operator[](0))
-                      ->asChar(),
-                  keys[1]) == 0,
-           "Unexpected key from registerAllKeys");
 
     // check the same for registerRegex(".*")
     RegionPtr regPtr1 = getHelper()->getRegion(regionNames[1]);
-    resultKeys->clear();
-    regPtr1->registerRegex(".*", false, resultKeys, false);
+    regPtr1->registerRegex(".*", false, false);
 
     ASSERT(regPtr1->size() == 1, "Expected one entry in region");
     ASSERT(regPtr1->containsKey(keys[3]), "Expected region to contain the key");
     ASSERT(!regPtr1->containsValueForKey(keys[3]),
            "Expected region to not contain the value");
-    ASSERT(resultKeys->size() == 1, "Expected one key from registerRegex");
-    ASSERT(strcmp(std::dynamic_pointer_cast<CacheableString>(
-                      resultKeys->operator[](0))
-                      ->asChar(),
-                  keys[3]) == 0,
-           "Unexpected key from registerRegex");
 
     createEntry(regionNames[0], keys[0], vals[0]);
     updateEntry(regionNames[0], keys[1], vals[1]);
diff --git a/cppcache/integration-test/ThinClientFailoverRegex.hpp b/cppcache/integration-test/ThinClientFailoverRegex.hpp
index 3118dff..7b713cc 100644
--- a/cppcache/integration-test/ThinClientFailoverRegex.hpp
+++ b/cppcache/integration-test/ThinClientFailoverRegex.hpp
@@ -356,14 +356,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree)
     createEntry(regionNames[0], keys[0], vals[0]);
     createEntry(regionNames[1], keys[2], vals[2]);
 
-    auto vec = std::make_shared<VectorOfCacheableKey>();
     RegionPtr regPtr1 = getHelper()->getRegion(regionNames[1]);
-    regPtr1->registerRegex(regkeys[1], false, vec);
-
-    ASSERT(vec->size() == 1, "Expected one key after registerRegex");
-    auto key1 = std::dynamic_pointer_cast<CacheableString>(vec->operator[](0));
-    ASSERT(strcmp(keys[1], key1->asChar()) == 0,
-           "Expected key to match in registerRegex");
+    regPtr1->registerRegex(regkeys[1], false);
 
     doNetsearch(
         regionNames[1], keys[1],
diff --git a/cppcache/integration-test/ThinClientInterest1.hpp b/cppcache/integration-test/ThinClientInterest1.hpp
index 0185704..8cf0b6b 100644
--- a/cppcache/integration-test/ThinClientInterest1.hpp
+++ b/cppcache/integration-test/ThinClientInterest1.hpp
@@ -69,7 +69,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, setupClient2_Pool_Locator)
     createPooledRegion(regionNames[0], false /*ack mode*/, locatorsG,
                        "__TEST_POOL1__", true /*client notification*/);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, true);
+    regPtr->registerAllKeys(false, true);
     SLEEP(200);
   }
 END_TASK_DEFINITION
diff --git a/cppcache/integration-test/ThinClientListenerWriter.hpp b/cppcache/integration-test/ThinClientListenerWriter.hpp
index 32c4578..ce6ec8b 100644
--- a/cppcache/integration-test/ThinClientListenerWriter.hpp
+++ b/cppcache/integration-test/ThinClientListenerWriter.hpp
@@ -248,14 +248,14 @@ END_TASK_DEFINITION
 DUNIT_TASK_DEFINITION(CLIENT2, Register2WithFalse)
   {
     RegionPtr regPtr0 = getHelper()->getRegion(regionNames[0]);
-    regPtr0->registerAllKeys(false, nullptr, false, false);
+    regPtr0->registerAllKeys(false, false, false);
   }
 END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT3, Register3WithFalse)
   {
     RegionPtr regPtr0 = getHelper()->getRegion(regionNames[0]);
-    regPtr0->registerAllKeys(false, nullptr, false, false);
+    regPtr0->registerAllKeys(false, false, false);
   }
 END_TASK_DEFINITION
 
diff --git a/cppcache/integration-test/ThinClientNotification.hpp b/cppcache/integration-test/ThinClientNotification.hpp
index 3552b99..089bcce 100644
--- a/cppcache/integration-test/ThinClientNotification.hpp
+++ b/cppcache/integration-test/ThinClientNotification.hpp
@@ -341,9 +341,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateRegions1_PoolLocators)
                        true);
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("CreateRegions1_PoolLocators complete.");
   }
 END_TASK_DEFINITION
@@ -354,9 +354,9 @@ DUNIT_TASK_DEFINITION(CLIENT2, CreateRegions2_PoolLocators)
                        true);
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("CreateRegions2_PoolLocators complete.");
   }
 END_TASK_DEFINITION
diff --git a/cppcache/integration-test/ThinClientPutAll.hpp b/cppcache/integration-test/ThinClientPutAll.hpp
index bb21ca4..5802092 100644
--- a/cppcache/integration-test/ThinClientPutAll.hpp
+++ b/cppcache/integration-test/ThinClientPutAll.hpp
@@ -488,10 +488,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, PutAllOps)
       getAllkeys.push_back(CacheableKey::create(key));
     }
 
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    regPtr0->getAll(getAllkeys, valuesMap, nullptr, false);
-    ASSERT(valuesMap->size() == 500, "GetAll should return 2 entries.");
+    const auto values = regPtr0->getAll(getAllkeys);
+    ASSERT(values.size() == 500, "GetAll should return 500 entries.");
 
     LOG("PutAllOps complete.");
   }
@@ -740,12 +738,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThirteen)
     VectorOfCacheableKey keys1;
     keys1.push_back(keyObject7);
     keys1.push_back(keyObject8);
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    regPtr0->getAll(keys1, valuesMap, nullptr, true);
-    if (valuesMap->size() == keys1.size()) {
+    const auto values = regPtr0->getAll(keys1);
+    if (values.size() == keys1.size()) {
       char buf[2048];
-      for (const auto& iter : *valuesMap) {
+      for (const auto& iter : values) {
         const auto key = std::dynamic_pointer_cast<CacheableKey>(iter.first);
         const auto& mVal = iter.second;
         if (mVal != nullptr) {
@@ -757,20 +753,6 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThirteen)
         }
       }
     }
-    /*HashMapOfCacheable map2;
-    CacheablePtr value;
-    for (int i = 100; i < 102; i++) {
-        map2.insert(CacheableString::create(vals[i - 100]), value);
-    }
-    regPtr0->putAll(map2);
-    for (int i = 100; i < 102; i++) {
-        auto checkPtr = std::dynamic_pointer_cast<Cacheable>( regPtr0->get(
-    CacheableString::create(vals[i - 100])) );
-        if ( checkPtr != nullptr ) {
-            FAIL ("putAll with entry cacheable key and null value  Mismatch");
-        }
-    }*/
-
     LOG("StepThirteen complete.");
   }
 END_TASK_DEFINITION
diff --git a/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp b/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp
index 8d987b4..daaf025 100644
--- a/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp
+++ b/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp
@@ -492,10 +492,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, PutAllOps)
       getAllkeys.push_back(CacheableKey::create(key));
     }
 
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    regPtr0->getAll(getAllkeys, valuesMap, nullptr, false);
-    ASSERT(valuesMap->size() == 500, "GetAll should return 500 entries.");
+
+    const auto values = regPtr0->getAll(getAllkeys);
+    ASSERT(values.size() == 500, "GetAll should return 500 entries.");
 
     LOG("PutAllOps complete.");
   }
@@ -757,12 +756,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, VerifyPutAllWithObjectKey)
     VectorOfCacheableKey keys1;
     keys1.push_back(keyObject7);
     keys1.push_back(keyObject8);
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    regPtr0->getAll(keys1, valuesMap, nullptr, true);
-    if (valuesMap->size() == keys1.size()) {
+    const auto values = regPtr0->getAll(keys1);
+    if (values.size() == keys1.size()) {
       char buf[2048];
-      for (const auto& iter : *valuesMap) {
+      for (const auto& iter : values) {
         auto key = std::dynamic_pointer_cast<CacheableKey>(iter.first);
         CacheablePtr mVal = iter.second;
         if (mVal != nullptr) {
diff --git a/cppcache/integration-test/ThinClientPutGetAll.hpp b/cppcache/integration-test/ThinClientPutGetAll.hpp
index 7353e4f..58d701b 100644
--- a/cppcache/integration-test/ThinClientPutGetAll.hpp
+++ b/cppcache/integration-test/ThinClientPutGetAll.hpp
@@ -74,12 +74,10 @@ void verifyGetAll(RegionPtr region, bool addToLocalCache, const char** _vals,
   expected[_keys[0]] = _vals[startIndex + 0];
   expected[_keys[1]] = _vals[startIndex + 1];
 
-  auto valuesMap = std::make_shared<HashMapOfCacheable>();
-  valuesMap->clear();
-  region->getAll(keys1, valuesMap, nullptr, addToLocalCache, callBack);
-  if (valuesMap->size() == keys1.size()) {
+  auto valuesMap = region->getAll(keys1, callBack);
+  if (valuesMap.size() == keys1.size()) {
     char buf[2048];
-    for (const auto& iter : *valuesMap) {
+    for (const auto& iter : valuesMap) {
       const auto key = std::dynamic_pointer_cast<CacheableKey>(iter.first);
       const auto actualKey = key->toString()->asChar();
       const auto& mVal = iter.second;
@@ -340,61 +338,59 @@ DUNIT_TASK_DEFINITION(CLIENT1, putallAndGetallPdxWithCallBackArg)
     keys1.push_back(CacheableInt32::create(28));
     keys1.push_back(CacheableInt32::create(29));
     keys1.push_back(CacheableInt32::create(30));
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    regPtr0->getAll(keys1, valuesMap, nullptr, true,
-                    CacheableInt32::create(1000));
+    auto valuesMap =
+        regPtr0->getAll(keys1, CacheableInt32::create(1000));
     LOG("GetallPdxWithCallBackArg on Pdx objects completed.");
 
-    ASSERT(valuesMap->size() == keys1.size(), "getAll size did not match");
+    ASSERT(valuesMap.size() == keys1.size(), "getAll size did not match");
 
     auto pRet10 = std::dynamic_pointer_cast<PdxTypes10>(
-        valuesMap->operator[](CacheableInt32::create(30)));
+        valuesMap[CacheableInt32::create(30)]);
     ASSERT(p10->equals(pRet10) == true,
            "Objects of type PdxTypes10 should be equal");
 
     auto pRet9 = std::dynamic_pointer_cast<PdxTypes9>(
-        valuesMap->operator[](CacheableInt32::create(29)));
+        valuesMap[CacheableInt32::create(29)]);
     ASSERT(p9->equals(pRet9) == true,
            "Objects of type PdxTypes9 should be equal");
 
     auto pRet8 = std::dynamic_pointer_cast<PdxTypes8>(
-        valuesMap->operator[](CacheableInt32::create(28)));
+        valuesMap[CacheableInt32::create(28)]);
     ASSERT(p8->equals(pRet8) == true,
            "Objects of type PdxTypes8 should be equal");
 
     auto pRet7 = std::dynamic_pointer_cast<PdxTypes7>(
-        valuesMap->operator[](CacheableInt32::create(27)));
+        valuesMap[CacheableInt32::create(27)]);
     ASSERT(p7->equals(pRet7) == true,
            "Objects of type PdxTypes7 should be equal");
 
     auto pRet6 = std::dynamic_pointer_cast<PdxTypes6>(
-        valuesMap->operator[](CacheableInt32::create(26)));
+        valuesMap[CacheableInt32::create(26)]);
     ASSERT(p6->equals(pRet6) == true,
            "Objects of type PdxTypes6 should be equal");
 
     auto pRet5 = std::dynamic_pointer_cast<PdxTypes5>(
-        valuesMap->operator[](CacheableInt32::create(25)));
+        valuesMap[CacheableInt32::create(25)]);
     ASSERT(p5->equals(pRet5) == true,
            "Objects of type PdxTypes5 should be equal");
 
     auto pRet4 = std::dynamic_pointer_cast<PdxTypes4>(
-        valuesMap->operator[](CacheableInt32::create(24)));
+        valuesMap[CacheableInt32::create(24)]);
     ASSERT(p4->equals(pRet4) == true,
            "Objects of type PdxTypes4 should be equal");
 
     auto pRet3 = std::dynamic_pointer_cast<PdxTypes3>(
-        valuesMap->operator[](CacheableInt32::create(23)));
+        valuesMap[CacheableInt32::create(23)]);
     ASSERT(p3->equals(pRet3) == true,
            "Objects of type PdxTypes3 should be equal");
 
     auto pRet2 = std::dynamic_pointer_cast<PdxTypes2>(
-        valuesMap->operator[](CacheableInt32::create(22)));
+        valuesMap[CacheableInt32::create(22)]);
     ASSERT(p2->equals(pRet2) == true,
            "Objects of type PdxTypes2 should be equal");
 
     auto pRet1 = std::dynamic_pointer_cast<PdxTypes1>(
-        valuesMap->operator[](CacheableInt32::create(21)));
+        valuesMap[CacheableInt32::create(21)]);
     ASSERT(p1->equals(pRet1) == true,
            "Objects of type PdxTypes1 should be equal");
 
@@ -518,60 +514,58 @@ DUNIT_TASK_DEFINITION(CLIENT1, putallAndGetallPdx)
     keys1.push_back(CacheableInt32::create(28));
     keys1.push_back(CacheableInt32::create(29));
     keys1.push_back(CacheableInt32::create(30));
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    regPtr0->getAll(keys1, valuesMap, nullptr, true);
+    auto valuesMap = regPtr0->getAll(keys1);
     LOG("getAll on Pdx objects completed.");
 
-    ASSERT(valuesMap->size() == keys1.size(), "getAll size did not match");
+    ASSERT(valuesMap.size() == keys1.size(), "getAll size did not match");
 
     auto pRet10 = std::dynamic_pointer_cast<PdxTypes10>(
-        valuesMap->operator[](CacheableInt32::create(30)));
+        valuesMap[CacheableInt32::create(30)]);
     ASSERT(p10->equals(pRet10) == true,
            "Objects of type PdxTypes10 should be equal");
 
     auto pRet9 = std::dynamic_pointer_cast<PdxTypes9>(
-        valuesMap->operator[](CacheableInt32::create(29)));
+        valuesMap[CacheableInt32::create(29)]);
     ASSERT(p9->equals(pRet9) == true,
            "Objects of type PdxTypes9 should be equal");
 
     auto pRet8 = std::dynamic_pointer_cast<PdxTypes8>(
-        valuesMap->operator[](CacheableInt32::create(28)));
+        valuesMap[CacheableInt32::create(28)]);
     ASSERT(p8->equals(pRet8) == true,
            "Objects of type PdxTypes8 should be equal");
 
     auto pRet7 = std::dynamic_pointer_cast<PdxTypes7>(
-        valuesMap->operator[](CacheableInt32::create(27)));
+        valuesMap[CacheableInt32::create(27)]);
     ASSERT(p7->equals(pRet7) == true,
            "Objects of type PdxTypes7 should be equal");
 
     auto pRet6 = std::dynamic_pointer_cast<PdxTypes6>(
-        valuesMap->operator[](CacheableInt32::create(26)));
+        valuesMap[CacheableInt32::create(26)]);
     ASSERT(p6->equals(pRet6) == true,
            "Objects of type PdxTypes6 should be equal");
 
     auto pRet5 = std::dynamic_pointer_cast<PdxTypes5>(
-        valuesMap->operator[](CacheableInt32::create(25)));
+        valuesMap[CacheableInt32::create(25)]);
     ASSERT(p5->equals(pRet5) == true,
            "Objects of type PdxTypes5 should be equal");
 
     auto pRet4 = std::dynamic_pointer_cast<PdxTypes4>(
-        valuesMap->operator[](CacheableInt32::create(24)));
+        valuesMap[CacheableInt32::create(24)]);
     ASSERT(p4->equals(pRet4) == true,
            "Objects of type PdxTypes4 should be equal");
 
     auto pRet3 = std::dynamic_pointer_cast<PdxTypes3>(
-        valuesMap->operator[](CacheableInt32::create(23)));
+        valuesMap[CacheableInt32::create(23)]);
     ASSERT(p3->equals(pRet3) == true,
            "Objects of type PdxTypes3 should be equal");
 
     auto pRet2 = std::dynamic_pointer_cast<PdxTypes2>(
-        valuesMap->operator[](CacheableInt32::create(22)));
+        valuesMap[CacheableInt32::create(22)]);
     ASSERT(p2->equals(pRet2) == true,
            "Objects of type PdxTypes2 should be equal");
 
     auto pRet1 = std::dynamic_pointer_cast<PdxTypes1>(
-        valuesMap->operator[](CacheableInt32::create(21)));
+        valuesMap[CacheableInt32::create(21)]);
     ASSERT(p1->equals(pRet1) == true,
            "Objects of type PdxTypes1 should be equal");
 
diff --git a/cppcache/integration-test/ThinClientSSL.hpp b/cppcache/integration-test/ThinClientSSL.hpp
index 33a65bf..c52b4ec 100644
--- a/cppcache/integration-test/ThinClientSSL.hpp
+++ b/cppcache/integration-test/ThinClientSSL.hpp
@@ -354,9 +354,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateRegions1_PoolLocators)
                        true);
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("CreateRegions1_PoolLocators complete.");
   }
 END_TASK_DEFINITION
@@ -367,9 +367,9 @@ DUNIT_TASK_DEFINITION(CLIENT2, CreateRegions2_PoolLocators)
                        true);
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("CreateRegions2_PoolLocators complete.");
   }
 END_TASK_DEFINITION
diff --git a/cppcache/integration-test/ThinClientSSLWithPassword.hpp b/cppcache/integration-test/ThinClientSSLWithPassword.hpp
index ae9dbc2..ac74c6c 100644
--- a/cppcache/integration-test/ThinClientSSLWithPassword.hpp
+++ b/cppcache/integration-test/ThinClientSSLWithPassword.hpp
@@ -368,9 +368,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateRegions1_PoolLocators)
                        true);
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("CreateRegions1_PoolLocators complete.");
   }
 END_TASK_DEFINITION
@@ -381,9 +381,9 @@ DUNIT_TASK_DEFINITION(CLIENT2, CreateRegions2_PoolLocators)
                        true);
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     regPtr = getHelper()->getRegion(regionNames[1]);
-    regPtr->registerAllKeys(false, nullptr, false, false);
+    regPtr->registerAllKeys(false, false, false);
     LOG("CreateRegions2_PoolLocators complete.");
   }
 END_TASK_DEFINITION
diff --git a/cppcache/integration-test/ThinClientSecurityHelper.hpp b/cppcache/integration-test/ThinClientSecurityHelper.hpp
index 7721035..f4570f0 100644
--- a/cppcache/integration-test/ThinClientSecurityHelper.hpp
+++ b/cppcache/integration-test/ThinClientSecurityHelper.hpp
@@ -202,7 +202,7 @@ class putThread : public ACE_Task_Base {
     char buf[20];
     char valbuf[20];
     if (m_regInt) {
-      m_reg->registerAllKeys(false, nullptr, true);
+      m_reg->registerAllKeys(false, true);
     }
     if (m_waitTime != 0) {
       ACE_OS::sleep(m_waitTime);
@@ -233,7 +233,7 @@ class putThread : public ACE_Task_Base {
           m_reg->registerKeys(keys0, false, true);
         }
       } else if (m_opcode == 6) {
-        m_reg->registerRegex("key-[1-3]", false, nullptr, true);
+        m_reg->registerRegex("key-[1-3]", false, true);
       } else {
         try {
           if (m_isCallBack) {
diff --git a/cppcache/integration-test/ThinClientTransactions.hpp b/cppcache/integration-test/ThinClientTransactions.hpp
index a41df4c..593a558 100644
--- a/cppcache/integration-test/ThinClientTransactions.hpp
+++ b/cppcache/integration-test/ThinClientTransactions.hpp
@@ -984,11 +984,10 @@ DUNIT_TASK_DEFINITION(CLIENT2, CreateClient2Entries)
 END_TASK_DEFINITION
 DUNIT_TASK_DEFINITION(CLIENT1, UpdateClient1Entries)
   {
-    VectorOfCacheableKey vec0, vec1;
     RegionPtr reg0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr reg1 = getHelper()->getRegion(regionNames[1]);
-    reg0->serverKeys(vec0);
-    reg1->serverKeys(vec1);
+    auto vec0 = reg0->serverKeys();
+    auto vec1 = reg1->serverKeys();
     ASSERT(vec0.size() == 2, "Should have 2 keys in first region.");
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
     std::string key0, key1;
diff --git a/cppcache/integration-test/ThinClientTransactionsXA.hpp b/cppcache/integration-test/ThinClientTransactionsXA.hpp
index 331d701..7741556 100644
--- a/cppcache/integration-test/ThinClientTransactionsXA.hpp
+++ b/cppcache/integration-test/ThinClientTransactionsXA.hpp
@@ -997,11 +997,10 @@ DUNIT_TASK_DEFINITION(CLIENT2, StepFour)
 END_TASK_DEFINITION
 DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
   {
-    VectorOfCacheableKey vec0, vec1;
     RegionPtr reg0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr reg1 = getHelper()->getRegion(regionNames[1]);
-    reg0->serverKeys(vec0);
-    reg1->serverKeys(vec1);
+    auto vec0 = reg0->serverKeys();
+    auto vec1 = reg1->serverKeys();
     ASSERT(vec0.size() == 2, "Should have 2 keys in first region.");
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
     std::string key0, key1;
diff --git a/cppcache/integration-test/fw_dunit.cpp b/cppcache/integration-test/fw_dunit.cpp
index 1613a39..821fe6b 100644
--- a/cppcache/integration-test/fw_dunit.cpp
+++ b/cppcache/integration-test/fw_dunit.cpp
@@ -996,12 +996,9 @@ void Record::read(apache::geode::client::DataInput& input) {
   input.readASCII(&buf);
   m_testName = buf;
   delete[] buf;
-  input.readInt(&m_operations);
-  int64_t timetmp;
-  input.readInt(&timetmp);
-  m_startTime.msec(timetmp);
-  input.readInt(&timetmp);
-  m_stopTime.msec(timetmp);
+  m_operations = input.readInt64();
+  m_startTime.msec(input.readInt64());
+  m_stopTime.msec(input.readInt64());
 }
 
 Record::~Record() {}
diff --git a/cppcache/integration-test/testCache.cpp b/cppcache/integration-test/testCache.cpp
index af65ebf..8ac7890 100644
--- a/cppcache/integration-test/testCache.cpp
+++ b/cppcache/integration-test/testCache.cpp
@@ -92,8 +92,7 @@ BEGIN_TEST(CacheFunction)
     std::cout << ex.getMessage() << std::endl;
     ASSERT(false, (char*)"subregion create failed");
   }
-  VectorOfRegion vr;
-  rptr->subregions(true, vr);
+  VectorOfRegion vr = rptr->subregions(true);
   std::cout << "  vr.size=" << vr.size() << std::endl;
   ASSERT(vr.size() == totalSubRegions, "Number of Subregions does not match");
   std::cout << "sub regions:" << std::endl;
@@ -102,9 +101,8 @@ BEGIN_TEST(CacheFunction)
     std::cout << "vc[" << i << "]=" << vr.at(i)->getName() << std::endl;
   }
   vr.clear();
-  VectorOfRegion vrp;
   std::cout << "get cache root regions" << std::endl;
-  cptr->rootRegions(vrp);
+  auto vrp = cptr->rootRegions();
   std::cout << "  vrp.size=" << vrp.size() << std::endl;
   std::cout << "root regions in Cache:" << std::endl;
   for (i = 0; i < static_cast<uint32_t>(vrp.size()); i++) {
diff --git a/cppcache/integration-test/testDataOutput.cpp b/cppcache/integration-test/testDataOutput.cpp
index f0755f9..5051378 100644
--- a/cppcache/integration-test/testDataOutput.cpp
+++ b/cppcache/integration-test/testDataOutput.cpp
@@ -59,10 +59,8 @@ BEGIN_TEST(Byte)
 
     ASSERT(buffer[0] == (uint8_t)0x11, "expected 0x11.");
 
-    int8_t result;
-
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    dataInput.read(&result);
+    const  auto result = dataInput.read();
     ASSERT(result == (uint8_t)0x11, "expected 0x11");
   }
 END_TEST(Byte)
@@ -78,12 +76,10 @@ BEGIN_TEST(Boolean)
     ASSERT(buffer[0] == (uint8_t)0x1, "expected 0x1.");
     ASSERT(buffer[1] == (uint8_t)0x0, "expected 0x0.");
 
-    bool result;
-
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    dataInput.readBoolean(&result);
+    auto result = dataInput.readBoolean();
     ASSERT(result, "expected true");
-    dataInput.readBoolean(&result);
+    result = dataInput.readBoolean();
     ASSERT(result == false, "expected false");
   }
 END_TEST(Boolean)
@@ -97,10 +93,8 @@ BEGIN_TEST(Short)
     ASSERT(buffer[0] == (uint8_t)0x11, "expected 0x11.");
     ASSERT(buffer[1] == (uint8_t)0x22, "expected 0x11.");
 
-    int16_t result;
-
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    dataInput.readInt(&result);
+    int16_t result = dataInput.readInt16();
     ASSERT(result == 0x1122, "expected 0x1122");
   }
 END_TEST(Short)
@@ -118,8 +112,7 @@ BEGIN_TEST(int_t)
     ASSERT(buffer[3] == (uint8_t)0x44, "expected 0x44.");
 
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    int32_t result;
-    dataInput.readInt(&result);
+    int32_t result = dataInput.readInt32();
     ASSERT(result == 0x11223344, "expected 0x11223344");
   }
 END_TEST(int_t)
@@ -141,8 +134,7 @@ BEGIN_TEST(Long)
     ASSERT(buffer[7] == (uint8_t)0x88, "expected 0x88.");
 
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    int64_t result;
-    dataInput.readInt(&result);
+    int64_t result = dataInput.readInt64();
     ASSERT(result == value, "expected 0x1122334455667788");
   }
 END_TEST(Long)
@@ -159,8 +151,7 @@ BEGIN_TEST(Float)
     ASSERT(buffer[3] == (uint8_t)0x9a, "expected 0x9a.");
 
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    float result;
-    dataInput.readFloat(&result);
+    float result = dataInput.readFloat();
     ASSERT(result == 1.2f, "expected 1.2f");
   }
 END_TEST(Float)
@@ -181,8 +172,7 @@ BEGIN_TEST(Double)
     ASSERT(buffer[7] == (uint8_t)0x33, "expected 0x33.");
 
     DataInputInternal dataInput(buffer, dataOutput.getBufferLength(), nullptr);
-    double result;
-    dataInput.readDouble(&result);
+    double result = dataInput.readDouble();
     ASSERT(result == 1.2, "expected 1.2");
   }
 END_TEST(Double)
diff --git a/cppcache/integration-test/testExpiration.cpp b/cppcache/integration-test/testExpiration.cpp
index 7fc5c00..c635546 100644
--- a/cppcache/integration-test/testExpiration.cpp
+++ b/cppcache/integration-test/testExpiration.cpp
@@ -29,8 +29,7 @@ ExpirationAction::Action action = ExpirationAction::DESTROY;
 // This test is for serially running the tests.
 
 size_t getNumOfEntries(RegionPtr& R1) {
-  VectorOfCacheableKey v;
-  R1->keys(v);
+  VectorOfCacheableKey v = R1->keys();
   LOGFINE("Number of keys in region %s is %d", R1->getFullPath(), v.size());
   return v.size();
 }
diff --git a/cppcache/integration-test/testOverflowPutGetSqLite.cpp b/cppcache/integration-test/testOverflowPutGetSqLite.cpp
index 5fc7cfc..cc89dd3 100644
--- a/cppcache/integration-test/testOverflowPutGetSqLite.cpp
+++ b/cppcache/integration-test/testOverflowPutGetSqLite.cpp
@@ -36,10 +36,8 @@ std::string sqlite_dir = "SqLiteRegionData";
 
 // Return the number of keys and values in entries map.
 void getNumOfEntries(RegionPtr& regionPtr, uint32_t num) {
-  VectorOfCacheableKey v;
-  regionPtr->keys(v);
-  VectorOfCacheable vecValues;
-  regionPtr->values(vecValues);
+  auto v = regionPtr->keys();
+  auto vecValues = regionPtr->values();
   printf("Values vector size is %zd\n", vecValues.size());
   printf("Num is %d\n", num);
   ASSERT(vecValues.size() == num, (char*)"size of value vec and num not equal");
@@ -87,8 +85,7 @@ void validateAttribute(RegionPtr& regionPtr) {
 }
 
 void checkOverflowTokenValues(RegionPtr& regionPtr, uint32_t num) {
-  VectorOfCacheableKey v;
-  regionPtr->keys(v);
+  VectorOfCacheableKey v = regionPtr->keys();
   CacheableKeyPtr keyPtr;
   CacheablePtr valuePtr;
   int count = 0;
@@ -111,8 +108,7 @@ void checkOverflowTokenValues(RegionPtr& regionPtr, uint32_t num) {
 }
 
 void checkOverflowToken(RegionPtr& regionPtr, uint32_t lruLimit) {
-  VectorOfCacheableKey v;
-  regionPtr->keys(v);
+  VectorOfCacheableKey v = regionPtr->keys();
   CacheableKeyPtr keyPtr;
   CacheablePtr valuePtr;
   int normalCount = 0;
@@ -226,8 +222,7 @@ uint32_t doNget(RegionPtr& regionPtr, uint32_t num, uint32_t start = 0) {
  *  Test the entry operation ( local invalidate, localDestroy ).
  */
 void testEntryDestroy(RegionPtr& regionPtr, uint32_t num) {
-  VectorOfCacheableKey v;
-  regionPtr->keys(v);
+  VectorOfCacheableKey v = regionPtr->keys();
   VectorOfCacheable vecValues;
   CacheablePtr valuePtr;
   for (uint32_t i = 45; i < 50; i++) {
@@ -239,13 +234,12 @@ void testEntryDestroy(RegionPtr& regionPtr, uint32_t num) {
       ASSERT(false, (char*)"entry missing");
     }
   }
-  regionPtr->keys(v);
+  v = regionPtr->keys();
   ASSERT(v.size() == num - 5, (char*)"size of key vec not equal");
 }
 
 void testEntryInvalidate(RegionPtr& regionPtr, uint32_t num) {
-  VectorOfCacheableKey v;
-  regionPtr->keys(v);
+  VectorOfCacheableKey v = regionPtr->keys();
   VectorOfCacheable vecValues;
   CacheablePtr valuePtr;
   for (uint32_t i = 40; i < 45; i++) {
@@ -257,7 +251,7 @@ void testEntryInvalidate(RegionPtr& regionPtr, uint32_t num) {
       ASSERT(false, (char*)"entry missing");
     }
   }
-  regionPtr->keys(v);
+  v = regionPtr->keys();
   ASSERT(v.size() == num, (char*)"size of key vec not equal");
 }
 
@@ -290,12 +284,10 @@ void verifyGetAll(RegionPtr region, int startIndex) {
   for (int i = 0; i <= 100; i++) keysVector.push_back(CacheableKey::create(i));
 
   // keysVector.push_back(CacheableKey::create(101)); //key not there
-  auto valuesMap = std::make_shared<HashMapOfCacheable>();
-  valuesMap->clear();
-  region->getAll(keysVector, valuesMap, nullptr, false);
-  if (valuesMap->size() == keysVector.size()) {
+  const auto valuesMap = region->getAll(keysVector);
+  if (valuesMap.size() == keysVector.size()) {
     int i = startIndex;
-    for (const auto& iter : *valuesMap) {
+    for (const auto& iter : valuesMap) {
       auto key = std::dynamic_pointer_cast<CacheableKey>(iter.first);
       CacheablePtr mVal = iter.second;
       if (mVal != nullptr) {
diff --git a/cppcache/integration-test/testRegionMap.cpp b/cppcache/integration-test/testRegionMap.cpp
index 9f7fbd6..96a0ff7 100644
--- a/cppcache/integration-test/testRegionMap.cpp
+++ b/cppcache/integration-test/testRegionMap.cpp
@@ -45,8 +45,7 @@ BEGIN_TEST(TestRegionLRULastTen)
     sprintf(buf, "value of %d", i);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     ASSERT(vecKeys.size() == (i + 1), "expected more entries");
   }
   for (i = 10; i < 20; i++) {
@@ -56,13 +55,11 @@ BEGIN_TEST(TestRegionLRULastTen)
     sprintf(buf, "value of %d", i);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     cacheHelper.showKeys(vecKeys);
     ASSERT(vecKeys.size() == (10), "expected 10 entries");
   }
-  VectorOfCacheableKey vecKeys;
-  regionPtr->keys(vecKeys);
+  VectorOfCacheableKey vecKeys = regionPtr->keys();
   ASSERT(vecKeys.size() == 10, "expected 10 entries");
   // verify it is the last 10 keys..
   int expected = 0;
@@ -92,8 +89,7 @@ BEGIN_TEST(TestRegionNoLRU)
     sprintf(buf, "value of %d", i);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     cacheHelper.showKeys(vecKeys);
     ASSERT(vecKeys.size() == (i + 1), "unexpected entries count");
   }
@@ -119,8 +115,7 @@ BEGIN_TEST(TestRegionLRULocal)
     sprintf(buf, "value of %d", i);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     ASSERT(vecKeys.size() == (i < 10 ? i + 1 : 10), "expected more entries");
   }
 
@@ -157,8 +152,7 @@ BEGIN_TEST(TestRecentlyUsedBit)
     CacheableKeyPtr key = CacheableKey::create(buf);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     cacheHelper.showKeys(vecKeys);
     ASSERT(vecKeys.size() == 10, "expected more entries");
   }
@@ -168,8 +162,7 @@ BEGIN_TEST(TestRecentlyUsedBit)
     CacheableKeyPtr key = CacheableKey::create(buf);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     cacheHelper.showKeys(vecKeys);
     ASSERT(vecKeys.size() == 10, "expected more entries");
   }
@@ -191,8 +184,7 @@ BEGIN_TEST(TestEmptiedMap)
     sprintf(buf, "value of %d", i);
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
-    VectorOfCacheableKey vecKeys;
-    regionPtr->keys(vecKeys);
+    VectorOfCacheableKey vecKeys = regionPtr->keys();
     ASSERT(vecKeys.size() == (i + 1), "expected more entries");
   }
   for (i = 0; i < 10; i++) {
@@ -204,8 +196,7 @@ BEGIN_TEST(TestEmptiedMap)
               << std::dynamic_pointer_cast<CacheableString>(key)->asChar()
               << std::endl;
   }
-  VectorOfCacheableKey vecKeys;
-  regionPtr->keys(vecKeys);
+  VectorOfCacheableKey vecKeys = regionPtr->keys();
   ASSERT(vecKeys.size() == 0, "expected more entries");
   for (i = 20; i < 40; i++) {
     char buf[100];
@@ -215,8 +206,7 @@ BEGIN_TEST(TestEmptiedMap)
     CacheableStringPtr valuePtr = cacheHelper.createCacheable(buf);
     regionPtr->put(key, valuePtr);
   }
-  vecKeys.clear();
-  regionPtr->keys(vecKeys);
+  vecKeys = regionPtr->keys();
   ASSERT(vecKeys.size() == 10, "expected more entries");
 
 END_TEST(TestEmptiedMap)
diff --git a/cppcache/integration-test/testSerialization.cpp b/cppcache/integration-test/testSerialization.cpp
index 4e96700..4941962 100644
--- a/cppcache/integration-test/testSerialization.cpp
+++ b/cppcache/integration-test/testSerialization.cpp
@@ -85,10 +85,9 @@ class OtherType : public Serializable {
   virtual uint32_t objectSize() const { return sizeof(CData); }
 
   virtual void fromData(DataInput& input) {
-    int32_t size = 0;
-    input.readArrayLen(&size);
+    int32_t size = input.readArrayLen();
     input.readBytesOnly(reinterpret_cast<uint8_t*>(&m_struct), size);
-    input.readInt(&m_classIdToReturn);
+    m_classIdToReturn = input.readInt32();
   }
 
   static Serializable* createDeserializable() {
diff --git a/cppcache/integration-test/testThinClientBigValue.cpp b/cppcache/integration-test/testThinClientBigValue.cpp
index 361d594..ba2d17a 100644
--- a/cppcache/integration-test/testThinClientBigValue.cpp
+++ b/cppcache/integration-test/testThinClientBigValue.cpp
@@ -276,15 +276,7 @@ DUNIT_TASK(CLIENT2, VerifyUpdatedManyPutsGetAll)
       sprintf(keybuf, "keys1%010d", index);
       vec.push_back(CacheableKey::create(keybuf));
     }
-    try {
-      regPtr->getAll(vec, nullptr, nullptr, false);
-      FAIL(
-          "Expected IllegalArgumentException when nothing "
-          "is being fetched");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
-    }
-    regPtr->getAll(vec, nullptr, nullptr, true);
+    regPtr->getAll(vec);
     LOG("On client getAll for entries completed.");
     for (int index = 0; index < entriesExpected; ++index) {
       sprintf(keybuf, "keys1%010d", index);
@@ -300,14 +292,13 @@ END_TASK(VerifyUpdatedManyPutsGetAll)
 
 DUNIT_TASK(CLIENT1, UpdateManyPutsInt64)
   {
-    RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
+    auto regPtr = getHelper()->getRegion(regionNames[0]);
     LOG("Beginning updated many puts for int64.");
     int expectEntries = 0;
     char valbuf[1100];
     for (int64_t index = 0; index < MAX_PUTS; ++index) {
       int64_t key = index * index * index;
       sprintf(valbuf, "values3%0200" PRId64, index);
-      // regPtr->put(key, valbuf);
       regPtr->put(CacheableInt64::create(key), valbuf);
       expectEntries++;
     }
@@ -361,34 +352,24 @@ DUNIT_TASK(CLIENT2, VerifyUpdatedManyPutsInt64GetAll)
     VectorOfCacheableKey vec;
     for (int64_t index = 0; index < entriesExpected; ++index) {
       int64_t key = index * index * index;
-      // vec.push_back(CacheableKey::create(key));
       vec.push_back(CacheableInt64::create(key));
     }
-    try {
-      regPtr->getAll(vec, nullptr, nullptr, false);
-      FAIL(
-          "Expected IllegalArgumentException when "
-          "nothing is being fetched");
-    } catch (const IllegalArgumentException&) {
-      LOG("Got expected IllegalArgumentException");
-    }
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    regPtr->getAll(vec, valuesMap, nullptr, true);
-    LOG("On client getAll for int64 entries "
-        "completed.");
+    const auto valuesMap = regPtr->getAll(vec);
+    LOG("On client getAll for int64 entries completed.");
     for (int32_t index = 0; index < entriesExpected; ++index) {
-      CacheableKeyPtr key = vec[index];
-      RegionEntryPtr entry = regPtr->getEntry(key);
+      auto key = vec[index];
+      ASSERT(regPtr->containsKey(key), "must contain key");
+      auto entry = regPtr->getEntry(key);
       ASSERT(entry != nullptr, "expected non-null entry");
-      auto valPtr =
-          std::dynamic_pointer_cast<CacheableString>(entry->getValue());
+      auto valPtr = entry->getValue();
+          //std::dynamic_pointer_cast<CacheableString>(entry->getValue());
       ASSERT(valPtr != nullptr, "expected non-null value");
-      ASSERT(valPtr->length() == 207, "unexpected size of value in verify");
-      const auto& iter = valuesMap->find(key);
-      ASSERT(iter != valuesMap->end(), "expected to find key in map");
+      //ASSERT(valPtr->length() == 207, "unexpected size of value in verify");
+      const auto& iter = valuesMap.find(key);
+      ASSERT(iter != valuesMap.end(), "expected to find key in map");
       valPtr = std::dynamic_pointer_cast<CacheableString>(iter->second);
       ASSERT(valPtr != nullptr, "expected non-null value");
-      ASSERT(valPtr->length() == 207, "unexpected size of value in verify");
+      //ASSERT(valPtr->length() == 207, "unexpected size of value in verify");
     }
     LOG("On client Found all int64 entries with "
         "correct size via getAll.");
diff --git a/cppcache/integration-test/testThinClientCq.cpp b/cppcache/integration-test/testThinClientCq.cpp
index 19db32e..05daa40 100644
--- a/cppcache/integration-test/testThinClientCq.cpp
+++ b/cppcache/integration-test/testThinClientCq.cpp
@@ -530,8 +530,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
         events[j] += cqStats->numEvents();
       }
       CqAttributesPtr cqAttr = cqy->getCqAttributes();
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
       sprintf(buf, "number of listeners for cq[%s] is %zd", cqNames[i],
               vl.size());
       LOG(buf);
@@ -568,7 +567,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
         CqAttributesMutatorPtr cqAttrMtor = cqy->getCqAttributesMutator();
         CqListenerPtr ptr = vl[0];
         cqAttrMtor->removeCqListener(ptr);
-        cqAttr->getCqListeners(vl);
+        vl = cqAttr->getCqListeners();
         sprintf(buf, "number of listeners for cq[%s] is %zd", cqNames[i],
                 vl.size());
         LOG(buf);
@@ -810,8 +809,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, createCQ)
     SLEEP(20000);
 
     cqAttr = cq->getCqAttributes();
-    std::vector<CqListenerPtr> vl;
-    cqAttr->getCqListeners(vl);
+    auto vl = cqAttr->getCqListeners();
     MyCqStatusListener* myStatusCq =
         dynamic_cast<MyCqStatusListener*>(vl[0].get());
     LOGINFO("checkCQStatusOnConnect = %d ", myStatusCq->getCqsConnectedCount());
@@ -837,8 +835,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, createCQ_Pool)
     SLEEP(20000);
 
     cqAttr = cq->getCqAttributes();
-    std::vector<CqListenerPtr> vl;
-    cqAttr->getCqListeners(vl);
+    auto vl = cqAttr->getCqListeners();
     MyCqStatusListener* myStatusCq =
         dynamic_cast<MyCqStatusListener*>(vl[0].get());
     LOGINFO("checkCQStatusOnConnect = %d ", myStatusCq->getCqsConnectedCount());
@@ -858,8 +855,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, createCQ_Pool)
     SLEEP(20000);
 
     cqAttr1 = cq2->getCqAttributes();
-    std::vector<CqListenerPtr> vl2;
-    cqAttr1->getCqListeners(vl2);
+    auto vl2 = cqAttr1->getCqListeners();
     MyCqStatusListener* myStatusCq2 =
         dynamic_cast<MyCqStatusListener*>(vl2[0].get());
     LOGINFO("checkCQStatusOnConnect = %d ",
@@ -923,8 +919,7 @@ void checkCQStatusOnConnect(const char* poolName, const char* name,
   }
   CqQueryPtr cq = qs->getCq(const_cast<char*>(name));
   CqAttributesPtr cqAttr = cq->getCqAttributes();
-  std::vector<CqListenerPtr> vl;
-  cqAttr->getCqListeners(vl);
+  auto vl = cqAttr->getCqListeners();
   MyCqStatusListener* myStatusCq =
       dynamic_cast<MyCqStatusListener*>(vl[0].get());
   LOGINFO("checkCQStatusOnConnect = %d ", myStatusCq->getCqsConnectedCount());
@@ -967,10 +962,8 @@ void checkCQStatusOnDisConnect(const char* poolName, const char* cqName,
   }
   CqQueryPtr cq = qs->getCq(const_cast<char*>(cqName));
   CqAttributesPtr cqAttr = cq->getCqAttributes();
-  std::vector<CqListenerPtr> vl;
-  cqAttr->getCqListeners(vl);
-  MyCqStatusListener* myStatusCq =
-      dynamic_cast<MyCqStatusListener*>(vl[0].get());
+  auto vl = cqAttr->getCqListeners();
+  auto myStatusCq = std::dynamic_pointer_cast<MyCqStatusListener>(vl[0]);
   LOGINFO("checkCQStatusOnDisConnect = %d ",
           myStatusCq->getCqsDisConnectedCount());
   ASSERT(myStatusCq->getCqsDisConnectedCount() == disconnect,
@@ -1039,8 +1032,7 @@ void checkCQStatusOnPutEvent(const char* poolName, const char* cqName,
   }
   CqQueryPtr cq = qs->getCq(const_cast<char*>(cqName));
   CqAttributesPtr cqAttr = cq->getCqAttributes();
-  std::vector<CqListenerPtr> vl;
-  cqAttr->getCqListeners(vl);
+  auto vl = cqAttr->getCqListeners();
   MyCqStatusListener* myStatusCq =
       dynamic_cast<MyCqStatusListener*>(vl[0].get());
   LOGINFO("checkCQStatusOnPutEvent = %d ", myStatusCq->getNumInserts());
@@ -1097,8 +1089,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, ProcessCQ)
     LOGINFO("putEntries complete");
 
     cqAttr = cq->getCqAttributes();
-    std::vector<CqListenerPtr> vl;
-    cqAttr->getCqListeners(vl);
+    auto vl = cqAttr->getCqListeners();
     ASSERT(vl.size() == 2, "incorrect number of CqListeners count.");
     MyCqStatusListener* myStatusCq =
         dynamic_cast<MyCqStatusListener*>(vl[1].get());
@@ -1118,14 +1109,14 @@ DUNIT_TASK_DEFINITION(CLIENT1, ProcessCQ)
     CqAttributesMutatorPtr cqAttrMtor = cq->getCqAttributesMutator();
     CqListenerPtr ptr = vl[0];
     cqAttrMtor->removeCqListener(ptr);
-    cqAttr->getCqListeners(vl);
+    vl = cqAttr->getCqListeners();
     LOGINFO("number of listeners = %d", vl.size());
 
     ASSERT(vl.size() == 1, "incorrect number of listeners");
 
     cqAttrMtor->removeCqListener(vl[0]);
     LOGINFO("removeCqListener again");
-    cqAttr->getCqListeners(vl);
+    vl = cqAttr->getCqListeners();
     LOGINFO("number of listeners = %d", vl.size());
 
     ASSERT(vl.size() == 0, "incorrect number of listeners");
@@ -1137,12 +1128,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, ProcessCQ)
     LOG("ProcessCQ setCqListeneres done.");
 
     cqAttr = cq->getCqAttributes();
-    std::vector<CqListenerPtr> vl3;
-    cqAttr->getCqListeners(vl3);
+    auto vl3 = cqAttr->getCqListeners();
     ASSERT(vl3.size() == 2, "incorrect number of CqListeners count.");
 
-    MyCqStatusListener* myStatusCq2 =
-        dynamic_cast<MyCqStatusListener*>(vl3[0].get());
+    auto myStatusCq2 = std::dynamic_pointer_cast<MyCqStatusListener>(vl3[0]);
     myStatusCq2->clear();
 
     for (int i = 1; i <= 5; i++) {
@@ -1162,10 +1151,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, ProcessCQ)
     LOGINFO("initCqListeners complete.");
 
     cqAttr = cq->getCqAttributes();
-    std::vector<CqListenerPtr> vl2;
-    cqAttr->getCqListeners(vl2);
+    auto vl2 = cqAttr->getCqListeners();
     ASSERT(vl2.size() == 2, "incorrect number of CqListeners count.");
-    myStatusCq2 = dynamic_cast<MyCqStatusListener*>(vl2[0].get());
+    myStatusCq2 = std::dynamic_pointer_cast<MyCqStatusListener>(vl2[0]);
     LOGINFO("No of insert events = %d ", myStatusCq2->getNumUpdates());
     LOGINFO("No of OnCqConnected events = %d ",
             myStatusCq2->getCqsConnectedCount());
@@ -1174,7 +1162,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, ProcessCQ)
     ASSERT(myStatusCq2->getCqsConnectedCount() == 0,
            "incorrect number of CqStatus Connected count.");
 
-    MyCqListener* myCq2 = dynamic_cast<MyCqListener*>(vl2[1].get());
+    auto myCq2 = std::dynamic_pointer_cast<MyCqListener>(vl2[1]);
     LOGINFO("No of insert events = %d ", myCq2->getNumInserts());
     ASSERT(myCq2->getNumUpdates() == 5,
            "incorrect number of CqStatus Updates count.");
diff --git a/cppcache/integration-test/testThinClientCqFailover.cpp b/cppcache/integration-test/testThinClientCqFailover.cpp
index 2c4f2da..b001985 100644
--- a/cppcache/integration-test/testThinClientCqFailover.cpp
+++ b/cppcache/integration-test/testThinClientCqFailover.cpp
@@ -281,8 +281,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree3)
     ASSERT(cqAttr != nullptr, "failed to get CqAttributes");
     CqListenerPtr cqLstner = nullptr;
     try {
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
       cqLstner = vl[0];
     } catch (Exception& excp) {
       char excpmsg[500] = {0};
@@ -369,8 +368,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CloseCache1)
     ASSERT(cqAttr != nullptr, "failed to get CqAttributes");
     CqListenerPtr cqLstner = nullptr;
     try {
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
       cqLstner = vl[0];
     } catch (Exception& excp) {
       char excpmsg[500] = {0};
diff --git a/cppcache/integration-test/testThinClientCqHAFailover.cpp b/cppcache/integration-test/testThinClientCqHAFailover.cpp
index dc7cdea..b8c3e12 100644
--- a/cppcache/integration-test/testThinClientCqHAFailover.cpp
+++ b/cppcache/integration-test/testThinClientCqHAFailover.cpp
@@ -314,8 +314,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree3)
     ASSERT(cqAttr != nullptr, "failed to get CqAttributes");
     CqListenerPtr cqLstner = nullptr;
     try {
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
       cqLstner = vl[0];
     } catch (Exception& excp) {
       char excpmsg[500] = {0};
@@ -402,8 +401,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CloseCache1)
     ASSERT(cqAttr != nullptr, "failed to get CqAttributes");
     CqListenerPtr cqLstner = nullptr;
     try {
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
       cqLstner = vl[0];
     } catch (Exception& excp) {
       char excpmsg[500] = {0};
diff --git a/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp b/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp
index d08b440..b249662 100644
--- a/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp
+++ b/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp
@@ -71,7 +71,7 @@ class MyResultCollector : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) {
       return;
@@ -127,7 +127,7 @@ class MyResultCollector2 : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) {
       return;
diff --git a/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp b/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp
index c80d20d..c2c9335 100644
--- a/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp
+++ b/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp
@@ -326,14 +326,11 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
         keys.push_back(CacheableInt32::create(j));
       }
 
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
-
       try {
-        dataReg->getAll(keys, values, exceptions, false);
+        const auto values = dataReg->getAll(keys);
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
                               ->getAndResetNetworkHopFlag();
-        ASSERT(values->size() == 5, "number of value size should be 5");
+        ASSERT(values.size() == 5, "number of value size should be 5");
         LOGDEBUG("CheckPrSingleHopForIntKeysTask_REGION: networkhop %d ",
                  networkhop);
         ASSERT(!networkhop, "It is networkhop operation.");
@@ -366,11 +363,11 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
       }
 
       try {
-        dataReg->getAll(keys, values, exceptions, false,
-                        CacheableInt32::create(1000));
+        const auto values =
+            dataReg->getAll(keys, CacheableInt32::create(1000));
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
                               ->getAndResetNetworkHopFlag();
-        ASSERT(values->size() == 5, "number of value size should be 5");
+        ASSERT(values.size() == 5, "number of value size should be 5");
         LOGDEBUG("CheckPrSingleHopForIntKeysTask_REGION: networkhop %d ",
                  networkhop);
         ASSERT(!networkhop, "It is networkhop operation.");
diff --git a/cppcache/integration-test/testThinClientGetInterests.cpp b/cppcache/integration-test/testThinClientGetInterests.cpp
index 3910b8c..9e1e6c1 100644
--- a/cppcache/integration-test/testThinClientGetInterests.cpp
+++ b/cppcache/integration-test/testThinClientGetInterests.cpp
@@ -70,10 +70,8 @@ DUNIT_TASK(CLIENT1, SetupClient1)
     regPtr0->registerKeys(keys2, false, true);
     regPtr0->registerRegex(testregex[2], true);
 
-    VectorOfCacheableKey vkey;
-    VectorOfCacheableString vreg;
-    regPtr0->getInterestList(vkey);
-    regPtr0->getInterestListRegex(vreg);
+    auto vkey = regPtr0->getInterestList();
+    auto vreg = regPtr0->getInterestListRegex();
     for (int32_t i = 0; i < vkey.size(); i++) {
       char buf[1024];
       const char* key =
@@ -107,8 +105,7 @@ DUNIT_TASK(CLIENT1, SetupClient1)
       ASSERT(found, buf);
     }
     regPtr0->registerAllKeys(true);
-    VectorOfCacheableString vreg1;
-    regPtr0->getInterestListRegex(vreg1);
+    auto vreg1 = regPtr0->getInterestListRegex();
     for (int32_t i = 0; i < vreg1.size(); i++) {
       char buf[1024];
       CacheableStringPtr ptr = vreg1[i];
diff --git a/cppcache/integration-test/testThinClientHADistOps.cpp b/cppcache/integration-test/testThinClientHADistOps.cpp
index 7ddad82..5060079 100644
--- a/cppcache/integration-test/testThinClientHADistOps.cpp
+++ b/cppcache/integration-test/testThinClientHADistOps.cpp
@@ -417,11 +417,10 @@ END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT1, RegisterClient1Keys)
   {
-    VectorOfCacheableKey vec0, vec1;
     RegionPtr reg0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr reg1 = getHelper()->getRegion(regionNames[1]);
-    reg0->serverKeys(vec0);
-    reg1->serverKeys(vec1);
+    auto vec0 = reg0->serverKeys();
+    auto vec1 = reg1->serverKeys();
     ASSERT(vec0.size() == 2, "Should have 2 keys in first region.");
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
     std::string key0, key1;
diff --git a/cppcache/integration-test/testThinClientHAFailoverRegex.cpp b/cppcache/integration-test/testThinClientHAFailoverRegex.cpp
index ddbfa50..93e19c7 100644
--- a/cppcache/integration-test/testThinClientHAFailoverRegex.cpp
+++ b/cppcache/integration-test/testThinClientHAFailoverRegex.cpp
@@ -421,11 +421,10 @@ END_TASK_DEFINITION
 
 DUNIT_TASK_DEFINITION(CLIENT2, StepSix)
   {
-    VectorOfCacheableKey vec0, vec1;
     RegionPtr reg0 = getHelper()->getRegion(regionNames[0]);
     RegionPtr reg1 = getHelper()->getRegion(regionNames[1]);
-    reg0->serverKeys(vec0);
-    reg1->serverKeys(vec1);
+    auto vec0 = reg0->serverKeys();
+    auto vec1 = reg1->serverKeys();
     ASSERT(vec0.size() == 2, "Should have 2 keys in first region.");
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
     std::string key0, key1;
diff --git a/cppcache/integration-test/testThinClientHeapLRU.cpp b/cppcache/integration-test/testThinClientHeapLRU.cpp
index e70b5c0..83e45d4 100644
--- a/cppcache/integration-test/testThinClientHeapLRU.cpp
+++ b/cppcache/integration-test/testThinClientHeapLRU.cpp
@@ -60,8 +60,7 @@ void createOnekEntries() {
     //  delete tmpval;
   }
   dunit::sleep(10000);
-  VectorOfRegionEntry me;
-  dataReg->entries(me, false);
+  auto me = dataReg->entries(false);
   LOG("Verifying size outside loop");
   char buf[1024];
   sprintf(buf, "region size is %zd", me.size());
diff --git a/cppcache/integration-test/testThinClientInterest1Cacheless.cpp b/cppcache/integration-test/testThinClientInterest1Cacheless.cpp
index d390710..5dafd5d 100644
--- a/cppcache/integration-test/testThinClientInterest1Cacheless.cpp
+++ b/cppcache/integration-test/testThinClientInterest1Cacheless.cpp
@@ -97,7 +97,7 @@ DUNIT_TASK(CLIENT2, setupClient2)
     mylistner = std::make_shared<MyListener>();
     setCacheListener(regionNames[0], mylistner);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, true);
+    regPtr->registerAllKeys(false, true);
   }
 END_TASK(setupClient2)
 
diff --git a/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp b/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp
index d1761e1..9a9498b 100644
--- a/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp
+++ b/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp
@@ -73,7 +73,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, setupClient2)
     getHelper()->createPooledRegion(regionNames[0], false, locatorsG,
                                     "__TEST_POOL1__", true, true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
-    regPtr->registerAllKeys(false, nullptr, true);
+    regPtr->registerAllKeys(false, true);
   }
 END_TASK_DEFINITION
 
diff --git a/cppcache/integration-test/testThinClientInterestNotify.cpp b/cppcache/integration-test/testThinClientInterestNotify.cpp
index 4d44cc7..2a7cd66 100644
--- a/cppcache/integration-test/testThinClientInterestNotify.cpp
+++ b/cppcache/integration-test/testThinClientInterestNotify.cpp
@@ -234,7 +234,7 @@ void registerInterests(const char* region, bool durable, bool receiveValues) {
 
   regionPtr->registerKeys(keysVector, durable, true, receiveValues);
 
-  regionPtr->registerRegex("key-regex.*", durable, nullptr, true,
+  regionPtr->registerRegex("key-regex.*", durable, true,
                            receiveValues);
 }
 
diff --git a/cppcache/integration-test/testThinClientLRUExpiration.cpp b/cppcache/integration-test/testThinClientLRUExpiration.cpp
index 7f79204..31f159b 100644
--- a/cppcache/integration-test/testThinClientLRUExpiration.cpp
+++ b/cppcache/integration-test/testThinClientLRUExpiration.cpp
@@ -140,7 +140,7 @@ void createRegion(const char* name, bool ackMode, int ettl, int eit, int rttl,
       getHelper()->createRegionAndAttachPool(name, ackMode, "LRUPool", true,
                                              ettl, eit, rttl, rit, lel, action);
   ASSERT(regPtr != nullptr, "Failed to create region.");
-  if (registerKey) regPtr->registerAllKeys(false, nullptr, false, false);
+  if (registerKey) regPtr->registerAllKeys(false, false, false);
   LOG("Region created.");
 }
 
@@ -199,13 +199,11 @@ size_t getNumOfEntries(const char* regName, bool isValue = false) {
   dumpCounters(regName);
   RegionPtr rptr = getHelper()->getRegion(regName);
   if (isValue) {
-    VectorOfCacheable v;
-    rptr->values(v);
+    auto v = rptr->values();
     printf("Region value size: %zd\n", v.size());
     return v.size();
   } else if (!useRegionSize) {
-    VectorOfCacheableKey v;
-    rptr->keys(v);
+    auto v = rptr->keys();
     printf("Region key size: %zd\n", v.size());
     return v.size();
   } else {
diff --git a/cppcache/integration-test/testThinClientPRSingleHop.cpp b/cppcache/integration-test/testThinClientPRSingleHop.cpp
index da68451..3ac0888 100644
--- a/cppcache/integration-test/testThinClientPRSingleHop.cpp
+++ b/cppcache/integration-test/testThinClientPRSingleHop.cpp
@@ -813,13 +813,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask2)
         keys.push_back(CacheableInt32::create(j));
       }
 
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
-
       try {
         // LOGINFO("CPPTEST: getting key %d with hashcode %d", i,
         // (int32_t)keyPtr->hashcode());
-        dataReg->getAll(keys, values, exceptions, false);
+        dataReg->getAll(keys);
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
                               ->getAndResetNetworkHopFlag();
         LOGINFO("CheckPrSingleHopForIntKeysTask2: networkhop %d ", networkhop);
@@ -869,7 +866,6 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForGetAllTask)
   {
     RegionPtr dataReg = getHelper()->getRegion(regionNames[0]);
     VectorOfCacheableKey keys;
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
     for (int i = 0; i < 100; i++) {
       auto keyPtr =
           std::dynamic_pointer_cast<CacheableKey>(CacheableInt32::create(i));
@@ -877,12 +873,11 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForGetAllTask)
       keys.push_back(keyPtr);
     }
 
-    dataReg->getAll(keys, valuesMap, nullptr, true);
-    ASSERT(valuesMap->size() == 100, "GetAll returns wrong number of values");
+    auto valuesMap = dataReg->getAll(keys);
+    ASSERT(valuesMap.size() == 100, "GetAll returns wrong number of values");
 
-    dataReg->getAll(keys, valuesMap, nullptr, true,
-                    CacheableInt32::create(1000));
-    ASSERT(valuesMap->size() == 100,
+    valuesMap = dataReg->getAll(keys, CacheableInt32::create(1000));
+    ASSERT(valuesMap.size() == 100,
            "GetAllWithCallBack returns wrong number of values");
 
     LOG("CheckPrSingleHopForGetAll get completed.");
@@ -1059,13 +1054,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
         keys.push_back(CacheableInt32::create(j));
       }
 
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
-
       try {
         // LOGINFO("CPPTEST: getting key %d with hashcode %d", i,
         // (int32_t)keyPtr->hashcode());
-        dataReg->getAll(keys, values, exceptions, false);
+        dataReg->getAll(keys);
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
                               ->getAndResetNetworkHopFlag();
         LOGINFO("CheckPrSingleHopForIntKeysTask: networkhop %d ", networkhop);
@@ -1109,8 +1101,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
       try {
         // LOGINFO("CPPTEST: getting key %d with hashcode %d", i,
         // (int32_t)keyPtr->hashcode());
-        dataReg->getAll(keys, values, exceptions, false,
-                        CacheableInt32::create(1000));
+        dataReg->getAll(keys, CacheableInt32::create(1000));
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
                               ->getAndResetNetworkHopFlag();
         LOGINFO("CheckPrSingleHopForIntKeysTask: networkhop %d ", networkhop);
@@ -1247,7 +1238,6 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckGetAllTask)
   {
     RegionPtr dataReg = getHelper()->getRegion(regionNames[0]);
     VectorOfCacheableKey keys;
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
     for (int i = 0; i < 100000; i++) {
       auto keyPtr =
           std::dynamic_pointer_cast<CacheableKey>(CacheableInt32::create(i));
@@ -1256,23 +1246,23 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckGetAllTask)
     }
 
     ACE_Time_Value startTime = ACE_OS::gettimeofday();
-    dataReg->getAll(keys, valuesMap, nullptr, true);
+    auto valuesMap = dataReg->getAll(keys);
     ACE_Time_Value interval = ACE_OS::gettimeofday() - startTime;
     LOGDEBUG("NILKANTH: Time taken to execute getALL sec = %d and MSec = %d ",
              interval.sec(), interval.usec());
-    ASSERT(valuesMap->size() == 100000,
+    ASSERT(valuesMap.size() == 100000,
            "GetAll returns wrong number of values");
 
-    dataReg->getAll(keys, valuesMap, nullptr, true,
-                    CacheableInt32::create(10000));
-    ASSERT(valuesMap->size() == 100000,
+    valuesMap =
+        dataReg->getAll(keys, CacheableInt32::create(10000));
+    ASSERT(valuesMap.size() == 100000,
            "GetAllWithCallBack returns wrong number of values");
 
     LOGINFO(
         "CheckPrSingleHopForGetAllWithCallBack get completed. "
         "valuesMap->size() "
         "= %d",
-        valuesMap->size());
+        valuesMap.size());
   }
 END_TASK_DEFINITION
 
diff --git a/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp b/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp
index 8fa2232..0c5bd5a 100644
--- a/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp
+++ b/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp
@@ -191,11 +191,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_CLIENT1)
         keys.push_back(CacheableInt32::create(j));
       }
 
-      auto values = std::make_shared<HashMapOfCacheable>();
       auto exceptions = std::make_shared<HashMapOfException>();
 
       try {
-        dataReg->getAll(keys, values, exceptions, false);
+        auto values = dataReg->getAll(keys);
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
                               ->getAndResetNetworkHopFlag();
         ASSERT(!networkhop, "It is networkhop operation.");
@@ -362,14 +361,11 @@ DUNIT_TASK_DEFINITION(CLIENT2, CheckPrSingleHopForIntKeysTask_CLIENT2)
         keys.push_back(CacheableInt32::create(j));
       }
 
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
-
       try {
-        dataReg->getAll(keys, values, exceptions, false);
+        const auto values = dataReg->getAll(keys);
         int8_t serverGroupFlag = TestUtils::getCacheImpl(getHelper()->cachePtr)
                                      ->getAndResetServerGroupFlag();
-        ASSERT(values->size() == 5, "getall size should be 5 ");
+        ASSERT(values.size() == 5, "getall size should be 5 ");
         ASSERT(serverGroupFlag != 2,
                "serverGroupFlag should not be equal to 2");
       } catch (CacheServerException&) {
@@ -528,11 +524,8 @@ DUNIT_TASK_DEFINITION(CLIENT3, CheckPrSingleHopForIntKeysTask_CLIENT3)
         keys.push_back(CacheableInt32::create(j));
       }
 
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
-
       try {
-        dataReg->getAll(keys, values, exceptions, false);
+        dataReg->getAll(keys);
         int8_t serverGroupFlag = TestUtils::getCacheImpl(getHelper()->cachePtr)
                                      ->getAndResetServerGroupFlag();
         ASSERT(serverGroupFlag != 2,
diff --git a/cppcache/integration-test/testThinClientPdxInstance.cpp b/cppcache/integration-test/testThinClientPdxInstance.cpp
index 2899b1f..23b17e9 100644
--- a/cppcache/integration-test/testThinClientPdxInstance.cpp
+++ b/cppcache/integration-test/testThinClientPdxInstance.cpp
@@ -508,12 +508,11 @@ DUNIT_TASK_DEFINITION(CLIENT2, verifyPdxNullIdentityFieldHC)
     VectorOfCacheableKey keys1;
     keys1.push_back(CacheableInt32::create(1));
     keys1.push_back(CacheableInt32::create(2));
-    auto valuesMap = std::make_shared<HashMapOfCacheable>();
-    valuesMap->clear();
-    rptr->getAll(keys1, valuesMap, nullptr, true);
+
+    const auto valuesMap = rptr->getAll(keys1);
     LOG("getAll on Pdx objects completed.");
 
-    ASSERT(valuesMap->size() == keys1.size(), "getAll size did not match");
+    ASSERT(valuesMap.size() == keys1.size(), "getAll size did not match");
 
     LOG("verifyPdxNullIdentityFieldHC complete.");
   }
@@ -824,70 +823,57 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
 
     auto pdxobjPtr = std::make_shared<PdxTests::PdxType>();
 
-    bool bval = 0;
-    pIPtr->getField("m_bool", bval);
+    bool bval = pIPtr->getBooleanField("m_bool");
     ASSERT(pdxobjPtr->getBool() == bval, "bool values should be equal");
     ASSERT(pIPtr->getFieldType("m_bool") == PdxFieldTypes::BOOLEAN,
            "Type Value BOOLEAN Mismatch");
 
-    wchar_t charVal = ' ';
-    pIPtr->getField("m_char", charVal);
-    ASSERT(pdxobjPtr->getChar() == charVal, "char values should be equal");
-    ASSERT(pIPtr->getFieldType("m_char") == PdxFieldTypes::CHAR,
-           "Type Value CHAR Mismatch");
-
-    signed char byteVal = 0;
-    pIPtr->getField("m_byte", byteVal);
+    signed char byteVal = pIPtr->getByteField("m_byte");
     ASSERT(pdxobjPtr->getByte() == byteVal, "byte values should be equal");
     ASSERT(pIPtr->getFieldType("m_byte") == PdxFieldTypes::BYTE,
            "Type Value BYTE Mismatch");
 
-    pIPtr->getField("m_sbyte", byteVal);
+    byteVal = pIPtr->getByteField("m_sbyte");
     ASSERT(pdxobjPtr->getSByte() == byteVal, "Sbyte values should be equal");
     ASSERT(pIPtr->getFieldType("m_sbyte") == PdxFieldTypes::BYTE,
            "Type Value BYTE Mismatch");
 
-    int16_t shortVal = 0;
-    pIPtr->getField("m_int16", shortVal);
+    int16_t shortVal = pIPtr->getShortField("m_int16");
     ASSERT(pdxobjPtr->getShort() == shortVal, "shortVal should be equal");
     ASSERT(pIPtr->getFieldType("m_int16") == PdxFieldTypes::SHORT,
            "Type Value SHORT Mismatch");
 
-    pIPtr->getField("m_uint16", shortVal);
+    shortVal = pIPtr->getShortField("m_uint16");
     ASSERT(pdxobjPtr->getUint16() == shortVal, "m_uint16 should be equal");
     ASSERT(pIPtr->getFieldType("m_uint16") == PdxFieldTypes::SHORT,
            "Type Value SHORT Mismatch");
 
-    int val = 0;
-    pIPtr->getField("m_int32", val);
+    int val = pIPtr->getIntField("m_int32");
     ASSERT(pdxobjPtr->getInt() == val, "int32 values should be equal");
     ASSERT(pIPtr->getFieldType("m_int32") == PdxFieldTypes::INT,
            "Type Value INT Mismatch");
 
-    pIPtr->getField("m_uint32", val);
+    val = pIPtr->getIntField("m_uint32");
     ASSERT(pdxobjPtr->getUInt() == val, "m_uint32 values should be equal");
     ASSERT(pIPtr->getFieldType("m_uint32") == PdxFieldTypes::INT,
            "Type Value INT Mismatch");
 
-    int64_t longVal = 0;
-    pIPtr->getField("m_long", longVal);
+    int64_t longVal = pIPtr->getLongField("m_long");
     ASSERT(pdxobjPtr->getLong() == longVal, "int64 values should be equal");
     ASSERT(pIPtr->getFieldType("m_long") == PdxFieldTypes::LONG,
            "Type Value LONG Mismatch");
 
-    pIPtr->getField("m_ulong", longVal);
+    longVal = pIPtr->getLongField("m_ulong");
     ASSERT(pdxobjPtr->getULong() == longVal, "m_ulong values should be equal");
     ASSERT(pIPtr->getFieldType("m_ulong") == PdxFieldTypes::LONG,
            "Type Value LONG Mismatch");
 
-    float floatVal = 0.0f;
-    pIPtr->getField("m_float", floatVal);
+    float floatVal = pIPtr->getFloatField("m_float");
     ASSERT(pdxobjPtr->getFloat() == floatVal, "floatVal should be equal");
     ASSERT(pIPtr->getFieldType("m_float") == PdxFieldTypes::FLOAT,
            "Type Value FLOAT Mismatch");
 
-    double doubleVal = 0.0;
-    pIPtr->getField("m_double", doubleVal);
+    double doubleVal = pIPtr->getDoubleField("m_double");
     ASSERT(pdxobjPtr->getDouble() == doubleVal, "doubleVal should be equal");
     ASSERT(pIPtr->getFieldType("m_double") == PdxFieldTypes::DOUBLE,
            "Type Value DOUBLE Mismatch");
@@ -1049,8 +1035,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_floatArray") == PdxFieldTypes::FLOAT_ARRAY,
            "Type Value FLOAT_ARRAY Mismatch");
 
-    CacheablePtr object = nullptr;
-    pIPtr->getField("m_pdxEnum", object);
+    CacheablePtr object = pIPtr->getCacheableField("m_pdxEnum");
     ASSERT(object != nullptr, "enumObject should not be nullptr");
     auto enumObject = std::dynamic_pointer_cast<CacheableEnum>(object);
     ASSERT(
@@ -1065,16 +1050,14 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_pdxEnum") == PdxFieldTypes::OBJECT,
            "Type Value OBJECT Mismatch");
 
-    CacheableDatePtr dateObject = nullptr;
-    pIPtr->getField("m_dateTime", dateObject);
+    CacheableDatePtr dateObject = pIPtr->getCacheableDateField("m_dateTime");
     ASSERT(dateObject != nullptr, "date should not be nullptr");
     ASSERT((*(dateObject.get()) == *(pdxobjPtr->getDate().get())) == true,
            "dateObject should be equal");
     ASSERT(pIPtr->getFieldType("m_dateTime") == PdxFieldTypes::DATE,
            "Type Value DATE Mismatch");
 
-    CacheablePtr object2 = nullptr;
-    pIPtr->getField("m_map", object2);
+    CacheablePtr object2 = pIPtr->getCacheableField("m_map");
     ASSERT(object2 != nullptr, "object2 should not be nullptr");
     auto mapObject = std::dynamic_pointer_cast<CacheableHashMap>(object2);
     ASSERT(genericValCompare(pdxobjPtr->getHashMap()->size(),
@@ -1083,7 +1066,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_map") == PdxFieldTypes::OBJECT,
            "Type Value OBJECT Mismatch");
 
-    pIPtr->getField("m_vector", object2);
+    object2 = pIPtr->getCacheableField("m_vector");
     ASSERT(object2 != nullptr, "object2 should not be nullptr");
     auto vec = std::dynamic_pointer_cast<CacheableVector>(object2);
     ASSERT(
@@ -1092,7 +1075,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_vector") == PdxFieldTypes::OBJECT,
            "Type Value OBJECT Mismatch");
 
-    pIPtr->getField("m_arraylist", object2);
+    object2 = pIPtr->getCacheableField("m_arraylist");
     ASSERT(object2 != nullptr, "object2 should not be nullptr");
     auto arrList = std::dynamic_pointer_cast<CacheableArrayList>(object2);
     ASSERT(genericValCompare(pdxobjPtr->getArrayList()->size(),
@@ -1101,7 +1084,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_arraylist") == PdxFieldTypes::OBJECT,
            "Type Value OBJECT Mismatch");
 
-    pIPtr->getField("m_chs", object2);
+    object2 = pIPtr->getCacheableField("m_chs");
     ASSERT(object2 != nullptr, "object2 should not be nullptr");
     auto hashSet = std::dynamic_pointer_cast<CacheableHashSet>(object2);
     ASSERT(genericValCompare(pdxobjPtr->getHashSet()->size(),
@@ -1110,7 +1093,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_chs") == PdxFieldTypes::OBJECT,
            "Type Value OBJECT Mismatch");
 
-    pIPtr->getField("m_clhs", object2);
+    object2 = pIPtr->getCacheableField("m_clhs");
     ASSERT(object2 != nullptr, "object2 should not be nullptr");
     auto linkedHashSet =
         std::dynamic_pointer_cast<CacheableLinkedHashSet>(object2);
@@ -1136,8 +1119,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
                PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS,
            "Type Value ARRAY_OF_BYTE_ARRAYS Mismatch");
 
-    CacheableObjectArrayPtr objectArray = nullptr;
-    pIPtr->getField("m_objectArray", objectArray);
+    auto objectArray = pIPtr->getCacheableObjectArrayField("m_objectArray");
     ASSERT(objectArray != nullptr, "objectArray should not be nullptr");
     ASSERT(genericValCompare(pdxobjPtr->getCacheableObjectArray()->size(),
                              objectArray->size()) == true,
@@ -1145,8 +1127,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(pIPtr->getFieldType("m_objectArray") == PdxFieldTypes::OBJECT_ARRAY,
            "Type Value OBJECT_ARRAY Mismatch");
 
-    CacheableObjectArrayPtr objectArrayEmptyFieldName = nullptr;
-    pIPtr->getField("", objectArrayEmptyFieldName);
+    auto objectArrayEmptyFieldName = pIPtr->getCacheableObjectArrayField("");
     ASSERT(objectArrayEmptyFieldName != nullptr,
            "objectArrayEmptyFieldName should not be nullptr");
     ASSERT(genericValCompare(
@@ -1189,8 +1170,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     pIPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport1));
     LOGINFO("PdxInstancePtr for ParentPdx object got ");
 
-    CacheablePtr childObjPtr;
-    pIPtr->getField("m_childPdx", childObjPtr);
+    CacheablePtr childObjPtr = pIPtr->getCacheableField("m_childPdx");
     ASSERT(childObjPtr != nullptr, "childObjPtr should not be nullptr");
     LOGINFO("got childPdx field ");
     auto cpi = std::dynamic_pointer_cast<PdxInstance>(childObjPtr);
@@ -1222,12 +1202,12 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     int val = 0;
     int newVal = 0;
     ASSERT(pIPtr->hasField("m_int32") == true, "m_id1 = true expected");
-    pIPtr->getField("m_int32", val);
+    val = pIPtr->getIntField("m_int32");
     wpiPtr->setField("m_int32", val + 1);
     rptr->put(keyport, wpiPtr);
     auto newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_int32") == true, "m_int32 = true expected");
-    newPiPtr->getField("m_int32", newVal);
+    newVal = newPiPtr->getIntField("m_int32");
     ASSERT(val + 1 == newVal, "val + 1 == newVal expected");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1249,7 +1229,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_bool") == true, "m_bool = true expected");
-    newPiPtr->getField("m_bool", boolVal);
+    boolVal = newPiPtr->getBooleanField("m_bool");
     ASSERT(boolVal == false, "bool is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1265,18 +1245,6 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
           "IllegalStateException");
     }
 
-    wchar_t charVal = ' ';
-    wchar_t setVal = 'D';
-    wpiPtr = pIPtr->createWriter();
-    wpiPtr->setField("m_char", setVal);
-    rptr->put(keyport, wpiPtr);
-    newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
-    ASSERT(newPiPtr->hasField("m_char") == true, "m_char = true expected");
-    newPiPtr->getField("m_char", charVal);
-    ASSERT(charVal == setVal, "char is not equal");
-    ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
-           "PdxInstance should not be equal");
-
     wpiPtr = pIPtr->createWriter();
     try {
       wpiPtr->setField("m_char", 500.0);
@@ -1295,7 +1263,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_byte") == true, "m_byte = true expected");
-    newPiPtr->getField("m_byte", byteVal);
+    byteVal = newPiPtr->getByteField("m_byte");
     ASSERT(byteVal == setByteVal, "byte is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1306,7 +1274,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_sbyte") == true, "m_sbyte = true expected");
-    newPiPtr->getField("m_sbyte", byteVal);
+    byteVal = newPiPtr->getByteField("m_sbyte");
     ASSERT(byteVal == setSByteVal, "m_sbyte is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1328,7 +1296,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_int16") == true, "m_int16 = true expected");
-    newPiPtr->getField("m_int16", shortVal);
+    shortVal = newPiPtr->getShortField("m_int16");
     ASSERT(shortVal == 0x5678, "short is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1350,7 +1318,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_long") == true, "m_long = true expected");
-    newPiPtr->getField("m_long", longVal);
+    longVal = newPiPtr->getLongField("m_long");
     ASSERT(longVal == 0x56787878, "long is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1372,7 +1340,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_float") == true, "m_float = true expected");
-    newPiPtr->getField("m_float", fVal);
+    fVal = newPiPtr->getFloatField("m_float");
     ASSERT(fVal == 18389.34f, "fval is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1394,7 +1362,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_double") == true, "m_double = true expected");
-    newPiPtr->getField("m_double", dVal);
+    dVal = newPiPtr->getDoubleField("m_double");
     ASSERT(dVal == 18389.34, "dval is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
@@ -1661,7 +1629,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     ASSERT(newPiPtr->hasField("m_dateTime") == true,
            "m_dateTime = true expected");
     ASSERT(pIPtr->hasField("m_dateTime") == true, "m_date = true expected");
-    newPiPtr->getField("m_dateTime", dateVal);
+    dateVal = newPiPtr->getCacheableDateField("m_dateTime");
     ASSERT((*(dateVal.get()) == *(datePtr.get())) == true,
            "dateObject should be equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
@@ -1688,7 +1656,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_vector") == true, "m_vector = true expected");
     ASSERT(pIPtr->hasField("m_vector") == true, "m_vector = true expected");
-    newPiPtr->getField("m_vector", object);
+    object = newPiPtr->getCacheableField("m_vector");
     auto vecVal = std::dynamic_pointer_cast<CacheableVector>(object);
     ASSERT(genericValCompare(setVec->size(), vecVal->size()) == true,
            "vec size should be equal");
@@ -1719,7 +1687,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
            "m_arraylist = true expected");
     ASSERT(pIPtr->hasField("m_arraylist") == true,
            "m_arraylist = true expected");
-    newPiPtr->getField("m_arraylist", object);
+    object = newPiPtr->getCacheableField("m_arraylist");
     auto arrVal = std::dynamic_pointer_cast<CacheableArrayList>(object);
     ASSERT(genericValCompare(setarr->size(), arrVal->size()) == true,
            "arrList size should be equal");
@@ -1748,7 +1716,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_chs") == true, "m_chs = true expected");
     ASSERT(pIPtr->hasField("m_chs") == true, "m_chs = true expected");
-    newPiPtr->getField("m_chs", object);
+    object = newPiPtr->getCacheableField("m_chs");
     auto hashsetVal = std::dynamic_pointer_cast<CacheableHashSet>(object);
     ASSERT(genericValCompare(hashset->size(), hashsetVal->size()) == true,
            "m_chs size should be equal");
@@ -1774,7 +1742,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_map") == true, "m_map = true expected");
     ASSERT(pIPtr->hasField("m_map") == true, "m_map = true expected");
-    newPiPtr->getField("m_map", object);
+    object = newPiPtr->getCacheableField("m_map");
     auto hashmapVal = std::dynamic_pointer_cast<CacheableHashMap>(object);
     ASSERT(genericValCompare(hashmap->size(), hashmapVal->size()) == true,
            "m_map size should be equal");
@@ -1800,7 +1768,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(newPiPtr->hasField("m_clhs") == true, "m_clhs = true expected");
     ASSERT(pIPtr->hasField("m_clhs") == true, "m_clhs = true expected");
-    newPiPtr->getField("m_clhs", object);
+    object = newPiPtr->getCacheableField("m_clhs");
     auto linkedhashsetVal =
         std::dynamic_pointer_cast<CacheableLinkedHashSet>(object);
     ASSERT(genericValCompare(linkedhashsetVal->size(), linkedhashset->size()) ==
@@ -1941,8 +1909,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     pIPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport1));
     LOGINFO("PdxInstancePtr for ParentPdx object got ");
 
-    CacheablePtr childObjPtr;
-    pIPtr->getField("m_childPdx", childObjPtr);
+    CacheablePtr childObjPtr = pIPtr->getCacheableField("m_childPdx");
     ASSERT(childObjPtr != nullptr, "childObjPtr should not be nullptr");
     LOGINFO("got childPdx field ");
     auto cpi = std::dynamic_pointer_cast<PdxInstance>(childObjPtr);
@@ -1957,7 +1924,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     LOGINFO("ChildPdx object put get done");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
            "PdxInstance should not be equal");
-    newPiPtr->getField("m_childPdx", childObjPtr);
+    childObjPtr = newPiPtr->getCacheableField("m_childPdx");
     ASSERT(childObjPtr != nullptr, "childObjPtr should not be nullptr");
     LOGINFO("got childPdx field ");
     auto cpi1 = std::dynamic_pointer_cast<PdxInstance>(childObjPtr);
@@ -1969,28 +1936,15 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstance)
     ASSERT((cpo.get()->equals(*childpdxobjPtr.get())) == true,
            "child pdx should be equal");
 
-    char parentCharVal = ' ';
     char parentCharSetVal = 'Z';
     wpiPtr = pIPtr->createWriter();
     wpiPtr->setField("m_char", parentCharSetVal);
     rptr->put(keyport1, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport1));
     ASSERT(newPiPtr->hasField("m_char") == true, "m_char = true expected");
-    newPiPtr->getField("m_char", parentCharVal);
+    auto parentCharVal = newPiPtr->getCharField("m_char");
     ASSERT(parentCharVal == parentCharSetVal, "char is not equal");
 
-    wchar_t parentWideCharVal = ' ';
-    wchar_t parentWideCharSetVal = L'Z';
-    wpiPtr = pIPtr->createWriter();
-    wpiPtr->setField("m_wideChar", parentWideCharSetVal);
-    rptr->put(keyport1, wpiPtr);
-    newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport1));
-    ASSERT(newPiPtr->hasField("m_wideChar") == true,
-           "m_wideChar = true expected");
-    newPiPtr->getField("m_wideChar", parentWideCharVal);
-    ASSERT(parentWideCharVal == parentWideCharSetVal,
-           "m_wideChar is not equal");
-
     wchar_t setParentWideCharArray[] = {L'c', L'v', L'c', L'v'};
     wchar_t* getParentWideCharArray = nullptr;
     wpiPtr->setField("m_wideCharArray", setParentWideCharArray, 4);
@@ -2067,7 +2021,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     int val = 0;
     int newVal = 0;
     ASSERT(pIPtr->hasField("m_int32") == true, "m_int32 = true expected");
-    pIPtr->getField("m_int32", val);
+    val = pIPtr->getIntField("m_int32");
     LOGINFO("PdxInstance val is %d ", val);
     ASSERT(val == 591768540, "val = 591768540 expected");
 
@@ -2077,7 +2031,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     auto newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     LOG("modifyPdxInstanceAndCheckLocally get complete.");
     ASSERT(newPiPtr->hasField("m_int32") == true, "m_id1 = true expected");
-    newPiPtr->getField("m_int32", newVal);
+    newVal = newPiPtr->getIntField("m_int32");
     LOGINFO("PdxInstance newVal is %d ", newVal);
     ASSERT(val + 1 == newVal, "val + 1 == newVal expected");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
@@ -2191,7 +2145,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_bool") == true, "m_bool = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_bool", boolVal);
+    boolVal = newPiPtr->getBooleanField("m_bool");
     LOG("modifyPdxInstanceAndCheckLocally getField complete.");
     ASSERT(boolVal == false, "bool is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
@@ -2205,7 +2159,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_bool") == true, "m_bool = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_bool", boolVal);
+    boolVal = newPiPtr->getBooleanField("m_bool");
     LOG("modifyPdxInstanceAndCheckLocally getField complete.");
     ASSERT(boolVal == true, "bool is not equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == true,
@@ -2220,7 +2174,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_float") == true, "m_float = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_float", fVal);
+    fVal = newPiPtr->getFloatField("m_float");
     LOGINFO("modifyPdxInstanceAndCheckLocally getField complete. fval = %f",
             fVal);
     ASSERT(fVal == 18389.34f, "fval is not equal");
@@ -2236,7 +2190,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_double") == true, "m_double = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_double", dVal);
+    dVal = newPiPtr->getDoubleField("m_double");
     LOGINFO("modifyPdxInstanceAndCheckLocally getField complete. fval = %lf",
             dVal);
     ASSERT(dVal == 18389.34, "fval is not equal");
@@ -2253,7 +2207,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_byte") == true, "m_byte = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_byte", byteVal);
+    byteVal = newPiPtr->getByteField("m_byte");
     LOGINFO("modifyPdxInstanceAndCheckLocally getField complete byteVal = %d ",
             byteVal);
     ASSERT(byteVal == setSByteVal, "byte is not equal");
@@ -2269,7 +2223,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_int16") == true, "m_int16 = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_int16", shortVal);
+    shortVal = newPiPtr->getShortField("m_int16");
     LOGINFO("modifyPdxInstanceAndCheckLocally getField complete shortVal = %d ",
             shortVal);
     ASSERT(shortVal == 0x5678, "short is not equal");
@@ -2285,7 +2239,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_long") == true, "m_long = true expected");
     LOG("modifyPdxInstanceAndCheckLocally get again complete.");
-    newPiPtr->getField("m_long", longVal);
+    longVal = newPiPtr->getLongField("m_long");
     LOGINFO("modifyPdxInstanceAndCheckLocally getField complete longVal = %ld ",
             longVal);
     ASSERT(longVal == 0x56787878, "long is not equal");
@@ -2330,7 +2284,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, modifyPdxInstanceAndCheckLocally)
     rptr->put(keyport, wpiPtr);
     newPiPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     ASSERT(pIPtr->hasField("m_dateTime") == true, "m_date = true expected");
-    newPiPtr->getField("m_dateTime", dateVal);
+    dateVal = newPiPtr->getCacheableDateField("m_dateTime");
     ASSERT((*(dateVal.get()) == *(datePtr.get())) == true,
            "dateObject should be equal");
     ASSERT((*pIPtr.get() == *newPiPtr.get()) == false,
@@ -2473,7 +2427,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxIFPutGetTest)
     pifPtr->writeArrayOfByteArrays(
         "m_byteByteArray", pdxobj->getArrayOfByteArrays(), 2, lengthArr);
     pifPtr->markIdentityField("m_byteByteArray");
-    pifPtr->writeWideChar("m_char", pdxobj->getChar());
+    pifPtr->writeChar("m_char", pdxobj->getChar());
     pifPtr->markIdentityField("m_char");
     pifPtr->writeWideCharArray("m_charArray", pdxobj->getCharArray(), 2);
     pifPtr->markIdentityField("m_charArray");
@@ -2624,7 +2578,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxIFPutGetTest)
                               pp->getWideParentArrayName(), 3);
     if2->writeObject("m_childPdx", pp->getChildPdx());
     if2->writeChar("m_char", pp->getChar());
-    if2->writeWideChar("m_wideChar", pp->getWideChar());
+    if2->writeChar("m_wideChar", pp->getChar());
     if2->writeCharArray("m_charArray", pp->getCharArray(), 2);
     if2->writeWideCharArray("m_wideCharArray", pp->getWideCharArray(), 2);
 
@@ -2711,8 +2665,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxInstanceWithEmptyKeys)
 
     ASSERT(*putValue.get() == *getValue.get(),
            "Boolean Value Did not match in case of Empty PdxField Key");
-    bool fieldValue;
-    getValue->getField("", fieldValue);
+    bool fieldValue = getValue->getBooleanField("");
     ASSERT(fieldValue == falseValue,
            "Mismatch in the PdxInstance with Empty key");
 
diff --git a/cppcache/integration-test/testThinClientPdxTests.cpp b/cppcache/integration-test/testThinClientPdxTests.cpp
index 23b6737..06560e3 100644
--- a/cppcache/integration-test/testThinClientPdxTests.cpp
+++ b/cppcache/integration-test/testThinClientPdxTests.cpp
@@ -582,8 +582,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, JavaPutGet1)
     jsonDoc->getField("lastName", &stringVal1);
     */
 
-    CacheablePtr object2 = nullptr;
-    jsonDoc->getField("kids", object2);
+    CacheablePtr object2 = jsonDoc->getCacheableField("kids");
     auto listPtr = std::dynamic_pointer_cast<CacheableLinkedList>(object2);
     LOGINFO("Task:JavaPutGet: list size = %d", listPtr->size());
 
diff --git a/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp b/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp
index fd187bb..9d3422b 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp
@@ -134,7 +134,7 @@ class MyResultCollector : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) {
       return;
diff --git a/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp b/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp
index 43be8f6..db67f13 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp
@@ -138,7 +138,7 @@ class MyResultCollector : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) {
       return;
diff --git a/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp b/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp
index 25cca23..640b7c3 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp
@@ -129,7 +129,7 @@ class MyResultCollector : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) {
       return;
diff --git a/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp b/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp
index 5dee8b9..954c21a 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp
@@ -89,7 +89,7 @@ class MyResultCollector : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) return;
     auto result = std::dynamic_pointer_cast<CacheableArrayList>(resultItem);
diff --git a/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp b/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp
index 56f70f4..003fd9e 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp
@@ -89,7 +89,7 @@ class MyResultCollector : public ResultCollector {
     }
   }
 
-  void addResult(CacheablePtr& resultItem) {
+  void addResult(const CacheablePtr& resultItem) {
     m_addResultCount++;
     if (resultItem == nullptr) return;
     auto result = std::dynamic_pointer_cast<CacheableArrayList>(resultItem);
diff --git a/cppcache/integration-test/testThinClientPoolRedundancy.cpp b/cppcache/integration-test/testThinClientPoolRedundancy.cpp
index 621c4e2..1703a6a 100644
--- a/cppcache/integration-test/testThinClientPoolRedundancy.cpp
+++ b/cppcache/integration-test/testThinClientPoolRedundancy.cpp
@@ -117,9 +117,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateClient1_1)
     RegionPtr regPtr1 = getHelper()->getRegion(poolRegNames[1]);
     RegionPtr regPtr2 = getHelper()->getRegion(poolRegNames[2]);
 
-    regPtr0->registerAllKeys(false, nullptr, true);
-    regPtr1->registerAllKeys(false, nullptr, true);
-    regPtr2->registerAllKeys(false, nullptr, true);
+    regPtr0->registerAllKeys(false, true);
+    regPtr1->registerAllKeys(false, true);
+    regPtr2->registerAllKeys(false, true);
 
     LOG("CreateClient1 complete.");
   }
@@ -145,9 +145,9 @@ DUNIT_TASK_DEFINITION(CLIENT2, CreateClient2_1)
     RegionPtr regPtr1 = getHelper()->getRegion(poolRegNames[1]);
     RegionPtr regPtr2 = getHelper()->getRegion(poolRegNames[2]);
 
-    regPtr0->registerAllKeys(false, nullptr, true);
-    regPtr1->registerAllKeys(false, nullptr, true);
-    regPtr2->registerAllKeys(false, nullptr, true);
+    regPtr0->registerAllKeys(false, true);
+    regPtr1->registerAllKeys(false, true);
+    regPtr2->registerAllKeys(false, true);
 
     LOG("CreateClient2 verify starts.");
     verifyEntries(0);
@@ -176,9 +176,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateClient1_2)
     RegionPtr regPtr1 = getHelper()->getRegion(poolRegNames[1]);
     RegionPtr regPtr2 = getHelper()->getRegion(poolRegNames[2]);
 
-    regPtr0->registerAllKeys(false, nullptr, true);
-    regPtr1->registerAllKeys(false, nullptr, true);
-    regPtr2->registerAllKeys(false, nullptr, true);
+    regPtr0->registerAllKeys(false, true);
+    regPtr1->registerAllKeys(false, true);
+    regPtr2->registerAllKeys(false, true);
 
     LOG("CreateClient1 complete.");
   }
@@ -204,9 +204,9 @@ DUNIT_TASK_DEFINITION(CLIENT2, CreateClient2_2)
     RegionPtr regPtr1 = getHelper()->getRegion(poolRegNames[1]);
     RegionPtr regPtr2 = getHelper()->getRegion(poolRegNames[2]);
 
-    regPtr0->registerAllKeys(false, nullptr, true);
-    regPtr1->registerAllKeys(false, nullptr, true);
-    regPtr2->registerAllKeys(false, nullptr, true);
+    regPtr0->registerAllKeys(false, true);
+    regPtr1->registerAllKeys(false, true);
+    regPtr2->registerAllKeys(false, true);
 
     verifyEntries(0);
 
diff --git a/cppcache/integration-test/testThinClientRemoteQuerySS.cpp b/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
index 8f07c1b..b205fa0 100644
--- a/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
+++ b/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
@@ -532,34 +532,31 @@ DUNIT_TASK_DEFINITION(CLIENT1, GetAll)
       }
     }
 
-    auto resMap = std::make_shared<HashMapOfCacheable>();
-    auto exMap = std::make_shared<HashMapOfException>();
-
     // execute getAll for different regions and verify results
-    regPtr0->getAll(portKeys, resMap, exMap);
-    compareMaps(*resMap, expectedPortMap);
-    ASSERT(exMap->size() == 0, "Expected no exceptions");
-    resMap->clear();
-
-    regPtr1->getAll(posKeys, resMap, exMap);
-    compareMaps(*resMap, expectedPosMap);
-    ASSERT(exMap->size() == 0, "Expected no exceptions");
-    resMap->clear();
-
-    regPtr2->getAll(posKeys, resMap, exMap);
-    compareMaps(*resMap, expectedPosMap);
-    ASSERT(exMap->size() == 0, "Expected no exceptions");
-    resMap->clear();
-
-    regPtr3->getAll(portKeys, resMap, exMap);
-    compareMaps(*resMap, expectedPortMap);
-    ASSERT(exMap->size() == 0, "Expected no exceptions");
-    resMap->clear();
-
-    regPtr4->getAll(portKeys, resMap, exMap);
-    compareMaps(*resMap, expectedPortMap);
-    ASSERT(exMap->size() == 0, "Expected no exceptions");
-    resMap->clear();
+    {
+      auto resMap = regPtr0->getAll(portKeys);
+      compareMaps(resMap, expectedPortMap);
+    }
+
+    {
+      auto resMap = regPtr1->getAll(posKeys);
+      compareMaps(resMap, expectedPosMap);
+    }
+
+    {
+      auto resMap = regPtr2->getAll(posKeys);
+      compareMaps(resMap, expectedPosMap);
+    }
+
+    {
+      auto resMap = regPtr3->getAll(portKeys);
+      compareMaps(resMap, expectedPortMap);
+    }
+
+    {
+      auto resMap = regPtr4->getAll(portKeys);
+      compareMaps(resMap, expectedPortMap);
+    }
   }
 END_TASK_DEFINITION
 
diff --git a/cppcache/integration-test/testThinClientRemoveOps.cpp b/cppcache/integration-test/testThinClientRemoveOps.cpp
index 5e4f3a5..b619426 100644
--- a/cppcache/integration-test/testThinClientRemoveOps.cpp
+++ b/cppcache/integration-test/testThinClientRemoveOps.cpp
@@ -1076,25 +1076,23 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepEight)
 
     ASSERT(reg->size() == 2, "region size should be equal to 2");
 
-    VectorOfCacheableKey keys;
-    reg->keys(keys);
+    VectorOfCacheableKey keys = reg->keys();
     LOGINFO("Region keys = %d ", keys.size());
     ASSERT(keys.size() == reg->size(),
            "region size should be equal to keys size");
 
-    VectorOfCacheable values;
-    reg->values(values);
+    auto values = reg->values();
     LOGINFO("Region values = %d ", values.size());
     ASSERT(values.size() == reg->size(),
            "region size should be equal to values size");
 
     reg->destroy("Key100");
-    reg->keys(keys);
+    keys = reg->keys();
     LOGINFO("Region keys = %d ", keys.size());
     ASSERT(keys.size() == reg->size(),
            "region size should be equal to keys size");
 
-    reg->values(values);
+    values = reg->values();
     LOGINFO("Region values = %d ", values.size());
     ASSERT(values.size() == reg->size(),
            "region size should be equal to values size");
diff --git a/cppcache/integration-test/testThinClientSSLAuthCorrupt.cpp b/cppcache/integration-test/testThinClientSSLAuthCorrupt.cpp
index a6d8b81..c042045 100644
--- a/cppcache/integration-test/testThinClientSSLAuthCorrupt.cpp
+++ b/cppcache/integration-test/testThinClientSSLAuthCorrupt.cpp
@@ -141,7 +141,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateRegions1_PoolLocators)
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
     try {
-      regPtr->registerAllKeys(false, nullptr, false, false);
+      regPtr->registerAllKeys(false, false, false);
       FAIL("Should have got NotConnectedException during registerAllKeys");
     } catch (NotConnectedException exp) {
       LOG("Connection Failed as expected via NotConnectedException");
diff --git a/cppcache/integration-test/testThinClientSSLAuthFail.cpp b/cppcache/integration-test/testThinClientSSLAuthFail.cpp
index 16cc0e6..12b1fad 100644
--- a/cppcache/integration-test/testThinClientSSLAuthFail.cpp
+++ b/cppcache/integration-test/testThinClientSSLAuthFail.cpp
@@ -141,7 +141,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateRegions1_PoolLocators)
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
     try {
-      regPtr->registerAllKeys(false, nullptr, false, false);
+      regPtr->registerAllKeys(false, false, false);
       FAIL("Should have got NotConnectedException during registerAllKeys");
     } catch (NotConnectedException exp) {
       LOG("Connection Failed as expected via NotConnectedException");
diff --git a/cppcache/integration-test/testThinClientSSLAuthUntrusted.cpp b/cppcache/integration-test/testThinClientSSLAuthUntrusted.cpp
index 21f0500..ba0fb57 100644
--- a/cppcache/integration-test/testThinClientSSLAuthUntrusted.cpp
+++ b/cppcache/integration-test/testThinClientSSLAuthUntrusted.cpp
@@ -142,7 +142,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CreateRegions1_PoolLocators)
     createPooledRegion(regionNames[1], NO_ACK, locatorsG, "__TESTPOOL1_", true);
     RegionPtr regPtr = getHelper()->getRegion(regionNames[0]);
     try {
-      regPtr->registerAllKeys(false, nullptr, false, false);
+      regPtr->registerAllKeys(false, false, false);
       FAIL("Should have got NotConnectedException during registerAllKeys");
     } catch (NotConnectedException exp) {
       LOG("Connection Failed as expected via NotConnectedException");
diff --git a/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp b/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
index 8e8d20f..6dc3226 100644
--- a/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
+++ b/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
@@ -242,10 +242,8 @@ DUNIT_TASK_DEFINITION(ADMIN_CLIENT, StepOne)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regPtr->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+      const auto values = regPtr->getAll(entrykeys);
+      if (values.size() > 0) {
         LOG("GetAll completed successfully");
       } else {
         FAIL("GetAll did not complete successfully");
@@ -371,10 +369,9 @@ DUNIT_TASK_DEFINITION(WRITER_CLIENT, StepTwo)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regPtr0->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+
+      const auto values = regPtr0->getAll(entrykeys);
+      if (values.size() > 0) {
         FAIL("GetAll should not have completed successfully");
       }
     }
@@ -512,10 +509,9 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regPtr0->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+
+      const auto values = regPtr0->getAll(entrykeys);
+      if (values.size() > 0) {
         LOG("GetAll completed successfully");
       } else {
         FAIL("GetAll did not complete successfully");
diff --git a/cppcache/integration-test/testThinClientSecurityAuthorization.cpp b/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
index 534009b..1b58f5b 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
@@ -248,18 +248,15 @@ DUNIT_TASK_DEFINITION(ADMIN_CLIENT, StepOne)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regPtr->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+      const auto valuesMap = regPtr->getAll(entrykeys);
+      if (valuesMap.size() > 0) {
         LOG("GetAll completed successfully");
       } else {
         FAIL("GetAll did not complete successfully");
       }
 
       LOG("GetServerKeys check started for ADMIN");
-      VectorOfCacheableKey keysvec;
-      regPtr->serverKeys(keysvec);
+      auto keysvec = regPtr->serverKeys();
       LOG("GetServerKeys check passed for ADMIN");
 
       regPtr->query("1=1");
@@ -404,10 +401,8 @@ DUNIT_TASK_DEFINITION(WRITER_CLIENT, StepTwo)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regPtr0->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+      const auto valuesMap = regPtr0->getAll(entrykeys);
+      if (valuesMap.size() > 0) {
         FAIL("GetAll should not have completed successfully");
       }
     }
@@ -442,8 +437,7 @@ DUNIT_TASK_DEFINITION(WRITER_CLIENT, StepTwo)
 
     try {
       LOG("GetServerKeys check started for WRITER");
-      VectorOfCacheableKey keysvec;
-      regPtr0->serverKeys(keysvec);
+      auto keysvec = regPtr0->serverKeys();
       LOG("GetServerKeys check passed for WRITER");
       FAIL("GetServerKeys should not have completed successfully for WRITER");
     }
@@ -553,8 +547,7 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
 
     try {
       LOG("GetServerKeys check started for READER");
-      VectorOfCacheableKey keysvec;
-      regPtr0->serverKeys(keysvec);
+      auto keysvec = regPtr0->serverKeys();
       LOG("GetServerKeys check passed for READER");
     }
     HANDLE_NO_NOT_AUTHORIZED_EXCEPTION
@@ -564,10 +557,8 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regPtr0->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+      const auto valuesMap = regPtr0->getAll(entrykeys);
+      if (valuesMap.size() > 0) {
         LOG("GetAll completed successfully");
       } else {
         FAIL("GetAll did not complete successfully");
diff --git a/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
index 2480c24..dad0376 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
@@ -266,18 +266,16 @@ DUNIT_TASK_DEFINITION(ADMIN_CLIENT, StepOne)
       }*/
 
       LOG("GetServerKeys check started for ADMIN");
-      VectorOfCacheableKey keysvec;
-      regionPtr->serverKeys(keysvec);
+      auto keysvec = regionPtr->serverKeys();
       LOG("GetServerKeys check passed for ADMIN");
 
       VectorOfCacheableKey entrykeys;
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regionPtr->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+
+      const auto valuesMap = regionPtr->getAll(entrykeys);
+      if (valuesMap.size() > 0) {
         LOG("GetAll completed successfully");
       } else {
         FAIL("GetAll did not complete successfully");
@@ -585,8 +583,7 @@ DUNIT_TASK_DEFINITION(WRITER_CLIENT, StepTwo)
         LOG("Pool is nullptr");
       }
       LOG("GetServerKeys check started for WRITER");
-      VectorOfCacheableKey keysvec;
-      regionPtr->serverKeys(keysvec);
+      auto keysvec = regionPtr->serverKeys();
       LOG("GetServerKeys check passed for WRITER");
       FAIL("GetServerKeys should not have completed successfully for WRITER");
     }
@@ -652,10 +649,9 @@ DUNIT_TASK_DEFINITION(WRITER_CLIENT, StepTwo)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      regionPtr->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+
+      const auto valuesMap = regionPtr->getAll(entrykeys);
+      if (valuesMap.size() > 0) {
         FAIL("GetAll should not have completed successfully");
       }
     }
@@ -979,8 +975,7 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
 
     try {
       LOG("GetServerKeys check started for READER");
-      VectorOfCacheableKey keysvec;
-      rptr->serverKeys(keysvec);
+      auto keysvec = rptr->serverKeys();
       LOG("GetServerKeys check passed for READER");
     }
     HANDLE_NO_NOT_AUTHORIZED_EXCEPTION
@@ -990,10 +985,8 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
       for (int i = 0; i < 5; i++) {
         entrykeys.push_back(CacheableKey::create(i));
       }
-      auto valuesMap = std::make_shared<HashMapOfCacheable>();
-      valuesMap->clear();
-      rptr->getAll(entrykeys, valuesMap, nullptr, false);
-      if (valuesMap->size() > 0) {
+      const auto valuesMap = rptr->getAll(entrykeys);
+      if (valuesMap.size() > 0) {
         LOG("GetAll completed successfully");
       } else {
         FAIL("GetAll did not complete successfully");
diff --git a/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp
index 3f50c38..56f8088 100644
--- a/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityCQAuthorizationMU.cpp
@@ -379,8 +379,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     // if key port1-4 then only query 3 and 4 will satisfied
     auto cqy = qs->getCq(cqNames[3]);
     auto cqAttr = cqy->getCqAttributes();
-    std::vector<CqListenerPtr> vl;
-    cqAttr->getCqListeners(vl);
+    auto vl = cqAttr->getCqListeners();
 
     auto cqListener_3 = static_cast<MyCqListener*>(vl[0].get());
     printf(" cqListener_3 should have one create event = %d \n",
@@ -388,11 +387,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     ASSERT(cqListener_3->getNumInserts() == 1,
            "incorrect number of events got listener 3");
 
-    vl.clear();
-
     cqy = qs->getCq(cqNames[4]);
     cqAttr = cqy->getCqAttributes();
-    cqAttr->getCqListeners(vl);
+    vl = cqAttr->getCqListeners();
 
     auto cqListener_4 = static_cast<MyCqListener*>(vl[0].get());
     printf(" cqListener_4 should have one create event = %d \n",
@@ -444,8 +441,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour2)
     // if key port1-4 then only query 3 and 4 will satisfied
     auto cqy = qs->getCq(cqNames[3]);
     auto cqAttr = cqy->getCqAttributes();
-    std::vector<CqListenerPtr> vl;
-    cqAttr->getCqListeners(vl);
+    auto vl = cqAttr->getCqListeners();
 
     MyCqListener* cqListener_3 = static_cast<MyCqListener*>(vl[0].get());
     printf(" cqListener_3 should have one update event = %d \n",
@@ -453,11 +449,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour2)
     ASSERT(cqListener_3->getNumUpdates() == 1,
            "incorrect number of events got listener 3");
 
-    vl.clear();
-
     cqy = qs->getCq(cqNames[4]);
     cqAttr = cqy->getCqAttributes();
-    cqAttr->getCqListeners(vl);
+    vl = cqAttr->getCqListeners();
 
     auto cqListener_4 = static_cast<MyCqListener*>(vl[0].get());
     printf(" cqListener_4 should have one update event = %d \n",
diff --git a/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp
index 14ae2df..09b182e 100644
--- a/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityDurableCQAuthorizationMU.cpp
@@ -413,8 +413,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     // if key port1-4 then only query 3 and 4 will satisfied
     auto cqy = qs->getCq(cqNames[3]);
     auto cqAttr = cqy->getCqAttributes();
-    std::vector<CqListenerPtr> vl;
-    cqAttr->getCqListeners(vl);
+    auto vl = cqAttr->getCqListeners();
 
     auto cqListener_3 = static_cast<MyCqListener*>(vl[0].get());
     printf(" cqListener_3 should have one create event = %d \n",
@@ -422,11 +421,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     ASSERT(cqListener_3->getNumInserts() == 1,
            "incorrect number of events got listener 3");
 
-    vl.clear();
-
     cqy = qs->getCq(cqNames[4]);
     cqAttr = cqy->getCqAttributes();
-    cqAttr->getCqListeners(vl);
+    vl = cqAttr->getCqListeners();
 
     auto cqListener_4 = static_cast<MyCqListener*>(vl[0].get());
     printf(" cqListener_4 should have one create event = %d \n",
@@ -473,8 +470,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour2)
       // if key port1-4 then only query 3 and 4 will satisfied
       auto cqy = qs->getCq(cqNames[3]);
       auto cqAttr = cqy->getCqAttributes();
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
 
       auto cqListener_3 = static_cast<MyCqListener*>(vl[0].get());
       printf(" cqListener_3 should have one update event = %d \n",
@@ -482,11 +478,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour2)
       ASSERT(cqListener_3->getNumUpdates() == 1,
              "incorrect number of events got listener 3");
 
-      vl.clear();
-
       cqy = qs->getCq(cqNames[4]);
       cqAttr = cqy->getCqAttributes();
-      cqAttr->getCqListeners(vl);
+      vl = cqAttr->getCqListeners();
 
       MyCqListener* cqListener_4 = static_cast<MyCqListener*>(vl[0].get());
       printf(" cqListener_4 should have one update event = %d \n",
@@ -500,8 +494,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour2)
       // if key port1-4 then only query 3 and 4 will satisfied
       auto cqy = qs->getCq(cqNames[3]);
       auto cqAttr = cqy->getCqAttributes();
-      std::vector<CqListenerPtr> vl;
-      cqAttr->getCqListeners(vl);
+      auto vl = cqAttr->getCqListeners();
 
       auto cqListener_3 = static_cast<MyCqListener*>(vl[0].get());
       printf(" cqListener_3 should have zero update event = %d \n",
@@ -509,11 +502,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour2)
       ASSERT(cqListener_3->getNumUpdates() == 0,
              "incorrect number of events got listener 3");
 
-      vl.clear();
-
       cqy = qs->getCq(cqNames[4]);
       cqAttr = cqy->getCqAttributes();
-      cqAttr->getCqListeners(vl);
+      vl = cqAttr->getCqListeners();
 
       auto cqListener_4 = static_cast<MyCqListener*>(vl[0].get());
       printf(" cqListener_4 should have zero update event = %d \n",
diff --git a/cppcache/integration-test/testThinClientSecurityPostAuthorization.cpp b/cppcache/integration-test/testThinClientSecurityPostAuthorization.cpp
index 7b51737..eb77561 100644
--- a/cppcache/integration-test/testThinClientSecurityPostAuthorization.cpp
+++ b/cppcache/integration-test/testThinClientSecurityPostAuthorization.cpp
@@ -129,8 +129,7 @@ void getKeysVector(VectorOfCacheableKey& keysVec, int numKeys) {
   }
 }
 
-void checkValuesMap(const HashMapOfCacheablePtr& values, int clientNum,
-                    int numKeys) {
+void checkValuesMap(HashMapOfCacheable& values, int clientNum, int numKeys) {
   int expectedNum = 0;
   CacheableKeyPtr key;
   CacheableStringPtr val;
@@ -138,18 +137,18 @@ void checkValuesMap(const HashMapOfCacheablePtr& values, int clientNum,
   for (int index = clientNum - 1; index < numKeys; index += clientNum) {
     ++expectedNum;
     key = CacheableString::create(keys[index]);
-    const auto& iter = values->find(key);
-    ASSERT(iter != values->end(), "key not found in values map");
+    const auto& iter = values.find(key);
+    ASSERT(iter != values.end(), "key not found in values map");
     val = std::dynamic_pointer_cast<CacheableString>(iter->second);
     expectedVal = CacheableString::create(nvals[index]);
     ASSERT(*val == *expectedVal, "unexpected value in values map");
   }
   printf("Expected number of values: %d; got values: %zd", expectedNum,
-         values->size());
-  ASSERT(values->size() == expectedNum, "unexpected number of values");
+         values.size());
+  ASSERT(values.size() == expectedNum, "unexpected number of values");
 }
 
-void checkExceptionsMap(const HashMapOfExceptionPtr& exceptions, int clientNum,
+void checkExceptionsMap(HashMapOfException& exceptions, int clientNum,
                         int numKeys) {
   int expectedNum = 0;
   CacheableKeyPtr key;
@@ -157,8 +156,8 @@ void checkExceptionsMap(const HashMapOfExceptionPtr& exceptions, int clientNum,
     if ((index + 1) % clientNum != 0) {
       ++expectedNum;
       key = CacheableString::create(keys[index]);
-      const auto& iter = exceptions->find(key);
-      ASSERT(iter != exceptions->end(), "key not found in exceptions map");
+      const auto& iter = exceptions.find(key);
+      ASSERT(iter != exceptions.end(), "key not found in exceptions map");
       ASSERT(std::dynamic_pointer_cast<NotAuthorizedExceptionPtr>(iter->second),
              "unexpected exception type in exception map");
       printf("Got expected NotAuthorizedException: %s",
@@ -166,8 +165,8 @@ void checkExceptionsMap(const HashMapOfExceptionPtr& exceptions, int clientNum,
     }
   }
   printf("Expected number of exceptions: %d; got exceptions: %zd", expectedNum,
-         exceptions->size());
-  ASSERT(exceptions->size() == expectedNum, "unexpected number of exceptions");
+         exceptions.size());
+  ASSERT(exceptions.size() == expectedNum, "unexpected number of exceptions");
 }
 
 DUNIT_TASK_DEFINITION(ADMIN_CLIENT, StartLocator)
@@ -227,13 +226,10 @@ DUNIT_TASK_DEFINITION(ADMIN_CLIENT, StepOne)
       VectorOfCacheableKey keysVec;
       keysVec.push_back(key0);
       keysVec.push_back(key2);
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
-      regPtr0->getAll(keysVec, values, exceptions);
-      ASSERT(values->size() == 2, "Expected 2 entries");
-      ASSERT(exceptions->size() == (size_t)0, "Expected no exceptions");
-      auto res0 = std::dynamic_pointer_cast<CacheableString>((*values)[key0]);
-      auto res2 = std::dynamic_pointer_cast<CacheableString>((*values)[key2]);
+      auto values = regPtr0->getAll(keysVec);
+      ASSERT(values.size() == 2, "Expected 2 entries");
+      auto res0 = std::dynamic_pointer_cast<CacheableString>(values[key0]);
+      auto res2 = std::dynamic_pointer_cast<CacheableString>(values[key2]);
       ASSERT(*res0 == *val0, "Unexpected value for key");
       ASSERT(*res2 == *val2, "Unexpected value for key");
     }
@@ -290,14 +286,11 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
     createRegionForSecurity(regionNamesAuth[0], USE_ACK, true);
 
     VectorOfCacheableKey keys;
-    auto values = std::make_shared<HashMapOfCacheable>();
-    auto exceptions = std::make_shared<HashMapOfException>();
     getKeysVector(keys, 6);
     RegionPtr rptr = getHelper()->getRegion(regionNamesAuth[0]);
-    rptr->getAll(keys, values, exceptions);
+    auto values = rptr->getAll(keys);
 
     checkValuesMap(values, 2, 6);
-    checkExceptionsMap(exceptions, 2, 6);
 
     LOG("StepThree complete.");
   }
@@ -309,14 +302,11 @@ DUNIT_TASK_DEFINITION(READER2_CLIENT, StepFour)
     createRegionForSecurity(regionNamesAuth[0], USE_ACK, true);
 
     VectorOfCacheableKey keys;
-    auto values = std::make_shared<HashMapOfCacheable>();
-    auto exceptions = std::make_shared<HashMapOfException>();
     getKeysVector(keys, 6);
     RegionPtr rptr = getHelper()->getRegion(regionNamesAuth[0]);
-    rptr->getAll(keys, values, exceptions);
+    auto values = rptr->getAll(keys);
 
     checkValuesMap(values, 3, 6);
-    checkExceptionsMap(exceptions, 3, 6);
 
     LOG("StepFour complete.");
   }
diff --git a/cppcache/integration-test/testThinClientStatistics.cpp b/cppcache/integration-test/testThinClientStatistics.cpp
index 05c437f..00b74db 100644
--- a/cppcache/integration-test/testThinClientStatistics.cpp
+++ b/cppcache/integration-test/testThinClientStatistics.cpp
@@ -188,7 +188,7 @@ void DoRegionOpsAndVerify() {
     bool flag =
         cache->getDistributedSystem().getSystemProperties().statisticsEnabled();
     LOGINFO("statisticsEnabled = %d ", flag);
-    regEntry->getStatistics(cacheStatptr);
+    cacheStatptr = regEntry->getStatistics();
   } catch (StatisticsDisabledException& ex) {
     LOGINFO("Exception Caught:: StatisticsDisabledException");
   } catch (GeodeConfigException& e) {
diff --git a/cppcache/integration-test/testUtils.hpp b/cppcache/integration-test/testUtils.hpp
index cca8822..9c1b2f1 100644
--- a/cppcache/integration-test/testUtils.hpp
+++ b/cppcache/integration-test/testUtils.hpp
@@ -122,8 +122,7 @@ class TestUtils {
       LOG(buf);
       return;
     }
-    VectorOfCacheableKey v;
-    rptr->keys(v);
+    VectorOfCacheableKey v = rptr->keys();
     auto len = v.size();
     sprintf(buf, "Total keys in region %s : %zu\n", rptr->getName(), len);
     LOG(buf);
@@ -142,8 +141,7 @@ class TestUtils {
       LOG(buf);
       return;
     }
-    VectorOfCacheableKey v;
-    rptr->keys(v);
+    VectorOfCacheableKey v = rptr->keys();
     auto len = v.size();
     sprintf(buf, "Total keys in region %s : %zu\n", rptr->getName(), len);
     LOG(buf);
@@ -166,8 +164,7 @@ class TestUtils {
       LOG(buf);
       return;
     }
-    VectorOfCacheable v;
-    rptr->values(v);
+    auto v = rptr->values();
     auto len = v.size();
     sprintf(buf, "Total values in region %s : %zu\n", rptr->getName(), len);
     LOG(buf);
diff --git a/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp b/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
index 28eb479..af49ff0 100644
--- a/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
+++ b/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
@@ -83,9 +83,8 @@ int testXmlCacheCreationWithOverflow() {
     return -1;
   }
 
-  VectorOfRegion vrp;
   std::cout << "Test if number of root regions are correct" << std::endl;
-  cptr->rootRegions(vrp);
+  auto vrp = cptr->rootRegions();
   std::cout << "  vrp.size=" << vrp.size() << std::endl;
 
   if (vrp.size() != totalRootRegions) {
@@ -101,11 +100,10 @@ int testXmlCacheCreationWithOverflow() {
   RegionPtr regPtr1 = vrp.at(0);
 
   uint32_t i ATTR_UNUSED = 0;
-  VectorOfRegion vr;
   std::cout << "Test if the number of sub regions with the root region Root1 are "
           "correct"
        << std::endl;
-  regPtr1->subregions(true, vr);
+  VectorOfRegion vr = regPtr1->subregions(true);
   std::cout << "  vr.size=" << vr.size() << std::endl;
   if (vr.size() != totalSubRegionsRoot1) {
     std::cout << "Number of Subregions does not match" << std::endl;
@@ -123,8 +121,7 @@ int testXmlCacheCreationWithOverflow() {
   const char* parentName;
   const char* childName;
   RegionPtr regPtr2 = vrp.at(1);
-  VectorOfRegion vsr;
-  regPtr2->subregions(true, vsr);
+  VectorOfRegion vsr = regPtr2->subregions(true);
   for (uint32_t i = 0; i < static_cast<uint32_t>(vsr.size()); i++) {
     Region* regPtr = vsr.at(i).get();
     childName = regPtr->getName();
diff --git a/cppcache/integration-test/testXmlCacheCreationWithPools.cpp b/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
index d7a5ca6..b9e9ddc 100644
--- a/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
+++ b/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
@@ -278,9 +278,8 @@ int testXmlCacheCreationWithPools() {
     return -1;
   }
 
-  VectorOfRegion vrp;
   std::cout << "Test if number of root regions are correct" << std::endl;
-  cptr->rootRegions(vrp);
+  auto vrp = cptr->rootRegions();
   std::cout << "  vrp.size=" << vrp.size() << std::endl;
 
   if (vrp.size() != 2) {
@@ -295,11 +294,11 @@ int testXmlCacheCreationWithPools() {
   }
   RegionPtr regPtr1 = vrp.at(0);
 
-  VectorOfRegion vr;
+  VectorOfRegion vr = regPtr1->subregions(true);
   std::cout << "Test if the number of sub regions with the root region Root1 "
                "are correct"
             << std::endl;
-  regPtr1->subregions(true, vr);
+
   std::cout << "  vr.size=" << vr.size() << std::endl;
   if (vr.size() != 1) {
     std::cout << "Number of Subregions does not match" << std::endl;
@@ -316,14 +315,13 @@ int testXmlCacheCreationWithPools() {
   // TODO - global Issue is that we cannot have config with server and locator
   // pools. Check if this assumption is valid and if so then break up this test.
   RegionPtr subRegPtr = vr.at(0);
-  vr.clear();
 
   RegionPtr regPtr2 = vrp.at(1);
 
   std::cout << "Test if the number of sub regions with the root region Root2 "
                "are correct"
             << std::endl;
-  regPtr2->subregions(true, vr);
+  vr = regPtr2->subregions(true);
   std::cout << "  vr.size=" << vr.size() << std::endl;
   if (vr.size() != 0) {
     std::cout << "Number of Subregions does not match" << std::endl;
@@ -494,9 +492,8 @@ int testXmlDeclarativeCacheCreation() {
     return -1;
   }
 
-  VectorOfRegion vrp;
   std::cout << "Test if number of root regions are correct" << std::endl;
-  cptr->rootRegions(vrp);
+  auto vrp = cptr->rootRegions();
   std::cout << "  vrp.size=" << vrp.size() << std::endl;
 
   if (vrp.size() != 1) {
diff --git a/cppcache/src/BucketServerLocation.hpp b/cppcache/src/BucketServerLocation.hpp
index 53e2264..4e9a592 100644
--- a/cppcache/src/BucketServerLocation.hpp
+++ b/cppcache/src/BucketServerLocation.hpp
@@ -112,15 +112,15 @@ class BucketServerLocation : public ServerLocation {
 
   void fromData(apache::geode::client::DataInput& input) {
     ServerLocation::fromData(input);
-    input.readInt(&m_bucketId);
-    input.readBoolean(&m_isPrimary);
-    input.read(&m_version);
-    input.read((&m_numServerGroups));
+    m_bucketId = input.readInt32();
+    m_isPrimary = input.readBoolean();
+    m_version = input.read();
+    m_numServerGroups = input.read();
     CacheableStringPtr* serverGroups = nullptr;
     if (m_numServerGroups > 0) {
       serverGroups = new CacheableStringPtr[m_numServerGroups];
       for (int i = 0; i < m_numServerGroups; i++) {
-        input.readNativeString(serverGroups[i]);
+        serverGroups[i] = input.readNativeString();
       }
     }
     if (m_numServerGroups > 0) {
diff --git a/cppcache/src/Cache.cpp b/cppcache/src/Cache.cpp
index 304a499..14e7800 100644
--- a/cppcache/src/Cache.cpp
+++ b/cppcache/src/Cache.cpp
@@ -114,8 +114,10 @@ RegionPtr Cache::getRegion(const char* path) {
  * regions when the function returns
  */
 
-void Cache::rootRegions(VectorOfRegion& regions) {
+VectorOfRegion Cache::rootRegions() {
+  VectorOfRegion regions;
   m_cacheImpl->rootRegions(regions);
+  return regions;
 }
 
 RegionFactory Cache::createRegionFactory(RegionShortcut preDefinedRegion) {
diff --git a/cppcache/src/CacheImpl.cpp b/cppcache/src/CacheImpl.cpp
index a800049..bd09521 100644
--- a/cppcache/src/CacheImpl.cpp
+++ b/cppcache/src/CacheImpl.cpp
@@ -715,9 +715,7 @@ void CacheImpl::processMarker() {
         auto regionMsg = new TcrMessageClientMarker(
             this->getCache()->createDataOutput(), true);
         tcrHARegion->receiveNotification(regionMsg);
-        VectorOfRegion subregions;
-        tcrHARegion->subregions(true, subregions);
-        for (const auto& iter : subregions) {
+        for (const auto& iter : tcrHARegion->subregions(true)) {
           if (!iter->isDestroyed()) {
             if (const auto subregion =
                     std::dynamic_pointer_cast<ThinClientHARegion>(iter)) {
diff --git a/cppcache/src/CacheableBuiltins.cpp b/cppcache/src/CacheableBuiltins.cpp
index 55e3dae..704a4b0 100644
--- a/cppcache/src/CacheableBuiltins.cpp
+++ b/cppcache/src/CacheableBuiltins.cpp
@@ -55,7 +55,7 @@ _GF_CACHEABLE_KEY_DEF_(CacheableFloat, "%f");
 _GF_CACHEABLE_KEY_DEF_(CacheableInt16, "%" PRIi16);
 _GF_CACHEABLE_KEY_DEF_(CacheableInt32, "%" PRIi32);
 _GF_CACHEABLE_KEY_DEF_(CacheableInt64, "%" PRIi64);
-_GF_CACHEABLE_KEY_DEF_(CacheableWideChar, "%lc");
+_GF_CACHEABLE_KEY_DEF_(CacheableCharacter, "%lc");
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/CacheableDate.cpp b/cppcache/src/CacheableDate.cpp
index da8220b..0e9635c 100644
--- a/cppcache/src/CacheableDate.cpp
+++ b/cppcache/src/CacheableDate.cpp
@@ -40,7 +40,7 @@ void CacheableDate::toData(DataOutput& output) const {
   output.writeInt(m_timevalue);
 }
 
-void CacheableDate::fromData(DataInput& input) { input.readInt(&m_timevalue); }
+void CacheableDate::fromData(DataInput& input) { m_timevalue = input.readInt64(); }
 
 Serializable* CacheableDate::createDeserializable() {
   return new CacheableDate();
diff --git a/cppcache/src/CacheableEnum.cpp b/cppcache/src/CacheableEnum.cpp
index 32e678f..843d754 100644
--- a/cppcache/src/CacheableEnum.cpp
+++ b/cppcache/src/CacheableEnum.cpp
@@ -50,10 +50,8 @@ void CacheableEnum::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void CacheableEnum::fromData(apache::geode::client::DataInput& input) {
-  int8_t dsId;
-  input.read(&dsId);
-  int32_t arrLen;
-  input.readArrayLen(&arrLen);
+  auto dsId = input.read();
+  int32_t arrLen = input.readArrayLen();
   int enumId = (dsId << 24) | (arrLen & 0xFFFFFF);
   auto enumVal = PdxHelper::getEnum(
       enumId,
diff --git a/cppcache/src/CacheableFileName.cpp b/cppcache/src/CacheableFileName.cpp
index 7f46047..ee79939 100644
--- a/cppcache/src/CacheableFileName.cpp
+++ b/cppcache/src/CacheableFileName.cpp
@@ -32,7 +32,7 @@ void CacheableFileName::toData(DataOutput& output) const {
 }
 
 void CacheableFileName::fromData(DataInput& input) {
-  input.read(&m_type);
+  m_type = input.read();
   CacheableString::fromData(input);
 }
 
diff --git a/cppcache/src/CacheableObjectArray.cpp b/cppcache/src/CacheableObjectArray.cpp
index 35de170..afd3e8a 100644
--- a/cppcache/src/CacheableObjectArray.cpp
+++ b/cppcache/src/CacheableObjectArray.cpp
@@ -37,14 +37,11 @@ void CacheableObjectArray::toData(DataOutput& output) const {
 }
 
 void CacheableObjectArray::fromData(DataInput& input) {
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
   if (len >= 0) {
-    int8_t header;
-    input.read(&header);  // ignore CLASS typeid
-    input.read(&header);  // ignore string typeid
-    uint16_t classLen;
-    input.readInt(&classLen);
+    input.read();  // ignore CLASS typeid
+    input.read();  // ignore string typeid
+    uint16_t classLen = input.readInt16();
     input.advanceCursor(classLen);
     CacheablePtr obj;
     for (int32_t index = 0; index < len; index++) {
diff --git a/cppcache/src/CacheableObjectPartList.cpp b/cppcache/src/CacheableObjectPartList.cpp
index 93dd7c8..3a991ec 100644
--- a/cppcache/src/CacheableObjectPartList.cpp
+++ b/cppcache/src/CacheableObjectPartList.cpp
@@ -32,10 +32,8 @@ void CacheableObjectPartList::toData(DataOutput& output) const {
 }
 
 void CacheableObjectPartList::fromData(DataInput& input) {
-  bool hasKeys;
-  input.readBoolean(&hasKeys);
-  int32_t len;
-  input.readInt(&len);
+  const auto hasKeys = input.readBoolean();
+  int32_t len = input.readInt32();
   if (len > 0) {
     CacheableKeyPtr key;
     CacheablePtr value;
@@ -45,7 +43,7 @@ void CacheableObjectPartList::fromData(DataInput& input) {
     int32_t keysOffset = (m_keysOffset != nullptr ? *m_keysOffset : 0);
     for (int32_t index = keysOffset; index < keysOffset + len; ++index) {
       if (hasKeys) {
-        input.readObject(key, true);
+        key = input.readObject<CacheableKey>(true);
       } else if (m_keys != nullptr) {
         key = m_keys->operator[](index);
       } else {
@@ -57,15 +55,12 @@ void CacheableObjectPartList::fromData(DataInput& input) {
         m_resultKeys->push_back(key);
       }
       // input.readBoolean(&isException);
-      uint8_t byte = 0;
-      input.read(&byte);
+      uint8_t byte = input.read();
 
       if (byte == 2 /* for exception*/) {
-        int32_t skipLen;
-        input.readArrayLen(&skipLen);
-        input.advanceCursor(skipLen);
+        input.advanceCursor(input.readArrayLen());
         // input.readObject(exMsgPtr, true);// Changed
-        input.readNativeString(exMsgPtr);
+        exMsgPtr = input.readNativeString();
         if (m_exceptions != nullptr) {
           const char* exMsg = exMsgPtr->asChar();
           if (strstr(exMsg,
diff --git a/cppcache/src/CacheableToken.cpp b/cppcache/src/CacheableToken.cpp
index d0918af..51e44f3 100644
--- a/cppcache/src/CacheableToken.cpp
+++ b/cppcache/src/CacheableToken.cpp
@@ -47,7 +47,7 @@ void CacheableToken::toData(DataOutput& output) const {
 }
 
 void CacheableToken::fromData(DataInput& input) {
-  input.readInt(reinterpret_cast<int32_t*>(&m_value));
+  m_value = static_cast<TokenType>(input.readInt32());
 }
 
 int32_t CacheableToken::classId() const { return 0; }
diff --git a/cppcache/src/ClientConnectionResponse.cpp b/cppcache/src/ClientConnectionResponse.cpp
index 79f6fdf..dfcb84e 100644
--- a/cppcache/src/ClientConnectionResponse.cpp
+++ b/cppcache/src/ClientConnectionResponse.cpp
@@ -21,7 +21,7 @@
 using namespace apache::geode::client;
 
 void ClientConnectionResponse::fromData(DataInput& input) {
-  input.readBoolean(&m_serverFound);
+  m_serverFound = input.readBoolean();
   if (m_serverFound) {
     m_server.fromData(input);
   }
diff --git a/cppcache/src/ClientHealthStats.cpp b/cppcache/src/ClientHealthStats.cpp
index a7a960d..924b39d 100644
--- a/cppcache/src/ClientHealthStats.cpp
+++ b/cppcache/src/ClientHealthStats.cpp
@@ -33,13 +33,13 @@ void ClientHealthStats::toData(DataOutput& output) const {
 }
 
 void ClientHealthStats::fromData(DataInput& input) {
-  input.readInt(&m_numGets);
-  input.readInt(&m_numPuts);
-  input.readInt(&m_numMisses);
-  input.readInt(&m_numCacheListenerCalls);
-  input.readInt(&m_numThread);
-  input.readInt(&m_processCpuTime);
-  input.readInt(&m_cpus);
+  m_numGets = input.readInt32();
+  m_numPuts = input.readInt32();
+  m_numMisses = input.readInt32();
+  m_numCacheListenerCalls = input.readInt32();
+  m_numThread = input.readInt32();
+  m_processCpuTime = input.readInt64();
+  m_cpus = input.readInt32();
   m_updateTime->fromData(input);
 }
 
diff --git a/cppcache/src/ClientProxyMembershipID.cpp b/cppcache/src/ClientProxyMembershipID.cpp
index f14e8e3..aa5cc32 100644
--- a/cppcache/src/ClientProxyMembershipID.cpp
+++ b/cppcache/src/ClientProxyMembershipID.cpp
@@ -221,7 +221,7 @@ void ClientProxyMembershipID::fromData(DataInput& input) {
   CacheableStringPtr hostname, dsName, uniqueTag, durableClientId;
   int8_t splitbrain, vmKind;
 
-  input.readArrayLen(&len);  // inetaddress len
+  len = input.readArrayLen();  // inetaddress len
   m_hostAddrLocalMem = true;
   /* adongre  - Coverity II
    * CID 29184: Out-of-bounds access (OVERRUN_DYNAMIC)
@@ -230,18 +230,18 @@ void ClientProxyMembershipID::fromData(DataInput& input) {
   hostAddr = new uint8_t[len];
 
   input.readBytesOnly(hostAddr, len);  // inetaddress
-  input.readInt(&hostPort);            // port
-  input.readObject(hostname);          // hostname
-  input.read(&splitbrain);             // splitbrain
-  input.readInt(&dcport);              // port
-  input.readInt(&vPID);                // pid
-  input.read(&vmKind);                 // vmkind
+  hostPort = input.readInt32();            // port
+  hostname = input.readObject<CacheableString>();          // hostname
+  splitbrain = input.read();             // splitbrain
+  dcport = input.readInt32();              // port
+  vPID = input.readInt32();                // pid
+  vmKind = input.read();                 // vmkind
   auto aStringArray = CacheableStringArray::create();
   aStringArray->fromData(input);
-  input.readObject(dsName);            // name
-  input.readObject(uniqueTag);         // unique tag
-  input.readObject(durableClientId);   // durable client id
-  input.readInt(&durableClntTimeOut);  // durable client timeout
+  dsName = input.readObject<CacheableString>();            // name
+  uniqueTag = input.readObject<CacheableString>();         // unique tag
+  durableClientId = input.readObject<CacheableString>();   // durable client id
+  durableClntTimeOut = input.readInt32();  // durable client timeout
   int32_t vmViewId = 0;
   readVersion(splitbrain, input);
 
@@ -265,10 +265,8 @@ Serializable* ClientProxyMembershipID::readEssentialData(DataInput& input) {
   uint8_t* hostAddr;
   int32_t len, hostPort, vmViewId = 0;
   CacheableStringPtr hostname, dsName, uniqueTag, vmViewIdstr;
-  int8_t vmKind;
-  uint8_t flag;
 
-  input.readArrayLen(&len);  // inetaddress len
+  len = input.readArrayLen();  // inetaddress len
   m_hostAddrLocalMem = true;
   /* adongre - Coverity II
    * CID 29183: Out-of-bounds access (OVERRUN_DYNAMIC)
@@ -278,21 +276,21 @@ Serializable* ClientProxyMembershipID::readEssentialData(DataInput& input) {
 
   input.readBytesOnly(hostAddr, len);  // inetaddress
 
-  input.readInt(&hostPort);  // port
+  hostPort = input.readInt32();  // port
   // TODO: RVV get the host name from
 
-  input.read(&flag);
+  const uint8_t flag = input.read();
 
-  input.read(&vmKind);  // vmkind
+  const auto vmKind = input.read();  // vmkind
 
   if (vmKind == ClientProxyMembershipID::LONER_DM_TYPE) {
-    input.readObject(uniqueTag);  // unique tag
+    uniqueTag = input.readObject<CacheableString>();  // unique tag
   } else {
-    input.readObject(vmViewIdstr);
+    vmViewIdstr = input.readObject<CacheableString>();
     vmViewId = atoi(vmViewIdstr.get()->asChar());
   }
 
-  input.readObject(dsName);  // name
+  dsName = input.readObject<CacheableString>();  // name
 
   if (vmKind != ClientProxyMembershipID::LONER_DM_TYPE) {
     // initialize the object with the values read and some dummy values
@@ -377,14 +375,11 @@ int16_t ClientProxyMembershipID::compareTo(
 
 void ClientProxyMembershipID::readVersion(int flags, DataInput& input) {
   if ((flags & ClientProxyMembershipID::VERSION_MASK) != 0) {
-    int8_t ordinal;
-    input.read(&ordinal);
+    int8_t ordinal = input.read();
     LOGDEBUG("ClientProxyMembershipID::readVersion ordinal = %d ", ordinal);
     if (ordinal != ClientProxyMembershipID::TOKEN_ORDINAL) {
     } else {
-      int16_t ordinal;
-      input.readInt(&ordinal);
-      LOGDEBUG("ClientProxyMembershipID::readVersion ordinal = %d ", ordinal);
+      LOGDEBUG("ClientProxyMembershipID::readVersion ordinal = %d ", input.readInt16());
     }
   }
 }
diff --git a/cppcache/src/ConcurrentEntriesMap.cpp b/cppcache/src/ConcurrentEntriesMap.cpp
index c8338be..b1bd1fa 100644
--- a/cppcache/src/ConcurrentEntriesMap.cpp
+++ b/cppcache/src/ConcurrentEntriesMap.cpp
@@ -147,24 +147,24 @@ bool ConcurrentEntriesMap::containsKey(const CacheableKeyPtr& key) const {
   return segmentFor(key)->containsKey(key);
 }
 
-void ConcurrentEntriesMap::keys(VectorOfCacheableKey& result) const {
-  result.clear();
+void ConcurrentEntriesMap::getKeys(VectorOfCacheableKey& result) const {
+  result.reserve(this->size());
   for (int index = 0; index < m_concurrency; ++index) {
-    m_segments[index].keys(result);
+    m_segments[index].getKeys(result);
   }
 }
 
-void ConcurrentEntriesMap::entries(VectorOfRegionEntry& result) const {
-  result.clear();
+void ConcurrentEntriesMap::getEntries(VectorOfRegionEntry& result) const {
+  result.reserve(this->size());
   for (int index = 0; index < m_concurrency; ++index) {
-    m_segments[index].entries(result);
+    m_segments[index].getEntries(result);
   }
 }
 
-void ConcurrentEntriesMap::values(VectorOfCacheable& result) const {
-  result.clear();
+void ConcurrentEntriesMap::getValues(VectorOfCacheable& result) const {
+  result.reserve(this->size());
   for (int index = 0; index < m_concurrency; ++index) {
-    m_segments[index].values(result);
+    m_segments[index].getValues(result);
   }
 }
 
diff --git a/cppcache/src/ConcurrentEntriesMap.hpp b/cppcache/src/ConcurrentEntriesMap.hpp
index 0a67fbb..72c7bdc 100644
--- a/cppcache/src/ConcurrentEntriesMap.hpp
+++ b/cppcache/src/ConcurrentEntriesMap.hpp
@@ -125,17 +125,17 @@ class CPPCACHE_EXPORT ConcurrentEntriesMap : public EntriesMap {
   /**
    * @brief return the all the keys in a list.
    */
-  virtual void keys(VectorOfCacheableKey& result) const;
+  virtual void getKeys(VectorOfCacheableKey& result) const;
 
   /**
    * @brief return all the entries in a list.
    */
-  virtual void entries(VectorOfRegionEntry& result) const;
+  virtual void getEntries(VectorOfRegionEntry& result) const;
 
   /**
    * @brief return all values in a list.
    */
-  virtual void values(VectorOfCacheable& result) const;
+  virtual void getValues(VectorOfCacheable& result) const;
 
   /**
    * @brief return the number of entries in the map.
diff --git a/cppcache/src/CqAttributesFactory.cpp b/cppcache/src/CqAttributesFactory.cpp
index 2c75ca1..7d94f82 100644
--- a/cppcache/src/CqAttributesFactory.cpp
+++ b/cppcache/src/CqAttributesFactory.cpp
@@ -24,9 +24,8 @@ CqAttributesFactory::CqAttributesFactory() {
   m_cqAttributes = std::make_shared<CqAttributesImpl>();
 }
 CqAttributesFactory::CqAttributesFactory(const CqAttributesPtr &cqAttributes) {
+  auto vl = cqAttributes->getCqListeners();
   m_cqAttributes = std::make_shared<CqAttributesImpl>();
-  CqAttributesImpl::listener_container_type vl;
-  std::static_pointer_cast<CqAttributesImpl>(cqAttributes)->getCqListeners(vl);
   std::static_pointer_cast<CqAttributesImpl>(m_cqAttributes)
       ->setCqListeners(vl);
 }
diff --git a/cppcache/src/CqAttributesImpl.cpp b/cppcache/src/CqAttributesImpl.cpp
index 53494d4..42ce999 100644
--- a/cppcache/src/CqAttributesImpl.cpp
+++ b/cppcache/src/CqAttributesImpl.cpp
@@ -14,12 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "CqAttributesImpl.hpp"
 #include <geode/ExceptionTypes.hpp>
-using namespace apache::geode::client;
-void CqAttributesImpl::getCqListeners(listener_container_type& vl) {
+
+namespace apache {
+namespace geode {
+namespace client {
+
+CqAttributes::listener_container_type CqAttributesImpl::getCqListeners() {
   ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
-  vl = m_cqListeners;
+  return m_cqListeners;
 }
 
 void CqAttributesImpl::addCqListener(const CqListenerPtr& cql) {
@@ -80,3 +85,7 @@ void CqAttributesImpl::removeCqListener(const CqListenerPtr& cql) {
     }
   }
 }
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/CqAttributesImpl.hpp b/cppcache/src/CqAttributesImpl.hpp
index c32d8fa..8f1a4de 100644
--- a/cppcache/src/CqAttributesImpl.hpp
+++ b/cppcache/src/CqAttributesImpl.hpp
@@ -49,7 +49,7 @@ namespace client {
  */
 class CPPCACHE_EXPORT CqAttributesImpl : public CqAttributes {
  public:
-  void getCqListeners(listener_container_type& vl);
+  listener_container_type getCqListeners() override;
 
   /**
    * Get the CqListener set with the CQ.
diff --git a/cppcache/src/CqQueryImpl.cpp b/cppcache/src/CqQueryImpl.cpp
index ffb603e..cdab3d7 100644
--- a/cppcache/src/CqQueryImpl.cpp
+++ b/cppcache/src/CqQueryImpl.cpp
@@ -141,8 +141,7 @@ void CqQueryImpl::close(bool sendRequestToServer) {
 
   // Invoke close on Listeners if any.
   if (m_cqAttributes) {
-    CqAttributes::listener_container_type cqListeners;
-    m_cqAttributes->getCqListeners(cqListeners);
+    auto cqListeners = m_cqAttributes->getCqListeners();
 
     if (!cqListeners.empty()) {
       LOGFINE(
@@ -240,7 +239,7 @@ void CqQueryImpl::cleanup() { removeFromCqMap(); }
  */
 void CqQueryImpl::getCqListeners(
     CqAttributes::listener_container_type& cqListener) {
-  m_cqAttributes->getCqListeners(cqListener);
+  cqListener = m_cqAttributes->getCqListeners();
 }
 
 GfErrType CqQueryImpl::execute(TcrEndpoint* endpoint) {
diff --git a/cppcache/src/CqService.cpp b/cppcache/src/CqService.cpp
index e5cbeb9..b47780d 100644
--- a/cppcache/src/CqService.cpp
+++ b/cppcache/src/CqService.cpp
@@ -193,14 +193,15 @@ void CqService::clearCqQueryMap() {
 /**
  * Retrieve  all registered CQs
  */
-void CqService::getAllCqs(query_container_type& cqVec) {
-  cqVec.clear();
+CqService::query_container_type CqService::getAllCqs() {
+  CqService::query_container_type cqVec;
   MapOfRegionGuard guard(m_cqQueryMap->mutex());
-  if (m_cqQueryMap->current_size() == 0) return;
+  if (m_cqQueryMap->current_size() == 0) return cqVec;
   cqVec.reserve(static_cast<int32_t>(m_cqQueryMap->current_size()));
   for (auto& q : *m_cqQueryMap) {
     cqVec.push_back(q.int_id_);
   }
+  return cqVec;
 }
 
 /**
@@ -208,8 +209,7 @@ void CqService::getAllCqs(query_container_type& cqVec) {
  */
 void CqService::executeAllClientCqs(bool afterFailover) {
   // ACE_Guard< ACE_Recursive_Thread_Mutex > _guard( m_mutex );
-  query_container_type cqVec;
-  getAllCqs(cqVec);
+  query_container_type cqVec = getAllCqs();
   // MapOfRegionGuard guard( m_cqQueryMap->mutex() );
   executeCqs(cqVec, afterFailover);
 }
@@ -218,8 +218,7 @@ void CqService::executeAllClientCqs(bool afterFailover) {
  * Executes all CQs on the specified endpoint after failover.
  */
 GfErrType CqService::executeAllClientCqs(TcrEndpoint* endpoint) {
-  query_container_type cqVec;
-  getAllCqs(cqVec);
+  query_container_type cqVec = getAllCqs();
   return executeCqs(cqVec, endpoint);
 }
 
@@ -281,8 +280,7 @@ void CqService::executeCqs(query_container_type& cqs, bool afterFailover) {
  * Stops all the cqs
  */
 void CqService::stopAllClientCqs() {
-  query_container_type cqVec;
-  getAllCqs(cqVec);
+  query_container_type cqVec = getAllCqs();
   // MapOfRegionGuard guard( m_cqQueryMap->mutex() );
   stopCqs(cqVec);
 }
@@ -363,8 +361,7 @@ void CqService::closeCqService() {
 }
 void CqService::closeAllCqs() {
   Log::fine("closeAllCqs()");
-  query_container_type cqVec;
-  getAllCqs(cqVec);
+  query_container_type cqVec = getAllCqs();
   Log::fine("closeAllCqs() 1");
   MapOfRegionGuard guard(m_cqQueryMap->mutex());
   Log::fine("closeAllCqs() 2");
@@ -456,15 +453,7 @@ void CqService::invokeCqListeners(const std::map<std::string, int>* cqs,
     cQueryImpl->updateStats(*cqEvent);
 
     // invoke CQ Listeners.
-    CqAttributes::listener_container_type cqListeners;
-    cQueryImpl->getCqAttributes()->getCqListeners(cqListeners);
-    /*
-    Log::fine(("Invoking CqListeners for the CQ, CqName : " + cqName +
-        " , Number of Listeners : " + cqListeners.length() + " cqEvent : " +
-    cqEvent);
-        */
-
-    for (auto l : cqListeners) {
+    for (auto l : cQueryImpl->getCqAttributes()->getCqListeners()) {
       try {
         // Check if the listener is not null, it could have been changed/reset
         // by the CqAttributeMutator.
@@ -488,8 +477,7 @@ void CqService::invokeCqListeners(const std::map<std::string, int>* cqs,
 
 void CqService::invokeCqConnectedListeners(const std::string& poolName,
                                            bool connected) {
-  query_container_type vec;
-  getAllCqs(vec);
+  query_container_type vec = getAllCqs();
   for (int32_t i = 0; i < vec.size(); i++) {
     std::string cqName = vec.at(i)->getName();
     auto cQuery = getCq(cqName);
@@ -511,9 +499,7 @@ void CqService::invokeCqConnectedListeners(const std::string& poolName,
     }
 
     // invoke CQ Listeners.
-    std::vector<CqListenerPtr> cqListeners;
-    cQueryImpl->getCqAttributes()->getCqListeners(cqListeners);
-    for (auto l : cqListeners) {
+    for (auto l : cQueryImpl->getCqAttributes()->getCqListeners()) {
       try {
         // Check if the listener is not null, it could have been changed/reset
         // by the CqAttributeMutator.
diff --git a/cppcache/src/CqService.hpp b/cppcache/src/CqService.hpp
index 88ff1a8..a502604 100644
--- a/cppcache/src/CqService.hpp
+++ b/cppcache/src/CqService.hpp
@@ -159,7 +159,7 @@ class CPPCACHE_EXPORT CqService
   /**
    * Retrieve  all registered CQs
    */
-  void getAllCqs(query_container_type& vec);
+  query_container_type getAllCqs();
   /**
    * Executes all the cqs on this client.
    */
diff --git a/cppcache/src/DataInput.cpp b/cppcache/src/DataInput.cpp
index 1de3ae3..bf195ea 100644
--- a/cppcache/src/DataInput.cpp
+++ b/cppcache/src/DataInput.cpp
@@ -25,8 +25,8 @@ namespace apache {
 namespace geode {
 namespace client {
 
-void DataInput::readObjectInternal(SerializablePtr& ptr, int8_t typeId) {
-  ptr = getSerializationRegistry().deserialize(*this, typeId);
+SerializablePtr DataInput::readObjectInternal(int8_t typeId) {
+  return getSerializationRegistry().deserialize(*this, typeId);
 }
 
 const SerializationRegistry& DataInput::getSerializationRegistry() const {
diff --git a/cppcache/src/DiskStoreId.hpp b/cppcache/src/DiskStoreId.hpp
index baf5ee4..fe384b0 100644
--- a/cppcache/src/DiskStoreId.hpp
+++ b/cppcache/src/DiskStoreId.hpp
@@ -53,8 +53,8 @@ class DiskStoreId : public DSMemberForVersionStamp {
     throw IllegalStateException("DiskStoreId::toData not implemented");
   }
   virtual void fromData(DataInput& input) {
-    input.readInt(&m_mostSig);
-    input.readInt(&m_leastSig);
+    m_mostSig = input.readInt64();
+    m_leastSig = input.readInt64();
   }
   virtual int32_t classId() const { return 0; }
 
diff --git a/cppcache/src/EntriesMap.hpp b/cppcache/src/EntriesMap.hpp
index c057aa5..bcdd5a1 100644
--- a/cppcache/src/EntriesMap.hpp
+++ b/cppcache/src/EntriesMap.hpp
@@ -100,17 +100,17 @@ class CPPCACHE_EXPORT EntriesMap {
   /**
    * @brief return the all the keys in a vector.
    */
-  virtual void keys(VectorOfCacheableKey& result) const = 0;
+  virtual void getKeys(VectorOfCacheableKey& result) const = 0;
 
   /**
    * @brief return all the entries in a vector.
    */
-  virtual void entries(VectorOfRegionEntry& result) const = 0;
+  virtual void getEntries(VectorOfRegionEntry& result) const = 0;
 
   /**
    * @brief return all values in a vector.
    */
-  virtual void values(VectorOfCacheable& result) const = 0;
+  virtual void getValues(VectorOfCacheable& result) const = 0;
 
   /** @brief return the number of entries in the map. */
   virtual uint32_t size() const = 0;
diff --git a/cppcache/src/EnumInfo.cpp b/cppcache/src/EnumInfo.cpp
index 21e4156..c4c3bba 100644
--- a/cppcache/src/EnumInfo.cpp
+++ b/cppcache/src/EnumInfo.cpp
@@ -70,9 +70,9 @@ void EnumInfo::toData(apache::geode::client::DataOutput &output) const {
 }
 
 void EnumInfo::fromData(apache::geode::client::DataInput &input) {
-  input.readObject(m_enumClassName);
-  input.readObject(m_enumName);
-  input.readInt(&m_ordinal);
+  m_enumClassName = input.readObject<CacheableString>();
+  m_enumName = input.readObject<CacheableString>();
+  m_ordinal = input.readInt32();
 }
 
 int8_t EnumInfo::DSFID() const {
diff --git a/cppcache/src/EventId.cpp b/cppcache/src/EventId.cpp
index d17983b..a14e724 100644
--- a/cppcache/src/EventId.cpp
+++ b/cppcache/src/EventId.cpp
@@ -73,17 +73,13 @@ void EventId::toData(DataOutput& output) const {
 
 void EventId::fromData(DataInput& input) {
   // TODO: statics being assigned; not thread-safe??
-  input.readArrayLen(&m_eidMemLen);
+  m_eidMemLen = input.readArrayLen();
   input.readBytesOnly(reinterpret_cast<int8_t*>(m_eidMem), m_eidMemLen);
-  int32_t arrayLen;
-  input.readArrayLen(&arrayLen);
-  char numberCode = 0;
-  input.read(reinterpret_cast<uint8_t*>(&numberCode));
-  m_eidThr = getEventIdData(input, numberCode);
-  input.read(reinterpret_cast<uint8_t*>(&numberCode));
-  m_eidSeq = getEventIdData(input, numberCode);
-  input.readInt(&m_bucketId);
-  input.read(&m_breadcrumbCounter);
+  input.readArrayLen(); // ignore arrayLen
+  m_eidThr = getEventIdData(input, input.read());
+  m_eidSeq = getEventIdData(input, input.read());
+  m_bucketId = input.readInt32();
+  m_breadcrumbCounter = input.read();
 }
 
 const char* EventId::getMemId() const { return m_eidMem; }
@@ -99,20 +95,16 @@ int64_t EventId::getEventIdData(DataInput& input, char numberCode) {
 
   //  Read number based on numeric code written by java server.
   if (numberCode == 0) {
-    int8_t byteVal;
-    input.read(&byteVal);
-    retVal = byteVal;
+    return input.read();
   } else if (numberCode == 1) {
-    int16_t shortVal;
-    input.readInt(&shortVal);
-    retVal = shortVal;
+    retVal = input.readInt16();
   } else if (numberCode == 2) {
     int32_t intVal;
-    input.readInt(&intVal);
+    intVal = input.readInt32();
     retVal = intVal;
   } else if (numberCode == 3) {
     int64_t longVal;
-    input.readInt(&longVal);
+    longVal = input.readInt64();
     retVal = longVal;
   }
 
diff --git a/cppcache/src/ExecutionImpl.cpp b/cppcache/src/ExecutionImpl.cpp
index cfe45cd..2ab024f 100644
--- a/cppcache/src/ExecutionImpl.cpp
+++ b/cppcache/src/ExecutionImpl.cpp
@@ -69,9 +69,9 @@ std::vector<int8_t>* ExecutionImpl::getFunctionAttributes(const char* func) {
   return nullptr;
 }
 
-ResultCollectorPtr ExecutionImpl::execute(CacheableVectorPtr& routingObj,
-                                          CacheablePtr& args,
-                                          ResultCollectorPtr& rs,
+ResultCollectorPtr ExecutionImpl::execute(const CacheableVectorPtr& routingObj,
+                                          const CacheablePtr& args,
+                                          const ResultCollectorPtr& rs,
                                           const char* func, uint32_t timeout) {
   m_routingObj = routingObj;
   m_args = args;
@@ -158,18 +158,6 @@ ResultCollectorPtr ExecutionImpl::execute(const char* fn, uint32_t timeout) {
       retryAttempts = m_pool->getRetryAttempts();
     }
 
-    //    if(txState != nullptr && !txState->isReplay())
-    //    {
-    //		auto args = std::make_shared<VectorOfCacheable>();
-    //		args->push_back(m_args);
-    //		args->push_back(m_routingObj);
-    //		args->push_back(m_rc);
-    //		args->push_back(CacheableString::create(func));
-    //		args->push_back(CacheableInt32::create(timeout));
-    //		txState->recordTXOperation(GF_EXECUTE_FUNCTION,
-    // m_region==nullptr?nullptr:m_region->getFullPath(), nullptr, args);
-    //    }
-    //    try{
     if (m_pool != nullptr && m_pool->getPRSingleHopEnabled()) {
       auto tcrdm = std::dynamic_pointer_cast<ThinClientPoolDM>(m_pool);
       if (!tcrdm) {
diff --git a/cppcache/src/ExecutionImpl.hpp b/cppcache/src/ExecutionImpl.hpp
index 0511172..4926e83 100644
--- a/cppcache/src/ExecutionImpl.hpp
+++ b/cppcache/src/ExecutionImpl.hpp
@@ -60,8 +60,9 @@ class ExecutionImpl : public Execution {
   virtual ExecutionPtr withCollector(ResultCollectorPtr rs);
   // java function has hasResult property. we put the hasResult argument
   // here as a kluge.
-  virtual ResultCollectorPtr execute(CacheableVectorPtr& routingObj,
-                                     CacheablePtr& args, ResultCollectorPtr& rs,
+  virtual ResultCollectorPtr execute(const CacheableVectorPtr& routingObj,
+                                     const CacheablePtr& args,
+                                     const ResultCollectorPtr& rs,
                                      const char* func, uint32_t timeout);
   virtual ResultCollectorPtr execute(
       const char* func, uint32_t timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT);
diff --git a/cppcache/src/ExpirationAttributes.cpp b/cppcache/src/ExpirationAttributes.cpp
index 833d6b7..25e2c51 100644
--- a/cppcache/src/ExpirationAttributes.cpp
+++ b/cppcache/src/ExpirationAttributes.cpp
@@ -29,6 +29,6 @@ void ExpirationAttributes::setTimeout(int timeout) { m_timeout = timeout; }
 ExpirationAction::Action ExpirationAttributes::getAction() const {
   return m_action;
 }
-void ExpirationAttributes::setAction(ExpirationAction::Action& action) {
+void ExpirationAttributes::setAction(const ExpirationAction::Action& action) {
   m_action = action;
 }
diff --git a/cppcache/src/FarSideEntryOp.cpp b/cppcache/src/FarSideEntryOp.cpp
index e17c677..535e4d4 100644
--- a/cppcache/src/FarSideEntryOp.cpp
+++ b/cppcache/src/FarSideEntryOp.cpp
@@ -58,18 +58,15 @@ bool FarSideEntryOp::isInvalidate(int8_t op) {
 
 void FarSideEntryOp::fromData(DataInput& input, bool largeModCount,
                               uint16_t memId) {
-  input.readObject(m_key);
-  input.read(&m_op);
+  m_key = input.readObject<CacheableKey>();
+  m_op = input.read();
   if (largeModCount) {
-    input.readInt(&m_modSerialNum);
+    m_modSerialNum = input.readInt32();
   } else {
-    int8_t modSerialNum;
-    input.read(&modSerialNum);
-    m_modSerialNum = modSerialNum;
+    m_modSerialNum = input.read();
   }
-  uint8_t firstByte;
-  input.read(&firstByte);
-  if (firstByte != GeodeTypeIds::NullObj) {
+
+  if (input.read() != GeodeTypeIds::NullObj) {
     input.rewindCursor(1);
     input.readObject(m_callbackArg);
   }
@@ -79,31 +76,23 @@ void FarSideEntryOp::fromData(DataInput& input, bool largeModCount,
       TcrMessage::readVersionTagPart(input, memId, m_memberListForVersionStamp);
   // SerializablePtr sPtr;
   // input.readObject(sPtr);
-  input.readInt(&m_eventOffset);
+  m_eventOffset = input.readInt32();
   if (!isDestroy(m_op)) {
-    input.readBoolean(&m_didDestroy);
+    m_didDestroy = input.readBoolean();
     if (!isInvalidate(m_op)) {
-      bool isToken;
-      input.readBoolean(&isToken);
-      if (isToken) {
-        int8_t objType;
+      if (input.readBoolean()) {
         int32_t rewind = 1;
         int16_t fixedId = 0;
-        input.read(&objType);
-        if (objType == GeodeTypeIdsImpl::FixedIDShort) {
-          input.readInt(&fixedId);
+        if (input.read() == GeodeTypeIdsImpl::FixedIDShort) {
+          fixedId = input.readInt16();
           rewind += 2;
         }
 
-        //			  public static final short TOKEN_INVALID = 141;
-        //			  public static final short TOKEN_LOCAL_INVALID
-        //=
-        // 142;
-        //			  public static final short TOKEN_DESTROYED =
-        // 143;
-        //			  public static final short TOKEN_REMOVED = 144;
-        //			  public static final short TOKEN_REMOVED2 =
-        // 145;
+        // TOKEN_INVALID = 141;
+        // TOKEN_LOCAL_INVALID = 142;
+        // TOKEN_DESTROYED = 43;
+        // TOKEN_REMOVED = 144;
+        // TOKEN_REMOVED2 = 145;
         if (fixedId >= 141 && fixedId < 146) {
           m_value = nullptr;
         } else {
@@ -112,8 +101,7 @@ void FarSideEntryOp::fromData(DataInput& input, bool largeModCount,
         }
       } else {
         // uint8_t* buf = nullptr;
-        int32_t len;
-        input.readArrayLen(&len);
+        input.readArrayLen(); // ignore len
         input.readObject(m_value);
 
         // input.readBytes(&buf, &len);
@@ -138,74 +126,52 @@ void FarSideEntryOp::apply(RegionPtr& region) {
 }
 
 void FarSideEntryOp::skipFilterRoutingInfo(DataInput& input) {
-  int8_t structType;
-  uint8_t classByte;
   CacheablePtr tmp;
-  input.read(&structType);  // this is DataSerializable (45)
+  auto structType = input.read();  // this is DataSerializable (45)
 
   if (structType == GeodeTypeIds::NullObj) {
     return;
   } else if (structType == GeodeTypeIdsImpl::DataSerializable) {
-    input.read(&classByte);
+    input.read(); // ignore classbyte
     input.readObject(tmp);
-    int32_t size;
-    input.readInt(&size);
+    int32_t size = input.readInt32();
     for (int i = 0; i < size; i++) {
       ClientProxyMembershipID memId;
       // memId.fromData(input);
       memId.readEssentialData(input);
 
-      int32_t len;
-      input.readArrayLen(&len);
-
-      /*
-                        for(int j = 0; j < len; j++)
-                        {
-                                input.readObject(tmp);
-                                input.readObject(tmp);
-                        }
-      */
-
-      bool hasCQs;
-      input.readBoolean(&hasCQs);
+      int32_t len = input.readArrayLen();
 
-      if (hasCQs) {
-        input.readArrayLen(&len);
+      if (input.readBoolean()) {
+        len = input.readArrayLen();
         for (int j = 0; j < len; j++) {
-          int64_t ignore;
-          input.readUnsignedVL(&ignore);
-          input.readUnsignedVL(&ignore);
+          input.readUnsignedVL();
+          input.readUnsignedVL();
         }
       }
 
-      input.readInt(&len);
+      len = input.readInt32();
       if (len != -1) {
-        bool isLong;
-        input.readBoolean(&isLong);
+        const auto isLong = input.readBoolean();
 
         for (int j = 0; j < len; j++) {
           if (isLong) {
-            int64_t val;
-            input.readInt(&val);
+            input.readInt64();
           } else {
-            int32_t val;
-            input.readInt(&val);
+            input.readInt32();
           }
         }
       }
 
-      input.readInt(&len);
+      len = input.readInt32();
       if (len != -1) {
-        bool isLong;
-        input.readBoolean(&isLong);
+        const auto isLong = input.readBoolean();
 
         for (int j = 0; j < len; j++) {
           if (isLong) {
-            int64_t val;
-            input.readInt(&val);
+            input.readInt64();
           } else {
-            int32_t val;
-            input.readInt(&val);
+            input.readInt32();
           }
         }
       }
diff --git a/cppcache/src/FixedPartitionAttributesImpl.hpp b/cppcache/src/FixedPartitionAttributesImpl.hpp
index a14bc87..0a48a05 100644
--- a/cppcache/src/FixedPartitionAttributesImpl.hpp
+++ b/cppcache/src/FixedPartitionAttributesImpl.hpp
@@ -68,10 +68,10 @@ class FixedPartitionAttributesImpl : public Serializable {
   }
 
   void fromData(DataInput& input) {
-    input.readNativeString(m_partitionName);
-    input.readBoolean(&m_isPrimary);
-    input.readInt((int32_t*)&m_numBuckets);
-    input.readInt((int32_t*)&m_startingBucketId);
+    m_partitionName = input.readNativeString();
+    m_isPrimary = input.readBoolean();
+    m_numBuckets = input.readInt32();
+    m_startingBucketId = input.readInt32();
   }
 
   uint32_t objectSize() const {
diff --git a/cppcache/src/FunctionService.cpp b/cppcache/src/FunctionService.cpp
index a392586..c6d3c25 100644
--- a/cppcache/src/FunctionService.cpp
+++ b/cppcache/src/FunctionService.cpp
@@ -27,13 +27,14 @@
 
 using namespace apache::geode::client;
 
-ExecutionPtr FunctionService::onRegion(RegionPtr region) {
+ExecutionPtr FunctionService::onRegion(const RegionPtr& region) {
   LOGDEBUG("FunctionService::onRegion(RegionPtr region)");
   if (region == nullptr) {
     throw NullPointerException("FunctionService::onRegion: region is null");
   }
 
-  const PoolPtr& pool = region->getPool();
+  auto realRegion = region;
+  const auto& pool = realRegion->getPool();
 
   if (pool == nullptr) {
     throw IllegalArgumentException("Pool attached with region is closed.");
@@ -41,40 +42,36 @@ ExecutionPtr FunctionService::onRegion(RegionPtr region) {
   ProxyCachePtr proxyCache = nullptr;
 
   if (pool->getMultiuserAuthentication()) {
-    ProxyRegion* pr = dynamic_cast<ProxyRegion*>(region.get());
-    if (pr != nullptr) {
+    if (auto pr = std::dynamic_pointer_cast<ProxyRegion>(realRegion)) {
       LOGDEBUG("FunctionService::onRegion(RegionPtr region) proxy cache");
       // it is in multiuser mode
       proxyCache = pr->m_proxyCache;
-      PoolPtr userAttachedPool = proxyCache->m_userAttributes->getPool();
-      PoolPtr pool = region->getCache()->getPoolManager().find(
+      auto userAttachedPool = proxyCache->m_userAttributes->getPool();
+      auto pool = realRegion->getCache()->getPoolManager().find(
           userAttachedPool->getName());
       if (!(pool != nullptr && pool.get() == userAttachedPool.get() &&
             !pool->isDestroyed())) {
         throw IllegalStateException(
             "Pool has been closed with attached Logical Cache.");
       }
-      RegionPtr tmpRegion;
-      tmpRegion = nullptr;
       // getting real region to execute function on region
-      if (!region->getCache()->isClosed()) {
-        region->getCache()->m_cacheImpl->getRegion(region->getName(),
-                                                   tmpRegion);
+      if (!realRegion->getCache()->isClosed()) {
+        realRegion->getCache()->m_cacheImpl->getRegion(realRegion->getName(),
+                                                      realRegion);
       } else {
         throw IllegalStateException("Cache has been closed");
       }
 
-      if (tmpRegion == nullptr) {
+      if (realRegion == nullptr) {
         throw IllegalStateException("Real region has been closed.");
       }
-      region = tmpRegion;
     } else {
       throw IllegalArgumentException(
           "onRegion() argument region should have get from RegionService.");
     }
   }
 
-  return std::make_shared<ExecutionImpl>(region, proxyCache, pool);
+  return std::make_shared<ExecutionImpl>(realRegion, proxyCache, pool);
 }
 
 ExecutionPtr FunctionService::onServerWithPool(const PoolPtr& pool) {
diff --git a/cppcache/src/GetAllServersRequest.cpp b/cppcache/src/GetAllServersRequest.cpp
index b53edef..5d4b2bf 100644
--- a/cppcache/src/GetAllServersRequest.cpp
+++ b/cppcache/src/GetAllServersRequest.cpp
@@ -24,5 +24,5 @@ void GetAllServersRequest::toData(DataOutput& output) const {
 }
 
 void GetAllServersRequest::fromData(DataInput& input) {
-  input.readObject(m_serverGroup);
+  m_serverGroup = input.readObject<CacheableString>();
 }
diff --git a/cppcache/src/GetAllServersResponse.cpp b/cppcache/src/GetAllServersResponse.cpp
index 4ee8ccd..cdaa9ed 100644
--- a/cppcache/src/GetAllServersResponse.cpp
+++ b/cppcache/src/GetAllServersResponse.cpp
@@ -26,9 +26,7 @@ void GetAllServersResponse::toData(DataOutput& output) const {
   }
 }
 void GetAllServersResponse::fromData(DataInput& input) {
-  int length = 0;
-
-  input.readInt(&length);
+  int length = input.readInt32();
   LOGFINER("GetAllServersResponse::fromData length = %d ", length);
   for (int i = 0; i < length; i++) {
     ServerLocation sLoc;
diff --git a/cppcache/src/LocalRegion.cpp b/cppcache/src/LocalRegion.cpp
index fdd1be3..df17a6d 100644
--- a/cppcache/src/LocalRegion.cpp
+++ b/cppcache/src/LocalRegion.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 #include <vector>
+#include <tuple>
 
 #include "LocalRegion.hpp"
 #include <geode/Log.hpp>
@@ -274,12 +275,11 @@ RegionPtr LocalRegion::createSubregion(
   return region_ptr;
 }
 
-void LocalRegion::subregions(const bool recursive, VectorOfRegion& sr) {
+VectorOfRegion LocalRegion::subregions(const bool recursive) {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::subregions);
-  sr.clear();
-  if (m_subRegions.current_size() == 0) return;
+  if (m_subRegions.current_size() == 0) return VectorOfRegion();
 
-  subregions_internal(recursive, sr);
+  return subregions_internal(recursive);
 }
 
 RegionEntryPtr LocalRegion::getEntry(const CacheableKeyPtr& key) {
@@ -494,63 +494,70 @@ bool LocalRegion::localRemoveEx(const CacheableKeyPtr& key,
   return result;
 }
 
-void LocalRegion::keys(VectorOfCacheableKey& v) {
+VectorOfCacheableKey LocalRegion::keys() {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::keys);
-  keys_internal(v);
+  return keys_internal();
 }
 
-void LocalRegion::serverKeys(VectorOfCacheableKey& v) {
+VectorOfCacheableKey LocalRegion::serverKeys() {
   throw UnsupportedOperationException(
       "serverKeys is not supported for local regions.");
 }
 
-void LocalRegion::values(VectorOfCacheable& vc) {
+VectorOfCacheable LocalRegion::values() {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::values);
-  if (!m_regionAttributes->getCachingEnabled()) {
-    return;
+
+  VectorOfCacheable values;
+
+  if (m_regionAttributes->getCachingEnabled()) {
+    // invalidToken should not be added by the MapSegments.
+    m_entries->getValues(values);
   }
-  uint32_t size = m_entries->size();
-  vc.clear();
-  if (size == 0) return;
-  m_entries->values(vc);
-  // invalidToken should not be added by the MapSegments.
+
+  return values;
 }
 
-void LocalRegion::entries(VectorOfRegionEntry& me, bool recursive) {
+VectorOfRegionEntry LocalRegion::entries(bool recursive) {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::entries);
-  me.clear();
-  if (!m_regionAttributes->getCachingEnabled()) {
-    return;
+
+  VectorOfRegionEntry entries;
+
+  if (m_regionAttributes->getCachingEnabled()) {
+    entries_internal(entries, recursive);
   }
-  entries_internal(me, recursive);
+
+  return entries;
 }
 
-void LocalRegion::getAll(const VectorOfCacheableKey& keys,
-                         HashMapOfCacheablePtr values,
-                         HashMapOfExceptionPtr exceptions, bool addToLocalCache,
-                         const SerializablePtr& aCallbackArgument) {
-  if (keys.size() == 0) {
+HashMapOfCacheable LocalRegion::getAll(
+    const VectorOfCacheableKey& keys,
+    const SerializablePtr& aCallbackArgument) {
+  return getAll_internal(keys, aCallbackArgument, true);
+}
+
+HashMapOfCacheable LocalRegion::getAll_internal(
+    const VectorOfCacheableKey& keys, const SerializablePtr& aCallbackArgument,
+    bool addToLocalCache) {
+
+  if (keys.empty()) {
     throw IllegalArgumentException("Region::getAll: zero keys provided");
   }
-  // check for the combination which will result in no action
-  if (values == nullptr &&
-      !(addToLocalCache && m_regionAttributes->getCachingEnabled())) {
-    throw IllegalArgumentException(
-        "Region::getAll: either output \"values\""
-        " parameter should be non-null, or \"addToLocalCache\" should be "
-        "true "
-        "and caching should be enabled for the region [%s]",
-        getFullPath());
-  }
 
   int64_t sampleStartNanos = startStatOpTime();
+
+  auto values = std::make_shared<HashMapOfCacheable>();
+  auto exceptions = std::make_shared<HashMapOfException>();
   GfErrType err = getAllNoThrow(keys, values, exceptions, addToLocalCache,
                                 aCallbackArgument);
+
   updateStatOpTime(m_regionStats->getStat(), m_regionStats->getGetAllTimeId(),
                    sampleStartNanos);
-  // handleReplay(err, nullptr);
+
   GfErrTypeToException("Region::getAll", err);
+
+  return *values;
 }
+
 uint32_t LocalRegion::size_remote() {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::size);
   if (m_regionAttributes->getCachingEnabled()) {
@@ -615,11 +622,11 @@ bool LocalRegion::containsKeyOnServer(const CacheableKeyPtr& keyPtr) const {
   throw UnsupportedOperationException(
       "LocalRegion::containsKeyOnServer: is not supported.");
 }
-void LocalRegion::getInterestList(VectorOfCacheableKey& vlist) const {
+VectorOfCacheableKey LocalRegion::getInterestList() const {
   throw UnsupportedOperationException(
       "LocalRegion::getInterestList: is not supported.");
 }
-void LocalRegion::getInterestListRegex(VectorOfCacheableString& vregex) const {
+VectorOfCacheableString LocalRegion::getInterestListRegex() const {
   throw UnsupportedOperationException(
       "LocalRegion::getInterestListRegex: is not supported.");
 }
@@ -759,17 +766,17 @@ bool LocalRegion::containsKey_internal(const CacheableKeyPtr& keyPtr) const {
   return m_entries->containsKey(keyPtr);
 }
 
-void LocalRegion::subregions_internal(const bool recursive,
-                                      VectorOfRegion& sr) {
+VectorOfRegion LocalRegion::subregions_internal(const bool recursive) {
   MapOfRegionGuard guard(m_subRegions.mutex());
 
-  if (m_subRegions.current_size() == 0) return;
+  if (m_subRegions.current_size() == 0) return VectorOfRegion();
 
+  VectorOfRegion regions;
   VectorOfRegion subRegions;
 
   for (MapOfRegionWithLock::iterator p = m_subRegions.begin();
        p != m_subRegions.end(); ++p) {
-    sr.push_back((*p).int_id_);
+    regions.push_back((*p).int_id_);
     // seperate list so children can be descended.
     if (recursive) {
       subRegions.push_back((*p).int_id_);
@@ -779,10 +786,12 @@ void LocalRegion::subregions_internal(const bool recursive,
   if (recursive == true) {
     // decend...
     for (int32_t i = 0; i < subRegions.size(); i++) {
-      dynamic_cast<LocalRegion*>(subRegions.at(i).get())
-          ->subregions_internal(true, sr);
+      auto temp = dynamic_cast<LocalRegion*>(subRegions.at(i).get())
+          ->subregions_internal(true);
+      regions.insert(regions.end(), temp.begin(), temp.end());
     }
   }
+  return regions;
 }
 
 GfErrType LocalRegion::getNoThrow(const CacheableKeyPtr& keyPtr,
@@ -966,7 +975,7 @@ GfErrType LocalRegion::getNoThrow(const CacheableKeyPtr& keyPtr,
 GfErrType LocalRegion::getAllNoThrow(const VectorOfCacheableKey& keys,
                                      const HashMapOfCacheablePtr& values,
                                      const HashMapOfExceptionPtr& exceptions,
-                                     bool addToLocalCache,
+                                     const bool addToLocalCache,
                                      const SerializablePtr& aCallbackArgument) {
   CHECK_DESTROY_PENDING_NOTHROW(TryReadGuard);
   GfErrType err = GF_NOERR;
@@ -977,20 +986,6 @@ GfErrType LocalRegion::getAllNoThrow(const VectorOfCacheableKey& keys,
     if (isLocalOp()) {
       return GF_NOTSUP;
     }
-    //		if(!txState->isReplay())
-    //		{
-    //			auto args =
-    // std::make_shared<VectorOfCacheable>();
-    //			args->push_back(VectorOfCacheableKeyPtr(new
-    // VectorOfCacheableKey(keys)));
-    //			args->push_back(values);
-    //			args->push_back(exceptions);
-    //			args->push_back(CacheableBoolean::create(addToLocalCache));
-    //			txState->recordTXOperation(GF_GET_ALL,
-    // getFullPath(),
-    // nullptr,
-    // args);
-    //		}
     err = getAllNoThrow_remote(&keys, values, exceptions, nullptr, false,
                                aCallbackArgument);
     if (err == GF_NOERR) {
@@ -1089,14 +1084,6 @@ class PutActions {
                                 const CacheablePtr& value,
                                 const SerializablePtr& aCallbackArgument,
                                 VersionTagPtr& versionTag) {
-    //    	if(m_txState != nullptr && !m_txState->isReplay())
-    //    	{
-    //    		auto args = std::make_shared<VectorOfCacheable>();
-    //    		args->push_back(value);
-    //    		args->push_back(aCallbackArgument);
-    //    		m_txState->recordTXOperation(GF_PUT,
-    //    m_region.getFullPath(), key, args);
-    //    	}
     // propagate the put to remote server, if any
     return m_region.putNoThrow_remote(key, value, aCallbackArgument,
                                       versionTag);
@@ -1174,16 +1161,7 @@ class CreateActions {
                                 const CacheablePtr& value,
                                 const SerializablePtr& aCallbackArgument,
                                 VersionTagPtr& versionTag) {
-    // propagate the create to remote server, if any
-    //  	  if(m_txState != nullptr && !m_txState->isReplay())
-    //  	  {
-    //  		  auto args = std::make_shared<VectorOfCacheable>();
-    //  		  args->push_back(value);
-    //  		  args->push_back(aCallbackArgument);
-    //  		  m_txState->recordTXOperation(GF_CREATE,
-    //  m_region.getFullPath(), key, args);
-    //  	  }
-    return m_region.createNoThrow_remote(key, value, aCallbackArgument,
+     return m_region.createNoThrow_remote(key, value, aCallbackArgument,
                                          versionTag);
   }
 
@@ -1246,15 +1224,6 @@ class DestroyActions {
                                 const CacheablePtr& value,
                                 const SerializablePtr& aCallbackArgument,
                                 VersionTagPtr& versionTag) {
-    // propagate the destroy to remote server, if any
-    //    	if(m_txState != nullptr && !m_txState->isReplay())
-    //    	{
-    //    		auto args = std::make_shared<VectorOfCacheable>();
-    //    		args->push_back(aCallbackArgument);
-    //    		m_txState->recordTXOperation(GF_DESTROY,
-    //    m_region.getFullPath(), key, args);
-    //    	}
-
     return m_region.destroyNoThrow_remote(key, aCallbackArgument, versionTag);
   }
 
@@ -1394,16 +1363,6 @@ class RemoveActions {
           return err;
         }
       } else if ((valuePtr == nullptr || CacheableToken::isInvalid(valuePtr))) {
-        //        	if(m_txState != nullptr && !m_txState->isReplay())
-        //        	{
-        //        		VectorOfCacheablePtr args(new
-        //        VectorOfCacheable());
-        //        		args->push_back(value);
-        //        		args->push_back(aCallbackArgument);
-        //        		m_txState->recordTXOperation(GF_REMOVE,
-        //        m_region.getFullPath(), key, args);
-        //        	}
-
         m_ServerResponse = m_region.removeNoThrow_remote(
             key, value, aCallbackArgument, versionTag);
 
@@ -1413,14 +1372,6 @@ class RemoveActions {
         return err;
       }
     }
-    //  	if(m_txState != nullptr && !m_txState->isReplay())
-    //  	{
-    //  		auto args = std::make_shared<VectorOfCacheable>();
-    //  		args->push_back(value);
-    //  		args->push_back(aCallbackArgument);
-    //  		m_txState->recordTXOperation(GF_REMOVE,
-    //  m_region.getFullPath(), key, args);
-    //  	}
     if (allowNULLValue) {
       m_ServerResponse =
           m_region.removeNoThrowEX_remote(key, aCallbackArgument, versionTag);
@@ -1592,13 +1543,6 @@ class InvalidateActions {
                                 const CacheablePtr& value,
                                 const SerializablePtr& aCallbackArgument,
                                 VersionTagPtr& versionTag) {
-    //    	if(m_txState != nullptr && !m_txState->isReplay())
-    //    	{
-    //    		auto args = std::make_shared<VectorOfCacheable>();
-    //    		args->push_back(aCallbackArgument);
-    //    		m_txState->recordTXOperation(GF_INVALIDATE,
-    //    m_region.getFullPath(), key, args);
-    //    	}
     // propagate the invalidate to remote server, if any
     return m_region.invalidateNoThrow_remote(key, aCallbackArgument,
                                              versionTag);
@@ -2283,8 +2227,7 @@ GfErrType LocalRegion::invalidateRegionNoThrow(
   GfErrType err = GF_NOERR;
 
   if (m_regionAttributes->getCachingEnabled()) {
-    VectorOfCacheableKey v;
-    keys_internal(v);
+    VectorOfCacheableKey v = keys_internal();
     const auto size = v.size();
     MapEntryImplPtr me;
     for (size_t i = 0; i < size; i++) {
@@ -2518,21 +2461,19 @@ GfErrType LocalRegion::putLocal(const char* name, bool isCreate,
   return err;
 }
 
-void LocalRegion::keys_internal(VectorOfCacheableKey& v) {
-  if (!m_regionAttributes->getCachingEnabled()) {
-    return;
-  }
-  uint32_t size = m_entries->size();
-  v.clear();
-  if (size == 0) {
-    return;
+VectorOfCacheableKey LocalRegion::keys_internal() {
+  VectorOfCacheableKey keys;
+
+  if (m_regionAttributes->getCachingEnabled()) {
+    m_entries->getKeys(keys);
   }
-  m_entries->keys(v);
+
+  return keys;
 }
 
 void LocalRegion::entries_internal(VectorOfRegionEntry& me,
                                    const bool recursive) {
-  m_entries->entries(me);
+  m_entries->getEntries(me);
 
   if (recursive == true) {
     MapOfRegionGuard guard(m_subRegions.mutex());
diff --git a/cppcache/src/LocalRegion.hpp b/cppcache/src/LocalRegion.hpp
index b37d977..a120955 100644
--- a/cppcache/src/LocalRegion.hpp
+++ b/cppcache/src/LocalRegion.hpp
@@ -157,7 +157,7 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   RegionPtr getSubregion(const char* path);
   RegionPtr createSubregion(const char* subregionName,
                             const RegionAttributesPtr& aRegionAttributes);
-  void subregions(const bool recursive, VectorOfRegion& sr);
+  VectorOfRegion subregions(const bool recursive);
   RegionEntryPtr getEntry(const CacheableKeyPtr& key);
   void getEntry(const CacheableKeyPtr& key, CacheablePtr& valuePtr);
   CacheablePtr get(const CacheableKeyPtr& key,
@@ -186,13 +186,19 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
                    const SerializablePtr& aCallbackArgument = nullptr);
   bool localRemoveEx(const CacheableKeyPtr& key,
                      const SerializablePtr& aCallbackArgument = nullptr);
-  void keys(VectorOfCacheableKey& v);
-  void serverKeys(VectorOfCacheableKey& v);
-  void values(VectorOfCacheable& vc);
-  void entries(VectorOfRegionEntry& me, bool recursive);
-  void getAll(const VectorOfCacheableKey& keys, HashMapOfCacheablePtr values,
-              HashMapOfExceptionPtr exceptions, bool addToLocalCache,
-              const SerializablePtr& aCallbackArgument = nullptr);
+  VectorOfCacheableKey keys();
+  VectorOfCacheableKey serverKeys();
+  VectorOfCacheable values();
+  VectorOfRegionEntry entries(bool recursive);
+
+  HashMapOfCacheable getAll(
+      const VectorOfCacheableKey& keys,
+      const SerializablePtr& aCallbackArgument = nullptr);
+
+  HashMapOfCacheable getAll_internal(
+      const VectorOfCacheableKey& keys,
+      const SerializablePtr& aCallbackArgument, bool addToLocalCache);
+
   void putAll(const HashMapOfCacheable& map,
               uint32_t timeout = DEFAULT_RESPONSE_TIMEOUT,
               const SerializablePtr& aCallbackArgument = nullptr);
@@ -205,8 +211,8 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   bool containsValueForKey(const CacheableKeyPtr& keyPtr) const;
   bool containsKey(const CacheableKeyPtr& keyPtr) const;
   virtual bool containsKeyOnServer(const CacheableKeyPtr& keyPtr) const;
-  virtual void getInterestList(VectorOfCacheableKey& vlist) const;
-  virtual void getInterestListRegex(VectorOfCacheableString& vregex) const;
+  virtual VectorOfCacheableKey getInterestList() const;
+  virtual VectorOfCacheableString getInterestListRegex() const;
 
   /** @brief Public Methods from RegionInternal
    *  There are all virtual methods
@@ -218,7 +224,7 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
                                const SerializablePtr& aCallbackArgument);
   virtual GfErrType getAllNoThrow(
       const VectorOfCacheableKey& keys, const HashMapOfCacheablePtr& values,
-      const HashMapOfExceptionPtr& exceptions, bool addToLocalCache,
+      const HashMapOfExceptionPtr& exceptions, const bool addToLocalCache,
       const SerializablePtr& aCallbackArgument = nullptr);
   virtual GfErrType putNoThrow(const CacheableKeyPtr& key,
                                const CacheablePtr& value,
@@ -449,7 +455,7 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   bool m_enableTimeStatistics;
 
   mutable ACE_RW_Thread_Mutex m_rwLock;
-  void keys_internal(VectorOfCacheableKey& v);
+  VectorOfCacheableKey keys_internal();
   bool containsKey_internal(const CacheableKeyPtr& keyPtr) const;
   int removeRegion(const std::string& name);
 
@@ -472,7 +478,7 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   // functions related to expirations.
   void updateAccessAndModifiedTimeForEntry(MapEntryImplPtr& ptr, bool modified);
   void registerEntryExpiryTask(MapEntryImplPtr& entry);
-  void subregions_internal(const bool recursive, VectorOfRegion& sr);
+  VectorOfRegion subregions_internal(const bool recursive);
   void entries_internal(VectorOfRegionEntry& me, const bool recursive);
 
   PersistenceManagerPtr m_persistenceManager;
diff --git a/cppcache/src/LocatorListResponse.cpp b/cppcache/src/LocatorListResponse.cpp
index adeb97c..a04fd2e 100644
--- a/cppcache/src/LocatorListResponse.cpp
+++ b/cppcache/src/LocatorListResponse.cpp
@@ -23,7 +23,7 @@ using namespace apache::geode::client;
 
 void LocatorListResponse::fromData(DataInput& input) {
   readList(input);
-  input.readBoolean(&m_isBalanced);
+  m_isBalanced = input.readBoolean();
 }
 
 int8_t LocatorListResponse::typeId() const {
@@ -33,8 +33,7 @@ int8_t LocatorListResponse::typeId() const {
 uint32_t LocatorListResponse::objectSize() const { return 0; }
 
 void LocatorListResponse::readList(DataInput& input) {
-  uint32_t size = 0;
-  input.readInt(&size);
+  uint32_t size = input.readInt32();
   for (uint32_t i = 0; i < size; i++) {
     ServerLocation temp;
     temp.fromData(input);
diff --git a/cppcache/src/MapSegment.cpp b/cppcache/src/MapSegment.cpp
index fe1ae59..04617c4 100644
--- a/cppcache/src/MapSegment.cpp
+++ b/cppcache/src/MapSegment.cpp
@@ -445,7 +445,7 @@ bool MapSegment::containsKey(const CacheableKeyPtr& key) {
 /**
  * @brief return the all the keys in the provided list.
  */
-void MapSegment::keys(VectorOfCacheableKey& result) {
+void MapSegment::getKeys(VectorOfCacheableKey& result) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
   for (CacheableKeyHashMap::iterator iter = m_map->begin();
        iter != m_map->end(); iter++) {
@@ -460,7 +460,7 @@ void MapSegment::keys(VectorOfCacheableKey& result) {
 /**
  * @brief return all the entries in the provided list.
  */
-void MapSegment::entries(VectorOfRegionEntry& result) {
+void MapSegment::getEntries(VectorOfRegionEntry& result) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
   for (CacheableKeyHashMap::iterator iter = m_map->begin();
        iter != m_map->end(); iter++) {
@@ -482,7 +482,7 @@ void MapSegment::entries(VectorOfRegionEntry& result) {
 /**
  * @brief return all values in the provided list.
  */
-void MapSegment::values(VectorOfCacheable& result) {
+void MapSegment::getValues(VectorOfCacheable& result) {
   std::lock_guard<spinlock_mutex> lk(m_spinlock);
   for (CacheableKeyHashMap::iterator iter = m_map->begin();
        iter != m_map->end(); iter++) {
diff --git a/cppcache/src/MapSegment.hpp b/cppcache/src/MapSegment.hpp
index 6483c61..69e7848 100644
--- a/cppcache/src/MapSegment.hpp
+++ b/cppcache/src/MapSegment.hpp
@@ -267,17 +267,17 @@ class CPPCACHE_EXPORT MapSegment {
   /**
    * @brief return the all the keys in the provided list.
    */
-  void keys(VectorOfCacheableKey& result);
+  void getKeys(VectorOfCacheableKey& result);
 
   /**
    * @brief return all the entries in the provided list.
    */
-  void entries(VectorOfRegionEntry& result);
+  void getEntries(VectorOfRegionEntry& result);
 
   /**
    * @brief return all values in the provided list.
    */
-  void values(VectorOfCacheable& result);
+  void getValues(VectorOfCacheable& result);
 
   inline uint32_t rehashCount() { return m_rehashCount; }
 
diff --git a/cppcache/src/NoResult.hpp b/cppcache/src/NoResult.hpp
index 00bd1fc..b15f36c 100644
--- a/cppcache/src/NoResult.hpp
+++ b/cppcache/src/NoResult.hpp
@@ -45,7 +45,7 @@ class CPPCACHE_EXPORT NoResult : public ResultCollector {
  public:
   NoResult() {}
   ~NoResult() {}
-  inline void addResult(CacheablePtr& resultOfSingleExecution) {
+  inline void addResult(const CacheablePtr& resultOfSingleExecution) {
     throw UnsupportedOperationException("can not add to NoResult");
   }
 
diff --git a/cppcache/src/PdxFieldType.cpp b/cppcache/src/PdxFieldType.cpp
index e8a074a..ae4514d 100644
--- a/cppcache/src/PdxFieldType.cpp
+++ b/cppcache/src/PdxFieldType.cpp
@@ -79,19 +79,18 @@ void PdxFieldType::toData(DataOutput& output) const {
 }
 
 void PdxFieldType::fromData(DataInput& input) {
-  int8_t typeId;
-  input.read(&typeId);
+  input.read(); // ignore typeid
   char* fname = nullptr;
   input.readUTF(&fname);
   m_fieldName = fname;
   input.freeUTFMemory(fname);  // freeing fname
 
-  input.readInt(&m_sequenceId);
-  input.readInt(&m_varLenFieldIdx);
-  input.read(&m_typeId);
-  input.readInt(&m_relativeOffset);
-  input.readInt(&m_vlOffsetIndex);
-  input.readBoolean(&m_isIdentityField);
+  m_sequenceId = input.readInt32();
+  m_varLenFieldIdx = input.readInt32();
+  m_typeId = input.read();
+  m_relativeOffset = input.readInt32();
+  m_vlOffsetIndex = input.readInt32();
+  m_isIdentityField = input.readBoolean();
   m_fixedSize = getFixedTypeSize();
   if (m_fixedSize != -1) {
     m_isVariableLengthType = false;
diff --git a/cppcache/src/PdxHelper.cpp b/cppcache/src/PdxHelper.cpp
index 7da7086..e3e1634 100644
--- a/cppcache/src/PdxHelper.cpp
+++ b/cppcache/src/PdxHelper.cpp
@@ -295,12 +295,9 @@ PdxSerializablePtr PdxHelper::deserializePdx(DataInput& dataInput,
   auto& cachePerfStats = cacheImpl->getCachePerfStats();
   if (pdxTypeRegistry->getPdxReadSerialized() == false || forceDeserialize) {
     // Read Length
-    int32_t len;
-    dataInput.readInt(&len);
+    int32_t len = dataInput.readInt32();
 
-    int32_t typeId;
-    // read typeId
-    dataInput.readInt(&typeId);
+    int32_t typeId = dataInput.readInt32();
 
     cachePerfStats.incPdxDeSerialization(len + 9);  // pdxLen + 1 + 2*4
 
@@ -309,12 +306,9 @@ PdxSerializablePtr PdxHelper::deserializePdx(DataInput& dataInput,
 
   } else {
     // Read Length
-    int32_t len;
-    dataInput.readInt(&len);
+    int32_t len = dataInput.readInt32();
 
-    int typeId;
-    // read typeId
-    dataInput.readInt(&typeId);
+    int typeId = dataInput.readInt32();
 
     auto pType = pdxTypeRegistry->getPdxType(typeId);
 
diff --git a/cppcache/src/PdxInstanceFactoryImpl.cpp b/cppcache/src/PdxInstanceFactoryImpl.cpp
index b75c9fe..a3bffc1 100644
--- a/cppcache/src/PdxInstanceFactoryImpl.cpp
+++ b/cppcache/src/PdxInstanceFactoryImpl.cpp
@@ -54,26 +54,23 @@ std::unique_ptr<PdxInstance> PdxInstanceFactoryImpl::create() {
   return pi;
 }
 
-PdxInstanceFactoryPtr PdxInstanceFactoryImpl::writeWideChar(
-    const char* fieldName, wchar_t value) {
+PdxInstanceFactoryPtr PdxInstanceFactoryImpl::writeChar(
+    const char* fieldName, char16_t value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                      PdxTypes::CHAR_SIZE);
-  CacheablePtr cacheableObject = CacheableWideChar::create(value);
-  m_FieldVsValues.insert(
-      std::pair<const char*, CacheablePtr>(fieldName, cacheableObject));
+  CacheablePtr cacheableObject = CacheableCharacter::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 
 PdxInstanceFactoryPtr PdxInstanceFactoryImpl::writeChar(const char* fieldName,
                                                         char value) {
   isFieldAdded(fieldName);
-  wchar_t tempWideChar = static_cast<wchar_t>(value);
   m_pdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                      PdxTypes::CHAR_SIZE);
-  CacheablePtr cacheableObject = CacheableWideChar::create(tempWideChar);
-  m_FieldVsValues.insert(
-      std::pair<const char*, CacheablePtr>(fieldName, cacheableObject));
+  CacheablePtr cacheableObject = CacheableCharacter::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 
diff --git a/cppcache/src/PdxInstanceFactoryImpl.hpp b/cppcache/src/PdxInstanceFactoryImpl.hpp
index 03eccd4..cecf043 100644
--- a/cppcache/src/PdxInstanceFactoryImpl.hpp
+++ b/cppcache/src/PdxInstanceFactoryImpl.hpp
@@ -72,8 +72,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual PdxInstanceFactoryPtr writeWideChar(const char* fieldName,
-                                              wchar_t value);
+  virtual PdxInstanceFactoryPtr writeChar(const char* fieldName,
+                                              char16_t value);
 
   /**
    * Writes the named field with the given value to the serialized form.
diff --git a/cppcache/src/PdxInstanceImpl.cpp b/cppcache/src/PdxInstanceImpl.cpp
index c69bdfe..8f32b2a 100644
--- a/cppcache/src/PdxInstanceImpl.cpp
+++ b/cppcache/src/PdxInstanceImpl.cpp
@@ -135,9 +135,8 @@ void PdxInstanceImpl::writeField(PdxWriterPtr writer, const char* fieldName,
       break;
     }
     case PdxFieldTypes::CHAR: {
-      CacheableWideChar* val = dynamic_cast<CacheableWideChar*>(value.get());
-      if (val != nullptr) {
-        writer->writeChar(fieldName, static_cast<char>(val->value()));
+      if (auto val = std::dynamic_pointer_cast<CacheableCharacter>(value)) {
+        writer->writeChar(fieldName, val->value());
       }
       break;
     }
@@ -284,7 +283,7 @@ void PdxInstanceImpl::writeField(PdxWriterPtr writer, const char* fieldName,
       break;
     }
     case PdxFieldTypes::OBJECT_ARRAY: {
-      CacheableObjectArrayPtr objArray =
+      auto objArray =
           std::dynamic_pointer_cast<CacheableObjectArray>(value);
       if (objArray != nullptr) {
         writer->writeObjectArray(fieldName, objArray);
@@ -802,64 +801,44 @@ bool PdxInstanceImpl::hasField(const char* fieldname) {
   return (pft != nullptr);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, bool& value) const {
-  auto dataInput = getDataInputForField(fieldname);
-  dataInput->readBoolean(&value);
-}
-
-void PdxInstanceImpl::getField(const char* fieldname,
-                               signed char& value) const {
-  auto dataInput = getDataInputForField(fieldname);
-  int8_t tmp = 0;
-  dataInput->read(&tmp);
-  value = (signed char)tmp;
-}
-
-void PdxInstanceImpl::getField(const char* fieldname,
-                               unsigned char& value) const {
+bool PdxInstanceImpl::getBooleanField(const char *fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  int8_t tmp = 0;
-  dataInput->read(&tmp);
-  value = static_cast<unsigned char>(tmp);
+  return dataInput->readBoolean();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, int16_t& value) const {
+int8_t PdxInstanceImpl::getByteField(const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  dataInput->readInt(&value);
+  return dataInput->read();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, int32_t& value) const {
+int16_t PdxInstanceImpl::getShortField(const char *fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  dataInput->readInt(&value);
+  return dataInput->readInt16();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, int64_t& value) const {
+int32_t PdxInstanceImpl::getIntField(const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  dataInput->readInt(&value);
+  return dataInput->readInt32();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, float& value) const {
+int64_t PdxInstanceImpl::getLongField(const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  dataInput->readFloat(&value);
+  return dataInput->readInt64();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, double& value) const {
+float PdxInstanceImpl::getFloatField(const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  dataInput->readDouble(&value);
+  return dataInput->readFloat();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, wchar_t& value) const {
+double PdxInstanceImpl::getDoubleField(const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  uint16_t temp = 0;
-  dataInput->readInt(&temp);
-  value = static_cast<wchar_t>(temp);
+  return dataInput->readDouble();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, char& value) const {
+char16_t PdxInstanceImpl::getCharField(const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  uint16_t temp = 0;
-  dataInput->readInt(&temp);
-  value = static_cast<char>(temp);
+  return dataInput->readInt16();
 }
 
 void PdxInstanceImpl::getField(const char* fieldname, bool** value,
@@ -952,24 +931,27 @@ void PdxInstanceImpl::getField(const char* fieldname, char*** value,
   dataInput->readStringArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname,
-                               CacheableDatePtr& value) const {
+CacheableDatePtr PdxInstanceImpl::getCacheableDateField(
+                                                const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  value = CacheableDate::create();
+  auto value = CacheableDate::create();
   value->fromData(*dataInput);
+  return value;
 }
 
-void PdxInstanceImpl::getField(const char* fieldname,
-                               CacheablePtr& value) const {
+CacheablePtr PdxInstanceImpl::getCacheableField(const char *fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
+  CacheablePtr value;
   dataInput->readObject(value);
+  return value;
 }
 
-void PdxInstanceImpl::getField(const char* fieldname,
-                               CacheableObjectArrayPtr& value) const {
+CacheableObjectArrayPtr PdxInstanceImpl::getCacheableObjectArrayField(
+                                                const char* fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
-  value = CacheableObjectArray::create();
+  auto value = CacheableObjectArray::create();
   value->fromData(*dataInput);
+  return value;
 }
 
 void PdxInstanceImpl::getField(const char* fieldname, int8_t*** value,
@@ -1012,57 +994,49 @@ CacheableStringPtr PdxInstanceImpl::toString() const {
 
     switch (identityFields.at(i)->getTypeId()) {
       case PdxFieldTypes::BOOLEAN: {
-        bool value = false;
-        getField(identityFields.at(i)->getFieldName(), value);
+        bool value = getBooleanField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%s", value ? "true" : "false");
         toString += buf;
         break;
       }
       case PdxFieldTypes::BYTE: {
-        signed char value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        signed char value = getByteField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%d", value);
         toString += buf;
         break;
       }
       case PdxFieldTypes::SHORT: {
-        int16_t value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        int16_t value = getShortField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%d", value);
         toString += buf;
         break;
       }
       case PdxFieldTypes::INT: {
-        int32_t value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        int32_t value = getIntField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%d", value);
         toString += buf;
         break;
       }
       case PdxFieldTypes::LONG: {
-        int64_t value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        int64_t value = getLongField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%lld", value);
         toString += buf;
         break;
       }
       case PdxFieldTypes::FLOAT: {
-        float value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        float value = getFloatField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%f", value);
         toString += buf;
         break;
       }
       case PdxFieldTypes::DOUBLE: {
-        double value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        double value =  getDoubleField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%f", value);
         toString += buf;
         break;
       }
       case PdxFieldTypes::CHAR: {
-        wchar_t value = 0;
-        getField(identityFields.at(i)->getFieldName(), value);
+        auto value = getCharField(identityFields.at(i)->getFieldName());
         ACE_OS::snprintf(buf, 2048, "%c", value);
         toString += buf;
         break;
@@ -1176,8 +1150,8 @@ CacheableStringPtr PdxInstanceImpl::toString() const {
         break;
       }
       case PdxFieldTypes::DATE: {
-        CacheableDatePtr value = nullptr;
-        getField(identityFields.at(i)->getFieldName(), value);
+        CacheableDatePtr value = getCacheableDateField(
+                                        identityFields.at(i)->getFieldName());
         if (value != nullptr) {
           ACE_OS::snprintf(buf, 2048, "%s", value->toString()->asChar());
           toString += buf;
@@ -1214,8 +1188,8 @@ CacheableStringPtr PdxInstanceImpl::toString() const {
         break;
       }
       case PdxFieldTypes::OBJECT_ARRAY: {
-        CacheableObjectArrayPtr value;
-        getField(identityFields.at(i)->getFieldName(), value);
+        CacheableObjectArrayPtr value = getCacheableObjectArrayField(
+                                        identityFields.at(i)->getFieldName());
         if (value != nullptr) {
           ACE_OS::snprintf(buf, 2048, "%s\t", value->toString()->asChar());
           toString += buf;
@@ -1223,8 +1197,7 @@ CacheableStringPtr PdxInstanceImpl::toString() const {
         break;
       }
       default: {
-        CacheablePtr value;
-        getField(identityFields.at(i)->getFieldName(), value);
+        CacheablePtr value = getCacheableField(identityFields.at(i)->getFieldName());
         if (value != nullptr) {
           ACE_OS::snprintf(buf, 2048, "%s\t", value->toString()->asChar());
           toString += buf;
@@ -1453,14 +1426,11 @@ bool PdxInstanceImpl::compareRawBytes(PdxInstanceImpl& other, PdxTypePtr myPT,
     }
 
     for (int i = pos; i < nextpos; i++) {
-      int8_t myByte = 0;
-      int8_t otherByte = 0;
-      myDataInput.read(&myByte);
-      otherDataInput.read(&otherByte);
-      if (myByte != otherByte) {
+      if (myDataInput.read() != otherDataInput.read()) {
         return false;
       }
     }
+
     return true;
   } else {
     if (myF->equals(m_DefaultPdxFieldType)) {
@@ -1512,9 +1482,7 @@ void PdxInstanceImpl::writeUnmodifieldField(DataInput& dataInput, int startPos,
                                             PdxLocalWriterPtr localWriter) {
   dataInput.reset(startPos);
   for (; startPos < endPos; startPos++) {
-    uint8_t byte;
-    dataInput.read(&byte);
-    localWriter->writeByte(byte);
+    localWriter->writeByte(dataInput.read());
   }
 }
 
@@ -1670,10 +1638,8 @@ int PdxInstanceImpl::getRawHashCode(PdxTypePtr pt, PdxFieldTypePtr pField,
   dataInput.advanceCursor(nextpos - 1);
 
   int h = 1;
-  int8_t byte = 0;
   for (int i = nextpos - 1; i >= pos; i--) {
-    dataInput.read(&byte);
-    h = 31 * h + static_cast<int>(byte);
+    h = 31 * h + static_cast<int>(dataInput.read());
     dataInput.reset();
     dataInput.advanceCursor(i - 1);
   }
@@ -1729,9 +1695,7 @@ bool PdxInstanceImpl::compareDefaultBytes(DataInput& dataInput, int start,
   dataInput.advanceCursor(start);
   int j = 0;
   for (int i = start; i < end; i++) {
-    int8_t byte;
-    dataInput.read(&byte);
-    if (defaultBytes[j++] != byte) {
+    if (defaultBytes[j++] != dataInput.read()) {
       return false;
     }
   }
@@ -1992,56 +1956,19 @@ void PdxInstanceImpl::setField(const char* fieldName, double value) {
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, wchar_t value) {
-  PdxTypePtr pt = getPdxType();
-  PdxFieldTypePtr pft = pt->getPdxField(fieldName);
-
-  if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::CHAR) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29237: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-     * "sprintf" can cause a
-     * buffer overflow when done incorrectly. Because sprintf() assumes an
-     * arbitrarily long string,
-     * callers must be careful not to overflow the actual space of the
-     * destination.
-     * Use snprintf() instead, or correct precision specifiers.
-     * Fix : using ACE_OS::snprintf
-     */
-    ACE_OS::snprintf(
-        excpStr, 256,
-        "PdxInstance doesn't has field %s or type of field not matched %s ",
-        fieldName, (pft != nullptr ? pft->toString()->asChar() : ""));
-    throw IllegalStateException(excpStr);
-  }
-  CacheablePtr cacheableObject = CacheableWideChar::create(value);
-  m_updatedFields[fieldName] = cacheableObject;
-}
-
-void PdxInstanceImpl::setField(const char* fieldName, char value) {
+void PdxInstanceImpl::setField(const char* fieldName, char16_t value) {
   PdxTypePtr pt = getPdxType();
   PdxFieldTypePtr pft = pt->getPdxField(fieldName);
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::CHAR) {
     char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29230: Calling risky function (SECURE_CODING)[VERY RISKY]. Using
-     * "sprintf" can cause a
-     * buffer overflow when done incorrectly. Because sprintf() assumes an
-     * arbitrarily long string,
-     * callers must be careful not to overflow the actual space of the
-     * destination.
-     * Use snprintf() instead, or correct precision specifiers.
-     * Fix : using ACE_OS::snprintf
-     */
     ACE_OS::snprintf(
         excpStr, 256,
         "PdxInstance doesn't has field %s or type of field not matched %s ",
         fieldName, (pft != nullptr ? pft->toString()->asChar() : ""));
     throw IllegalStateException(excpStr);
   }
-  wchar_t tempWideChar = static_cast<wchar_t>(value);
-  CacheablePtr cacheableObject = CacheableWideChar::create(tempWideChar);
+  CacheablePtr cacheableObject = CacheableCharacter::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
diff --git a/cppcache/src/PdxInstanceImpl.hpp b/cppcache/src/PdxInstanceImpl.hpp
index 3afa047..19a366f 100644
--- a/cppcache/src/PdxInstanceImpl.hpp
+++ b/cppcache/src/PdxInstanceImpl.hpp
@@ -74,7 +74,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, bool& value) const;
+  virtual bool getBooleanField(const char *fieldname) const;
 
   /**
    * Reads the named field and set its value in signed char type out param.
@@ -89,22 +89,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, signed char& value) const;
-
-  /**
-   * Reads the named field and set its value in unsigned char type out param.
-   * unsigned char type is corresponding to java byte type.
-   * For C++ on Windows and Linux, unsigned char type is corresponding to int8_t
-   * type.
-   * However C++ users on Solaris should always use this api after casting
-   * int8_t to unsigned char.
-   * @param fieldname name of the field to read
-   * @param value value of the field to be set with unsigned char type.
-   * @throws IllegalStateException if PdxInstance doesn't has the named field.
-   *
-   * @see PdxInstance#hasField
-   */
-  virtual void getField(const char* fieldname, unsigned char& value) const;
+  virtual int8_t getByteField(const char* fieldname) const;
 
   /**
    * Reads the named field and set its value in int16_t type out param.
@@ -115,7 +100,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int16_t& value) const;
+  virtual int16_t getShortField(const char *fieldname) const;
 
   /**
    * Reads the named field and set its value in int32_t type out param.
@@ -124,7 +109,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @param value value of the field to be set with int32_t type.
    * @throws IllegalStateException if PdxInstance doesn't has the named field.
    */
-  virtual void getField(const char* fieldname, int32_t& value) const;
+  virtual int32_t getIntField(const char* fieldname) const;
 
   /**
    * Reads the named field and set its value in int64_t type out param.
@@ -135,7 +120,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int64_t& value) const;
+  virtual int64_t getLongField(const char* fieldname) const;
 
   /**
    * Reads the named field and set its value in float type out param.
@@ -146,7 +131,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, float& value) const;
+  virtual float getFloatField(const char* fieldname) const;
 
   /**
    * Reads the named field and set its value in double type out param.
@@ -157,18 +142,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, double& value) const;
-
-  /**
-   * Reads the named field and set its value in wchar_t type out param.
-   * wchar_t type is corresponding to java char type.
-   * @param fieldname name of the field to read
-   * @param value value of the field to be set with wchar_t type.
-   * @throws IllegalStateException if PdxInstance doesn't has the named field.
-   *
-   * @see PdxInstance#hasField
-   */
-  virtual void getField(const char* fieldName, wchar_t& value) const;
+  virtual double getDoubleField(const char* fieldname) const;
 
   /**
    * Reads the named field and set its value in char type out param.
@@ -179,7 +153,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, char& value) const;
+  virtual char16_t getCharField(const char* fieldName) const;
 
   /**
    * Reads the named field and set its value in bool array type out param.
@@ -379,7 +353,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, CacheableDatePtr& value) const;
+  virtual CacheableDatePtr getCacheableDateField(const char* fieldname) const;
 
   /**
    * Reads the named field and set its value in array of byte arrays type out
@@ -408,7 +382,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @see serializationRegistry->addPdxType
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, CacheablePtr& value) const;
+  virtual CacheablePtr getCacheableField(const char *fieldname) const;
 
   /**
    * Reads the named field and set its value in CacheableObjectArrayPtr type out
@@ -424,8 +398,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @see serializationRegistry->addPdxType
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname,
-                        CacheableObjectArrayPtr& value) const;
+  virtual CacheableObjectArrayPtr getCacheableObjectArrayField(
+                                                const char* fieldname) const;
 
   /**
    * Set the existing named field to the given value.
@@ -560,21 +534,6 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * The setField method has copy-on-write semantics.
    * So for the modifications to be stored in the cache the WritablePdxInstance
    * must be put into a region after setField has been called one or more times.
-   * wchar_t type is corresponding to java char type.
-   * @param fieldName
-   *          name of the field whose value will be set
-   * @param value
-   *          value that will be set to the field of type wchar_t
-   * @throws IllegalStateException if the named field does not exist
-   * or if the type of the value is not compatible with the field.
-   */
-  virtual void setField(const char* fieldName, wchar_t value);
-
-  /**
-   * Set the existing named field to the given value.
-   * The setField method has copy-on-write semantics.
-   * So for the modifications to be stored in the cache the WritablePdxInstance
-   * must be put into a region after setField has been called one or more times.
    * char type is corresponding to java char type.
    * @param fieldName
    *          name of the field whose value will be set
@@ -583,7 +542,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @throws IllegalStateException if the named field does not exist
    * or if the type of the value is not compatible with the field.
    */
-  virtual void setField(const char* fieldName, char value);
+  virtual void setField(const char* fieldName, char16_t value);
 
   /**
    * Set the existing named field to the given value.
diff --git a/cppcache/src/PdxLocalReader.cpp b/cppcache/src/PdxLocalReader.cpp
index e32cf66..bf2de51 100644
--- a/cppcache/src/PdxLocalReader.cpp
+++ b/cppcache/src/PdxLocalReader.cpp
@@ -100,65 +100,49 @@ void PdxLocalReader::checkEmptyFieldName(const char* fieldName) {
 
 char PdxLocalReader::readChar(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  uint16_t value = 0;
-  m_dataInput->readInt(&value);
+  uint16_t value = m_dataInput->readInt16();
   return (static_cast<char>(value));
 }
 
 wchar_t PdxLocalReader::readWideChar(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  uint16_t value = 0;
-  m_dataInput->readInt(&value);
+  uint16_t value = m_dataInput->readInt16();
   return static_cast<wchar_t>(value);
 }
 
 bool PdxLocalReader::readBoolean(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  bool value;
-  m_dataInput->readBoolean(&value);
-  return value;
+  return m_dataInput->readBoolean();
 }
 
 int8_t PdxLocalReader::readByte(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  int8_t value;
-  m_dataInput->read(&value);
-  return value;
+  return m_dataInput->read();
 }
 
 int16_t PdxLocalReader::readShort(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  int16_t value;
-  m_dataInput->readInt(&value);
-  return value;
+  return m_dataInput->readInt16();
 }
 
 int32_t PdxLocalReader::readInt(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  int32_t value;
-  m_dataInput->readInt(&value);
-  return value;
+  return m_dataInput->readInt32();
 }
 
 int64_t PdxLocalReader::readLong(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  int64_t value;
-  m_dataInput->readInt(&value);
-  return value;
+  return m_dataInput->readInt64();
 }
 
 float PdxLocalReader::readFloat(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  float value;
-  m_dataInput->readFloat(&value);
-  return value;
+  return m_dataInput->readFloat();
 }
 
 double PdxLocalReader::readDouble(const char* fieldName) {
   checkEmptyFieldName(fieldName);
-  double value;
-  m_dataInput->readDouble(&value);
-  return value;
+  return m_dataInput->readDouble();
 }
 
 char* PdxLocalReader::readString(const char* fieldName) {
@@ -334,11 +318,9 @@ PdxRemotePreservedDataPtr PdxLocalReader::getPreservedData(
 
         resettoPdxHead();
         m_dataInput->advanceCursor(pos);
-        uint8_t dataByte = 0;
 
         for (int i = 0; i < (nFieldPos - pos); i++) {
-          m_dataInput->read(&dataByte);
-          pdVector.push_back(dataByte);
+          pdVector.push_back(m_dataInput->read());
         }
         resettoPdxHead();
 
@@ -371,7 +353,7 @@ bool PdxLocalReader::isIdentityField(const char* fieldName) {
 
 void PdxLocalReader::readCollection(const char* fieldName,
                                     CacheableArrayListPtr& collection) {
-  m_dataInput->readObject(collection);
+  collection = m_dataInput->readObject<CacheableArrayList>();
 }
 
 PdxUnreadFieldsPtr PdxLocalReader::readUnreadFields() {
diff --git a/cppcache/src/PdxLocalWriter.cpp b/cppcache/src/PdxLocalWriter.cpp
index 7b88893..53d84cf 100644
--- a/cppcache/src/PdxLocalWriter.cpp
+++ b/cppcache/src/PdxLocalWriter.cpp
@@ -164,9 +164,9 @@ PdxWriterPtr PdxLocalWriter::writeChar(const char* fieldName, char value) {
   return shared_from_this();
 }
 
-PdxWriterPtr PdxLocalWriter::writeWideChar(const char* fieldName,
-                                           wchar_t value) {
-  m_dataOutput->writeChar(static_cast<uint16_t>(value));
+PdxWriterPtr PdxLocalWriter::writeChar(const char* fieldName,
+                                           char16_t value) {
+  m_dataOutput->writeChar(value);
   return shared_from_this();
 }
 
diff --git a/cppcache/src/PdxLocalWriter.hpp b/cppcache/src/PdxLocalWriter.hpp
index 4c78635..78de0aa 100644
--- a/cppcache/src/PdxLocalWriter.hpp
+++ b/cppcache/src/PdxLocalWriter.hpp
@@ -136,7 +136,7 @@ class PdxLocalWriter : public PdxWriter,
    */
   virtual PdxWriterPtr writeChar(const char* fieldName, char value);
 
-  virtual PdxWriterPtr writeWideChar(const char* fieldName, wchar_t value);
+  virtual PdxWriterPtr writeChar(const char* fieldName, char16_t value);
 
   /**
    *Write a boolean value to the PdxWriter.
diff --git a/cppcache/src/PdxRemoteReader.cpp b/cppcache/src/PdxRemoteReader.cpp
index 829b1ac..f838806 100644
--- a/cppcache/src/PdxRemoteReader.cpp
+++ b/cppcache/src/PdxRemoteReader.cpp
@@ -159,38 +159,7 @@ int16_t PdxRemoteReader::readShort(const char* fieldName) {
   }
 }
 
-/*void PdxRemoteReader::readInt(const char* fieldName, uint32_t* value){
-  int choice = m_localToRemoteMap[m_currentIndex++];
 
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readInt(fieldName, value);//in same order
-      break;
-    }
-  case -1:
-    {
-      *value = 0;//null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readInt(fieldName, value);
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        *value = 0;//null value
-      }
-    }
-  }
-}
-*/
 int32_t PdxRemoteReader::readInt(const char* fieldName) {
   int choice = m_localToRemoteMap[m_currentIndex++];
 
@@ -219,38 +188,6 @@ int32_t PdxRemoteReader::readInt(const char* fieldName) {
   }
 }
 
-/*void PdxRemoteReader::readInt(const char* fieldName, uint64_t* value){
-  int choice = m_localToRemoteMap[m_currentIndex++];
-
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readInt(fieldName, value);//in same order
-      break;
-    }
-  case -1:
-    {
-      *value = 0;//null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readInt(fieldName, value);
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        *value = 0;//null value
-      }
-    }
-  }
-}
-*/
 int64_t PdxRemoteReader::readLong(const char* fieldName) {
   int choice = m_localToRemoteMap[m_currentIndex++];
 
@@ -393,138 +330,6 @@ wchar_t* PdxRemoteReader::readWideString(const char* fieldName) {
   }
 }
 
-/*void PdxRemoteReader::readASCII(const char* fieldName, char** value, uint16_t*
-len){
-  int choice = m_localToRemoteMap[m_currentIndex++];
-
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readASCII(fieldName, value, len);//in same order
-      break;
-    }
-  case -1:
-    {
-      **value = '\0';//null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readASCII(fieldName, value, len);
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        **value = '\0';//null value
-      }
-    }
-  }
-}
-
-void PdxRemoteReader::readASCIIHuge(const char* fieldName, char** value,
-uint32_t* len){
-  int choice = m_localToRemoteMap[m_currentIndex++];
-
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readASCIIHuge(fieldName, value, len);//in same order
-      break;
-    }
-  case -1:
-    {
-      **value = '\0';//null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readASCIIHuge(fieldName, value, len);
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        **value = '\0';//null value
-      }
-    }
-  }
-}
-
-void PdxRemoteReader::readUTF(const char* fieldName, char** value, uint16_t*
-len){
-  int choice = m_localToRemoteMap[m_currentIndex++];
-
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readUTF(fieldName, value, len);//in same order
-      break;
-    }
-  case -1:
-    {
-      **value = '\0';//null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readUTF(fieldName, value, len);//in same order
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        **value = '\0';//null value
-      }
-    }
-  }
-}
-
-void PdxRemoteReader::readUTFHuge(const char* fieldName, char** value, uint32_t*
-len){
-  int choice = m_localToRemoteMap[m_currentIndex++];
-
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readUTFHuge(fieldName, value, len);//in same order
-      break;
-    }
-  case -1:
-    {
-      **value = '\0';//null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readUTFHuge(fieldName, value, len);//in same order
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        **value = '\0';//null value
-      }
-    }
-  }
-}
-*/
 SerializablePtr PdxRemoteReader::readObject(const char* fieldName) {
   int choice = m_localToRemoteMap[m_currentIndex++];
 
@@ -929,105 +734,6 @@ CacheableDatePtr PdxRemoteReader::readDate(const char* fieldName) {
   }
 }
 
-/*void PdxRemoteReader::readBytes(const char* fieldName, uint8_t*& bytes,
-  int32_t& len) {
-
-    int choice = m_localToRemoteMap[m_currentIndex++];
-
-    switch(choice)
-    {
-    case -2:
-      {
-        PdxLocalReader::readBytes(fieldName, bytes, len);//in same order
-        break;
-      }
-    case -1:
-      {
-        bytes = nullptr;//null value
-        break;
-      }
-    default:
-      {
-        //sequence id read field and then update
-        int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-        if (position != -1) {
-          m_dataInput->reset(position);
-          PdxLocalReader::readBytes(fieldName, bytes, len);//
-          m_dataInput->rewindCursor(position);
-        }
-        else {
-          bytes = nullptr;//null value
-        }
-      }
-    }
-}
-
-void PdxRemoteReader::readBytes(const char* fieldName, int8_t*& bytes,
-  int32_t& len ) {
-    int choice = m_localToRemoteMap[m_currentIndex++];
-
-    switch(choice)
-    {
-    case -2:
-      {
-        PdxLocalReader::readBytes(fieldName, bytes, len);//in same order
-        break;
-      }
-    case -1:
-      {
-        bytes = nullptr;//null value
-        break;
-      }
-    default:
-      {
-        //sequence id read field and then update
-        int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-        if (position != -1) {
-          m_dataInput->reset(position);
-          PdxLocalReader::readBytes(fieldName, bytes, len);//
-          m_dataInput->rewindCursor(position);
-        }
-        else {
-          bytes = nullptr;//null value
-        }
-      }
-    }
-}
-
-void PdxRemoteReader::readASCIIChar(const char* fieldName, wchar_t& value) {
-  int choice = m_localToRemoteMap[m_currentIndex++];
-
-  switch(choice)
-  {
-  case -2:
-    {
-      PdxLocalReader::readASCIIChar(fieldName, value);//in same order
-      break;
-    }
-  case -1:
-    {
-      value = '\0'; //null value
-      break;
-    }
-  default:
-    {
-      //sequence id read field and then update
-      int position = m_pdxType->getFieldPosition(choice, m_offsetsBuffer,
-m_offsetSize, m_serializedLength);
-      if (position != -1) {
-        m_dataInput->reset(position);
-        PdxLocalReader::readASCIIChar(fieldName, value);
-        m_dataInput->rewindCursor(position);
-      }
-      else {
-        value = '\0';
-      }
-    }
-  }
-}
-*/
 void PdxRemoteReader::readCollection(const char* fieldName,
                                      CacheableArrayListPtr& collection) {
   int choice = m_localToRemoteMap[m_currentIndex++];
diff --git a/cppcache/src/PdxRemoteWriter.cpp b/cppcache/src/PdxRemoteWriter.cpp
index 7a9b760..0780461 100644
--- a/cppcache/src/PdxRemoteWriter.cpp
+++ b/cppcache/src/PdxRemoteWriter.cpp
@@ -137,10 +137,9 @@ PdxWriterPtr PdxRemoteWriter::writeChar(const char* fieldName, char value) {
   return shared_from_this();
 }
 
-PdxWriterPtr PdxRemoteWriter::writeWideChar(const char* fieldName,
-                                            wchar_t value) {
+PdxWriterPtr PdxRemoteWriter::writeChar(const char* fieldName, char16_t value) {
   writePreserveData();
-  PdxLocalWriter::writeWideChar(fieldName, value);
+  PdxLocalWriter::writeChar(fieldName, value);
   return shared_from_this();
 }
 
diff --git a/cppcache/src/PdxRemoteWriter.hpp b/cppcache/src/PdxRemoteWriter.hpp
index 2e7a4b4..261b000 100644
--- a/cppcache/src/PdxRemoteWriter.hpp
+++ b/cppcache/src/PdxRemoteWriter.hpp
@@ -64,7 +64,7 @@ class PdxRemoteWriter : public PdxLocalWriter {
    */
   virtual PdxWriterPtr writeChar(const char* fieldName, char value);
 
-  virtual PdxWriterPtr writeWideChar(const char* fieldName, wchar_t value);
+  virtual PdxWriterPtr writeChar(const char* fieldName, char16_t value);
 
   /**
    *Write a boolean value to the PdxWriter.
diff --git a/cppcache/src/PdxType.cpp b/cppcache/src/PdxType.cpp
index 4d66e66..ff32d42 100644
--- a/cppcache/src/PdxType.cpp
+++ b/cppcache/src/PdxType.cpp
@@ -90,28 +90,23 @@ void PdxType::toData(DataOutput& output) const {
 }
 
 void PdxType::fromData(DataInput& input) {
-  int8_t dsByte;
-  input.read(&dsByte);
+  input.read(); // ignore dsByte
 
-  int8_t classByte;
-  input.read(&classByte);
+  input.read(); // ignore classByte
 
-  int8_t classtypeId;
-  input.read(&classtypeId);
+  input.read(); // ignore classtypeId
   input.readUTF(const_cast<char**>(&m_javaPdxClass));
 
-  int8_t classtypeId2;
-  input.read(&classtypeId2);
+  input.read(); // ignore int8_t classtypeId;2
   input.readUTF(&m_className);
 
-  input.readBoolean(&m_noJavaClass);
+  m_noJavaClass = input.readBoolean();
 
-  input.readInt(&m_geodeTypeId);
+  m_geodeTypeId = input.readInt32();
 
-  input.readInt(&m_varLenFieldIdx);
+  m_varLenFieldIdx = input.readInt32();
 
-  int len;
-  input.readArrayLen(&len);
+  int len = input.readArrayLen();
 
   bool foundVarLenType = false;
 
diff --git a/cppcache/src/PdxWriterWithTypeCollector.cpp b/cppcache/src/PdxWriterWithTypeCollector.cpp
index c143cf5..6f47c6e 100644
--- a/cppcache/src/PdxWriterWithTypeCollector.cpp
+++ b/cppcache/src/PdxWriterWithTypeCollector.cpp
@@ -109,11 +109,11 @@ PdxWriterPtr PdxWriterWithTypeCollector::writeChar(const char* fieldName,
   return shared_from_this();
 }
 
-PdxWriterPtr PdxWriterWithTypeCollector::writeWideChar(const char* fieldName,
-                                                       wchar_t value) {
+PdxWriterPtr PdxWriterWithTypeCollector::writeChar(const char* fieldName,
+                                                   char16_t value) {
   m_pdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                      PdxTypes::CHAR_SIZE);
-  PdxLocalWriter::writeWideChar(fieldName, value);
+  PdxLocalWriter::writeChar(fieldName, value);
   return shared_from_this();
 }
 
diff --git a/cppcache/src/PdxWriterWithTypeCollector.hpp b/cppcache/src/PdxWriterWithTypeCollector.hpp
index 63e946d..499a4fa 100644
--- a/cppcache/src/PdxWriterWithTypeCollector.hpp
+++ b/cppcache/src/PdxWriterWithTypeCollector.hpp
@@ -56,7 +56,7 @@ class PdxWriterWithTypeCollector : public PdxLocalWriter {
    */
   virtual PdxWriterPtr writeChar(const char* fieldName, char value);
 
-  virtual PdxWriterPtr writeWideChar(const char* fieldName, wchar_t value);
+  virtual PdxWriterPtr writeChar(const char* fieldName, char16_t value);
 
   /**
    *Write a boolean value to the PdxWriter.
diff --git a/cppcache/src/Properties.cpp b/cppcache/src/Properties.cpp
index 0e2d178..d37092e 100644
--- a/cppcache/src/Properties.cpp
+++ b/cppcache/src/Properties.cpp
@@ -182,7 +182,7 @@ void Properties::addAll(const PropertiesPtr& other) {
 
    public:
     explicit Copier(Properties& lhs) : m_lhs(lhs) {}
-    void visit(CacheableKeyPtr& key, CacheablePtr& value) {
+    void visit(const CacheableKeyPtr& key, const CacheablePtr& value) {
       m_lhs.insert(key, value);
     }
   } aCopier(*this);
@@ -308,22 +308,21 @@ void Properties::toData(DataOutput& output) const {
 }
 
 void Properties::fromData(DataInput& input) {
-  int32_t mapSize = 0;
-  input.readArrayLen(&mapSize);
+  int32_t mapSize = input.readArrayLen();
   for (int i = 0; i < mapSize; i++) {
     CacheableStringPtr key;
     CacheableStringPtr val;
     // TODO: need to look just look typeid if string then convert otherwise
     // continue with readobject
 
-    if (!input.readNativeString(key)) {
+    if (!(key = input.readNativeString())) {
       CacheableKeyPtr keyPtr;
       CacheablePtr valPtr;
-      input.readObject(keyPtr, true);
+      keyPtr = input.readObject<CacheableKey>(true);
       input.readObject(valPtr);
       MAP->rebind(keyPtr, valPtr);
     } else {
-      if (!input.readNativeString(val)) {
+      if (!(val = input.readNativeString())) {
         CacheablePtr valPtr;
         input.readObject(valPtr);
         MAP->rebind(key, valPtr);
diff --git a/cppcache/src/ProxyCache.cpp b/cppcache/src/ProxyCache.cpp
index d304609..7b58501 100644
--- a/cppcache/src/ProxyCache.cpp
+++ b/cppcache/src/ProxyCache.cpp
@@ -97,7 +97,9 @@ RegionPtr ProxyCache::getRegion(const char* path) {
           result->getAttributes()->getPoolName());
       if (pool != nullptr && pool.get() == userAttachedPool.get() &&
           !pool->isDestroyed()) {
-        return std::make_shared<ProxyRegion>(shared_from_this(), result);
+        return std::make_shared<ProxyRegion>(
+            shared_from_this(),
+            std::static_pointer_cast<RegionInternal>(result));
       }
       throw IllegalArgumentException(
           "The Region argument is not attached with the pool, which used to "
@@ -129,31 +131,30 @@ QueryServicePtr ProxyCache::getQueryService() {
   throw IllegalStateException("User cache has been closed.");
 }
 
-void ProxyCache::rootRegions(VectorOfRegion& regions) {
+VectorOfRegion ProxyCache::rootRegions() {
   LOGDEBUG("ProxyCache::rootRegions:");
 
-  if (!m_isProxyCacheClosed) {
-    RegionPtr result;
+  VectorOfRegion regions;
 
-    if (m_cacheImpl != nullptr && !m_cacheImpl->isClosed()) {
-      VectorOfRegion tmp;
-      // this can cause issue when pool attached with region in multiuserSecure
-      // mode
-      m_cacheImpl->rootRegions(tmp);
-
-      if (tmp.size() > 0) {
-        for (int32_t i = 0; i < tmp.size(); i++) {
-          RegionPtr reg = tmp.at(i);
-          if (strcmp(m_userAttributes->getPool()->getName(),
-                     reg->getAttributes()->getPoolName()) == 0) {
-            auto pRegion =
-                std::make_shared<ProxyRegion>(shared_from_this(), reg);
-            regions.push_back(pRegion);
-          }
-        }
+  if (!m_isProxyCacheClosed && m_cacheImpl && !m_cacheImpl->isClosed()) {
+    VectorOfRegion tmp;
+
+    // this can cause issue when pool attached with region in multiuserSecure
+    // mode
+    m_cacheImpl->rootRegions(tmp);
+    regions.reserve(tmp.size());
+
+    for (const auto& reg : tmp) {
+      if (strcmp(m_userAttributes->getPool()->getName(),
+                 reg->getAttributes()->getPoolName()) == 0) {
+        auto pRegion = std::make_shared<ProxyRegion>(
+            shared_from_this(), std::static_pointer_cast<RegionInternal>(reg));
+        regions.push_back(pRegion);
       }
     }
   }
+
+  return regions;
 }
 
 ProxyCache::ProxyCache(PropertiesPtr credentials, PoolPtr pool,
diff --git a/cppcache/src/ProxyCache.hpp b/cppcache/src/ProxyCache.hpp
index acbc295..9cbbe8c 100644
--- a/cppcache/src/ProxyCache.hpp
+++ b/cppcache/src/ProxyCache.hpp
@@ -67,7 +67,7 @@ class CPPCACHE_EXPORT ProxyCache
    *
    * @return true, if this cache is closed; false, otherwise
    */
-  virtual bool isClosed() const;
+  virtual bool isClosed() const override;
 
   /**
    * Terminates this object cache and releases all the local resources.
@@ -77,20 +77,20 @@ class CPPCACHE_EXPORT ProxyCache
    * @param keepalive whether to keep a durable client's queue alive
    * @throws CacheClosedException,  if the cache is already closed.
    */
-  virtual void close();
+  virtual void close() override;
 
   /** Look up a region with the full path from root.
    * @param path the region's path, such as <code>RootA/Sub1/Sub1A</code>.
    * @returns region, or nullptr if no such region exists.
    */
-  virtual RegionPtr getRegion(const char* path);
+  virtual RegionPtr getRegion(const char* path) override;
 
   /**
    * Gets the QueryService from which a new Query can be obtained.
    *
    * @returns A smart pointer to the QueryService.
    */
-  virtual QueryServicePtr getQueryService();
+  virtual QueryServicePtr getQueryService() override;
 
   /**
    * Returns a set of root regions in the cache. This set is a snapshot and
@@ -100,7 +100,7 @@ class CPPCACHE_EXPORT ProxyCache
    * @param regions the returned set of
    * regions
    */
-  virtual void rootRegions(VectorOfRegion& regions);
+  virtual VectorOfRegion rootRegions() override;
 
   /**
    * @brief destructor
@@ -116,7 +116,8 @@ class CPPCACHE_EXPORT ProxyCache
    * when it is fully deserialized.
    * @return the factory
    */
-  virtual PdxInstanceFactoryPtr createPdxInstanceFactory(const char* className);
+  virtual PdxInstanceFactoryPtr createPdxInstanceFactory(
+      const char* className) override;
 
  private:
   /**
diff --git a/cppcache/src/ProxyRegion.cpp b/cppcache/src/ProxyRegion.cpp
deleted file mode 100644
index 24a6cc9..0000000
--- a/cppcache/src/ProxyRegion.cpp
+++ /dev/null
@@ -1,29 +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.
- */
-
-#include "ProxyRegion.hpp"
-#include "ThinClientRegion.hpp"
-#include "UserAttributes.hpp"
-
-void ProxyRegion::unSupportedOperation(const char* operationName) const {
-  char msg[256] = {'\0'};
-  ACE_OS::snprintf(
-      msg, 256,
-      "%s operation is not supported when Region instance is logical.",
-      operationName);
-  throw UnsupportedOperationException(msg);
-}
diff --git a/cppcache/src/ProxyRegion.hpp b/cppcache/src/ProxyRegion.hpp
index 4361765..54efee5 100644
--- a/cppcache/src/ProxyRegion.hpp
+++ b/cppcache/src/ProxyRegion.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PROXYREGION_H_
-#define GEODE_PROXYREGION_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,6 +15,13 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_PROXYREGION_H_
+#define GEODE_PROXYREGION_H_
+
+#include <algorithm>
+
 #include <geode/geode_globals.hpp>
 #include <geode/geode_types.hpp>
 #include <geode/CacheableKey.hpp>
@@ -28,11 +30,6 @@
 #include <geode/ExceptionTypes.hpp>
 #include <geode/CacheableString.hpp>
 #include <geode/CacheableBuiltins.hpp>
-
-/**
- * @file
- */
-
 #include <geode/RegionEntry.hpp>
 #include <geode/CacheListener.hpp>
 #include <geode/CacheWriter.hpp>
@@ -42,12 +39,16 @@
 #include <geode/AttributesFactory.hpp>
 #include <geode/CacheableKey.hpp>
 #include <geode/Query.hpp>
+
+#include "RegionInternal.hpp"
 #include "ProxyCache.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
+
 class FunctionService;
+
 /**
  * @class ProxyRegion ProxyRegion.hpp
  * This class wrapper around real region
@@ -85,8 +86,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws RegionDestroyedException.
    */
   virtual AttributesMutatorPtr getAttributesMutator() const {
-    unSupportedOperation("Region.getAttributesMutator()");
-    return nullptr;
+    throw UnsupportedOperationException("Region.getAttributesMutator()");
   }
 
   // virtual void updateAccessOrModifiedTime() = 0;
@@ -113,7 +113,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    */
   virtual void invalidateRegion(
       const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.invalidateRegion()");
+    throw UnsupportedOperationException("Region.invalidateRegion()");
   }
 
   /** Invalidates this region. The invalidation will cascade to
@@ -137,7 +137,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
   */
   virtual void localInvalidateRegion(
       const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localInvalidateRegion()");
+    throw UnsupportedOperationException("Region.localInvalidateRegion()");
   }
 
   /** Destroys the whole region and provides a user-defined parameter
@@ -199,7 +199,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @see CacheWriter#beforeRegionClear
    */
   virtual void localClear(const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("localClear()");
+    throw UnsupportedOperationException("localClear()");
   }
 
   /** Destroys the whole region and provides a user-defined parameter
@@ -223,14 +223,15 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    */
   virtual void localDestroyRegion(
       const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localDestroyRegion()");
+    throw UnsupportedOperationException("Region.localDestroyRegion()");
   }
 
   /** Returns the subregion identified by the path, nullptr if no such subregion
    */
   virtual RegionPtr getSubregion(const char* path) {
     LOGDEBUG("ProxyRegion getSubregion");
-    RegionPtr rPtr = m_realRegion->getSubregion(path);
+    auto rPtr = std::static_pointer_cast<RegionInternal>(
+        m_realRegion->getSubregion(path));
 
     if (rPtr == nullptr) return rPtr;
 
@@ -240,7 +241,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
   /** Creates a subregion with the specified attributes */
   virtual RegionPtr createSubregion(
       const char* subregionName, const RegionAttributesPtr& aRegionAttributes) {
-    unSupportedOperation("createSubregion()");
+    throw UnsupportedOperationException("createSubregion()");
     return nullptr;
     /*LOGDEBUG("ProxyRegion getSubregion");
     RegionPtr rPtr = m_realRegion->createSubregion(subregionName,
@@ -260,17 +261,20 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @param[out] sr subregions
    * @throws RegionDestroyedException
    */
-  virtual void subregions(const bool recursive, VectorOfRegion& sr) {
-    VectorOfRegion realVectorRegion;
-    m_realRegion->subregions(recursive, realVectorRegion);
+  VectorOfRegion subregions(const bool recursive) {
+    VectorOfRegion realVectorRegion = m_realRegion->subregions(recursive);
+    VectorOfRegion proxyRegions(realVectorRegion.size());
+
+    std::transform(
+        realVectorRegion.begin(), realVectorRegion.end(),
+        std::back_inserter(proxyRegions),
+        [this](const RegionPtr& realRegion) -> std::shared_ptr<ProxyRegion> {
+          return std::make_shared<ProxyRegion>(
+              m_proxyCache,
+              std::static_pointer_cast<RegionInternal>(realRegion));
+        });
 
-    if (realVectorRegion.size() > 0) {
-      for (int32_t i = 0; i < realVectorRegion.size(); i++) {
-        auto prPtr =
-            std::make_shared<ProxyRegion>(m_proxyCache, realVectorRegion.at(i));
-        sr.push_back(prPtr);
-      }
-    }
+    return proxyRegions;
   }
 
   /** Return the meta-object RegionEntry for key.
@@ -460,7 +464,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    */
   virtual void localPut(const CacheableKeyPtr& key, const CacheablePtr& value,
                         const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localPut()");
+    throw UnsupportedOperationException("Region.localPut()");
   }
 
   /** Convenience method allowing both key and value to be a const char* */
@@ -582,7 +586,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
   virtual void localCreate(const CacheableKeyPtr& key,
                            const CacheablePtr& value,
                            const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localCreate()");
+    throw UnsupportedOperationException("Region.localCreate()");
   }
 
   /** Convenience method allowing both key and value to be a const char* */
@@ -662,7 +666,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    */
   virtual void localInvalidate(const CacheableKeyPtr& key,
                                const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localInvalidate()");
+    throw UnsupportedOperationException("Region.localInvalidate()");
   }
 
   /** Convenience method allowing key to be a const char* */
@@ -752,7 +756,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    */
   virtual void localDestroy(const CacheableKeyPtr& key,
                             const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localDestroy()");
+    throw UnsupportedOperationException("Region.localDestroy()");
   }
 
   /** Convenience method allowing key to be a const char* */
@@ -926,7 +930,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
   virtual bool localRemove(const CacheableKeyPtr& key,
                            const CacheablePtr& value,
                            const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localRemove()");
+    throw UnsupportedOperationException("Region.localRemove()");
     return false;
   }
 
@@ -978,7 +982,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    */
   virtual bool localRemoveEx(const CacheableKeyPtr& key,
                              const SerializablePtr& aCallbackArgument = nullptr) {
-    unSupportedOperation("Region.localRemoveEx()");
+    throw UnsupportedOperationException("Region.localRemoveEx()");
     return false;
   }
 
@@ -993,8 +997,9 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * Return all the keys in the local process for this region. This includes
    * keys for which the entry is invalid.
    */
-  virtual void keys(VectorOfCacheableKey& v) {
-    unSupportedOperation("Region.keys()");
+  virtual VectorOfCacheableKey keys() {
+    throw UnsupportedOperationException("Region.keys()");
+    return VectorOfCacheableKey();
   }
 
   /**
@@ -1019,21 +1024,21 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws UnsupportedOperationException if the member type is not CLIENT
    *                                       or region is not a native client one.
    */
-  virtual void serverKeys(VectorOfCacheableKey& v) {
+  virtual VectorOfCacheableKey serverKeys() {
     GuardUserAttribures gua(m_proxyCache);
-    m_realRegion->serverKeys(v);
+    return m_realRegion->serverKeys();
   }
 
   /**
    * Return all values in the local process for this region. No value is
    * included for entries that are invalidated.
    */
-  virtual void values(VectorOfCacheable& vc) {
-    unSupportedOperation("Region.values()");
+  virtual VectorOfCacheable values() {
+    throw UnsupportedOperationException("Region.values()");
   }
 
-  virtual void entries(VectorOfRegionEntry& me, bool recursive) {
-    unSupportedOperation("Region.entries()");
+  virtual VectorOfRegionEntry entries(bool recursive) {
+    throw UnsupportedOperationException("Region.entries()");
   }
 
   virtual RegionServicePtr getRegionService() const {
@@ -1048,7 +1053,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * to which it is connected.
    */
   virtual bool containsValueForKey(const CacheableKeyPtr& keyPtr) const {
-    unSupportedOperation("Region.containsValueForKey()");
+    throw UnsupportedOperationException("Region.containsValueForKey()");
     return false;
   }
 
@@ -1069,7 +1074,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * to which it is connected with.
    */
   virtual bool containsKey(const CacheableKeyPtr& keyPtr) const {
-    unSupportedOperation("Region.containsKey()");
+    throw UnsupportedOperationException("Region.containsKey()");
     return false;
   }
 
@@ -1089,8 +1094,8 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws UnsupportedOperationException if the region's scope is
    * ScopeType::LOCAL.
    */
-  virtual void getInterestList(VectorOfCacheableKey& vlist) const {
-    unSupportedOperation("Region.getInterestList()");
+  virtual VectorOfCacheableKey getInterestList() const {
+    throw UnsupportedOperationException("Region.getInterestList()");
   }
   /**
    * Returns the list of regular expresssions on which this client is
@@ -1098,8 +1103,8 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws UnsupportedOperationException if the region's scope is
    * ScopeType::LOCAL.
    */
-  virtual void getInterestListRegex(VectorOfCacheableString& vregex) const {
-    unSupportedOperation("Region.getInterestListRegex()");
+  virtual VectorOfCacheableString getInterestListRegex() const {
+    throw UnsupportedOperationException("Region.getInterestListRegex()");
   }
 
   /**
@@ -1149,7 +1154,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
                             bool isDurable = false,
                             bool getInitialValues = false,
                             bool receiveValues = true) {
-    unSupportedOperation("Region.registerKeys()");
+    throw UnsupportedOperationException("Region.registerKeys()");
   }
 
   /**
@@ -1175,7 +1180,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws TimeoutException if operation timed out
    */
   virtual void unregisterKeys(const VectorOfCacheableKey& keys) {
-    unSupportedOperation("Region.unregisterKeys()");
+    throw UnsupportedOperationException("Region.unregisterKeys()");
   }
 
   /**
@@ -1211,10 +1216,9 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws TimeoutException if operation timed out
    */
   virtual void registerAllKeys(bool isDurable = false,
-                               VectorOfCacheableKeyPtr resultKeys = nullptr,
                                bool getInitialValues = false,
                                bool receiveValues = true) {
-    unSupportedOperation("Region.registerAllKeys()");
+    throw UnsupportedOperationException("Region.registerAllKeys()");
   }
 
   /**
@@ -1237,7 +1241,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws TimeoutException if operation timed out
    */
   virtual void unregisterAllKeys() {
-    unSupportedOperation("Region.unregisterAllKeys()");
+    throw UnsupportedOperationException("Region.unregisterAllKeys()");
   }
 
   /**
@@ -1281,10 +1285,9 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws TimeoutException if operation timed out
    */
   virtual void registerRegex(const char* regex, bool isDurable = false,
-                             VectorOfCacheableKeyPtr resultKeys = nullptr,
                              bool getInitialValues = false,
                              bool receiveValues = true) {
-    unSupportedOperation("Region.registerRegex()");
+    throw UnsupportedOperationException("Region.registerRegex()");
   }
 
   /**
@@ -1312,7 +1315,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    * @throws TimeoutException if operation timed out
    */
   virtual void unregisterRegex(const char* regex) {
-    unSupportedOperation("Region.unregisterRegex()");
+    throw UnsupportedOperationException("Region.unregisterRegex()");
   }
 
   /**
@@ -1357,14 +1360,11 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
    *
    * @see get
    */
-  virtual void getAll(const VectorOfCacheableKey& keys,
-                      HashMapOfCacheablePtr values,
-                      HashMapOfExceptionPtr exceptions,
-                      bool addToLocalCache = false,
-                      const SerializablePtr& aCallbackArgument = nullptr) {
+  virtual HashMapOfCacheable getAll(
+      const VectorOfCacheableKey& keys,
+      const SerializablePtr& aCallbackArgument = nullptr) {
     GuardUserAttribures gua(m_proxyCache);
-    m_realRegion->getAll(keys, values, exceptions, false /*TODO:*/,
-                         aCallbackArgument);
+    return m_realRegion->getAll_internal(keys, aCallbackArgument, false);
   }
 
   /**
@@ -1494,7 +1494,7 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
 
   virtual const PoolPtr& getPool() { return m_realRegion->getPool(); }
 
-  ProxyRegion(const ProxyCachePtr& proxyCache, const RegionPtr& realRegion)
+  ProxyRegion(const ProxyCachePtr& proxyCache, const std::shared_ptr<RegionInternal>& realRegion)
       : Region(realRegion->getCache()) {
     m_proxyCache = proxyCache;
     m_realRegion = realRegion;
@@ -1506,10 +1506,9 @@ class CPPCACHE_EXPORT ProxyRegion : public Region {
   ProxyRegion& operator=(const ProxyRegion&) = delete;
 
  private:
-  void unSupportedOperation(const char* operationName) const;
 
   ProxyCachePtr m_proxyCache;
-  RegionPtr m_realRegion;
+  std::shared_ptr<RegionInternal> m_realRegion;
   friend class FunctionService;
 
   FRIEND_STD_SHARED_PTR(ProxyRegion)
diff --git a/cppcache/src/ProxyRemoteQueryService.cpp b/cppcache/src/ProxyRemoteQueryService.cpp
index 25aec8a..0dbe909 100644
--- a/cppcache/src/ProxyRemoteQueryService.cpp
+++ b/cppcache/src/ProxyRemoteQueryService.cpp
@@ -50,7 +50,7 @@ void ProxyRemoteQueryService::unSupportedException(const char* operationName) {
 }
 
 CqQueryPtr ProxyRemoteQueryService::newCq(const char* querystr,
-                                          CqAttributesPtr& cqAttr,
+                                          const CqAttributesPtr& cqAttr,
                                           bool isDurable) {
   if (!m_proxyCache->isClosed()) {
     auto userAttachedPool = m_proxyCache->m_userAttributes->getPool();
@@ -79,7 +79,7 @@ void ProxyRemoteQueryService::addCqQuery(const CqQueryPtr& cqQuery) {
 
 CqQueryPtr ProxyRemoteQueryService::newCq(const char* name,
                                           const char* querystr,
-                                          CqAttributesPtr& cqAttr,
+                                          const CqAttributesPtr& cqAttr,
                                           bool isDurable) {
   if (!m_proxyCache->isClosed()) {
     auto userAttachedPool = m_proxyCache->m_userAttributes->getPool();
@@ -128,9 +128,9 @@ void ProxyRemoteQueryService::closeCqs(bool keepAlive) {
   }
 }
 
-void ProxyRemoteQueryService::getCqs(query_container_type& vec) {
+QueryService::query_container_type ProxyRemoteQueryService::getCqs() {
   ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_cqQueryListLock);
-  vec = m_cqQueries;
+  return m_cqQueries;
 }
 
 CqQueryPtr ProxyRemoteQueryService::getCq(const char* name) {
diff --git a/cppcache/src/ProxyRemoteQueryService.hpp b/cppcache/src/ProxyRemoteQueryService.hpp
index e1c1f40..7f98b22 100644
--- a/cppcache/src/ProxyRemoteQueryService.hpp
+++ b/cppcache/src/ProxyRemoteQueryService.hpp
@@ -43,12 +43,13 @@ class CPPCACHE_EXPORT ProxyRemoteQueryService : public QueryService {
   QueryPtr newQuery(const char* querystring);
 
   ~ProxyRemoteQueryService() {}
-  virtual CqQueryPtr newCq(const char* querystr, CqAttributesPtr& cqAttr,
+  virtual CqQueryPtr newCq(const char* querystr, const CqAttributesPtr& cqAttr,
                            bool isDurable = false);
   virtual CqQueryPtr newCq(const char* name, const char* querystr,
-                           CqAttributesPtr& cqAttr, bool isDurable = false);
+                           const CqAttributesPtr& cqAttr,
+                           bool isDurable = false);
   virtual void closeCqs();
-  virtual void getCqs(query_container_type& vec);
+  virtual QueryService::query_container_type getCqs();
   virtual CqQueryPtr getCq(const char* name);
   virtual void executeCqs();
   virtual void stopCqs();
diff --git a/cppcache/src/QueueConnectionResponse.cpp b/cppcache/src/QueueConnectionResponse.cpp
index 2ff9066..eb3d283 100644
--- a/cppcache/src/QueueConnectionResponse.cpp
+++ b/cppcache/src/QueueConnectionResponse.cpp
@@ -23,7 +23,7 @@
 using namespace apache::geode::client;
 
 void QueueConnectionResponse::fromData(DataInput& input) {
-  input.readBoolean(&m_durableQueueFound);
+  m_durableQueueFound = input.readBoolean();
   readList(input);
 }
 
@@ -36,8 +36,7 @@ uint32_t QueueConnectionResponse::objectSize() const {
 }
 
 void QueueConnectionResponse::readList(DataInput& input) {
-  uint32_t size = 0;
-  input.readInt(&size);
+  uint32_t size = input.readInt32();
   for (uint32_t i = 0; i < size; i++) {
     ServerLocation temp;
     temp.fromData(input);
diff --git a/cppcache/src/RegionAttributes.cpp b/cppcache/src/RegionAttributes.cpp
index 0e2f66e..d9819d4 100644
--- a/cppcache/src/RegionAttributes.cpp
+++ b/cppcache/src/RegionAttributes.cpp
@@ -447,9 +447,7 @@ void writeBool(DataOutput& out, bool field) {
 }
 
 void readBool(DataInput& in, bool* field) {
-  int8_t v = 0;
-  in.read(&v);
-  *field = v ? true : false;
+  *field = in.read() ? true : false;
 }
 
 void writeCharStar(DataOutput& out, const char* field) {
@@ -464,8 +462,7 @@ void writeCharStar(DataOutput& out, const char* field) {
 /** this one allocates the memory and modifies field to point to it. */
 void readCharStar(DataInput& in, char** field) {
   GF_D_ASSERT(*field == nullptr);
-  int32_t memlen = 0;
-  in.readArrayLen(&memlen);
+  int32_t memlen = in.readArrayLen();
   if (memlen != 0) {
     *field = new char[memlen];
     in.readBytesOnly(reinterpret_cast<int8_t*>(*field), memlen);
@@ -514,20 +511,20 @@ void RegionAttributes::toData(DataOutput& out) const {
 }
 
 void RegionAttributes::fromData(DataInput& in) {
-  in.readInt(reinterpret_cast<int32_t*>(&m_regionTimeToLive));
-  in.readInt(reinterpret_cast<int32_t*>(&m_regionTimeToLiveExpirationAction));
-  in.readInt(reinterpret_cast<int32_t*>(&m_regionIdleTimeout));
-  in.readInt(reinterpret_cast<int32_t*>(&m_regionIdleTimeoutExpirationAction));
-  in.readInt(reinterpret_cast<int32_t*>(&m_entryTimeToLive));
-  in.readInt(reinterpret_cast<int32_t*>(&m_entryTimeToLiveExpirationAction));
-  in.readInt(reinterpret_cast<int32_t*>(&m_entryIdleTimeout));
-  in.readInt(reinterpret_cast<int32_t*>(&m_entryIdleTimeoutExpirationAction));
-  in.readInt(reinterpret_cast<int32_t*>(&m_initialCapacity));
-  in.readFloat(&m_loadFactor);
-  in.readInt(reinterpret_cast<int32_t*>(&m_maxValueDistLimit));
-  in.readInt(reinterpret_cast<int32_t*>(&m_concurrencyLevel));
-  in.readInt(reinterpret_cast<int32_t*>(&m_lruEntriesLimit));
-  in.readInt(reinterpret_cast<int32_t*>(&m_lruEvictionAction));
+  m_regionTimeToLive = in.readInt32();
+  m_regionTimeToLiveExpirationAction = static_cast<ExpirationAction::Action>(in.readInt32());
+  m_regionIdleTimeout = in.readInt32();
+  m_regionIdleTimeoutExpirationAction = static_cast<ExpirationAction::Action>(in.readInt32());
+  m_entryTimeToLive = in.readInt32();
+  m_entryTimeToLiveExpirationAction = static_cast<ExpirationAction::Action>(in.readInt32());
+  m_entryIdleTimeout = in.readInt32();
+  m_entryIdleTimeoutExpirationAction = static_cast<ExpirationAction::Action>(in.readInt32());
+  m_initialCapacity = in.readInt32();
+  m_loadFactor = in.readFloat();
+  m_maxValueDistLimit = in.readInt32();
+  m_concurrencyLevel = in.readInt32();
+  m_lruEntriesLimit = in.readInt32();
+  m_lruEvictionAction = static_cast<ExpirationAction::Action>(in.readInt32());
 
   apache::geode::client::impl::readBool(in, &m_caching);
   apache::geode::client::impl::readBool(in, &m_clientNotificationEnabled);
@@ -540,11 +537,11 @@ void RegionAttributes::fromData(DataInput& in) {
   apache::geode::client::impl::readCharStar(in, &m_cacheListenerFactory);
   apache::geode::client::impl::readCharStar(in, &m_partitionResolverLibrary);
   apache::geode::client::impl::readCharStar(in, &m_partitionResolverFactory);
-  in.readInt(reinterpret_cast<int32_t*>(&m_diskPolicy));
+  m_diskPolicy = static_cast<DiskPolicyType::PolicyType>(in.readInt32());
   apache::geode::client::impl::readCharStar(in, &m_endpoints);
   apache::geode::client::impl::readCharStar(in, &m_persistenceLibrary);
   apache::geode::client::impl::readCharStar(in, &m_persistenceFactory);
-  in.readObject(m_persistenceProperties, true);
+  m_persistenceProperties = in.readObject<Properties>(true);
   apache::geode::client::impl::readCharStar(in, &m_poolName);
   apache::geode::client::impl::readBool(in, &m_isConcurrencyChecksEnabled);
 }
diff --git a/cppcache/src/RegionCommit.cpp b/cppcache/src/RegionCommit.cpp
index 3bef90c..d25a8a6 100644
--- a/cppcache/src/RegionCommit.cpp
+++ b/cppcache/src/RegionCommit.cpp
@@ -28,16 +28,13 @@ namespace geode {
 namespace client {
 
 void RegionCommit::fromData(DataInput& input) {
-  input.readObject(m_regionPath);
-  input.readObject(m_parentRegionPath);
-  int32_t size = 0;
-
-  input.readInt(&size);
+  m_regionPath = input.readObject<CacheableString>();
+  m_parentRegionPath = input.readObject<CacheableString>();
+  int32_t size = input.readInt32();
   if (size > 0) {
-    bool largeModCount;
-    input.readBoolean(&largeModCount);
+    const auto largeModCount = input.readBoolean();
     DSMemberForVersionStampPtr dsMember;
-    input.readObject(dsMember);
+    dsMember = input.readObject<DSMemberForVersionStamp>();
 
     auto memId = m_memberListForVersionStamp.add(dsMember);
     for (int i = 0; i < size; i++) {
diff --git a/cppcache/src/RegionEntry.cpp b/cppcache/src/RegionEntry.cpp
index 6f52986..55b8248 100644
--- a/cppcache/src/RegionEntry.cpp
+++ b/cppcache/src/RegionEntry.cpp
@@ -37,8 +37,8 @@ CacheablePtr RegionEntry::getValue() {
 
 RegionPtr RegionEntry::getRegion() { return m_region; }
 
-void RegionEntry::getStatistics(CacheStatisticsPtr& csptr) {
-  csptr = m_statistics;
+CacheStatisticsPtr RegionEntry::getStatistics() {
+  return m_statistics;
 }
 
 bool RegionEntry::isDestroyed() const { return m_destroyed; }
diff --git a/cppcache/src/RegionInternal.cpp b/cppcache/src/RegionInternal.cpp
index 5914c51..4551c73 100644
--- a/cppcache/src/RegionInternal.cpp
+++ b/cppcache/src/RegionInternal.cpp
@@ -58,7 +58,6 @@ void RegionInternal::unregisterKeys(const VectorOfCacheableKey& keys) {
 }
 
 void RegionInternal::registerAllKeys(bool isDurable,
-                                     VectorOfCacheableKeyPtr resultKeys,
                                      bool getInitialValues,
                                      bool receiveValues) {
   throw UnsupportedOperationException(
@@ -71,7 +70,6 @@ void RegionInternal::unregisterAllKeys() {
 }
 
 void RegionInternal::registerRegex(const char* regex, bool isDurable,
-                                   VectorOfCacheableKeyPtr resultKeys,
                                    bool getInitialValues, bool receiveValues) {
   throw UnsupportedOperationException(
       "registerRegex only supported by Thin Client Region.");
diff --git a/cppcache/src/RegionInternal.hpp b/cppcache/src/RegionInternal.hpp
index 5e8022f..d77cadc 100644
--- a/cppcache/src/RegionInternal.hpp
+++ b/cppcache/src/RegionInternal.hpp
@@ -149,13 +149,11 @@ class RegionInternal : public Region {
                             bool receiveValues = true);
   virtual void unregisterKeys(const VectorOfCacheableKey& keys);
   virtual void registerAllKeys(bool isDurable = false,
-                               VectorOfCacheableKeyPtr resultKeys = nullptr,
                                bool getInitialValues = false,
                                bool receiveValues = true);
   virtual void unregisterAllKeys();
 
   virtual void registerRegex(const char* regex, bool isDurable = false,
-                             VectorOfCacheableKeyPtr resultKeys = nullptr,
                              bool getInitialValues = false,
                              bool receiveValues = true);
   virtual void unregisterRegex(const char* regex);
@@ -174,10 +172,15 @@ class RegionInternal : public Region {
 
   virtual GfErrType getNoThrow(const CacheableKeyPtr& key, CacheablePtr& value,
                                const SerializablePtr& aCallbackArgument) = 0;
+
+  virtual HashMapOfCacheable getAll_internal(
+      const VectorOfCacheableKey& keys,
+      const SerializablePtr& aCallbackArgument, bool addToLocalCache) = 0;
+
   virtual GfErrType getAllNoThrow(const VectorOfCacheableKey& keys,
                                   const HashMapOfCacheablePtr& values,
                                   const HashMapOfExceptionPtr& exceptions,
-                                  bool addToLocalCache,
+                                  const bool addToLocalCache,
                                   const SerializablePtr& aCallbackArgument) = 0;
   virtual GfErrType putNoThrow(const CacheableKeyPtr& key,
                                const CacheablePtr& value,
diff --git a/cppcache/src/RemoteQueryService.cpp b/cppcache/src/RemoteQueryService.cpp
index d46e1b3..2a7422f 100644
--- a/cppcache/src/RemoteQueryService.cpp
+++ b/cppcache/src/RemoteQueryService.cpp
@@ -145,7 +145,8 @@ void RemoteQueryService::executeAllCqs(bool failover) {
 }
 
 CqQueryPtr RemoteQueryService::newCq(const char* querystr,
-                                     CqAttributesPtr& cqAttr, bool isDurable) {
+                                     const CqAttributesPtr& cqAttr,
+                                     bool isDurable) {
   TryReadGuard guard(m_rwLock, m_invalid);
 
   if (m_invalid) {
@@ -160,7 +161,8 @@ CqQueryPtr RemoteQueryService::newCq(const char* querystr,
 }
 
 CqQueryPtr RemoteQueryService::newCq(const char* name, const char* querystr,
-                                     CqAttributesPtr& cqAttr, bool isDurable) {
+                                     const CqAttributesPtr& cqAttr,
+                                     bool isDurable) {
   TryReadGuard guard(m_rwLock, m_invalid);
 
   if (m_invalid) {
@@ -185,16 +187,18 @@ void RemoteQueryService::closeCqs() {
   }
 }
 
-void RemoteQueryService::getCqs(CqService::query_container_type& vec) {
+CqService::query_container_type RemoteQueryService::getCqs() {
   TryReadGuard guard(m_rwLock, m_invalid);
 
+  CqService::query_container_type  vec;
   if (m_invalid) {
     throw CacheClosedException("QueryService::getCqs: Cache has been closed.");
   }
   // If cqService has not started, then no cq exists
   if (m_cqService != nullptr) {
-    m_cqService->getAllCqs(vec);
+    vec = m_cqService->getAllCqs();
   }
+  return vec;
 }
 
 CqQueryPtr RemoteQueryService::getCq(const char* name) {
diff --git a/cppcache/src/RemoteQueryService.hpp b/cppcache/src/RemoteQueryService.hpp
index feca89c..6d24f3c 100644
--- a/cppcache/src/RemoteQueryService.hpp
+++ b/cppcache/src/RemoteQueryService.hpp
@@ -52,12 +52,13 @@ class CPPCACHE_EXPORT RemoteQueryService
   void close();
 
   ~RemoteQueryService() {}
-  virtual CqQueryPtr newCq(const char* querystr, CqAttributesPtr& cqAttr,
+  virtual CqQueryPtr newCq(const char* querystr, const CqAttributesPtr& cqAttr,
                            bool isDurable = false);
   virtual CqQueryPtr newCq(const char* name, const char* querystr,
-                           CqAttributesPtr& cqAttr, bool isDurable = false);
+                           const CqAttributesPtr& cqAttr,
+                           bool isDurable = false);
   virtual void closeCqs();
-  virtual void getCqs(QueryService::query_container_type& vec);
+  virtual QueryService::query_container_type getCqs();
   virtual CqQueryPtr getCq(const char* name);
   virtual void executeCqs();
   virtual void stopCqs();
diff --git a/cppcache/src/ResultCollector.cpp b/cppcache/src/ResultCollector.cpp
index af7c5df..84814d2 100644
--- a/cppcache/src/ResultCollector.cpp
+++ b/cppcache/src/ResultCollector.cpp
@@ -36,7 +36,7 @@ CacheableVectorPtr ResultCollector::getResult(uint32_t timeout) {
         "getResult() method");
   }
 }
-void ResultCollector::addResult(CacheablePtr& result) {
+void ResultCollector::addResult(const CacheablePtr& result) {
   m_resultList->push_back(result);
 }
 void ResultCollector::endResults() { m_isResultReady = true; }
diff --git a/cppcache/src/SerializationRegistry.cpp b/cppcache/src/SerializationRegistry.cpp
index eb55327..d1ddc85 100644
--- a/cppcache/src/SerializationRegistry.cpp
+++ b/cppcache/src/SerializationRegistry.cpp
@@ -98,7 +98,7 @@ void TheTypeMap::setup() {
   bind(CacheableArrayList::createDeserializable);
   bind(CacheableLinkedList::createDeserializable);
   bind(CacheableStack::createDeserializable);
-  bind(CacheableWideChar::createDeserializable);
+  bind(CacheableCharacter::createDeserializable);
   bind(CharArray::createDeserializable);
   bind(CacheableToken::createDeserializable);
   bind(RegionAttributes::createDeserializable);
@@ -121,9 +121,9 @@ void TheTypeMap::setup() {
 SerializablePtr SerializationRegistry::deserialize(DataInput& input,
                                                    int8_t typeId) const {
   bool findinternal = false;
-  int8_t currentTypeId = typeId;
+  auto currentTypeId = typeId;
 
-  if (typeId == -1) input.read(&currentTypeId);
+  if (typeId == -1) currentTypeId = input.read();
   int64_t compId = currentTypeId;
 
   LOGDEBUG("SerializationRegistry::deserialize typeid = %d currentTypeId= %d ",
@@ -149,40 +149,30 @@ SerializablePtr SerializationRegistry::deserialize(DataInput& input,
       break;
     }
     case GeodeTypeIdsImpl::CacheableUserData: {
-      int8_t classId = 0;
-      input.read(&classId);
-      compId |= ((static_cast<int64_t>(classId)) << 32);
+      compId |= ((static_cast<int64_t>(input.read())) << 32);
       break;
     }
     case GeodeTypeIdsImpl::CacheableUserData2: {
-      int16_t classId = 0;
-      input.readInt(&classId);
-      compId |= ((static_cast<int64_t>(classId)) << 32);
+      compId |= ((static_cast<int64_t>(input.readInt16())) << 32);
       break;
     }
     case GeodeTypeIdsImpl::CacheableUserData4: {
-      int32_t classId = 0;
-      input.readInt(&classId);
+      int32_t classId = input.readInt32();
       compId |= ((static_cast<int64_t>(classId)) << 32);
       break;
     }
     case GeodeTypeIdsImpl::FixedIDByte: {
-      int8_t fixedId;
-      input.read(&fixedId);
-      compId = fixedId;
+      compId = input.read();
       findinternal = true;
       break;
     }
     case GeodeTypeIdsImpl::FixedIDShort: {
-      int16_t fixedId;
-      input.readInt(&fixedId);
-      compId = fixedId;
+      compId = input.readInt16();
       findinternal = true;
       break;
     }
     case GeodeTypeIdsImpl::FixedIDInt: {
-      int32_t fixedId;
-      input.readInt(&fixedId);
+      int32_t fixedId = input.readInt32();
       compId = fixedId;
       findinternal = true;
       break;
diff --git a/cppcache/src/ServerLocation.hpp b/cppcache/src/ServerLocation.hpp
index bb1e548..cbe57f9 100644
--- a/cppcache/src/ServerLocation.hpp
+++ b/cppcache/src/ServerLocation.hpp
@@ -79,8 +79,8 @@ class CPPCACHE_EXPORT ServerLocation : public Serializable {
     output.writeInt(m_port);
   }
   void fromData(DataInput& input) {
-    input.readNativeString(m_serverName);
-    input.readInt((int32_t*)&m_port);
+    m_serverName = input.readNativeString();
+    m_port = input.readInt32();
     makeEpString();
   }
   uint32_t objectSize() const {
diff --git a/cppcache/src/Struct.cpp b/cppcache/src/Struct.cpp
index 6b28f6b..194f585 100644
--- a/cppcache/src/Struct.cpp
+++ b/cppcache/src/Struct.cpp
@@ -35,14 +35,10 @@ Struct::Struct(StructSet* ssPtr, std::vector<SerializablePtr>& fieldValues) {
 }
 
 void Struct::skipClassName(DataInput& input) {
-  uint8_t classByte;
-  input.read(&classByte);
-  if (classByte == GeodeTypeIdsImpl::Class) {
-    uint8_t stringType;
-    input.read(&stringType);  // ignore string type id - assuming its a normal
+  if (input.read() == GeodeTypeIdsImpl::Class) {
+    input.read();  // ignore string type id - assuming its a normal
                               // (under 64k) string.
-    uint16_t len;
-    input.readInt(&len);
+    uint16_t len = input.readInt16();
     input.advanceCursor(len);
   } else {
     throw IllegalStateException(
@@ -65,31 +61,23 @@ int32_t Struct::length() const {
 }
 
 void Struct::fromData(DataInput& input) {
-  int8_t classType;
-  input.read(&classType);
-  input.read(&classType);
+  input.advanceCursor(2); // ignore classType
   skipClassName(input);
 
-  int32_t numOfFields;
-  input.readArrayLen(&numOfFields);
+  int32_t numOfFields = input.readArrayLen();
 
   m_parent = nullptr;
   for (int32_t i = 0; i < numOfFields; i++) {
-    CacheableStringPtr fieldName;
-    // input.readObject(fieldName);
-    input.readNativeString(fieldName);
+    CacheableStringPtr fieldName = input.readNativeString();
     m_fieldNames.emplace(fieldName->asChar(), i);
   }
-  int32_t lengthForTypes;
-  input.readArrayLen(&lengthForTypes);
+  int32_t lengthForTypes = input.readArrayLen();
   skipClassName(input);
   for (int i = 0; i < lengthForTypes; i++) {
-    input.read(&classType);
-    input.read(&classType);
+    input.advanceCursor(2); // ignore classType
     skipClassName(input);
   }
-  int32_t numOfSerializedValues;
-  input.readArrayLen(&numOfSerializedValues);
+  int32_t numOfSerializedValues = input.readArrayLen();
   skipClassName(input);
   for (int i = 0; i < numOfSerializedValues; i++) {
     SerializablePtr val;
diff --git a/cppcache/src/SystemProperties.cpp b/cppcache/src/SystemProperties.cpp
index 09065e3..8cba215 100644
--- a/cppcache/src/SystemProperties.cpp
+++ b/cppcache/src/SystemProperties.cpp
@@ -243,7 +243,7 @@ SystemProperties::SystemProperties(const PropertiesPtr& propertiesPtr,
    public:
     explicit ProcessPropsVisitor(SystemProperties* sysProps)
         : m_sysProps(sysProps) {}
-    void visit(CacheableKeyPtr& key, CacheablePtr& value) {
+    void visit(const CacheableKeyPtr& key, const CacheablePtr& value) {
       CacheableStringPtr prop = key->toString();
       CacheableStringPtr val;
       if (value != nullptr) {
diff --git a/cppcache/src/TXCommitMessage.cpp b/cppcache/src/TXCommitMessage.cpp
index 938f30f..c872aff 100644
--- a/cppcache/src/TXCommitMessage.cpp
+++ b/cppcache/src/TXCommitMessage.cpp
@@ -44,8 +44,7 @@ TXCommitMessage::~TXCommitMessage() {}
 bool TXCommitMessage::isAckRequired() { return false; }
 
 void TXCommitMessage::fromData(DataInput& input) {
-  int32_t pId;
-  input.readInt(&pId);
+  int32_t pId = input.readInt32();
   /*
 if(isAckRequired()) {
 m_processorId = pId;
@@ -55,20 +54,15 @@ m_processorId = -1;
 }
    */
 
-  int32_t m_txIdent;
-  input.readInt(&m_txIdent);
+  int32_t m_txIdent = input.readInt32();
   ClientProxyMembershipID memId;
   memId.fromData(input);
 
-  bool boolVar;
-  input.readBoolean(&boolVar);
-  if (boolVar) {
+  if (input.readBoolean()) {
     memId.fromData(input);
-    int32_t m_lockId;
-    input.readInt(&m_lockId);
+    int32_t m_lockId = input.readInt32();
   }
-  int32_t totalMaxSize;
-  input.readInt(&totalMaxSize);
+  int32_t totalMaxSize = input.readInt32();
 
   int8_t* m_farsideBaseMembershipId;
   int32_t m_farsideBaseMembershipIdLen;
@@ -79,49 +73,27 @@ m_processorId = -1;
     m_farsideBaseMembershipId = nullptr;
   }
 
-  int64_t tid;
-  input.readInt(&tid);
-  int64_t seqId;
-  input.readInt(&seqId);
+  input.readInt64(); // ignore tid
+  input.readInt64(); // ignore seqId
 
-  bool m_needsLargeModCount;
-  input.readBoolean(&m_needsLargeModCount);
+  input.readBoolean(); // ignore needsLargeModCount
 
-  int32_t regionSize;
-  input.readInt(&regionSize);
+  int32_t regionSize = input.readInt32();
   for (int32_t i = 0; i < regionSize; i++) {
     auto rc = std::make_shared<RegionCommit>(m_memberListForVersionStamp);
     rc->fromData(input);
     m_regions.push_back(rc);
   }
 
-  int8_t fixedId;
-  input.read(&fixedId);
+  const auto fixedId = input.read();
   if (fixedId == GeodeTypeIdsImpl::FixedIDByte) {
-    int8_t dfsid;
-    input.read(&dfsid);
+    const auto dfsid = input.read();
     if (dfsid == GeodeTypeIdsImpl::ClientProxyMembershipId) {
       ClientProxyMembershipID memId1;
-      /* adongre
-       * CID 28816: Resource leak (RESOURCE_LEAK)
-       * Calling allocation function
-       * "apache::geode::client::DataInput::readBytes(signed char
-       * **, int *)" on "bytes".
-       * no need to read the bytes, just advance curstor
-       * more performant solution
-       */
-      int32_t len;
-      input.readArrayLen(&len);
-      input.advanceCursor(len);
-      // int8_t* bytes;
-      // int32_t len;
-      // input.readBytes(&bytes, &len);
-      // if ( bytes != nullptr ) {
-      // GF_SAFE_DELETE_ARRAY(bytes);
-      // bytes = nullptr;
-      //}
-      input.readInt(&len);
-      // memId1.fromData(input);
+
+      input.advanceCursor(input.readArrayLen());
+
+      input.readInt32();
     } else {
       LOGERROR(
           "TXCommitMessage::fromData Unexpected type id: %d while "
@@ -141,8 +113,7 @@ m_processorId = -1;
         GF_CACHE_ILLEGAL_STATE_EXCEPTION);
   }
 
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
   for (int j = 0; j < len; j++) {
     CacheablePtr tmp;
     input.readObject(tmp);
diff --git a/cppcache/src/TcrConnection.cpp b/cppcache/src/TcrConnection.cpp
index 91fda78..a6503fd 100644
--- a/cppcache/src/TcrConnection.cpp
+++ b/cppcache/src/TcrConnection.cpp
@@ -404,7 +404,7 @@ bool TcrConnection::InitTcrConnection(
     auto dI = cacheImpl->getCache()->createDataInput(queueSizeMsg->value(),
                                                      queueSizeMsg->length());
     int32_t queueSize = 0;
-    dI->readInt(&queueSize);
+    queueSize = dI->readInt32();
     m_queueSize = queueSize > 0 ? queueSize : 0;
 
     m_endpointObj->setServerQueueStatus(m_hasServerQueue, m_queueSize);
@@ -433,17 +433,15 @@ bool TcrConnection::InitTcrConnection(
       if (static_cast<int8_t>((*arrayLenHeader)[0]) == -2) {
         CacheableBytesPtr recvMsgLenBytes =
             readHandshakeData(2, connectTimeout);
-        auto dI2 = cacheImpl->getCache()->createDataInput(
-            recvMsgLenBytes->value(), recvMsgLenBytes->length());
-        int16_t recvMsgLenShort = 0;
-        dI2->readInt(&recvMsgLenShort);
-        recvMsgLen = recvMsgLenShort;
+        auto dI2 = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
+                      recvMsgLenBytes->value(), recvMsgLenBytes->length());
+        recvMsgLen = dI2->readInt16();
       } else if (static_cast<int8_t>((*arrayLenHeader)[0]) == -3) {
         CacheableBytesPtr recvMsgLenBytes =
             readHandshakeData(4, connectTimeout);
-        auto dI2 = cacheImpl->getCache()->createDataInput(
-            recvMsgLenBytes->value(), recvMsgLenBytes->length());
-        dI2->readInt(&recvMsgLen);
+        auto dI2 = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
+                      recvMsgLenBytes->value(), recvMsgLenBytes->length());
+        recvMsgLen = dI2->readInt32();
       }
       auto recvMessage = readHandshakeData(recvMsgLen, connectTimeout);
       // If the distributed member has not been set yet, set it.
@@ -452,7 +450,7 @@ bool TcrConnection::InitTcrConnection(
         auto diForClient = cacheImpl->getCache()->createDataInput(
             recvMessage->value(), recvMessage->length());
         ClientProxyMembershipIDPtr member;
-        diForClient->readObject(member);
+        member = diForClient->readObject<ClientProxyMembershipID>();
         auto memId = cacheImpl->getMemberListForVersionStamp()->add(member);
         getEndpointObject()->setDistributedMemberID(memId);
         LOGDEBUG("Deserialized distributed member Id %d", memId);
@@ -460,20 +458,17 @@ bool TcrConnection::InitTcrConnection(
     }
 
     CacheableBytesPtr recvMsgLenBytes = readHandshakeData(2, connectTimeout);
-    auto dI3 = cacheImpl->getCache()->createDataInput(
-        recvMsgLenBytes->value(), recvMsgLenBytes->length());
-    uint16_t recvMsgLen2 = 0;
-    dI3->readInt(&recvMsgLen2);
+    auto dI3 = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
+                  recvMsgLenBytes->value(), recvMsgLenBytes->length());
+    uint16_t recvMsgLen2 = dI3->readInt16();
     CacheableBytesPtr recvMessage =
         readHandshakeData(recvMsgLen2, connectTimeout);
 
     if (!isClientNotification) {
       CacheableBytesPtr deltaEnabledMsg = readHandshakeData(1, connectTimeout);
-      auto di =
-          cacheImpl->getCache()->createDataInput(deltaEnabledMsg->value(), 1);
-      bool isDeltaEnabledOnServer;
-      di->readBoolean(&isDeltaEnabledOnServer);
-      ThinClientBaseDM::setDeltaEnabledOnServer(isDeltaEnabledOnServer);
+      auto di = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
+                   deltaEnabledMsg->value(), 1);
+      ThinClientBaseDM::setDeltaEnabledOnServer(di->readBoolean());
     }
 
     switch ((*acceptanceCode)[0]) {
@@ -953,8 +948,8 @@ char* TcrConnection::readMessage(size_t* recvLen, uint32_t receiveTimeoutSec,
 
   auto input = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
       reinterpret_cast<uint8_t*>(msg_header), HEADER_LENGTH);
-  input->readInt(&msgType);
-  input->readInt(&msgLen);
+  msgType = input->readInt32();
+  msgLen = input->readInt32();
   //  check that message length is valid.
   if (!(msgLen > 0) && request == TcrMessage::GET_CLIENT_PR_METADATA) {
     char* fullMessage;
@@ -1063,16 +1058,14 @@ void TcrConnection::readMessageChunked(TcrMessageReply& reply,
 
   auto input = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
       msg_header, HDR_LEN_12);
-  int32_t msgType;
-  input->readInt(&msgType);
+  int32_t msgType = input->readInt32();
   reply.setMessageType(msgType);
   int32_t txId;
-  int32_t numOfParts;
-  input->readInt(&numOfParts);
+  int32_t numOfParts = input->readInt32();
   LOGDEBUG("TcrConnection::readMessageChunked numberof parts = %d ",
            numOfParts);
   // input->advanceCursor(4);
-  input->readInt(&txId);
+  txId = input->readInt32();
   reply.setTransId(txId);
 
   // bool isLastChunk = false;
@@ -1132,11 +1125,10 @@ void TcrConnection::readMessageChunked(TcrMessageReply& reply,
         m_connectionManager->getCacheImpl()->getCache()->createDataInput(
             msg_header + HDR_LEN_12, HDR_LEN);
     int32_t chunkLen;
-    input->readInt(&chunkLen);
+    chunkLen = input->readInt32();
     //  check that chunk length is valid.
     GF_DEV_ASSERT(chunkLen > 0);
-    // input->readBoolean(&isLastChunk);
-    input->read(&isLastChunk);
+    isLastChunk = input->read();
 
     uint8_t* chunk_body;
     GF_NEW(chunk_body, uint8_t[chunkLen]);
@@ -1292,11 +1284,9 @@ CacheableBytesPtr TcrConnection::readHandshakeByteArray(
 // read a byte array
 uint32_t TcrConnection::readHandshakeArraySize(uint32_t connectTimeout) {
   CacheableBytesPtr codeBytes = readHandshakeData(1, connectTimeout);
-  auto codeDI =
-      m_connectionManager->getCacheImpl()->getCache()->createDataInput(
-          codeBytes->value(), codeBytes->length());
-  uint8_t code = 0;
-  codeDI->read(&code);
+  auto codeDI = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
+                   codeBytes->value(), codeBytes->length());
+  uint8_t code = codeDI->read();
   uint32_t arraySize = 0;
   if (code == 0xFF) {
     return 0;
@@ -1305,19 +1295,13 @@ uint32_t TcrConnection::readHandshakeArraySize(uint32_t connectTimeout) {
     if (tempLen > 252) {  // 252 is java's ((byte)-4 && 0xFF)
       if (code == 0xFE) {
         CacheableBytesPtr lenBytes = readHandshakeData(2, connectTimeout);
-        auto lenDI =
-            m_connectionManager->getCacheImpl()->getCache()->createDataInput(
-                lenBytes->value(), lenBytes->length());
-        uint16_t val;
-        lenDI->readInt(&val);
+        auto lenDI = m_connectionManager->getCacheImpl()->getCache()->createDataInput(lenBytes->value(), lenBytes->length());
+        uint16_t val = lenDI->readInt16();
         tempLen = val;
       } else if (code == 0xFD) {
         CacheableBytesPtr lenBytes = readHandshakeData(4, connectTimeout);
-        auto lenDI =
-            m_connectionManager->getCacheImpl()->getCache()->createDataInput(
-                lenBytes->value(), lenBytes->length());
-        uint32_t val;
-        lenDI->readInt(&val);
+        auto lenDI = m_connectionManager->getCacheImpl()->getCache()->createDataInput(lenBytes->value(), lenBytes->length());
+        uint32_t val = lenDI->readInt32();
         tempLen = val;
       } else {
         GF_SAFE_DELETE_CON(m_conn);
@@ -1406,10 +1390,8 @@ int32_t TcrConnection::readHandShakeInt(uint32_t connectTimeout) {
     }
   }
 
-  auto di = m_connectionManager->getCacheImpl()->getCache()->createDataInput(
-      recvMessage, 4);
-  int32_t val;
-  di->readInt(&val);
+  auto di = m_connectionManager->getCacheImpl()->getCache()->createDataInput(recvMessage, 4);
+  int32_t val = di->readInt32();
 
   GF_SAFE_DELETE_ARRAY(recvMessage);
 
@@ -1443,13 +1425,10 @@ CacheableStringPtr TcrConnection::readHandshakeString(uint32_t connectTimeout) {
       break;
     }
     case GF_STRING: {
-      uint16_t shortLen = 0;
       CacheableBytesPtr lenBytes = readHandshakeData(2, connectTimeout);
-      auto lenDI =
-          m_connectionManager->getCacheImpl()->getCache()->createDataInput(
-              lenBytes->value(), lenBytes->length());
-      lenDI->readInt(&shortLen);
-      length = shortLen;
+      auto lenDI = m_connectionManager->getCacheImpl()->getCache()->createDataInput(lenBytes->value(), lenBytes->length());
+      length = lenDI->readInt16();
+
       break;
     }
     default: {
diff --git a/cppcache/src/TcrMessage.cpp b/cppcache/src/TcrMessage.cpp
index 6a3a330..cd3413a 100644
--- a/cppcache/src/TcrMessage.cpp
+++ b/cppcache/src/TcrMessage.cpp
@@ -98,53 +98,29 @@ void TcrMessage::writeByteAndTimeOutPart(uint8_t byteValue, int32_t timeout) {
 }
 
 void TcrMessage::readBooleanPartAsObject(DataInput& input, bool* boolVal) {
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  bool isObj;
-  input.readBoolean(&isObj);
+  int32_t lenObj = input.readInt32();
+  const auto isObj = input.readBoolean();
   if (lenObj > 0) {
     if (isObj) {
-      // CacheableBooleanPtr cip;
-      // input.readObject(cip);
-      //*boolVal = cip->value();
       bool bVal = input.readNativeBool();
       *boolVal = bVal;
     }
   }
-  /*
-int32_t lenObj;
-input.readInt( &lenObj );
-if(lenObj!=2)
-  throw Exception("Invalid boolean length, should have been 2");
-
-bool isObj;
-input.readBoolean( &isObj );
-if(!isObj)
-  throw Exception("boolean is not object");
-char tmp[2];
-input.readBytesOnly((int8_t*)tmp, (int32_t)2);
-*boolVal = tmp[1]== 0? false : true;
-*/
 }
 
 void TcrMessage::readOldValue(DataInput& input) {
-  int32_t lenObj;
-  int8_t isObj;
-  input.readInt(&lenObj);
-  input.read(&isObj);
+  int32_t lenObj = input.readInt32();
+  input.read(); //ignore isObj
   CacheablePtr value;
   input.readObject(value);  // we are not using this value currently
 }
 
 void TcrMessage::readPrMetaData(DataInput& input) {
-  int32_t lenObj;
-  int8_t isObj;
-  input.readInt(&lenObj);
-  input.read(&isObj);
-  input.read(&isObj);  // read refresh meta data byte
-  m_metaDataVersion = isObj;
+  int32_t lenObj = input.readInt32();
+  input.read(); // ignore
+  m_metaDataVersion = input.read();// read refresh meta data byte
   if (lenObj == 2) {
-    input.read(&m_serverGroupVersion);
+    m_serverGroupVersion = input.read();
     LOGDEBUG("Single-hop m_serverGroupVersion in message reply is %d",
              m_serverGroupVersion);
   }
@@ -153,25 +129,20 @@ void TcrMessage::readPrMetaData(DataInput& input) {
 VersionTagPtr TcrMessage::readVersionTagPart(
     DataInput& input, uint16_t endpointMemId,
     MemberListForVersionStamp& memberListForVersionStamp) {
-  int8_t isObj;
-  input.read(&isObj);
+  auto isObj= input.read();
   VersionTagPtr versionTag;
 
   if (isObj == GeodeTypeIds::NullObj) return versionTag;
 
   if (isObj == GeodeTypeIdsImpl::FixedIDByte) {
     versionTag = std::make_shared<VersionTag>(memberListForVersionStamp);
-    int8_t fixedId;
-    input.read(&fixedId);
-    if (fixedId == GeodeTypeIdsImpl::VersionTag) {
+    if (input.read() == GeodeTypeIdsImpl::VersionTag) {
       versionTag->fromData(input);
       versionTag->replaceNullMemberId(endpointMemId);
       return versionTag;
     }
   } else if (isObj == GeodeTypeIdsImpl::FixedIDShort) {
-    int16_t fixedId;
-    input.readInt(&fixedId);
-    if (fixedId == GeodeTypeIdsImpl::DiskVersionTag) {
+    if (input.readInt16() == GeodeTypeIdsImpl::DiskVersionTag) {
       DiskVersionTag* disk = new DiskVersionTag(memberListForVersionStamp);
       disk->fromData(input);
       versionTag.reset(disk);
@@ -184,10 +155,8 @@ VersionTagPtr TcrMessage::readVersionTagPart(
 void TcrMessage::readVersionTag(
     DataInput& input, uint16_t endpointMemId,
     MemberListForVersionStamp& memberListForVersionStamp) {
-  int32_t lenObj;
-  int8_t isObj;
-  input.readInt(&lenObj);
-  input.read(&isObj);
+  int32_t lenObj = input.readInt32();
+  input.read(); // ignore byte
 
   if (lenObj == 0) return;
   auto versionTag = TcrMessage::readVersionTagPart(input, endpointMemId,
@@ -196,33 +165,24 @@ void TcrMessage::readVersionTag(
 }
 
 void TcrMessage::readIntPart(DataInput& input, uint32_t* intValue) {
-  uint32_t intLen;
-  input.readInt(&intLen);
+  uint32_t intLen = input.readInt32();
   if (intLen != 4) throw Exception("int length should have been 4");
-  int8_t isObj;
-  input.read(&isObj);
-  if (isObj) throw Exception("Integer is not an object");
-  input.readInt(intValue);
+  if (input.read()) throw Exception("Integer is not an object");
+  *intValue = input.readInt32();
 }
 
 void TcrMessage::readLongPart(DataInput& input, uint64_t* intValue) {
-  uint32_t longLen;
-  input.readInt(&longLen);
+  uint32_t longLen = input.readInt32();
   if (longLen != 8) throw Exception("long length should have been 8");
-  int8_t isObj;
-  input.read(&isObj);
-  if (isObj) throw Exception("Long is not an object");
-  input.readInt(intValue);
+  if (input.read()) throw Exception("Long is not an object");
+  *intValue = input.readInt64();
 }
 
 void TcrMessage::readStringPart(DataInput& input, uint32_t* len, char** str) {
   char* ts;
-  int32_t sl;
-  input.readInt(&sl);
+  int32_t sl = input.readInt32();
   ts = new char[sl];
-  int8_t isObj;
-  input.read(&isObj);
-  if (isObj) throw Exception("String is not an object");
+  if (input.read()) throw Exception("String is not an object");
   input.readBytesOnly(reinterpret_cast<int8_t*>(ts), sl);
   *len = sl;
   *str = ts;
@@ -248,10 +208,8 @@ void TcrMessage::readCqsPart(DataInput& input) {
 
 inline void TcrMessage::readCallbackObjectPart(DataInput& input,
                                                bool defaultString) {
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  bool isObj;
-  input.readBoolean(&isObj);
+  int32_t lenObj = input.readInt32();
+  const auto isObj = input.readBoolean();
   if (lenObj > 0) {
     if (isObj) {
       input.readObject(m_callbackArgument);
@@ -273,12 +231,8 @@ inline void TcrMessage::readCallbackObjectPart(DataInput& input,
 }
 
 inline void TcrMessage::readObjectPart(DataInput& input, bool defaultString) {
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  // bool isObj;
-  // input.readBoolean( &isObj );
-  int8_t isObj;
-  input.read(&isObj);
+  int32_t lenObj = input.readInt32();
+  auto isObj = input.read();
   if (lenObj > 0) {
     if (isObj == 1) {
       input.readObject(m_value);
@@ -314,10 +268,8 @@ void TcrMessage::readSecureObjectPart(DataInput& input, bool defaultString,
     }
   }
 
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  bool isObj;
-  input.readBoolean(&isObj);
+  int32_t lenObj = input.readInt32();
+  const auto isObj = input.readBoolean();
   LOGDEBUG(
       "TcrMessage::readSecureObjectPart lenObj = %d isObj = %d, "
       "m_msgTypeRequest = %d defaultString = %d ",
@@ -355,10 +307,8 @@ void TcrMessage::readSecureObjectPart(DataInput& input, bool defaultString,
 void TcrMessage::readUniqueIDObjectPart(DataInput& input) {
   LOGDEBUG("TcrMessage::readUniqueIDObjectPart");
 
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  bool isObj;
-  input.readBoolean(&isObj);
+  int32_t lenObj = input.readInt32();
+  const auto isObj = input.readBoolean();
   LOGDEBUG("TcrMessage::readUniqueIDObjectPart lenObj = %d isObj = %d", lenObj,
            isObj);
   if (lenObj > 0) {
@@ -372,9 +322,7 @@ int64_t TcrMessage::getConnectionId(TcrConnection* conn) {
     CacheableBytesPtr tmp = conn->decryptBytes(m_connectionIDBytes);
     auto di = m_tcdm->getConnectionManager().getCacheImpl()->getCache()->createDataInput(
               tmp->value(), tmp->length());
-    int64_t connid;
-    di->readInt(&connid);
-    return connid;
+    return di->readInt64();
   } else {
     LOGWARN("Returning 0 as internal connection ID msgtype = %d ", m_msgType);
     return 0;
@@ -389,36 +337,28 @@ int64_t TcrMessage::getUniqueId(TcrConnection* conn) {
 
     auto di = m_tcdm->getConnectionManager().getCacheImpl()->getCache()->createDataInput(
               tmp->value(), tmp->length());
-    int64_t uniqueid;
-    di->readInt(&uniqueid);
-
-    return uniqueid;
+    return di->readInt64();
   }
   return 0;
 }
 
 inline void TcrMessage::readFailedNodePart(DataInput& input,
                                            bool defaultString) {
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  bool isObj;
-  input.readBoolean(&isObj);
+  int32_t lenObj = input.readInt32();
+  const auto isObj = input.readBoolean();
   m_failedNode = CacheableHashSet::create();
-  int8_t typeId = 0;
-  input.read(&typeId);
+  input.read(); // ignore typeId
   // input.readDirectObject(m_failedNode, typeId);
   m_failedNode->fromData(input);
   LOGDEBUG("readFailedNodePart m_failedNode size = %d ", m_failedNode->size());
 }
 
 inline void TcrMessage::readKeyPart(DataInput& input) {
-  int32_t lenObj;
-  input.readInt(&lenObj);
-  bool isObj;
-  input.readBoolean(&isObj);
+  int32_t lenObj = input.readInt32();
+  const auto isObj = input.readBoolean();
   if (lenObj > 0) {
     if (isObj) {
-      input.readObject(m_key);
+      m_key = input.readObject<CacheableKey>();
     } else {
       m_key = std::static_pointer_cast<CacheableKey>(
           readCacheableString(input, lenObj));
@@ -449,15 +389,14 @@ SerializablePtr TcrMessage::readCacheableString(DataInput& input, int lenObj) {
       input.rewindCursor(2);
       writeInt(const_cast<uint8_t*>(input.currentBufferPosition()),
                static_cast<uint16_t>(lenObj));
-      input.readDirectObject(
-          sPtr, static_cast<int8_t>(
+      sPtr = input.readDirectObject(
+          static_cast<int8_t>(
                     apache::geode::client::GeodeTypeIds::CacheableASCIIString));
     } else {
       input.rewindCursor(4);
       writeInt(const_cast<uint8_t*>(input.currentBufferPosition()),
                static_cast<uint32_t>(lenObj));
-      input.readDirectObject(
-          sPtr,
+      sPtr = input.readDirectObject(
           static_cast<int8_t>(
               apache::geode::client::GeodeTypeIds::CacheableASCIIStringHuge));
     }
@@ -466,15 +405,15 @@ SerializablePtr TcrMessage::readCacheableString(DataInput& input, int lenObj) {
       input.rewindCursor(2);
       writeInt(const_cast<uint8_t*>(input.currentBufferPosition()),
                static_cast<uint16_t>(lenObj));
-      input.readDirectObject(
-          sPtr, static_cast<int8_t>(
+      sPtr = input.readDirectObject(
+          static_cast<int8_t>(
                     apache::geode::client::GeodeTypeIds::CacheableString));
     } else {
       input.rewindCursor(4);
       writeInt(const_cast<uint8_t*>(input.currentBufferPosition()),
                static_cast<uint32_t>(lenObj));
-      input.readDirectObject(
-          sPtr, static_cast<int8_t>(
+      sPtr = input.readDirectObject(
+          static_cast<int8_t>(
                     apache::geode::client::GeodeTypeIds::CacheableStringHuge));
     }
   }
@@ -483,8 +422,6 @@ SerializablePtr TcrMessage::readCacheableString(DataInput& input, int lenObj) {
 }
 
 SerializablePtr TcrMessage::readCacheableBytes(DataInput& input, int lenObj) {
-  SerializablePtr sPtr;
-
   if (lenObj <= 252) {  // 252 is java's ((byte)-4 && 0xFF)
     input.rewindCursor(1);
     uint8_t* buffer = const_cast<uint8_t*>(input.currentBufferPosition());
@@ -501,11 +438,8 @@ SerializablePtr TcrMessage::readCacheableBytes(DataInput& input, int lenObj) {
     writeInt(buffer + 1, static_cast<uint32_t>(lenObj));
   }
 
-  input.readDirectObject(
-      sPtr,
+  return input.readDirectObject(
       static_cast<int8_t>(apache::geode::client::GeodeTypeIds::CacheableBytes));
-
-  return sPtr;
 }
 
 bool TcrMessage::readExceptionPart(DataInput& input, uint8_t isLastChunk,
@@ -1001,14 +935,13 @@ void TcrMessage::handleByteArrayResponse(
   //  if(m_tcdm == nullptr)
   //  throw IllegalArgumentException("Pool is nullptr in TcrMessage");
   input->setPoolName(getPoolName());
-  input->readInt(&m_msgType);
+  m_msgType = input->readInt32();
   int32_t msglen;
-  input->readInt(&msglen);
+  msglen = input->readInt32();
   int32_t numparts;
-  input->readInt(&numparts);
-  input->readInt(&m_txId);
-  int8_t earlyack;
-  input->read(&earlyack);
+  numparts = input->readInt32();
+  m_txId = input->readInt32();
+  auto earlyack = input->read();
   LOGDEBUG(
       "handleByteArrayResponse m_msgType = %d isSecurityOn = %d requesttype "
       "=%d",
@@ -1044,20 +977,13 @@ void TcrMessage::handleByteArrayResponse(
         input->advanceCursor(5);  // part header
         m_value = serializationRegistry.deserialize(*input);
       } else if (m_msgTypeRequest == TcrMessage::GET_FUNCTION_ATTRIBUTES) {
-        int32_t lenObj;
-        input->readInt(&lenObj);
-        int8_t isObj;
-        input->read(&isObj);
-        int8_t hR;
-        input->read(&hR);
-        int8_t isHA;
-        input->read(&isHA);
-        int8_t oFW;
-        input->read(&oFW);
+        int32_t lenObj = input->readInt32();
+        input->advanceCursor(1); // ignore byte
+
         m_functionAttributes = new std::vector<int8_t>();
-        m_functionAttributes->push_back(hR);
-        m_functionAttributes->push_back(isHA);
-        m_functionAttributes->push_back(oFW);
+        m_functionAttributes->push_back(input->read());
+        m_functionAttributes->push_back(input->read());
+        m_functionAttributes->push_back(input->read());
       } else if (m_msgTypeRequest == TcrMessage::REQUEST) {
         int32_t receivednumparts = 2;
         readObjectPart(*input);
@@ -1089,13 +1015,11 @@ void TcrMessage::handleByteArrayResponse(
           if (m_isCallBackArguement) {
             readCallbackObjectPart(*input);
           } else {
-            int32_t lenObj;
-            input->readInt(&lenObj);
-            bool isObj;
-            input->readBoolean(&isObj);
-            input->read(&m_metaDataVersion);
+            int32_t lenObj = input->readInt32();
+            input->readBoolean();
+            m_metaDataVersion = input->read();
             if (lenObj == 2) {
-              input->read(&m_serverGroupVersion);
+              m_serverGroupVersion = input->read();
               LOGDEBUG(
                   "Single-hop m_serverGroupVersion in message response is %d",
                   m_serverGroupVersion);
@@ -1103,15 +1027,13 @@ void TcrMessage::handleByteArrayResponse(
           }
         } else if (numparts > 2) {
           skipParts(*input, 1);
-          int32_t lenObj;
-          input->readInt(&lenObj);
-          bool isObj;
-          input->readBoolean(&isObj);
-          input->read(&m_metaDataVersion);
+          int32_t lenObj = input->readInt32();
+          input->readBoolean();
+          m_metaDataVersion = input->read();
           LOGFINE("Single-hop metadata version in message response is %d",
                   m_metaDataVersion);
           if (lenObj == 2) {
-            input->read(&m_serverGroupVersion);
+            m_serverGroupVersion = input->read();
             LOGDEBUG(
                 "Single-hop m_serverGroupVersion in message response is %d",
                 m_serverGroupVersion);
@@ -1207,10 +1129,8 @@ void TcrMessage::handleByteArrayResponse(
     }
     case TcrMessage::LOCAL_INVALIDATE:
     case TcrMessage::LOCAL_DESTROY: {
-      int32_t regionLen;
-      input->readInt(&regionLen);
-      int8_t isObj;
-      input->read(&isObj);
+      int32_t regionLen = input->readInt32();
+      input->advanceCursor(1); // ignore byte
       char* regname = nullptr;
       regname = new char[regionLen + 1];
       DeleteArray<char> delRegName(regname);
@@ -1244,10 +1164,8 @@ void TcrMessage::handleByteArrayResponse(
 
     case TcrMessage::LOCAL_CREATE:
     case TcrMessage::LOCAL_UPDATE: {
-      int32_t regionLen;
-      input->readInt(&regionLen);
-      int8_t isObj;
-      input->read(&isObj);
+      int32_t regionLen = input->readInt32();
+      input->advanceCursor(1); // ignore byte
       char* regname = nullptr;
       regname = new char[regionLen + 1];
       DeleteArray<char> delRegName(regname);
@@ -1260,10 +1178,9 @@ void TcrMessage::handleByteArrayResponse(
       bool isDelta = false;
       readBooleanPartAsObject(*input, &isDelta);
       if (isDelta) {
-        input->readInt(&m_deltaBytesLen);
+        m_deltaBytesLen = input->readInt32();
 
-        int8_t isObj;
-        input->read(&isObj);
+        input->advanceCursor(1); // ignore byte
         m_deltaBytes = new uint8_t[m_deltaBytesLen];
         input->readBytesOnly(m_deltaBytes, m_deltaBytesLen);
         m_delta = m_tcdm->getConnectionManager().getCacheImpl()->getCache()->createDataInput(
@@ -1299,10 +1216,8 @@ void TcrMessage::handleByteArrayResponse(
 
     case TcrMessage::LOCAL_DESTROY_REGION:
     case TcrMessage::CLEAR_REGION: {
-      int32_t regionLen;
-      input->readInt(&regionLen);
-      int8_t isObj;
-      input->read(&isObj);
+      int32_t regionLen = input->readInt32();
+      input->advanceCursor(1); // ignore byte
       char* regname = nullptr;
       regname = new char[regionLen + 1];
       DeleteArray<char> delRegName(regname);
@@ -1329,25 +1244,20 @@ void TcrMessage::handleByteArrayResponse(
       }
       m_metadata = new std::vector<std::vector<BucketServerLocationPtr> >();
       for (int32_t i = 0; i < numparts; i++) {
-        int32_t bits32;
-        input->readInt(&bits32);  // partlen;
-        int8_t bits8;
-        input->read(&bits8);  // isObj;
-        input->read(&bits8);  // cacheable vector typeid
+        int32_t bits32 = input->readInt32();  // partlen;
+        input->read();  // isObj;
+        auto bits8 = input->read();  // cacheable vector typeid
         LOGDEBUG("Expected typeID %d, got %d", GeodeTypeIds::CacheableArrayList,
                  bits8);
 
-        input->readArrayLen(&bits32);  // array length
+        bits32 = input->readArrayLen();  // array length
         LOGDEBUG("Array length = %d ", bits32);
         if (bits32 > 0) {
           std::vector<BucketServerLocationPtr> bucketServerLocations;
           for (int32_t index = 0; index < bits32; index++) {
-            int8_t header;
-            input->read(&header);  // ignore DS typeid
-            input->read(&header);  // ignore CLASS typeid
-            input->read(&header);  // ignore string typeid
-            uint16_t classLen;
-            input->readInt(&classLen);  // Read classLen
+            // ignore DS typeid, CLASS typeid, and string typeid
+            input->advanceCursor(3);
+            uint16_t classLen = input->readInt16();  // Read classLen
             input->advanceCursor(classLen);
             auto location = std::make_shared<BucketServerLocation>();
             location->fromData(*input);
@@ -1370,41 +1280,34 @@ void TcrMessage::handleByteArrayResponse(
     }
 
     case TcrMessage::RESPONSE_CLIENT_PARTITION_ATTRIBUTES: {
-      int32_t bits32;
-      input->readInt(&bits32);  // partlen;
-      int8_t bits8;
-      input->read(&bits8);  // isObj;
+      int32_t bits32 = input->readInt32();  // partlen;
+      input->read();  //ignore isObj;
 
       m_bucketCount = input->readNativeInt32();  // PART1 = bucketCount
 
-      input->readInt(&bits32);  // partlen;
-      input->read(&bits8);      // isObj;
+      bits32 = input->readInt32();  // partlen;
+      input->read();      //ignore isObj;
       if (bits32 > 0) {
-        input->readNativeString(m_colocatedWith);  // PART2 = colocatedwith
+        m_colocatedWith = input->readNativeString();  // PART2 = colocatedwith
       }
 
       if (numparts == 4) {
-        input->readInt(&bits32);  // partlen;
-        input->read(&bits8);      // isObj;
+        bits32 = input->readInt32();  // partlen;
+        input->read();      //ignore isObj;
         if (bits32 > 0) {
-          input->readNativeString(
-              m_partitionResolverName);  // PART3 = partitionresolvername
+          m_partitionResolverName = input->readNativeString();  // PART3 = partitionresolvername
         }
 
-        input->readInt(&bits32);  // partlen;
-        input->read(&bits8);      // isObj;
-        input->read(&bits8);      // cacheable CacheableHashSet typeid
+        bits32 = input->readInt32();  // partlen;
+        input->read();      // ignore isObj;
+        input->read();      // ignore cacheable CacheableHashSet typeid
 
-        input->readArrayLen(&bits32);  // array length
+        bits32 = input->readArrayLen();  // array length
         if (bits32 > 0) {
           m_fpaSet = new std::vector<FixedPartitionAttributesImplPtr>();
           for (int32_t index = 0; index < bits32; index++) {
-            int8_t header;
-            input->read(&header);  // ignore DS typeid
-            input->read(&header);  // ignore CLASS typeid
-            input->read(&header);  // ignore string typeid
-            uint16_t classLen;
-            input->readInt(&classLen);  // Read classLen
+            input->advanceCursor(3);  // ignore DS typeid, CLASS typeid, string typeid
+            uint16_t classLen = input->readInt16();  // Read classLen
             input->advanceCursor(classLen);
             auto fpa = std::make_shared<FixedPartitionAttributesImpl>();
             fpa->fromData(*input);  // PART4 = set of FixedAttributes.
@@ -1419,10 +1322,8 @@ void TcrMessage::handleByteArrayResponse(
     }
     case TcrMessage::TOMBSTONE_OPERATION: {
       uint32_t tombstoneOpType;
-      int32_t regionLen;
-      input->readInt(&regionLen);
-      int8_t isObj;
-      input->read(&isObj);
+      int32_t regionLen = input->readInt32();
+      input->read();
       char* regname = nullptr;
 
       regname = new char[regionLen + 1];
@@ -1431,9 +1332,8 @@ void TcrMessage::handleByteArrayResponse(
       regname[regionLen] = '\0';
       m_regionName = regname;
       readIntPart(*input, &tombstoneOpType);  // partlen;
-      int32_t len;
-      input->readInt(&len);
-      input->read(&isObj);
+      int32_t len = input->readInt32();
+      input->read();
 
       if (tombstoneOpType == 0) {
         if (m_tombstoneVersions == nullptr) {
@@ -2957,8 +2857,7 @@ void TcrMessage::setTimeout(uint32_t timeout) { m_timeout = timeout; }
 void TcrMessage::skipParts(DataInput& input, int32_t numParts) {
   while (numParts > 0) {
     numParts--;
-    int32_t partLen;
-    input.readInt(&partLen);
+    int32_t partLen = input.readInt32();
     LOGDEBUG("TcrMessage::skipParts partLen= %d ", partLen);
     input.advanceCursor(partLen + 1);  // Skip the whole part including "isObj"
   }
@@ -2972,24 +2871,19 @@ void TcrMessage::readEventIdPart(DataInput& input, bool skip, int32_t parts) {
 
   // read the eventid part
 
-  int32_t eventIdLen;
-  int8_t isObj;
-
-  input.readInt(&eventIdLen);
-  input.read(&isObj);
+  int32_t eventIdLen = input.readInt32();
+  const auto isObj = input.read();
 
   GF_D_ASSERT(isObj != 0);
 
-  input.readObject(m_eventid);
+  m_eventid = input.readObject<EventId>();
 }
 
 DSMemberForVersionStampPtr TcrMessage::readDSMember(
     apache::geode::client::DataInput& input) {
-  uint8_t typeidLen;
-  input.read(&typeidLen);
+  uint8_t typeidLen = input.read();
   if (typeidLen == 1) {
-    uint8_t typeidofMember;
-    input.read(&typeidofMember);
+    uint8_t typeidofMember = input.read();
     if (typeidofMember != GeodeTypeIdsImpl::InternalDistributedMember) {
       throw Exception(
           "Reading DSMember. Expecting type id 92 for "
@@ -3001,8 +2895,7 @@ DSMemberForVersionStampPtr TcrMessage::readDSMember(
     memId->fromData(input);
     return (DSMemberForVersionStampPtr)memId;
   } else if (typeidLen == 2) {
-    uint16_t typeidofMember;
-    input.readInt(&typeidofMember);
+    uint16_t typeidofMember = input.readInt16();
     if (typeidofMember != GeodeTypeIdsImpl::DiskStoreId) {
       throw Exception(
           "Reading DSMember. Expecting type id 2133 for DiskStoreId. ");
@@ -3018,27 +2911,21 @@ DSMemberForVersionStampPtr TcrMessage::readDSMember(
 }
 void TcrMessage::readHashMapForGCVersions(
     apache::geode::client::DataInput& input, CacheableHashMapPtr& value) {
-  uint8_t hashmaptypeid;
-
-  input.read(&hashmaptypeid);
+  uint8_t hashmaptypeid = input.read();
   if (hashmaptypeid != GeodeTypeIds::CacheableHashMap) {
     throw Exception(
         "Reading HashMap For GC versions. Expecting type id of hash map. ");
   }
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
 
   if (len > 0) {
     CacheableKeyPtr key;
     CacheablePtr val;
     for (int32_t index = 0; index < len; index++) {
       key = readDSMember(input);
-      uint8_t versiontype;
-      int64_t version;
-      input.read(&versiontype);
-      input.readInt(&version);
+      uint8_t versiontype = input.read();
 
-      auto valVersion = CacheableInt64::create(version);
+      auto valVersion = CacheableInt64::create(input.readInt64());
       auto keyPtr = std::dynamic_pointer_cast<CacheableKey>(key);
       auto valVersionPtr = std::dynamic_pointer_cast<Cacheable>(valVersion);
 
@@ -3055,22 +2942,18 @@ void TcrMessage::readHashMapForGCVersions(
 
 void TcrMessage::readHashSetForGCVersions(
     apache::geode::client::DataInput& input, CacheableHashSetPtr& value) {
-  uint8_t hashsettypeid;
-
-  input.read(&hashsettypeid);
+  uint8_t hashsettypeid = input.read();
   if (hashsettypeid != GeodeTypeIds::CacheableHashSet) {
     throw Exception(
         "Reading HashSet For GC versions. Expecting type id of hash set. ");
   }
-  int32_t len;
-  input.readArrayLen(&len);
+  int32_t len = input.readArrayLen();
 
   if (len > 0) {
     CacheableKeyPtr key;
     CacheablePtr val;
     for (int32_t index = 0; index < len; index++) {
-      CacheableKeyPtr keyPtr;
-      input.readObject(keyPtr);
+      CacheableKeyPtr keyPtr = input.readObject<CacheableKey>();
       value->insert(keyPtr);
     }
   }
diff --git a/cppcache/src/TcrMessage.hpp b/cppcache/src/TcrMessage.hpp
index c82cf01..83b015f 100644
--- a/cppcache/src/TcrMessage.hpp
+++ b/cppcache/src/TcrMessage.hpp
@@ -1249,9 +1249,8 @@ class TcrMessageHelper {
       TcrMessage& msg, DataInput& input, uint8_t expectedFirstType,
       int32_t expectedPartType, const char* methodName, uint32_t& partLen,
       uint8_t isLastChunk) {
-    input.readInt(&partLen);
-    bool isObj;
-    input.readBoolean(&isObj);
+    partLen = input.readInt32();
+    const auto isObj = input.readBoolean();
 
     if (partLen == 0) {
       // special null object is case for scalar query result
@@ -1268,8 +1267,7 @@ class TcrMessageHelper {
       return EXCEPTION;
     }
 
-    uint8_t partType;
-    input.read(&partType);
+    uint8_t partType = input.read();
     int32_t compId = partType;
 
     //  ugly hack to check for exception chunk
@@ -1303,13 +1301,11 @@ class TcrMessageHelper {
       }
       // This is for GETALL
       if (expectedFirstType == GeodeTypeIdsImpl::FixedIDShort) {
-        int16_t shortId;
-        input.readInt(&shortId);
-        compId = shortId;
+        compId = input.readInt16();;
       }  // This is for QUERY or REGISTER INTEREST.
       else if (expectedFirstType == GeodeTypeIdsImpl::FixedIDByte ||
                expectedFirstType == 0) {
-        input.read(&partType);
+        partType = input.read();
         compId = partType;
       }
     }
@@ -1327,9 +1323,8 @@ class TcrMessageHelper {
                                            const char* methodName,
                                            uint32_t& partLen,
                                            uint8_t isLastChunk) {
-    input.readInt(&partLen);
-    bool isObj;
-    input.readBoolean(&isObj);
+    partLen = input.readInt32();
+    const auto isObj = input.readBoolean();
 
     if (partLen == 0) {
       // special null object is case for scalar query result
@@ -1344,8 +1339,7 @@ class TcrMessageHelper {
       throw MessageException(exMsg);
     }
 
-    int8_t partType;
-    input.read(&partType);
+    const auto partType = input.read();
     //  ugly hack to check for exception chunk
     if (partType == GeodeTypeIdsImpl::JavaSerializable) {
       input.reset();
diff --git a/cppcache/src/ThinClientLocatorHelper.cpp b/cppcache/src/ThinClientLocatorHelper.cpp
index 59075f5..367bd27 100644
--- a/cppcache/src/ThinClientLocatorHelper.cpp
+++ b/cppcache/src/ThinClientLocatorHelper.cpp
@@ -135,16 +135,14 @@ GfErrType ThinClientLocatorHelper::getAllServers(
       /* adongre
        * SSL Enabled on Location and not in the client
        */
-      int8_t acceptanceCode;
-      di->read(&acceptanceCode);
-      if (acceptanceCode == REPLY_SSL_ENABLED && !sysProps.sslEnabled()) {
+      if (di->read() == REPLY_SSL_ENABLED && !sysProps.sslEnabled()) {
         LOGERROR("SSL is enabled on locator, enable SSL in client as well");
         throw AuthenticationRequiredException(
             "SSL is enabled on locator, enable SSL in client as well");
       }
       di->rewindCursor(1);
 
-      di->readObject(response);
+      response = di->readObject<GetAllServersResponse>();
       servers = response->getServers();
       return GF_NOERR;
     } catch (const AuthenticationRequiredException&) {
@@ -232,15 +230,14 @@ GfErrType ThinClientLocatorHelper::getEndpointForNewCallBackConn(
       /* adongre
        * ssl defect
        */
-      int8_t acceptanceCode;
-      di->read(&acceptanceCode);
+      const auto acceptanceCode = di->read();
       if (acceptanceCode == REPLY_SSL_ENABLED && !sysProps.sslEnabled()) {
         LOGERROR("SSL is enabled on locator, enable SSL in client as well");
         throw AuthenticationRequiredException(
             "SSL is enabled on locator, enable SSL in client as well");
       }
       di->rewindCursor(1);
-      di->readObject(response);
+      response = di->readObject<QueueConnectionResponse>();
       outEndpoint = response->getServers();
       return GF_NOERR;
     } catch (const AuthenticationRequiredException& excp) {
@@ -336,8 +333,7 @@ GfErrType ThinClientLocatorHelper::getEndpointForNewFwdConn(
       /* adongre
        * SSL is enabled on locator and not in the client
        */
-      int8_t acceptanceCode;
-      di->read(&acceptanceCode);
+      const auto acceptanceCode = di->read();
       if (acceptanceCode == REPLY_SSL_ENABLED && !sysProps.sslEnabled()) {
         LOGERROR("SSL is enabled on locator, enable SSL in client as well");
         throw AuthenticationRequiredException(
@@ -345,7 +341,7 @@ GfErrType ThinClientLocatorHelper::getEndpointForNewFwdConn(
       }
       di->rewindCursor(1);
 
-      di->readObject(response);
+      response = di->readObject<ClientConnectionResponse>();
       response->printInfo();
       if (!response->serverFound()) {
         LOGFINE("Server not found");
@@ -428,8 +424,7 @@ GfErrType ThinClientLocatorHelper::updateLocators(
       /* adongre
        * SSL Enabled on Location and not in the client
        */
-      int8_t acceptanceCode;
-      di->read(&acceptanceCode);
+      const auto acceptanceCode = di->read();
       if (acceptanceCode == REPLY_SSL_ENABLED && !sysProps.sslEnabled()) {
         LOGERROR("SSL is enabled on locator, enable SSL in client as well");
         throw AuthenticationRequiredException(
@@ -437,7 +432,7 @@ GfErrType ThinClientLocatorHelper::updateLocators(
       }
       di->rewindCursor(1);
 
-      di->readObject(response);
+      response = di->readObject<LocatorListResponse>();
       std::vector<ServerLocation> locators = response->getLocators();
       if (locators.size() > 0) {
         RandGen randGen;
diff --git a/cppcache/src/ThinClientRegion.cpp b/cppcache/src/ThinClientRegion.cpp
index cb7351f..3edbc9b 100644
--- a/cppcache/src/ThinClientRegion.cpp
+++ b/cppcache/src/ThinClientRegion.cpp
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+#include <algorithm>
+
 #include <geode/SelectResultsIterator.hpp>
 #include <geode/SystemProperties.hpp>
 #include <geode/PoolManager.hpp>
@@ -459,7 +461,6 @@ void ThinClientRegion::unregisterKeys(const VectorOfCacheableKey& keys) {
 }
 
 void ThinClientRegion::registerAllKeys(bool isDurable,
-                                       VectorOfCacheableKeyPtr resultKeys,
                                        bool getInitialValues,
                                        bool receiveValues) {
   PoolPtr pool = m_cacheImpl->getCache()->getPoolManager().find(
@@ -483,12 +484,6 @@ void ThinClientRegion::registerAllKeys(bool isDurable,
         "Durable flag only applicable for durable clients");
   }
 
-  bool isresultKeys = true;
-  if (resultKeys == nullptr) {
-    resultKeys = VectorOfCacheableKeyPtr(new VectorOfCacheableKey());
-    isresultKeys = false;
-  }
-
   InterestResultPolicy interestPolicy = InterestResultPolicy::NONE;
   if (getInitialValues) {
     interestPolicy = InterestResultPolicy::KEYS_VALUES;
@@ -499,6 +494,7 @@ void ThinClientRegion::registerAllKeys(bool isDurable,
   LOGDEBUG("ThinClientRegion::registerAllKeys : interestpolicy is %d",
            interestPolicy.ordinal);
 
+  VectorOfCacheableKeyPtr resultKeys;
   //  if we need to fetch initial data, then we get the keys in
   // that call itself using the special GET_ALL message and do not need
   // to get the keys in the initial  register interest  call
@@ -511,14 +507,10 @@ void ThinClientRegion::registerAllKeys(bool isDurable,
   }
 
   // Get the entries from the server using a special GET_ALL message
-  if (isresultKeys == false) {
-    resultKeys = nullptr;
-  }
   GfErrTypeToException("Region::registerAllKeys", err);
 }
 
 void ThinClientRegion::registerRegex(const char* regex, bool isDurable,
-                                     VectorOfCacheableKeyPtr resultKeys,
                                      bool getInitialValues,
                                      bool receiveValues) {
   PoolPtr pool = m_cacheImpl->getCache()->getPoolManager().find(
@@ -546,14 +538,6 @@ void ThinClientRegion::registerRegex(const char* regex, bool isDurable,
   }
 
   std::string sregex = regex;
-  // bool allKeys = (sregex == ".*");
-  bool isresultKeys = true;
-
-  // if we need initial values then use resultKeys to get the keys from server
-  if (resultKeys == nullptr) {
-    resultKeys = std::make_shared<VectorOfCacheableKey>();
-    isresultKeys = false;
-  }
 
   InterestResultPolicy interestPolicy = InterestResultPolicy::NONE;
   if (getInitialValues) {
@@ -565,20 +549,19 @@ void ThinClientRegion::registerRegex(const char* regex, bool isDurable,
   LOGDEBUG("ThinClientRegion::registerRegex : interestpolicy is %d",
            interestPolicy.ordinal);
 
+  VectorOfCacheableKeyPtr resultKeys2 = std::make_shared<VectorOfCacheableKey>();
+
   //  if we need to fetch initial data for "allKeys" case, then we
   // get the keys in that call itself using the special GET_ALL message and
   // do not need to get the keys in the initial  register interest  call
   GfErrType err =
-      registerRegexNoThrow(sregex, true, nullptr, isDurable, resultKeys,
+      registerRegexNoThrow(sregex, true, nullptr, isDurable, resultKeys2,
                            interestPolicy, receiveValues);
 
   if (m_tcrdm->isFatalError(err)) {
     GfErrTypeToException("Region::registerRegex", err);
   }
 
-  if (isresultKeys == false) {
-    resultKeys = nullptr;
-  }
   GfErrTypeToException("Region::registerRegex", err);
 }
 
@@ -767,17 +750,16 @@ SerializablePtr ThinClientRegion::selectValue(const char* predicate,
   return results->operator[](0);
 }
 
-void ThinClientRegion::serverKeys(VectorOfCacheableKey& v) {
+VectorOfCacheableKey ThinClientRegion::serverKeys() {
   CHECK_DESTROY_PENDING(TryReadGuard, Region::serverKeys);
 
   TcrMessageReply reply(true, m_tcrdm);
   TcrMessageKeySet request(m_cacheImpl->getCache()->createDataOutput(),
                            m_fullPath, m_tcrdm);
   reply.setMessageTypeRequest(TcrMessage::KEY_SET);
-  // need to check
-  ChunkedKeySetResponse* resultCollector(
-      new ChunkedKeySetResponse(request, v, reply));
-  reply.setChunkedResultHandler(resultCollector);
+  VectorOfCacheableKey serverKeys;
+  ChunkedKeySetResponse resultCollector(request, serverKeys, reply);
+  reply.setChunkedResultHandler(&resultCollector);
 
   GfErrType err = GF_NOERR;
 
@@ -806,8 +788,9 @@ void ThinClientRegion::serverKeys(VectorOfCacheableKey& v) {
       break;
     }
   }
-  delete resultCollector;
   GfErrTypeToException("Region::serverKeys", err);
+
+  return serverKeys;
 }
 
 bool ThinClientRegion::containsKeyOnServer(
@@ -2467,7 +2450,6 @@ GfErrType ThinClientRegion::registerRegexNoThrow(
     }
   }
 
-  TcrMessageReply replyLocal(true, m_tcrdm);
   ChunkedInterestResponse* resultCollector = nullptr;
   ChunkedGetAllResponse* getAllResultCollector = nullptr;
   if (reply != nullptr) {
@@ -2493,10 +2475,13 @@ GfErrType ThinClientRegion::registerRegexNoThrow(
       isDurable, getAttributes()->getCachingEnabled(), receiveValues, m_tcrdm);
   ACE_Recursive_Thread_Mutex responseLock;
   if (reply == nullptr) {
+    TcrMessageReply replyLocal(true, m_tcrdm);
+    auto values = std::make_shared<HashMapOfCacheable>();
+    auto exceptions = std::make_shared<HashMapOfException>();
+
     reply = &replyLocal;
     if (interestPolicy.ordinal == InterestResultPolicy::KEYS_VALUES.ordinal) {
-      auto values = std::make_shared<HashMapOfCacheable>();
-      auto exceptions = std::make_shared<HashMapOfException>();
+
       MapOfUpdateCounters trackers;
       int32_t destroyTracker = 1;
       if (resultKeys == nullptr) {
@@ -2515,9 +2500,12 @@ GfErrType ThinClientRegion::registerRegexNoThrow(
           new ChunkedInterestResponse(request, resultKeys, replyLocal);
       reply->setChunkedResultHandler(resultCollector);
     }
+    err = m_tcrdm->sendSyncRequestRegisterInterest(
+        request, replyLocal, attemptFailover, this, endpoint);
+  } else{
+    err = m_tcrdm->sendSyncRequestRegisterInterest(
+        request, *reply, attemptFailover, this, endpoint);
   }
-  err = m_tcrdm->sendSyncRequestRegisterInterest(
-      request, *reply, attemptFailover, this, endpoint);
   if (err == GF_NOERR /*|| err == GF_CACHE_REDUNDANCY_FAILURE*/) {
     if (reply->getMessageType() == TcrMessage::RESPONSE_FROM_SECONDARY) {
       LOGFINER(
@@ -2634,7 +2622,7 @@ void ThinClientRegion::addKeys(const VectorOfCacheableKey& keys, bool isDurable,
   }
 }
 
-void ThinClientRegion::addRegex(const std::string& regex, bool isDurable,
+void ThinClientRegion:: addRegex(const std::string& regex, bool isDurable,
                                 bool receiveValues,
                                 InterestResultPolicy interestpolicy) {
   std::unordered_map<CacheableKeyPtr, InterestResultPolicy>& interestList =
@@ -2659,40 +2647,51 @@ void ThinClientRegion::addRegex(const std::string& regex, bool isDurable,
       std::pair<std::string, InterestResultPolicy>(regex, interestpolicy));
 }
 
-void ThinClientRegion::getInterestList(VectorOfCacheableKey& vlist) const {
+VectorOfCacheableKey ThinClientRegion::getInterestList() const {
   ThinClientRegion* nthis = const_cast<ThinClientRegion*>(this);
   RegionGlobalLocks acquireLocksRedundancy(nthis, false);
   RegionGlobalLocks acquireLocksFailover(nthis);
   CHECK_DESTROY_PENDING(TryReadGuard, getInterestList);
   ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(nthis->m_keysLock);
-  for (std::unordered_map<CacheableKeyPtr, InterestResultPolicy>::iterator itr =
-           nthis->m_durableInterestList.begin();
-       itr != nthis->m_durableInterestList.end(); ++itr) {
-    vlist.push_back(itr->first);
-  }
-  for (std::unordered_map<CacheableKeyPtr, InterestResultPolicy>::iterator itr =
-           nthis->m_interestList.begin();
-       itr != nthis->m_interestList.end(); ++itr) {
-    vlist.push_back(itr->first);
-  }
+
+  VectorOfCacheableKey vlist;
+
+  std::transform(std::begin(m_durableInterestList),
+                 std::end(m_durableInterestList), std::back_inserter(vlist),
+                 [](const decltype(m_durableInterestList)::value_type& e) {
+                   return e.first;
+                 });
+
+  std::transform(
+      std::begin(m_interestList), std::end(m_interestList),
+      std::back_inserter(vlist),
+      [](const decltype(m_interestList)::value_type& e) { return e.first; });
+
+  return vlist;
 }
-void ThinClientRegion::getInterestListRegex(
-    VectorOfCacheableString& vregex) const {
+VectorOfCacheableString ThinClientRegion::getInterestListRegex() const {
   ThinClientRegion* nthis = const_cast<ThinClientRegion*>(this);
   RegionGlobalLocks acquireLocksRedundancy(nthis, false);
   RegionGlobalLocks acquireLocksFailover(nthis);
   CHECK_DESTROY_PENDING(TryReadGuard, getInterestListRegex);
   ACE_Guard<ACE_Recursive_Thread_Mutex> keysGuard(nthis->m_keysLock);
-  for (std::unordered_map<std::string, InterestResultPolicy>::iterator itr =
-           nthis->m_durableInterestListRegex.begin();
-       itr != nthis->m_durableInterestListRegex.end(); ++itr) {
-    vregex.push_back(CacheableString::create((*itr).first.c_str()));
-  }
-  for (std::unordered_map<std::string, InterestResultPolicy>::iterator itr =
-           nthis->m_interestListRegex.begin();
-       itr != nthis->m_interestListRegex.end(); ++itr) {
-    vregex.push_back(CacheableString::create((*itr).first.c_str()));
-  }
+
+  VectorOfCacheableString vlist;
+
+  std::transform(std::begin(m_durableInterestListRegex),
+                 std::end(m_durableInterestListRegex),
+                 std::back_inserter(vlist),
+                 [](const decltype(m_durableInterestListRegex)::value_type& e) {
+                   return CacheableString::create(e.first.c_str());
+                 });
+
+  std::transform(std::begin(m_interestListRegex), std::end(m_interestListRegex),
+                 std::back_inserter(vlist),
+                 [](const decltype(m_interestListRegex)::value_type& e) {
+                   return CacheableString::create(e.first.c_str());
+                 });
+
+  return vlist;
 }
 
 GfErrType ThinClientRegion::clientNotificationHandler(TcrMessage& msg) {
@@ -2850,8 +2849,7 @@ void ThinClientRegion::localInvalidateRegion_internal() {
   MapEntryImplPtr me;
   CacheablePtr oldValue;
 
-  VectorOfCacheableKey keysVec;
-  keys_internal(keysVec);
+  VectorOfCacheableKey keysVec = keys_internal();
   for (const auto& key : keysVec) {
     VersionTagPtr versionTag;
     m_entries->invalidate(key, me, oldValue, versionTag);
@@ -2922,8 +2920,9 @@ void ThinClientRegion::registerInterestGetValues(
     const char* method, const VectorOfCacheableKey* keys,
     const VectorOfCacheableKeyPtr& resultKeys) {
   try {
+    auto values = std::make_shared<HashMapOfCacheable>();
     auto exceptions = std::make_shared<HashMapOfException>();
-    GfErrType err = getAllNoThrow_remote(keys, nullptr, exceptions, resultKeys,
+    GfErrType err = getAllNoThrow_remote(keys, values, exceptions, resultKeys,
                                          true, nullptr);
     GfErrTypeToException(method, err);
     // log any exceptions here
@@ -3418,27 +3417,19 @@ void ChunkedQueryResponse::reset() {
 
 void ChunkedQueryResponse::readObjectPartList(DataInput& input,
                                               bool isResultSet) {
-  bool hasKeys;
-  input.readBoolean(&hasKeys);
 
-  if (hasKeys) {
+  if (input.readBoolean()) {
     LOGERROR("Query response has keys which is unexpected.");
     throw IllegalStateException("Query response has keys which is unexpected.");
   }
 
-  int32_t len;
-  input.readInt(&len);
+  int32_t len = input.readInt32();
 
   for (int32_t index = 0; index < len; ++index) {
-    uint8_t byte = 0;
-    input.read(&byte);
-
-    if (byte == 2 /* for exception*/) {
-      int32_t skipLen;
-      input.readArrayLen(&skipLen);
-      input.advanceCursor(skipLen);
-      CacheableStringPtr exMsgPtr;
-      input.readNativeString(exMsgPtr);
+
+    if (input.read() == 2 /* for exception*/) {
+      input.advanceCursor(input.readArrayLen()); // skipLen
+      CacheableStringPtr exMsgPtr = input.readNativeString();
       throw IllegalStateException(exMsgPtr->asChar());
     } else {
       if (isResultSet) {
@@ -3446,10 +3437,9 @@ void ChunkedQueryResponse::readObjectPartList(DataInput& input,
         input.readObject(value);
         m_queryResults->push_back(value);
       } else {
-        int8_t arrayType;
-        input.read(&arrayType);
+        auto arrayType = input.read();
         if (arrayType == GeodeTypeIdsImpl::FixedIDByte) {
-          input.read(&arrayType);
+          arrayType = input.read();
           if (arrayType != GeodeTypeIdsImpl::CacheableObjectPartList) {
             LOGERROR(
                 "Query response got unhandled message format %d while "
@@ -3482,7 +3472,6 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
   auto input = cache->createDataInput(chunk, chunkLen);
   input->setPoolName(m_msg.getPoolName());
   uint32_t partLen;
-  int8_t isObj;
   TcrMessageHelper::ChunkObjectType objType;
   if ((objType = TcrMessageHelper::readChunkPartHeader(
            m_msg, *input, GeodeTypeIdsImpl::FixedIDByte,
@@ -3494,10 +3483,9 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
     return;
   } else if (objType == TcrMessageHelper::NULL_OBJECT) {
     // special case for scalar result
-    input->readInt(&partLen);
-    input->read(&isObj);
-    CacheableInt32Ptr intVal;
-    input->readObject(intVal, true);
+    partLen = input->readInt32();
+    input->read();
+    CacheableInt32Ptr intVal = input->readObject<CacheableInt32>(true);
     m_queryResults->push_back(intVal);
 
     // TODO:
@@ -3506,7 +3494,7 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
     return;
   }
 
-  uint8_t classByte;
+
   char* isStructTypeImpl = nullptr;
   uint16_t stiLen = 0;
   // soubhik: ignoring parent classes for now
@@ -3521,26 +3509,21 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
   // skipping CollectionTypeImpl
   // skipClass(*input); // no longer, since GFE 5.7
 
-  int8_t structType;
-  input->read(&structType);  // this is Fixed ID byte (1)
-  input->read(&structType);  // this is DataSerializable (45)
-  input->read(&classByte);
-  uint8_t stringType;
-  input->read(&stringType);  // ignore string header - assume 64k string
+  input->read();  // this is Fixed ID byte (1)
+  input->read();  // this is DataSerializable (45)
+  uint8_t classByte = input->read();
+  uint8_t stringType = input->read();  // ignore string header - assume 64k string
   input->readUTF(&isStructTypeImpl, &stiLen);
 
   DeleteArray<char> delSTI(isStructTypeImpl);
   if (strcmp(isStructTypeImpl, "org.apache.geode.cache.query.Struct") == 0) {
-    int32_t numOfFldNames;
-    input->readArrayLen(&numOfFldNames);
+    int32_t numOfFldNames = input->readArrayLen();
     bool skip = false;
     if (m_structFieldNames.size() != 0) {
       skip = true;
     }
     for (int i = 0; i < numOfFldNames; i++) {
-      CacheableStringPtr sptr;
-      // input->readObject(sptr);
-      input->readNativeString(sptr);
+      CacheableStringPtr sptr = input->readNativeString();
       if (!skip) {
         m_structFieldNames.push_back(sptr);
       }
@@ -3552,9 +3535,9 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
   // skip the whole part including partLen and isObj (4+1)
   input->advanceCursor(partLen + 5);
 
-  input->readInt(&partLen);
-  input->read(&isObj);
-  if (!isObj) {
+  partLen = input->readInt32();
+
+  if (!input->read()) {
     LOGERROR(
         "Query response part is not an object; possible serialization "
         "mismatch");
@@ -3565,12 +3548,10 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
 
   bool isResultSet = (m_structFieldNames.size() == 0);
 
-  int8_t arrayType;
-  input->read(&arrayType);
+  auto arrayType = input->read();
 
   if (arrayType == GeodeTypeIds::CacheableObjectArray) {
-    int32_t arraySize;
-    input->readArrayLen(&arraySize);
+    int32_t arraySize = input->readArrayLen();
     skipClass(*input);
     for (int32_t arrayItem = 0; arrayItem < arraySize; ++arrayItem) {
       SerializablePtr value;
@@ -3578,9 +3559,8 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
         input->readObject(value);
         m_queryResults->push_back(value);
       } else {
-        input->read(&isObj);
-        int32_t arraySize2;
-        input->readArrayLen(&arraySize2);
+        input->read();
+        int32_t arraySize2 = input->readArrayLen();
         skipClass(*input);
         for (int32_t index = 0; index < arraySize2; ++index) {
           input->readObject(value);
@@ -3589,7 +3569,7 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
       }
     }
   } else if (arrayType == GeodeTypeIdsImpl::FixedIDByte) {
-    input->read(&arrayType);
+    arrayType = input->read();
     if (arrayType != GeodeTypeIdsImpl::CacheableObjectPartList) {
       LOGERROR(
           "Query response got unhandled message format %d while expecting "
@@ -3614,15 +3594,12 @@ void ChunkedQueryResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
 }
 
 void ChunkedQueryResponse::skipClass(DataInput& input) {
-  uint8_t classByte;
-  input.read(&classByte);
+  uint8_t classByte = input.read();
   if (classByte == GeodeTypeIdsImpl::Class) {
-    uint8_t stringType;
     // ignore string type id - assuming its a normal (under 64k) string.
-    input.read(&stringType);
-    uint16_t classlen;
-    input.readInt(&classlen);
-    input.advanceCursor(classlen);
+    input.read();
+    uint16_t classLen = input.readInt16();
+    input.advanceCursor(classLen);
   } else {
     throw IllegalStateException(
         "ChunkedQueryResponse::skipClass: "
@@ -3664,16 +3641,14 @@ void ChunkedFunctionExecutionResponse::handleChunk(
     return;
   }
 
-  int32_t len;
   int startLen =
       input->getBytesRead() -
       1;  // from here need to look value part + memberid AND -1 for array type
-  input->readArrayLen(&len);
+  int32_t len = input->readArrayLen();
 
   // read a byte to determine whether to read exception part for sendException
   // or read objects.
-  uint8_t partType;
-  input->read(&partType);
+  uint8_t partType = input->read();
   bool isExceptionPart = false;
   // See If partType is JavaSerializable
   const int CHUNK_HDR_LEN = 5;
@@ -3694,7 +3669,7 @@ void ChunkedFunctionExecutionResponse::handleChunk(
         (((isLastChunkWithSecurity & 0x02) == 0) &&
          (chunkLen - static_cast<int32_t>(partLen) <= CHUNK_HDR_LEN))) {
       readPart = false;
-      input->readInt(&partLen);
+      partLen = input->readInt32();
       input->advanceCursor(1);  // skip isObject byte
       input->advanceCursor(partLen);
     } else {
@@ -3702,21 +3677,20 @@ void ChunkedFunctionExecutionResponse::handleChunk(
       TcrMessageHelper::skipParts(m_msg, *input, 1);
 
       // read the second part which is string in usual manner, first its length.
-      input->readInt(&partLen);
+      partLen = input->readInt32();
 
-      int8_t isObject;
       // then isObject byte
-      input->read(&isObject);
+      input->read(); // ignore iSobject
 
       startLen = input->getBytesRead();  // reset from here need to look value
                                         // part + memberid AND -1 for array type
 
       // Since it is contained as a part of other results, read arrayType which
       // is arrayList = 65.
-      input->read(&arrayType);
+      arrayType = input->read();
 
       // then its len which is 2
-      input->readArrayLen(&len);
+      len = input->readArrayLen();
     }
   } else {
     // rewind cursor by 1 to what we had read a byte to determine whether to
@@ -3856,12 +3830,10 @@ void ChunkedPutAllResponse::handleChunk(const uint8_t* chunk, int32_t chunkLen,
     m_msg.readSecureObjectPart(*input, false, true, isLastChunkWithSecurity);
   } else {
     LOGDEBUG("ChunkedPutAllResponse::handleChunk BYTES PART");
-    int8_t byte0;
-    input->read(&byte0);
+    const auto byte0 = input->read();
     LOGDEBUG("ChunkedPutAllResponse::handleChunk single-hop bytes byte0 = %d ",
              byte0);
-    int8_t byte1;
-    input->read(&byte1);
+    const auto byte1 = input->read();
     m_msg.readSecureObjectPart(*input, false, true, isLastChunkWithSecurity);
 
     PoolPtr pool = cache->getPoolManager().find(m_msg.getPoolName());
@@ -3920,13 +3892,11 @@ void ChunkedRemoveAllResponse::handleChunk(const uint8_t* chunk,
     m_msg.readSecureObjectPart(*input, false, true, isLastChunkWithSecurity);
   } else {
     LOGDEBUG("ChunkedRemoveAllResponse::handleChunk BYTES PART");
-    int8_t byte0;
-    input->read(&byte0);
+    const auto byte0 = input->read();
     LOGDEBUG(
         "ChunkedRemoveAllResponse::handleChunk single-hop bytes byte0 = %d ",
         byte0);
-    int8_t byte1;
-    input->read(&byte1);
+    const auto byte1 = input->read();
     m_msg.readSecureObjectPart(*input, false, true, isLastChunkWithSecurity);
 
     PoolPtr pool = cache->getPoolManager().find(m_msg.getPoolName());
@@ -3962,12 +3932,8 @@ void ChunkedDurableCQListResponse::handleChunk(const uint8_t* chunk,
 
   // read part length
   uint32_t partLen;
-  input->readInt(&partLen);
-
-  bool isObj;
-  input->readBoolean(&isObj);
-
-  if (!isObj) {
+  partLen = input->readInt32();
+  if (!input->readBoolean()) {
     // we're currently always expecting an object
     char exMsg[256];
     ACE_OS::snprintf(
@@ -3978,14 +3944,10 @@ void ChunkedDurableCQListResponse::handleChunk(const uint8_t* chunk,
 
   input->advanceCursor(1);  // skip the CacheableArrayList type ID byte
 
-  int8_t stringParts;
-
-  input->read(&stringParts);  // read the number of strings in the message this
+  const auto stringParts = input->read();  // read the number of strings in the message this
                              // is one byte
 
-  CacheableStringPtr strTemp;
   for (int i = 0; i < stringParts; i++) {
-    input->readObject(strTemp);
-    m_resultList->push_back(strTemp);
+    m_resultList->push_back(input->readObject<CacheableString>());
   }
 }
diff --git a/cppcache/src/ThinClientRegion.hpp b/cppcache/src/ThinClientRegion.hpp
index 131a109..506eb94 100644
--- a/cppcache/src/ThinClientRegion.hpp
+++ b/cppcache/src/ThinClientRegion.hpp
@@ -76,16 +76,14 @@ class CPPCACHE_EXPORT ThinClientRegion : public LocalRegion {
                             bool receiveValues = true);
   virtual void unregisterKeys(const VectorOfCacheableKey& keys);
   virtual void registerAllKeys(bool isDurable = false,
-                               VectorOfCacheableKeyPtr resultKeys = nullptr,
                                bool getInitialValues = false,
                                bool receiveValues = true);
   virtual void unregisterAllKeys();
   virtual void registerRegex(const char* regex, bool isDurable = false,
-                             VectorOfCacheableKeyPtr resultKeys = nullptr,
                              bool getInitialValues = false,
                              bool receiveValues = true);
   virtual void unregisterRegex(const char* regex);
-  virtual void serverKeys(VectorOfCacheableKey& v);
+  virtual VectorOfCacheableKey serverKeys();
   virtual void clear(const SerializablePtr& aCallbackArgument = nullptr);
 
   virtual SelectResultsPtr query(
@@ -120,8 +118,8 @@ class CPPCACHE_EXPORT ThinClientRegion : public LocalRegion {
 
   bool containsKeyOnServer(const CacheableKeyPtr& keyPtr) const;
   virtual bool containsValueForKey_remote(const CacheableKeyPtr& keyPtr) const;
-  virtual void getInterestList(VectorOfCacheableKey& vlist) const;
-  virtual void getInterestListRegex(VectorOfCacheableString& vregex) const;
+  virtual VectorOfCacheableKey getInterestList() const;
+  virtual VectorOfCacheableString getInterestListRegex() const;
 
   /** @brief Public Methods from RegionInternal
    *  These are all virtual methods
diff --git a/cppcache/src/TransactionalOperation.cpp b/cppcache/src/TransactionalOperation.cpp
index 15ade7c..442c2bd 100644
--- a/cppcache/src/TransactionalOperation.cpp
+++ b/cppcache/src/TransactionalOperation.cpp
@@ -26,6 +26,8 @@
 #include <geode/Cache.hpp>
 #include <geode/FunctionService.hpp>
 
+#include "RegionInternal.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
@@ -86,16 +88,22 @@ CacheablePtr TransactionalOperation::replay(Cache* cache) {
       GfErrTypeThrowException("getEntry not supported in transaction",
                               GF_NOTSUP);
       break;
-    case GF_GET_ALL:
-      cache->getRegion(m_regionName)
-          ->getAll(
-              *std::dynamic_pointer_cast<VectorOfCacheableKey>(
-                  m_arguments->at(0)),
-              std::dynamic_pointer_cast<HashMapOfCacheable>(m_arguments->at(1)),
-              std::dynamic_pointer_cast<HashMapOfException>(m_arguments->at(2)),
-              std::static_pointer_cast<CacheableBoolean>(m_arguments->at(3))
-                  ->value());
+    case GF_GET_ALL: {
+      const auto result =
+          std::static_pointer_cast<RegionInternal>(
+              cache->getRegion(m_regionName))
+              ->getAll_internal(
+                  *std::dynamic_pointer_cast<VectorOfCacheableKey>(
+                      m_arguments->at(0)),
+                  nullptr,
+                  std::static_pointer_cast<CacheableBoolean>(m_arguments->at(3))
+                      ->value());
+
+      auto values =
+          std::dynamic_pointer_cast<HashMapOfCacheable>(m_arguments->at(1));
+      values->insert(result.begin(), result.end());
       break;
+    }
     case GF_INVALIDATE:
       cache->getRegion(m_regionName)->invalidate(m_key, m_arguments->at(0));
       break;
@@ -103,11 +111,13 @@ CacheablePtr TransactionalOperation::replay(Cache* cache) {
       cache->getRegion(m_regionName)
           ->remove(m_key, m_arguments->at(0), m_arguments->at(1));
       break;
-    case GF_KEY_SET:
-      cache->getRegion(m_regionName)
-          ->serverKeys(*std::dynamic_pointer_cast<VectorOfCacheableKey>(
-              m_arguments->at(0)));
+    case GF_KEY_SET: {
+      auto tmp = cache->getRegion(m_regionName)->serverKeys();
+      auto serverKeys =
+          std::dynamic_pointer_cast<VectorOfCacheableKey>(m_arguments->at(0));
+      serverKeys->insert(serverKeys->end(), tmp.begin(), tmp.end());
       break;
+    }
     case GF_CREATE:  // includes PUT_IF_ABSENT
       cache->getRegion(m_regionName)
           ->create(m_key, m_arguments->at(0), m_arguments->at(1));
diff --git a/cppcache/src/TypeRegistry.cpp b/cppcache/src/TypeRegistry.cpp
index f9ee8cd..0829e73 100644
--- a/cppcache/src/TypeRegistry.cpp
+++ b/cppcache/src/TypeRegistry.cpp
@@ -23,7 +23,7 @@
   TypeRegistry is the public facing wrapper for the serialization registry.
 **/
 
-TypeRegistry::TypeRegistry(Cache &cache) : m_cache(cache) {}
+TypeRegistry::TypeRegistry(const Cache &cache) : m_cache(cache) {}
 
 void TypeRegistry::registerType(TypeFactoryMethod creationFunction) {
   CacheRegionHelper::getCacheImpl(&m_cache)
diff --git a/cppcache/src/VersionTag.cpp b/cppcache/src/VersionTag.cpp
index 9a3a023..283e4b9 100644
--- a/cppcache/src/VersionTag.cpp
+++ b/cppcache/src/VersionTag.cpp
@@ -51,25 +51,21 @@ void VersionTag::toData(DataOutput& output) const {
 }
 
 void VersionTag::fromData(DataInput& input) {
-  uint16_t flags;
-  input.readInt(&flags);
-  input.readInt(&m_bits);
-  int8_t distributedSystemId;
-  input.read(&distributedSystemId);
+  uint16_t flags = input.readInt16();
+  m_bits = input.readInt16();
+  input.read(); //skip distributedSystemId
   if ((flags & VERSION_TWO_BYTES) != 0) {
-    int16_t tempVar;
-    input.readInt(&tempVar);
-    m_entryVersion = tempVar;
+    m_entryVersion = input.readInt16();
     m_entryVersion &= 0xffff;
   } else {
-    input.readInt(&m_entryVersion);
+    m_entryVersion = input.readInt32();
     m_entryVersion &= 0xffffffff;
   }
   if ((flags & HAS_RVV_HIGH_BYTE) != 0) {
-    input.readInt(&m_regionVersionHighBytes);
+    m_regionVersionHighBytes = input.readInt16();
   }
-  input.readInt(&m_regionVersionLowBytes);
-  input.readUnsignedVL(&m_timeStamp);
+  m_regionVersionLowBytes = input.readInt32();
+  m_timeStamp = input.readUnsignedVL();
   readMembers(flags, input);
 }
 
diff --git a/cppcache/src/VersionedCacheableObjectPartList.cpp b/cppcache/src/VersionedCacheableObjectPartList.cpp
index 1caa489..2c8c80c 100644
--- a/cppcache/src/VersionedCacheableObjectPartList.cpp
+++ b/cppcache/src/VersionedCacheableObjectPartList.cpp
@@ -40,21 +40,18 @@ void VersionedCacheableObjectPartList::toData(DataOutput& output) const {
 void VersionedCacheableObjectPartList::readObjectPart(int32_t index,
                                                       DataInput& input,
                                                       CacheableKeyPtr keyPtr) {
-  uint8_t objType = 0;
   CacheableStringPtr exMsgPtr;
   ExceptionPtr ex;
-  input.read(&objType);
+  auto objType = input.read();
   CacheablePtr value;
   m_byteArray[index] = objType;
   bool isException = (objType == 2 ? 1 : 0);
 
   if (isException) {  // Exception case
     // Skip the exception that is in java serialized format, we cant read it.
-    int32_t skipLen;
-    input.readArrayLen(&skipLen);
-    input.advanceCursor(skipLen);
+    input.advanceCursor(input.readArrayLen());
 
-    input.readNativeString(exMsgPtr);  ////4.1
+    exMsgPtr = input.readNativeString();  ////4.1
     if (m_exceptions != nullptr) {
       const char* exMsg = exMsgPtr->asChar();
       if (strstr(exMsg,
@@ -70,8 +67,7 @@ void VersionedCacheableObjectPartList::readObjectPart(int32_t index,
     }
   } else if (m_serializeValues) {
     // read length
-    int32_t skipLen;
-    input.readArrayLen(&skipLen);
+    int32_t skipLen = input.readArrayLen();
     uint8_t* bytes = nullptr;
     if (skipLen > 0) {
       // readObject
@@ -99,15 +95,13 @@ void VersionedCacheableObjectPartList::readObjectPart(int32_t index,
 void VersionedCacheableObjectPartList::fromData(DataInput& input) {
   ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_responseLock);
   LOGDEBUG("VersionedCacheableObjectPartList::fromData");
-  uint8_t flags = 0;
-  input.read(&flags);
+  uint8_t flags = input.read();
   m_hasKeys = (flags & 0x01) == 0x01;
   bool hasObjects = (flags & 0x02) == 0x02;
   m_hasTags = (flags & 0x04) == 0x04;
   m_regionIsVersioned = (flags & 0x08) == 0x08;
   m_serializeValues = (flags & 0x10) == 0x10;
   bool persistent = (flags & 0x20) == 0x20;
-  CacheableKeyPtr key;
   CacheableStringPtr exMsgPtr;
   int32_t len = 0;
   bool valuesNULL = false;
@@ -127,12 +121,10 @@ void VersionedCacheableObjectPartList::fromData(DataInput& input) {
 
   auto localKeys = std::make_shared<VectorOfCacheableKey>();
   if (m_hasKeys) {
-    int64_t tempLen;
-    input.readUnsignedVL(&tempLen);
-    len = static_cast<int32_t>(tempLen);
+    len = static_cast<int32_t>(input.readUnsignedVL());
 
     for (int32_t index = 0; index < len; ++index) {
-      input.readObject(key, true);
+      CacheableKeyPtr key = input.readObject<CacheableKey>(true);
       if (m_resultKeys != nullptr) {
         m_resultKeys->push_back(key);
       }
@@ -177,9 +169,7 @@ void VersionedCacheableObjectPartList::fromData(DataInput& input) {
   }  // m_hasKeys else ends here
 
   if (hasObjects) {
-    int64_t tempLen;
-    input.readUnsignedVL(&tempLen);
-    len = static_cast<int32_t>(tempLen);
+    len = static_cast<int32_t>(input.readUnsignedVL());
     m_byteArray.resize(len);
     for (int32_t index = 0; index < len; ++index) {
       if (m_keys != nullptr && !m_hasKeys) {
@@ -195,18 +185,13 @@ void VersionedCacheableObjectPartList::fromData(DataInput& input) {
   }  // hasObjects ends here
 
   if (m_hasTags) {
-    int32_t versionTaglen;
-    int64_t tempLen;
-    input.readUnsignedVL(&tempLen);
-    versionTaglen = static_cast<int32_t>(tempLen);
-    len = versionTaglen;
-    m_versionTags.resize(versionTaglen);
+    len = static_cast<int32_t>(input.readUnsignedVL());;
+    m_versionTags.resize(len);
     std::vector<uint16_t> ids;
     MemberListForVersionStamp& memberListForVersionStamp =
         *(m_region->getCacheImpl()->getMemberListForVersionStamp());
-    for (int32_t index = 0; index < versionTaglen; index++) {
-      uint8_t entryType = 0;
-      input.read(&entryType);
+    for (int32_t index = 0; index < len; index++) {
+      uint8_t entryType = input.read();
       VersionTagPtr versionTag;
       switch (entryType) {
         case FLAG_NULL_TAG: {
@@ -247,10 +232,7 @@ void VersionedCacheableObjectPartList::fromData(DataInput& input) {
                 VersionTagPtr(new VersionTag(memberListForVersionStamp));
           }
           versionTag->fromData(input);
-          int32_t idNumber;
-          int64_t tempLen;
-          input.readUnsignedVL(&tempLen);
-          idNumber = static_cast<int32_t>(tempLen);
+          int32_t idNumber = input.readUnsignedVL();
           versionTag->setInternalMemID(ids.at(idNumber));
           break;
         }
diff --git a/cppcache/test/ClientConnectionResponseTest.cpp b/cppcache/test/ClientConnectionResponseTest.cpp
new file mode 100644
index 0000000..ee0f429
--- /dev/null
+++ b/cppcache/test/ClientConnectionResponseTest.cpp
@@ -0,0 +1,50 @@
+/*
+ * 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.
+ */
+
+#include <gtest/gtest.h>
+
+#include <ClientConnectionResponse.hpp>
+#include <DataInputInternal.hpp>
+#include <DataOutputInternal.hpp>
+using namespace apache::geode::client;
+
+TEST(ClientConnectionResponseTest, testDefaultServerFound) {
+  ClientConnectionResponse clientConnectionResponse;
+  ASSERT_FALSE(clientConnectionResponse.serverFound());
+}
+
+TEST(ClientConnectionResponseTest, testReadServerFound) {
+  DataOutputInternal dataOutputInternal;
+
+  dataOutputInternal.writeBoolean(false);
+  dataOutputInternal.writeBoolean(true);
+
+  // The following are necessary to meet subsequent calls
+  dataOutputInternal.writeNativeString("hello");
+  dataOutputInternal.writeInt(static_cast<int64_t>(103334));
+
+  // Put it into a datainput so it can be read.
+  DataInputInternal dataInput(dataOutputInternal.getBuffer(),
+                              dataOutputInternal.getBufferLength(), nullptr);
+
+  ClientConnectionResponse clientConnectionResponse;
+  clientConnectionResponse.fromData(dataInput);
+  ASSERT_FALSE(clientConnectionResponse.serverFound());
+
+  clientConnectionResponse.fromData(dataInput);
+  ASSERT_TRUE(clientConnectionResponse.serverFound());
+}
\ No newline at end of file
diff --git a/cppcache/test/DataInputTest.cpp b/cppcache/test/DataInputTest.cpp
index 804e709..72c158b 100644
--- a/cppcache/test/DataInputTest.cpp
+++ b/cppcache/test/DataInputTest.cpp
@@ -66,11 +66,11 @@ class TestDataInput {
 
   operator DataInput &() { return m_dataInput; }
 
-  void read(uint8_t *value) { m_dataInput.read(value); }
+  void read(uint8_t *value) { *value = m_dataInput.read(); }
 
-  void read(int8_t *value) { m_dataInput.read(value); }
+  void read(int8_t *value) { *value = m_dataInput.read(); }
 
-  void readBoolean(bool *value) { m_dataInput.readBoolean(value); }
+  void readBoolean(bool *value) { *value = m_dataInput.readBoolean(); }
 
   void readBytesOnly(uint8_t *buffer, uint32_t len) {
     m_dataInput.readBytesOnly(buffer, len);
@@ -88,25 +88,21 @@ class TestDataInput {
     m_dataInput.readBytes(buffer, len);
   }
 
-  void readInt(uint16_t *value) { m_dataInput.readInt(value); }
+  int16_t readInt16() { return m_dataInput.readInt16(); }
 
-  void readInt(int16_t *value) { m_dataInput.readInt(value); }
+  int32_t readInt32() { return m_dataInput.readInt32(); }
 
-  void readInt(uint32_t *value) { m_dataInput.readInt(value); }
+  void readInt(uint64_t *value) { *value = m_dataInput.readInt64(); }
 
-  void readInt(int32_t *value) { m_dataInput.readInt(value); }
+  int64_t readInt64() { return m_dataInput.readInt64(); }
 
-  void readInt(uint64_t *value) { m_dataInput.readInt(value); }
+  int32_t readArrayLen() { return m_dataInput.readArrayLen(); }
 
-  void readInt(int64_t *value) { m_dataInput.readInt(value); }
+  int64_t readUnsignedVL() { return m_dataInput.readUnsignedVL(); }
 
-  void readArrayLen(int32_t *len) { m_dataInput.readArrayLen(len); }
+  float readFloat() { return m_dataInput.readFloat(); }
 
-  void readUnsignedVL(int64_t *value) { m_dataInput.readUnsignedVL(value); }
-
-  void readFloat(float *value) { m_dataInput.readFloat(value); }
-
-  void readDouble(double *value) { m_dataInput.readDouble(value); }
+  double readDouble() { return m_dataInput.readDouble(); }
 
   void readASCII(char **value, uint16_t *len = nullptr) {
     m_dataInput.readASCII(value, len);
@@ -139,7 +135,7 @@ class TestDataInput {
   template <class PTR>
   void readObject(std::shared_ptr<PTR> &ptr,
                   bool throwOnError = DINP_THROWONERROR_DEFAULT) {
-    m_dataInput.readObject(ptr, throwOnError);
+    ptr = m_dataInput.readObject<PTR>(throwOnError);
   }
 
   bool readNativeBool() { return m_dataInput.readNativeBool(); }
@@ -147,11 +143,12 @@ class TestDataInput {
   int32_t readNativeInt32() { return m_dataInput.readNativeInt32(); }
 
   bool readNativeString(CacheableStringPtr &csPtr) {
-    return m_dataInput.readNativeString(csPtr);
+    csPtr =  m_dataInput.readNativeString();
+    return csPtr != nullptr;
   }
 
-  void readDirectObject(SerializablePtr &ptr, int8_t typeId = -1) {
-    m_dataInput.readDirectObject(ptr, typeId);
+  SerializablePtr readDirectObject(int8_t typeId = -1) {
+    return m_dataInput.readDirectObject(typeId);
   }
 
   void readObject(SerializablePtr &ptr) { m_dataInput.readObject(ptr); }
@@ -259,12 +256,10 @@ TEST_F(DataInputTest, CanReadABooleanFromInput) {
   bool boolArray[2] = {true, false};
   DataInputUnderTest dataInput(reinterpret_cast<uint8_t *>(boolArray), 2, nullptr);
 
-  bool aBool = false;
-  dataInput.readBoolean(&aBool);
+  auto aBool = dataInput.readBoolean();
   EXPECT_EQ(aBool, true);
 
-  aBool = true;
-  dataInput.readBoolean(&aBool);
+  aBool = dataInput.readBoolean();
   EXPECT_EQ(aBool, false);
 }
 
@@ -293,8 +288,7 @@ TEST_F(DataInputTest, CanReadIntWithAMaxSizeUnsigned64BitIntInput) {
   DataInputUnderTest dataInput(reinterpret_cast<uint8_t *>(intArray), sizeof(intArray),
                       nullptr);
 
-  uint64_t aInt = 0UL;
-  dataInput.readInt(&aInt);
+  uint64_t aInt = dataInput.readInt64();
   EXPECT_EQ(aInt, std::numeric_limits<uint64_t>::max());
 }
 
@@ -481,29 +475,25 @@ TEST_F(DataInputTest, TestReadInt8_tBytes) {
 
 TEST_F(DataInputTest, TestReadIntUint16) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
-  uint16_t value = 0U;
-  dataInput.readInt(&value);
+  uint16_t value = dataInput.readInt16();
   EXPECT_EQ((uint16_t)4660U, value) << "Correct uint16_t";
 }
 
 TEST_F(DataInputTest, TestReadIntInt16) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
-  int16_t value = 0;
-  dataInput.readInt(&value);
+  int16_t value = dataInput.readInt16();
   EXPECT_EQ((int16_t)4660, value) << "Correct int16_t";
 }
 
 TEST_F(DataInputTest, TestReadIntUint32) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
-  uint32_t value = 0U;
-  dataInput.readInt(&value);
+  uint32_t value = dataInput.readInt32();
   EXPECT_EQ((uint32_t)305419896U, value) << "Correct uint32_t";
 }
 
 TEST_F(DataInputTest, TestReadIntInt32) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
-  int32_t value = 0;
-  dataInput.readInt(&value);
+  int32_t value = dataInput.readInt32();
   EXPECT_EQ((int32_t)305419896, value) << "Correct int32_t";
 }
 
@@ -516,8 +506,7 @@ TEST_F(DataInputTest, TestReadIntUint64) {
 
 TEST_F(DataInputTest, TestReadIntInt64) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
-  int64_t value = 0;
-  dataInput.readInt(&value);
+  int64_t value = dataInput.readInt64();
   EXPECT_EQ((int64_t)1311768467463790320, value) << "Correct int64_t";
 }
 
@@ -525,19 +514,19 @@ TEST_F(DataInputTest, TestReadArrayLen) {
   int32_t len = 0;
 
   TestDataInput dataInput0("FF12345678", nullptr);
-  dataInput0.readArrayLen(&len);
+  len = dataInput0.readArrayLen();
   EXPECT_EQ(-1, len) << "Correct length for 0xFF";
 
   TestDataInput dataInput1("FE12345678", nullptr);
-  dataInput1.readArrayLen(&len);
+  len = dataInput1.readArrayLen();
   EXPECT_EQ(4660, len) << "Correct length for 0xFE";
 
   TestDataInput dataInput2("FD12345678", nullptr);
-  dataInput2.readArrayLen(&len);
+  len = dataInput2.readArrayLen();
   EXPECT_EQ(305419896, len) << "Correct length for 0xFD";
 
   TestDataInput dataInput3("FC12345678", nullptr);
-  dataInput3.readArrayLen(&len);
+  len = dataInput3.readArrayLen();
   EXPECT_EQ(252, len) << "Correct length for 0xFC";
 }
 
@@ -556,22 +545,20 @@ TEST_F(DataInputTest, TestReadUnsignedVL) {
   // 00    92       9A       95       CF       89       D5       F3       BD F0
 
   TestDataInput dataInput("F0BDF3D589CF959A9200", nullptr);
-  int64_t value = 0;
-  dataInput.readUnsignedVL(&value);
+  int64_t value = dataInput.readUnsignedVL();
   EXPECT_EQ((int64_t)1311768467463790320, value) << "Correct int64_t";
 }
 
 TEST_F(DataInputTest, TestReadFloat) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
-  float value = 0.F;
-  dataInput.readFloat(&value);
+  float value = dataInput.readFloat();
   EXPECT_FLOAT_EQ(5.6904566e-28F, value) << "Correct float";
 }
 
 TEST_F(DataInputTest, TestReadDouble) {
   TestDataInput dataInput("123456789ABCDEF0", nullptr);
   double value = 0.;
-  dataInput.readDouble(&value);
+  value = dataInput.readDouble();
   EXPECT_DOUBLE_EQ(5.626349274901198e-221, value) << "Correct double";
 }
 
@@ -690,8 +677,7 @@ TEST_F(DataInputTest, TestReadNativeString) {
 TEST_F(DataInputTest, TestReadDirectObject) {
   TestDataInput dataInput(
       "57001B596F7520686164206D65206174206D65617420746F726E61646F2E", nullptr);
-  SerializablePtr objptr;
-  dataInput.readDirectObject(objptr);
+  SerializablePtr objptr = dataInput.readDirectObject();
   EXPECT_STREQ(
       (const char *)"You had me at meat tornado.",
       (const char *)(std::dynamic_pointer_cast<CacheableString>(objptr))
diff --git a/cppcache/test/StructSetTest.cpp b/cppcache/test/StructSetTest.cpp
index ba02e68..df1c085 100644
--- a/cppcache/test/StructSetTest.cpp
+++ b/cppcache/test/StructSetTest.cpp
@@ -30,18 +30,19 @@ TEST(StructSetTest, Basic) {
   
   for (size_t i = 0; i < numOfFields; i++) {
     std::string value = "value";
-    value += i;
+    value += std::to_string(i);
     std::string field = "field";
-    field += i;
+    field += std::to_string(i);
     values->push_back(CacheableString::create(value.c_str()));
     fieldNames.push_back(CacheableString::create(field.c_str()));
   }
   
-  StructSet* ss = new StructSetImpl(values, fieldNames);
+  auto ss = StructSetImpl(values, fieldNames);
   
-  ss->size();
+  ASSERT_EQ(1, ss.size());
 
 }
+
 TEST(StructSetTest, MissingFieldIndex) {
   CacheableVectorPtr values = CacheableVector::create();
   std::vector<CacheableStringPtr> fieldNames;
@@ -50,22 +51,18 @@ TEST(StructSetTest, MissingFieldIndex) {
   
   for (size_t i = 0; i < numOfFields; i++) {
     std::string value = "value";
-    value += i;
+    value += std::to_string(i);
     std::string field = "field";
-    field += i;
+    field += std::to_string(i);
     values->push_back(CacheableString::create(value.c_str()));
     fieldNames.push_back(CacheableString::create(field.c_str()));
   }
   
-  StructSet* ss = new StructSetImpl(values, fieldNames);
+  auto ss = StructSetImpl(values, fieldNames);
   
-  try {
-    ss->getFieldIndex("test");
-  } catch (const std::invalid_argument& e) {
-    printf("Caught expected exception: %s", e.what());
-  }
-
+  ASSERT_THROW(ss.getFieldIndex("test"), std::invalid_argument);
 }
+
 TEST(StructSetTest, MissingFieldName) {
   CacheableVectorPtr values = CacheableVector::create();
   std::vector<CacheableStringPtr> fieldNames;
@@ -74,18 +71,14 @@ TEST(StructSetTest, MissingFieldName) {
   
   for (size_t i = 0; i < numOfFields; i++) {
     std::string value = "value";
-    value += i;
+    value += std::to_string(i);
     std::string field = "field";
-    field += i;
+    field += std::to_string(i);
     values->push_back(CacheableString::create(value.c_str()));
     fieldNames.push_back(CacheableString::create(field.c_str()));
   }
   
-  StructSet* ss = new StructSetImpl(values, fieldNames);
+  auto ss = StructSetImpl(values, fieldNames);
   
-  try {
-    ss->getFieldName(100);
-  } catch (const std::out_of_range& e) {
-    printf("Caught expected exception: %s", e.what());
-  }
+  ASSERT_THROW(ss.getFieldName(100), std::out_of_range);
 }
diff --git a/sqliteimpl/SqLiteImpl.cpp b/sqliteimpl/SqLiteImpl.cpp
index c1a6a00..e8933a5 100644
--- a/sqliteimpl/SqLiteImpl.cpp
+++ b/sqliteimpl/SqLiteImpl.cpp
@@ -28,7 +28,8 @@ std::string g_default_persistence_directory = "GeodeRegionData";
 
 using namespace apache::geode::client;
 
-void SqLiteImpl::init(const RegionPtr& region, PropertiesPtr& diskProperties) {
+void SqLiteImpl::init(const RegionPtr& region,
+                      const PropertiesPtr& diskProperties) {
   // Set the default values
 
   int maxPageCount = 0;
diff --git a/sqliteimpl/SqLiteImpl.hpp b/sqliteimpl/SqLiteImpl.hpp
index f6538a9..dcf5b7a 100644
--- a/sqliteimpl/SqLiteImpl.hpp
+++ b/sqliteimpl/SqLiteImpl.hpp
@@ -49,7 +49,7 @@ class SqLiteImpl : public PersistenceManager {
    * @throws InitfailedException if persistence directory/environment directory
    * initialization fails.
    */
-  void init(const RegionPtr& regionptr, PropertiesPtr& diskProperties);
+  void init(const RegionPtr& regionptr, const PropertiesPtr& diskProperties);
 
   /**
    * Stores a key-value pair in the SqLite implementation.
diff --git a/tests/cli/NewFwkLib/CacheServer.cs b/tests/cli/NewFwkLib/CacheServer.cs
index 1128aa9..dddcbdf 100644
--- a/tests/cli/NewFwkLib/CacheServer.cs
+++ b/tests/cli/NewFwkLib/CacheServer.cs
@@ -1331,13 +1331,12 @@ namespace Apache.Geode.Client.FwkLib
               ResetKey("receiveValue");
               isReceiveValues = GetBoolValue("receiveValue");
           }
-          ICollection<TKey> keys = new List<TKey>();
           ResetKey("sleepBeforeRegisterInterest");
           int sleepTime = GetUIntValue("sleepBeforeRegisterInterest");
           sleepTime = sleepTime > 0 ? sleepTime : 0;
           FwkInfo("Sleeping for " + sleepTime + " millis");
           Thread.Sleep(sleepTime);
-          region.GetSubscriptionService().RegisterAllKeys(isDurable, keys, isGetInitialValues, isReceiveValues);
+          region.GetSubscriptionService().RegisterAllKeys(isDurable, isGetInitialValues, isReceiveValues);
           String durableClientId = CacheHelper<TKey, TVal>.DCache.DistributedSystem.SystemProperties.DurableClientId;
           if (durableClientId.Length > 0)
           {
diff --git a/tests/cli/NewFwkLib/DeltaTest/DeltaTest.cs b/tests/cli/NewFwkLib/DeltaTest/DeltaTest.cs
index be37c81..f193865 100644
--- a/tests/cli/NewFwkLib/DeltaTest/DeltaTest.cs
+++ b/tests/cli/NewFwkLib/DeltaTest/DeltaTest.cs
@@ -562,7 +562,7 @@ namespace Apache.Geode.Client.FwkLib
         bool isDurable = GetBoolValue("isDurableReg");
         ResetKey("getInitialValues");
         bool isGetInitialValues = GetBoolValue("getInitialValues");
-        region.GetSubscriptionService().RegisterAllKeys(isDurable, null, isGetInitialValues);
+        region.GetSubscriptionService().RegisterAllKeys(isDurable, isGetInitialValues);
       }
       catch (Exception ex)
       {
diff --git a/tests/cli/NewFwkLib/PdxTest/PdxTests.cs b/tests/cli/NewFwkLib/PdxTest/PdxTests.cs
index 5962fe4..f15d6e6 100644
--- a/tests/cli/NewFwkLib/PdxTest/PdxTests.cs
+++ b/tests/cli/NewFwkLib/PdxTest/PdxTests.cs
@@ -1420,7 +1420,7 @@ namespace Apache.Geode.Client.FwkLib
                     ResetKey("receiveValue");
                     isReceiveValues = GetBoolValue("receiveValue");
                 }
-                region.GetSubscriptionService().RegisterAllKeys(isDurable, null, isGetInitialValues, isReceiveValues);
+                region.GetSubscriptionService().RegisterAllKeys(isDurable, isGetInitialValues, isReceiveValues);
             }
             catch (Exception ex)
             {
diff --git a/tests/cli/NewFwkLib/PerfTest/PerfTests.cs b/tests/cli/NewFwkLib/PerfTest/PerfTests.cs
index 3081f67..755bcb0 100644
--- a/tests/cli/NewFwkLib/PerfTest/PerfTests.cs
+++ b/tests/cli/NewFwkLib/PerfTest/PerfTests.cs
@@ -1149,7 +1149,7 @@ namespace Apache.Geode.Client.FwkLib
           ResetKey("receiveValue");
           isReceiveValues = GetBoolValue("receiveValue");
         }
-        region.GetSubscriptionService().RegisterAllKeys(isDurable, null, isGetInitialValues,isReceiveValues);
+        region.GetSubscriptionService().RegisterAllKeys(isDurable, isGetInitialValues,isReceiveValues);
         String durableClientId = CacheHelper<TKey, TVal>.DCache.DistributedSystem.SystemProperties.DurableClientId;
         if (durableClientId.Length > 0)
         {
@@ -1243,7 +1243,7 @@ namespace Apache.Geode.Client.FwkLib
           ResetKey("receiveValue");
           isReceiveValues = GetBoolValue("receiveValue");
         }
-        region.GetSubscriptionService().RegisterRegex(regex, isDurable, null, isGetInitialValues, isReceiveValues);
+        region.GetSubscriptionService().RegisterRegex(regex, isDurable, isGetInitialValues, isReceiveValues);
         String durableClientId = CacheHelper<TKey, TVal>.DCache.DistributedSystem.SystemProperties.DurableClientId;
         if (durableClientId.Length > 0)
         {
diff --git a/tests/cli/NewFwkLib/ResumableTx/ResumableTx.cs b/tests/cli/NewFwkLib/ResumableTx/ResumableTx.cs
index eb00b57..6ef069a 100644
--- a/tests/cli/NewFwkLib/ResumableTx/ResumableTx.cs
+++ b/tests/cli/NewFwkLib/ResumableTx/ResumableTx.cs
@@ -868,7 +868,7 @@ namespace Apache.Geode.Client.FwkLib
           ResetKey("receiveValue");
           isReceiveValues = GetBoolValue("receiveValue");
         }
-        region.GetSubscriptionService().RegisterAllKeys(isDurable, null, isGetInitialValues, isReceiveValues);
+        region.GetSubscriptionService().RegisterAllKeys(isDurable, isGetInitialValues, isReceiveValues);
       }
       catch (Exception ex)
       {
diff --git a/tests/cpp/fwklib/FrameworkTest.cpp b/tests/cpp/fwklib/FrameworkTest.cpp
index 1a1994d..73cb357 100644
--- a/tests/cpp/fwklib/FrameworkTest.cpp
+++ b/tests/cpp/fwklib/FrameworkTest.cpp
@@ -314,9 +314,7 @@ void FrameworkTest::incClientCount() {
 
 void FrameworkTest::destroyAllRegions() {
   // destroy all root regions
-  VectorOfRegion vec;
-  m_cache->rootRegions(vec);
-  for (auto& region : vec) {
+  for (auto& region : m_cache->rootRegions()) {
     localDestroyRegion(region);
   }
 }
diff --git a/tests/cpp/fwklib/PerfFwk.hpp b/tests/cpp/fwklib/PerfFwk.hpp
index 346bcbb..f297106 100644
--- a/tests/cpp/fwklib/PerfFwk.hpp
+++ b/tests/cpp/fwklib/PerfFwk.hpp
@@ -202,8 +202,8 @@ class Record {
 
   inline void read(apache::geode::client::DataInput& input) {
     input.readASCII(&m_testName);
-    input.readInt(reinterpret_cast<int32_t*>(&m_operations));
-    input.readInt(reinterpret_cast<int32_t*>(&m_micros));
+    m_operations = input.readInt32();
+    m_micros = input.readInt32();
   }
 
   inline std::string perSec() {
diff --git a/tests/cpp/security/Security.cpp b/tests/cpp/security/Security.cpp
index f0a3166..306ae95 100644
--- a/tests/cpp/security/Security.cpp
+++ b/tests/cpp/security/Security.cpp
@@ -703,10 +703,9 @@ int32_t Security::checkValues() {
   int32_t result = FWK_SEVERE;
   FWKINFO("In Security::checkValues()");
   try {
-    RegionPtr region = getRegionPtr();
+    auto region = getRegionPtr();
 
-    VectorOfCacheable vals;
-    region->values(vals);
+    auto vals = region->values();
     int32_t creates = 0;
     int32_t updates = 0;
     int32_t unknowns = 0;
@@ -761,8 +760,7 @@ RegionPtr Security::getRegionPtr(const char *reg) {
   }
   try {
     if (name.empty()) {  // just get a random root region
-      VectorOfRegion rootRegionVector;
-      m_cache->rootRegions(rootRegionVector);
+      auto rootRegionVector = m_cache->rootRegions();
       int32_t size = rootRegionVector.size();
 
       if (size == 0) {
diff --git a/tests/cpp/testobject/ArrayOfByte.hpp b/tests/cpp/testobject/ArrayOfByte.hpp
index a898468..ef093c4 100644
--- a/tests/cpp/testobject/ArrayOfByte.hpp
+++ b/tests/cpp/testobject/ArrayOfByte.hpp
@@ -88,10 +88,8 @@ class TESTOBJECT_EXPORT ArrayOfByte {
     }
     DataInputInternal di(bytes->value(), bytes->length(), nullptr);
     try {
-      int32_t index;
-      di.readInt(&index);
-      int64_t timestamp;
-      di.readInt(&timestamp);
+      di.readInt32();
+      int64_t timestamp = di.readInt64();
       if (timestamp == 0) {
         FWKEXCEPTION("Object is not configured to encode timestamp");
       }
@@ -106,9 +104,8 @@ class TESTOBJECT_EXPORT ArrayOfByte {
     DataInputInternal di(bytes->value(), bytes->length(), nullptr);
     int32_t index;
     try {
-      di.readInt(&index);
-      int64_t timestamp;
-      di.readInt(&timestamp);
+      index = di.readInt32();
+      int64_t timestamp = di.readInt64();
       if (timestamp == 0) {
         return;
       }
diff --git a/tests/cpp/testobject/BatchObject.cpp b/tests/cpp/testobject/BatchObject.cpp
index d581596..99dbf03 100644
--- a/tests/cpp/testobject/BatchObject.cpp
+++ b/tests/cpp/testobject/BatchObject.cpp
@@ -41,10 +41,10 @@ void BatchObject::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void BatchObject::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(&index);
-  input.readInt(reinterpret_cast<int64_t*>(&timestamp));
-  input.readInt(&batch);
-  input.readObject(byteArray);
+  index = input.readInt32();
+  timestamp = input.readInt64();
+  batch = input.readInt32();
+  byteArray = input.readObject<CacheableBytes>();
 }
 
 CacheableStringPtr BatchObject::toString() const {
diff --git a/tests/cpp/testobject/DeltaFastAssetAccount.cpp b/tests/cpp/testobject/DeltaFastAssetAccount.cpp
index 010584c..9903782 100644
--- a/tests/cpp/testobject/DeltaFastAssetAccount.cpp
+++ b/tests/cpp/testobject/DeltaFastAssetAccount.cpp
@@ -53,11 +53,11 @@ void DeltaFastAssetAccount::toData(
 }
 
 void DeltaFastAssetAccount::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(&acctId);
-  input.readObject(customerName);
-  input.readDouble(&netWorth);
-  input.readObject(assets);
-  input.readInt(reinterpret_cast<int64_t*>(&timestamp));
+  acctId = input.readInt32();
+  customerName = input.readObject<CacheableString>();
+  netWorth = input.readDouble();
+  assets = input.readObject<CacheableHashMap>();
+  timestamp = input.readInt64();
 }
 
 void DeltaFastAssetAccount::toDelta(
@@ -70,13 +70,13 @@ void DeltaFastAssetAccount::toDelta(
 
 void DeltaFastAssetAccount::fromDelta(apache::geode::client::DataInput& input) {
   if (getBeforeUpdate) {
-    input.readDouble(&netWorth);
+    netWorth = input.readDouble();
   } else {
     double netWorthTemp;
-    input.readDouble(&netWorthTemp);
+    netWorthTemp = input.readDouble();
     netWorth += netWorthTemp;
   }
   if (encodeTimestamp) {
-    input.readInt(reinterpret_cast<int64_t*>(&timestamp));
+    timestamp = input.readInt64();
   }
 }
diff --git a/tests/cpp/testobject/DeltaPSTObject.cpp b/tests/cpp/testobject/DeltaPSTObject.cpp
index 6581b55..74371fb 100644
--- a/tests/cpp/testobject/DeltaPSTObject.cpp
+++ b/tests/cpp/testobject/DeltaPSTObject.cpp
@@ -41,8 +41,8 @@ DeltaPSTObject::DeltaPSTObject(int size, bool encodeKey, bool encodeTimestamp)
 }
 
 void DeltaPSTObject::fromDelta(DataInput& input) {
-  input.readInt(&field1);
-  input.readInt(reinterpret_cast<int64_t*>(&timestamp));
+  field1 = input.readInt32();
+  timestamp = input.readInt64();
 }
 
 void DeltaPSTObject::toDelta(DataOutput& output) const {
@@ -58,10 +58,10 @@ void DeltaPSTObject::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void DeltaPSTObject::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(reinterpret_cast<int64_t*>(&timestamp));
-  input.readInt(&field1);
-  input.read(&field2);
-  input.readObject(valueData);
+  timestamp = input.readInt64();
+  field1 = input.readInt32();
+  field2 = input.read();
+  valueData = input.readObject<CacheableBytes>();
 }
 
 CacheableStringPtr DeltaPSTObject::toString() const {
diff --git a/tests/cpp/testobject/DeltaTestImpl.cpp b/tests/cpp/testobject/DeltaTestImpl.cpp
index 6031c21..9ceb626 100644
--- a/tests/cpp/testobject/DeltaTestImpl.cpp
+++ b/tests/cpp/testobject/DeltaTestImpl.cpp
@@ -66,11 +66,11 @@ DeltaTestImpl::DeltaTestImpl(DeltaTestImplPtr rhs) : Delta(nullptr) {
 }
 
 void DeltaTestImpl::fromData(DataInput& input) {
-  input.readInt(&intVar);
-  input.readObject(str);
-  input.readDouble(&doubleVar);
-  input.readObject(byteArr);
-  input.readObject(testObj);
+  intVar = input.readInt32();
+  str = input.readObject<CacheableString>();
+  doubleVar = input.readDouble();
+  byteArr = input.readObject<CacheableBytes>();
+  testObj = input.readObject<TestObject1>();
 }
 
 void DeltaTestImpl::toData(DataOutput& output) const {
@@ -111,18 +111,18 @@ void DeltaTestImpl::fromDelta(DataInput& input) {
     ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_lock);
     fromDeltaCounter++;
   }
-  input.read(&deltaBits);
+  deltaBits = input.read();
   if ((deltaBits & INT_MASK) == INT_MASK) {
-    input.readInt(&intVar);
+    intVar = input.readInt32();
   }
   if ((deltaBits & STR_MASK) == STR_MASK) {
-    input.readObject(str);
+    str = input.readObject<CacheableString>();
   }
   if ((deltaBits & DOUBLE_MASK) == DOUBLE_MASK) {
-    input.readDouble(&doubleVar);
+    doubleVar = input.readDouble();
   }
   if ((deltaBits & BYTE_ARR_MASK) == BYTE_ARR_MASK) {
-    input.readObject(byteArr);
+    byteArr = input.readObject<CacheableBytes>();
     /*
         uint8_t* bytes;
         int32_t len;
@@ -132,7 +132,7 @@ void DeltaTestImpl::fromDelta(DataInput& input) {
     */
   }
   if ((deltaBits & TEST_OBJ_MASK) == TEST_OBJ_MASK) {
-    input.readObject(testObj);
+    testObj = input.readObject<TestObject1>();
   }
 }
 CacheableStringPtr DeltaTestImpl::toString() const {
diff --git a/tests/cpp/testobject/EqStruct.cpp b/tests/cpp/testobject/EqStruct.cpp
index 755789e..820850f 100644
--- a/tests/cpp/testobject/EqStruct.cpp
+++ b/tests/cpp/testobject/EqStruct.cpp
@@ -175,29 +175,29 @@ void EqStruct::fromData(apache::geode::client::DataInput &in) {
   in.readUTF(&var9);
 
   // ints
-  in.readInt(&myIndex);
-  in.readInt(&cxlQty);
-  in.readInt(&isSyntheticOrder);
-  in.readInt(&isRestricted);
-  in.readInt(&orderQty);
-  in.readInt(&cumQty);
-  in.readInt(&isDoneForDay);
-  in.readInt(&revisionSeqNum);
-  in.readInt(&replaceQty);
-  in.readInt(&isIrregularSettlmnt);
+  myIndex = in.readInt32();
+  cxlQty = in.readInt32();
+  isSyntheticOrder = in.readInt32();
+  isRestricted = in.readInt32();
+  orderQty = in.readInt32();
+  cumQty = in.readInt32();
+  isDoneForDay = in.readInt32();
+  revisionSeqNum = in.readInt32();
+  replaceQty = in.readInt32();
+  isIrregularSettlmnt = in.readInt32();
 
   // longs
-  in.readInt(reinterpret_cast<int64_t *>(&timestamp));
-  in.readInt(&availQty);
-  in.readInt(&usedClientAvailability);
+  timestamp = in.readInt64();
+  availQty = in.readInt64();
+  usedClientAvailability = in.readInt64();
 
   // doubles
-  in.readDouble(&executedPriceSum);
-  in.readDouble(&positionQty);
-  in.readDouble(&price);
-  in.readDouble(&stopPx);
-  in.readDouble(&pegDifference);
-  in.readDouble(&discretionOffset);
+  executedPriceSum = in.readDouble();
+  positionQty = in.readDouble();
+  price = in.readDouble();
+  stopPx = in.readDouble();
+  pegDifference = in.readDouble();
+  discretionOffset = in.readDouble();
 }
 
 CacheableStringPtr EqStruct::toString() const {
diff --git a/tests/cpp/testobject/FastAsset.cpp b/tests/cpp/testobject/FastAsset.cpp
index 005a289..3914b48 100644
--- a/tests/cpp/testobject/FastAsset.cpp
+++ b/tests/cpp/testobject/FastAsset.cpp
@@ -33,6 +33,6 @@ void FastAsset::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void FastAsset::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(&assetId);
-  input.readDouble(&value);
+  assetId = input.readInt32();
+  value = input.readDouble();
 }
diff --git a/tests/cpp/testobject/FastAssetAccount.cpp b/tests/cpp/testobject/FastAssetAccount.cpp
index 8f8bf83..a8b393c 100644
--- a/tests/cpp/testobject/FastAssetAccount.cpp
+++ b/tests/cpp/testobject/FastAssetAccount.cpp
@@ -55,11 +55,11 @@ void FastAssetAccount::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void FastAssetAccount::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(&acctId);
-  input.readObject(customerName);
-  input.readDouble(&netWorth);
-  input.readObject(assets);
-  input.readInt(reinterpret_cast<int64_t*>(&timestamp));
+  acctId = input.readInt32();
+  customerName = input.readObject<CacheableString>();
+  netWorth = input.readDouble();
+  assets = input.readObject<CacheableHashMap>();
+  timestamp = input.readInt64();
 }
 
 CacheableStringPtr FastAssetAccount::toString() const {
diff --git a/tests/cpp/testobject/InvalidPdxUsage.cpp b/tests/cpp/testobject/InvalidPdxUsage.cpp
index 7ebf332..5f9851d 100644
--- a/tests/cpp/testobject/InvalidPdxUsage.cpp
+++ b/tests/cpp/testobject/InvalidPdxUsage.cpp
@@ -94,7 +94,7 @@ void InvalidPdxUsage::toData(PdxWriterPtr pw) /*const*/ {
   }
 
   try {
-    pw->writeWideChar("", m_char);
+    pw->writeChar("", m_char);
     pw->markIdentityField("m_char");
   } catch (IllegalStateException& excpt) {
     toDataexceptionCounter++;
diff --git a/tests/cpp/testobject/InvalidPdxUsage.hpp b/tests/cpp/testobject/InvalidPdxUsage.hpp
index 130d9ad..af07a62 100644
--- a/tests/cpp/testobject/InvalidPdxUsage.hpp
+++ b/tests/cpp/testobject/InvalidPdxUsage.hpp
@@ -48,7 +48,7 @@ namespace PdxTests {
 class TESTOBJECT_EXPORT CharTypesWithInvalidUsage : public PdxSerializable {
  private:
   char m_ch;
-  wchar_t m_widechar;
+  char16_t m_widechar;
   char* m_chArray;
   wchar_t* m_widecharArray;
 
@@ -129,7 +129,7 @@ class TESTOBJECT_EXPORT CharTypesWithInvalidUsage : public PdxSerializable {
 
   void toData(PdxWriterPtr pw) {
     pw->writeChar("m_ch", m_ch);
-    pw->writeWideChar("m_widechar", m_widechar);
+    pw->writeChar("m_widechar", m_widechar);
     pw->writeCharArray("m_chArray", m_chArray, 2);
     pw->writeWideCharArray("m_widecharArray", m_widecharArray, 2);
   }
@@ -228,7 +228,7 @@ enum pdxEnumTestWithInvalidAPIUsage { mypdx1, mypdx2, mypdx3 };
 
 class TESTOBJECT_EXPORT InvalidPdxUsage : public PdxSerializable {
  private:
-  wchar_t m_char;
+  char16_t m_char;
   bool m_bool;
   int8_t m_byte;
   int8_t m_sbyte;
diff --git a/tests/cpp/testobject/NestedPdxObject.cpp b/tests/cpp/testobject/NestedPdxObject.cpp
index 660f13e..b9be571 100644
--- a/tests/cpp/testobject/NestedPdxObject.cpp
+++ b/tests/cpp/testobject/NestedPdxObject.cpp
@@ -96,7 +96,7 @@ void ParentPdx::toData(PdxWriterPtr pw) {
   pw->markIdentityField("m_childPdx");
 
   pw->writeChar("m_char", m_char);
-  pw->writeWideChar("m_wideChar", m_wideChar);
+  pw->writeChar("m_wideChar", m_wideChar);
   pw->writeCharArray("m_charArray", m_charArray, 2);
   pw->writeWideCharArray("m_wideCharArray", m_wideCharArray, 2);
 
diff --git a/tests/cpp/testobject/NestedPdxObject.hpp b/tests/cpp/testobject/NestedPdxObject.hpp
index c77dd05..d75d43f 100644
--- a/tests/cpp/testobject/NestedPdxObject.hpp
+++ b/tests/cpp/testobject/NestedPdxObject.hpp
@@ -102,7 +102,7 @@ class TESTOBJECT_EXPORT ParentPdx : public PdxSerializable {
   CacheableEnumPtr m_enum;
   int m_arrLength;
   char m_char;
-  wchar_t m_wideChar;
+  char16_t m_wideChar;
   char* m_charArray;
   wchar_t* m_wideCharArray;
 
diff --git a/tests/cpp/testobject/PSTObject.cpp b/tests/cpp/testobject/PSTObject.cpp
index 66b50b5..842b65f 100644
--- a/tests/cpp/testobject/PSTObject.cpp
+++ b/tests/cpp/testobject/PSTObject.cpp
@@ -49,10 +49,10 @@ void PSTObject::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void PSTObject::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(reinterpret_cast<int64_t*>(&timestamp));
-  input.readInt(&field1);
-  input.read(&field2);
-  input.readObject(valueData);
+  timestamp = input.readInt64();
+  field1 = input.readInt32();
+  field2 = input.read();
+  valueData = input.readObject<CacheableBytes>();
 }
 
 CacheableStringPtr PSTObject::toString() const {
diff --git a/tests/cpp/testobject/PdxType.cpp b/tests/cpp/testobject/PdxType.cpp
index 025a072..d8a74a3 100644
--- a/tests/cpp/testobject/PdxType.cpp
+++ b/tests/cpp/testobject/PdxType.cpp
@@ -79,7 +79,7 @@ void PdxTests::PdxType::toData(PdxWriterPtr pw) /*const*/ {
   lengthArr[0] = 1;
   lengthArr[1] = 2;
   pw->writeArrayOfByteArrays("m_byteByteArray", m_byteByteArray, 2, lengthArr);
-  pw->writeWideChar("m_char", m_char);
+  pw->writeChar("m_char", m_char);
   pw->markIdentityField("m_char");
   pw->writeBoolean("m_bool", m_bool);  // 1
   pw->markIdentityField("m_bool");
diff --git a/tests/cpp/testobject/PdxType.hpp b/tests/cpp/testobject/PdxType.hpp
index 59963ec..a2c96ca 100644
--- a/tests/cpp/testobject/PdxType.hpp
+++ b/tests/cpp/testobject/PdxType.hpp
@@ -150,7 +150,7 @@ class TESTOBJECT_EXPORT Child : public Parent, public PdxSerializable {
 class TESTOBJECT_EXPORT CharTypes : public PdxSerializable {
  private:
   char m_ch;
-  wchar_t m_widechar;
+  char16_t m_widechar;
   char* m_chArray;
   wchar_t* m_widecharArray;
 
@@ -228,7 +228,7 @@ class TESTOBJECT_EXPORT CharTypes : public PdxSerializable {
 
   void toData(PdxWriterPtr pw) {
     pw->writeChar("m_ch", m_ch);
-    pw->writeWideChar("m_widechar", m_widechar);
+    pw->writeChar("m_widechar", m_widechar);
     pw->writeCharArray("m_chArray", m_chArray, 2);
     pw->writeWideCharArray("m_widecharArray", m_widecharArray, 2);
   }
@@ -326,7 +326,7 @@ typedef std::shared_ptr<Address> AddressPtr;
 enum pdxEnumTest { pdx1, pdx2, pdx3 };
 class TESTOBJECT_EXPORT PdxType : public PdxSerializable {
  private:
-  wchar_t m_char;
+  char16_t m_char;
   bool m_bool;
   int8_t m_byte;
   int8_t m_sbyte;  //
@@ -664,7 +664,7 @@ class TESTOBJECT_EXPORT PdxType : public PdxSerializable {
     return objectSize;
   }
 
-  wchar_t getChar() { return m_char; }
+  char16_t getChar() { return m_char; }
 
   wchar_t* getCharArray() { return m_charArray; }
 
diff --git a/tests/cpp/testobject/PdxVersioned1.cpp b/tests/cpp/testobject/PdxVersioned1.cpp
index c36d543..26da186 100644
--- a/tests/cpp/testobject/PdxVersioned1.cpp
+++ b/tests/cpp/testobject/PdxVersioned1.cpp
@@ -277,7 +277,7 @@ void PdxTests::PdxVersioned1::toData(PdxWriterPtr pw) /*const*/ {
   lengthArr[0] = 1;
   lengthArr[1] = 2;
   pw->writeArrayOfByteArrays("m_byteByteArray", m_byteByteArray, 2, lengthArr);
-  pw->writeWideChar("m_char", m_char);
+  pw->writeChar("m_char", m_char);
   pw->writeBoolean("m_bool", m_bool);  // 1
   pw->writeBooleanArray("m_boolArray", m_boolArray, 3);
   pw->writeByte("m_byte", m_byte);
diff --git a/tests/cpp/testobject/PdxVersioned1.hpp b/tests/cpp/testobject/PdxVersioned1.hpp
index d16653a..7c153c2 100644
--- a/tests/cpp/testobject/PdxVersioned1.hpp
+++ b/tests/cpp/testobject/PdxVersioned1.hpp
@@ -48,7 +48,7 @@ namespace PdxTests {
 
 class TESTOBJECT_EXPORT PdxVersioned1 : public PdxSerializable {
  private:
-  wchar_t m_char;
+  char16_t m_char;
   bool m_bool;
   int8_t m_byte;
   int8_t m_sbyte;  //
diff --git a/tests/cpp/testobject/PdxVersioned2.cpp b/tests/cpp/testobject/PdxVersioned2.cpp
index 4813a62..c093398 100644
--- a/tests/cpp/testobject/PdxVersioned2.cpp
+++ b/tests/cpp/testobject/PdxVersioned2.cpp
@@ -281,7 +281,7 @@ void PdxTests::PdxVersioned2::toData(PdxWriterPtr pw) /*const*/ {
   lengthArr[0] = 1;
   lengthArr[1] = 2;
   pw->writeArrayOfByteArrays("m_byteByteArray", m_byteByteArray, 2, lengthArr);
-  pw->writeWideChar("m_char", m_char);
+  pw->writeChar("m_char", m_char);
   pw->writeBoolean("m_bool", m_bool);  // 1
   pw->writeBooleanArray("m_boolArray", m_boolArray, 3);
   pw->writeByte("m_byte", m_byte);
diff --git a/tests/cpp/testobject/PdxVersioned2.hpp b/tests/cpp/testobject/PdxVersioned2.hpp
index 18843d7..047daee 100644
--- a/tests/cpp/testobject/PdxVersioned2.hpp
+++ b/tests/cpp/testobject/PdxVersioned2.hpp
@@ -48,7 +48,7 @@ namespace PdxTests {
 
 class TESTOBJECT_EXPORT PdxVersioned2 : public PdxSerializable {
  private:
-  wchar_t m_char;
+  char16_t m_char;
   bool m_bool;
   int8_t m_byte;
   int8_t m_sbyte;  //
diff --git a/tests/cpp/testobject/Portfolio.cpp b/tests/cpp/testobject/Portfolio.cpp
index d78638d..3b0c8a3 100644
--- a/tests/cpp/testobject/Portfolio.cpp
+++ b/tests/cpp/testobject/Portfolio.cpp
@@ -83,16 +83,16 @@ void Portfolio::toData(DataOutput& output) const {
 }
 
 void Portfolio::fromData(DataInput& input) {
-  input.readInt(&ID);
-  input.readObject(pkid);
-  input.readObject(position1);
-  input.readObject(position2);
-  input.readObject(positions);
-  input.readObject(type);
+  ID = input.readInt32();
+  pkid = input.readObject<CacheableString>();
+  position1 = input.readObject<Position>();
+  position2 = input.readObject<Position>();
+  positions = input.readObject<CacheableHashMap>();
+  type = input.readObject<CacheableString>();
   input.readUTF(&status);
-  input.readObject(names);
+  names = input.readObject<CacheableStringArray>();
   input.readBytes(&newVal, &newValSize);
-  input.readObject(creationDate);
+  creationDate = input.readObject<CacheableDate>();
   int tmp = 0;
   input.readBytes(&arrayNull, &tmp);
   input.readBytes(&arrayZeroSize, &tmp);
diff --git a/tests/cpp/testobject/Position.cpp b/tests/cpp/testobject/Position.cpp
index 3885a47..3258b07 100644
--- a/tests/cpp/testobject/Position.cpp
+++ b/tests/cpp/testobject/Position.cpp
@@ -100,22 +100,22 @@ void Position::toData(apache::geode::client::DataOutput& output) const {
 }
 
 void Position::fromData(apache::geode::client::DataInput& input) {
-  input.readInt(&avg20DaysVol);
-  input.readObject(bondRating);
-  input.readDouble(&convRatio);
-  input.readObject(country);
-  input.readDouble(&delta);
-  input.readInt(&industry);
-  input.readInt(&issuer);
-  input.readDouble(&mktValue);
-  input.readDouble(&qty);
-  input.readObject(secId);
-  input.readObject(secLinks);
+  avg20DaysVol = input.readInt64();
+  bondRating = input.readObject<CacheableString>();
+  convRatio = input.readDouble();
+  country = input.readObject<CacheableString>();
+  delta = input.readDouble();
+  industry = input.readInt64();
+  issuer = input.readInt64();
+  mktValue = input.readDouble();
+  qty = input.readDouble();
+  secId = input.readObject<CacheableString>();
+  secLinks = input.readObject<CacheableString>();
   input.readUTF(&secType);
-  input.readInt(&sharesOutstanding);
-  input.readObject(underlyer);
-  input.readInt(&volatility);
-  input.readInt(&pid);
+  sharesOutstanding = input.readInt32();
+  underlyer = input.readObject<CacheableString>();
+  volatility = input.readInt64();
+  pid = input.readInt32();
 }
 
 CacheableStringPtr Position::toString() const {
diff --git a/tests/cpp/testobject/TestObject1.cpp b/tests/cpp/testobject/TestObject1.cpp
index 9567bb4..92f7d98 100644
--- a/tests/cpp/testobject/TestObject1.cpp
+++ b/tests/cpp/testobject/TestObject1.cpp
@@ -59,8 +59,8 @@ void TestObject1::fromData(DataInput& input) {
   input.readBytes(&bytes, &len);
   arr = CacheableBytes::create(bytes, len);
   delete bytes;
-  input.readObject(name);
-  input.readInt(&identifier);
+  name = input.readObject<CacheableString>();
+  identifier = input.readInt32();
 }
 
 Serializable* TestObject1::create() { return new TestObject1(); }
diff --git a/tests/cpp/testobject/VariousPdxTypes.cpp b/tests/cpp/testobject/VariousPdxTypes.cpp
index daa172d..c215bba 100644
--- a/tests/cpp/testobject/VariousPdxTypes.cpp
+++ b/tests/cpp/testobject/VariousPdxTypes.cpp
@@ -918,14 +918,14 @@ void PdxInsideIGeodeSerializable::toData(DataOutput &output) const {
 }
 
 void PdxInsideIGeodeSerializable::fromData(DataInput &input) {
-  input.readInt(&m_i1);
-  input.readObject(m_npdx);
-  input.readInt(&m_i2);
+  m_i1 = input.readInt32();
+  m_npdx = input.readObject<NestedPdx>();
+  m_i2 = input.readInt32();
   input.readUTF(&m_s1);
   input.readUTF(&m_s2);
-  input.readObject(m_pdx3);
-  input.readInt(&m_i3);
-  input.readInt(&m_i4);
+  m_pdx3 = input.readObject<PdxTypes3>();
+  m_i3 = input.readInt32();
+  m_i4 = input.readInt32();
 }
 
 } /* namespace PdxTests */

-- 
To stop receiving notification emails like this one, please contact
"commits@geode.apache.org" <co...@geode.apache.org>.