geode-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (GEODE-3288) Replace char* with std::string
Date Sat, 02 Dec 2017 00:02:22 GMT

    [ https://issues.apache.org/jira/browse/GEODE-3288?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16275218#comment-16275218 ] 

ASF GitHub Bot commented on GEODE-3288:
---------------------------------------

pivotal-jbarrett closed pull request #160: GEODE-3288: Converts char* to std::string on public API.
URL: https://github.com/apache/geode-native/pull/160
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/clicache/integration-test/CacheHelperN.cs b/clicache/integration-test/CacheHelperN.cs
index 6347647d..72266b7b 100644
--- a/clicache/integration-test/CacheHelperN.cs
+++ b/clicache/integration-test/CacheHelperN.cs
@@ -1888,7 +1888,7 @@ public static int getBaseLocatorPort()
           extraLocatorArgs += sslArgs;
         }
 
-        string locatorArgs = LocatorStartArgs + " --name=" + serverName + startDir + extraLocatorArgs;
+        string locatorArgs = LocatorStartArgs + " --name=" + serverName + startDir + extraLocatorArgs + " --http-service-port=0";
 
         if (!Util.StartProcess(locatorPath, locatorArgs, false, null, true,
           false, false, true, out javaProc))
diff --git a/clicache/src/AttributesFactory.cpp b/clicache/src/AttributesFactory.cpp
index d79f08cd..5d9fe0ae 100644
--- a/clicache/src/AttributesFactory.cpp
+++ b/clicache/src/AttributesFactory.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "AttributesFactory.hpp"
 #include "Region.hpp"
 #include "impl/ManagedCacheLoader.hpp"
@@ -42,6 +43,7 @@
 #include <memory>
 #include "end_native.hpp"
 
+
 namespace Apache
 {
   namespace Geode
@@ -50,6 +52,7 @@ namespace Apache
     {
       using namespace System;
       using namespace System::Collections::Generic;
+      using namespace msclr::interop;
 
       namespace native = apache::geode::client;
 
@@ -160,12 +163,10 @@ namespace Apache
       AttributesFactory<TKey, TValue>^ AttributesFactory<TKey, TValue>::SetCacheLoader( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setCacheLoader( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setCacheLoader( marshal_as<std::string>(libPath), marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -178,12 +179,10 @@ namespace Apache
       AttributesFactory<TKey, TValue>^ AttributesFactory<TKey, TValue>::SetCacheWriter( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setCacheWriter( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setCacheWriter( marshal_as<std::string>(libPath), marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -196,12 +195,10 @@ namespace Apache
       AttributesFactory<TKey, TValue>^ AttributesFactory<TKey, TValue>::SetCacheListener( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setCacheListener( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setCacheListener( marshal_as<std::string>(libPath), marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -214,12 +211,10 @@ namespace Apache
       AttributesFactory<TKey, TValue>^ AttributesFactory<TKey, TValue>::SetPartitionResolver( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setPartitionResolver( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setPartitionResolver( marshal_as<std::string>(libPath), marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -327,12 +322,10 @@ namespace Apache
       AttributesFactory<TKey, TValue>^ AttributesFactory<TKey, TValue>::SetPersistenceManager( String^ libPath,
         String^ factoryFunctionName, Properties<String^, String^>^ config )
       {        
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setPersistenceManager(mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr, config->GetNative());
+          m_nativeptr->get()->setPersistenceManager(marshal_as<std::string>(libPath), marshal_as<std::string>(factoryFunctionName), config->GetNative());
         }
         finally
         {
@@ -347,11 +340,10 @@ namespace Apache
       generic<class TKey, class TValue>
       AttributesFactory<TKey, TValue>^ AttributesFactory<TKey, TValue>::SetPoolName( String^ poolName )
       {
-        ManagedString mg_poolName( poolName );
 
         try
         {
-          m_nativeptr->get()->setPoolName( mg_poolName.CharPtr );
+          m_nativeptr->get()->setPoolName( marshal_as<std::string>(poolName) );
         }
         finally
         {
diff --git a/clicache/src/AttributesFactory.hpp b/clicache/src/AttributesFactory.hpp
index 095b90df..a7ddd5de 100644
--- a/clicache/src/AttributesFactory.hpp
+++ b/clicache/src/AttributesFactory.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/AttributesFactory.hpp>
diff --git a/clicache/src/AttributesMutator.cpp b/clicache/src/AttributesMutator.cpp
index 9bf74380..10c52007 100644
--- a/clicache/src/AttributesMutator.cpp
+++ b/clicache/src/AttributesMutator.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "AttributesMutator.hpp"
 
 #include "impl/ManagedCacheListener.hpp"
diff --git a/clicache/src/AttributesMutator.hpp b/clicache/src/AttributesMutator.hpp
index 443cdfc5..b407c0bc 100644
--- a/clicache/src/AttributesMutator.hpp
+++ b/clicache/src/AttributesMutator.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/AttributesMutator.hpp>
diff --git a/clicache/src/CMakeLists.txt b/clicache/src/CMakeLists.txt
index fa92c687..9007dca1 100644
--- a/clicache/src/CMakeLists.txt
+++ b/clicache/src/CMakeLists.txt
@@ -12,12 +12,13 @@
 # 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.
+
 cmake_minimum_required(VERSION 3.4)
-project(clicache)
+project(Apache.Geode)
 
-file(GLOB_RECURSE SOURCES "*.cpp")
+file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
 
-file(GLOB_RECURSE PRIVATE_HEADERS "*.hpp")
+file(GLOB_RECURSE PRIVATE_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.hpp")
 set_source_files_properties(${PRIVATE_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE)
 
 set(RESOURCES Apache.Geode.rc)
@@ -32,13 +33,13 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/impl/AssemblyInfo.cpp.in ${CMAKE_CURR
 #set_source_files_properties(${CONFIGURE_IN_FILES} PROPERTIES LANGUAGE NONE)
 set_source_files_properties(${CONFIGURE_OUT_FILES} PROPERTIES GENERATED TRUE)
 
-add_library(Apache.Geode SHARED
+add_library(${PROJECT_NAME} SHARED
   ${SOURCES}
   ${PRIVATE_HEADERS} ${CONFIGURE_IN_FILES} ${CONFIGURE_OUT_FILES} ${RESOURCES})
-add_dependencies(client-libraries Apache.Geode)
+add_dependencies(client-libraries ${PROJECT_NAME})
 
 #TODO get external project library names
-target_link_libraries(Apache.Geode
+target_link_libraries(${PROJECT_NAME}
   PRIVATE
     apache-geode-static
     psapi
@@ -48,21 +49,26 @@ target_link_libraries(Apache.Geode
 
 string(REPLACE "/EHsc" "/EHa" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
 string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /clr /wd4947 /wd4251 /wd4635 /doc /we4488")
+# C1128 - large number of templates causes too many section.
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${SHARED_LINKER_FLAGS_STRONG_KEY}")
 
-include_directories(${CMAKE_SOURCE_DIR}/clicache/include)
-include_directories(${CMAKE_SOURCE_DIR}/clicache/src)
 include_directories(${CMAKE_SOURCE_DIR}/cppcache/src)
 
-set_target_properties(Apache.Geode PROPERTIES
+set_target_properties(${PROJECT_NAME} PROPERTIES
   OUTPUT_NAME ${PRODUCT_DLL_NAME}
   VS_DOTNET_TARGET_FRAMEWORK_VERSION "v4.5.2"
-  VS_DOTNET_REFERENCES "System;System.Xml")
+  VS_DOTNET_REFERENCES "System;System.Xml"
+)
+
+include(PrecompiledHeader)
+add_precompiled_header(${PROJECT_NAME} geode_includes.hpp FORCEINCLUDE)
 
 add_subdirectory(templates)
 
-install(TARGETS Apache.Geode
+install(TARGETS ${PROJECT_NAME}
   RUNTIME DESTINATION bin
   ARCHIVE DESTINATION lib
 )
diff --git a/clicache/src/Cache.cpp b/clicache/src/Cache.cpp
index f6716b8b..fb5f991a 100644
--- a/clicache/src/Cache.cpp
+++ b/clicache/src/Cache.cpp
@@ -15,9 +15,10 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
-#include "CacheRegionHelper.hpp"
-#include "CacheImpl.hpp"
+#include <CacheRegionHelper.hpp>
+#include <CacheImpl.hpp>
 #include "end_native.hpp"
 
 #include "Cache.hpp"
@@ -29,16 +30,17 @@
 #include "QueryService.hpp"
 #include "CacheFactory.hpp"
 #include "impl/AuthenticatedCache.hpp"
-#include "impl/ManagedString.hpp"
 #include "impl/SafeConvert.hpp"
 #include "impl/PdxTypeRegistry.hpp"
 #include "impl/PdxInstanceFactoryImpl.hpp"
 #include "CacheTransactionManager.hpp"
 #include "PoolManager.hpp"
 
+
 #pragma warning(disable:4091)
 
 using namespace System;
+using namespace msclr::interop;
 
 namespace Apache
 {
@@ -58,7 +60,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getName( ).c_str() );
+          return marshal_as<String^>( m_nativeptr->get()->getName( ) );
         }
         finally
         {
@@ -165,10 +167,9 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          ManagedString mg_path( path );
           try
           {
-            return Client::Region<TKey, TValue>::Create(m_nativeptr->get()->getRegion(mg_path.CharPtr));
+            return Client::Region<TKey, TValue>::Create(m_nativeptr->get()->getRegion(marshal_as<std::string>(path)));
           }
           finally
           {
@@ -221,10 +222,9 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2
 
-          ManagedString mg_poolName( poolName );
           try
           {
-            return QueryService::Create(m_nativeptr->get()->getQueryService(mg_poolName.CharPtr));
+            return QueryService::Create(m_nativeptr->get()->getQueryService(marshal_as<std::string>(poolName)));
           }
           finally
           {
@@ -279,7 +279,7 @@ namespace Apache
 
           try
           {
-            return AuthenticatedCache::Create((m_nativeptr->get()->createAuthenticatedView(credentials->GetNative())));
+            return AuthenticatedCache::Create((m_nativeptr->get()->createAuthenticatedView(credentials->GetNative(), "")));
           }
           finally
           {
@@ -323,13 +323,12 @@ namespace Apache
 
       IRegionService^ Cache::CreateAuthenticatedView(Properties<String^, Object^>^ credentials, String^ poolName)
       {
-        ManagedString mg_poolName( poolName );
 
         _GF_MG_EXCEPTION_TRY2
 
           try
           {
-            return AuthenticatedCache::Create( (m_nativeptr->get()->createAuthenticatedView(credentials->GetNative(), mg_poolName.CharPtr)));
+            return AuthenticatedCache::Create( (m_nativeptr->get()->createAuthenticatedView(credentials->GetNative(), marshal_as<std::string>(poolName))));
           }
           finally
           {
@@ -341,10 +340,9 @@ namespace Apache
 
 			 void Cache::InitializeDeclarativeCache( String^ cacheXml )
       {
-        ManagedString mg_cacheXml( cacheXml );
         try
         {
-          m_nativeptr->get()->initializeDeclarativeCache( mg_cacheXml.CharPtr );
+          m_nativeptr->get()->initializeDeclarativeCache( marshal_as<std::string>(cacheXml));
         }
         finally
         {
diff --git a/clicache/src/Cache.hpp b/clicache/src/Cache.hpp
index 8c71f91b..fa7a3789 100644
--- a/clicache/src/Cache.hpp
+++ b/clicache/src/Cache.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeCache.hpp"
 #include "native_shared_ptr.hpp"
diff --git a/clicache/src/CacheFactory.cpp b/clicache/src/CacheFactory.cpp
index 11de85a6..760a37c5 100644
--- a/clicache/src/CacheFactory.cpp
+++ b/clicache/src/CacheFactory.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "ExceptionTypes.hpp"
 #include "CacheFactory.hpp"
 #include "Cache.hpp"
@@ -34,7 +35,7 @@ namespace Apache
   {
     namespace Client
     {
-
+      using namespace msclr::interop;
       namespace native = apache::geode::client;
 
       CacheFactory^ CacheFactory::CreateCacheFactory()
@@ -116,13 +117,12 @@ namespace Apache
 
       String^ CacheFactory::Version::get( )
       {
-        return ManagedString::Get( native::CacheFactory::getVersion( ) );
+        return marshal_as<String^>(native::CacheFactory::getVersion());
       }
 
       String^ CacheFactory::ProductDescription::get( )
       {
-        return ManagedString::Get(
-          native::CacheFactory::getProductDescription( ) );
+        return marshal_as<String^>(native::CacheFactory::getProductDescription());
       }
 
 
@@ -163,11 +163,9 @@ namespace Apache
       CacheFactory^ CacheFactory::Set(String^ name, String^ value)
       {
         _GF_MG_EXCEPTION_TRY2
-          ManagedString mg_name( name );
-          ManagedString mg_value( value );
           try
           {
-            m_nativeptr->get()->set( mg_name.CharPtr, mg_value.CharPtr );
+            m_nativeptr->get()->set(marshal_as<std::string>(name), marshal_as<std::string>(value));
           }
           finally
           {
diff --git a/clicache/src/CacheFactory.hpp b/clicache/src/CacheFactory.hpp
index 3af6792e..969c4e97 100644
--- a/clicache/src/CacheFactory.hpp
+++ b/clicache/src/CacheFactory.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheFactory.hpp>
diff --git a/clicache/src/CacheListenerAdapter.hpp b/clicache/src/CacheListenerAdapter.hpp
index aaf32125..9984167c 100644
--- a/clicache/src/CacheListenerAdapter.hpp
+++ b/clicache/src/CacheListenerAdapter.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ICacheListener.hpp"
 
diff --git a/clicache/src/CacheStatistics.cpp b/clicache/src/CacheStatistics.cpp
index c053a3dc..818007a2 100644
--- a/clicache/src/CacheStatistics.cpp
+++ b/clicache/src/CacheStatistics.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "CacheStatistics.hpp"
 #include "TimeUtils.hpp"
 
diff --git a/clicache/src/CacheStatistics.hpp b/clicache/src/CacheStatistics.hpp
index cc026873..2f18b22e 100644
--- a/clicache/src/CacheStatistics.hpp
+++ b/clicache/src/CacheStatistics.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheStatistics.hpp>
diff --git a/clicache/src/CacheTransactionManager.cpp b/clicache/src/CacheTransactionManager.cpp
index 640e7877..b2523b12 100644
--- a/clicache/src/CacheTransactionManager.cpp
+++ b/clicache/src/CacheTransactionManager.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "impl/SafeConvert.hpp"
 #include "impl/ManagedTransactionListener.hpp"
 #include "impl/ManagedTransactionWriter.hpp"
diff --git a/clicache/src/CacheTransactionManager.hpp b/clicache/src/CacheTransactionManager.hpp
index acca7767..98308803 100644
--- a/clicache/src/CacheTransactionManager.hpp
+++ b/clicache/src/CacheTransactionManager.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheTransactionManager.hpp>
diff --git a/clicache/src/CacheWriterAdapter.hpp b/clicache/src/CacheWriterAdapter.hpp
index 47cb7170..b7c02849 100644
--- a/clicache/src/CacheWriterAdapter.hpp
+++ b/clicache/src/CacheWriterAdapter.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ICacheWriter.hpp"
 
diff --git a/clicache/src/CacheableArrayList.hpp b/clicache/src/CacheableArrayList.hpp
index adc26a3e..4d0cf842 100644
--- a/clicache/src/CacheableArrayList.hpp
+++ b/clicache/src/CacheableArrayList.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "CacheableVector.hpp"
 
diff --git a/clicache/src/CacheableBuiltins.hpp b/clicache/src/CacheableBuiltins.hpp
index dc07e940..527eabc4 100644
--- a/clicache/src/CacheableBuiltins.hpp
+++ b/clicache/src/CacheableBuiltins.hpp
@@ -19,6 +19,7 @@
 
 
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheableBuiltins.hpp>
diff --git a/clicache/src/CacheableDate.cpp b/clicache/src/CacheableDate.cpp
index 3e1efd28..f4258ebd 100644
--- a/clicache/src/CacheableDate.cpp
+++ b/clicache/src/CacheableDate.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "CacheableDate.hpp"
 #include "DataInput.hpp"
 #include "DataOutput.hpp"
diff --git a/clicache/src/CacheableDate.hpp b/clicache/src/CacheableDate.hpp
index b28fe694..eb6d5eff 100644
--- a/clicache/src/CacheableDate.hpp
+++ b/clicache/src/CacheableDate.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ICacheableKey.hpp"
 
diff --git a/clicache/src/CacheableFileName.cpp b/clicache/src/CacheableFileName.cpp
index f86d2a42..09b0bd57 100644
--- a/clicache/src/CacheableFileName.cpp
+++ b/clicache/src/CacheableFileName.cpp
@@ -16,9 +16,6 @@
  */
 
 
-
-
-//#include "geode_includes.hpp"
 #include "CacheableFileName.hpp"
 #include "DataOutput.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableFileName.hpp b/clicache/src/CacheableFileName.hpp
index a8a47823..4de1d642 100644
--- a/clicache/src/CacheableFileName.hpp
+++ b/clicache/src/CacheableFileName.hpp
@@ -19,6 +19,7 @@
 
 
 
+
 #include "geode_defs.hpp"
 #include "ICacheableKey.hpp"
 
diff --git a/clicache/src/CacheableHashMap.cpp b/clicache/src/CacheableHashMap.cpp
index 87d2f151..f9683bb6 100644
--- a/clicache/src/CacheableHashMap.cpp
+++ b/clicache/src/CacheableHashMap.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "CacheableHashMap.hpp"
 #include "DataOutput.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableHashMap.hpp b/clicache/src/CacheableHashMap.hpp
index 9e36b61d..b080fa6c 100644
--- a/clicache/src/CacheableHashMap.hpp
+++ b/clicache/src/CacheableHashMap.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 #include "ICacheableKey.hpp"
diff --git a/clicache/src/CacheableHashSet.hpp b/clicache/src/CacheableHashSet.hpp
index 60f5d71e..306d9fc1 100644
--- a/clicache/src/CacheableHashSet.hpp
+++ b/clicache/src/CacheableHashSet.hpp
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-
-
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheableBuiltins.hpp>
diff --git a/clicache/src/CacheableHashTable.hpp b/clicache/src/CacheableHashTable.hpp
index 0126ab92..5bc962bb 100644
--- a/clicache/src/CacheableHashTable.hpp
+++ b/clicache/src/CacheableHashTable.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "CacheableHashMap.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableIdentityHashMap.hpp b/clicache/src/CacheableIdentityHashMap.hpp
index 6407c53a..e127c84f 100644
--- a/clicache/src/CacheableIdentityHashMap.hpp
+++ b/clicache/src/CacheableIdentityHashMap.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "CacheableHashMap.hpp"
 
diff --git a/clicache/src/CacheableKey.cpp b/clicache/src/CacheableKey.cpp
index 5fc03faf..68347f3f 100644
--- a/clicache/src/CacheableKey.cpp
+++ b/clicache/src/CacheableKey.cpp
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
 #include "CacheableKey.hpp"
 #include "CacheableString.hpp"
 #include "CacheableBuiltins.hpp"
diff --git a/clicache/src/CacheableKey.hpp b/clicache/src/CacheableKey.hpp
index 752fbebe..cc855207 100644
--- a/clicache/src/CacheableKey.hpp
+++ b/clicache/src/CacheableKey.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheableKey.hpp>
diff --git a/clicache/src/CacheableLinkedList.hpp b/clicache/src/CacheableLinkedList.hpp
index be410225..c1f552a2 100644
--- a/clicache/src/CacheableLinkedList.hpp
+++ b/clicache/src/CacheableLinkedList.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "CacheableVector.hpp"
 
diff --git a/clicache/src/CacheableObject.cpp b/clicache/src/CacheableObject.cpp
index 5dc1f650..9b89a929 100644
--- a/clicache/src/CacheableObject.cpp
+++ b/clicache/src/CacheableObject.cpp
@@ -16,7 +16,6 @@
  */
 
 
-//#include "geode_includes.hpp"
 #include "CacheableObject.hpp"
 #include "DataInput.hpp"
 #include "DataOutput.hpp"
diff --git a/clicache/src/CacheableObject.hpp b/clicache/src/CacheableObject.hpp
index f964077f..c5331ff3 100644
--- a/clicache/src/CacheableObject.hpp
+++ b/clicache/src/CacheableObject.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 #include "GeodeClassIds.hpp"
diff --git a/clicache/src/CacheableObjectArray.hpp b/clicache/src/CacheableObjectArray.hpp
index e9eedb24..d37cebdf 100644
--- a/clicache/src/CacheableObjectArray.hpp
+++ b/clicache/src/CacheableObjectArray.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 #include "GeodeClassIds.hpp"
diff --git a/clicache/src/CacheableObjectXml.cpp b/clicache/src/CacheableObjectXml.cpp
index 0fcb7966..b5bf7cec 100644
--- a/clicache/src/CacheableObjectXml.cpp
+++ b/clicache/src/CacheableObjectXml.cpp
@@ -17,7 +17,8 @@
 
 
 
-//#include "geode_includes.hpp"
+
+
 #include "CacheableObjectXml.hpp"
 #include "DataInput.hpp"
 #include "DataOutput.hpp"
diff --git a/clicache/src/CacheableObjectXml.hpp b/clicache/src/CacheableObjectXml.hpp
index cceb8c5b..79d3e6c4 100644
--- a/clicache/src/CacheableObjectXml.hpp
+++ b/clicache/src/CacheableObjectXml.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 #include "GeodeClassIds.hpp"
diff --git a/clicache/src/CacheableStack.cpp b/clicache/src/CacheableStack.cpp
index f5aaece5..8f814d6c 100644
--- a/clicache/src/CacheableStack.cpp
+++ b/clicache/src/CacheableStack.cpp
@@ -17,6 +17,7 @@
 
 
 
+
 #include "CacheableStack.hpp"
 #include "DataOutput.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableStack.hpp b/clicache/src/CacheableStack.hpp
index 54f46283..2fa8ca12 100644
--- a/clicache/src/CacheableStack.hpp
+++ b/clicache/src/CacheableStack.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 
diff --git a/clicache/src/CacheableString.cpp b/clicache/src/CacheableString.cpp
index 2b653bed..9fa4229b 100644
--- a/clicache/src/CacheableString.cpp
+++ b/clicache/src/CacheableString.cpp
@@ -17,10 +17,11 @@
 
 
 
+
 #include "DataOutput.hpp"
 #include "DataInput.hpp"
 
-//#include "geode_includes.hpp"
+
 #include "CacheableString.hpp"
 #include "ExceptionTypes.hpp"
 
diff --git a/clicache/src/CacheableString.hpp b/clicache/src/CacheableString.hpp
index f469af57..c8b37bb5 100644
--- a/clicache/src/CacheableString.hpp
+++ b/clicache/src/CacheableString.hpp
@@ -19,12 +19,12 @@
 
 
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheableString.hpp>
 #include "end_native.hpp"
 
-#include "impl/ManagedString.hpp"
 #include "CacheableKey.hpp"
 #include "GeodeClassIds.hpp"
 
@@ -194,7 +194,7 @@ namespace Apache
         /// </summary>
         inline static operator String ^ (CacheableString^ str)
         {
-          return (str != nullptr ? CacheableString::GetString(str) : nullptr);
+          return (str != nullptr ? str->ToString() : nullptr);
         }
 
         /// <summary>
@@ -262,27 +262,6 @@ namespace Apache
         static void GetCacheableString(array<Char>^ value,
                                        std::shared_ptr<apache::geode::client::CacheableString>& cStr);
 
-        /// <summary>
-        /// Get the <c>System.String</c> from the given
-        /// <c>apache::geode::client::CacheableString</c>
-        /// </summary>
-        inline static String^ GetString(apache::geode::client::CacheableString * cStr)
-        {
-          if (cStr == NULL) {
-            return nullptr;
-          }
-          else if (cStr->isWideString()) {
-            return ManagedString::Get(cStr->asWChar());
-          }
-          else {
-            return ManagedString::Get(cStr->asChar());
-          }
-        }
-
-        inline static String^ GetString(CacheableString^ cStr)
-        {
-          return cStr->Value;
-        }
 
         CacheableString(System::UInt32 type) : CacheableKey()
         {
diff --git a/clicache/src/CacheableStringArray.cpp b/clicache/src/CacheableStringArray.cpp
index 7c8e1764..ed5e5afb 100644
--- a/clicache/src/CacheableStringArray.cpp
+++ b/clicache/src/CacheableStringArray.cpp
@@ -16,6 +16,7 @@
  */
 
 
+
 #include "CacheableStringArray.hpp"
 #include "CacheableString.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableStringArray.hpp b/clicache/src/CacheableStringArray.hpp
index cfbb37c9..926d6755 100644
--- a/clicache/src/CacheableStringArray.hpp
+++ b/clicache/src/CacheableStringArray.hpp
@@ -19,6 +19,7 @@
 
 
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheableBuiltins.hpp>
diff --git a/clicache/src/CacheableUndefined.cpp b/clicache/src/CacheableUndefined.cpp
index 063e3b48..00780665 100644
--- a/clicache/src/CacheableUndefined.cpp
+++ b/clicache/src/CacheableUndefined.cpp
@@ -17,7 +17,8 @@
 
 
 
-//#include "geode_includes.hpp"
+
+
 #include "CacheableUndefined.hpp"
 #include "DataOutput.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableUndefined.hpp b/clicache/src/CacheableUndefined.hpp
index a03ea24b..4527a993 100644
--- a/clicache/src/CacheableUndefined.hpp
+++ b/clicache/src/CacheableUndefined.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 #include "GeodeClassIds.hpp"
diff --git a/clicache/src/CacheableVector.cpp b/clicache/src/CacheableVector.cpp
index 4ea6a83b..d95f94f7 100644
--- a/clicache/src/CacheableVector.cpp
+++ b/clicache/src/CacheableVector.cpp
@@ -17,7 +17,8 @@
 
 
 
-//#include "geode_includes.hpp"
+
+
 #include "CacheableVector.hpp"
 #include "DataOutput.hpp"
 #include "DataInput.hpp"
diff --git a/clicache/src/CacheableVector.hpp b/clicache/src/CacheableVector.hpp
index 7fa268fb..d8a58e5d 100644
--- a/clicache/src/CacheableVector.hpp
+++ b/clicache/src/CacheableVector.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 #include "GeodeClassIds.hpp"
diff --git a/clicache/src/CqAttributes.cpp b/clicache/src/CqAttributes.cpp
index 2e4c9c46..e2732599 100644
--- a/clicache/src/CqAttributes.cpp
+++ b/clicache/src/CqAttributes.cpp
@@ -16,7 +16,8 @@
  */
 
 
-//#include "geode_includes.hpp"
+
+
 #include "CqAttributes.hpp"
 #include "impl/ManagedCqListener.hpp"
 #include "ICqListener.hpp"
diff --git a/clicache/src/CqAttributes.hpp b/clicache/src/CqAttributes.hpp
index c0d34475..ff21c038 100644
--- a/clicache/src/CqAttributes.hpp
+++ b/clicache/src/CqAttributes.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqAttributes.hpp>
diff --git a/clicache/src/CqAttributesFactory.cpp b/clicache/src/CqAttributesFactory.cpp
index 45dcbb71..1df32542 100644
--- a/clicache/src/CqAttributesFactory.cpp
+++ b/clicache/src/CqAttributesFactory.cpp
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
+
+
 #include "begin_native.hpp"
 #include <geode/QueryService.hpp>
 #include "end_native.hpp"
 
-//#include "geode_includes.hpp"
+
 #include "CqAttributesFactory.hpp"
 #include "impl/ManagedCqListener.hpp"
 #include "ICqListener.hpp"
diff --git a/clicache/src/CqAttributesFactory.hpp b/clicache/src/CqAttributesFactory.hpp
index 6fa5ab0d..f0f92b6a 100644
--- a/clicache/src/CqAttributesFactory.hpp
+++ b/clicache/src/CqAttributesFactory.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqAttributesFactory.hpp>
diff --git a/clicache/src/CqAttributesMutator.cpp b/clicache/src/CqAttributesMutator.cpp
index 9e7d9355..b2f26d58 100644
--- a/clicache/src/CqAttributesMutator.cpp
+++ b/clicache/src/CqAttributesMutator.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <memory>
 #include <geode/QueryService.hpp>
diff --git a/clicache/src/CqAttributesMutator.hpp b/clicache/src/CqAttributesMutator.hpp
index c814ff0e..ca1ea0e0 100644
--- a/clicache/src/CqAttributesMutator.hpp
+++ b/clicache/src/CqAttributesMutator.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqAttributesMutator.hpp>
diff --git a/clicache/src/CqEvent.cpp b/clicache/src/CqEvent.cpp
index a98003fd..635dd0fb 100644
--- a/clicache/src/CqEvent.cpp
+++ b/clicache/src/CqEvent.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "CqEvent.hpp"
 #include "Log.hpp"
 #include "impl/SafeConvert.hpp"
diff --git a/clicache/src/CqEvent.hpp b/clicache/src/CqEvent.hpp
index d0ddcc14..ad64be5d 100644
--- a/clicache/src/CqEvent.hpp
+++ b/clicache/src/CqEvent.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "native_shared_ptr.hpp"
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
diff --git a/clicache/src/CqOperation.hpp b/clicache/src/CqOperation.hpp
index e6292c9f..a6977063 100644
--- a/clicache/src/CqOperation.hpp
+++ b/clicache/src/CqOperation.hpp
@@ -19,6 +19,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqOperation.hpp>
diff --git a/clicache/src/CqQuery.cpp b/clicache/src/CqQuery.cpp
index 3d430e20..38e8d9f1 100644
--- a/clicache/src/CqQuery.cpp
+++ b/clicache/src/CqQuery.cpp
@@ -16,6 +16,7 @@
  */
 
 
+
 #include "CqQuery.hpp"
 #include "Query.hpp"
 #include "CqAttributes.hpp"
@@ -33,6 +34,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
       using namespace System;
 
       namespace native = apache::geode::client;
@@ -87,7 +89,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getQueryString( ) );
+          return marshal_as<String^>(m_nativeptr->get()->getQueryString());
         }
         finally
         {
@@ -100,7 +102,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getName( ) );
+          return marshal_as<String^>(m_nativeptr->get()->getName());
         }
         finally
         {
diff --git a/clicache/src/CqQuery.hpp b/clicache/src/CqQuery.hpp
index 850310a4..7d124af3 100644
--- a/clicache/src/CqQuery.hpp
+++ b/clicache/src/CqQuery.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "CqState.hpp"
 #include "begin_native.hpp"
diff --git a/clicache/src/CqServiceStatistics.cpp b/clicache/src/CqServiceStatistics.cpp
index 6a9da4cc..022668e1 100644
--- a/clicache/src/CqServiceStatistics.cpp
+++ b/clicache/src/CqServiceStatistics.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "CqServiceStatistics.hpp"
 
 
diff --git a/clicache/src/CqServiceStatistics.hpp b/clicache/src/CqServiceStatistics.hpp
index 2fa9c419..0f03b9e9 100644
--- a/clicache/src/CqServiceStatistics.hpp
+++ b/clicache/src/CqServiceStatistics.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqServiceStatistics.hpp>
diff --git a/clicache/src/CqState.cpp b/clicache/src/CqState.cpp
index 0a83a1dd..c624839b 100644
--- a/clicache/src/CqState.cpp
+++ b/clicache/src/CqState.cpp
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "CqState.hpp"
-#include <vcclr.h>
 
-#include "impl/ManagedString.hpp"
 using namespace System;
-using namespace System::Runtime::InteropServices;
+using namespace msclr::interop;
 
 namespace Apache
 {
@@ -32,7 +31,7 @@ namespace Apache
 
       String^ CqState::ToString()
       {
-		  return ManagedString::Get(m_nativeptr->toString());
+		  return marshal_as<String^>(m_nativeptr->toString());
       }
 
       bool CqState::IsRunning()
@@ -85,8 +84,7 @@ namespace Apache
 		    else
 			    state = CqStateType::INVALID;
 		    return state;
+      }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
-
- } //namespace 
diff --git a/clicache/src/CqState.hpp b/clicache/src/CqState.hpp
index 21ad5e6b..5219f07c 100644
--- a/clicache/src/CqState.hpp
+++ b/clicache/src/CqState.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqState.hpp>
diff --git a/clicache/src/CqStatistics.cpp b/clicache/src/CqStatistics.cpp
index ad19481b..c9c447ce 100644
--- a/clicache/src/CqStatistics.cpp
+++ b/clicache/src/CqStatistics.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "CqStatistics.hpp"
 
 namespace Apache
diff --git a/clicache/src/CqStatistics.hpp b/clicache/src/CqStatistics.hpp
index 93876fb3..ddf75b41 100644
--- a/clicache/src/CqStatistics.hpp
+++ b/clicache/src/CqStatistics.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CqStatistics.hpp>
diff --git a/clicache/src/DataInput.cpp b/clicache/src/DataInput.cpp
index b50f3886..9046de18 100644
--- a/clicache/src/DataInput.cpp
+++ b/clicache/src/DataInput.cpp
@@ -15,15 +15,16 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <geode/Cache.hpp>
 #include <GeodeTypeIdsImpl.hpp>
 #include "SerializationRegistry.hpp"
 #include "CacheRegionHelper.hpp"
 #include "CacheImpl.hpp"
+#include "DataInputInternal.hpp"
 #include "end_native.hpp"
 
-#include <vcclr.h>
 
 #include "DataInput.hpp"
 #include "Cache.hpp"
@@ -49,6 +50,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
       namespace native = apache::geode::client;
 
       DataInput::DataInput(System::Byte* buffer, int size, Apache::Geode::Client::Cache^ cache)
@@ -1159,9 +1161,21 @@ namespace Apache
         else
         {
           return ReadUTFHuge();
-        }  // namespace Client
-      }  // namespace Geode
-    }  // namespace Apache
+        }
+      }
+
+      String^ DataInput::GetPoolName()
+      {
+        try
+        {
+          return marshal_as<String^>(native::DataInputInternal::getPoolName(*m_nativeptr));
+        }
+        finally {
+          GC::KeepAlive(m_nativeptr);
+        }
+      }
+
+    }  // namespace Client
+  }  // namespace Geode
+}  // namespace Apache
 
-  }
-}
diff --git a/clicache/src/DataInput.hpp b/clicache/src/DataInput.hpp
index 0199cf74..574d3f1a 100644
--- a/clicache/src/DataInput.hpp
+++ b/clicache/src/DataInput.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/DataInput.hpp>
@@ -26,15 +27,14 @@
 #include "Log.hpp"
 #include "ExceptionTypes.hpp"
 
-using namespace System;
-using namespace System::Collections::Generic;
-
 namespace Apache
 {
   namespace Geode
   {
     namespace Client
     {
+      using namespace System;
+      using namespace System::Collections::Generic;
 
       namespace native = apache::geode::client;
 
@@ -308,16 +308,7 @@ namespace Apache
 
 				String^ ReadString();
 
-        const char * GetPoolName()
-        {
-          try
-          {
-            return m_nativeptr->get()->getPoolName();
-          }
-          finally {
-            GC::KeepAlive(m_nativeptr);
-          }
-        }
+        String^ GetPoolName();
 
         Object^ ReadDotNetTypes(int8_t typeId);
 
diff --git a/clicache/src/DataOutput.cpp b/clicache/src/DataOutput.cpp
index 726ccb9b..070f058d 100644
--- a/clicache/src/DataOutput.cpp
+++ b/clicache/src/DataOutput.cpp
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <GeodeTypeIdsImpl.hpp>
 #include "CacheRegionHelper.hpp"
 #include "CacheImpl.hpp"
+#include "DataOutputInternal.hpp"
 #include "end_native.hpp"
 
-#include <vcclr.h>
 
 #include "DataOutput.hpp"
 #include "IGeodeSerializable.hpp"
@@ -40,6 +41,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       DataOutput::DataOutput(Apache::Geode::Client::Cache^ cache)
       { 
@@ -935,6 +937,19 @@ namespace Apache
       {
         WriteObject<double>(doubleArray);
       }
+
+      String^ DataOutput::GetPoolName()
+      {
+        try
+        {
+          return marshal_as<String^>(native::DataOutputInternal::getPoolName(*m_nativeptr));
+        }
+        finally
+        {
+          GC::KeepAlive(m_nativeptr);
+        }
+      }
+
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
diff --git a/clicache/src/DataOutput.hpp b/clicache/src/DataOutput.hpp
index dbb03682..9ceca318 100644
--- a/clicache/src/DataOutput.hpp
+++ b/clicache/src/DataOutput.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/DataOutput.hpp>
@@ -408,17 +409,7 @@ namespace Apache
           return m_cursor;
         }
 
-        const char * GetPoolName()
-        {
-          try
-          {
-            return m_nativeptr->get()->getPoolName();
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-        }
+        String^ GetPoolName();
 
         void WriteStringArray(array<String^>^ strArray);
 
diff --git a/clicache/src/DiskPolicyType.hpp b/clicache/src/DiskPolicyType.hpp
index e9d39532..c4217214 100644
--- a/clicache/src/DiskPolicyType.hpp
+++ b/clicache/src/DiskPolicyType.hpp
@@ -19,6 +19,7 @@
 
 
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/DiskPolicyType.hpp>
diff --git a/clicache/src/DistributedSystem.cpp b/clicache/src/DistributedSystem.cpp
index 01018a0e..2c12d646 100644
--- a/clicache/src/DistributedSystem.cpp
+++ b/clicache/src/DistributedSystem.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <version.h>
 #include <geode/CacheLoader.hpp>
@@ -26,7 +27,6 @@
 #include <CacheImpl.hpp>
 #include <CacheXmlParser.hpp>
 #include <DistributedSystemImpl.hpp>
-#include <ace/Process.h> // Added to get rid of unresolved token warning
 #include "end_native.hpp"
 
 #include "Cache.hpp"
@@ -136,11 +136,9 @@ namespace Apache
 
         _GF_MG_EXCEPTION_TRY2
 
-        ManagedString mg_name(name);
-
         // this we are calling after all .NET initialization required in
         // each AppDomain
-        auto nativeptr = native::DistributedSystem::create(mg_name.CharPtr,
+        auto nativeptr = native::DistributedSystem::create(marshal_as<std::string>(name)
                                                             config->GetNative());
         nativeptr->connect(cache->GetNative().get());
 
@@ -322,7 +320,7 @@ namespace Apache
         // native connect since it can be invoked only once
 
         // Register other built-in types
-      
+
         // End register other built-in types
 
         // Register other built-in types for generics
@@ -383,7 +381,7 @@ namespace Apache
           gcnew TypeFactoryMethodGeneric(CacheableArrayList::CreateDeserializable),
           nullptr, cache);
 
-        //c# generic stack 
+        //c# generic stack
         Serializable::RegisterTypeGeneric(
           native::GeodeTypeIds::CacheableStack,
           gcnew TypeFactoryMethodGeneric(CacheableStack::CreateDeserializable),
@@ -420,7 +418,7 @@ namespace Apache
       void DistributedSystem::AppDomainInstancePostInitialization()
       {
         // TODO global - Is this necessary?
-        //to create .net memory pressure handler 
+        //to create .net memory pressure handler
         //Create(native::DistributedSystem::getInstance());
       }
 
@@ -484,14 +482,14 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get(m_nativeptr->get()->getName().c_str());
+          return marshal_as<String^>(m_nativeptr->get()->getName().c_str());
         }
         finally
         {
           GC::KeepAlive(m_nativeptr);
         }
       }
-  
+
       void DistributedSystem::HandleMemoryPressure(System::Object^ state)
       {
         // TODO global - Need single memory pressue event running?
@@ -505,7 +503,7 @@ namespace Apache
         auto instance = gcnew DistributedSystem(nativeptr);
         return instance;
       }
-      
+
       DistributedSystem::DistributedSystem(std::unique_ptr<native::DistributedSystem> nativeptr)
       {
         m_nativeptr = gcnew native_conditional_unique_ptr<native::DistributedSystem>(std::move(nativeptr));
diff --git a/clicache/src/DistributedSystem.hpp b/clicache/src/DistributedSystem.hpp
index 48c2723a..6910f0f9 100644
--- a/clicache/src/DistributedSystem.hpp
+++ b/clicache/src/DistributedSystem.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/DistributedSystem.hpp>
diff --git a/clicache/src/EntryEvent.cpp b/clicache/src/EntryEvent.cpp
index bda549c2..c1bdcae2 100644
--- a/clicache/src/EntryEvent.cpp
+++ b/clicache/src/EntryEvent.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "EntryEvent.hpp"
 #include "Region.hpp"
 #include "impl/SafeConvert.hpp"
diff --git a/clicache/src/EntryEvent.hpp b/clicache/src/EntryEvent.hpp
index 36008eaf..ec1f5f11 100644
--- a/clicache/src/EntryEvent.hpp
+++ b/clicache/src/EntryEvent.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/EntryEvent.hpp>
diff --git a/clicache/src/ExceptionTypes.cpp b/clicache/src/ExceptionTypes.cpp
index b1e1c3ed..f59ad9cd 100644
--- a/clicache/src/ExceptionTypes.cpp
+++ b/clicache/src/ExceptionTypes.cpp
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+
+
 #include "ExceptionTypes.hpp"
 #include <cstdlib>
 
@@ -29,6 +31,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       Dictionary<String^, CreateException2^>^ GeodeException::Init( )
       {
@@ -118,12 +121,12 @@ namespace Apache
         } catch (const apache::geode::client::Exception& ex) {
           innerException = GeodeException::Get(ex);
         }
-        String^ exName = gcnew String( nativeEx.getName( ) );
+        String^ exName = marshal_as<String^>(nativeEx.getName());
         CreateException2^ exDelegate;
         if (Native2ManagedExMap->TryGetValue(exName, exDelegate)) {
           return exDelegate(nativeEx, innerException);
         }
-        String^ exMsg = ManagedString::Get( nativeEx.what( ) );
+        String^ exMsg = marshal_as<String^>( nativeEx.getMessage( ) );
         if ( exMsg->StartsWith( GeodeException::MgSysExPrefix ) ) {
           // Get the exception type
           String^ mgExStr = exMsg->Substring(
diff --git a/clicache/src/ExceptionTypes.hpp b/clicache/src/ExceptionTypes.hpp
index 394859e0..066c89fc 100644
--- a/clicache/src/ExceptionTypes.hpp
+++ b/clicache/src/ExceptionTypes.hpp
@@ -17,17 +17,20 @@
 
 #pragma once
 
+
+#include <Windows.h>
+#include <msclr/marshal_cppstd.h>
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/ExceptionTypes.hpp>
 #include "end_native.hpp"
 
-#include "impl/ManagedString.hpp"
-
 
 using namespace System;
 using namespace System::Collections::Generic;
 using namespace System::Runtime::Serialization;
+using namespace msclr::interop;
 
 namespace Apache
 {
@@ -131,8 +134,7 @@ namespace Apache
         inline static String^ GetStackTrace(
           const apache::geode::client::Exception& nativeEx )
         {
-          std::string nativeExStack = nativeEx.getStackTrace();
-          return ManagedString::Get(nativeExStack.c_str());
+          return marshal_as<String^>(nativeEx.getStackTrace());
         }
 
         /// <summary>
@@ -161,10 +163,8 @@ namespace Apache
               if (ex->InnerException != nullptr) {
                 cause = GeodeException::GetNative(ex->InnerException);
               }
-              ManagedString mg_exStr(MgSysExPrefix + ex->ToString());
-              auto message = std::string(mg_exStr.CharPtr) + cause->what();
               return std::make_shared<apache::geode::client::Exception>(
-                  message);
+                  marshal_as<std::string>(MgSysExPrefix + ex->ToString()) + cause->getMessage());
             }
           }
           return nullptr;
@@ -176,14 +176,12 @@ namespace Apache
         /// </summary>
         virtual std::shared_ptr<apache::geode::client::Exception> GetNative()
         {
-          String^ msg = this->Message + ": " + this->StackTrace;
-          ManagedString mg_msg(msg);
           std::shared_ptr<apache::geode::client::Exception> cause;
           if (this->InnerException != nullptr) {
             cause = GeodeException::GetNative(this->InnerException);
           }
-          auto message = std::string(mg_msg.CharPtr) + cause->what();
-          return std::make_shared<apache::geode::client::Exception>(message);
+          return std::make_shared<apache::geode::client::Exception>(
+            marshal_as<std::string>(this->Message + ": " + this->StackTrace) + cause->getMessage());
         }
 
         /// <summary>
@@ -207,9 +205,8 @@ namespace Apache
             if (ex->InnerException != nullptr) {
               cause = GeodeException::GetNative(ex->InnerException);
             }
-            ManagedString mg_exStr(MgSysExPrefix + ex->ToString());
-            auto message = std::string(mg_exStr.CharPtr) + cause->what();
-            throw apache::geode::client::Exception(message);
+            throw apache::geode::client::Exception(
+              marshal_as<std::string>(MgSysExPrefix + ex->ToString()) + cause->getMessage());
           }
         }
 
@@ -327,12 +324,12 @@ namespace Apache
       \
       internal: \
         x(const apache::geode::client::y& nativeEx) \
-          : GeodeException(ManagedString::Get(nativeEx.what()), \
+          : GeodeException(marshal_as<String^>(nativeEx.getMessage()), \
               gcnew GeodeException(GeodeException::GetStackTrace( \
                 nativeEx))) { } \
         \
         x(const apache::geode::client::y& nativeEx, Exception^ innerException) \
-          : GeodeException(ManagedString::Get(nativeEx.what()), \
+          : GeodeException(marshal_as<String^>(nativeEx.getMessage()), \
               innerException) { } \
         \
         static GeodeException^ Create(const apache::geode::client::Exception& ex, \
@@ -351,14 +348,12 @@ namespace Apache
         } \
         virtual std::shared_ptr<apache::geode::client::Exception> GetNative() override \
         { \
-          String^ msg = this->Message + ": " + this->StackTrace; \
-          ManagedString mg_msg(msg); \
           std::shared_ptr<apache::geode::client::Exception> cause; \
           if (this->InnerException != nullptr) { \
             cause = GeodeException::GetNative(this->InnerException); \
           } \
-          auto message = std::string(mg_msg.CharPtr) + cause->what(); \
-          return std::make_shared<apache::geode::client::y>(message); \
+          return std::make_shared<apache::geode::client::y>( \
+            marshal_as<std::string>(this->Message + ": " + this->StackTrace) + cause->getMessage()); \
         } \
       }
 
diff --git a/clicache/src/Execution.cpp b/clicache/src/Execution.cpp
index eeaf03f0..beaa0cbb 100644
--- a/clicache/src/Execution.cpp
+++ b/clicache/src/Execution.cpp
@@ -16,7 +16,8 @@
  */
 
 
-//#include "geode_includes.hpp"
+
+
 #include "Execution.hpp"
 #include "begin_native.hpp"
 #include <geode/Execution.hpp>
@@ -24,7 +25,6 @@
 
 #include "ResultCollector.hpp"
 #include "impl/ManagedResultCollector.hpp"
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 #include "TimeUtils.hpp"
@@ -111,8 +111,7 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
         try
         {
-          ManagedString mg_function(func);
-          auto rc = m_nativeptr->get()->execute(mg_function.CharPtr, TimeUtils::TimeSpanToDurationCeil<std::chrono::milliseconds>(timeout));
+          auto rc = m_nativeptr->get()->execute(marshal_as<std::string>(func), TimeUtils::TimeSpanToDurationCeil<std::chrono::milliseconds>(timeout));
           if (m_rc == nullptr)
             return gcnew ResultCollector<TResult>(rc);
           else
diff --git a/clicache/src/Execution.hpp b/clicache/src/Execution.hpp
index 067afbe2..e7fb64a2 100644
--- a/clicache/src/Execution.hpp
+++ b/clicache/src/Execution.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/Execution.hpp>
diff --git a/clicache/src/ExpirationAction.hpp b/clicache/src/ExpirationAction.hpp
index c8a12bf6..9b9b5575 100644
--- a/clicache/src/ExpirationAction.hpp
+++ b/clicache/src/ExpirationAction.hpp
@@ -19,6 +19,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/ExpirationAction.hpp>
diff --git a/clicache/src/FunctionService.cpp b/clicache/src/FunctionService.cpp
index 456f2e54..1b455055 100644
--- a/clicache/src/FunctionService.cpp
+++ b/clicache/src/FunctionService.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <geode/RegionService.hpp>
 #include "end_native.hpp"
diff --git a/clicache/src/FunctionService.hpp b/clicache/src/FunctionService.hpp
index 7af9bc81..cdd8fa6a 100644
--- a/clicache/src/FunctionService.hpp
+++ b/clicache/src/FunctionService.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/FunctionService.hpp>
diff --git a/clicache/src/GeodeClassIds.hpp b/clicache/src/GeodeClassIds.hpp
index e73461d5..3dcc0375 100644
--- a/clicache/src/GeodeClassIds.hpp
+++ b/clicache/src/GeodeClassIds.hpp
@@ -19,6 +19,7 @@
 
 
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/GeodeTypeIds.hpp>
diff --git a/clicache/src/IAuthInitialize.hpp b/clicache/src/IAuthInitialize.hpp
index 1b7deccc..e0573035 100644
--- a/clicache/src/IAuthInitialize.hpp
+++ b/clicache/src/IAuthInitialize.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 #include "Properties.hpp"
diff --git a/clicache/src/ICacheListener.hpp b/clicache/src/ICacheListener.hpp
index a61632e2..ca1095a2 100644
--- a/clicache/src/ICacheListener.hpp
+++ b/clicache/src/ICacheListener.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IRegion.hpp"
 //#include "Region.hpp"
diff --git a/clicache/src/ICacheLoader.hpp b/clicache/src/ICacheLoader.hpp
index e5b1a8e0..432b3de8 100644
--- a/clicache/src/ICacheLoader.hpp
+++ b/clicache/src/ICacheLoader.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheLoader.hpp>
diff --git a/clicache/src/ICacheWriter.hpp b/clicache/src/ICacheWriter.hpp
index ea02933e..137c6cf1 100644
--- a/clicache/src/ICacheWriter.hpp
+++ b/clicache/src/ICacheWriter.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IRegion.hpp"
 //#include "Region.hpp"
diff --git a/clicache/src/ICacheableKey.hpp b/clicache/src/ICacheableKey.hpp
index 3ca95147..a27bef5b 100644
--- a/clicache/src/ICacheableKey.hpp
+++ b/clicache/src/ICacheableKey.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IGeodeSerializable.hpp"
 
diff --git a/clicache/src/ICqAttributes.hpp b/clicache/src/ICqAttributes.hpp
index b401b561..6c42f77e 100644
--- a/clicache/src/ICqAttributes.hpp
+++ b/clicache/src/ICqAttributes.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 
diff --git a/clicache/src/ICqEvent.hpp b/clicache/src/ICqEvent.hpp
index 2f1bff0a..c27d8246 100644
--- a/clicache/src/ICqEvent.hpp
+++ b/clicache/src/ICqEvent.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 #include "ICacheableKey.hpp"
diff --git a/clicache/src/ICqListener.hpp b/clicache/src/ICqListener.hpp
index fbdaebcb..e6b2732c 100644
--- a/clicache/src/ICqListener.hpp
+++ b/clicache/src/ICqListener.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "CqEvent.hpp"
 using namespace System;
diff --git a/clicache/src/ICqResults.hpp b/clicache/src/ICqResults.hpp
index f8d737fd..bf76a8d6 100644
--- a/clicache/src/ICqResults.hpp
+++ b/clicache/src/ICqResults.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/SelectResults.hpp>
diff --git a/clicache/src/ICqStatusListener.hpp b/clicache/src/ICqStatusListener.hpp
index b623a688..9fed072f 100644
--- a/clicache/src/ICqStatusListener.hpp
+++ b/clicache/src/ICqStatusListener.hpp
@@ -18,6 +18,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ICqListener.hpp"
 
diff --git a/clicache/src/IFixedPartitionResolver.hpp b/clicache/src/IFixedPartitionResolver.hpp
index 18962eec..210519f2 100644
--- a/clicache/src/IFixedPartitionResolver.hpp
+++ b/clicache/src/IFixedPartitionResolver.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IPartitionResolver.hpp"
 
diff --git a/clicache/src/IGeodeCache.hpp b/clicache/src/IGeodeCache.hpp
index d15d14d1..2141615c 100644
--- a/clicache/src/IGeodeCache.hpp
+++ b/clicache/src/IGeodeCache.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IRegionService.hpp"
 
diff --git a/clicache/src/IGeodeDelta.hpp b/clicache/src/IGeodeDelta.hpp
index 25832a38..6e73db9a 100644
--- a/clicache/src/IGeodeDelta.hpp
+++ b/clicache/src/IGeodeDelta.hpp
@@ -16,6 +16,7 @@
  */
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 
diff --git a/clicache/src/IGeodeSerializable.hpp b/clicache/src/IGeodeSerializable.hpp
index ff34a148..a8ff06e1 100644
--- a/clicache/src/IGeodeSerializable.hpp
+++ b/clicache/src/IGeodeSerializable.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/geode_globals.hpp>
diff --git a/clicache/src/IPartitionResolver.hpp b/clicache/src/IPartitionResolver.hpp
index ae3127f3..08eaf740 100644
--- a/clicache/src/IPartitionResolver.hpp
+++ b/clicache/src/IPartitionResolver.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 //#include "ICacheableKey.hpp"
 
diff --git a/clicache/src/IPdxInstance.hpp b/clicache/src/IPdxInstance.hpp
index 56895174..d4d77acd 100755
--- a/clicache/src/IPdxInstance.hpp
+++ b/clicache/src/IPdxInstance.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 namespace Apache
 {
   namespace Geode
diff --git a/clicache/src/IPdxInstanceFactory.hpp b/clicache/src/IPdxInstanceFactory.hpp
index 487a1b61..0c61a912 100644
--- a/clicache/src/IPdxInstanceFactory.hpp
+++ b/clicache/src/IPdxInstanceFactory.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "IPdxInstance.hpp"
 
 namespace Apache
diff --git a/clicache/src/IPdxReader.hpp b/clicache/src/IPdxReader.hpp
index cccb8408..b05c8219 100644
--- a/clicache/src/IPdxReader.hpp
+++ b/clicache/src/IPdxReader.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IRegion.hpp"
 #include "IPdxUnreadFields.hpp"
diff --git a/clicache/src/IPdxSerializable.hpp b/clicache/src/IPdxSerializable.hpp
index 9c8865ae..b9e2d419 100644
--- a/clicache/src/IPdxSerializable.hpp
+++ b/clicache/src/IPdxSerializable.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IPdxWriter.hpp"
 #include "IPdxReader.hpp"
diff --git a/clicache/src/IPdxSerializer.hpp b/clicache/src/IPdxSerializer.hpp
index 672c176c..66409574 100755
--- a/clicache/src/IPdxSerializer.hpp
+++ b/clicache/src/IPdxSerializer.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IPdxWriter.hpp"
 #include "IPdxReader.hpp"
diff --git a/clicache/src/IPdxTypeMapper.hpp b/clicache/src/IPdxTypeMapper.hpp
index f2b5fd65..f4067568 100755
--- a/clicache/src/IPdxTypeMapper.hpp
+++ b/clicache/src/IPdxTypeMapper.hpp
@@ -16,6 +16,7 @@
  */
 
 #pragma once
+
 using namespace System;
 using namespace System::Collections::Generic;
 namespace Apache
diff --git a/clicache/src/IPdxUnreadFields.hpp b/clicache/src/IPdxUnreadFields.hpp
index 96c57aa6..8a38fd8c 100644
--- a/clicache/src/IPdxUnreadFields.hpp
+++ b/clicache/src/IPdxUnreadFields.hpp
@@ -18,6 +18,7 @@
 #pragma once
 
 
+
 namespace Apache
 {
   namespace Geode
diff --git a/clicache/src/IPdxWriter.hpp b/clicache/src/IPdxWriter.hpp
index 3196efe4..b04291c2 100644
--- a/clicache/src/IPdxWriter.hpp
+++ b/clicache/src/IPdxWriter.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 //#include "IRegion.hpp"
 #include "IPdxUnreadFields.hpp"
diff --git a/clicache/src/IPersistenceManager.hpp b/clicache/src/IPersistenceManager.hpp
index b9011145..a075776f 100644
--- a/clicache/src/IPersistenceManager.hpp
+++ b/clicache/src/IPersistenceManager.hpp
@@ -18,6 +18,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IRegion.hpp"
 #include "Properties.hpp"
diff --git a/clicache/src/IRegion.hpp b/clicache/src/IRegion.hpp
index 78e8a308..a22637a9 100644
--- a/clicache/src/IRegion.hpp
+++ b/clicache/src/IRegion.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ISubscriptionService.hpp"
 #include "begin_native.hpp"
diff --git a/clicache/src/IRegionService.hpp b/clicache/src/IRegionService.hpp
index 7e7b2e85..aa4ee9b7 100644
--- a/clicache/src/IRegionService.hpp
+++ b/clicache/src/IRegionService.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 namespace Apache
diff --git a/clicache/src/IResultCollector.hpp b/clicache/src/IResultCollector.hpp
index 0ead6419..fd81e891 100644
--- a/clicache/src/IResultCollector.hpp
+++ b/clicache/src/IResultCollector.hpp
@@ -18,6 +18,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 using namespace System;
diff --git a/clicache/src/ISelectResults.hpp b/clicache/src/ISelectResults.hpp
index 68feff8d..d94c21fa 100644
--- a/clicache/src/ISelectResults.hpp
+++ b/clicache/src/ISelectResults.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/SelectResults.hpp>
diff --git a/clicache/src/ISubscriptionService.hpp b/clicache/src/ISubscriptionService.hpp
index 4e4e1503..26b3eb04 100644
--- a/clicache/src/ISubscriptionService.hpp
+++ b/clicache/src/ISubscriptionService.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ExceptionTypes.hpp"
 
diff --git a/clicache/src/ITransactionListener.hpp b/clicache/src/ITransactionListener.hpp
index a4db8cfd..7e44ddb9 100644
--- a/clicache/src/ITransactionListener.hpp
+++ b/clicache/src/ITransactionListener.hpp
@@ -17,6 +17,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "TransactionEvent.hpp"
 
diff --git a/clicache/src/ITransactionWriter.hpp b/clicache/src/ITransactionWriter.hpp
index 3874d0d0..8da5c640 100644
--- a/clicache/src/ITransactionWriter.hpp
+++ b/clicache/src/ITransactionWriter.hpp
@@ -17,6 +17,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "TransactionEvent.hpp"
 
diff --git a/clicache/src/IWritablePdxInstance.hpp b/clicache/src/IWritablePdxInstance.hpp
index 2d7f0363..4a8b82de 100755
--- a/clicache/src/IWritablePdxInstance.hpp
+++ b/clicache/src/IWritablePdxInstance.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 namespace Apache
 {
   namespace Geode
diff --git a/clicache/src/LocalRegion.cpp b/clicache/src/LocalRegion.cpp
index 782ad35c..77d1a92d 100644
--- a/clicache/src/LocalRegion.cpp
+++ b/clicache/src/LocalRegion.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include "geode/Region.hpp"
 #include "geode/Cache.hpp"
@@ -29,6 +30,7 @@
 #include "impl/SafeConvert.hpp"
 #include "impl/CacheResolver.hpp"
 
+
 using namespace System;
 
 namespace Apache
@@ -37,6 +39,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       generic<class TKey, class TValue>
       TValue LocalRegion<TKey, TValue>::Get(TKey key, Object^ callbackArg)
@@ -608,7 +611,7 @@ namespace Apache
       { 
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getName( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getName( ) );
         }
         finally
         {
@@ -621,7 +624,7 @@ namespace Apache
       { 
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getFullPath( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getFullPath( ) );
         }
         finally
         {
@@ -708,8 +711,7 @@ namespace Apache
 
           try
           {
-            ManagedString mg_path(path);
-            auto nativeptr = m_nativeptr->get()->getSubregion(mg_path.CharPtr);
+            auto nativeptr = m_nativeptr->get()->getSubregion(marshal_as<std::string>(path));
             auto region = Region<TKey, TValue>::Create(nativeptr);
             if (region == nullptr) {
               return nullptr;
@@ -732,9 +734,8 @@ namespace Apache
 
           try
           {
-            ManagedString mg_subregionName(subRegionName);
             return Region<TKey, TValue>::Create(m_nativeptr->get()->createSubregion(
-              mg_subregionName.CharPtr, __nullptr))->GetLocalView();
+              marshal_as<std::string>(subRegionName), __nullptr))->GetLocalView();
           }
           finally
           {
diff --git a/clicache/src/LocalRegion.hpp b/clicache/src/LocalRegion.hpp
index a8f8a437..44fbb4f6 100644
--- a/clicache/src/LocalRegion.hpp
+++ b/clicache/src/LocalRegion.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/Cache.hpp>
diff --git a/clicache/src/Log.cpp b/clicache/src/Log.cpp
index 2a1f6aba..dfa8b0c9 100644
--- a/clicache/src/Log.cpp
+++ b/clicache/src/Log.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "Log.hpp"
 #include "impl/ManagedString.hpp"
 #include "impl/SafeConvert.hpp"
diff --git a/clicache/src/Log.hpp b/clicache/src/Log.hpp
index 8e2947b4..4aff1c9e 100644
--- a/clicache/src/Log.hpp
+++ b/clicache/src/Log.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include "util/Log.hpp"
diff --git a/clicache/src/PdxIdentityFieldAttribute.hpp b/clicache/src/PdxIdentityFieldAttribute.hpp
index 0c43f840..da9b38c9 100755
--- a/clicache/src/PdxIdentityFieldAttribute.hpp
+++ b/clicache/src/PdxIdentityFieldAttribute.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 using namespace System;
 using namespace System::Reflection;
diff --git a/clicache/src/Pool.cpp b/clicache/src/Pool.cpp
index 42dfe396..33fc4758 100644
--- a/clicache/src/Pool.cpp
+++ b/clicache/src/Pool.cpp
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
+
 #include "Pool.hpp"
 #include "QueryService.hpp"
 #include "CacheableString.hpp"
 #include "Cache.hpp"
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 #include "TimeUtils.hpp"
@@ -32,13 +32,14 @@ namespace Apache
     namespace Client
     {
 
+      using namespace msclr::interop;
       using namespace System;
 
       String^ Pool::Name::get( )
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getName( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getName( ) );
         }
         finally
         {
@@ -276,7 +277,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getServerGroup( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getServerGroup( ) );
         }
         finally
         {
@@ -294,10 +295,10 @@ namespace Apache
           int length = locators->length();
           if (length > 0)
           {
-            array<String^>^ result = gcnew array<String^>(length);
+            auto result = gcnew array<String^>(length);
             for (int item = 0; item < length; item++)
             {
-              result[item] = CacheableString::GetString((*locators)[item].get());
+              result[item] = marshal_as<String^>((*locators)[item]->toString());
             }
             return result;
           }
@@ -324,7 +325,7 @@ namespace Apache
             array<String^>^ result = gcnew array<String^>(length);
             for (int item = 0; item < length; item++)
             {
-              result[item] = CacheableString::GetString((*servers)[item].get());
+              result[item] = marshal_as<String^>((*servers)[item]->toString());
             }
             return result;
           }
diff --git a/clicache/src/Pool.hpp b/clicache/src/Pool.hpp
index 704b5689..a12b5ef5 100644
--- a/clicache/src/Pool.hpp
+++ b/clicache/src/Pool.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/Pool.hpp>
diff --git a/clicache/src/PoolFactory.cpp b/clicache/src/PoolFactory.cpp
index 2e8e3902..0c4b762b 100644
--- a/clicache/src/PoolFactory.cpp
+++ b/clicache/src/PoolFactory.cpp
@@ -15,12 +15,13 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 
 #include "Pool.hpp"
 #include "PoolFactory.hpp"
 
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "Cache.hpp"
 #include "TimeUtils.hpp"
@@ -231,15 +232,13 @@ namespace Apache
           return this;
 		  }
 
-
       PoolFactory^ PoolFactory::SetServerGroup( String^ group )
       {
 			  _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        ManagedString mg_servergroup( group );
 			  try
 			  {
-			    m_nativeptr->get()->setServerGroup( mg_servergroup.CharPtr );
+			    m_nativeptr->get()->setServerGroup( marshal_as<std::string>(group) );
 			  }
 			  finally
 			  {
@@ -255,10 +254,9 @@ namespace Apache
       {
 			  _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-        ManagedString mg_host( host );
 			  try
 			  {
-			    m_nativeptr->get()->addLocator( mg_host.CharPtr, port );
+			    m_nativeptr->get()->addLocator( marshal_as<std::string>(host), port );
 			  }
 			  finally
 			  {
@@ -274,10 +272,9 @@ namespace Apache
       {
 			  _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-			  ManagedString mg_host( host );
 			  try
 			  {
-			    m_nativeptr->get()->addServer( mg_host.CharPtr, port );
+			    m_nativeptr->get()->addServer( marshal_as<std::string>(host), port );
 			  }
 			  finally
 			  {
@@ -434,10 +431,9 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          ManagedString mg_name(name);
           try
           {
-            return Pool::Create(m_nativeptr->get()->create(mg_name.CharPtr));
+            return Pool::Create(m_nativeptr->get()->create(marshal_as<std::string>(name)));
           }
           finally
           {
diff --git a/clicache/src/PoolFactory.hpp b/clicache/src/PoolFactory.hpp
index 1c3b6198..25ebafeb 100644
--- a/clicache/src/PoolFactory.hpp
+++ b/clicache/src/PoolFactory.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/PoolFactory.hpp>
diff --git a/clicache/src/PoolManager.cpp b/clicache/src/PoolManager.cpp
index 3f641a70..e2d1ab4b 100644
--- a/clicache/src/PoolManager.cpp
+++ b/clicache/src/PoolManager.cpp
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 
 #include "Region.hpp"
 #include "Pool.hpp"
@@ -53,8 +55,7 @@ namespace Apache
 
       Pool^ PoolManager::Find(String^ name)
       {
-        ManagedString mg_name( name );
-        auto pool = m_nativeref.find(mg_name.CharPtr);
+        auto pool = m_nativeref.find(marshal_as<std::string>(name));
         return Pool::Create(pool);
       }
 
diff --git a/clicache/src/PoolManager.hpp b/clicache/src/PoolManager.hpp
index 0ea139dc..db78fb4f 100644
--- a/clicache/src/PoolManager.hpp
+++ b/clicache/src/PoolManager.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/PoolManager.hpp>
@@ -85,10 +86,6 @@ namespace Apache
           return m_nativeref;
         }
 
-        /// <summary>
-        /// Private constructor to wrap a native object pointer
-        /// </summary>
-        /// <param name="nativeptr">The native object pointer</param>
         inline PoolManager(native::PoolManager& nativeref)
           : m_nativeref(nativeref)
         {
diff --git a/clicache/src/Properties.cpp b/clicache/src/Properties.cpp
index 1b619fef..6350c621 100644
--- a/clicache/src/Properties.cpp
+++ b/clicache/src/Properties.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include "CacheImpl.hpp"
 #include "SerializationRegistry.hpp"
@@ -22,7 +23,6 @@
 
 #include "Properties.hpp"
 #include "impl/ManagedVisitor.hpp"
-#include "impl/ManagedString.hpp"
 #include "impl/SafeConvert.hpp"
 #include "ExceptionTypes.hpp"
 
@@ -183,13 +183,11 @@ namespace Apache
       generic<class TPropKey, class TPropValue>
       void Properties<TPropKey, TPropValue>::Load( String^ fileName )
       {
-        ManagedString mg_fname( fileName );
-
         _GF_MG_EXCEPTION_TRY2
 
           try
           {
-            m_nativeptr->get()->load( mg_fname.CharPtr );
+            m_nativeptr->get()->load( marshal_as<std::string>(fileName) );
           }
           finally
           {
diff --git a/clicache/src/Properties.hpp b/clicache/src/Properties.hpp
index 8aa467cf..2f6a4730 100644
--- a/clicache/src/Properties.hpp
+++ b/clicache/src/Properties.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 #include "begin_native.hpp"
diff --git a/clicache/src/Query.cpp b/clicache/src/Query.cpp
index 2140caa3..3f3cce6a 100644
--- a/clicache/src/Query.cpp
+++ b/clicache/src/Query.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "Query.hpp"
 #include "ISelectResults.hpp"
 #include "ResultSet.hpp"
@@ -23,6 +24,7 @@
 #include "impl/SafeConvert.hpp"
 #include "TimeUtils.hpp"
 
+
 namespace Apache
 {
   namespace Geode
@@ -31,6 +33,8 @@ namespace Apache
     {
 
       using namespace System;
+      using namespace msclr::interop;
+
       namespace native = apache::geode::client;
 
       generic<class TResult>
@@ -108,7 +112,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getQueryString( ) );
+          return marshal_as<String^>(m_nativeptr->get()->getQueryString());
         }
         finally
         {
diff --git a/clicache/src/Query.hpp b/clicache/src/Query.hpp
index c86251f5..f734701a 100644
--- a/clicache/src/Query.hpp
+++ b/clicache/src/Query.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/Query.hpp>
diff --git a/clicache/src/QueryService.cpp b/clicache/src/QueryService.cpp
index 8821e2cc..01dcd1bb 100644
--- a/clicache/src/QueryService.cpp
+++ b/clicache/src/QueryService.cpp
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+
+
 #include "QueryService.hpp"
 #include "Query.hpp"
 #include "Log.hpp"
@@ -37,11 +39,10 @@ namespace Apache
       generic<class TResult>
       Query<TResult>^ QueryService::NewQuery(String^ query)
       {
-        ManagedString mg_queryStr(query);
         try
         {
           return Query<TResult>::Create(m_nativeptr->get()->newQuery(
-            mg_queryStr.CharPtr));
+            marshal_as<std::string>(query)));
         }
         catch (const apache::geode::client::Exception& ex)
         {
@@ -56,11 +57,10 @@ namespace Apache
       generic<class TKey, class TResult>
         CqQuery<TKey, TResult>^ QueryService::NewCq(String^ query, CqAttributes<TKey, TResult>^ cqAttr, bool isDurable)
         {
-          ManagedString mg_queryStr(query);
           try
           {
             return CqQuery<TKey, TResult>::Create(m_nativeptr->get()->newCq(
-              mg_queryStr.CharPtr, cqAttr->GetNative(), isDurable));
+              marshal_as<std::string>(query), cqAttr->GetNative(), isDurable));
           }
           catch (const apache::geode::client::Exception& ex)
           {
@@ -76,12 +76,10 @@ namespace Apache
       generic<class TKey, class TResult>
       CqQuery<TKey, TResult>^ QueryService::NewCq(String^ name, String^ query, CqAttributes<TKey, TResult>^ cqAttr, bool isDurable)
       {
-        ManagedString mg_queryStr(query);
-        ManagedString mg_nameStr(name);
         try
         {
           return CqQuery<TKey, TResult>::Create(m_nativeptr->get()->newCq(
-            mg_nameStr.CharPtr, mg_queryStr.CharPtr, cqAttr->GetNative(), isDurable));
+            marshal_as<std::string>(name), marshal_as<std::string>(query), cqAttr->GetNative(), isDurable));
         }
         catch (const apache::geode::client::Exception& ex)
         {
@@ -137,11 +135,10 @@ namespace Apache
       generic<class TKey, class TResult>
       CqQuery<TKey, TResult>^ QueryService::GetCq(String^ name)
       {
-        ManagedString mg_queryStr(name);
         try
         {
           return CqQuery<TKey, TResult>::Create(m_nativeptr->get()->getCq(
-            mg_queryStr.CharPtr));
+            marshal_as<std::string>(name)));
         }
         catch (const apache::geode::client::Exception& ex)
         {
@@ -209,7 +206,7 @@ namespace Apache
           auto durableCqsList = gcnew System::Collections::Generic::List<String^>();
           for (const auto& d : *durableCqsArrayListPtr)
           {
-            durableCqsList->Add(CacheableString::GetString(std::static_pointer_cast<apache::geode::client::CacheableString>(d)));
+            durableCqsList->Add(marshal_as<String^>(std::static_pointer_cast<apache::geode::client::CacheableString>(d)->toString()));
           }
           return durableCqsList;
         }
diff --git a/clicache/src/QueryService.hpp b/clicache/src/QueryService.hpp
index 419b14a7..58ab9145 100644
--- a/clicache/src/QueryService.hpp
+++ b/clicache/src/QueryService.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "native_shared_ptr.hpp"
 #include "begin_native.hpp"
@@ -64,7 +65,7 @@ namespace Apache
         /// @endnativeclient
         generic<class TKey, class TResult>
         CqQuery<TKey, TResult>^ NewCq(String^ query, CqAttributes<TKey, TResult>^ cqAttr, bool isDurable);
-  
+
         /// @nativeclient
         /// <summary>
         /// Get a <c>CqQuery</c> object to enable continuous querying.
@@ -156,4 +157,3 @@ namespace Apache
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
-
diff --git a/clicache/src/ReflectionBasedAutoSerializer.cpp b/clicache/src/ReflectionBasedAutoSerializer.cpp
index 436ce4bd..5611b448 100755
--- a/clicache/src/ReflectionBasedAutoSerializer.cpp
+++ b/clicache/src/ReflectionBasedAutoSerializer.cpp
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include "ReflectionBasedAutoSerializer.hpp"
 #include "PdxIdentityFieldAttribute.hpp"
 #include "Serializable.hpp"
diff --git a/clicache/src/ReflectionBasedAutoSerializer.hpp b/clicache/src/ReflectionBasedAutoSerializer.hpp
index e32b68fe..5dd08887 100755
--- a/clicache/src/ReflectionBasedAutoSerializer.hpp
+++ b/clicache/src/ReflectionBasedAutoSerializer.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IPdxSerializer.hpp"
 #include "PdxIdentityFieldAttribute.hpp"
diff --git a/clicache/src/Region.cpp b/clicache/src/Region.cpp
index 789eadc5..f4f58671 100644
--- a/clicache/src/Region.cpp
+++ b/clicache/src/Region.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <tuple>
 #include "geode/Region.hpp"
@@ -40,6 +41,7 @@
 #include "impl/CacheResolver.hpp"
 #include "TimeUtils.hpp"
 
+
 namespace Apache
 {
   namespace Geode
@@ -48,6 +50,8 @@ namespace Apache
     {
 
       using namespace System;
+      using namespace msclr::interop;
+
       namespace native = apache::geode::client;
 
       generic<class TKey, class TValue>
@@ -791,7 +795,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get(m_nativeptr->get()->getName());
+          return marshal_as<String^>(m_nativeptr->get()->getName());
         }
         finally
         {
@@ -804,7 +808,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get(m_nativeptr->get()->getFullPath());
+          return marshal_as<String^>(m_nativeptr->get()->getFullPath());
         }
         finally
         {
@@ -889,10 +893,9 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          ManagedString mg_path(path);
           try
           {
-            auto subRegion = m_nativeptr->get()->getSubregion(mg_path.CharPtr);
+            auto subRegion = m_nativeptr->get()->getSubregion(marshal_as<std::string>(path));
             return Region::Create(subRegion);
           }
           finally
@@ -911,9 +914,8 @@ namespace Apache
 
           try
           {
-            ManagedString mg_subregionName(subRegionName);
             auto p_attrs = attributes->GetNative();
-            return Region::Create(m_nativeptr->get()->createSubregion(mg_subregionName.CharPtr, p_attrs));
+            return Region::Create(m_nativeptr->get()->createSubregion(marshal_as<std::string>(subRegionName), p_attrs));
           }
           finally
           {
@@ -1267,7 +1269,7 @@ namespace Apache
         auto strarr = gcnew array<String^>(static_cast<int>(vc.size()));
         for (System::Int32 index = 0; index < strarr->Length; index++)
         {
-          strarr[index] = ManagedString::Get(vc[index]->asChar());
+          strarr[index] = marshal_as<String^>(vc[index]->asChar());
           //collectionlist[ index ] = Serializable::GetManagedValue<TValue>(nativeptr);
         }
         auto collectionlist = (System::Collections::Generic::ICollection<String^>^)strarr;
@@ -1320,8 +1322,7 @@ namespace Apache
 
         try
         {
-          ManagedString mg_regex(regex);
-          m_nativeptr->get()->registerRegex(mg_regex.CharPtr, isDurable,
+          m_nativeptr->get()->registerRegex(marshal_as<std::string>(regex), isDurable,
             getInitialValues, receiveValues);
         }
         finally
@@ -1337,10 +1338,9 @@ namespace Apache
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          ManagedString mg_regex(regex);
         try
         {
-          m_nativeptr->get()->unregisterRegex(mg_regex.CharPtr);
+          m_nativeptr->get()->unregisterRegex(marshal_as<std::string>(regex));
         }
         finally
         {
@@ -1362,13 +1362,11 @@ namespace Apache
       generic<class TResult>
       ISelectResults<TResult>^ Region<TKey, TValue>::Query(String^ predicate, TimeSpan timeout)
       {
-        ManagedString mg_predicate(predicate);
-
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
           try
           {
-            auto selectResults = m_nativeptr->get()->query(mg_predicate.CharPtr, TimeUtils::TimeSpanToDurationCeil<std::chrono::seconds>(timeout));
+            auto selectResults = m_nativeptr->get()->query(marshal_as<std::string>(predicate), TimeUtils::TimeSpanToDurationCeil<std::chrono::seconds>(timeout));
             if (auto resultptr = std::dynamic_pointer_cast<native::ResultSet>(selectResults))
             {
               return ResultSet<TResult>::Create(resultptr);
@@ -1396,13 +1394,11 @@ namespace Apache
       generic<class TKey, class TValue>
       bool Region<TKey, TValue>::ExistsValue(String^ predicate, TimeSpan timeout)
       {
-        ManagedString mg_predicate(predicate);
-
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
           try
           {
-            return m_nativeptr->get()->existsValue(mg_predicate.CharPtr, TimeUtils::TimeSpanToDurationCeil<std::chrono::seconds>(timeout));
+            return m_nativeptr->get()->existsValue(marshal_as<std::string>(predicate), TimeUtils::TimeSpanToDurationCeil<std::chrono::seconds>(timeout));
           }
           finally
           {
@@ -1410,7 +1406,6 @@ namespace Apache
           }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
-
       }
 
       generic<class TKey, class TValue>
@@ -1422,13 +1417,11 @@ namespace Apache
       generic<class TKey, class TValue>
       Object^ Region<TKey, TValue>::SelectValue(String^ predicate, TimeSpan timeout)
       {
-        ManagedString mg_predicate(predicate);
-
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
         try
         {
-          auto nativeptr = m_nativeptr->get()->selectValue(mg_predicate.CharPtr, TimeUtils::TimeSpanToDurationCeil<std::chrono::seconds>(timeout));
+          auto nativeptr = m_nativeptr->get()->selectValue(marshal_as<std::string>(predicate), TimeUtils::TimeSpanToDurationCeil<std::chrono::seconds>(timeout));
           return Serializable::GetManagedValueGeneric<Object^>(nativeptr);
         }
         finally
@@ -1437,7 +1430,6 @@ namespace Apache
         }
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
-
       }
 
       generic<class TKey, class TValue>
diff --git a/clicache/src/Region.hpp b/clicache/src/Region.hpp
index 04de85a7..072c5584 100644
--- a/clicache/src/Region.hpp
+++ b/clicache/src/Region.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/Cache.hpp>
diff --git a/clicache/src/RegionAttributes.cpp b/clicache/src/RegionAttributes.cpp
index 34f5e90c..bc3d39c8 100644
--- a/clicache/src/RegionAttributes.cpp
+++ b/clicache/src/RegionAttributes.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "RegionAttributes.hpp"
 #include "impl/ManagedCacheLoader.hpp"
 #include "impl/ManagedCacheWriter.hpp"
@@ -35,6 +36,7 @@
 #include "impl/SafeConvert.hpp"
 #include "TimeUtils.hpp"
 
+
 namespace Apache
 {
   namespace Geode
@@ -42,6 +44,7 @@ namespace Apache
     namespace Client
     {
       using namespace System;
+      using namespace msclr::interop;
 
       namespace native = apache::geode::client;
 
@@ -372,7 +375,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getCacheLoaderLibrary( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getCacheLoaderLibrary( ) );
         }
         finally
         {
@@ -385,7 +388,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getCacheLoaderFactory( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getCacheLoaderFactory( ) );
         }
         finally
         {
@@ -398,7 +401,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getCacheListenerLibrary( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getCacheListenerLibrary( ) );
         }
         finally
         {
@@ -411,7 +414,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getPartitionResolverLibrary( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getPartitionResolverLibrary( ) );
         }
         finally
         {
@@ -424,7 +427,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getPartitionResolverFactory( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getPartitionResolverFactory( ) );
         }
         finally
         {
@@ -437,7 +440,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getCacheListenerFactory( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getCacheListenerFactory( ) );
         }
         finally
         {
@@ -450,7 +453,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getCacheWriterLibrary( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getCacheWriterLibrary( ) );
         }
         finally
         {
@@ -463,7 +466,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getCacheWriterFactory( ) );
+          return marshal_as<System::String^>(m_nativeptr->get()->getCacheWriterFactory());
         }
         finally
         {
@@ -512,7 +515,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getEndpoints( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getEndpoints( ) );
         }
         finally
         {
@@ -525,7 +528,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getPoolName( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getPoolName( ) );
         }
         finally
         {
@@ -551,7 +554,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getPersistenceLibrary( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getPersistenceLibrary( ) );
         }
         finally
         {
@@ -564,7 +567,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get( m_nativeptr->get()->getPersistenceFactory( ) );
+          return marshal_as<String^>( m_nativeptr->get()->getPersistenceFactory( ) );
         }
         finally
         {
diff --git a/clicache/src/RegionAttributes.hpp b/clicache/src/RegionAttributes.hpp
index d2a0ef38..90c58fe1 100644
--- a/clicache/src/RegionAttributes.hpp
+++ b/clicache/src/RegionAttributes.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/RegionAttributes.hpp>
diff --git a/clicache/src/RegionEntry.cpp b/clicache/src/RegionEntry.cpp
index f80ac5e8..b54332cf 100644
--- a/clicache/src/RegionEntry.cpp
+++ b/clicache/src/RegionEntry.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "RegionEntry.hpp"
 #include "Region.hpp"
 #include "CacheStatistics.hpp"
diff --git a/clicache/src/RegionEntry.hpp b/clicache/src/RegionEntry.hpp
index 06df712c..e56adcaf 100644
--- a/clicache/src/RegionEntry.hpp
+++ b/clicache/src/RegionEntry.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/RegionEntry.hpp>
diff --git a/clicache/src/RegionEvent.cpp b/clicache/src/RegionEvent.cpp
index 37663264..0960582e 100644
--- a/clicache/src/RegionEvent.cpp
+++ b/clicache/src/RegionEvent.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "RegionEvent.hpp"
 #include "Region.hpp"
 #include "IGeodeSerializable.hpp"
diff --git a/clicache/src/RegionEvent.hpp b/clicache/src/RegionEvent.hpp
index 7554c133..4bb28b96 100644
--- a/clicache/src/RegionEvent.hpp
+++ b/clicache/src/RegionEvent.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/RegionEvent.hpp>
diff --git a/clicache/src/RegionFactory.cpp b/clicache/src/RegionFactory.cpp
index aa167a5d..b2924066 100644
--- a/clicache/src/RegionFactory.cpp
+++ b/clicache/src/RegionFactory.cpp
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 
 #include "RegionFactory.hpp"
 #include "RegionAttributes.hpp"
@@ -50,12 +52,11 @@ namespace Apache
       RegionFactory^ RegionFactory::SetCacheLoader( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setCacheLoader( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setCacheLoader( marshal_as<std::string>(libPath),
+            marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -67,12 +68,11 @@ namespace Apache
       RegionFactory^ RegionFactory::SetCacheWriter( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setCacheWriter( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setCacheWriter( marshal_as<std::string>(libPath),
+            marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -84,12 +84,11 @@ namespace Apache
       RegionFactory^ RegionFactory::SetCacheListener( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setCacheListener( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setCacheListener( marshal_as<std::string>(libPath),
+            marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -101,12 +100,11 @@ namespace Apache
       RegionFactory^ RegionFactory::SetPartitionResolver( String^ libPath, String^ factoryFunctionName )
       {
         throw gcnew System::NotSupportedException;
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
 
         try
         {
-          m_nativeptr->get()->setPartitionResolver( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr );
+          m_nativeptr->get()->setPartitionResolver( marshal_as<std::string>(libPath),
+            marshal_as<std::string>(factoryFunctionName) );
         }
         finally
         {
@@ -209,12 +207,10 @@ namespace Apache
       RegionFactory^ RegionFactory::SetPersistenceManager( String^ libPath,
         String^ factoryFunctionName, /*Dictionary<Object^, Object^>*/Properties<String^, String^>^ config )
       {        
-        ManagedString mg_libpath( libPath );
-        ManagedString mg_factoryFunctionName( factoryFunctionName );
-
         try
         {
-          m_nativeptr->get()->setPersistenceManager( mg_libpath.CharPtr, mg_factoryFunctionName.CharPtr, config->GetNative() );
+          m_nativeptr->get()->setPersistenceManager( marshal_as<std::string>(libPath),
+            marshal_as<std::string>(factoryFunctionName), config->GetNative() );
         }
         finally
         {
@@ -225,11 +221,10 @@ namespace Apache
 
       RegionFactory^ RegionFactory::SetPoolName( String^ poolName )
       {
-        ManagedString mg_poolName( poolName );
 
         try
         {
-          m_nativeptr->get()->setPoolName( mg_poolName.CharPtr );
+          m_nativeptr->get()->setPoolName( marshal_as<std::string>(poolName) );
         }
         finally
         {
@@ -364,8 +359,7 @@ namespace Apache
 
           try
           {
-            ManagedString mg_name( regionName );
-            auto nativeptr = m_nativeptr->get()->create( mg_name.CharPtr );
+            auto nativeptr = m_nativeptr->get()->create( marshal_as<std::string>(regionName) );
             return Client::Region<TKey,TValue>::Create( nativeptr );
           }
           finally
diff --git a/clicache/src/RegionFactory.hpp b/clicache/src/RegionFactory.hpp
index 411c606f..899f901a 100644
--- a/clicache/src/RegionFactory.hpp
+++ b/clicache/src/RegionFactory.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/AttributesFactory.hpp>
diff --git a/clicache/src/RegionShortcut.hpp b/clicache/src/RegionShortcut.hpp
index 1373aaa2..d09ae0a5 100644
--- a/clicache/src/RegionShortcut.hpp
+++ b/clicache/src/RegionShortcut.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 using namespace System;
diff --git a/clicache/src/ResultCollector.cpp b/clicache/src/ResultCollector.cpp
index d6390f7c..6235b06b 100644
--- a/clicache/src/ResultCollector.cpp
+++ b/clicache/src/ResultCollector.cpp
@@ -16,8 +16,8 @@
  */
 
 
+
 #include "ResultCollector.hpp"
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 #include "TimeUtils.hpp"
diff --git a/clicache/src/ResultCollector.hpp b/clicache/src/ResultCollector.hpp
index 50eec6c4..1fe239d2 100644
--- a/clicache/src/ResultCollector.hpp
+++ b/clicache/src/ResultCollector.hpp
@@ -18,6 +18,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "IResultCollector.hpp"
 #include "begin_native.hpp"
diff --git a/clicache/src/ResultSet.cpp b/clicache/src/ResultSet.cpp
index 8e512cc4..ce41ba4c 100644
--- a/clicache/src/ResultSet.cpp
+++ b/clicache/src/ResultSet.cpp
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "ResultSet.hpp"
 #include "SelectResultsIterator.hpp"
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 
diff --git a/clicache/src/ResultSet.hpp b/clicache/src/ResultSet.hpp
index 408517aa..1bda218d 100644
--- a/clicache/src/ResultSet.hpp
+++ b/clicache/src/ResultSet.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/ResultSet.hpp>
diff --git a/clicache/src/SelectResultsIterator.cpp b/clicache/src/SelectResultsIterator.cpp
index 0ac7edc2..de589e02 100644
--- a/clicache/src/SelectResultsIterator.cpp
+++ b/clicache/src/SelectResultsIterator.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "SelectResultsIterator.hpp"
 #include "impl/SafeConvert.hpp"
 
diff --git a/clicache/src/SelectResultsIterator.hpp b/clicache/src/SelectResultsIterator.hpp
index 0bb61911..b33e6b34 100644
--- a/clicache/src/SelectResultsIterator.hpp
+++ b/clicache/src/SelectResultsIterator.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/SelectResultsIterator.hpp>
diff --git a/clicache/src/Serializable.cpp b/clicache/src/Serializable.cpp
index 83365980..41a6660f 100644
--- a/clicache/src/Serializable.cpp
+++ b/clicache/src/Serializable.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "begin_native.hpp"
 #include <geode/Cache.hpp>
 #include <geode/PoolManager.hpp>
@@ -63,6 +64,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
       namespace native = apache::geode::client;
 
       void Apache::Geode::Client::Serializable::ToData(
@@ -143,13 +145,7 @@ namespace Apache
       {
         try
         {
-          auto cStr = m_nativeptr->get()->toString();
-          if (cStr->isWideString()) {
-            return ManagedString::Get(cStr->asWChar());
-          }
-          else {
-            return ManagedString::Get(cStr->asChar());
-          }
+          return marshal_as<String^>(m_nativeptr->get()->toString());
         }
         finally
         {
@@ -252,15 +248,16 @@ namespace Apache
         return (Apache::Geode::Client::Serializable^)CacheableStringArray::Create(value);
       }
 
-      System::Int32 Serializable::GetPDXIdForType(const char* poolName, IGeodeSerializable^ pdxType, Cache^ cache)
+      System::Int32 Serializable::GetPDXIdForType(String^ poolName, IGeodeSerializable^ pdxType, Cache^ cache)
       {
         std::shared_ptr<native::Cacheable> kPtr(SafeMSerializableConvertGeneric(pdxType));
-        return CacheRegionHelper::getCacheImpl(cache->GetNative().get())->getSerializationRegistry()->GetPDXIdForType(cache->GetNative()->getPoolManager().find(poolName), kPtr);
+        return CacheRegionHelper::getCacheImpl(cache->GetNative().get())->getSerializationRegistry()->GetPDXIdForType(cache->GetNative()->getPoolManager().find(marshal_as<std::string>(poolName)), kPtr);
       }
 
-      IGeodeSerializable^ Serializable::GetPDXTypeById(const char* poolName, System::Int32 typeId, Cache^ cache)
+      IGeodeSerializable^ Serializable::GetPDXTypeById(String^ poolName, System::Int32 typeId, Cache^ cache)
       {        
-        std::shared_ptr<apache::geode::client::Serializable> sPtr = CacheRegionHelper::getCacheImpl(cache->GetNative().get())->getSerializationRegistry()->GetPDXTypeById(cache->GetNative()->getPoolManager().find(poolName), typeId);
+        std::shared_ptr<apache::geode::client::Serializable> sPtr = 
+            CacheRegionHelper::getCacheImpl(cache->GetNative().get())->getSerializationRegistry()->GetPDXTypeById(cache->GetNative()->getPoolManager().find(marshal_as<std::string>(poolName)), typeId);
         return SafeUMSerializableConvertGeneric(sPtr);
       }
 
@@ -1216,19 +1213,6 @@ namespace Apache
         }
       } //
 
-      String^ Serializable::GetString(std::shared_ptr<native::CacheableString> cStr)//native::CacheableString*
-      {
-        if (cStr == nullptr) {
-          return nullptr;
-        }
-        else if (cStr->isWideString()) {
-          return ManagedString::Get(cStr->asWChar());
-        }
-        else {
-          return ManagedString::Get(cStr->asChar());
-        }
-      }
-
       // These are the new static methods to get/put data from c++
 
       //byte
@@ -1330,7 +1314,7 @@ namespace Apache
       //cacheable ascii string
       String^ Serializable::getASCIIString(std::shared_ptr<native::Serializable> nativeptr)
       {
-        return GetString(nativeptr->toString());
+        return marshal_as<String^>(nativeptr->toString());
       }
 
       std::shared_ptr<native::CacheableKey> Serializable::getCacheableASCIIString(String^ val)
@@ -1346,7 +1330,7 @@ namespace Apache
       //cacheable ascii string huge
       String^ Serializable::getASCIIStringHuge(std::shared_ptr<native::Serializable> nativeptr)
       {
-        return GetString(nativeptr->toString());
+        return marshal_as<String^>(nativeptr->toString());
       }
 
       std::shared_ptr<native::CacheableKey> Serializable::getCacheableASCIIStringHuge(String^ val)
@@ -1357,7 +1341,7 @@ namespace Apache
       //cacheable string
       String^ Serializable::getUTFString(std::shared_ptr<native::Serializable> nativeptr)
       {
-        return GetString(nativeptr->toString());
+        return marshal_as<String^>(nativeptr->toString());
       }
 
       std::shared_ptr<native::CacheableKey> Serializable::getCacheableUTFString(String^ val)
@@ -1368,7 +1352,7 @@ namespace Apache
       //cacheable string huge
       String^ Serializable::getUTFStringHuge(std::shared_ptr<native::Serializable> nativeptr)
       {
-        return GetString(nativeptr->toString());
+        return marshal_as<String^>(nativeptr->toString());
       }
 
       std::shared_ptr<native::CacheableKey> Serializable::getCacheableUTFStringHuge(String^ val)
diff --git a/clicache/src/Serializable.hpp b/clicache/src/Serializable.hpp
index 460bfae4..2092e664 100644
--- a/clicache/src/Serializable.hpp
+++ b/clicache/src/Serializable.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/CacheableKey.hpp>
@@ -25,7 +26,6 @@
 
 #include "IGeodeSerializable.hpp"
 #include "IGeodeDelta.hpp"
-#include "impl/ManagedString.hpp"
 #include "native_shared_ptr.hpp"
 #include "impl/EnumInfo.hpp"
 #include "Log.hpp"
@@ -299,8 +299,8 @@ namespace Apache
 
       internal:
 
-				static System::Int32 GetPDXIdForType(const char* poolName, IGeodeSerializable^ pdxType, Cache^ cache);
-				static IGeodeSerializable^ GetPDXTypeById(const char* poolName, System::Int32 typeId, Cache^ cache);
+				static System::Int32 GetPDXIdForType(String^ poolName, IGeodeSerializable^ pdxType, Cache^ cache);
+				static IGeodeSerializable^ GetPDXTypeById(String^ poolName, System::Int32 typeId, Cache^ cache);
 				static IPdxSerializable^ Serializable::GetPdxType(String^ className);
 				static void RegisterPDXManagedCacheableKey(Cache^ cache);
         static bool IsObjectAndPdxSerializerRegistered(String^ className);
@@ -317,9 +317,7 @@ namespace Apache
 
          static Dictionary<String^, PdxTypeFactoryMethod^>^ PdxDelegateMap =
           gcnew Dictionary<String^, PdxTypeFactoryMethod^>();
-       
-        static String^ GetString(std::shared_ptr<native::CacheableString> cStr);//native::CacheableString*
-        
+               
         // These are the new static methods to get/put data from c++
 
         //byte
@@ -391,21 +389,6 @@ namespace Apache
 
        static std::shared_ptr<native::CacheableString> GetCacheableString2(String^ value);
 
-       /*
-        static String^ GetString(std::shared_ptr<native::CacheableString> cStr)//native::CacheableString*
-        {
-          if (cStr == nullptr) {
-            return nullptr;
-          }
-          else if (cStr->isWideString()) {
-            return ManagedString::Get(cStr->asWChar());
-          }
-          else {
-            return ManagedString::Get(cStr->asChar());
-          }
-        }
-        */
-
         static array<Byte>^ getSByteArray(array<SByte>^ sArray);
         
         static array<System::Int16>^ getInt16Array(array<System::UInt16>^ sArray);
diff --git a/clicache/src/StatisticDescriptor.cpp b/clicache/src/StatisticDescriptor.cpp
index 6e0075c2..0f36ddc2 100644
--- a/clicache/src/StatisticDescriptor.cpp
+++ b/clicache/src/StatisticDescriptor.cpp
@@ -16,8 +16,8 @@
  */
 
 
+
 #include "StatisticDescriptor.hpp"
-#include "impl/ManagedString.hpp"
 
 
 namespace Apache
@@ -26,6 +26,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       System::Int32 StatisticDescriptor::ID::get( )
       {
@@ -34,12 +35,12 @@ namespace Apache
 
       String^ StatisticDescriptor::Name::get( )
       {
-        return ManagedString::Get( m_nativeptr->getName() );
+        return marshal_as<String^>( m_nativeptr->getName() );
       }
 
       String^ StatisticDescriptor::Description::get( )
       {
-        return ManagedString::Get( m_nativeptr->getDescription() );
+        return marshal_as<String^>( m_nativeptr->getDescription() );
       }
 
       int8_t StatisticDescriptor::IsCounter::get( )
@@ -54,7 +55,7 @@ namespace Apache
 
       String^ StatisticDescriptor::Unit::get()
       {
-        return ManagedString::Get(m_nativeptr->getUnit());
+        return marshal_as<String^>(m_nativeptr->getUnit());
       }
     }  // namespace Client
   }  // namespace Geode
diff --git a/clicache/src/StatisticDescriptor.hpp b/clicache/src/StatisticDescriptor.hpp
index 67150456..38fd535a 100644
--- a/clicache/src/StatisticDescriptor.hpp
+++ b/clicache/src/StatisticDescriptor.hpp
@@ -19,6 +19,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/statistics/StatisticDescriptor.hpp>
diff --git a/clicache/src/Statistics.cpp b/clicache/src/Statistics.cpp
index e0428739..52ce882f 100644
--- a/clicache/src/Statistics.cpp
+++ b/clicache/src/Statistics.cpp
@@ -17,12 +17,12 @@
 
 
 
-//#include "geode_includes.hpp"
+
+
 #include "Statistics.hpp"
 #include "StatisticDescriptor.hpp"
 #include "StatisticsType.hpp"
 
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 
@@ -33,6 +33,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       void Statistics::Close()
       {
@@ -43,17 +44,15 @@ namespace Apache
 
       System::Int32 Statistics::NameToId(String^ name)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return m_nativeptr->nameToId(mg_name.CharPtr);
+          return m_nativeptr->nameToId(marshal_as<std::string>(name));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */ 
       }
 
       StatisticDescriptor^ Statistics::NameToDescriptor(String^ name)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return StatisticDescriptor::Create(m_nativeptr->nameToDescriptor(mg_name.CharPtr));
+          return StatisticDescriptor::Create(m_nativeptr->nameToDescriptor(marshal_as<std::string>(name)));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */ 
       }
 
@@ -69,7 +68,7 @@ namespace Apache
 
       String^ Statistics::TextId::get()
       {
-        return ManagedString::Get(m_nativeptr->getTextId());
+        return marshal_as<String^>(m_nativeptr->getTextId());
       }
 
       System::Int64 Statistics::NumericId::get()
@@ -98,9 +97,8 @@ namespace Apache
 
       void Statistics::SetInt(String^ name, System::Int32 value)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          m_nativeptr->setInt((char*)mg_name.CharPtr, value);
+          m_nativeptr->setInt(marshal_as<std::string>(name), value);
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */ 
       }
 
@@ -127,9 +125,8 @@ namespace Apache
 
       void Statistics::SetLong(String^ name, System::Int64 value)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          m_nativeptr->setLong((char*)mg_name.CharPtr, value);
+          m_nativeptr->setLong(marshal_as<std::string>(name), value);
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */ 
       }
 
@@ -142,9 +139,8 @@ namespace Apache
 
       void Statistics::SetDouble(String^ name, double value)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          m_nativeptr->setDouble((char*)mg_name.CharPtr, value);
+          m_nativeptr->setDouble(marshal_as<std::string>(name), value);
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -171,9 +167,8 @@ namespace Apache
 
       System::Int32 Statistics::GetInt(String^ name)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return m_nativeptr->getInt((char*)mg_name.CharPtr);
+          return m_nativeptr->getInt(marshal_as<std::string>(name));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -192,9 +187,8 @@ namespace Apache
 
       System::Int64 Statistics::GetLong(String^ name)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-         return m_nativeptr->getLong((char*)mg_name.CharPtr);
+         return m_nativeptr->getLong(marshal_as<std::string>(name));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -214,9 +208,8 @@ namespace Apache
 
       double Statistics::GetDouble(String^ name)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return m_nativeptr->getDouble((char*)mg_name.CharPtr);
+          return m_nativeptr->getDouble(marshal_as<std::string>(name));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -243,9 +236,8 @@ namespace Apache
 
       System::Int32 Statistics::IncInt(String^ name, System::Int32 delta)
       {
-         ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return m_nativeptr->incInt((char*)mg_name.CharPtr,delta);
+          return m_nativeptr->incInt(marshal_as<std::string>(name),delta);
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -265,9 +257,8 @@ namespace Apache
 
       System::Int64 Statistics::IncLong(String^ name, System::Int64 delta)
       {
-         ManagedString mg_name( name );
          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-           return m_nativeptr->incLong((char*)mg_name.CharPtr,delta);
+           return m_nativeptr->incLong(marshal_as<std::string>(name),delta);
          _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
@@ -287,9 +278,8 @@ namespace Apache
 
       double Statistics::IncDouble(String^ name, double delta)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return m_nativeptr->incDouble((char*)mg_name.CharPtr,delta);
+          return m_nativeptr->incDouble(marshal_as<std::string>(name),delta);
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
     }  // namespace Client
   }  // namespace Geode
diff --git a/clicache/src/Statistics.hpp b/clicache/src/Statistics.hpp
index 0a39bac7..0bdacdee 100644
--- a/clicache/src/Statistics.hpp
+++ b/clicache/src/Statistics.hpp
@@ -19,6 +19,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/statistics/Statistics.hpp>
diff --git a/clicache/src/StatisticsFactory.cpp b/clicache/src/StatisticsFactory.cpp
index 69e0a765..ec6a86ce 100644
--- a/clicache/src/StatisticsFactory.cpp
+++ b/clicache/src/StatisticsFactory.cpp
@@ -24,7 +24,6 @@
 #include "StatisticsType.hpp"
 #include "StatisticDescriptor.hpp"
 #include "Statistics.hpp"
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 
@@ -35,6 +34,7 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       StatisticDescriptor^ StatisticsFactory::CreateIntCounter( String^ name, String^ description,String^ units )
       {
@@ -43,12 +43,13 @@ namespace Apache
 
       StatisticDescriptor^ StatisticsFactory::CreateIntCounter(String^ name, String^ description,String^ units, bool largerBetter)
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
-        ManagedString mg_units( units );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticDescriptor::Create(m_nativeptr->createIntCounter(mg_name.CharPtr, mg_description.CharPtr, mg_units.CharPtr, largerBetter));
+          return StatisticDescriptor::Create(m_nativeptr->createIntCounter(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              marshal_as<std::string>(units),
+              largerBetter));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -60,12 +61,13 @@ namespace Apache
 
       StatisticDescriptor^ StatisticsFactory::CreateLongCounter( String^ name, String^ description,String^ units, bool largerBetter )
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
-        ManagedString mg_units( units );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticDescriptor::Create(m_nativeptr->createLongCounter(mg_name.CharPtr, mg_description.CharPtr, mg_units.CharPtr, largerBetter));
+          return StatisticDescriptor::Create(m_nativeptr->createLongCounter(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              marshal_as<std::string>(units),
+              largerBetter));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }      
@@ -77,12 +79,13 @@ namespace Apache
 
       StatisticDescriptor^ StatisticsFactory::CreateDoubleCounter( String^ name, String^ description, String^ units, bool largerBetter )
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
-        ManagedString mg_units( units );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticDescriptor::Create(m_nativeptr->createDoubleCounter(mg_name.CharPtr, mg_description.CharPtr, mg_units.CharPtr, largerBetter));
+          return StatisticDescriptor::Create(m_nativeptr->createDoubleCounter(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              marshal_as<std::string>(units),
+              largerBetter));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -95,12 +98,13 @@ namespace Apache
 
       StatisticDescriptor^ StatisticsFactory::CreateIntGauge( String^ name, String^ description, String^ units, bool largerBetter )
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
-        ManagedString mg_units( units );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticDescriptor::Create(m_nativeptr->createIntGauge(mg_name.CharPtr, mg_description.CharPtr, mg_units.CharPtr, largerBetter));
+          return StatisticDescriptor::Create(m_nativeptr->createIntGauge(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              marshal_as<std::string>(units),
+              largerBetter));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */      
       }
@@ -112,12 +116,13 @@ namespace Apache
 
       StatisticDescriptor^ StatisticsFactory::CreateLongGauge( String^ name, String^ description, String^ units, bool largerBetter )
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
-        ManagedString mg_units( units );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticDescriptor::Create(m_nativeptr->createLongGauge(mg_name.CharPtr, mg_description.CharPtr, mg_units.CharPtr, largerBetter));
+          return StatisticDescriptor::Create(m_nativeptr->createLongGauge(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              marshal_as<std::string>(units),
+              largerBetter));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */      
       }
@@ -129,12 +134,13 @@ namespace Apache
 
       StatisticDescriptor^ StatisticsFactory::CreateDoubleGauge( String^ name, String^ description, String^ units, bool largerBetter )
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
-        ManagedString mg_units( units );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticDescriptor::Create(m_nativeptr->createDoubleGauge(mg_name.CharPtr, mg_description.CharPtr, mg_units.CharPtr, largerBetter));
+          return StatisticDescriptor::Create(m_nativeptr->createDoubleGauge(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              marshal_as<std::string>(units),
+              largerBetter));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */      
       }
@@ -142,8 +148,6 @@ namespace Apache
       StatisticsType^ StatisticsFactory::CreateType( String^ name, String^ description,
                                    array<StatisticDescriptor^>^ stats, System::Int32 statsLength)
       {
-        ManagedString mg_name( name );
-        ManagedString mg_description( description );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
                 
           apache::geode::statistics::StatisticDescriptor ** nativedescriptors = new apache::geode::statistics::StatisticDescriptor*[statsLength];
@@ -151,17 +155,20 @@ namespace Apache
           {
             nativedescriptors[index] = stats[index]->GetNative();
           }
-          return StatisticsType::Create(m_nativeptr->createType(mg_name.CharPtr, mg_description.CharPtr, nativedescriptors, statsLength));
+          return StatisticsType::Create(m_nativeptr->createType(
+              marshal_as<std::string>(name),
+              marshal_as<std::string>(description),
+              nativedescriptors,
+              statsLength));
           
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */     
       }
 
       StatisticsType^ StatisticsFactory::FindType(String^ name)
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticsType::Create(m_nativeptr->findType(mg_name.CharPtr));
+          return StatisticsType::Create(m_nativeptr->findType(marshal_as<std::string>(name)));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */     
       }
@@ -177,20 +184,18 @@ namespace Apache
 
       Statistics^ StatisticsFactory::CreateStatistics(StatisticsType^ type, String^ textId)
       {
-        ManagedString mg_text( textId );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return Statistics::Create(m_nativeptr->createStatistics(type->GetNative(),(char*)mg_text.CharPtr));
+          return Statistics::Create(m_nativeptr->createStatistics(type->GetNative(), marshal_as<std::string>(textId)));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
       Statistics^ StatisticsFactory::CreateStatistics(StatisticsType^ type, String^ textId, System::Int64 numericId)
       {
-        ManagedString mg_text( textId );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return Statistics::Create(m_nativeptr->createStatistics(type->GetNative(),(char*)mg_text.CharPtr, numericId));
+          return Statistics::Create(m_nativeptr->createStatistics(type->GetNative(), marshal_as<std::string>(textId), numericId));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -206,20 +211,18 @@ namespace Apache
 
       Statistics^ StatisticsFactory::CreateAtomicStatistics(StatisticsType^ type, String^ textId)
       {
-        ManagedString mg_text( textId );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return Statistics::Create(m_nativeptr->createAtomicStatistics(type->GetNative(),(char*)mg_text.CharPtr));
+          return Statistics::Create(m_nativeptr->createAtomicStatistics(type->GetNative(), marshal_as<std::string>(textId)));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
       Statistics^ StatisticsFactory::CreateAtomicStatistics(StatisticsType^ type, String^ textId, System::Int64 numericId)
       {
-        ManagedString mg_text( textId );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return Statistics::Create(m_nativeptr->createAtomicStatistics(type->GetNative(),(char*)mg_text.CharPtr, numericId));
+          return Statistics::Create(m_nativeptr->createAtomicStatistics(type->GetNative(), marshal_as<std::string>(textId), numericId));
 
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
@@ -234,7 +237,7 @@ namespace Apache
 
       String^ StatisticsFactory::Name::get( )
       {
-        return ManagedString::Get( m_nativeptr->getName() );
+        return marshal_as<String^>( m_nativeptr->getName() );
       }
 
       System::Int64 StatisticsFactory::ID::get()
diff --git a/clicache/src/StatisticsFactory.hpp b/clicache/src/StatisticsFactory.hpp
index efce9c5d..0f9e2276 100644
--- a/clicache/src/StatisticsFactory.hpp
+++ b/clicache/src/StatisticsFactory.hpp
@@ -19,6 +19,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/statistics/StatisticsFactory.hpp>
diff --git a/clicache/src/StatisticsType.cpp b/clicache/src/StatisticsType.cpp
index 117f7eed..325a2171 100644
--- a/clicache/src/StatisticsType.cpp
+++ b/clicache/src/StatisticsType.cpp
@@ -16,12 +16,9 @@
  */
 
 
-
-//#include "geode_includes.hpp"
 #include "StatisticsType.hpp"
 #include "StatisticDescriptor.hpp"
 
-#include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
 
@@ -32,15 +29,16 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       String^ StatisticsType::Name::get()
       {
-        return ManagedString::Get( m_nativeptr->getName() );
+        return marshal_as<String^>( m_nativeptr->getName() );
       }
 
       String^ StatisticsType::Description::get()
       {
-        return ManagedString::Get( m_nativeptr->getDescription() );
+        return marshal_as<String^>( m_nativeptr->getDescription() );
       }
 
       array<StatisticDescriptor^>^ StatisticsType::Statistics::get()
@@ -60,17 +58,15 @@ namespace Apache
 
       System::Int32 StatisticsType::NameToId( String^ name )
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return m_nativeptr->nameToId(mg_name.CharPtr);
+          return m_nativeptr->nameToId(marshal_as<std::string>(name));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
       StatisticDescriptor^ StatisticsType::NameToDescriptor( String^ name )
       {
-        ManagedString mg_name( name );
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-          return StatisticDescriptor::Create(m_nativeptr->nameToDescriptor(mg_name.CharPtr));
+          return StatisticDescriptor::Create(m_nativeptr->nameToDescriptor(marshal_as<std::string>(name)));
         _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
       }
 
diff --git a/clicache/src/StatisticsType.hpp b/clicache/src/StatisticsType.hpp
index 6644b34c..e6f3bb3f 100644
--- a/clicache/src/StatisticsType.hpp
+++ b/clicache/src/StatisticsType.hpp
@@ -19,6 +19,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/statistics/StatisticsType.hpp>
diff --git a/clicache/src/Struct.cpp b/clicache/src/Struct.cpp
index 213703f7..aee6b540 100644
--- a/clicache/src/Struct.cpp
+++ b/clicache/src/Struct.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
- //#include "geode_includes.hpp"
+ 
+
 #include "begin_native.hpp"
 #include <geode/Struct.hpp>
 #include "end_native.hpp"
@@ -50,11 +51,10 @@ namespace Apache
 
       Object^ Struct::default::get(String^ fieldName)
       {
-        ManagedString mg_fieldName(fieldName);
         try
         {
           return (Serializable::GetManagedValueGeneric<Object^>(
-            static_cast<native::Struct*>(m_nativeptr->get())->operator[](mg_fieldName.CharPtr)));
+            static_cast<native::Struct*>(m_nativeptr->get())->operator[](marshal_as<std::string>(fieldName))));
         }
         finally
         {
diff --git a/clicache/src/Struct.hpp b/clicache/src/Struct.hpp
index 557927ae..4c016efe 100644
--- a/clicache/src/Struct.hpp
+++ b/clicache/src/Struct.hpp
@@ -18,6 +18,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "Serializable.hpp"
 #include "begin_native.hpp"
diff --git a/clicache/src/StructSet.cpp b/clicache/src/StructSet.cpp
index ef134e89..47522239 100644
--- a/clicache/src/StructSet.cpp
+++ b/clicache/src/StructSet.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "geode_includes.hpp"
+
+
 #include "StructSet.hpp"
 #include "SelectResultsIterator.hpp"
 #include "ExceptionTypes.hpp"
@@ -97,13 +98,11 @@ namespace Apache
       generic<class TResult>
       size_t StructSet<TResult>::GetFieldIndex( String^ fieldName )
       {
-        ManagedString mg_fieldName( fieldName );
-
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
           try
           {
-            return m_nativeptr->get()->getFieldIndex( mg_fieldName.CharPtr );
+            return m_nativeptr->get()->getFieldIndex( marshal_as<std::string>(fieldName) );
           }
           finally
           {
@@ -118,7 +117,7 @@ namespace Apache
       {
         try
         {
-          return ManagedString::Get(m_nativeptr->get()->getFieldName(static_cast<System::Int32> (index)).c_str());
+          return marshal_as<String^>(m_nativeptr->get()->getFieldName(static_cast<System::Int32> (index)));
         }
         finally
         {
diff --git a/clicache/src/StructSet.hpp b/clicache/src/StructSet.hpp
index 7c649e9f..cbc586ab 100644
--- a/clicache/src/StructSet.hpp
+++ b/clicache/src/StructSet.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/StructSet.hpp>
diff --git a/clicache/src/SystemProperties.cpp b/clicache/src/SystemProperties.cpp
index 474c08ae..2609b165 100644
--- a/clicache/src/SystemProperties.cpp
+++ b/clicache/src/SystemProperties.cpp
@@ -15,10 +15,12 @@
  * limitations under the License.
  */
 
+
 #include "SystemProperties.hpp"
 #include "impl/SafeConvert.hpp"
 #include "TimeUtils.hpp"
 
+
 namespace Apache
 {
   namespace Geode
@@ -26,6 +28,7 @@ namespace Apache
     namespace Client
     {
       using namespace System;
+      using namespace msclr::interop;
 
       namespace native = apache::geode::client;
 
@@ -46,12 +49,12 @@ namespace Apache
 
       String^ SystemProperties::StatisticsArchiveFile::get( )
       {
-        return ManagedString::Get( m_nativeptr->statisticsArchiveFile( ) );
+        return marshal_as<String^>( m_nativeptr->statisticsArchiveFile( ) );
       }
 
       String^ SystemProperties::LogFileName::get( )
       {
-        return ManagedString::Get( m_nativeptr->logFilename( ) );
+        return marshal_as<String^>( m_nativeptr->logFilename( ) );
       }
 
       LogLevel SystemProperties::GFLogLevel::get( )
@@ -99,16 +102,6 @@ namespace Apache
         return TimeUtils::DurationToTimeSpan(m_nativeptr->notifyDupCheckLife( ));
       }
       
-      bool SystemProperties::DebugStackTraceEnabled::get( )
-      {
-        return m_nativeptr->debugStackTraceEnabled( );
-      }
-
-      bool SystemProperties::CrashDumpEnabled::get( )
-      {
-        return m_nativeptr->crashDumpEnabled();
-      }
-
       bool SystemProperties::AppDomainEnabled::get( )
       {
         return m_nativeptr->isAppDomainEnabled();
@@ -116,12 +109,12 @@ namespace Apache
 
       String^ SystemProperties::Name::get( )
       {
-        return ManagedString::Get( m_nativeptr->name( ) );
+        return marshal_as<String^>( m_nativeptr->name( ) );
       }
 
       String^ SystemProperties::CacheXmlFile::get( )
       {
-        return ManagedString::Get( m_nativeptr->cacheXMLFile( ) );
+        return marshal_as<String^>( m_nativeptr->cacheXMLFile( ) );
       }
 
       System::Int32 SystemProperties::LogFileSizeLimit::get( )
@@ -156,18 +149,18 @@ namespace Apache
 
       String^ SystemProperties::SSLKeyStore::get()
       {
-        return ManagedString::Get(m_nativeptr->sslKeyStore());
+        return marshal_as<String^>(m_nativeptr->sslKeyStore());
       }
 
       String^ SystemProperties::SSLTrustStore::get()
       {
-        return ManagedString::Get(m_nativeptr->sslTrustStore());
+        return marshal_as<String^>(m_nativeptr->sslTrustStore());
       }
       
       // adongre
       String^ SystemProperties::SSLKeystorePassword::get()
       {
-        return ManagedString::Get(m_nativeptr->sslKeystorePassword());
+        return marshal_as<String^>(m_nativeptr->sslKeystorePassword());
       }
 
 
@@ -178,7 +171,7 @@ namespace Apache
 
       String^ SystemProperties::DurableClientId::get( )
       {
-        return ManagedString::Get( m_nativeptr->durableClientId( ) );
+        return marshal_as<String^>( m_nativeptr->durableClientId( ) );
       }
 
       TimeSpan SystemProperties::DurableTimeout::get( )
@@ -193,7 +186,7 @@ namespace Apache
 
       String^ SystemProperties::ConflateEvents::get( )
       {
-        return ManagedString::Get( m_nativeptr->conflateEvents( ) );
+        return marshal_as<String^>( m_nativeptr->conflateEvents( ) );
       }
 
       TimeSpan SystemProperties::SuspendedTxTimeout::get( )
diff --git a/clicache/src/SystemProperties.hpp b/clicache/src/SystemProperties.hpp
index 672806f1..de826135 100644
--- a/clicache/src/SystemProperties.hpp
+++ b/clicache/src/SystemProperties.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/SystemProperties.hpp>
@@ -176,31 +177,6 @@ namespace Apache
           TimeSpan get();
         }
 
-        /// <summary>
-        /// True if the stack trace is enabled.
-        /// </summary>
-        /// <returns>true if enabled</returns>
-        property bool DebugStackTraceEnabled
-        {
-          bool get();
-        }
-
-        /// <summary>
-        /// True if the crash dump generation for unhandled fatal exceptions
-        /// is enabled. If "log-file" property has been specified then they are
-        /// created in the same directory as the log file, and having the same
-        /// prefix as log file. By default crash dumps are created in the
-        /// current working directory and have the "geode_cpp" prefix.
-        ///
-        /// The actual dump file will have timestamp and process ID
-        /// in the full name.
-        /// </summary>
-        /// <returns>true if enabled</returns>
-        property bool CrashDumpEnabled
-        {
-          bool get();
-        }
-
         /// <summary>
         /// Whether client is running in multiple AppDomain or not.
         /// Default value is "false".
diff --git a/clicache/src/TimeUtils.hpp b/clicache/src/TimeUtils.hpp
index 33e93b42..b6084c48 100644
--- a/clicache/src/TimeUtils.hpp
+++ b/clicache/src/TimeUtils.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "begin_native.hpp"
 #include <chrono>
 #include <geode/util/chrono/duration.hpp>
diff --git a/clicache/src/TransactionEvent.cpp b/clicache/src/TransactionEvent.cpp
index 6eefbb15..c2991aba 100644
--- a/clicache/src/TransactionEvent.cpp
+++ b/clicache/src/TransactionEvent.cpp
@@ -14,8 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #ifdef CSTX_COMMENTED
-//#include "geode_includes.hpp"
+
 #include "TransactionEvent.hpp"
 #include "Log.hpp"
 #include "impl/SafeConvert.hpp"
diff --git a/clicache/src/TransactionEvent.hpp b/clicache/src/TransactionEvent.hpp
index 80680c27..be60c572 100644
--- a/clicache/src/TransactionEvent.hpp
+++ b/clicache/src/TransactionEvent.hpp
@@ -18,6 +18,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include <cppcache/TransactionEvent.hpp>
 
diff --git a/clicache/src/TransactionId.hpp b/clicache/src/TransactionId.hpp
index 21cba465..9dc070ae 100644
--- a/clicache/src/TransactionId.hpp
+++ b/clicache/src/TransactionId.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "begin_native.hpp"
 #include <geode/TransactionId.hpp>
diff --git a/clicache/src/TransactionListenerAdapter.hpp b/clicache/src/TransactionListenerAdapter.hpp
index 7f1f86f6..b6cab716 100644
--- a/clicache/src/TransactionListenerAdapter.hpp
+++ b/clicache/src/TransactionListenerAdapter.hpp
@@ -17,6 +17,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ITransactionListener.hpp"
 
diff --git a/clicache/src/TransactionWriterAdapte.hpp b/clicache/src/TransactionWriterAdapte.hpp
index 04d41835..4e802a71 100644
--- a/clicache/src/TransactionWriterAdapte.hpp
+++ b/clicache/src/TransactionWriterAdapte.hpp
@@ -17,6 +17,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "geode_defs.hpp"
 #include "ITransactionWriter.hpp"
 
diff --git a/clicache/src/UserFunctionExecutionException.cpp b/clicache/src/UserFunctionExecutionException.cpp
index abf5faf3..e67a578b 100644
--- a/clicache/src/UserFunctionExecutionException.cpp
+++ b/clicache/src/UserFunctionExecutionException.cpp
@@ -16,6 +16,7 @@
  */
 
 
+
 #include "UserFunctionExecutionException.hpp"
 #include "CacheableString.hpp"
 
@@ -63,7 +64,7 @@ namespace Apache
         try
         {
           auto value = m_nativeptr->get()->getMessage();
-          return CacheableString::GetString(value.get());
+          return marshal_as<String^>(value->toString());
         }
         finally
         {
@@ -80,7 +81,7 @@ namespace Apache
         try
         {
           auto value = m_nativeptr->get()->getName();
-          return CacheableString::GetString(value.get());
+          return marshal_as<String^>(value->toString());
         }
         finally
         {
diff --git a/clicache/src/UserFunctionExecutionException.hpp b/clicache/src/UserFunctionExecutionException.hpp
index 90f58e27..c1dd6e7e 100644
--- a/clicache/src/UserFunctionExecutionException.hpp
+++ b/clicache/src/UserFunctionExecutionException.hpp
@@ -18,6 +18,7 @@
 
 #pragma once
 
+
 #include "geode_defs.hpp"
 
 #include "begin_native.hpp"
diff --git a/clicache/src/Utils.cpp b/clicache/src/Utils.cpp
index e293b520..8b54ccec 100644
--- a/clicache/src/Utils.cpp
+++ b/clicache/src/Utils.cpp
@@ -16,7 +16,7 @@
  */
 
 
-#include "gfcli/Utils.hpp"
+#include "Utils.hpp"
 #include "begin_native.hpp"
 #include <Utils.hpp>
 #include "end_native.hpp"
@@ -70,8 +70,9 @@ namespace Apache
     System::Int32 Utils::LastError::get( )
     {
        return apache::geode::client::Utils::getLastError( );
+    }
+
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
 
-}
diff --git a/clicache/include/gfcli/Utils.hpp b/clicache/src/Utils.hpp
similarity index 99%
rename from clicache/include/gfcli/Utils.hpp
rename to clicache/src/Utils.hpp
index 86808f76..b60bf28f 100644
--- a/clicache/include/gfcli/Utils.hpp
+++ b/clicache/src/Utils.hpp
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-
-
 #pragma once
 
+
 #include <geode/geode_base.hpp>
 #include "geode_defs.hpp"
 //#include "SystemProperties.hpp"
diff --git a/clicache/src/geode_includes.cpp b/clicache/src/geode_includes.cpp
new file mode 100644
index 00000000..d559f78b
--- /dev/null
+++ b/clicache/src/geode_includes.cpp
@@ -0,0 +1 @@
+#include "geode_includes.hpp"
\ No newline at end of file
diff --git a/clicache/src/geode_includes.hpp b/clicache/src/geode_includes.hpp
index 76362552..7f41dc54 100644
--- a/clicache/src/geode_includes.hpp
+++ b/clicache/src/geode_includes.hpp
@@ -15,12 +15,30 @@
  * limitations under the License.
  */
 
-// geode_includes.hpp : include file for standard system include files,
-// and all project specific include files.
-
 #pragma once
 
-//#include "impl/ManagedCacheableKeyGCHandle.hpp"
-#include "impl/SafeConvert.hpp"
+#include <winsock2.h>
+#include <vcclr.h>
+#include <msclr/marshal_cppstd.h>
+#include <msclr/lock.h>
 
 #include <string>
+#include <memory>
+#include <vector>
+
+// Include public headers from CPP Cache
+#include "begin_native.hpp"
+#include <geode/Cache.hpp>
+#include <geode/CacheableBuiltins.hpp>
+#include <geode/CacheLoader.hpp>
+#include <geode/CacheListener.hpp>
+#include <geode/FixedPartitionResolver.hpp>
+#include <geode/CacheWriter.hpp>
+#include <geode/GeodeTypeIds.hpp>
+#include "end_native.hpp"
+
+// Include private headers from CPP Cache
+#include "begin_native.hpp"
+#include <CacheImpl.hpp>
+#include <DistributedSystemImpl.hpp>
+#include "end_native.hpp"
diff --git a/clicache/src/impl/AppDomainContext.cpp b/clicache/src/impl/AppDomainContext.cpp
index 42d74031..f04c32e7 100644
--- a/clicache/src/impl/AppDomainContext.cpp
+++ b/clicache/src/impl/AppDomainContext.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "AppDomainContext.hpp"
 
 namespace Apache
@@ -26,8 +27,9 @@ namespace Apache
 
 apache::geode::client::AppDomainContext* createAppDomainContext() {
   return new AppDomainContext();
+}
+
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache
 
-}
diff --git a/clicache/src/impl/AppDomainContext.hpp b/clicache/src/impl/AppDomainContext.hpp
index cd6a00f9..0fd6581c 100644
--- a/clicache/src/impl/AppDomainContext.hpp
+++ b/clicache/src/impl/AppDomainContext.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include <functional>
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <AppDomainContext.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 namespace Apache
 {
diff --git a/clicache/src/impl/AuthenticatedCache.cpp b/clicache/src/impl/AuthenticatedCache.cpp
index 73bb0830..683dc6ae 100644
--- a/clicache/src/impl/AuthenticatedCache.cpp
+++ b/clicache/src/impl/AuthenticatedCache.cpp
@@ -16,10 +16,11 @@
  */
 
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include "CacheRegionHelper.hpp"
 #include "CacheImpl.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../Cache.hpp"
 #include "../DistributedSystem.hpp"
@@ -76,8 +77,7 @@ namespace Apache
 
           try
           {
-            ManagedString mg_path( path );
-            auto nativeptr = m_nativeptr->get()->getRegion( mg_path.CharPtr );
+            auto nativeptr = m_nativeptr->get()->getRegion( marshal_as<std::string>(path) );
             return Client::Region<TKey, TValue>::Create( nativeptr );
           }
           finally
diff --git a/clicache/src/impl/AuthenticatedCache.hpp b/clicache/src/impl/AuthenticatedCache.hpp
index 3be2a730..7f543ca7 100644
--- a/clicache/src/impl/AuthenticatedCache.hpp
+++ b/clicache/src/impl/AuthenticatedCache.hpp
@@ -17,10 +17,11 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/RegionService.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../native_shared_ptr.hpp"
 #include "../RegionShortcut.hpp"
diff --git a/clicache/src/impl/CacheListener.hpp b/clicache/src/impl/CacheListener.hpp
index a40a705f..2c8a7dab 100644
--- a/clicache/src/impl/CacheListener.hpp
+++ b/clicache/src/impl/CacheListener.hpp
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-//#include "../geode_includes.hpp"
+
 #include "../ICacheListener.hpp"
 #include "../CacheListenerAdapter.hpp"
 #include "../ICacheListener.hpp"
diff --git a/clicache/src/impl/CacheLoader.hpp b/clicache/src/impl/CacheLoader.hpp
index 8aacadfb..cc67a3e2 100644
--- a/clicache/src/impl/CacheLoader.hpp
+++ b/clicache/src/impl/CacheLoader.hpp
@@ -16,7 +16,8 @@
  */
 #pragma once
 
-//#include "../geode_includes.hpp"
+
+
 //#include "../../../ICacheLoader.hpp"
 #include "../ICacheLoader.hpp"
 //#include "../Serializable.hpp"
diff --git a/clicache/src/impl/CacheResolver.cpp b/clicache/src/impl/CacheResolver.cpp
index cd8692a4..710a899f 100644
--- a/clicache/src/impl/CacheResolver.cpp
+++ b/clicache/src/impl/CacheResolver.cpp
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include <geode/Cache.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
-#include "Cache.hpp"
+#include "../Cache.hpp"
 
 #include "CacheResolver.hpp"
 
diff --git a/clicache/src/impl/CacheResolver.hpp b/clicache/src/impl/CacheResolver.hpp
index b21d5916..5d3f1240 100644
--- a/clicache/src/impl/CacheResolver.hpp
+++ b/clicache/src/impl/CacheResolver.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 namespace Apache
 {
   namespace Geode
diff --git a/clicache/src/impl/CacheWriter.hpp b/clicache/src/impl/CacheWriter.hpp
index e5f238ab..149ed3b5 100644
--- a/clicache/src/impl/CacheWriter.hpp
+++ b/clicache/src/impl/CacheWriter.hpp
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-//#include "../geode_includes.hpp"
+
 //#include "../../../ICacheWriter.hpp"
 #include "../CacheWriterAdapter.hpp"
 #include "../ICacheWriter.hpp"
diff --git a/clicache/src/impl/CliCallbackDelgate.cpp b/clicache/src/impl/CliCallbackDelgate.cpp
index acb0c6c7..a8172540 100644
--- a/clicache/src/impl/CliCallbackDelgate.cpp
+++ b/clicache/src/impl/CliCallbackDelgate.cpp
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
+
 #include "CliCallbackDelgate.hpp"
 
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include "CacheRegionHelper.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../Cache.hpp"
 using namespace System;
diff --git a/clicache/src/impl/CliCallbackDelgate.hpp b/clicache/src/impl/CliCallbackDelgate.hpp
index 40296524..f9f2ccc2 100755
--- a/clicache/src/impl/CliCallbackDelgate.hpp
+++ b/clicache/src/impl/CliCallbackDelgate.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "../Serializable.hpp"
 #include "ManagedCacheableKey.hpp"
diff --git a/clicache/src/impl/CqListenerProxy.hpp b/clicache/src/impl/CqListenerProxy.hpp
index 86ae4624..85dfd277 100644
--- a/clicache/src/impl/CqListenerProxy.hpp
+++ b/clicache/src/impl/CqListenerProxy.hpp
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-//#include "../geode_includes.hpp"
+
 //#include "../../../ICqListener.hpp"
 //#include "../../../CqListener.hpp"
 #include "../ICqListener.hpp"
diff --git a/clicache/src/impl/CqStatusListenerProxy.hpp b/clicache/src/impl/CqStatusListenerProxy.hpp
index 4ddcb2ff..1b6c438b 100644
--- a/clicache/src/impl/CqStatusListenerProxy.hpp
+++ b/clicache/src/impl/CqStatusListenerProxy.hpp
@@ -16,6 +16,7 @@
  */
 #pragma once
 
+
 #include "../ICqStatusListener.hpp"
 #include "SafeConvert.hpp"
 
diff --git a/clicache/src/impl/DelegateWrapper.hpp b/clicache/src/impl/DelegateWrapper.hpp
index 14e3ec34..33c8d0b0 100644
--- a/clicache/src/impl/DelegateWrapper.hpp
+++ b/clicache/src/impl/DelegateWrapper.hpp
@@ -17,10 +17,11 @@
 
 #pragma once
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include "CacheImpl.hpp"
 #include "CacheRegionHelper.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../geode_defs.hpp"
 #include "../Serializable.hpp"
diff --git a/clicache/src/impl/DotNetTypes.hpp b/clicache/src/impl/DotNetTypes.hpp
index 61265e86..75d52453 100755
--- a/clicache/src/impl/DotNetTypes.hpp
+++ b/clicache/src/impl/DotNetTypes.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 namespace Apache
 {
   namespace Geode
diff --git a/clicache/src/impl/EnumInfo.cpp b/clicache/src/impl/EnumInfo.cpp
index a015cf74..0a7abeb9 100755
--- a/clicache/src/impl/EnumInfo.cpp
+++ b/clicache/src/impl/EnumInfo.cpp
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 
 #include "EnumInfo.hpp"
 #include "../DataOutput.hpp"
diff --git a/clicache/src/impl/EnumInfo.hpp b/clicache/src/impl/EnumInfo.hpp
index 6c55235a..b46dc6e4 100755
--- a/clicache/src/impl/EnumInfo.hpp
+++ b/clicache/src/impl/EnumInfo.hpp
@@ -16,6 +16,7 @@
  */
 
 #pragma once
+
 #include "../IGeodeSerializable.hpp"
 #include "../GeodeClassIds.hpp"
 using namespace System;
diff --git a/clicache/src/impl/FixedPartitionResolver.hpp b/clicache/src/impl/FixedPartitionResolver.hpp
index da6d870e..f9bf95ed 100644
--- a/clicache/src/impl/FixedPartitionResolver.hpp
+++ b/clicache/src/impl/FixedPartitionResolver.hpp
@@ -15,10 +15,13 @@
  * limitations under the License.
  */
 #pragma once
+
+#include <msclr/marshal_cppstd.h>
+
 #include "../IFixedPartitionResolver.hpp"
 #include "../Region.hpp"
-#include "ManagedString.hpp"
 #include "SafeConvert.hpp"
+#include "ManagedString.hpp"
 
 using namespace System;
 using namespace System::Collections::Generic;
@@ -30,13 +33,14 @@ namespace Apache
   {
     namespace Client
     {
+      using namespace msclr::interop;
 
       public interface class IFixedPartitionResolverProxy
       {
       public:
         std::shared_ptr<apache::geode::client::CacheableKey> getRoutingObject(const apache::geode::client::EntryEvent& ev);
-        const char * getName();
-        const char* getPartitionName(const apache::geode::client::EntryEvent& opDetails);       
+        const std::string& getName();
+        const std::string& getPartitionName(const apache::geode::client::EntryEvent& opDetails);       
       };
 
       generic<class TKey, class TValue>
@@ -63,13 +67,13 @@ namespace Apache
             return Serializable::GetUnmanagedValueGeneric<Object^>(groutingobject);
           }
 
-          virtual const char * getName()
+          virtual const std::string& getName()
           {
-            ManagedString mg_name(m_resolver->GetName());
-            return mg_name.CharPtr;
+            static const std::string name = marshal_as<std::string>(m_resolver->GetName());
+            return name;
           }
 
-          virtual const char* getPartitionName(const apache::geode::client::EntryEvent& opDetails)
+          virtual const std::string& getPartitionName(const apache::geode::client::EntryEvent& opDetails)
           {
             if (m_fixedResolver == nullptr)
             {
diff --git a/clicache/src/impl/GeodeDataInputStream.hpp b/clicache/src/impl/GeodeDataInputStream.hpp
index 8f3bb770..c75fb4b0 100644
--- a/clicache/src/impl/GeodeDataInputStream.hpp
+++ b/clicache/src/impl/GeodeDataInputStream.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "../DataInput.hpp"
 #include "../ExceptionTypes.hpp"
diff --git a/clicache/src/impl/GeodeDataOutputStream.hpp b/clicache/src/impl/GeodeDataOutputStream.hpp
index dc8fc497..6c7ed02e 100644
--- a/clicache/src/impl/GeodeDataOutputStream.hpp
+++ b/clicache/src/impl/GeodeDataOutputStream.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "../DataOutput.hpp"
 #include "../ExceptionTypes.hpp"
diff --git a/clicache/src/impl/GeodeNullStream.hpp b/clicache/src/impl/GeodeNullStream.hpp
index 12a87f9c..ae3cb068 100644
--- a/clicache/src/impl/GeodeNullStream.hpp
+++ b/clicache/src/impl/GeodeNullStream.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 
 using namespace System;
diff --git a/clicache/src/impl/ManagedAuthInitialize.cpp b/clicache/src/impl/ManagedAuthInitialize.cpp
index b7042eb6..bd4dc041 100644
--- a/clicache/src/impl/ManagedAuthInitialize.cpp
+++ b/clicache/src/impl/ManagedAuthInitialize.cpp
@@ -15,13 +15,14 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+#include <string>
+
 #include "ManagedAuthInitialize.hpp"
 #include "../IAuthInitialize.hpp"
-#include "ManagedString.hpp"
 #include "../ExceptionTypes.hpp"
-#include "Properties.hpp"
-#include <string>
+#include "../Properties.hpp"
+
 
 using namespace System;
 using namespace System::Text;
@@ -33,15 +34,15 @@ namespace apache
   {
     namespace client
     {
+      using namespace msclr::interop;
 
       std::shared_ptr<Properties> ManagedAuthInitializeGeneric::getCredentials(const std::shared_ptr<Properties>&
-                                                                 securityprops, const char* server)
+                                                                 securityprops, const std::string& server)
       {
         try {
           auto mprops = Apache::Geode::Client::Properties<String^, String^>::Create(securityprops);
-          String^ mg_server = Apache::Geode::Client::ManagedString::Get(server);
 
-          return m_getCredentials->Invoke(mprops, mg_server)->GetNative();
+          return m_getCredentials->Invoke(mprops, marshal_as<String^>(server))->GetNative();
         }
         catch (Apache::Geode::Client::GeodeException^ ex) {
           ex->ThrowNative();
diff --git a/clicache/src/impl/ManagedAuthInitialize.hpp b/clicache/src/impl/ManagedAuthInitialize.hpp
index 5457bec5..8467fbab 100644
--- a/clicache/src/impl/ManagedAuthInitialize.hpp
+++ b/clicache/src/impl/ManagedAuthInitialize.hpp
@@ -17,10 +17,11 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/AuthInitialize.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include <vcclr.h>
 #include "../IAuthInitialize.hpp"
@@ -57,26 +58,6 @@ namespace apache
             &Apache::Geode::Client::IAuthInitialize::Close);
         }
 
-        /// <summary>
-        /// Static function to create a <c>ManagedAuthInitialize</c> using given
-        /// managed assembly path and given factory function.
-        /// </summary>
-        /// <param name="assemblyPath">
-        /// The path of the managed assembly that contains the <c>IAuthInitialize</c>
-        /// factory function.
-        /// </param>
-        /// <param name="factoryFunctionName">
-        /// The name of the factory function of the managed class for creating
-        /// an object that implements <c>IAuthInitialize</c>.
-        /// This should be a static function of the format
-        /// {Namespace}.{Class Name}.{Method Name}.
-        /// </param>
-        /// <exception cref="IllegalArgumentException">
-        /// If the managed library cannot be loaded or the factory function fails.
-        /// </exception>
-        static AuthInitialize* create(const char* assemblyPath,
-          const char* factoryFunctionName);
-
         /// <summary>
         /// Called when the cache is going down
         /// </summary>
@@ -101,7 +82,7 @@ namespace apache
         /// </param>
         /// <param name="server">It is the ID of the endpoint
         /// </param>
-        virtual std::shared_ptr<Properties> getCredentials(const std::shared_ptr<Properties>& securityprops, const char* server);
+        virtual std::shared_ptr<Properties> getCredentials(const std::shared_ptr<Properties>& securityprops, const std::string& server);
 
         virtual ~ManagedAuthInitializeGeneric() { }
 
diff --git a/clicache/src/impl/ManagedCacheListener.cpp b/clicache/src/impl/ManagedCacheListener.cpp
index bc2b2e82..d126013b 100644
--- a/clicache/src/impl/ManagedCacheListener.cpp
+++ b/clicache/src/impl/ManagedCacheListener.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+
 #include "ManagedCacheListener.hpp"
 #include "../ICacheListener.hpp"
 #include "../EntryEvent.hpp"
@@ -207,11 +208,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCacheListenerGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw apache::geode::client::IllegalArgumentException(ex_str);
         }
         return NULL;
       }
diff --git a/clicache/src/impl/ManagedCacheListener.hpp b/clicache/src/impl/ManagedCacheListener.hpp
index f48ab078..565be462 100644
--- a/clicache/src/impl/ManagedCacheListener.hpp
+++ b/clicache/src/impl/ManagedCacheListener.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/CacheListener.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../ICacheListener.hpp"
 
diff --git a/clicache/src/impl/ManagedCacheLoader.cpp b/clicache/src/impl/ManagedCacheLoader.cpp
index e693a599..9d5ba28a 100644
--- a/clicache/src/impl/ManagedCacheLoader.cpp
+++ b/clicache/src/impl/ManagedCacheLoader.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 //#include "../gf_includesN.hpp"
 #include "ManagedCacheLoader.hpp"
 #include "../Region.hpp"
@@ -205,11 +206,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCacheLoaderGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
diff --git a/clicache/src/impl/ManagedCacheLoader.hpp b/clicache/src/impl/ManagedCacheLoader.hpp
index 74d1c188..57925a71 100644
--- a/clicache/src/impl/ManagedCacheLoader.hpp
+++ b/clicache/src/impl/ManagedCacheLoader.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/CacheLoader.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 
 #include "../ICacheLoader.hpp"
diff --git a/clicache/src/impl/ManagedCacheWriter.cpp b/clicache/src/impl/ManagedCacheWriter.cpp
index 8489c0f2..9a2b0c95 100644
--- a/clicache/src/impl/ManagedCacheWriter.cpp
+++ b/clicache/src/impl/ManagedCacheWriter.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+
 #include "ManagedCacheWriter.hpp"
 #include "../ICacheWriter.hpp"
 #include "../Region.hpp"
@@ -206,11 +207,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCacheWriterGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
diff --git a/clicache/src/impl/ManagedCacheWriter.hpp b/clicache/src/impl/ManagedCacheWriter.hpp
index 6570f0d7..13eff81a 100644
--- a/clicache/src/impl/ManagedCacheWriter.hpp
+++ b/clicache/src/impl/ManagedCacheWriter.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/CacheWriter.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../ICacheWriter.hpp"
 
diff --git a/clicache/src/impl/ManagedCacheableDelta.cpp b/clicache/src/impl/ManagedCacheableDelta.cpp
index 5c996510..189df107 100644
--- a/clicache/src/impl/ManagedCacheableDelta.cpp
+++ b/clicache/src/impl/ManagedCacheableDelta.cpp
@@ -15,9 +15,10 @@
  * limitations under the License.
  */
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include <GeodeTypeIdsImpl.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "ManagedCacheableDelta.hpp"
 #include "../DataInput.hpp"
@@ -155,7 +156,7 @@ namespace apache
         return 0;
       }
 
-      bool ManagedCacheableDeltaGeneric::hasDelta()
+      bool ManagedCacheableDeltaGeneric::hasDelta() const
       {
         return m_managedptr->HasDelta();
       }
@@ -197,7 +198,7 @@ namespace apache
         }
       }
 
-      std::shared_ptr<Delta> ManagedCacheableDeltaGeneric::clone()
+      std::shared_ptr<Delta> ManagedCacheableDeltaGeneric::clone() const
       {
         try {
           if (auto cloneable = dynamic_cast<ICloneable^>((
@@ -261,24 +262,6 @@ namespace apache
         throw gcnew System::NotSupportedException;
       }
 
-      size_t ManagedCacheableDeltaGeneric::logString(char* buffer, size_t maxLength) const
-      {
-        try {
-          if (maxLength > 0) {
-            String^ logstr = m_managedptr->GetType()->Name + '(' +
-              m_managedptr->ToString() + ')';
-            Apache::Geode::Client::ManagedString mg_str(logstr);
-            return snprintf(buffer, maxLength, "%s", mg_str.CharPtr);
-          }
-        }
-        catch (Apache::Geode::Client::GeodeException^ ex) {
-          ex->ThrowNative();
-        }
-        catch (System::Exception^ ex) {
-          Apache::Geode::Client::GeodeException::ThrowNative(ex);
-        }
-        return 0;
-      }
     }  // namespace client
   }  // namespace geode
 }  // namespace apache
diff --git a/clicache/src/impl/ManagedCacheableDelta.hpp b/clicache/src/impl/ManagedCacheableDelta.hpp
index 9fdc6571..2284ecd5 100644
--- a/clicache/src/impl/ManagedCacheableDelta.hpp
+++ b/clicache/src/impl/ManagedCacheableDelta.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/Delta.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../IGeodeDelta.hpp"
 #include "../IGeodeSerializable.hpp"
@@ -91,36 +92,36 @@ namespace apache
         /// <summary>
         /// serialize this object
         /// </summary>
-        virtual void toData(apache::geode::client::DataOutput& output) const;
+        virtual void toData(apache::geode::client::DataOutput& output) const override;
 
         /// <summary>
         /// deserialize this object, typical implementation should return
         /// the 'this' pointer.
         /// </summary>
-        virtual void fromData(apache::geode::client::DataInput& input);
+        virtual void fromData(apache::geode::client::DataInput& input) override;
 
-        virtual void toDelta(apache::geode::client::DataOutput& output) const;
+        virtual void toDelta(apache::geode::client::DataOutput& output) const override;
 
-        virtual void fromDelta(apache::geode::client::DataInput& input);
+        virtual void fromDelta(apache::geode::client::DataInput& input) override;
 
         /// <summary>
         /// return the size of this object in bytes
         /// </summary>
-        virtual System::UInt32 objectSize() const;
+        virtual System::UInt32 objectSize() const override;
 
         /// <summary>
         /// return the classId of the instance being serialized.
         /// This is used by deserialization to determine what instance
         /// type to create and deserialize into.
         /// </summary>
-        virtual System::Int32 classId() const;
+        virtual System::Int32 classId() const override;
 
         /// <summary>
         /// return the typeId of the instance being serialized.
         /// This is used by deserialization to determine what instance
         /// type to create and deserialize into.
         /// </summary>
-        virtual int8_t typeId() const;
+        virtual int8_t typeId() const override;
 
         /// <summary>
         /// return the Data Serialization Fixed ID type.
@@ -130,36 +131,27 @@ namespace apache
         /// Note that this should not be overridden by custom implementations
         /// and is reserved only for builtin types.
         /// </summary>
-        virtual int8_t DSFID() const;
+        virtual int8_t DSFID() const override;
 
-        virtual bool hasDelta();
+        virtual bool hasDelta() const override;
 
-        virtual std::shared_ptr<apache::geode::client::Delta> clone();
+        virtual std::shared_ptr<apache::geode::client::Delta> clone() const override;
 
         /// <summary>
         /// return the hashcode for this key.
         /// </summary>
-        virtual System::Int32 hashcode() const;
+        virtual System::Int32 hashcode() const override;
 
         /// <summary>
         /// return true if this key matches other CacheableKey
         /// </summary>
-        virtual bool operator == (const CacheableKey& other) const;
+        virtual bool operator == (const CacheableKey& other) const override;
 
         /// <summary>
         /// return true if this key matches other ManagedCacheableDeltaGeneric
         /// </summary>
         virtual bool operator == (const ManagedCacheableDeltaGeneric& other) const;
 
-        /// <summary>
-        /// Copy the string form of a key into a char* buffer for logging purposes.
-        /// implementations should only generate a string as long as maxLength chars,
-        /// and return the number of chars written. buffer is expected to be large 
-        /// enough to hold at least maxLength chars.
-        /// The default implementation renders the classname and instance address.
-        /// </summary>
-        virtual size_t logString(char* buffer, size_t maxLength) const;
-
         /// <summary>
         /// Returns the wrapped managed object reference.
         /// </summary>
diff --git a/clicache/src/impl/ManagedCacheableKey.cpp b/clicache/src/impl/ManagedCacheableKey.cpp
index 154522ab..4fc8b20c 100644
--- a/clicache/src/impl/ManagedCacheableKey.cpp
+++ b/clicache/src/impl/ManagedCacheableKey.cpp
@@ -15,9 +15,10 @@
  * limitations under the License.
  */
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include <GeodeTypeIdsImpl.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../ICacheableKey.hpp"
 #include "ManagedCacheableKey.hpp"
@@ -126,13 +127,10 @@ namespace apache
         return 0;
       }
 
-      std::shared_ptr<apache::geode::client::CacheableString> ManagedCacheableKeyGeneric::toString() const
+      std::string ManagedCacheableKeyGeneric::toString() const
       {
         try {
-          std::shared_ptr<apache::geode::client::CacheableString> cStr;
-          Apache::Geode::Client::CacheableString::GetCacheableString(
-            m_managedptr->ToString(), cStr);
-          return cStr;
+          return marshal_as<std::string>(m_managedptr->ToString());
         }
         catch (Apache::Geode::Client::GeodeException^ ex) {
           ex->ThrowNative();
@@ -203,25 +201,6 @@ namespace apache
         return 0;
       }
 
-      size_t ManagedCacheableKeyGeneric::logString(char* buffer, size_t maxLength) const
-      {
-        try {
-          if (maxLength > 0) {
-            String^ logstr = m_managedptr->GetType()->Name + '(' +
-              m_managedptr->ToString() + ')';
-            Apache::Geode::Client::ManagedString mg_str(logstr);
-            return snprintf(buffer, maxLength, "%s", mg_str.CharPtr);
-          }
-        }
-        catch (Apache::Geode::Client::GeodeException^ ex) {
-          ex->ThrowNative();
-        }
-        catch (System::Exception^ ex) {
-          Apache::Geode::Client::GeodeException::ThrowNative(ex);
-        }
-        return 0;
-      }
-
     }  // namespace client
   }  // namespace geode
 }  // namespace apache
diff --git a/clicache/src/impl/ManagedCacheableKey.hpp b/clicache/src/impl/ManagedCacheableKey.hpp
index a8d29e70..f9ca6347 100644
--- a/clicache/src/impl/ManagedCacheableKey.hpp
+++ b/clicache/src/impl/ManagedCacheableKey.hpp
@@ -17,12 +17,13 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/CacheableKey.hpp>
 #include <GeodeTypeIdsImpl.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../IGeodeSerializable.hpp"
 
@@ -83,33 +84,33 @@ namespace apache
         /// <summary>
         /// serialize this object
         /// </summary>
-        virtual void toData(apache::geode::client::DataOutput& output) const;
+        virtual void toData(apache::geode::client::DataOutput& output) const override;
 
         /// <summary>
         /// deserialize this object, typical implementation should return
         /// the 'this' pointer.
         /// </summary>
-        virtual void fromData(apache::geode::client::DataInput& input);
+        virtual void fromData(apache::geode::client::DataInput& input) override;
 
 
         /// <summary>
         /// return the size of this object in bytes
         /// </summary>
-        virtual System::UInt32 objectSize() const;
+        virtual System::UInt32 objectSize() const override;
 
         /// <summary>
         /// return the classId of the instance being serialized.
         /// This is used by deserialization to determine what instance
         /// type to create and deserialize into.
         /// </summary>
-        virtual System::Int32 classId() const;
+        virtual System::Int32 classId() const override;
 
         /// <summary>
         /// return the typeId of the instance being serialized.
         /// This is used by deserialization to determine what instance
         /// type to create and deserialize into.
         /// </summary>
-        virtual int8_t typeId() const;
+        virtual int8_t typeId() const override;
 
         /// <summary>
         /// return the Data Serialization Fixed ID type.
@@ -119,18 +120,18 @@ namespace apache
         /// Note that this should not be overridden by custom implementations
         /// and is reserved only for builtin types.
         /// </summary>
-        virtual int8_t DSFID() const;
+        virtual int8_t DSFID() const override;
 
         /// <summary>
         /// Display this object as 'string', which depends on the implementation in
         /// the managed class
         /// </summary>
-        virtual std::shared_ptr<apache::geode::client::CacheableString> toString() const;
+        virtual std::string toString() const override;
 
         /// <summary>
         /// return true if this key matches other CacheableKey
         /// </summary>
-        virtual bool operator == (const CacheableKey& other) const;
+        virtual bool operator == (const CacheableKey& other) const override;
         /// <summary>
         /// return true if this key matches other ManagedCacheableKey
         /// </summary>
@@ -139,16 +140,7 @@ namespace apache
         /// <summary>
         /// return the hashcode for this key.
         /// </summary>
-        virtual System::Int32 hashcode() const;
-
-        /// <summary>
-        /// Copy the string form of a key into a char* buffer for logging purposes.
-        /// implementations should only generate a string as long as maxLength chars,
-        /// and return the number of chars written. buffer is expected to be large 
-        /// enough to hold at least maxLength chars.
-        /// The default implementation renders the classname and instance address.
-        /// </summary>
-        virtual size_t logString(char* buffer, size_t maxLength) const;
+        virtual System::Int32 hashcode() const override;
 
         /// <summary>
         /// Returns the wrapped managed object reference.
diff --git a/clicache/src/impl/ManagedCqListener.cpp b/clicache/src/impl/ManagedCqListener.cpp
index 92678d85..d2604613 100644
--- a/clicache/src/impl/ManagedCqListener.cpp
+++ b/clicache/src/impl/ManagedCqListener.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+
 #include "ManagedCqListener.hpp"
 #include "../ICqListener.hpp"
 #include "../CqEvent.hpp"
@@ -132,11 +133,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqListener: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
@@ -152,11 +151,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqListener: Got an exception in"
-            "onEvent: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "onEvent: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
       }
 
@@ -175,11 +172,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqListener: Got an exception in"
-            "close: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "close: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
       }
 
diff --git a/clicache/src/impl/ManagedCqListener.hpp b/clicache/src/impl/ManagedCqListener.hpp
index f5a32675..05e49849 100644
--- a/clicache/src/impl/ManagedCqListener.hpp
+++ b/clicache/src/impl/ManagedCqListener.hpp
@@ -16,11 +16,12 @@
  */
 
 #pragma once
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/CqListener.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 //#include "../ICqListener.hpp"
 #include "../ICqListener.hpp"
diff --git a/clicache/src/impl/ManagedCqStatusListener.cpp b/clicache/src/impl/ManagedCqStatusListener.cpp
index 21c8473b..f3709de4 100644
--- a/clicache/src/impl/ManagedCqStatusListener.cpp
+++ b/clicache/src/impl/ManagedCqStatusListener.cpp
@@ -16,6 +16,7 @@
  */
 
 
+
 #include "ManagedCqStatusListener.hpp"
 #include "../ICqStatusListener.hpp"
 #include "../CqEvent.hpp"
@@ -130,11 +131,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqStatusListenerGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
@@ -150,11 +149,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqStatusListenerGeneric: Got an exception in"
-            "onEvent: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "onEvent: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
       }
 
@@ -173,11 +170,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqStatusListenerGeneric: Got an exception in"
-            "close: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "close: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
       }
 
@@ -190,11 +185,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqStatusListenerGeneric: Got an exception in"
-            "onCqDisconnected: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "onCqDisconnected: "+ marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
       }
 
@@ -207,11 +200,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedCqStatusListenerGeneric: Got an exception in"
-            "OnCqConnected: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "OnCqConnected: "+ marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
       }
 
diff --git a/clicache/src/impl/ManagedCqStatusListener.hpp b/clicache/src/impl/ManagedCqStatusListener.hpp
index 42a29880..2cb3d5cc 100644
--- a/clicache/src/impl/ManagedCqStatusListener.hpp
+++ b/clicache/src/impl/ManagedCqStatusListener.hpp
@@ -17,11 +17,12 @@
 
 
 #pragma once
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/CqStatusListener.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../ICqStatusListener.hpp"
 #include "CqStatusListenerProxy.hpp"
diff --git a/clicache/src/impl/ManagedFixedPartitionResolver.cpp b/clicache/src/impl/ManagedFixedPartitionResolver.cpp
index 54ece650..7d9a7dc2 100644
--- a/clicache/src/impl/ManagedFixedPartitionResolver.cpp
+++ b/clicache/src/impl/ManagedFixedPartitionResolver.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "ManagedFixedPartitionResolver.hpp"
 #include "../IFixedPartitionResolver.hpp"
 #include "../Region.hpp"
@@ -196,7 +197,7 @@ namespace apache
             ex_str += typeName.CharPtr;
             ex_str += "] in assembly: ";
             ex_str += assemblyPath;
-            throw IllegalArgumentException(ex_str.c_str());
+            throw IllegalArgumentException(ex_str);
           }
         }
         catch (const apache::geode::client::Exception&)
@@ -205,11 +206,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedFixedPartitionResolverGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: "+ marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
@@ -228,7 +227,7 @@ namespace apache
         return nullptr;
       }
 
-      const char* ManagedFixedPartitionResolverGeneric::getName()
+      const std::string& ManagedFixedPartitionResolverGeneric::getName()
       {
         try {
           return m_managedptr->getName();
@@ -242,7 +241,7 @@ namespace apache
         return NULL;
       }
 
-      const char* ManagedFixedPartitionResolverGeneric::getPartitionName(const EntryEvent& opDetails)
+      const std::string& ManagedFixedPartitionResolverGeneric::getPartitionName(const EntryEvent& opDetails)
       {
         try {
           return m_managedptr->getPartitionName(opDetails);
diff --git a/clicache/src/impl/ManagedFixedPartitionResolver.hpp b/clicache/src/impl/ManagedFixedPartitionResolver.hpp
index a7ed6144..d7eda67d 100644
--- a/clicache/src/impl/ManagedFixedPartitionResolver.hpp
+++ b/clicache/src/impl/ManagedFixedPartitionResolver.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/FixedPartitionResolver.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 
 #include "FixedPartitionResolver.hpp"
@@ -83,7 +84,7 @@ namespace apache {
         /// key the detail of the entry event.
         /// </param>
 
-        virtual std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& key);
+        virtual std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& key) override;
 
         /// <summary>
         /// Returns the name of the FixedPartitionResolver.
@@ -96,7 +97,7 @@ namespace apache {
         /// the name of the FixedPartitionResolver
         /// </returns>
         /// </remarks>
-        virtual const char* getName();
+        virtual const std::string& getName() override;
 
 
         /// <summary>
@@ -108,7 +109,7 @@ namespace apache {
         /// <returns>
         /// partition-name associated with node which allows mapping of given data to user defined partition.
         /// </returns>
-        virtual const char* getPartitionName(const EntryEvent& opDetails);
+        virtual const std::string& getPartitionName(const EntryEvent& opDetails) override;
 
 
         /// <summary>
diff --git a/clicache/src/impl/ManagedPartitionResolver.cpp b/clicache/src/impl/ManagedPartitionResolver.cpp
index f36a9d84..0900d4e0 100644
--- a/clicache/src/impl/ManagedPartitionResolver.cpp
+++ b/clicache/src/impl/ManagedPartitionResolver.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+
 #include "ManagedPartitionResolver.hpp"
 #include "../IPartitionResolver.hpp"
 #include "../Region.hpp"
@@ -209,11 +210,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedPartitionResolverGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
@@ -232,7 +231,7 @@ namespace apache
         return nullptr;
       }
 
-      const char* ManagedPartitionResolverGeneric::getName()
+      const std::string& ManagedPartitionResolverGeneric::getName() 
       {
         try {
           return m_managedptr->getName();
diff --git a/clicache/src/impl/ManagedPartitionResolver.hpp b/clicache/src/impl/ManagedPartitionResolver.hpp
index 3074e34b..cb5cbfad 100644
--- a/clicache/src/impl/ManagedPartitionResolver.hpp
+++ b/clicache/src/impl/ManagedPartitionResolver.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/PartitionResolver.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 
 #include "PartitionResolver.hpp"
@@ -85,7 +86,7 @@ namespace apache {
         /// key the detail of the entry event.
         /// </param>
 
-        virtual std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& key);
+        virtual std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& key) override;
 
         /// <summary>
         /// Returns the name of the PartitionResolver.
@@ -98,7 +99,7 @@ namespace apache {
         /// the name of the PartitionResolver
         /// </returns>
         /// </remarks>
-        virtual const char* getName();
+        virtual const std::string& getName() override;
 
 
         /// <summary>
diff --git a/clicache/src/impl/ManagedPersistenceManager.cpp b/clicache/src/impl/ManagedPersistenceManager.cpp
index 0b5932a4..e81f6bcc 100644
--- a/clicache/src/impl/ManagedPersistenceManager.cpp
+++ b/clicache/src/impl/ManagedPersistenceManager.cpp
@@ -16,8 +16,10 @@
  */
 
 
+
 #include "ManagedPersistenceManager.hpp"
 #include "../IPersistenceManager.hpp"
+#include "ManagedString.hpp"
 
 #include <string>
 
@@ -199,11 +201,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedPersistenceManagerGeneric: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw IllegalArgumentException(ex_str);
         }
         return NULL;
       }
diff --git a/clicache/src/impl/ManagedPersistenceManager.hpp b/clicache/src/impl/ManagedPersistenceManager.hpp
index 13d17269..ee234bd7 100644
--- a/clicache/src/impl/ManagedPersistenceManager.hpp
+++ b/clicache/src/impl/ManagedPersistenceManager.hpp
@@ -17,11 +17,12 @@
 
 
 #pragma once
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/PersistenceManager.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "PersistenceManagerProxy.hpp"
 
diff --git a/clicache/src/impl/ManagedResultCollector.cpp b/clicache/src/impl/ManagedResultCollector.cpp
index 8319b2a3..906bc189 100644
--- a/clicache/src/impl/ManagedResultCollector.cpp
+++ b/clicache/src/impl/ManagedResultCollector.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 //#include "../../geode_includes.hpp"
 //#include "../../../geode_includes.hpp"
 #include "ManagedResultCollector.hpp"
@@ -137,11 +138,9 @@ namespace apache
         }
         catch (System::Exception^ ex)
         {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedResultCollector: Got an exception while "
-            "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
-          throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
+            "loading managed library: " + marshal_as<std::string>(ex->ToString());
+          throw apache::geode::client::IllegalArgumentException(ex_str);
         }
         return NULL;
       }
@@ -156,11 +155,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedResultCollector: Got an exception in"
-            "addResult: ";
-          ex_str += mg_exStr.CharPtr;
-          throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
+            "addResult: " + marshal_as<std::string>(ex->ToString());
+          throw apache::geode::client::IllegalArgumentException(ex_str);
         }
       }
 
@@ -182,11 +179,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedResultCollector: Got an exception in"
-            "getResult: ";
-          ex_str += mg_exStr.CharPtr;
-          throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
+            "getResult: " + marshal_as<std::string>(ex->ToString());
+          throw apache::geode::client::IllegalArgumentException(ex_str);
         }
         return nullptr;
       }
@@ -199,11 +194,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedResultCollector: Got an exception in"
-            "endResults: ";
-          ex_str += mg_exStr.CharPtr;
-          throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
+            "endResults: " + marshal_as<std::string>(ex->ToString());
+          throw apache::geode::client::IllegalArgumentException(ex_str);
         }
       }
       void ManagedResultCollectorGeneric::clearResults()
@@ -215,11 +208,9 @@ namespace apache
           ex->ThrowNative();
         }
         catch (System::Exception^ ex) {
-          Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedResultCollector: Got an exception in"
-            "clearResults: ";
-          ex_str += mg_exStr.CharPtr;
-          throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
+            "clearResults: " + marshal_as<std::string>(ex->ToString());
+          throw apache::geode::client::IllegalArgumentException(ex_str);
         }
       }
     }  // namespace client
diff --git a/clicache/src/impl/ManagedResultCollector.hpp b/clicache/src/impl/ManagedResultCollector.hpp
index c2063975..383561b7 100644
--- a/clicache/src/impl/ManagedResultCollector.hpp
+++ b/clicache/src/impl/ManagedResultCollector.hpp
@@ -16,12 +16,13 @@
  */
 
 #pragma once
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <chrono>
 #include <geode/ResultCollector.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "ResultCollectorProxy.hpp"
 #include "SafeConvert.hpp"
diff --git a/clicache/src/impl/ManagedString.hpp b/clicache/src/impl/ManagedString.hpp
index ed67695d..60bd2a9c 100644
--- a/clicache/src/impl/ManagedString.hpp
+++ b/clicache/src/impl/ManagedString.hpp
@@ -19,6 +19,7 @@
 
 
 
+
 #include "../geode_defs.hpp"
 
 #ifdef _WIN32
@@ -36,7 +37,7 @@ namespace Apache
     namespace Client
     {
 
-    ref class ManagedString sealed
+    private ref class ManagedString sealed
     {
     private:
 
diff --git a/clicache/src/impl/ManagedTransactionListener.cpp b/clicache/src/impl/ManagedTransactionListener.cpp
index 7caa9735..3e68b58a 100644
--- a/clicache/src/impl/ManagedTransactionListener.cpp
+++ b/clicache/src/impl/ManagedTransactionListener.cpp
@@ -15,8 +15,9 @@
  * limitations under the License.
  */
 
+
 #ifdef CSTX_COMMENTED
-//#include "../geode_includes.hpp"
+
 #include "ManagedTransactionListener.hpp"
 //#include "../TransactionEvent.hpp"
 #include "../Log.hpp"
@@ -195,7 +196,7 @@ namespace apache
           Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedTransactionListenerGeneric: Got an exception while "
             "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
+          ex_str += marshal_as<std::string>(exStr);
           throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
         }
         return NULL;
diff --git a/clicache/src/impl/ManagedTransactionListener.hpp b/clicache/src/impl/ManagedTransactionListener.hpp
index 5767c92f..58ab25ff 100644
--- a/clicache/src/impl/ManagedTransactionListener.hpp
+++ b/clicache/src/impl/ManagedTransactionListener.hpp
@@ -17,6 +17,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
 #include <cppcache/TransactionListener.hpp>
diff --git a/clicache/src/impl/ManagedTransactionWriter.cpp b/clicache/src/impl/ManagedTransactionWriter.cpp
index 2ca7e251..16fb01b7 100644
--- a/clicache/src/impl/ManagedTransactionWriter.cpp
+++ b/clicache/src/impl/ManagedTransactionWriter.cpp
@@ -15,8 +15,9 @@
  * limitations under the License.
  */
 
+
 #ifdef CSTX_COMMENTED
-//#include "../geode_includes.hpp"
+
 #include "ManagedTransactionWriter.hpp"
 //#include "../TransactionEvent.hpp"
 #include "../Log.hpp"
@@ -196,7 +197,7 @@ namespace apache
           Apache::Geode::Client::ManagedString mg_exStr(ex->ToString());
           std::string ex_str = "ManagedTransactionWriterGeneric: Got an exception while "
             "loading managed library: ";
-          ex_str += mg_exStr.CharPtr;
+          ex_str += marshal_as<std::string>(exStr);
           throw apache::geode::client::IllegalArgumentException(ex_str.c_str());
         }
         return NULL;
diff --git a/clicache/src/impl/ManagedTransactionWriter.hpp b/clicache/src/impl/ManagedTransactionWriter.hpp
index f8db0228..8dfdab78 100644
--- a/clicache/src/impl/ManagedTransactionWriter.hpp
+++ b/clicache/src/impl/ManagedTransactionWriter.hpp
@@ -17,6 +17,7 @@
 #ifdef CSTX_COMMENTED
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
 #include <cppcache/TransactionWriter.hpp>
diff --git a/clicache/src/impl/ManagedVisitor.cpp b/clicache/src/impl/ManagedVisitor.cpp
index e619c6ff..668d32b0 100644
--- a/clicache/src/impl/ManagedVisitor.cpp
+++ b/clicache/src/impl/ManagedVisitor.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 //#include "../../../../geode_includes.hpp"
 #include "ManagedVisitor.hpp"
 #include "SafeConvert.hpp"
diff --git a/clicache/src/impl/ManagedVisitor.hpp b/clicache/src/impl/ManagedVisitor.hpp
index 98dd7cca..7dcf4a54 100644
--- a/clicache/src/impl/ManagedVisitor.hpp
+++ b/clicache/src/impl/ManagedVisitor.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include <vcclr.h>
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/Properties.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../Properties.hpp"
 
diff --git a/clicache/src/impl/MemoryPressureHandler.cpp b/clicache/src/impl/MemoryPressureHandler.cpp
index 080fa3ab..2b01c741 100644
--- a/clicache/src/impl/MemoryPressureHandler.cpp
+++ b/clicache/src/impl/MemoryPressureHandler.cpp
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-#include "../geode_includes.hpp"
+
+
 #include "MemoryPressureHandler.hpp"
 #include "windows.h"
 #include "psapi.h"
diff --git a/clicache/src/impl/MemoryPressureHandler.hpp b/clicache/src/impl/MemoryPressureHandler.hpp
index c8ac0e75..38ce4e09 100644
--- a/clicache/src/impl/MemoryPressureHandler.hpp
+++ b/clicache/src/impl/MemoryPressureHandler.hpp
@@ -17,10 +17,11 @@
 
 #pragma once
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include <geode/geode_globals.hpp>
 #include <ExpiryTaskManager.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 namespace Apache
 {
diff --git a/clicache/src/impl/PartitionResolver.hpp b/clicache/src/impl/PartitionResolver.hpp
index aaec4d33..936bdcac 100644
--- a/clicache/src/impl/PartitionResolver.hpp
+++ b/clicache/src/impl/PartitionResolver.hpp
@@ -14,16 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #pragma once
 
-//#include "../geode_includes.hpp"
-//#include "../../../IPartitionResolver.hpp"
+
 #include "../IPartitionResolver.hpp"
 #include "../Region.hpp"
 #include "SafeConvert.hpp"
-#include "ManagedString.hpp"
-//#include "../../../Region.hpp"
-//#include "../../../Cache.hpp"
 
 using namespace System;
 
@@ -38,7 +35,7 @@ namespace Apache
       {
       public:
         std::shared_ptr<apache::geode::client::CacheableKey> getRoutingObject(const apache::geode::client::EntryEvent& ev);
-        const char * getName();
+        const std::string& getName();
       };
 
       generic<class TKey, class TValue>
@@ -62,10 +59,10 @@ namespace Apache
             return Serializable::GetUnmanagedValueGeneric<Object^>(groutingobject);
           }
 
-          virtual const char * getName()
+          virtual const std::string& getName()
           {
-            ManagedString mg_name(m_resolver->GetName());
-            return mg_name.CharPtr;
+            static const std::string name = marshal_as<std::string>(m_resolver->GetName());
+            return name;
           }
       };
     }  // namespace Client
diff --git a/clicache/src/impl/PdxFieldType.cpp b/clicache/src/impl/PdxFieldType.cpp
index dcf9317b..7d9505a0 100644
--- a/clicache/src/impl/PdxFieldType.cpp
+++ b/clicache/src/impl/PdxFieldType.cpp
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 #include "PdxFieldType.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/GeodeTypeIds.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 
 using namespace System;
diff --git a/clicache/src/impl/PdxFieldType.hpp b/clicache/src/impl/PdxFieldType.hpp
index cfc8ce4e..d820c89c 100644
--- a/clicache/src/impl/PdxFieldType.hpp
+++ b/clicache/src/impl/PdxFieldType.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 using namespace System;
 #include "../DataOutput.hpp"
 #include "../DataInput.hpp"
diff --git a/clicache/src/impl/PdxHelper.cpp b/clicache/src/impl/PdxHelper.cpp
index ec4fe627..ba604a24 100644
--- a/clicache/src/impl/PdxHelper.cpp
+++ b/clicache/src/impl/PdxHelper.cpp
@@ -15,13 +15,15 @@
  * limitations under the License.
  */
 
-#pragma once
 
-#include "begin_native.hpp"
+
+
+
+#include "../begin_native.hpp"
 #include <CacheImpl.hpp>
 #include <CacheRegionHelper.hpp>
 #include <geode/Cache.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "PdxHelper.hpp"
 #include "PdxTypeRegistry.hpp"
@@ -33,7 +35,7 @@
 #include "PdxWrapper.hpp"
 #include "../Log.hpp"
 #include "PdxInstanceImpl.hpp"
-#include "Cache.hpp"
+#include "../Cache.hpp"
 
 using namespace System;
 
diff --git a/clicache/src/impl/PdxHelper.hpp b/clicache/src/impl/PdxHelper.hpp
index a7a9c170..4a47305c 100644
--- a/clicache/src/impl/PdxHelper.hpp
+++ b/clicache/src/impl/PdxHelper.hpp
@@ -16,11 +16,12 @@
  */
 
 #pragma once
+
 //#include "../DataOutput.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/DataOutput.hpp>
 #include "SerializationRegistry.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../IPdxSerializable.hpp"
 using namespace System;
diff --git a/clicache/src/impl/PdxInstanceFactoryImpl.cpp b/clicache/src/impl/PdxInstanceFactoryImpl.cpp
index fa97d3f6..ea90fbb9 100644
--- a/clicache/src/impl/PdxInstanceFactoryImpl.cpp
+++ b/clicache/src/impl/PdxInstanceFactoryImpl.cpp
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 
 #include "PdxInstanceFactoryImpl.hpp"
 #include "PdxInstanceImpl.hpp"
diff --git a/clicache/src/impl/PdxInstanceFactoryImpl.hpp b/clicache/src/impl/PdxInstanceFactoryImpl.hpp
index 20ba3376..b13da572 100644
--- a/clicache/src/impl/PdxInstanceFactoryImpl.hpp
+++ b/clicache/src/impl/PdxInstanceFactoryImpl.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../IPdxInstanceFactory.hpp"
 #include "../IPdxSerializable.hpp"
 #include "../DataInput.hpp"
diff --git a/clicache/src/impl/PdxInstanceImpl.cpp b/clicache/src/impl/PdxInstanceImpl.cpp
index 3fbbf300..a801e9b3 100755
--- a/clicache/src/impl/PdxInstanceImpl.cpp
+++ b/clicache/src/impl/PdxInstanceImpl.cpp
@@ -15,14 +15,16 @@
  * limitations under the License.
  */
 
-#pragma once
 
-#include "begin_native.hpp"
+
+
+
+#include "../begin_native.hpp"
 #include <geode/Cache.hpp>
 #include <CacheRegionHelper.hpp>
 #include <CacheImpl.hpp>
 #include <CachePerfStats.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "PdxInstanceImpl.hpp"
 #include "PdxHelper.hpp"
@@ -33,7 +35,7 @@
 #include "../DataInput.hpp"
 #include "DotNetTypes.hpp"
 #include "PdxType.hpp"
-#include "Cache.hpp"
+#include "../Cache.hpp"
 
 namespace Apache
 {
diff --git a/clicache/src/impl/PdxInstanceImpl.hpp b/clicache/src/impl/PdxInstanceImpl.hpp
index a8c7610d..bcfbb31c 100755
--- a/clicache/src/impl/PdxInstanceImpl.hpp
+++ b/clicache/src/impl/PdxInstanceImpl.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../IPdxInstance.hpp"
 #include "../IPdxSerializable.hpp"
 #include "../DataInput.hpp"
 #include "PdxLocalWriter.hpp"
-#include "IWritablePdxInstance.hpp"
+#include "../IWritablePdxInstance.hpp"
 
 namespace apache {
 namespace geode {
diff --git a/clicache/src/impl/PdxLocalReader.cpp b/clicache/src/impl/PdxLocalReader.cpp
index 5046d886..e9773dec 100644
--- a/clicache/src/impl/PdxLocalReader.cpp
+++ b/clicache/src/impl/PdxLocalReader.cpp
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
+
 #include "PdxLocalReader.hpp"
 #include "PdxTypeRegistry.hpp"
 #include "../DataInput.hpp"
 #include "DotNetTypes.hpp"
-#include "Cache.hpp"
+#include "../Cache.hpp"
 
 using namespace System;
 
diff --git a/clicache/src/impl/PdxLocalReader.hpp b/clicache/src/impl/PdxLocalReader.hpp
index 78eafcd1..ae6830d0 100644
--- a/clicache/src/impl/PdxLocalReader.hpp
+++ b/clicache/src/impl/PdxLocalReader.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "../IPdxReader.hpp"
 #include "PdxType.hpp"
diff --git a/clicache/src/impl/PdxLocalWriter.cpp b/clicache/src/impl/PdxLocalWriter.cpp
index 2f874375..eb305d97 100644
--- a/clicache/src/impl/PdxLocalWriter.cpp
+++ b/clicache/src/impl/PdxLocalWriter.cpp
@@ -15,12 +15,13 @@
  * limitations under the License.
  */
 
+
 #include "PdxLocalWriter.hpp"
 #include "PdxHelper.hpp"
 #include "PdxTypeRegistry.hpp"
 #include "../DataOutput.hpp"
 #include "DotNetTypes.hpp"
-#include "Cache.hpp"
+#include "../Cache.hpp"
 
 using namespace System;
 
diff --git a/clicache/src/impl/PdxLocalWriter.hpp b/clicache/src/impl/PdxLocalWriter.hpp
index 5c9bc16c..2b6bc006 100644
--- a/clicache/src/impl/PdxLocalWriter.hpp
+++ b/clicache/src/impl/PdxLocalWriter.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "../IPdxWriter.hpp"
 #include "PdxType.hpp"
diff --git a/clicache/src/impl/PdxManagedCacheableKey.cpp b/clicache/src/impl/PdxManagedCacheableKey.cpp
index a1f0b51f..015b0d48 100644
--- a/clicache/src/impl/PdxManagedCacheableKey.cpp
+++ b/clicache/src/impl/PdxManagedCacheableKey.cpp
@@ -16,24 +16,25 @@
  * limitations under the License.
  */
 
-#pragma once
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include <GeodeTypeIdsImpl.hpp>
 #include "CacheRegionHelper.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "PdxManagedCacheableKey.hpp"
 #include "../DataInput.hpp"
 #include "../DataOutput.hpp"
 #include "../CacheableString.hpp"
 #include "../ExceptionTypes.hpp"
-#include "ManagedString.hpp"
 #include "PdxHelper.hpp"
 #include "SafeConvert.hpp"
 #include "CacheResolver.hpp"
 
+
 using namespace System;
+using namespace msclr::interop;
 
 namespace apache
 {
@@ -147,13 +148,10 @@ namespace apache
         return 0;
       }
 
-      std::shared_ptr<apache::geode::client::CacheableString> PdxManagedCacheableKey::toString() const
+      std::string PdxManagedCacheableKey::toString() const
       {
         try {
-          std::shared_ptr<apache::geode::client::CacheableString> cStr;
-          Apache::Geode::Client::CacheableString::GetCacheableString(
-            m_managedptr->ToString(), cStr);
-          return cStr;
+          return marshal_as<std::string>(m_managedptr->ToString());
         }
         catch (Apache::Geode::Client::GeodeException^ ex) {
           ex->ThrowNative();
@@ -161,7 +159,7 @@ namespace apache
         catch (System::Exception^ ex) {
           Apache::Geode::Client::GeodeException::ThrowNative(ex);
         }
-        return nullptr;
+        return "";
       }
 
       bool PdxManagedCacheableKey::operator ==(const apache::geode::client::CacheableKey& other) const
@@ -225,8 +223,7 @@ namespace apache
           if (maxLength > 0) {
             String^ logstr = m_managedptr->GetType()->Name + '(' +
               m_managedptr->ToString() + ')';
-            Apache::Geode::Client::ManagedString mg_str(logstr);
-            return snprintf(buffer, maxLength, "%s", mg_str.CharPtr);
+            return snprintf(buffer, maxLength, "%s", marshal_as<std::string>(logstr).c_str());
           }
         }
         catch (Apache::Geode::Client::GeodeException^ ex) {
@@ -238,7 +235,7 @@ namespace apache
         return 0;
       }
 
-      bool PdxManagedCacheableKey::hasDelta()
+      bool PdxManagedCacheableKey::hasDelta() const
       {
         if (m_managedDeltaptr)
         {
@@ -284,7 +281,7 @@ namespace apache
         }
       }
 
-      std::shared_ptr<Delta> PdxManagedCacheableKey::clone()
+      std::shared_ptr<Delta> PdxManagedCacheableKey::clone() const
       {
         try {
           if (auto cloneable = dynamic_cast<ICloneable^>((Apache::Geode::Client::IGeodeDelta^) m_managedDeltaptr)) {
diff --git a/clicache/src/impl/PdxManagedCacheableKey.hpp b/clicache/src/impl/PdxManagedCacheableKey.hpp
index 1ec73660..d640f906 100644
--- a/clicache/src/impl/PdxManagedCacheableKey.hpp
+++ b/clicache/src/impl/PdxManagedCacheableKey.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include <geode/CacheableKey.hpp>
 #include <geode/Delta.hpp>
 #include <GeodeTypeIdsImpl.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../geode_defs.hpp"
 #include <vcclr.h>
@@ -91,40 +92,40 @@ namespace apache
         /// <summary>
         /// serialize this object
         /// </summary>
-        virtual void toData(apache::geode::client::DataOutput& output) const;
+        virtual void toData(apache::geode::client::DataOutput& output) const override;
 
         /// <summary>
         /// deserialize this object, typical implementation should return
         /// the 'this' pointer.
         /// </summary>
-        virtual void fromData(apache::geode::client::DataInput& input);
+        virtual void fromData(apache::geode::client::DataInput& input) override;
 
-        virtual void toDelta(apache::geode::client::DataOutput& output) const;
+        virtual void toDelta(apache::geode::client::DataOutput& output) const override;
 
-        virtual void fromDelta(apache::geode::client::DataInput& input);
+        virtual void fromDelta(apache::geode::client::DataInput& input) override;
 
-        virtual bool hasDelta();
+        virtual bool hasDelta() const override;
 
-        virtual std::shared_ptr<apache::geode::client::Delta> clone();
+        virtual std::shared_ptr<apache::geode::client::Delta> clone() const override;
 
         /// <summary>
         /// return the size of this object in bytes
         /// </summary>
-        virtual System::UInt32 objectSize() const;
+        virtual System::UInt32 objectSize() const override;
 
         /// <summary>
         /// return the classId of the instance being serialized.
         /// This is used by deserialization to determine what instance
         /// type to create and deserialize into.
         /// </summary>
-        virtual System::Int32 classId() const;
+        virtual System::Int32 classId() const override;
 
         /// <summary>
         /// return the typeId of the instance being serialized.
         /// This is used by deserialization to determine what instance
         /// type to create and deserialize into.
         /// </summary>
-        virtual int8_t typeId() const;
+        virtual int8_t typeId() const override;
 
         /// <summary>
         /// return the Data Serialization Fixed ID type.
@@ -134,13 +135,13 @@ namespace apache
         /// Note that this should not be overridden by custom implementations
         /// and is reserved only for builtin types.
         /// </summary>
-        virtual int8_t DSFID() const;
+        virtual int8_t DSFID() const override;
 
         /// <summary>
         /// Display this object as 'string', which depends on the implementation in
         /// the managed class
         /// </summary>
-        virtual std::shared_ptr<apache::geode::client::CacheableString> toString() const;
+        virtual std::string toString() const override;
 
         /// <summary>
         /// return true if this key matches other CacheableKey
diff --git a/clicache/src/impl/PdxReaderWithTypeCollector.cpp b/clicache/src/impl/PdxReaderWithTypeCollector.cpp
index b6107a54..57d34fca 100644
--- a/clicache/src/impl/PdxReaderWithTypeCollector.cpp
+++ b/clicache/src/impl/PdxReaderWithTypeCollector.cpp
@@ -15,10 +15,11 @@
  * limitations under the License.
  */
 
+
 #include "PdxReaderWithTypeCollector.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/GeodeTypeIds.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../GeodeClassIds.hpp"
 using namespace System;
diff --git a/clicache/src/impl/PdxReaderWithTypeCollector.hpp b/clicache/src/impl/PdxReaderWithTypeCollector.hpp
index 8df1219f..5a23eb2e 100644
--- a/clicache/src/impl/PdxReaderWithTypeCollector.hpp
+++ b/clicache/src/impl/PdxReaderWithTypeCollector.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "PdxLocalReader.hpp"
 
diff --git a/clicache/src/impl/PdxRemotePreservedData.hpp b/clicache/src/impl/PdxRemotePreservedData.hpp
index d2fa725b..691fe4c8 100644
--- a/clicache/src/impl/PdxRemotePreservedData.hpp
+++ b/clicache/src/impl/PdxRemotePreservedData.hpp
@@ -16,6 +16,7 @@
  */
 
 #pragma once
+
 #include "../IPdxUnreadFields.hpp"
 
 using namespace System;
diff --git a/clicache/src/impl/PdxRemoteReader.cpp b/clicache/src/impl/PdxRemoteReader.cpp
index 297fddbd..5588e545 100644
--- a/clicache/src/impl/PdxRemoteReader.cpp
+++ b/clicache/src/impl/PdxRemoteReader.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "PdxRemoteReader.hpp"
 #include "../Log.hpp"
 using namespace System;
diff --git a/clicache/src/impl/PdxRemoteReader.hpp b/clicache/src/impl/PdxRemoteReader.hpp
index 86e4a9df..900b5963 100644
--- a/clicache/src/impl/PdxRemoteReader.hpp
+++ b/clicache/src/impl/PdxRemoteReader.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "PdxLocalReader.hpp"
 
diff --git a/clicache/src/impl/PdxRemoteWriter.cpp b/clicache/src/impl/PdxRemoteWriter.cpp
index b9ccb6ca..4b089407 100644
--- a/clicache/src/impl/PdxRemoteWriter.cpp
+++ b/clicache/src/impl/PdxRemoteWriter.cpp
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+
 #include "PdxRemoteWriter.hpp"
 #include "PdxTypeRegistry.hpp"
 using namespace System;
diff --git a/clicache/src/impl/PdxRemoteWriter.hpp b/clicache/src/impl/PdxRemoteWriter.hpp
index b47335f4..88cbf396 100644
--- a/clicache/src/impl/PdxRemoteWriter.hpp
+++ b/clicache/src/impl/PdxRemoteWriter.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "PdxLocalWriter.hpp"
 
diff --git a/clicache/src/impl/PdxType.cpp b/clicache/src/impl/PdxType.cpp
index dbff9ee7..64641fbd 100644
--- a/clicache/src/impl/PdxType.cpp
+++ b/clicache/src/impl/PdxType.cpp
@@ -15,7 +15,9 @@
  * limitations under the License.
  */
 
-#pragma once
+
+
+
 
 #include "PdxType.hpp"
 #include "PdxHelper.hpp"
@@ -23,7 +25,7 @@
 #include "../Log.hpp"
 #include <msclr/lock.h>
 #include "PdxWrapper.hpp"
-#include "Cache.hpp"
+#include "../Cache.hpp"
 using namespace System;
 
 namespace Apache
diff --git a/clicache/src/impl/PdxType.hpp b/clicache/src/impl/PdxType.hpp
index 6b5a6bda..71d59c0b 100644
--- a/clicache/src/impl/PdxType.hpp
+++ b/clicache/src/impl/PdxType.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "PdxFieldType.hpp"
 //#include "../DataOutput.hpp"
 //#include "../DataInput.hpp"
diff --git a/clicache/src/impl/PdxTypeRegistry.cpp b/clicache/src/impl/PdxTypeRegistry.cpp
index 98ce7c43..0763f3ae 100644
--- a/clicache/src/impl/PdxTypeRegistry.cpp
+++ b/clicache/src/impl/PdxTypeRegistry.cpp
@@ -15,16 +15,17 @@
  * limitations under the License.
  */
 
-#pragma once
 
-#include "begin_native.hpp"
+
+
+#include "../begin_native.hpp"
 #include <geode/Cache.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "PdxTypeRegistry.hpp"
 #include "../Serializable.hpp"
 #include "PdxWrapper.hpp"
-#include "Cache.hpp"
+#include "../Cache.hpp"
 
 using namespace System;
 
@@ -47,7 +48,7 @@ namespace Apache
 					return preserveData->Count;
 				}
 
-        Int32 PdxTypeRegistry::GetPDXIdForType(Type^ pdxType, const char* poolname, PdxType^ nType, bool checkIfThere)
+        Int32 PdxTypeRegistry::GetPDXIdForType(Type^ pdxType, String^ poolname, PdxType^ nType, bool checkIfThere)
         {
           if(checkIfThere)
           {
@@ -78,7 +79,7 @@ namespace Apache
             
         }
 
-        Int32 PdxTypeRegistry::GetPDXIdForType(PdxType^ pType, const char* poolname)
+        Int32 PdxTypeRegistry::GetPDXIdForType(PdxType^ pType, String^ poolname)
         {
           IDictionary<PdxType^, Int32>^ tmp = pdxTypeToTypeId;
           Int32 typeId = 0;
diff --git a/clicache/src/impl/PdxTypeRegistry.hpp b/clicache/src/impl/PdxTypeRegistry.hpp
index aae74747..7c3846c2 100644
--- a/clicache/src/impl/PdxTypeRegistry.hpp
+++ b/clicache/src/impl/PdxTypeRegistry.hpp
@@ -16,9 +16,10 @@
  */
 
 #pragma once
-#include "begin_native.hpp"
+
+#include "../begin_native.hpp"
 #include "SerializationRegistry.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 #include "PdxType.hpp"
 #include "PdxRemotePreservedData.hpp"
 #include "../IPdxSerializable.hpp"
@@ -67,9 +68,9 @@ namespace Apache
 
            void clear();
 
-            Int32 GetPDXIdForType(Type^ type, const char* poolname, PdxType^ nType, bool checkIfThere);
+            Int32 GetPDXIdForType(Type^ type, String^ poolname, PdxType^ nType, bool checkIfThere);
 
-            Int32 GetPDXIdForType(PdxType^ type, const char* poolname);
+            Int32 GetPDXIdForType(PdxType^ type, String^ poolname);
 
             Int32 GetEnumValue(EnumInfo^ ei);
 
diff --git a/clicache/src/impl/PdxWrapper.hpp b/clicache/src/impl/PdxWrapper.hpp
index 5be917a5..135cedcc 100755
--- a/clicache/src/impl/PdxWrapper.hpp
+++ b/clicache/src/impl/PdxWrapper.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../IPdxWriter.hpp"
 #include "../IPdxReader.hpp"
 #include "../IPdxSerializer.hpp"
diff --git a/clicache/src/impl/PdxWriterWithTypeCollector.cpp b/clicache/src/impl/PdxWriterWithTypeCollector.cpp
index d95dbf56..6b0264a8 100644
--- a/clicache/src/impl/PdxWriterWithTypeCollector.cpp
+++ b/clicache/src/impl/PdxWriterWithTypeCollector.cpp
@@ -15,11 +15,12 @@
  * limitations under the License.
  */
 
+
 #include "PdxWriterWithTypeCollector.hpp"
 #include "../DataOutput.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/GeodeTypeIds.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "../GeodeClassIds.hpp"
 #include "PdxHelper.hpp"
diff --git a/clicache/src/impl/PdxWriterWithTypeCollector.hpp b/clicache/src/impl/PdxWriterWithTypeCollector.hpp
index e8d4ccb5..c6140d8f 100644
--- a/clicache/src/impl/PdxWriterWithTypeCollector.hpp
+++ b/clicache/src/impl/PdxWriterWithTypeCollector.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "PdxLocalWriter.hpp"
 #include "PdxType.hpp"
diff --git a/clicache/src/impl/PersistenceManagerProxy.hpp b/clicache/src/impl/PersistenceManagerProxy.hpp
index d98f78da..e633e038 100644
--- a/clicache/src/impl/PersistenceManagerProxy.hpp
+++ b/clicache/src/impl/PersistenceManagerProxy.hpp
@@ -16,13 +16,14 @@
  */
 #pragma once
 
+
 #include "../IPersistenceManager.hpp"
 #include "SafeConvert.hpp"
 #include "../Region.hpp"
 #include "../Properties.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <memory>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 using namespace System;
 namespace Apache
 {
diff --git a/clicache/src/impl/RegionImpl.cpp b/clicache/src/impl/RegionImpl.cpp
index 81984290..5f059430 100644
--- a/clicache/src/impl/RegionImpl.cpp
+++ b/clicache/src/impl/RegionImpl.cpp
@@ -15,4 +15,5 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+
diff --git a/clicache/src/impl/RegionImpl.hpp b/clicache/src/impl/RegionImpl.hpp
index 81d6ddaf..0443989b 100644
--- a/clicache/src/impl/RegionImpl.hpp
+++ b/clicache/src/impl/RegionImpl.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 #include "../../../IRegion.hpp"
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include <geode/Cache.hpp>
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 
 //#include "CacheableHashMap.hpp"
diff --git a/clicache/src/impl/SafeConvert.hpp b/clicache/src/impl/SafeConvert.hpp
index 0b72dacd..7fa2b36f 100644
--- a/clicache/src/impl/SafeConvert.hpp
+++ b/clicache/src/impl/SafeConvert.hpp
@@ -17,11 +17,12 @@
 
 #pragma once
 
+
 #include "../geode_defs.hpp"
 
-#include "begin_native.hpp"
+#include "../begin_native.hpp"
 #include "CacheImpl.hpp"
-#include "end_native.hpp"
+#include "../end_native.hpp"
 
 #include "ManagedCacheableKey.hpp"
 #include "ManagedCacheableDelta.hpp"
diff --git a/clicache/src/impl/TransactionListener.hpp b/clicache/src/impl/TransactionListener.hpp
index 6791a16e..d5690d2c 100644
--- a/clicache/src/impl/TransactionListener.hpp
+++ b/clicache/src/impl/TransactionListener.hpp
@@ -15,11 +15,13 @@
  * limitations under the License.
  */
 #ifdef CSTX_COMMENTED
-#pragma once 
+#pragma once
+
+#include "geode_includes.hpp" 
+
 
 
 
-//#include "../geode_includes.hpp"
 #include "../TransactionListenerAdapter.hpp"
 #include "../ITransactionListener.hpp"
 #include "../TransactionEvent.hpp"
diff --git a/clicache/src/impl/TransactionWriter.hpp b/clicache/src/impl/TransactionWriter.hpp
index 2e5cae4e..2d109f4e 100644
--- a/clicache/src/impl/TransactionWriter.hpp
+++ b/clicache/src/impl/TransactionWriter.hpp
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 #ifdef CSTX_COMMENTED
-#pragma once 
+#pragma once
+
 
 
-//#include "../geode_includes.hpp"
 #include "../TransactionWriterAdapter.hpp"
 #include "../ITransactionWriter.hpp"
 #include "SafeConvert.hpp"
diff --git a/clicache/src/impl/WeakhashMap.hpp b/clicache/src/impl/WeakhashMap.hpp
index dcdfbdb9..8e2744dd 100644
--- a/clicache/src/impl/WeakhashMap.hpp
+++ b/clicache/src/impl/WeakhashMap.hpp
@@ -18,6 +18,7 @@
 #pragma once
 
 
+
 #pragma warning(disable:4091)
 #include <msclr/lock.h>
 
diff --git a/clicache/src/native_conditional_unique_ptr.hpp b/clicache/src/native_conditional_unique_ptr.hpp
index 33fe01d3..b0612c5c 100644
--- a/clicache/src/native_conditional_unique_ptr.hpp
+++ b/clicache/src/native_conditional_unique_ptr.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "begin_native.hpp"
 #include <memory>
 #include "end_native.hpp"
diff --git a/clicache/src/native_shared_ptr.hpp b/clicache/src/native_shared_ptr.hpp
index ebb0f213..ed1f5390 100644
--- a/clicache/src/native_shared_ptr.hpp
+++ b/clicache/src/native_shared_ptr.hpp
@@ -1,5 +1,6 @@
 #pragma once
 
+
 #include "begin_native.hpp"
 #include <memory>
 #include "end_native.hpp"
diff --git a/clicache/src/native_unique_ptr.hpp b/clicache/src/native_unique_ptr.hpp
index a14f6982..12a80ec0 100644
--- a/clicache/src/native_unique_ptr.hpp
+++ b/clicache/src/native_unique_ptr.hpp
@@ -17,6 +17,7 @@
 
 #pragma once
 
+
 #include "begin_native.hpp"
 #include <memory>
 #include "end_native.hpp"
diff --git a/clicache/test/Utils.hpp b/clicache/test/Utils.hpp
index 63883981..968eda16 100644
--- a/clicache/test/Utils.hpp
+++ b/clicache/test/Utils.hpp
@@ -1,5 +1,6 @@
 #pragma once
 
+
 using namespace System;
 
 namespace cliunittests
diff --git a/cmake/PrecompiledHeader.cmake b/cmake/PrecompiledHeader.cmake
new file mode 100644
index 00000000..1e578d26
--- /dev/null
+++ b/cmake/PrecompiledHeader.cmake
@@ -0,0 +1,214 @@
+# Function for setting up precompiled headers. Usage:
+#
+#   add_library/executable(target
+#       pchheader.c pchheader.cpp pchheader.h)
+#
+#   add_precompiled_header(target pchheader.h
+#       [FORCEINCLUDE]
+#       [SOURCE_C pchheader.c]
+#       [SOURCE_CXX pchheader.cpp])
+#
+# Options:
+#
+#   FORCEINCLUDE: Add compiler flags to automatically include the
+#   pchheader.h from every source file. Works with both GCC and
+#   MSVC. This is recommended.
+#
+#   SOURCE_C/CXX: Specifies the .c/.cpp source file that includes
+#   pchheader.h for generating the pre-compiled header
+#   output. Defaults to pchheader.c. Only required for MSVC.
+#
+# Caveats:
+#
+#   * Its not currently possible to use the same precompiled-header in
+#     more than a single target in the same directory (No way to set
+#     the source file properties differently for each target).
+#
+#   * MSVC: A source file with the same name as the header must exist
+#     and be included in the target (E.g. header.cpp). Name of file
+#     can be changed using the SOURCE_CXX/SOURCE_C options.
+#
+# License:
+#
+# Copyright (C) 2009-2017 Lars Christensen <larsch@belunktum.dk>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the 'Software') deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+include(CMakeParseArguments)
+
+macro(combine_arguments _variable)
+  set(_result "")
+  foreach(_element ${${_variable}})
+    set(_result "${_result} \"${_element}\"")
+  endforeach()
+  string(STRIP "${_result}" _result)
+  set(${_variable} "${_result}")
+endmacro()
+
+function(export_all_flags _filename)
+  set(_include_directories "$<TARGET_PROPERTY:${_target},INCLUDE_DIRECTORIES>")
+  set(_compile_definitions "$<TARGET_PROPERTY:${_target},COMPILE_DEFINITIONS>")
+  set(_compile_flags "$<TARGET_PROPERTY:${_target},COMPILE_FLAGS>")
+  set(_compile_options "$<TARGET_PROPERTY:${_target},COMPILE_OPTIONS>")
+  set(_include_directories "$<$<BOOL:${_include_directories}>:-I$<JOIN:${_include_directories},\n-I>\n>")
+  set(_compile_definitions "$<$<BOOL:${_compile_definitions}>:-D$<JOIN:${_compile_definitions},\n-D>\n>")
+  set(_compile_flags "$<$<BOOL:${_compile_flags}>:$<JOIN:${_compile_flags},\n>\n>")
+  set(_compile_options "$<$<BOOL:${_compile_options}>:$<JOIN:${_compile_options},\n>\n>")
+  file(GENERATE OUTPUT "${_filename}" CONTENT "${_compile_definitions}${_include_directories}${_compile_flags}${_compile_options}\n")
+endfunction()
+
+function(add_precompiled_header _target _input)
+  cmake_parse_arguments(_PCH "FORCEINCLUDE" "SOURCE_CXX;SOURCE_C" "" ${ARGN})
+
+  get_filename_component(_input_we ${_input} NAME_WE)
+  if(NOT _PCH_SOURCE_CXX)
+    set(_PCH_SOURCE_CXX "${_input_we}.cpp")
+  endif()
+  if(NOT _PCH_SOURCE_C)
+    set(_PCH_SOURCE_C "${_input_we}.c")
+  endif()
+
+  if(MSVC)
+    set(_pch_cxx_pch "${CMAKE_CFG_INTDIR}/cxx_${_input_we}.pch")
+    set(_pch_c_pch "${CMAKE_CFG_INTDIR}/c_${_input_we}.pch")
+
+    get_target_property(sources ${_target} SOURCES)
+    foreach(_source ${sources})
+      set(_pch_compile_flags "")
+      if(_source MATCHES \\.\(cc|cxx|cpp|c\)$)
+        if(_source MATCHES \\.\(cpp|cxx|cc\)$)
+          set(_pch_header "${_input}")
+          set(_pch "${_pch_cxx_pch}")
+        else()
+          set(_pch_header "${_input}")
+          set(_pch "${_pch_c_pch}")
+        endif()
+
+        if(_source STREQUAL "${_PCH_SOURCE_CXX}")
+          set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_cxx_pch}\" \"/Yc${_input}\"")
+          set(_pch_source_cxx_found TRUE)
+          set_source_files_properties("${_source}" PROPERTIES OBJECT_OUTPUTS "${_pch_cxx_pch}")
+        elseif(_source STREQUAL "${_PCH_SOURCE_C}")
+          set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_c_pch}\" \"/Yc${_input}\"")
+          set(_pch_source_c_found TRUE)
+          set_source_files_properties("${_source}" PROPERTIES OBJECT_OUTPUTS "${_pch_c_pch}")
+        else()
+          if(_source MATCHES \\.\(cpp|cxx|cc\)$)
+            set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_cxx_pch}\" \"/Yu${_input}\"")
+            set(_pch_source_cxx_needed TRUE)
+            set_source_files_properties("${_source}" PROPERTIES OBJECT_DEPENDS "${_pch_cxx_pch}")
+          else()
+            set(_pch_compile_flags "${_pch_compile_flags} \"/Fp${_pch_c_pch}\" \"/Yu${_input}\"")
+            set(_pch_source_c_needed TRUE)
+            set_source_files_properties("${_source}" PROPERTIES OBJECT_DEPENDS "${_pch_c_pch}")
+          endif()
+          if(_PCH_FORCEINCLUDE)
+            set(_pch_compile_flags "${_pch_compile_flags} /FI${_input}")
+          endif(_PCH_FORCEINCLUDE)
+        endif()
+
+        get_source_file_property(_object_depends "${_source}" OBJECT_DEPENDS)
+        if(NOT _object_depends)
+          set(_object_depends)
+        endif()
+        if(_PCH_FORCEINCLUDE)
+          list(APPEND _object_depends "${CMAKE_CURRENT_SOURCE_DIR}/${_pch_header}")
+        endif()
+
+        set_source_files_properties(${_source} PROPERTIES
+          COMPILE_FLAGS "${_pch_compile_flags}"
+          OBJECT_DEPENDS "${_object_depends}")
+      endif()
+    endforeach()
+
+    if(_pch_source_cxx_needed AND NOT _pch_source_cxx_found)
+      message(FATAL_ERROR "A source file ${_PCH_SOURCE_CXX} for ${_input} is required for MSVC builds. Can be set with the SOURCE_CXX option.")
+    endif()
+    if(_pch_source_c_needed AND NOT _pch_source_c_found)
+      message(FATAL_ERROR "A source file ${_PCH_SOURCE_C} for ${_input} is required for MSVC builds. Can be set with the SOURCE_C option.")
+    endif()
+  endif(MSVC)
+
+  if(CMAKE_COMPILER_IS_GNUCXX)
+    get_filename_component(_name ${_input} NAME)
+    set(_pch_header "${CMAKE_CURRENT_SOURCE_DIR}/${_input}")
+    set(_pch_binary_dir "${CMAKE_CURRENT_BINARY_DIR}/${_target}_pch")
+    set(_pchfile "${_pch_binary_dir}/${_input}")
+    set(_outdir "${CMAKE_CURRENT_BINARY_DIR}/${_target}_pch/${_name}.gch")
+    file(MAKE_DIRECTORY "${_outdir}")
+    set(_output_cxx "${_outdir}/.c++")
+    set(_output_c "${_outdir}/.c")
+
+    set(_pch_flags_file "${_pch_binary_dir}/compile_flags.rsp")
+    export_all_flags("${_pch_flags_file}")
+    set(_compiler_FLAGS "@${_pch_flags_file}")
+    add_custom_command(
+      OUTPUT "${_pchfile}"
+      COMMAND "${CMAKE_COMMAND}" -E copy "${_pch_header}" "${_pchfile}"
+      DEPENDS "${_pch_header}"
+      COMMENT "Updating ${_name}")
+    add_custom_command(
+      OUTPUT "${_output_cxx}"
+      COMMAND "${CMAKE_CXX_COMPILER}" ${_compiler_FLAGS} -x c++-header -o "${_output_cxx}" "${_pchfile}"
+      DEPENDS "${_pchfile}" "${_pch_flags_file}"
+      COMMENT "Precompiling ${_name} for ${_target} (C++)")
+    add_custom_command(
+      OUTPUT "${_output_c}"
+      COMMAND "${CMAKE_C_COMPILER}" ${_compiler_FLAGS} -x c-header -o "${_output_c}" "${_pchfile}"
+      DEPENDS "${_pchfile}" "${_pch_flags_file}"
+      COMMENT "Precompiling ${_name} for ${_target} (C)")
+
+    get_property(_sources TARGET ${_target} PROPERTY SOURCES)
+    foreach(_source ${_sources})
+      set(_pch_compile_flags "")
+
+      if(_source MATCHES \\.\(cc|cxx|cpp|c\)$)
+        get_source_file_property(_pch_compile_flags "${_source}" COMPILE_FLAGS)
+        if(NOT _pch_compile_flags)
+          set(_pch_compile_flags)
+        endif()
+        separate_arguments(_pch_compile_flags)
+        list(APPEND _pch_compile_flags -Winvalid-pch)
+        if(_PCH_FORCEINCLUDE)
+          list(APPEND _pch_compile_flags -include "${_pchfile}")
+        else(_PCH_FORCEINCLUDE)
+          list(APPEND _pch_compile_flags "-I${_pch_binary_dir}")
+        endif(_PCH_FORCEINCLUDE)
+
+        get_source_file_property(_object_depends "${_source}" OBJECT_DEPENDS)
+        if(NOT _object_depends)
+          set(_object_depends)
+        endif()
+        list(APPEND _object_depends "${_pchfile}")
+        if(_source MATCHES \\.\(cc|cxx|cpp\)$)
+          list(APPEND _object_depends "${_output_cxx}")
+        else()
+          list(APPEND _object_depends "${_output_c}")
+        endif()
+
+        combine_arguments(_pch_compile_flags)
+        set_source_files_properties(${_source} PROPERTIES
+          COMPILE_FLAGS "${_pch_compile_flags}"
+          OBJECT_DEPENDS "${_object_depends}")
+      endif()
+    endforeach()
+  endif(CMAKE_COMPILER_IS_GNUCXX)
+endfunction()
diff --git a/cppcache/include/geode/AttributesFactory.hpp b/cppcache/include/geode/AttributesFactory.hpp
index 037990ef..4d1f550a 100644
--- a/cppcache/include/geode/AttributesFactory.hpp
+++ b/cppcache/include/geode/AttributesFactory.hpp
@@ -21,6 +21,7 @@
 #define GEODE_ATTRIBUTESFACTORY_H_
 
 #include <chrono>
+#include <string>
 
 #include "geode_globals.hpp"
 #include "ExceptionTypes.hpp"
@@ -221,8 +222,8 @@ class CPPCACHE_EXPORT AttributesFactory {
    * of the region.
    * @return a reference to <code>this</code>
    */
-  AttributesFactory& setCacheLoader(const char* libpath,
-                                    const char* factoryFuncName);
+  AttributesFactory& setCacheLoader(const std::string& libpath,
+                                    const std::string& factoryFuncName);
 
   /**
    * Sets the library path for the library that will be invoked for the writer
@@ -230,24 +231,24 @@ class CPPCACHE_EXPORT AttributesFactory {
    * @return a reference to <code>this</code>
    */
 
-  AttributesFactory& setCacheWriter(const char* libpath,
-                                    const char* factoryFuncName);
+  AttributesFactory& setCacheWriter(const std::string& libpath,
+                                    const std::string& factoryFuncName);
 
   /**
    * Sets the library path for the library that will be invoked for the listener
    * of the region.
    * @return a reference to <code>this</code>
    */
-  AttributesFactory& setCacheListener(const char* libpath,
-                                      const char* factoryFuncName);
+  AttributesFactory& setCacheListener(const std::string& libpath,
+                                      const std::string& factoryFuncName);
 
   /**
    * Sets the library path for the library that will be invoked for the
    * partition resolver of the region.
    * @return a reference to <code>this</code>
    */
-  AttributesFactory& setPartitionResolver(const char* libpath,
-                                          const char* factoryFuncName);
+  AttributesFactory& setPartitionResolver(const std::string& libpath,
+                                          const std::string& factoryFuncName);
 
   // EXPIRATION ATTRIBUTES
 
@@ -313,7 +314,7 @@ class CPPCACHE_EXPORT AttributesFactory {
    * @return a reference to <code>this</code>
    */
   AttributesFactory& setPersistenceManager(
-      const char* libpath, const char* factoryFuncName,
+      const std::string& libpath, const std::string& factoryFuncName,
       const std::shared_ptr<Properties>& config = nullptr);
 
   /** Sets the PersistenceManager for the next <code>RegionAttributes</code>
@@ -337,7 +338,7 @@ class CPPCACHE_EXPORT AttributesFactory {
    */
   AttributesFactory& setInitialCapacity(int initialCapacity);
 
-  /** 
+  /**
    * Sets the entry load factor for the next <code>RegionAttributes</code>
    * created. This value is
    * used in initializing the map that holds the entries.
@@ -347,7 +348,7 @@ class CPPCACHE_EXPORT AttributesFactory {
    */
   AttributesFactory& setLoadFactor(float loadFactor);
 
-  /** 
+  /**
    * Sets the concurrency level tof the next <code>RegionAttributes</code>
    * created. This value is used in initializing the map that holds the entries.
    * @param concurrencyLevel the concurrency level of the entry map
@@ -404,7 +405,7 @@ class CPPCACHE_EXPORT AttributesFactory {
    * or <code>""</code> then the connection pool is disabled for regions
    * using these attributes.
    */
-  AttributesFactory& setPoolName(const char* name);
+  AttributesFactory& setPoolName(const std::string& name);
 
   /**
    * Sets cloning on region
diff --git a/cppcache/include/geode/AttributesMutator.hpp b/cppcache/include/geode/AttributesMutator.hpp
index 92f6937d..dca0229c 100644
--- a/cppcache/include/geode/AttributesMutator.hpp
+++ b/cppcache/include/geode/AttributesMutator.hpp
@@ -21,10 +21,11 @@
 #define GEODE_ATTRIBUTESMUTATOR_H_
 
 #include <chrono>
+#include <string>
 #include <memory>
+
 #include "geode_globals.hpp"
 #include "ExpirationAction.hpp"
-#include "util/chrono/duration.hpp"
 
 /**
  * @file
@@ -38,6 +39,7 @@ class CacheListener;
 class CacheLoader;
 class CacheWriter;
 class Region;
+
 /**
  * @class AttributesMutator AttributesMutator.hpp
  *
@@ -155,7 +157,8 @@ class CPPCACHE_EXPORT AttributesMutator {
    * function.
    * @param factoryFuncName factory function for creating cache listener.
    */
-  void setCacheListener(const char* libpath, const char* factoryFuncName);
+  void setCacheListener(const std::string& libpath,
+                        const std::string& factoryFuncName);
 
   /** Sets cache loader for region. The previous cache loader will be replaced
    * with
@@ -171,7 +174,8 @@ class CPPCACHE_EXPORT AttributesMutator {
    * function.
    * @param factoryFuncName factory function for creating cache loader.
    */
-  void setCacheLoader(const char* libpath, const char* factoryFuncName);
+  void setCacheLoader(const std::string& libpath,
+                      const std::string& factoryFuncName);
 
   /** Sets cache writer for region. The previous cache writer will be replaced
    * with
@@ -187,7 +191,8 @@ class CPPCACHE_EXPORT AttributesMutator {
    * function.
    * @param factoryFuncName factory function for creating cache writer.
    */
-  void setCacheWriter(const char* libpath, const char* factoryFuncName);
+  void setCacheWriter(const std::string& libpath,
+                      const std::string& factoryFuncName);
 };
 
 }  // namespace client
diff --git a/cppcache/include/geode/AuthInitialize.hpp b/cppcache/include/geode/AuthInitialize.hpp
index 9f746a90..00427e8c 100644
--- a/cppcache/include/geode/AuthInitialize.hpp
+++ b/cppcache/include/geode/AuthInitialize.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_AUTHINITIALIZE_H_
-#define GEODE_AUTHINITIALIZE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,17 +15,26 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_AUTHINITIALIZE_H_
+#define GEODE_AUTHINITIALIZE_H_
+
 /**
  * @file
  */
 
+#include <string>
+
 #include "geode_globals.hpp"
 #include <memory>
 
 namespace apache {
 namespace geode {
 namespace client {
+
 class Properties;
+
 /**
  * @class AuthInitialize AuthInitialize.hpp
  * Specifies the mechanism to obtain credentials for a client.
@@ -55,11 +59,13 @@ class CPPCACHE_EXPORT AuthInitialize {
    * example it may invoke external agents or even interact with the user.
    */
   virtual std::shared_ptr<Properties> getCredentials(
-      const std::shared_ptr<Properties>& securityprops, const char* server) = 0;
+      const std::shared_ptr<Properties>& securityprops,
+      const std::string& server) = 0;
 
   /**@brief Invoked before the cache goes down. */
   virtual void close() = 0;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/include/geode/Cache.hpp b/cppcache/include/geode/Cache.hpp
index eb731c6d..5393d7ad 100644
--- a/cppcache/include/geode/Cache.hpp
+++ b/cppcache/include/geode/Cache.hpp
@@ -82,7 +82,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @param cacheXml
    *        Valid cache.xml file
    */
-  virtual void initializeDeclarativeCache(const char* cacheXml) override;
+  virtual void initializeDeclarativeCache(const std::string& cacheXml) override;
 
   /** Returns the name of this cache.
    * @return the string name of this cache
@@ -138,7 +138,8 @@ 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 std::shared_ptr<Region> getRegion(const char* path) override;
+  virtual std::shared_ptr<Region> getRegion(
+      const std::string& path) const override;
 
   /**
    * Returns a set of root regions in the cache. This set is a snapshot and
@@ -148,7 +149,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @param regions the returned set of
    * regions
    */
-  virtual std::vector<std::shared_ptr<Region>> rootRegions() override;
+  virtual std::vector<std::shared_ptr<Region>> rootRegions() const override;
 
   /**
    * Gets the QueryService from which a new Query can be obtained.
@@ -163,7 +164,8 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * PoolManager}
    * @returns A smart pointer to the QueryService.
    */
-  virtual std::shared_ptr<QueryService> getQueryService(const char* poolName);
+  virtual std::shared_ptr<QueryService> getQueryService(
+      const std::string& poolName) const;
 
   /**
    * Send the "client ready" message to the server from a durable client.
@@ -195,25 +197,26 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
 
   virtual std::shared_ptr<RegionService> createAuthenticatedView(
       std::shared_ptr<Properties> userSecurityProperties,
-      const char* poolName = nullptr);
+      const std::string& poolName);
 
   /**
    * Get the CacheTransactionManager instance for this Cache.
    * @return The CacheTransactionManager instance.
    * @throws CacheClosedException if the cache is closed.
    */
-  virtual std::shared_ptr<CacheTransactionManager> getCacheTransactionManager();
+  virtual std::shared_ptr<CacheTransactionManager> getCacheTransactionManager()
+      const;
 
   /**
    * Returns whether Cache saves unread fields for Pdx types.
    */
-  virtual bool getPdxIgnoreUnreadFields() override;
+  virtual bool getPdxIgnoreUnreadFields() const override;
 
   /**
    * Returns whether { @link PdxInstance} is preferred for PDX types instead of
    * C++ object.
    */
-  virtual bool getPdxReadSerialized() override;
+  virtual bool getPdxReadSerialized() const override;
 
   virtual TypeRegistry& getTypeRegistry();
 
@@ -226,7 +229,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache,
    * @return the factory
    */
   virtual std::shared_ptr<PdxInstanceFactory> createPdxInstanceFactory(
-      const char* className) override;
+      std::string className) const override;
 
   virtual statistics::StatisticsFactory* getStatisticsFactory() const;
 
diff --git a/cppcache/include/geode/CacheAttributes.hpp b/cppcache/include/geode/CacheAttributes.hpp
index 0416dde4..c0d2d21e 100644
--- a/cppcache/include/geode/CacheAttributes.hpp
+++ b/cppcache/include/geode/CacheAttributes.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_CACHEATTRIBUTES_H_
-#define GEODE_CACHEATTRIBUTES_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,10 +15,17 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_CACHEATTRIBUTES_H_
+#define GEODE_CACHEATTRIBUTES_H_
+
 /**
  * @file
  */
 
+#include <string>
+
 #include "geode_globals.hpp"
 
 namespace apache {
@@ -63,9 +65,9 @@ class CPPCACHE_EXPORT CacheAttributes {
   /**
    * Gets cache level endpoints list.
    */
-  char* getEndpoints();
+  const std::string& getEndpoints();
 
-  ~CacheAttributes();
+  ~CacheAttributes() = delete;
 
   bool operator==(const CacheAttributes& other) const;
 
@@ -80,17 +82,16 @@ class CPPCACHE_EXPORT CacheAttributes {
   /** Sets cache level endpoints list.
    *
    */
-  void setEndpoints(char* endpoints);
+  void setEndpoints(const std::string& endpoints);
+  void setEndpoints(std::string&& endpoints);
+
   // will be created by the factory
 
-  CacheAttributes(const CacheAttributes& rhs);
+  CacheAttributes(const CacheAttributes& rhs) = default;
   CacheAttributes();
 
-  int32_t compareStringAttribute(char* attributeA, char* attributeB) const;
-  void copyStringAttribute(char*& lhs, const char* rhs);
-
   int m_redundancyLevel;
-  char* m_endpoints;
+  std::string m_endpoints;
   bool m_cacheMode;
 
   friend class CacheAttributesFactory;
diff --git a/cppcache/include/geode/CacheFactory.hpp b/cppcache/include/geode/CacheFactory.hpp
index ccb6d0d1..6a78c681 100644
--- a/cppcache/include/geode/CacheFactory.hpp
+++ b/cppcache/include/geode/CacheFactory.hpp
@@ -20,10 +20,9 @@
 #ifndef GEODE_CACHEFACTORY_H_
 #define GEODE_CACHEFACTORY_H_
 
-#include <chrono>
+#include <string>
 
 #include "geode_globals.hpp"
-#include "util/chrono/duration.hpp"
 #include "DistributedSystem.hpp"
 #include "Cache.hpp"
 #include "CacheAttributes.hpp"
@@ -39,6 +38,7 @@ namespace client {
 
 class CppCacheLibrary;
 class AuthInitialize;
+
 /**
  * @class CacheFactory CacheFactory.hpp
  * Top level class for configuring and using Geode on a client.This should be
@@ -61,17 +61,17 @@ class CPPCACHE_EXPORT CacheFactory
   /**
    * To create the instance of {@link Cache}.
    */
-  Cache create();
+  Cache create() const;
 
   /** Returns the version of the cache implementation.
    * For the 1.0 release of Geode, the string returned is <code>1.0</code>.
    * @return the version of the cache implementation as a <code>String</code>
    */
-  static const char* getVersion();
+  static const std::string& getVersion();
 
   /** Returns the product description string including product name and version.
    */
-  static const char* getProductDescription();
+  static const std::string& getProductDescription();
 
   /**
    * Control whether pdx ignores fields that were unread during deserialization.
@@ -102,7 +102,8 @@ class CPPCACHE_EXPORT CacheFactory
    * @param authInitialize
    * @return this ClientCacheFactory
    */
-  std::shared_ptr<CacheFactory> setAuthInitialize(const std::shared_ptr<AuthInitialize>& authInitialize);
+  std::shared_ptr<CacheFactory> setAuthInitialize(
+      const std::shared_ptr<AuthInitialize>& authInitialize);
 
   /** Sets the object preference to PdxInstance type.
    * When a cached object that was serialized as a PDX is read
@@ -131,7 +132,8 @@ class CPPCACHE_EXPORT CacheFactory
    * @return a reference to <code>this</code>
    * @since 3.5
    */
-  std::shared_ptr<CacheFactory> set(const char* name, const char* value);
+  std::shared_ptr<CacheFactory> set(const std::string& name,
+                                    const std::string& value);
 
  private:
   std::shared_ptr<Properties> dsProp;
@@ -140,15 +142,13 @@ class CPPCACHE_EXPORT CacheFactory
   std::shared_ptr<AuthInitialize> authInitialize;
 
   Cache create(
-      const char* name,
-      const std::shared_ptr<CacheAttributes>& attrs = nullptr);
+      const std::string name,
+      const std::shared_ptr<CacheAttributes>& attrs = nullptr) const;
 
   // no instances allowed
   CacheFactory();
-  CacheFactory(const std::shared_ptr<Properties> dsProps);
-
- private:
-  ~CacheFactory();
+  explicit CacheFactory(const std::shared_ptr<Properties> dsProps);
+  ~CacheFactory() = default;
 
   friend class CppCacheLibrary;
   friend class RegionFactory;
diff --git a/cppcache/include/geode/CacheableBuiltins.hpp b/cppcache/include/geode/CacheableBuiltins.hpp
index 71076aea..9ae440c1 100644
--- a/cppcache/include/geode/CacheableBuiltins.hpp
+++ b/cppcache/include/geode/CacheableBuiltins.hpp
@@ -40,12 +40,6 @@ namespace client {
 template <typename Target, int8_t TYPEID>
 class CacheableArrayType;
 
-/** sprintf implementation. */
-extern int gf_sprintf(char* buffer, const char* fmt, ...);
-
-/** snprintf implementation. */
-extern int gf_snprintf(char* buffer, int32_t maxLength, const char* fmt, ...);
-
 /** Template CacheableKey class for primitive types. */
 template <typename TObj, int8_t TYPEID, const char* TYPENAME,
           const char* SPRINTFSYM, int32_t STRSIZE>
@@ -65,12 +59,12 @@ class CacheableKeyType : public CacheableKey {
   // Cacheable methods
 
   /** Serialize this object to given <code>DataOutput</code>. */
-  virtual void toData(DataOutput& output) const {
+  virtual void toData(DataOutput& output) const override {
     apache::geode::client::serializer::writeObject(output, m_value);
   }
 
   /** Deserialize this object from given <code>DataInput</code>. */
-  virtual void fromData(DataInput& input) {
+  virtual void fromData(DataInput& input) override {
     apache::geode::client::serializer::readObject(input, m_value);
   }
 
@@ -80,7 +74,7 @@ class CacheableKeyType : public CacheableKey {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const { return 0; }
+  virtual int32_t classId() const override { return 0; }
 
   /**
    * Return the typeId byte of the instance being serialized.
@@ -88,46 +82,35 @@ class CacheableKeyType : public CacheableKey {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const { return TYPEID; }
+  virtual int8_t typeId() const override { return TYPEID; }
 
   /** Return a string representation of the object. */
-  virtual std::shared_ptr<CacheableString> toString() const {
+  virtual std::string toString() const override {
     char buffer[STRSIZE + 1];
-    gf_sprintf(buffer, SPRINTFSYM, m_value);
-    return CacheableString::create(buffer);
+    std::sprintf(buffer, SPRINTFSYM, m_value);
+    return std::string(buffer);
   }
 
   // CacheableKey methods
 
   /** Return the hashcode for this key. */
-  virtual int32_t hashcode() const {
-    return apache::geode::client::serializer::hashcode(m_value);
+  virtual int32_t hashcode() const override {
+    return serializer::hashcode(m_value);
   }
 
   /** Return true if this key matches other. */
-  virtual bool operator==(const CacheableKey& other) const {
+  virtual bool operator==(const CacheableKey& other) const override {
     if (other.typeId() != TYPEID) {
       return false;
     }
     const CacheableKeyType& otherValue =
         static_cast<const CacheableKeyType&>(other);
-    return apache::geode::client::serializer::equals(m_value,
-                                                     otherValue.m_value);
+    return serializer::equals(m_value, otherValue.m_value);
   }
 
   /** Return true if this key matches other key value. */
   inline bool operator==(const TObj other) const {
-    return apache::geode::client::serializer::equals(m_value, other);
-  }
-
-  /**
-   * Copy the string form of the object into a char* buffer for
-   * logging purposes.
-   */
-  virtual int32_t logString(char* buffer, int32_t maxLength) const {
-    char fmt[64];
-    gf_sprintf(fmt, "%s( %s )", TYPENAME, SPRINTFSYM);
-    return gf_snprintf(buffer, maxLength, fmt, m_value);
+    return serializer::equals(m_value, other);
   }
 
   /**
@@ -138,7 +121,9 @@ class CacheableKeyType : public CacheableKey {
    * return zero if the user does not require the ability to control
    * cache memory utilization.
    */
-  virtual uint32_t objectSize() const { return sizeof(CacheableKeyType); }
+  virtual uint32_t objectSize() const override {
+    return sizeof(CacheableKeyType);
+  }
 };
 
 /** Function to copy an array from source to destination. */
@@ -232,12 +217,12 @@ class CacheableArrayType : public Cacheable {
   // Cacheable methods
 
   /** Serialize this object to the given <code>DataOutput</code>. */
-  virtual void toData(DataOutput& output) const {
+  virtual void toData(DataOutput& output) const override {
     apache::geode::client::serializer::writeObject(output, m_value, m_length);
   }
 
   /** Deserialize this object from the given <code>DataInput</code>. */
-  virtual void fromData(DataInput& input) {
+  virtual void fromData(DataInput& input) override {
     GF_SAFE_DELETE_ARRAY(m_value);
     apache::geode::client::serializer::readObject(input, m_value, m_length);
   }
@@ -248,7 +233,7 @@ class CacheableArrayType : public Cacheable {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const { return 0; }
+  virtual int32_t classId() const override { return 0; }
 
   /**
    * Return the typeId byte of the instance being serialized.
@@ -256,7 +241,7 @@ class CacheableArrayType : public Cacheable {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const { return TYPEID; }
+  virtual int8_t typeId() const override { return TYPEID; }
 
   /**
    * Return the size in bytes of the instance being serialized.
@@ -266,7 +251,7 @@ class CacheableArrayType : public Cacheable {
    * return zero if the user does not require the ability to control
    * cache memory utilization.
    */
-  virtual uint32_t objectSize() const {
+  virtual uint32_t objectSize() const override {
     return static_cast<uint32_t>(
         sizeof(CacheableArrayType) +
         apache::geode::client::serializer::objectSize(m_value, m_length));
@@ -285,12 +270,12 @@ class CacheableContainerType : public Cacheable, public TBase {
   // Cacheable methods
 
   /** Serialize this object to the given <code>DataOutput</code>. */
-  virtual void toData(DataOutput& output) const {
+  virtual void toData(DataOutput& output) const override {
     apache::geode::client::serializer::writeObject(output, *this);
   }
 
   /** Deserialize this object from the given <code>DataInput</code>. */
-  virtual void fromData(DataInput& input) {
+  virtual void fromData(DataInput& input) override {
     apache::geode::client::serializer::readObject(input, *this);
   }
 
@@ -300,7 +285,7 @@ class CacheableContainerType : public Cacheable, public TBase {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const { return 0; }
+  virtual int32_t classId() const override { return 0; }
 
   /**
    * Return the typeId byte of the instance being serialized.
@@ -308,7 +293,7 @@ class CacheableContainerType : public Cacheable, public TBase {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const { return TYPEID; }
+  virtual int8_t typeId() const override { return TYPEID; }
 
   /**
    * Return the size in bytes of the instance being serialized.
@@ -318,7 +303,7 @@ class CacheableContainerType : public Cacheable, public TBase {
    * return zero if the user does not require the ability to control
    * cache memory utilization.
    */
-  virtual uint32_t objectSize() const {
+  virtual uint32_t objectSize() const override {
     return static_cast<uint32_t>(
         sizeof(CacheableContainerType) +
         apache::geode::client::serializer::objectSize(*this));
diff --git a/cppcache/include/geode/CacheableDate.hpp b/cppcache/include/geode/CacheableDate.hpp
index b0bc71d6..38621b76 100644
--- a/cppcache/include/geode/CacheableDate.hpp
+++ b/cppcache/include/geode/CacheableDate.hpp
@@ -57,12 +57,12 @@ class CPPCACHE_EXPORT CacheableDate : public CacheableKey {
   /**
    * @brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    * @brief deserialize this object
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    * @brief creation function for dates.
@@ -74,20 +74,20 @@ class CPPCACHE_EXPORT CacheableDate : public CacheableKey {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    *@brief return the typeId byte of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /** @return the size of the object in bytes */
-  virtual uint32_t objectSize() const { return sizeof(CacheableDate); }
+  virtual uint32_t objectSize() const override { return sizeof(CacheableDate); }
 
   /** @return true if this key matches other. */
-  virtual bool operator==(const CacheableKey& other) const;
+  virtual bool operator==(const CacheableKey& other) const override;
 
   /** @return milliseconds elapsed since January 1, 1970, 00:00:00 GMT. */
   virtual int64_t milliseconds() const;
@@ -98,7 +98,7 @@ class CPPCACHE_EXPORT CacheableDate : public CacheableKey {
    * milliseconds() method.
    *
    * @return the hashcode for this object. */
-  virtual int32_t hashcode() const;
+  virtual int32_t hashcode() const override;
 
   operator time_t() const { return m_timevalue / 1000; }
   operator time_point() const {
@@ -125,14 +125,11 @@ class CPPCACHE_EXPORT CacheableDate : public CacheableKey {
     return std::make_shared<CacheableDate>(value);
   }
 
-  virtual std::shared_ptr<CacheableString> toString() const;
+  virtual std::string toString() const override;
 
   /** Destructor */
   virtual ~CacheableDate();
 
-  /** used to render as a string for logging. */
-  virtual int32_t logString(char* buffer, int32_t maxLength) const;
-
  protected:
   /** Constructor, used for deserialization. */
   CacheableDate(const time_t value = 0);
diff --git a/cppcache/include/geode/CacheableEnum.hpp b/cppcache/include/geode/CacheableEnum.hpp
index c13bde2f..ca962040 100644
--- a/cppcache/include/geode/CacheableEnum.hpp
+++ b/cppcache/include/geode/CacheableEnum.hpp
@@ -43,10 +43,10 @@ namespace client {
 
 class CPPCACHE_EXPORT CacheableEnum : public CacheableKey {
  private:
-  std::shared_ptr<CacheableString> m_enumClassName;
-  std::shared_ptr<CacheableString> m_enumName;
+  std::string m_enumClassName;
+  std::string m_enumName;
   int32_t m_ordinal;
-  mutable int32_t m_hashcode;
+  int32_t m_hashcode;
 
  public:
   /** Destructor */
@@ -59,20 +59,19 @@ class CPPCACHE_EXPORT CacheableEnum : public CacheableKey {
   /**
    * @brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    * @brief deserialize this object
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /** @return the size of the object in bytes */
-  virtual uint32_t objectSize() const {
-    uint32_t size = sizeof(CacheableEnum);
-    size += static_cast<uint32_t>(sizeof(int32_t));
-    size += m_enumClassName->objectSize();
-    size += m_enumName->objectSize();
-    return size;
+  virtual uint32_t objectSize() const override {
+    auto size = sizeof(CacheableEnum);
+    size += m_enumClassName.length();
+    size += m_enumName.length();
+    return static_cast<uint32_t>(size);
   }
 
   /**
@@ -80,14 +79,14 @@ class CPPCACHE_EXPORT CacheableEnum : public CacheableKey {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const { return 0; }
+  virtual int32_t classId() const override { return 0; }
 
   /**
    * @brief return the typeId byte of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const {
+  virtual int8_t typeId() const override {
     // return 0;
     return static_cast<int8_t>(GeodeTypeIds::CacheableEnum);
   }
@@ -95,9 +94,7 @@ class CPPCACHE_EXPORT CacheableEnum : public CacheableKey {
   /**
    * Display this object as c string.
    */
-  virtual std::shared_ptr<CacheableString> toString() const {
-    return CacheableString::create("CacheableEnum");
-  }
+  virtual std::string toString() const override { return "CacheableEnum"; }
 
   /**
    * Factory method for creating an instance of CacheableEnum.
@@ -109,31 +106,32 @@ class CPPCACHE_EXPORT CacheableEnum : public CacheableKey {
    * enum type.
    * @return a {@link CacheableEnum} representing C++ enum.
    */
-  static std::shared_ptr<CacheableEnum> create(const char* enumClassName,
-                                               const char* enumName,
+  static std::shared_ptr<CacheableEnum> create(std::string enumClassName,
+                                               std::string enumName,
                                                int32_t ordinal) {
     return std::make_shared<CacheableEnum>(enumClassName, enumName, ordinal);
   }
 
   /**@return enum class name. */
-  const char* getEnumClassName() const { return m_enumClassName->asChar(); }
+  const std::string& getEnumClassName() const { return m_enumClassName; }
 
   /**@return enum name. */
-  const char* getEnumName() const { return m_enumName->asChar(); }
+  const std::string& getEnumName() const { return m_enumName; }
 
   /**@return enum ordinal. */
   int32_t getEnumOrdinal() const { return m_ordinal; }
 
   /** @return the hashcode for this key. */
-  virtual int32_t hashcode() const;
+  virtual int32_t hashcode() const override { return m_hashcode; }
 
   /** @return true if this key matches other. */
-  virtual bool operator==(const CacheableKey& other) const;
+  virtual bool operator==(const CacheableKey& other) const override;
 
  protected:
   CacheableEnum();
-  CacheableEnum(const char* enumClassName, const char* enumName,
+  CacheableEnum(std::string enumClassName, std::string enumName,
                 int32_t ordinal);
+  void calculateHashcode();
 
  private:
   // never implemented.
diff --git a/cppcache/include/geode/CacheableFileName.hpp b/cppcache/include/geode/CacheableFileName.hpp
index ec6720c9..239c578a 100644
--- a/cppcache/include/geode/CacheableFileName.hpp
+++ b/cppcache/include/geode/CacheableFileName.hpp
@@ -40,28 +40,28 @@ class CPPCACHE_EXPORT CacheableFileName : public CacheableString {
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object
    * Throw IllegalArgumentException if the packed CacheableString is not less
    * than 64K bytes.
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    *@brief Return the classId of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    *@brief return the typeId byte of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /**
    * @brief creation function for filenames.
@@ -98,11 +98,8 @@ class CPPCACHE_EXPORT CacheableFileName : public CacheableString {
     return str;
   }
 
-  /** get the name of the class of this object for logging purpose */
-  virtual const char* className() const { return "CacheableFileName"; }
-
   /** return the hashcode for this key. */
-  virtual int32_t hashcode() const;
+  virtual int32_t hashcode() const override;
 
  protected:
   FRIEND_STD_SHARED_PTR(CacheableFileName)
@@ -112,8 +109,8 @@ class CPPCACHE_EXPORT CacheableFileName : public CacheableString {
 
  private:
   // never implemented.
-  void operator=(const CacheableFileName& other);
-  CacheableFileName(const CacheableFileName& other);
+  void operator=(const CacheableFileName& other) = delete;
+  CacheableFileName(const CacheableFileName& other) = delete;
 
  private:
   mutable int m_hashcode;
diff --git a/cppcache/include/geode/CacheableKey.hpp b/cppcache/include/geode/CacheableKey.hpp
index a663e16a..9a376c84 100644
--- a/cppcache/include/geode/CacheableKey.hpp
+++ b/cppcache/include/geode/CacheableKey.hpp
@@ -51,16 +51,6 @@ class CPPCACHE_EXPORT CacheableKey : public Cacheable {
   /** return the hashcode for this key. */
   virtual int32_t hashcode() const = 0;
 
-  /** Copy the string form of a key into a char* buffer for logging purposes.
-   *
-   * Implementations should only generate a string as long as maxLength chars,
-   * and return the number of chars written. buffer is expected to be large
-   * enough to hold at least maxLength chars.
-   *
-   * The default implementation renders the classname and instance address.
-   */
-  virtual int32_t logString(char* buffer, int32_t maxLength) const;
-
   /**
    * Factory method that creates the key type that matches the type of value.
    *
diff --git a/cppcache/include/geode/CacheableObjectArray.hpp b/cppcache/include/geode/CacheableObjectArray.hpp
index 618af98c..35b69176 100644
--- a/cppcache/include/geode/CacheableObjectArray.hpp
+++ b/cppcache/include/geode/CacheableObjectArray.hpp
@@ -19,11 +19,13 @@
 
 #ifndef GEODE_CACHEABLEOBJECTARRAY_H_
 #define GEODE_CACHEABLEOBJECTARRAY_H_
+
 #include <vector>
 #include <memory>
 
 #include "geode_globals.hpp"
 #include "Cacheable.hpp"
+
 /** @file
  */
 
@@ -42,12 +44,12 @@ class CPPCACHE_EXPORT CacheableObjectArray
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    * @brief creation function for java Object[]
@@ -61,14 +63,14 @@ class CPPCACHE_EXPORT CacheableObjectArray
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    *@brief return the typeId byte of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /**
    * Factory method for creating the default instance of CacheableObjectArray.
@@ -85,18 +87,19 @@ class CPPCACHE_EXPORT CacheableObjectArray
     return std::make_shared<CacheableObjectArray>(n);
   }
 
-  virtual uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
 
  protected:
   /** Constructor, used for deserialization. */
   inline CacheableObjectArray() : std::vector<std::shared_ptr<Cacheable>>() {}
   /** Create a vector with n elements allocated. */
-  inline CacheableObjectArray(int32_t n) : std::vector<std::shared_ptr<Cacheable>>(n) {}
+  inline CacheableObjectArray(int32_t n)
+      : std::vector<std::shared_ptr<Cacheable>>(n) {}
 
  private:
   // never implemented.
-  CacheableObjectArray& operator=(const CacheableObjectArray& other);
-  CacheableObjectArray(const CacheableObjectArray& other);
+  CacheableObjectArray& operator=(const CacheableObjectArray& other) = delete;
+  CacheableObjectArray(const CacheableObjectArray& other) = delete;
 
   FRIEND_STD_SHARED_PTR(CacheableObjectArray)
 };
diff --git a/cppcache/include/geode/CacheableString.hpp b/cppcache/include/geode/CacheableString.hpp
index 457150ec..efb31a9b 100644
--- a/cppcache/include/geode/CacheableString.hpp
+++ b/cppcache/include/geode/CacheableString.hpp
@@ -54,14 +54,14 @@ class CPPCACHE_EXPORT CacheableString : public CacheableKey {
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object
    * Throw IllegalArgumentException if the packed CacheableString is not less
    * than 64K bytes.
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /** creation function for strings */
   static Serializable* createDeserializable();
@@ -80,7 +80,7 @@ class CPPCACHE_EXPORT CacheableString : public CacheableKey {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    * Return the typeId byte of the instance being serialized.
@@ -97,13 +97,13 @@ class CPPCACHE_EXPORT CacheableString : public CacheableKey {
    * <code>GeodeTypeIds::CacheableStringHuge</code> for char* and wchar_t*
    * respectively.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /** return true if this key matches other. */
-  virtual bool operator==(const CacheableKey& other) const;
+  virtual bool operator==(const CacheableKey& other) const override;
 
   /** return the hashcode for this key. */
-  virtual int32_t hashcode() const;
+  virtual int32_t hashcode() const override;
 
   /**
    * Factory method for creating an instance of CacheableString from
@@ -230,35 +230,12 @@ class CPPCACHE_EXPORT CacheableString : public CacheableKey {
   /** Return the length of the contained string. */
   inline uint32_t length() const { return m_len; }
 
-  /**
-   * Display this object as c string. In this case, it returns the same
-   * value as asChar() when underlying type is a char* and returns the same
-   * value as asWChar() cast to char* when the underlying type is a wchar_t*.
-   * To handle this correctly the user should find the actual type by calling
-   * typeId() or isWideString() and cast to the correct type accordingly.
-   * Note: this is a debugging API, not intended for getting the exact value
-   * of the CacheableString. In a future release this may return a more
-   * summary representation. This is historical. It is preferred that the
-   * user call logString or asChar/asWChar, depending on the need.
-   */
-  const char* toString() { return reinterpret_cast<const char*>(m_str); }
-
-  virtual std::shared_ptr<CacheableString> toString() const {
-    // TODO this cast seems odd
-    return std::const_pointer_cast<CacheableString>(
-        std::static_pointer_cast<const CacheableString>(shared_from_this()));
-  }
-
-  /** get the name of the class of this object for logging purpose */
-  virtual const char* className() const { return "CacheableString"; }
+  virtual std::string toString() const override;
 
   /** Destructor */
   virtual ~CacheableString();
 
-  /** used to render as a string for logging. */
-  virtual int32_t logString(char* buffer, int32_t maxLength) const;
-
-  virtual uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
 
  protected:
   /** Private method to populate the <code>CacheableString</code>. */
@@ -287,8 +264,8 @@ class CPPCACHE_EXPORT CacheableString : public CacheableKey {
 
  private:
   // never implemented.
-  void operator=(const CacheableString& other);
-  CacheableString(const CacheableString& other);
+  void operator=(const CacheableString& other) = delete;
+  CacheableString(const CacheableString& other) = delete;
 };
 
 /** overload of apache::geode::client::createKeyArr to pass char* */
diff --git a/cppcache/include/geode/CacheableUndefined.hpp b/cppcache/include/geode/CacheableUndefined.hpp
index 5e5d33c7..724eb7ea 100644
--- a/cppcache/include/geode/CacheableUndefined.hpp
+++ b/cppcache/include/geode/CacheableUndefined.hpp
@@ -38,12 +38,12 @@ class CPPCACHE_EXPORT CacheableUndefined : public Cacheable {
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    * @brief creation function for undefined query result
@@ -57,20 +57,20 @@ class CPPCACHE_EXPORT CacheableUndefined : public Cacheable {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    *@brief return the typeId byte of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /**
    * @brief Return the data serialization fixed ID size type for internal use.
    * @since GFE 5.7
    */
-  virtual int8_t DSFID() const;
+  virtual int8_t DSFID() const override;
 
   /**
    * Factory method for creating the default instance of CacheableUndefined.
@@ -79,16 +79,16 @@ class CPPCACHE_EXPORT CacheableUndefined : public Cacheable {
     return std::make_shared<CacheableUndefined>();
   }
 
-  virtual uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
 
  protected:
   /** Constructor, used for deserialization. */
-  inline CacheableUndefined() {}
+  inline CacheableUndefined() = default;
 
  private:
   // never implemented.
-  CacheableUndefined& operator=(const CacheableUndefined& other);
-  CacheableUndefined(const CacheableUndefined& other);
+  CacheableUndefined& operator=(const CacheableUndefined& other) = delete;
+  CacheableUndefined(const CacheableUndefined& other) = delete;
 
   FRIEND_STD_SHARED_PTR(CacheableUndefined)
 };
diff --git a/cppcache/include/geode/CqQuery.hpp b/cppcache/include/geode/CqQuery.hpp
index a6711fcb..f913e49e 100644
--- a/cppcache/include/geode/CqQuery.hpp
+++ b/cppcache/include/geode/CqQuery.hpp
@@ -59,32 +59,38 @@ class CPPCACHE_EXPORT CqQuery  {
    * QueryService.
    * @returns The query string.
    */
-  virtual const char* getQueryString() const = 0;
+  virtual const std::string& getQueryString() const = 0;
+
   /**
    * Get teh query object generated for this CQs query.
    * @return Query object fort he query string
    */
   virtual std::shared_ptr<Query> getQuery() const = 0;
+
   /**
    * Get the name of the CQ.
    * @return the name of the CQ.
    */
-  virtual const char* getName() const = 0;
+  virtual const std::string& getName() const = 0;
+
   /**
    * Get the statistics information of this CQ.
    * @return CqStatistics, the CqStatistics object.
    */
-  virtual const std::shared_ptr<CqStatistics> getStatistics() const = 0;
+  virtual std::shared_ptr<CqStatistics> getStatistics() const = 0;
+
   /**
    * Get the Attributes of this CQ.
    * @return CqAttributes, the CqAttributes object.
    */
-  virtual const std::shared_ptr<CqAttributes> getCqAttributes() const = 0;
+  virtual std::shared_ptr<CqAttributes> getCqAttributes() const = 0;
+
   /**
    * Get the AttributesMutator of this CQ.
    * @return CqAttributesMutator, the CqAttributesMutator object.
    */
-  virtual const std::shared_ptr<CqAttributesMutator> getCqAttributesMutator() const = 0;
+  virtual std::shared_ptr<CqAttributesMutator> getCqAttributesMutator()
+      const = 0;
 
   /**
    * Start executing the CQ or if this CQ is stopped earlier, resumes execution
@@ -126,6 +132,7 @@ class CPPCACHE_EXPORT CqQuery  {
    * @endnativeclient
    */
   virtual void execute() = 0;
+
   /**
    *  Stops this CqQuery without releasing resources. Puts the CqQuery into
    *  the STOPPED state. Can be resumed by calling execute or
@@ -157,27 +164,26 @@ class CPPCACHE_EXPORT CqQuery  {
    * This allows to check if the CQ is in running or active.
    * @return boolean true if running, false otherwise
    */
-  virtual bool isRunning() = 0;
+  virtual bool isRunning() const = 0;
 
   /**
    * This allows to check if the CQ is in stopped.
    * @return boolean true if stopped, false otherwise
    */
-  virtual bool isStopped() = 0;
+  virtual bool isStopped() const = 0;
 
   /**
    * This allows to check if the CQ is closed.
    * @return boolean true if closed, false otherwise
    */
-  virtual bool isClosed() = 0;
+  virtual bool isClosed() const = 0;
 
   /**
    * This allows to check if the CQ is durable.
    * @return boolean true if durable, false otherwise
    * @since 5.5
    */
-  virtual bool isDurable() = 0;
-
+  virtual bool isDurable() const = 0;
 };
 
 }  // namespace client
diff --git a/cppcache/include/geode/CqResults.hpp b/cppcache/include/geode/CqResults.hpp
index 861d9c18..fea9a0c0 100644
--- a/cppcache/include/geode/CqResults.hpp
+++ b/cppcache/include/geode/CqResults.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_CQRESULTS_H_
-#define GEODE_CQRESULTS_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_CQRESULTS_H_
+#define GEODE_CQRESULTS_H_
+
 /**
  * @file
  */
@@ -29,6 +29,7 @@
 #include "Serializable.hpp"
 #include "CacheableBuiltins.hpp"
 #include "SelectResults.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
@@ -40,6 +41,7 @@ namespace client {
  * This will be a StructSet.
  */
 class CPPCACHE_EXPORT CqResults : public SelectResults {};
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/include/geode/CqState.hpp b/cppcache/include/geode/CqState.hpp
index 43b8d046..c4fc4031 100644
--- a/cppcache/include/geode/CqState.hpp
+++ b/cppcache/include/geode/CqState.hpp
@@ -46,10 +46,11 @@ class CPPCACHE_EXPORT CqState {
     CLOSING = 3,
     INVALID
   } StateType;
+
   /**
    * Returns the state in string form.
    */
-  const char* toString() const;
+  const std::string& toString() const;
 
   /**
    * Returns true if the CQ is in Running state.
@@ -70,11 +71,19 @@ class CPPCACHE_EXPORT CqState {
    * Returns true if the CQ is in Closing state.
    */
   bool isClosing() const;
+
   void setState(CqState::StateType state);
-  CqState::StateType getState();
+
+  CqState::StateType getState() const;
 
  private:
   StateType m_state;
+
+  static const std::string STOPPED_STRING;
+  static const std::string RUNNING_STRING;
+  static const std::string CLOSED_STRING;
+  static const std::string CLOSING_STRING;
+  static const std::string INVALID_STRING;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/DataInput.hpp b/cppcache/include/geode/DataInput.hpp
index e68456b7..1fccc924 100644
--- a/cppcache/include/geode/DataInput.hpp
+++ b/cppcache/include/geode/DataInput.hpp
@@ -870,16 +870,6 @@ class CPPCACHE_EXPORT DataInput {
     return result;
   }
 
-  /*
-   * This is for internal use
-   */
-  const char* getPoolName() { return m_poolName; }
-
-  /*
-   * This is for internal use
-   */
-  void setPoolName(const char* poolName) { m_poolName = poolName; }
-
   virtual const Cache* getCache();
 
  protected:
@@ -888,7 +878,7 @@ class CPPCACHE_EXPORT DataInput {
       : m_buf(m_buffer),
         m_bufHead(m_buffer),
         m_bufLength(len),
-        m_poolName(nullptr),
+        m_poolName(EMPTY_STRING),
         m_cache(cache) {}
 
   virtual const SerializationRegistry& getSerializationRegistry() const;
@@ -897,7 +887,7 @@ class CPPCACHE_EXPORT DataInput {
   const uint8_t* m_buf;
   const uint8_t* m_bufHead;
   int32_t m_bufLength;
-  const char* m_poolName;
+  std::reference_wrapper<const std::string> m_poolName;
   const Cache* m_cache;
 
   std::shared_ptr<Serializable> readObjectInternal(int8_t typeId = -1);
@@ -923,12 +913,11 @@ class CPPCACHE_EXPORT DataInput {
 
   inline void _checkBufferSize(int32_t size, int32_t line) {
     if ((m_bufLength - (m_buf - m_bufHead)) < size) {
-      char exMsg[128];
-      gf_sprintf(exMsg,
-                 "DataInput: attempt to read beyond buffer at line %d: "
-                 "available buffer size %d, attempted read of size %d ",
-                 line, m_bufLength - (m_buf - m_bufHead), size);
-      throw OutOfRangeException(exMsg);
+      throw OutOfRangeException(
+          "DataInput: attempt to read beyond buffer at line " +
+          std::to_string(line) + ": available buffer size " +
+          std::to_string(m_bufLength - (m_buf - m_bufHead)) +
+          ", attempted read of size " + std::to_string(size));
     }
   }
 
@@ -996,6 +985,12 @@ class CPPCACHE_EXPORT DataInput {
     }
   }
 
+  const std::string& getPoolName() const { return m_poolName; }
+
+  void setPoolName(const std::string& poolName) {
+    m_poolName = std::ref(poolName);
+  }
+
   // disable other constructors and assignment
   DataInput() = delete;
   DataInput(const DataInput&) = delete;
diff --git a/cppcache/include/geode/DataOutput.hpp b/cppcache/include/geode/DataOutput.hpp
index 20dba2d0..1c77f357 100644
--- a/cppcache/include/geode/DataOutput.hpp
+++ b/cppcache/include/geode/DataOutput.hpp
@@ -661,16 +661,6 @@ class CPPCACHE_EXPORT DataOutput {
     }
   }
 
-  /*
-   * This is for internal use
-   */
-  const char* getPoolName() { return m_poolName; }
-
-  /*
-   * This is for internal use
-   */
-  void setPoolName(const char* poolName) { m_poolName = poolName; }
-
   uint8_t* getBufferCopyFrom(const uint8_t* from, uint32_t length) {
     uint8_t* result;
     GF_NEW(result, uint8_t[length]);
@@ -699,7 +689,6 @@ class CPPCACHE_EXPORT DataOutput {
   static void acquireLock();
   static void releaseLock();
 
-  const char* m_poolName;
   // memory m_buffer to encode to.
   uint8_t* m_bytes;
   // cursor.
@@ -712,6 +701,7 @@ class CPPCACHE_EXPORT DataOutput {
   // flag to indicate we have a big buffer
   volatile bool m_haveBigBuffer;
   const Cache* m_cache;
+  std::reference_wrapper<const std::string> m_poolName;
 
   inline static void getEncodedLength(const char val, int32_t& encodedLen) {
     if ((val == 0) || (val & 0x80)) {
@@ -772,6 +762,12 @@ class CPPCACHE_EXPORT DataOutput {
     writeNoCheck(static_cast<uint8_t>(value));
   }
 
+  const std::string& getPoolName() const { return m_poolName; }
+
+  void setPoolName(const std::string& poolName) {
+    m_poolName = std::ref(poolName);
+  }
+
   static uint8_t* checkoutBuffer(uint32_t* size);
   static void checkinBuffer(uint8_t* buffer, uint32_t size);
 
diff --git a/cppcache/include/geode/Delta.hpp b/cppcache/include/geode/Delta.hpp
index da6da6b1..746a3023 100644
--- a/cppcache/include/geode/Delta.hpp
+++ b/cppcache/include/geode/Delta.hpp
@@ -54,7 +54,7 @@ class CPPCACHE_EXPORT Delta {
    * returns false, the object is serialized by invoking
    * <code>Cacheable::toData( DataOutput& )</code>.
    */
-  virtual bool hasDelta() = 0;
+  virtual bool hasDelta() const = 0;
 
   /**
    * Writes out delta information to out in a user-defined format. This is
@@ -88,7 +88,7 @@ class CPPCACHE_EXPORT Delta {
    * a buffer, then deserializing from the buffer thus creating a clone of the
    * original.
    */
-  virtual std::shared_ptr<Delta> clone();
+  virtual std::shared_ptr<Delta> clone() const;
 
   virtual ~Delta() {}
 
diff --git a/cppcache/include/geode/DiskPolicyType.hpp b/cppcache/include/geode/DiskPolicyType.hpp
index 1a9c5c17..d7ac01a7 100644
--- a/cppcache/include/geode/DiskPolicyType.hpp
+++ b/cppcache/include/geode/DiskPolicyType.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_DISKPOLICYTYPE_H_
-#define GEODE_DISKPOLICYTYPE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,10 +15,18 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_DISKPOLICYTYPE_H_
+#define GEODE_DISKPOLICYTYPE_H_
+
+#include <string>
+
+#include "geode_globals.hpp"
+
 /**
  * @file
  */
-#include "geode_globals.hpp"
 
 namespace apache {
 namespace geode {
@@ -43,10 +46,12 @@ class CPPCACHE_EXPORT DiskPolicyType {
   typedef enum { NONE = 0, OVERFLOWS, PERSIST } PolicyType;
 
   /** Returns the Name of the Lru action represented by specified ordinal. */
-  static const char* fromOrdinal(const uint8_t ordinal);
+  static const std::string& fromOrdinal(const uint8_t ordinal);
+
+  static const std::string& fromEnum(const PolicyType policyType);
 
   /** Returns the type of the Lru action represented by name. */
-  static PolicyType fromName(const char* name);
+  static PolicyType fromName(const std::string& name);
 
   /** Returns whether this is one of the overflow to disk type.
    * @return true if this is any action other than NONE
@@ -59,6 +64,7 @@ class CPPCACHE_EXPORT DiskPolicyType {
   inline static bool isNone(const PolicyType type) {
     return (type == DiskPolicyType::NONE);
   }
+
   /** Return whether this is <code>persist</code>. */
   inline static bool isPersist(const PolicyType type) {
     return (type == DiskPolicyType::PERSIST);
@@ -66,8 +72,8 @@ class CPPCACHE_EXPORT DiskPolicyType {
 
  private:
   /** No instance allowed. */
-  DiskPolicyType(){};
-  static const char* names[];
+  DiskPolicyType() = delete;
+  static const std::string names[];
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/DistributedSystem.hpp b/cppcache/include/geode/DistributedSystem.hpp
index 8b4f3090..f9e4fd29 100644
--- a/cppcache/include/geode/DistributedSystem.hpp
+++ b/cppcache/include/geode/DistributedSystem.hpp
@@ -89,7 +89,7 @@ class CPPCACHE_EXPORT DistributedSystem {
    */
   virtual const std::string& getName() const;
 
-  statistics::StatisticsManager* getStatisticsManager() {
+  statistics::StatisticsManager* getStatisticsManager() const {
     return m_statisticsManager.get();
   }
 
@@ -108,22 +108,21 @@ class CPPCACHE_EXPORT DistributedSystem {
  private:
   std::string m_name;
   bool m_connected;
-
   std::unique_ptr<statistics::StatisticsManager> m_statisticsManager;
-
   std::unique_ptr<SystemProperties> m_sysProps;
 
  public:
   DistributedSystemImpl* m_impl;
-  friend class CacheRegionHelper;
-  friend class DistributedSystemImpl;
-  friend class TcrConnection;
 
  private:
   DistributedSystem(const DistributedSystem&);
   const DistributedSystem& operator=(const DistributedSystem&);
 
-  void logSystemInformation();
+  void logSystemInformation() const;
+
+  friend class CacheRegionHelper;
+  friend class DistributedSystemImpl;
+  friend class TcrConnection;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/Exception.hpp b/cppcache/include/geode/Exception.hpp
index 46ac53e6..7891f073 100644
--- a/cppcache/include/geode/Exception.hpp
+++ b/cppcache/include/geode/Exception.hpp
@@ -35,19 +35,10 @@ namespace apache {
 namespace geode {
 namespace client {
 
-#define GF_EX_MSG_LIMIT 2048
-
-class DistributedSystem;
-class CacheableString;
 class StackTrace;
-#pragma warning( push )
-/*
-warning C4275:
-non dll-interface class 'std::exception' used as base for dll-interface
-class 'apache::geode::client::Exception' 
 
-Ok to ignore because it is ok if the class is a std class.
-*/
+// Ignore C4275 - This class extends std C++ class
+#pragma warning(push)
 #pragma warning(disable : 4275)
 
 /**
@@ -59,12 +50,9 @@ class CPPCACHE_EXPORT Exception : public std::exception {
    * @brief public methods
    */
  public:
-  /** Creates an exception.
-   * @param  msg1 message pointer, this is copied into the exception.
-   **/
-  explicit Exception(const char* msg1);
-
-  explicit Exception(const std::string& msg1);
+  explicit Exception(const std::string& message);
+  Exception(std::string&& message);
+  Exception(const char* message);
 
   /** Creates an exception as a copy of the given other exception.
    * @param  other the original exception.
@@ -83,20 +71,18 @@ class CPPCACHE_EXPORT Exception : public std::exception {
   virtual std::string getStackTrace() const;
 
   /** Return the name of this exception type. */
-  virtual const char* getName() const;
+  virtual std::string getName() const;
+
+  virtual const std::string& getMessage() const noexcept;
 
   virtual const char* what() const noexcept override;
 
  private:
-  std::shared_ptr<StackTrace> m_stack;
-
   std::string message;
-
-  friend class DistributedSystem;
+  std::shared_ptr<StackTrace> m_stack;
 };
 
-#pragma warning( pop )
-
+#pragma warning(pop)
 
 class CacheableKey;
 typedef std::unordered_map<std::shared_ptr<CacheableKey>,
diff --git a/cppcache/include/geode/ExceptionTypes.hpp b/cppcache/include/geode/ExceptionTypes.hpp
index 39fd886c..1c6f5053 100644
--- a/cppcache/include/geode/ExceptionTypes.hpp
+++ b/cppcache/include/geode/ExceptionTypes.hpp
@@ -20,9 +20,9 @@
 #ifndef GEODE_EXCEPTIONTYPES_H_
 #define GEODE_EXCEPTIONTYPES_H_
 
-
 #include "geode_globals.hpp"
 #include "geode/Exception.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
@@ -41,7 +41,9 @@ class  CPPCACHE_EXPORT AssertionException : public Exception {
 public:
   using Exception::Exception;
   virtual ~AssertionException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::AssertionException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::AssertionException";
+  }
 };
 
 /**
@@ -51,7 +53,9 @@ class  CPPCACHE_EXPORT IllegalArgumentException : public Exception {
 public:
   using Exception::Exception;
   virtual ~IllegalArgumentException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::IllegalArgumentException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::IllegalArgumentException";
+  }
 };
 
 /**
@@ -61,7 +65,9 @@ class  CPPCACHE_EXPORT IllegalStateException : public Exception {
 public:
   using Exception::Exception;
   virtual ~IllegalStateException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::IllegalStateException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::IllegalStateException";
+  }
 };
 
 /**
@@ -71,7 +77,9 @@ class  CPPCACHE_EXPORT CacheExistsException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheExistsException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheExistsException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheExistsException";
+  }
 };
 
 /**
@@ -81,7 +89,9 @@ class  CPPCACHE_EXPORT CacheXmlException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheXmlException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheXmlException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheXmlException";
+  }
 };
 /**
  *@brief Thrown when a timout occurs.
@@ -90,7 +100,9 @@ class  CPPCACHE_EXPORT TimeoutException : public Exception {
 public:
   using Exception::Exception;
   virtual ~TimeoutException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::TimeoutException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::TimeoutException";
+  }
 };
 
 /**
@@ -100,7 +112,9 @@ class  CPPCACHE_EXPORT CacheWriterException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheWriterException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheWriterException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheWriterException";
+  }
 };
 
 /**
@@ -110,7 +124,9 @@ class  CPPCACHE_EXPORT RegionExistsException : public Exception {
 public:
   using Exception::Exception;
   virtual ~RegionExistsException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::RegionExistsException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::RegionExistsException";
+  }
 };
 
 /**
@@ -120,7 +136,9 @@ class  CPPCACHE_EXPORT CacheClosedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheClosedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheClosedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheClosedException";
+  }
 };
 
 /**
@@ -130,7 +148,9 @@ class  CPPCACHE_EXPORT LeaseExpiredException : public Exception {
 public:
   using Exception::Exception;
   virtual ~LeaseExpiredException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::LeaseExpiredException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::LeaseExpiredException";
+  }
 };
 
 /**
@@ -140,7 +160,9 @@ class  CPPCACHE_EXPORT CacheLoaderException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheLoaderException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheLoaderException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheLoaderException";
+  }
 };
 
 /**
@@ -150,7 +172,9 @@ class  CPPCACHE_EXPORT RegionDestroyedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~RegionDestroyedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::RegionDestroyedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::RegionDestroyedException";
+  }
 };
 
 /**
@@ -160,7 +184,9 @@ class  CPPCACHE_EXPORT EntryDestroyedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~EntryDestroyedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::EntryDestroyedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::EntryDestroyedException";
+  }
 };
 
 /**
@@ -170,7 +196,9 @@ class  CPPCACHE_EXPORT NoSystemException : public Exception {
 public:
   using Exception::Exception;
   virtual ~NoSystemException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::NoSystemException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::NoSystemException";
+  }
 };
 
 /**
@@ -181,7 +209,9 @@ class  CPPCACHE_EXPORT AlreadyConnectedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~AlreadyConnectedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::AlreadyConnectedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::AlreadyConnectedException";
+  }
 };
 
 /**
@@ -191,7 +221,9 @@ class  CPPCACHE_EXPORT FileNotFoundException : public Exception {
 public:
   using Exception::Exception;
   virtual ~FileNotFoundException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::FileNotFoundException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::FileNotFoundException";
+  }
 };
 
 /**
@@ -201,7 +233,9 @@ class  CPPCACHE_EXPORT InterruptedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~InterruptedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::InterruptedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::InterruptedException";
+  }
 };
 
 /**
@@ -212,7 +246,9 @@ class  CPPCACHE_EXPORT UnsupportedOperationException : public Exception {
 public:
   using Exception::Exception;
   virtual ~UnsupportedOperationException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::UnsupportedOperationException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::UnsupportedOperationException";
+  }
 };
 
 /**
@@ -223,7 +259,9 @@ class  CPPCACHE_EXPORT StatisticsDisabledException : public Exception {
 public:
   using Exception::Exception;
   virtual ~StatisticsDisabledException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::StatisticsDisabledException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::StatisticsDisabledException";
+  }
 };
 
 /**
@@ -233,7 +271,9 @@ class  CPPCACHE_EXPORT ConcurrentModificationException : public Exception {
 public:
   using Exception::Exception;
   virtual ~ConcurrentModificationException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::ConcurrentModificationException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::ConcurrentModificationException";
+  }
 };
 
 /**
@@ -243,7 +283,9 @@ class  CPPCACHE_EXPORT UnknownException : public Exception {
 public:
   using Exception::Exception;
   virtual ~UnknownException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::UnknownException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::UnknownException";
+  }
 };
 
 /**
@@ -253,7 +295,9 @@ class  CPPCACHE_EXPORT ClassCastException : public Exception {
 public:
   using Exception::Exception;
   virtual ~ClassCastException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::ClassCastException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::ClassCastException";
+  }
 };
 
 /**
@@ -263,7 +307,9 @@ class  CPPCACHE_EXPORT EntryNotFoundException : public Exception {
 public:
   using Exception::Exception;
   virtual ~EntryNotFoundException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::EntryNotFoundException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::EntryNotFoundException";
+  }
 };
 
 /**
@@ -273,7 +319,9 @@ class  CPPCACHE_EXPORT GeodeIOException : public Exception {
 public:
   using Exception::Exception;
   virtual ~GeodeIOException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::GeodeIOException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::GeodeIOException";
+  }
 };
 
 /**
@@ -283,7 +331,9 @@ class  CPPCACHE_EXPORT GeodeConfigException : public Exception {
 public:
   using Exception::Exception;
   virtual ~GeodeConfigException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::GeodeConfigException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::GeodeConfigException";
+  }
 };
 
 /**
@@ -294,7 +344,9 @@ class  CPPCACHE_EXPORT NullPointerException : public Exception {
 public:
   using Exception::Exception;
   virtual ~NullPointerException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::NullPointerException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::NullPointerException";
+  }
 };
 
 /**
@@ -304,7 +356,9 @@ class  CPPCACHE_EXPORT EntryExistsException : public Exception {
 public:
   using Exception::Exception;
   virtual ~EntryExistsException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::EntryExistsException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::EntryExistsException";
+  }
 };
 
 /**
@@ -315,7 +369,9 @@ class  CPPCACHE_EXPORT NotConnectedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~NotConnectedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::NotConnectedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::NotConnectedException";
+  }
 };
 
 /**
@@ -325,7 +381,9 @@ class  CPPCACHE_EXPORT CacheProxyException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheProxyException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheProxyException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheProxyException";
+  }
 };
 
 /**
@@ -335,7 +393,9 @@ class  CPPCACHE_EXPORT OutOfMemoryException : public Exception {
 public:
   using Exception::Exception;
   virtual ~OutOfMemoryException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::OutOfMemoryException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::OutOfMemoryException";
+  }
 };
 
 /**
@@ -346,7 +406,9 @@ class  CPPCACHE_EXPORT NotOwnerException : public Exception {
 public:
   using Exception::Exception;
   virtual ~NotOwnerException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::NotOwnerException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::NotOwnerException";
+  }
 };
 
 /**
@@ -356,7 +418,9 @@ class  CPPCACHE_EXPORT WrongRegionScopeException : public Exception {
 public:
   using Exception::Exception;
   virtual ~WrongRegionScopeException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::WrongRegionScopeException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::WrongRegionScopeException";
+  }
 };
 
 /**
@@ -366,7 +430,9 @@ class  CPPCACHE_EXPORT BufferSizeExceededException : public Exception {
 public:
   using Exception::Exception;
   virtual ~BufferSizeExceededException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::BufferSizeExceededException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::BufferSizeExceededException";
+  }
 };
 
 /**
@@ -376,7 +442,9 @@ class  CPPCACHE_EXPORT RegionCreationFailedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~RegionCreationFailedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::RegionCreationFailedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::RegionCreationFailedException";
+  }
 };
 
 /**
@@ -386,7 +454,9 @@ class  CPPCACHE_EXPORT FatalInternalException : public Exception {
 public:
   using Exception::Exception;
   virtual ~FatalInternalException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::FatalInternalException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::FatalInternalException";
+  }
 };
 
 /**
@@ -397,7 +467,9 @@ class  CPPCACHE_EXPORT DiskFailureException : public Exception {
 public:
   using Exception::Exception;
   virtual ~DiskFailureException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::DiskFailureException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::DiskFailureException";
+  }
 };
 
 /**
@@ -408,7 +480,9 @@ class  CPPCACHE_EXPORT DiskCorruptException : public Exception {
 public:
   using Exception::Exception;
   virtual ~DiskCorruptException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::DiskCorruptException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::DiskCorruptException";
+  }
 };
 
 /**
@@ -418,7 +492,9 @@ class  CPPCACHE_EXPORT InitFailedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~InitFailedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::InitFailedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::InitFailedException";
+  }
 };
 
 /**
@@ -428,7 +504,9 @@ class  CPPCACHE_EXPORT ShutdownFailedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~ShutdownFailedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::ShutdownFailedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::ShutdownFailedException";
+  }
 };
 
 /**
@@ -438,7 +516,9 @@ class  CPPCACHE_EXPORT ShutdownFailedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheServerException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheServerException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheServerException";
+  }
 };
 
 /**
@@ -448,7 +528,9 @@ class  CPPCACHE_EXPORT OutOfRangeException : public Exception {
 public:
   using Exception::Exception;
   virtual ~OutOfRangeException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::OutOfRangeException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::OutOfRangeException";
+  }
 };
 
 /**
@@ -458,7 +540,9 @@ class  CPPCACHE_EXPORT QueryException : public Exception {
 public:
   using Exception::Exception;
   virtual ~QueryException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::QueryException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::QueryException";
+  }
 };
 
 /**
@@ -468,7 +552,9 @@ class  CPPCACHE_EXPORT MessageException : public Exception {
 public:
   using Exception::Exception;
   virtual ~MessageException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::MessageException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::MessageException";
+  }
 };
 
 /**
@@ -478,7 +564,9 @@ class  CPPCACHE_EXPORT NotAuthorizedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~NotAuthorizedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::NotAuthorizedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::NotAuthorizedException";
+  }
 };
 
 /**
@@ -488,7 +576,9 @@ class  CPPCACHE_EXPORT AuthenticationFailedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~AuthenticationFailedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::AuthenticationFailedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::AuthenticationFailedException";
+  }
 };
 
 /**
@@ -498,7 +588,9 @@ class  CPPCACHE_EXPORT AuthenticationRequiredException : public Exception {
 public:
   using Exception::Exception;
   virtual ~AuthenticationRequiredException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::AuthenticationRequiredException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::AuthenticationRequiredException";
+  }
 };
 
 /**
@@ -508,7 +600,9 @@ class  CPPCACHE_EXPORT DuplicateDurableClientException : public Exception {
 public:
   using Exception::Exception;
   virtual ~DuplicateDurableClientException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::DuplicateDurableClientException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::DuplicateDurableClientException";
+  }
 };
 
 /**
@@ -518,7 +612,9 @@ class  CPPCACHE_EXPORT CacheListenerException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CacheListenerException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CacheListenerException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CacheListenerException";
+  }
 };
 /**
  *@brief Thrown during continuous query execution time.
@@ -527,7 +623,9 @@ class  CPPCACHE_EXPORT CqException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CqException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CqException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CqException";
+  }
 };
 /**
  *@brief Thrown if the Cq on which the operaion performed is closed
@@ -536,7 +634,9 @@ class  CPPCACHE_EXPORT CqClosedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CqClosedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CqClosedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CqClosedException";
+  }
 };
 /**
  *@brief Thrown if the Cq Query failed
@@ -545,7 +645,9 @@ class  CPPCACHE_EXPORT CqQueryException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CqQueryException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CqQueryException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CqQueryException";
+  }
 };
 /**
  *@brief Thrown if a Cq by this name already exists on this client
@@ -554,7 +656,9 @@ class  CPPCACHE_EXPORT CqExistsException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CqExistsException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CqExistsException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CqExistsException";
+  }
 };
 /**
  *@brief  Thrown if the query doesnot meet the CQ constraints.
@@ -570,7 +674,9 @@ class  CPPCACHE_EXPORT CqInvalidException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CqInvalidException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CqInvalidException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CqInvalidException";
+  }
 };
 /**
  *@brief Thrown if function execution failed
@@ -579,7 +685,9 @@ class  CPPCACHE_EXPORT FunctionExecutionException : public Exception {
 public:
   using Exception::Exception;
   virtual ~FunctionExecutionException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::FunctionExecutionException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::FunctionExecutionException";
+  }
 };
 /**
  *@brief Thrown if the No locators are active to reply for new connection.
@@ -588,7 +696,9 @@ class  CPPCACHE_EXPORT NoAvailableLocatorsException : public Exception {
 public:
   using Exception::Exception;
   virtual ~NoAvailableLocatorsException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::NoAvailableLocatorsException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::NoAvailableLocatorsException";
+  }
 };
 /**
  *@brief Thrown if all connections in the pool are in use.
@@ -597,7 +707,9 @@ class  CPPCACHE_EXPORT AllConnectionsInUseException : public Exception {
 public:
   using Exception::Exception;
   virtual ~AllConnectionsInUseException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::AllConnectionsInUseException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::AllConnectionsInUseException";
+  }
 };
 /**
  *@brief Thrown if Delta could not be applied.
@@ -606,7 +718,9 @@ class  CPPCACHE_EXPORT InvalidDeltaException : public Exception {
 public:
   using Exception::Exception;
   virtual ~InvalidDeltaException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::InvalidDeltaException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::InvalidDeltaException";
+  }
 };
 /**
  *@brief Thrown if a Key is not present in the region.
@@ -615,7 +729,9 @@ class  CPPCACHE_EXPORT KeyNotFoundException : public Exception {
 public:
   using Exception::Exception;
   virtual ~KeyNotFoundException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::KeyNotFoundException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::KeyNotFoundException";
+  }
 };
 /**
  * @brief This is for all Exceptions that may be thrown
@@ -625,7 +741,9 @@ class  CPPCACHE_EXPORT TransactionException : public Exception {
 public:
   using Exception::Exception;
   virtual ~TransactionException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::TransactionException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::TransactionException";
+  }
 };
 /**
  * @brief The RollbackException exception indicates that either the transaction
@@ -636,7 +754,9 @@ class  CPPCACHE_EXPORT RollbackException : public Exception {
 public:
   using Exception::Exception;
   virtual ~RollbackException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::RollbackException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::RollbackException";
+  }
 };
 /**
  * @brief Thrown when a commit fails due to a write conflict.
@@ -646,7 +766,9 @@ class  CPPCACHE_EXPORT CommitConflictException : public Exception {
 public:
   using Exception::Exception;
   virtual ~CommitConflictException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::CommitConflictException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::CommitConflictException";
+  }
 };
 /**
  * @brief Thrown when the transactional data host has shutdown or no longer has
@@ -658,7 +780,9 @@ class  CPPCACHE_EXPORT TransactionDataNodeHasDepartedException : public Exceptio
 public:
   using Exception::Exception;
   virtual ~TransactionDataNodeHasDepartedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::TransactionDataNodeHasDepartedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::TransactionDataNodeHasDepartedException";
+  }
 };
 /**
  * @brief Thrown when a {@link RebalanceOperation} occurs concurrently with a
@@ -669,7 +793,9 @@ class  CPPCACHE_EXPORT TransactionDataRebalancedException : public Exception {
 public:
   using Exception::Exception;
   virtual ~TransactionDataRebalancedException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::TransactionDataRebalancedException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::TransactionDataRebalancedException";
+  }
 };
 
 /**
@@ -679,23 +805,11 @@ class  CPPCACHE_EXPORT PutAllPartialResultException : public Exception {
 public:
   using Exception::Exception;
   virtual ~PutAllPartialResultException() noexcept {}
-  virtual const char* getName() const override { return "apache::geode::client::PutAllPartialResultException"; }
+  virtual std::string getName() const override {
+    return "apache::geode::client::PutAllPartialResultException";
+  }
 };
 
-/**
- *@brief Thrown when a version on which delta is based is different than the
- *current version
- **/
-
-extern void CPPCACHE_EXPORT GfErrTypeThrowException(const char* str,
-                                                    GfErrType err);
-
-#define GfErrTypeToException(str, err)   \
-  {                                      \
-    if (err != GF_NOERR) {               \
-      GfErrTypeThrowException(str, err); \
-    }                                    \
-  }
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/include/geode/Execution.hpp b/cppcache/include/geode/Execution.hpp
index 9146f6a6..a8cd437d 100644
--- a/cppcache/include/geode/Execution.hpp
+++ b/cppcache/include/geode/Execution.hpp
@@ -22,6 +22,7 @@
 
 #include <memory>
 #include <chrono>
+#include <string>
 
 #include "geode_globals.hpp"
 #include "CacheableBuiltins.hpp"
@@ -84,7 +85,7 @@ class CPPCACHE_EXPORT Execution {
    * #withCollector(ResultCollector)}
    */
   virtual std::shared_ptr<ResultCollector> execute(
-      const char* func,
+      const std::string& func,
       std::chrono::milliseconds timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT) = 0;
 
   /**
@@ -105,7 +106,7 @@ class CPPCACHE_EXPORT Execution {
   virtual std::shared_ptr<ResultCollector> execute(
       const std::shared_ptr<CacheableVector>& routingObj,
       const std::shared_ptr<Cacheable>& args,
-      const std::shared_ptr<ResultCollector>& rs, const char* func,
+      const std::shared_ptr<ResultCollector>& rs, const std::string& func,
       std::chrono::milliseconds timeout) = 0;
 };
 
diff --git a/cppcache/include/geode/ExpirationAction.hpp b/cppcache/include/geode/ExpirationAction.hpp
index 90393fdc..39521102 100644
--- a/cppcache/include/geode/ExpirationAction.hpp
+++ b/cppcache/include/geode/ExpirationAction.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_EXPIRATIONACTION_H_
-#define GEODE_EXPIRATIONACTION_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_EXPIRATIONACTION_H_
+#define GEODE_EXPIRATIONACTION_H_
+
+#include <string>
+
 #include "geode_globals.hpp"
 
 /**
@@ -29,6 +31,7 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 /**
  * @class ExpirationAction ExpirationAction.hpp
  * Enumerated type for expiration actions.
@@ -36,21 +39,16 @@ namespace client {
  * @see ExpirationAttributes
  */
 class CPPCACHE_EXPORT ExpirationAction {
-  // public static methods
  public:
-  // types of action
-
   typedef enum {
     /** When the region or cached object expires, it is invalidated. */
     INVALIDATE = 0,
     /** When expired, invalidated locally only. */
     LOCAL_INVALIDATE,
-
     /** When the region or cached object expires, it is destroyed. */
     DESTROY,
     /** When expired, destroyed locally only. */
     LOCAL_DESTROY,
-
     /** invalid type. */
     INVALID_ACTION
   } Action;
@@ -58,7 +56,7 @@ class CPPCACHE_EXPORT ExpirationAction {
   /**
   * @param name the name of the expiration action
   */
-  static Action fromName(const char* name);
+  static Action fromName(const std::string& name);
 
   /**
    * Returns whether this is the action for distributed invalidate.
@@ -103,12 +101,13 @@ class CPPCACHE_EXPORT ExpirationAction {
   }
 
   /** Return the ExpirationAction represented by the specified ordinal */
-  static const char* fromOrdinal(const int ordinal);
+  static const std::string& fromOrdinal(const int ordinal);
+
+  static const std::string& fromEnum(const Action action);
 
  private:
-  ExpirationAction();
-  ~ExpirationAction();
-  static char* names[];
+  ExpirationAction() = delete;
+  static const std::string names[];
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/FixedPartitionResolver.hpp b/cppcache/include/geode/FixedPartitionResolver.hpp
index e6519b5a..d01718a7 100644
--- a/cppcache/include/geode/FixedPartitionResolver.hpp
+++ b/cppcache/include/geode/FixedPartitionResolver.hpp
@@ -87,7 +87,7 @@ class CPPCACHE_EXPORT FixedPartitionResolver : public PartitionResolver {
   * @return partition-name associated with node which allows mapping of given
   *         data to user defined partition
   */
-  virtual const char* getPartitionName(const EntryEvent& opDetails) = 0;
+  virtual const std::string& getPartitionName(const EntryEvent& opDetails) = 0;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/GeodeCache.hpp b/cppcache/include/geode/GeodeCache.hpp
index 57b42922..9a3da8ed 100644
--- a/cppcache/include/geode/GeodeCache.hpp
+++ b/cppcache/include/geode/GeodeCache.hpp
@@ -55,13 +55,21 @@ class CPPCACHE_EXPORT GeodeCache : public RegionService {
    */
   virtual const std::string& getName() const = 0;
 
-  /**
-   * Initializes the cache from an xml file
-   *
-   * @param cacheXml
-   *        Valid cache.xml file
+  /** Initialize the cache by the contents of an xml file
+   * @param  cacheXml
+   *         The xml file
+   * @throws OutOfMemoryException
+   * @throws CacheXmlException
+   *         Something went wrong while parsing the XML
+   * @throws IllegalStateException
+   *         If xml file is well-flrmed but not valid
+   * @throws RegionExistsException if a region is already in
+   *         this cache
+   * @throws CacheClosedException if the cache is closed
+   *         at the time of region creation
+   * @throws UnknownException otherwise
    */
-  virtual void initializeDeclarativeCache(const char* cacheXml) = 0;
+  virtual void initializeDeclarativeCache(const std::string& cacheXml) = 0;
 
   /**
    * Returns the distributed system that this cache was
@@ -72,13 +80,13 @@ class CPPCACHE_EXPORT GeodeCache : public RegionService {
   /**
    * Returns whether Cache saves unread fields for Pdx types.
    */
-  virtual bool getPdxIgnoreUnreadFields() = 0;
+  virtual bool getPdxIgnoreUnreadFields() const = 0;
 
   /**
    * Returns whether { @link PdxInstance} is preferred for PDX types instead of
    * C++ object.
    */
-  virtual bool getPdxReadSerialized() = 0;
+  virtual bool getPdxReadSerialized() const = 0;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/PartitionResolver.hpp b/cppcache/include/geode/PartitionResolver.hpp
index 8b07704c..eec104ce 100644
--- a/cppcache/include/geode/PartitionResolver.hpp
+++ b/cppcache/include/geode/PartitionResolver.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PARTITIONRESOLVER_H_
-#define GEODE_PARTITIONRESOLVER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,16 +15,23 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_PARTITIONRESOLVER_H_
+#define GEODE_PARTITIONRESOLVER_H_
+
 #include <memory>
-#include "Cacheable.hpp"
 #include <string>
 
+#include "Cacheable.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
 
 class EntryEvent;
 class CacheableKey;
+
 /**
  * Implementers of interface <code>PartitionResolver</code> enable custom
  * partitioning on the <code>PartitionedRegion</code>.
@@ -81,7 +83,7 @@ class CPPCACHE_EXPORT PartitionResolver {
    * Returns the name of the PartitionResolver
    * @return String name
    */
-  virtual const char* getName();
+  virtual const std::string& getName();
 
   /**
    * @param opDetails the detail of the entry event
@@ -100,9 +102,8 @@ class CPPCACHE_EXPORT PartitionResolver {
   PartitionResolver();
 
  private:
-  // never implemented.
-  PartitionResolver(const PartitionResolver& other);
-  void operator=(const PartitionResolver& other);
+  PartitionResolver(const PartitionResolver& other) = delete;
+  void operator=(const PartitionResolver& other) = delete;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/PdxFieldTypes.hpp b/cppcache/include/geode/PdxFieldTypes.hpp
index b11dcae7..5586cdac 100644
--- a/cppcache/include/geode/PdxFieldTypes.hpp
+++ b/cppcache/include/geode/PdxFieldTypes.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXFIELDTYPES_H_
-#define GEODE_PDXFIELDTYPES_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_PDXFIELDTYPES_H_
+#define GEODE_PDXFIELDTYPES_H_
+
 namespace apache {
 namespace geode {
 namespace client {
diff --git a/cppcache/include/geode/PdxInstance.hpp b/cppcache/include/geode/PdxInstance.hpp
index 26935a63..ec7c1b4a 100644
--- a/cppcache/include/geode/PdxInstance.hpp
+++ b/cppcache/include/geode/PdxInstance.hpp
@@ -73,7 +73,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @return <code>true</code> if the named field exists; otherwise
    * <code>false</code>
    */
-  virtual bool hasField(const char* fieldname) = 0;
+  virtual bool hasField(const std::string& fieldname) = 0;
 
   /**
    * Reads the named field and set its value in std::shared_ptr<Cacheable> type
@@ -89,7 +89,8 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @see serializationRegistry->addPdxType
    * @see PdxInstance#hasField
    */
-  virtual std::shared_ptr<Cacheable> getCacheableField(const char* fieldname) const = 0;
+  virtual std::shared_ptr<Cacheable> getCacheableField(
+      const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in bool type out param.
@@ -100,7 +101,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual bool getBooleanField(const char* fieldname) const = 0;
+  virtual bool getBooleanField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in signed char type out param.
@@ -111,7 +112,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual int8_t getByteField(const char* fieldname) const = 0;
+  virtual int8_t getByteField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in int16_t type out param.
@@ -122,7 +123,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual int16_t getShortField(const char* fieldname) const = 0;
+  virtual int16_t getShortField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in int32_t type out param.
@@ -131,7 +132,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 int32_t getIntField(const char* fieldname) const = 0;
+  virtual int32_t getIntField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in int64_t type out param.
@@ -142,7 +143,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual int64_t getLongField(const char* fieldname) const = 0;
+  virtual int64_t getLongField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in float type out param.
@@ -153,7 +154,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual float getFloatField(const char* fieldname) const = 0;
+  virtual float getFloatField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in double type out param.
@@ -164,7 +165,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual double getDoubleField(const char* fieldname) const = 0;
+  virtual double getDoubleField(const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in char type out param.
@@ -175,7 +176,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual char16_t getCharField(const char* fieldName) const = 0;
+  virtual char16_t getCharField(const std::string& fieldName) const = 0;
 
   /**
    * Reads the named field and set its value in bool array type out param.
@@ -187,7 +188,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, bool** value,
+  virtual void getField(const std::string& fieldname, bool** value,
                         int32_t& length) const = 0;
 
   /**
@@ -200,7 +201,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, signed char** value,
+  virtual void getField(const std::string& fieldname, signed char** value,
                         int32_t& length) const = 0;
 
   /**
@@ -218,7 +219,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, unsigned char** value,
+  virtual void getField(const std::string& fieldname, unsigned char** value,
                         int32_t& length) const = 0;
 
   /**
@@ -231,7 +232,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int16_t** value,
+  virtual void getField(const std::string& fieldname, int16_t** value,
                         int32_t& length) const = 0;
 
   /**
@@ -244,7 +245,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int32_t** value,
+  virtual void getField(const std::string& fieldname, int32_t** value,
                         int32_t& length) const = 0;
 
   /**
@@ -257,7 +258,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int64_t** value,
+  virtual void getField(const std::string& fieldname, int64_t** value,
                         int32_t& length) const = 0;
 
   /**
@@ -270,7 +271,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, float** value,
+  virtual void getField(const std::string& fieldname, float** value,
                         int32_t& length) const = 0;
 
   /**
@@ -283,7 +284,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, double** value,
+  virtual void getField(const std::string& fieldname, double** value,
                         int32_t& length) const = 0;
 
   // charArray
@@ -297,7 +298,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, wchar_t** value,
+  virtual void getField(const std::string& fieldName, wchar_t** value,
                         int32_t& length) const = 0;
 
   /**
@@ -310,7 +311,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, char** value,
+  virtual void getField(const std::string& fieldName, char** value,
                         int32_t& length) const = 0;
 
   // String
@@ -323,7 +324,8 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, wchar_t** value) const = 0;
+  virtual void getField(const std::string& fieldname,
+                        wchar_t** value) const = 0;
 
   /**
    * Reads the named field and set its value in char* type out param.
@@ -334,7 +336,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, char** value) const = 0;
+  virtual void getField(const std::string& fieldname, char** value) const = 0;
 
   // StringArray
   /**
@@ -347,7 +349,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, wchar_t*** value,
+  virtual void getField(const std::string& fieldname, wchar_t*** value,
                         int32_t& length) const = 0;
 
   /**
@@ -360,7 +362,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, char*** value,
+  virtual void getField(const std::string& fieldname, char*** value,
                         int32_t& length) const = 0;
 
   /**
@@ -375,7 +377,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @see PdxInstance#hasField
    */
   virtual std::shared_ptr<CacheableDate> getCacheableDateField(
-      const char* fieldname) const = 0;
+      const std::string& fieldname) const = 0;
 
   /**
    * Reads the named field and set its value in array of byte arrays type out
@@ -389,7 +391,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, int8_t*** value,
+  virtual void getField(const std::string& fieldName, int8_t*** value,
                         int32_t& arrayLength,
                         int32_t*& elementLength) const = 0;
 
@@ -408,7 +410,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @see PdxInstance#hasField
    */
   virtual std::shared_ptr<CacheableObjectArray> getCacheableObjectArrayField(
-      const char* fieldname) const = 0;
+      const std::string& fieldname) const = 0;
 
   /**
    * Checks if the named field was {@link PdxWriter#markIdentityField}marked as
@@ -421,7 +423,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @return <code>true</code> if the named field exists and was marked as an
    * identify field; otherwise <code>false</code>
    */
-  virtual bool isIdentityField(const char* fieldname) = 0;
+  virtual bool isIdentityField(const std::string& fieldname) = 0;
 
   /**
    * Creates and returns a {@link WritablePdxInstance} whose initial
@@ -450,7 +452,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual int32_t hashcode() const = 0;
+  virtual int32_t hashcode() const override = 0;
 
   /**
    * Prints out all of the identity fields of this PdxInstance.
@@ -463,12 +465,12 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual std::shared_ptr<CacheableString> toString() const = 0;
+  virtual std::string toString() const override = 0;
 
   /**
    * @brief serialize this object. This is an internal method.
    */
-  virtual void toData(DataOutput& output) const {
+  virtual void toData(DataOutput& output) const override {
     PdxSerializable::toData(output);
   }
 
@@ -476,7 +478,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * @brief deserialize this object, typical implementation should return
    * the 'this' pointer. This is an internal method.
    */
-  virtual void fromData(DataInput& input) {
+  virtual void fromData(DataInput& input) override {
     return PdxSerializable::fromData(input);
   }
 
@@ -522,13 +524,13 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual bool operator==(const CacheableKey& other) const = 0;
+  virtual bool operator==(const CacheableKey& other) const override = 0;
 
   /** @return the size of the object in bytes
    * This is an internal method.
    * It is used in case of heap LRU property is set.
    */
-  virtual uint32_t objectSize() const = 0;
+  virtual uint32_t objectSize() const override = 0;
 
   /**
    * Return an unmodifiable list of the field names on this PdxInstance.
@@ -542,13 +544,13 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * method.
    * @param PdxWriter to serialize the PDX object
    */
-  virtual void toData(std::shared_ptr<PdxWriter> output) = 0;
+  virtual void toData(std::shared_ptr<PdxWriter> output) const override = 0;
 
   /**
    * @brief Deserialize this object. This is an internal method.
    * @param PdxReader to Deserialize the PDX object
    */
-  virtual void fromData(std::shared_ptr<PdxReader> input) = 0;
+  virtual void fromData(std::shared_ptr<PdxReader> input) override = 0;
 
   /**
    * Return the full name of the class that this pdx instance represents.
@@ -557,7 +559,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * to get classname
    * or if PdxType is not defined for PdxInstance.
    */
-  virtual const char* getClassName() const = 0;
+  virtual const std::string& getClassName() const override = 0;
 
   /**
    * Return the type @see PdxInstance::PdxFieldTypes of the field in the pdx
@@ -568,7 +570,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable {
    * to get classname or if PdxType is not defined for PdxInstance.
    */
   virtual PdxFieldTypes::PdxFieldType getFieldType(
-      const char* fieldname) const = 0;
+      const std::string& fieldname) const = 0;
 
  protected:
   /**
diff --git a/cppcache/include/geode/PdxInstanceFactory.hpp b/cppcache/include/geode/PdxInstanceFactory.hpp
index 6982a5a8..683ae337 100644
--- a/cppcache/include/geode/PdxInstanceFactory.hpp
+++ b/cppcache/include/geode/PdxInstanceFactory.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXINSTANCEFACTORY_H_
-#define GEODE_PDXINSTANCEFACTORY_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_PDXINSTANCEFACTORY_H_
+#define GEODE_PDXINSTANCEFACTORY_H_
+
 #include "PdxInstance.hpp"
 #include "geode_globals.hpp"
 #include "CacheableBuiltins.hpp"
@@ -79,8 +79,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeChar(const char* fieldName,
-                                                        char16_t value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeChar(
+      const std::string& fieldName, char16_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -92,8 +92,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeChar(const char* fieldName,
-                                                        char value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeChar(
+      const std::string& fieldName, char value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -106,7 +106,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeBoolean(
-      const char* fieldName, bool value) = 0;
+      const std::string& fieldName, bool value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -118,8 +118,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeByte(const char* fieldName,
-                                                        int8_t value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeByte(
+      const std::string& fieldName, int8_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -131,8 +131,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeShort(const char* fieldName,
-                                                         int16_t value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeShort(
+      const std::string& fieldName, int16_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -144,8 +144,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeInt(const char* fieldName,
-                                                       int32_t value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeInt(
+      const std::string& fieldName, int32_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -157,8 +157,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeLong(const char* fieldName,
-                                                        int64_t value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeLong(
+      const std::string& fieldName, int64_t value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -170,8 +170,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeFloat(const char* fieldName,
-                                                         float value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeFloat(
+      const std::string& fieldName, float value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -183,8 +183,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeDouble(const char* fieldName,
-                                                          double value) = 0;
+  virtual std::shared_ptr<PdxInstanceFactory> writeDouble(
+      const std::string& fieldName, double value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -197,7 +197,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeDate(
-      const char* fieldName, std::shared_ptr<CacheableDate> value) = 0;
+      const std::string& fieldName, std::shared_ptr<CacheableDate> value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -210,7 +210,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeWideString(
-      const char* fieldName, const wchar_t* value) = 0;
+      const std::string& fieldName, const wchar_t* value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -223,7 +223,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeString(
-      const char* fieldName, const char* value) = 0;
+      const std::string& fieldName, const char* value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -243,7 +243,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeObject(
-      const char* fieldName, std::shared_ptr<Cacheable> value) = 0;
+      const std::string& fieldName, std::shared_ptr<Cacheable> value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -257,7 +257,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeBooleanArray(
-      const char* fieldName, bool* value, int32_t length) = 0;
+      const std::string& fieldName, bool* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -271,7 +271,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeWideCharArray(
-      const char* fieldName, wchar_t* value, int32_t length) = 0;
+      const std::string& fieldName, wchar_t* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -285,7 +285,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeCharArray(
-      const char* fieldName, char* value, int32_t length) = 0;
+      const std::string& fieldName, char* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -299,7 +299,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeByteArray(
-      const char* fieldName, int8_t* value, int32_t length) = 0;
+      const std::string& fieldName, int8_t* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -313,7 +313,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeShortArray(
-      const char* fieldName, int16_t* value, int32_t length) = 0;
+      const std::string& fieldName, int16_t* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -327,7 +327,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeIntArray(
-      const char* fieldName, int32_t* value, int32_t length) = 0;
+      const std::string& fieldName, int32_t* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -341,7 +341,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeLongArray(
-      const char* fieldName, int64_t* value, int32_t length) = 0;
+      const std::string& fieldName, int64_t* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -355,7 +355,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeFloatArray(
-      const char* fieldName, float* value, int32_t length) = 0;
+      const std::string& fieldName, float* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -369,7 +369,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeDoubleArray(
-      const char* fieldName, double* value, int32_t length) = 0;
+      const std::string& fieldName, double* value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -383,7 +383,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeStringArray(
-      const char* fieldName, char** value, int32_t length) = 0;
+      const std::string& fieldName, char** value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -397,7 +397,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeWideStringArray(
-      const char* fieldName, wchar_t** value, int32_t length) = 0;
+      const std::string& fieldName, wchar_t** value, int32_t length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -414,7 +414,8 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeObjectArray(
-      const char* fieldName, std::shared_ptr<CacheableObjectArray> value) = 0;
+      const std::string& fieldName,
+      std::shared_ptr<CacheableObjectArray> value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -430,7 +431,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeArrayOfByteArrays(
-      const char* fieldName, int8_t** value, int32_t arrayLength,
+      const std::string& fieldName, int8_t** value, int32_t arrayLength,
       int32_t* elementLength) = 0;
 
   /**
@@ -457,7 +458,7 @@ class CPPCACHE_EXPORT PdxInstanceFactory {
    * @throws IllegalStateException if the named field does not exist.
    */
   virtual std::shared_ptr<PdxInstanceFactory> markIdentityField(
-      const char* fieldName) = 0;
+      const std::string& fieldName) = 0;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/PdxReader.hpp b/cppcache/include/geode/PdxReader.hpp
index d86a86ee..7951a43f 100644
--- a/cppcache/include/geode/PdxReader.hpp
+++ b/cppcache/include/geode/PdxReader.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXREADER_H_
-#define GEODE_PDXREADER_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_PDXREADER_H_
+#define GEODE_PDXREADER_H_
+
 #include "CacheableBuiltins.hpp"
 #include "PdxUnreadFields.hpp"
 
@@ -30,6 +30,7 @@ namespace client {
 class PdxReader;
 class CacheableObjectArray;
 class CacheableDate;
+
 /**
  * A PdxReader will be passed to PdxSerializable.fromData or
  * during deserialization of a PDX. The domain class needs to deserialize field
@@ -74,7 +75,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual char readChar(const char* fieldName) = 0;
+  virtual char readChar(const std::string& fieldName) = 0;
 
   /**
    * Read a wide char value from the <code>PdxReader</code>.
@@ -85,7 +86,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual wchar_t readWideChar(const char* fieldName) = 0;
+  virtual wchar_t readWideChar(const std::string& fieldName) = 0;
 
   /**
    * Read a bool value from the <code>PdxReader</code>.
@@ -96,7 +97,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual bool readBoolean(const char* fieldName) = 0;
+  virtual bool readBoolean(const std::string& fieldName) = 0;
 
   /**
    * Read a int8_t value from the <code>PdxReader</code>.
@@ -107,7 +108,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int8_t readByte(const char* fieldName) = 0;
+  virtual int8_t readByte(const std::string& fieldName) = 0;
 
   /**
    * Read a int16_t value from the <code>PdxReader</code>.
@@ -118,7 +119,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int16_t readShort(const char* fieldName) = 0;
+  virtual int16_t readShort(const std::string& fieldName) = 0;
 
   /**
    * Read a int32_t value from the <code>PdxReader</code>.
@@ -129,7 +130,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int32_t readInt(const char* fieldName) = 0;
+  virtual int32_t readInt(const std::string& fieldName) = 0;
 
   /**
    * Read a int64_t value from the <code>PdxReader</code>.
@@ -140,7 +141,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int64_t readLong(const char* fieldName) = 0;
+  virtual int64_t readLong(const std::string& fieldName) = 0;
 
   /**
    * Read a float value from the <code>PdxReader</code>.
@@ -151,7 +152,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual float readFloat(const char* fieldName) = 0;
+  virtual float readFloat(const std::string& fieldName) = 0;
 
   /**
    * Read a double value from the <code>PdxReader</code>.
@@ -162,7 +163,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual double readDouble(const char* fieldName) = 0;
+  virtual double readDouble(const std::string& fieldName) = 0;
 
   /**
    * Read a char* value from the <code>PdxReader</code>.
@@ -174,7 +175,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual char* readString(const char* fieldName) = 0;
+  virtual char* readString(const std::string& fieldName) = 0;
 
   /**
    * Read a wchar_t* value from the <code>PdxReader</code>.
@@ -186,7 +187,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual wchar_t* readWideString(const char* fieldName) = 0;
+  virtual wchar_t* readWideString(const std::string& fieldName) = 0;
 
   /**
    * Read a std::shared_ptr<Cacheable> value from the <code>PdxReader</code>.
@@ -197,7 +198,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual std::shared_ptr<Cacheable> readObject(const char* fieldName) = 0;
+  virtual std::shared_ptr<Cacheable> readObject(
+      const std::string& fieldName) = 0;
 
   /**
    * Read a char* value from the <code>PdxReader</code> and sets array length.
@@ -209,7 +211,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual char* readCharArray(const char* fieldName, int32_t& length) = 0;
+  virtual char* readCharArray(const std::string& fieldName,
+                              int32_t& length) = 0;
 
   /**
    * Read a wchar_t* value from the <code>PdxReader</code> and sets array
@@ -222,7 +225,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual wchar_t* readWideCharArray(const char* fieldName,
+  virtual wchar_t* readWideCharArray(const std::string& fieldName,
                                      int32_t& length) = 0;
 
   /**
@@ -234,7 +237,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual bool* readBooleanArray(const char* fieldName, int32_t& length) = 0;
+  virtual bool* readBooleanArray(const std::string& fieldName,
+                                 int32_t& length) = 0;
 
   /**
    * Read a int8_t* value from the <code>PdxReader</code> and sets array length.
@@ -246,7 +250,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int8_t* readByteArray(const char* fieldName, int32_t& length) = 0;
+  virtual int8_t* readByteArray(const std::string& fieldName,
+                                int32_t& length) = 0;
 
   /**
    * Read a int16_t* value from the <code>PdxReader</code> and sets array
@@ -259,7 +264,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int16_t* readShortArray(const char* fieldName, int32_t& length) = 0;
+  virtual int16_t* readShortArray(const std::string& fieldName,
+                                  int32_t& length) = 0;
 
   /**
    * Read a int32_t* value from the <code>PdxReader</code> and sets array
@@ -272,7 +278,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int32_t* readIntArray(const char* fieldName, int32_t& length) = 0;
+  virtual int32_t* readIntArray(const std::string& fieldName,
+                                int32_t& length) = 0;
 
   /**
    * Read a int64_t* value from the <code>PdxReader</code> and sets array
@@ -285,7 +292,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int64_t* readLongArray(const char* fieldName, int32_t& length) = 0;
+  virtual int64_t* readLongArray(const std::string& fieldName,
+                                 int32_t& length) = 0;
 
   /**
    * Read a float* value from the <code>PdxReader</code> and sets array length.
@@ -297,7 +305,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual float* readFloatArray(const char* fieldName, int32_t& length) = 0;
+  virtual float* readFloatArray(const std::string& fieldName,
+                                int32_t& length) = 0;
 
   /**
    * Read a double* value from the <code>PdxReader</code> and sets array length.
@@ -309,7 +318,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual double* readDoubleArray(const char* fieldName, int32_t& length) = 0;
+  virtual double* readDoubleArray(const std::string& fieldName,
+                                  int32_t& length) = 0;
 
   /**
    * Read a char** value from the <code>PdxReader</code> and sets array length.
@@ -322,7 +332,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual char** readStringArray(const char* fieldName, int32_t& length) = 0;
+  virtual char** readStringArray(const std::string& fieldName,
+                                 int32_t& length) = 0;
 
   /**
    * Read a wchar_t** value from the <code>PdxReader</code> and sets array
@@ -336,7 +347,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual wchar_t** readWideStringArray(const char* fieldName,
+  virtual wchar_t** readWideStringArray(const std::string& fieldName,
                                         int32_t& length) = 0;
 
   /**
@@ -350,7 +361,7 @@ class CPPCACHE_EXPORT PdxReader {
    * @see PdxReader#hasField
    */
   virtual std::shared_ptr<CacheableObjectArray> readObjectArray(
-      const char* fieldName) = 0;
+      const std::string& fieldName) = 0;
 
   /**
    * Read a int8_t** value from the <code>PdxReader</code> and sets
@@ -365,7 +376,7 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual int8_t** readArrayOfByteArrays(const char* fieldName,
+  virtual int8_t** readArrayOfByteArrays(const std::string& fieldName,
                                          int32_t& arrayLength,
                                          int32_t** elementLength) = 0;
 
@@ -379,7 +390,8 @@ class CPPCACHE_EXPORT PdxReader {
    *
    * @see PdxReader#hasField
    */
-  virtual std::shared_ptr<CacheableDate> readDate(const char* fieldName) = 0;
+  virtual std::shared_ptr<CacheableDate> readDate(
+      const std::string& fieldName) = 0;
 
   /**
    * Checks if the named field exists and returns the result.
@@ -389,7 +401,7 @@ class CPPCACHE_EXPORT PdxReader {
    * @return <code>true</code> if the named field exists; otherwise
    * <code>false</code>
    */
-  virtual bool hasField(const char* fieldName) = 0;
+  virtual bool hasField(const std::string& fieldName) = 0;
 
   /**
    * Checks if the named field was {@link PdxWriter#markIdentityField}marked as
@@ -402,7 +414,7 @@ class CPPCACHE_EXPORT PdxReader {
    * @return <code>true</code> if the named field exists and was marked as an
    * identify field; otherwise <code>false</code>
    */
-  virtual bool isIdentityField(const char* fieldName) = 0;
+  virtual bool isIdentityField(const std::string& fieldName) = 0;
 
   /**
    * This method returns an object that represents all the unread fields which
diff --git a/cppcache/include/geode/PdxSerializable.hpp b/cppcache/include/geode/PdxSerializable.hpp
index 4ce1711c..df7dbfec 100644
--- a/cppcache/include/geode/PdxSerializable.hpp
+++ b/cppcache/include/geode/PdxSerializable.hpp
@@ -25,6 +25,7 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 class PdxWriter;
 class PdxReader;
 
@@ -33,23 +34,11 @@ class CPPCACHE_EXPORT PdxSerializable : public CacheableKey {
   PdxSerializable();
   virtual ~PdxSerializable();
 
-  // for virtual overloads bring base toData/fromData in scope otherwise
-  // child classes won't be able to override as desired
-  // Solaris compiler gives "hides the virtual function" warnings when
-  // compiling child classes while other compilers silently
-  // accept but will cause problems with overloaded calls (in this case
-  //   no implicit conversion from std::shared_ptr<PdxWriter> to DataOutput etc
-  //   exists so no imminent danger)
-  // see
-  // http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation/cplusplus-faq-355066.html#Coding1
-  // using Serializable::toData;
-  // using Serializable::fromData;
-
   /**
    *@brief serialize this object in geode PDX format
    *@param PdxWriter to serialize the PDX object
    **/
-  virtual void toData(std::shared_ptr<PdxWriter> output) /*const*/ = 0;
+  virtual void toData(std::shared_ptr<PdxWriter> output) const = 0;
 
   /**
    *@brief Deserialize this object
@@ -65,43 +54,43 @@ class CPPCACHE_EXPORT PdxSerializable : public CacheableKey {
    * Note that this should not be overridden by custom implementations
    * and is reserved only for builtin types.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /** return true if this key matches other. */
-  virtual bool operator==(const CacheableKey& other) const;
+  virtual bool operator==(const CacheableKey& other) const override;
 
   /** return the hashcode for this key. */
-  virtual int32_t hashcode() const;
+  virtual int32_t hashcode() const override;
 
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object, typical implementation should return
    * the 'this' pointer.
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    *@brief return the classId of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and derserialize into.
    */
-  virtual int32_t classId() const { return 0x10; }
+  virtual int32_t classId() const override { return 0x10; }
 
   /**
    * Display this object as 'string', which depends on the implementation in
    * the subclasses.
    * The default implementation renders the classname.
    */
-  virtual std::shared_ptr<CacheableString> toString() const;
+  virtual std::string toString() const override;
 
   /**
    * Get the Type for the Object. Equivalent to the C# Type->GetType() API.
    */
-  virtual const char* getClassName() const = 0;
+  virtual const std::string& getClassName() const = 0;
 };
 
 }  // namespace client
diff --git a/cppcache/include/geode/PdxSerializer.hpp b/cppcache/include/geode/PdxSerializer.hpp
index ca93e5c4..f38c64ef 100644
--- a/cppcache/include/geode/PdxSerializer.hpp
+++ b/cppcache/include/geode/PdxSerializer.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXSERIALIZER_H_
-#define GEODE_PDXSERIALIZER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,9 +15,15 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_PDXSERIALIZER_H_
+#define GEODE_PDXSERIALIZER_H_
+
 #include "Serializable.hpp"
 #include "PdxReader.hpp"
 #include "PdxWriter.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
@@ -31,24 +32,23 @@ namespace client {
  * Function pointer type which takes a void pointer to an instance of a user
  * object to delete and class name.
  */
-typedef void (*UserDeallocator)(void*, const char*);
+typedef void (*UserDeallocator)(void*, const std::string&);
 
 /**
  * Function pointer type which takes a void pointer to an instance of a user
  * object and class name to return the size of the user object.
  */
-typedef uint32_t (*UserObjectSizer)(void*, const char*);
-
-class CPPCACHE_EXPORT PdxSerializer  {
-  /**
-   * The PdxSerializer class allows domain classes to be
-   * serialized and deserialized as PDXs without modification
-   * of the domain class.
-   * A domain class should register function {@link
-   * Serializable::registerPdxSerializer} to create new
-   * instance of type for de-serilization.
-   */
+typedef uint32_t (*UserObjectSizer)(void*, const std::string&);
 
+/**
+ * The PdxSerializer class allows domain classes to be
+ * serialized and deserialized as PDXs without modification
+ * of the domain class.
+ * A domain class should register function {@link
+ * Serializable::registerPdxSerializer} to create new
+ * instance of type for de-serilization.
+ */
+class CPPCACHE_EXPORT PdxSerializer {
  public:
   PdxSerializer() {}
 
@@ -60,7 +60,7 @@ class CPPCACHE_EXPORT PdxSerializer  {
    * @param className the class name whose object need to de-serialize
    * @param pr the PdxReader stream to use for reading the object data
    */
-  virtual void* fromData(const char* className,
+  virtual void* fromData(const std::string& className,
                          std::shared_ptr<PdxReader> pr) = 0;
 
   /**
@@ -68,21 +68,21 @@ class CPPCACHE_EXPORT PdxSerializer  {
    * @param userObject the object which need to serialize
    * @param pw the PdxWriter object to use for serializing the object
    */
-  virtual bool toData(void* userObject, const char* className,
+  virtual bool toData(void* userObject, const std::string& className,
                       std::shared_ptr<PdxWriter> pw) = 0;
 
   /**
    * Get the function pointer to the user deallocator
    * @param className to help select a deallocator for the correct class
    */
-  virtual UserDeallocator getDeallocator(const char* className) = 0;
+  virtual UserDeallocator getDeallocator(const std::string& className) = 0;
 
   /**
    * Get the function pointer to the user function that returns the size of an
    * instance of a user domain object
    * @param className to help select an object sizer for the correct class
    */
-  virtual UserObjectSizer getObjectSizer(const char* className) {
+  virtual UserObjectSizer getObjectSizer(const std::string& className) {
     return nullptr;
   };
 };
diff --git a/cppcache/include/geode/PdxUnreadFields.hpp b/cppcache/include/geode/PdxUnreadFields.hpp
index ceaf902a..0f15d98e 100644
--- a/cppcache/include/geode/PdxUnreadFields.hpp
+++ b/cppcache/include/geode/PdxUnreadFields.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXUNREADFIELDS_H_
-#define GEODE_PDXUNREADFIELDS_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_PDXUNREADFIELDS_H_
+#define GEODE_PDXUNREADFIELDS_H_
+
 #include "geode_base.hpp"
 
 namespace apache {
diff --git a/cppcache/include/geode/PdxWrapper.hpp b/cppcache/include/geode/PdxWrapper.hpp
index a52fade9..a9ece006 100644
--- a/cppcache/include/geode/PdxWrapper.hpp
+++ b/cppcache/include/geode/PdxWrapper.hpp
@@ -43,7 +43,7 @@ class CPPCACHE_EXPORT PdxWrapper : public PdxSerializable {
    * @param className the fully qualified class name to map this user object to
    * the Java side.
    */
-  PdxWrapper(void* userObject, const char* className,
+  PdxWrapper(void* userObject, std::string className,
              std::shared_ptr<PdxSerializer> pdxSerializerPtr);
 
   /**
@@ -59,39 +59,39 @@ class CPPCACHE_EXPORT PdxWrapper : public PdxSerializable {
   /**
    * Get the class name for the user domain object.
    */
-  const char* getClassName() const;
+  virtual const std::string& getClassName() const override;
 
   /** return true if this key matches other. */
-  bool operator==(const CacheableKey& other) const;
+  virtual bool operator==(const CacheableKey& other) const override;
 
   /** return the hashcode for this key. */
-  int32_t hashcode() const;
+  virtual int32_t hashcode() const override;
 
   /**
    *@brief serialize this object in geode PDX format
    *@param PdxWriter to serialize the PDX object
    **/
-  void toData(std::shared_ptr<PdxWriter> output);
+  virtual void toData(std::shared_ptr<PdxWriter> output) const override;
   /**
    *@brief Deserialize this object
    *@param PdxReader to Deserialize the PDX object
    **/
-  void fromData(std::shared_ptr<PdxReader> input);
+  virtual void fromData(std::shared_ptr<PdxReader> input) override;
   /**
    *@brief serialize this object
    **/
-  void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
   /**
    *@brief deserialize this object, typical implementation should return
    * the 'this' pointer.
    **/
-  void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
   /**
    *@brief return the classId of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and derserialize into.
    */
-  int32_t classId() const { return 0; }
+  virtual int32_t classId() const override { return 0; }
   /**
    *@brief return the size in bytes of the instance being serialized.
    * This is used to determine whether the cache is using up more
@@ -100,29 +100,29 @@ class CPPCACHE_EXPORT PdxWrapper : public PdxSerializable {
    * cache memory utilization.
    * Note that you must implement this only if you use the HeapLRU feature.
    */
-  uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
   /**
    * Display this object as 'string', which depends on the implementation in
    * the subclasses.
    * The default implementation renders the classname.
    */
-  std::shared_ptr<CacheableString> toString() const;
+  virtual std::string toString() const override;
 
   virtual ~PdxWrapper();
 
  private:
-  /** hide default constructor */
-  PdxWrapper();
-  PdxWrapper(const char* className,
+  PdxWrapper() = delete;
+  PdxWrapper(std::string className,
              std::shared_ptr<PdxSerializer> pdxSerializerPtr);
 
   FRIEND_STD_SHARED_PTR(PdxWrapper)
 
   void* m_userObject;
+  std::string m_className;
   std::shared_ptr<PdxSerializer> m_serializer;
+
   UserDeallocator m_deallocator;
   UserObjectSizer m_sizer;
-  char* m_className;
 
   // friend class SerializationRegistry;
 
diff --git a/cppcache/include/geode/PdxWriter.hpp b/cppcache/include/geode/PdxWriter.hpp
index c187267d..6758279f 100644
--- a/cppcache/include/geode/PdxWriter.hpp
+++ b/cppcache/include/geode/PdxWriter.hpp
@@ -58,7 +58,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeChar(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeChar(const std::string& fieldName,
                                                char value) = 0;
 
   /**
@@ -71,7 +71,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeChar(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeChar(const std::string& fieldName,
                                                char16_t value) = 0;
 
   /**
@@ -84,7 +84,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeBoolean(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeBoolean(const std::string& fieldName,
                                                   bool value) = 0;
 
   /**
@@ -97,7 +97,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeByte(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeByte(const std::string& fieldName,
                                                int8_t value) = 0;
 
   /**
@@ -110,7 +110,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeShort(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeShort(const std::string& fieldName,
                                                 int16_t value) = 0;
 
   /**
@@ -123,7 +123,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeInt(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeInt(const std::string& fieldName,
                                               int32_t value) = 0;
 
   /**
@@ -136,7 +136,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeLong(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeLong(const std::string& fieldName,
                                                int64_t value) = 0;
 
   /**
@@ -149,7 +149,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeFloat(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeFloat(const std::string& fieldName,
                                                 float value) = 0;
 
   /**
@@ -162,7 +162,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeDouble(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeDouble(const std::string& fieldName,
                                                  double value) = 0;
 
   /**
@@ -176,7 +176,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * or fieldName is nullptr or empty
    */
   virtual std::shared_ptr<PdxWriter> writeDate(
-      const char* fieldName, std::shared_ptr<CacheableDate> date) = 0;
+      const std::string& fieldName, std::shared_ptr<CacheableDate> date) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -188,7 +188,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeString(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeString(const std::string& fieldName,
                                                  const char* value) = 0;
 
   /**
@@ -201,8 +201,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty
    */
-  virtual std::shared_ptr<PdxWriter> writeWideString(const char* fieldName,
-                                                     const wchar_t* value) = 0;
+  virtual std::shared_ptr<PdxWriter> writeWideString(
+      const std::string& fieldName, const wchar_t* value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -222,7 +222,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxWriter> writeObject(
-      const char* fieldName, std::shared_ptr<Cacheable> value) = 0;
+      const std::string& fieldName, std::shared_ptr<Cacheable> value) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -235,9 +235,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeBooleanArray(const char* fieldName,
-                                                       bool* array,
-                                                       int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeBooleanArray(
+      const std::string& fieldName, bool* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -250,9 +249,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeWideCharArray(const char* fieldName,
-                                                        wchar_t* array,
-                                                        int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeWideCharArray(
+      const std::string& fieldName, wchar_t* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -265,9 +263,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeCharArray(const char* fieldName,
-                                                    char* array,
-                                                    int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeCharArray(
+      const std::string& fieldName, char* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -280,9 +277,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeByteArray(const char* fieldName,
-                                                    int8_t* array,
-                                                    int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeByteArray(
+      const std::string& fieldName, int8_t* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -295,9 +291,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeShortArray(const char* fieldName,
-                                                     int16_t* array,
-                                                     int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeShortArray(
+      const std::string& fieldName, int16_t* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -310,7 +305,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeIntArray(const char* fieldName,
+  virtual std::shared_ptr<PdxWriter> writeIntArray(const std::string& fieldName,
                                                    int32_t* array,
                                                    int length) = 0;
 
@@ -325,9 +320,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeLongArray(const char* fieldName,
-                                                    int64_t* array,
-                                                    int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeLongArray(
+      const std::string& fieldName, int64_t* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -340,9 +334,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeFloatArray(const char* fieldName,
-                                                     float* array,
-                                                     int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeFloatArray(
+      const std::string& fieldName, float* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -355,9 +348,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeDoubleArray(const char* fieldName,
-                                                      double* array,
-                                                      int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeDoubleArray(
+      const std::string& fieldName, double* array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -370,9 +362,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeStringArray(const char* fieldName,
-                                                      char** array,
-                                                      int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeStringArray(
+      const std::string& fieldName, char** array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -385,9 +376,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxWriter> writeWideStringArray(const char* fieldName,
-                                                          wchar_t** array,
-                                                          int length) = 0;
+  virtual std::shared_ptr<PdxWriter> writeWideStringArray(
+      const std::string& fieldName, wchar_t** array, int length) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -404,7 +394,8 @@ class CPPCACHE_EXPORT PdxWriter {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxWriter> writeObjectArray(
-      const char* fieldName, std::shared_ptr<CacheableObjectArray> array) = 0;
+      const std::string& fieldName,
+      std::shared_ptr<CacheableObjectArray> array) = 0;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -420,7 +411,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxWriter> writeArrayOfByteArrays(
-      const char* fieldName, int8_t** array, int arrayLength,
+      const std::string& fieldName, int8_t** array, int arrayLength,
       int* elementLength) = 0;
 
   /**
@@ -447,7 +438,7 @@ class CPPCACHE_EXPORT PdxWriter {
    * @throws IllegalStateException if the named field does not exist.
    */
   virtual std::shared_ptr<PdxWriter> markIdentityField(
-      const char* fieldName) = 0;
+      const std::string& fieldName) = 0;
 
   /**
    * Writes the given unread fields to the serialized form.
diff --git a/cppcache/include/geode/PersistenceManager.hpp b/cppcache/include/geode/PersistenceManager.hpp
index 84e92f21..fdcf0e7d 100644
--- a/cppcache/include/geode/PersistenceManager.hpp
+++ b/cppcache/include/geode/PersistenceManager.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PERSISTENCEMANAGER_H_
-#define GEODE_PERSISTENCEMANAGER_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,6 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#pragma once
+
+#ifndef GEODE_PERSISTENCEMANAGER_H_
+#define GEODE_PERSISTENCEMANAGER_H_
+
 #include "geode_globals.hpp"
 #include "DistributedSystem.hpp"
 #include "ExceptionTypes.hpp"
@@ -36,8 +37,10 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 class PersistenceManager;
 class Region;
+
 typedef std::shared_ptr<PersistenceManager> (*getPersistenceManagerInstance)(
     const std::shared_ptr<Region>&);
 
@@ -124,6 +127,7 @@ class CPPCACHE_EXPORT PersistenceManager {
 
   PersistenceManager(const std::shared_ptr<Region>& regionPtr);
   PersistenceManager();
+
   /**
     * @brief destructor
     */
diff --git a/cppcache/include/geode/Pool.hpp b/cppcache/include/geode/Pool.hpp
index f319a4e5..0857692b 100644
--- a/cppcache/include/geode/Pool.hpp
+++ b/cppcache/include/geode/Pool.hpp
@@ -27,6 +27,7 @@
 #include "CacheableBuiltins.hpp"
 #include "Cache.hpp"
 #include "CacheFactory.hpp"
+
 /**
  * @file
  */
@@ -60,7 +61,7 @@ class CPPCACHE_EXPORT Pool : public std::enable_shared_from_this<Pool> {
    * @return the name of the pool
    * @see PoolFactory#create
    */
-  virtual const char* getName() const = 0;
+  virtual const std::string& getName() const = 0;
 
   /**
    * Returns the connection timeout of this pool.
@@ -157,7 +158,7 @@ class CPPCACHE_EXPORT Pool : public std::enable_shared_from_this<Pool> {
    * Returns the server group of this pool.
    * @see PoolFactory#setServerGroup
    */
-  const char* getServerGroup() const;
+  const std::string& getServerGroup() const;
 
   /**
    * Returns <code>true</code> if thread local connections are enabled on this
diff --git a/cppcache/include/geode/PoolFactory.hpp b/cppcache/include/geode/PoolFactory.hpp
index 2bd4bf57..4daa109e 100644
--- a/cppcache/include/geode/PoolFactory.hpp
+++ b/cppcache/include/geode/PoolFactory.hpp
@@ -37,6 +37,7 @@ namespace client {
 class CacheImpl;
 class PoolAttributes;
 class Pool;
+
 /**
  * This interface provides for the configuration and creation of instances of
  * {@link Pool}.
@@ -170,24 +171,24 @@ class CPPCACHE_EXPORT PoolFactory {
    * The default server group.
    * <p>Current value: <code>""</code>.
    */
-  static constexpr const char* DEFAULT_SERVER_GROUP = "";
+  static const std::string DEFAULT_SERVER_GROUP;
   /**
    * Whether thread local connection is enabled.
    * <p>Current value: <code>"false"</code>.
    */
-  static const bool DEFAULT_THREAD_LOCAL_CONN = false;
+  static constexpr bool DEFAULT_THREAD_LOCAL_CONN = false;
 
   /**
    * Whether client is in multi user secure mode
    * <p>Current value: <code>"false"</code>.
    */
-  static const bool DEFAULT_MULTIUSER_SECURE_MODE = false;
+  static constexpr bool DEFAULT_MULTIUSER_SECURE_MODE = false;
 
   /**
    * The default value for whether to have single hop optimisations enabled.
    * <p>Current value: <code>true</code>.
    */
-  static const bool DEFAULT_PR_SINGLE_HOP_ENABLED = true;
+  static constexpr bool DEFAULT_PR_SINGLE_HOP_ENABLED = true;
 
   /**
    * Sets the free connection timeout for this pool.
@@ -383,7 +384,7 @@ class CPPCACHE_EXPORT PoolFactory {
    * to all servers.
    * @return a reference to <code>this</code>
    */
-  PoolFactory& setServerGroup(const char* group);
+  PoolFactory& setServerGroup(std::string group);
 
   /**
    * Adds a locator, given its host and port, to this factory.
@@ -402,7 +403,7 @@ class CPPCACHE_EXPORT PoolFactory {
    * @throws IllegalStateException if the locator has already been {@link
    * #addServer added} to this factory.
    */
-  PoolFactory& addLocator(const char* host, int port);
+  PoolFactory& addLocator(const std::string& host, int port);
 
   /**
    * Adds a server, given its host and port, to this factory.
@@ -419,7 +420,7 @@ class CPPCACHE_EXPORT PoolFactory {
    * @throws IllegalStateException if the server has already been {@link
    * #addLocator added} to this factory.
    */
-  PoolFactory& addServer(const char* host, int port);
+  PoolFactory& addServer(const std::string& host, int port);
 
   /**
    * If set to <code>true</code> then the created pool will have
@@ -501,7 +502,7 @@ class CPPCACHE_EXPORT PoolFactory {
    * @throws IllegalStateException if a locator or server has not been added.
    * @return the newly created pool.
    */
-  std::shared_ptr<Pool> create(const char* name);
+  std::shared_ptr<Pool> create(std::string name);
 
   /**
    * By default setPRSingleHopEnabled is true<br>
@@ -530,7 +531,7 @@ class CPPCACHE_EXPORT PoolFactory {
  private:
   PoolFactory(const Cache& cache);
   PoolFactory(const PoolFactory&);
-  PoolFactory& addCheck(const char* host, int port);
+  PoolFactory& addCheck(const std::string& host, int port);
   std::shared_ptr<PoolAttributes> m_attrs;
   bool m_isSubscriptionRedundancy;
   bool m_addedServerOrLocator;
@@ -540,6 +541,8 @@ class CPPCACHE_EXPORT PoolFactory {
   friend class PoolManager;
   friend class CacheFactory;
   friend class CacheXmlCreation;
+
+  FRIEND_STD_SHARED_PTR(PoolFactory)
 };
 
 }  // namespace client
diff --git a/cppcache/include/geode/PoolManager.hpp b/cppcache/include/geode/PoolManager.hpp
index e71f9c37..89d6779f 100644
--- a/cppcache/include/geode/PoolManager.hpp
+++ b/cppcache/include/geode/PoolManager.hpp
@@ -37,6 +37,7 @@ namespace client {
 class ThinClientPoolDM;
 class FunctionService;
 class CacheImpl;
+class PoolManagerImpl;
 
 typedef std::unordered_map<std::string, std::shared_ptr<Pool>> HashMapOfPools;
 
@@ -59,7 +60,7 @@ class CPPCACHE_EXPORT PoolManager {
    * which is used to configure and create new {@link Pool}s.
    * @return the new pool factory
    */
-  std::shared_ptr<PoolFactory> createFactory();
+  std::shared_ptr<PoolFactory> createFactory() const;
 
   /**
    * Returns a map containing all the pools in this manager.
@@ -71,7 +72,7 @@ class CPPCACHE_EXPORT PoolManager {
    * @return a Map that is a snapshot of all the pools currently known to this
    * manager.
    */
-  const HashMapOfPools& getAll();
+  const HashMapOfPools& getAll() const;
 
   /**
    * Find by name an existing connection pool returning
@@ -80,7 +81,7 @@ class CPPCACHE_EXPORT PoolManager {
    * @return the existing connection pool or <code>nullptr</code> if it does not
    * exist.
    */
-  std::shared_ptr<Pool> find(const char* name);
+  std::shared_ptr<Pool> find(const std::string& name) const;
 
   /**
    * Find the pool used by the given region.
@@ -89,7 +90,7 @@ class CPPCACHE_EXPORT PoolManager {
    * region does
    * not have a pool.
    */
-  std::shared_ptr<Pool> find(std::shared_ptr<Region> region);
+  std::shared_ptr<Pool> find(std::shared_ptr<Region> region) const;
 
   /**
    * Unconditionally destroys all created pools that are in this manager.
@@ -101,14 +102,13 @@ class CPPCACHE_EXPORT PoolManager {
   void close(bool keepAlive = false);
 
  private:
-  void removePool(const char* name);
+  void removePool(const std::string& name);
 
-  void addPool(const char* name, const std::shared_ptr<Pool>& pool);
+  void addPool(std::string name, const std::shared_ptr<Pool>& pool);
 
-  std::shared_ptr<Pool> getDefaultPool();
+  std::shared_ptr<Pool> getDefaultPool() const;
 
-  class Impl;
-  std::unique_ptr<Impl, void (*)(Impl*)> m_pimpl;
+  std::shared_ptr<PoolManagerImpl> m_pimpl;
 
   PoolManager(CacheImpl* cache);
 
diff --git a/cppcache/include/geode/Properties.hpp b/cppcache/include/geode/Properties.hpp
index 12a09681..949d224f 100644
--- a/cppcache/include/geode/Properties.hpp
+++ b/cppcache/include/geode/Properties.hpp
@@ -24,6 +24,8 @@
  * @file
  */
 
+#include <string>
+
 #include "geode_globals.hpp"
 #include "Serializable.hpp"
 #include "DataInput.hpp"
@@ -58,7 +60,7 @@ class CPPCACHE_EXPORT Properties : public Serializable {
    *
    * @throws NullPointerException if the key is null
    */
-  std::shared_ptr<CacheableString> find(const char* key);
+  std::shared_ptr<CacheableString> find(const std::string& key);
   /**
    * Return the value for the given <code>CacheableKey</code>,
    * or nullptr if not found.
@@ -72,14 +74,14 @@ class CPPCACHE_EXPORT Properties : public Serializable {
    *
    * @throws NullPointerException if the key is null
    */
-  void insert(const char* key, const char* value);
+  void insert(const std::string& key, const std::string& value);
 
   /**
    * Add or update the int value for key.
    *
    * @throws NullPointerException if the key is null
    */
-  void insert(const char* key, const int value);
+  void insert(const std::string& key, const int value);
 
   /**
    * Add or update Cacheable value for CacheableKey
@@ -90,7 +92,7 @@ class CPPCACHE_EXPORT Properties : public Serializable {
               const std::shared_ptr<Cacheable>& value);
 
   template <class _Rep, class _Period>
-  void insert(const char* key,
+  void insert(std::string key,
               const std::chrono::duration<_Rep, _Period>& value) {
     insert(key, util::chrono::duration::to_string(value).c_str());
   }
@@ -100,7 +102,7 @@ class CPPCACHE_EXPORT Properties : public Serializable {
    *
    * @throws NullPointerException if the key is null
    */
-  void remove(const char* key);
+  void remove(const std::string& key);
 
   /**
    * Remove the <code>CacheableKey</code> from the collection.
@@ -129,28 +131,28 @@ class CPPCACHE_EXPORT Properties : public Serializable {
   /** Read property values from a file, overriding what is currently
    * in the properties object.
    */
-  void load(const char* fileName);
+  void load(const std::string& fileName);
 
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /** Return an empty instance for deserialization. */
   static Serializable* createDeserializable();
 
   /** Return class id for serialization. */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /** Return type id for serialization. */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
-  virtual uint32_t objectSize() const {
+  virtual uint32_t objectSize() const override {
     return 0;  // don't care to set the right value
   }
 
diff --git a/cppcache/include/geode/Query.hpp b/cppcache/include/geode/Query.hpp
index 10cf5fa4..a3249f72 100644
--- a/cppcache/include/geode/Query.hpp
+++ b/cppcache/include/geode/Query.hpp
@@ -95,7 +95,7 @@ class CPPCACHE_EXPORT Query {
    *
    * @returns The query string.
    */
-  virtual const char* getQueryString() const = 0;
+  virtual const std::string& getQueryString() const = 0;
 
   /**
    * Compile the Query - client side query compilation is not supported.
diff --git a/cppcache/include/geode/QueryService.hpp b/cppcache/include/geode/QueryService.hpp
index 13c23a94..3584db11 100644
--- a/cppcache/include/geode/QueryService.hpp
+++ b/cppcache/include/geode/QueryService.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_QUERYSERVICE_H_
-#define GEODE_QUERYSERVICE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,6 +15,14 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_QUERYSERVICE_H_
+#define GEODE_QUERYSERVICE_H_
+
+#include <string>
+#include <memory>
+
 #include "geode_globals.hpp"
 #include "ExceptionTypes.hpp"
 #include "CqQuery.hpp"
@@ -52,7 +55,7 @@ class CPPCACHE_EXPORT QueryService {
    * @param querystr The query string with which to create a new Query.
    * @returns A smart pointer to the Query.
    */
-  virtual std::shared_ptr<Query> newQuery(const char* querystr) = 0;
+  virtual std::shared_ptr<Query> newQuery(std::string querystr) = 0;
 
   /**
    * @nativeclient
@@ -88,8 +91,9 @@ class CPPCACHE_EXPORT QueryService {
    * @endnativeclient
    */
   virtual std::shared_ptr<CqQuery> newCq(
-      const char* name, const char* querystr,
+      std::string name, std::string querystr,
       const std::shared_ptr<CqAttributes>& cqAttr, bool isDurable = false) = 0;
+
   /**
    * @nativeclient
    * Constructs a new named continuous query, represented by an instance of
@@ -123,8 +127,9 @@ class CPPCACHE_EXPORT QueryService {
    * @endnativeclient
    */
   virtual std::shared_ptr<CqQuery> newCq(
-      const char* querystr, const std::shared_ptr<CqAttributes>& cqAttr,
+      std::string querystr, const std::shared_ptr<CqAttributes>& cqAttr,
       bool isDurable = false) = 0;
+
   /**
    * @nativeclient
    * Close all CQs, and release resources
@@ -132,38 +137,44 @@ class CPPCACHE_EXPORT QueryService {
    * @endnativeclient
    */
   virtual void closeCqs() = 0;
+
   /**
    * @nativeclient
    * Retrieve  all registered CQs
    * @endnativeclient
    */
-  virtual query_container_type getCqs() = 0;
+  virtual query_container_type getCqs() const = 0;
+
   /**
    * @nativeclient
    * Retrieve a CqQuery by name.
    * @return the CqQuery or nullptr if not found
    * @endnativeclient
    */
-  virtual std::shared_ptr<CqQuery> getCq(const char* name) = 0;
+  virtual std::shared_ptr<CqQuery> getCq(const std::string& name) const = 0;
+
   /**
    * @nativeclient
    * Executes all the cqs on this client.
    * @endnativeclient
    */
   virtual void executeCqs() = 0;
+
   /**
    * @nativeclient
    * Stops all the cqs on this client.
    * @endnativeclient
    */
   virtual void stopCqs() = 0;
+
   /**
    * @nativeclient
    * Get statistics information for all CQs
    * @return the CqServiceStatistics
    * @endnativeclient
    */
-  virtual std::shared_ptr<CqServiceStatistics> getCqServiceStatistics() = 0;
+  virtual std::shared_ptr<CqServiceStatistics> getCqServiceStatistics()
+      const = 0;
 
   /**
    * Gets all the durable CQs registered by this client.
@@ -171,7 +182,8 @@ class CPPCACHE_EXPORT QueryService {
    * @return List of names of registered durable CQs, empty list if no durable
    * cqs.
    */
-  virtual std::shared_ptr<CacheableArrayList> getAllDurableCqsFromServer() = 0;
+  virtual std::shared_ptr<CacheableArrayList> getAllDurableCqsFromServer()
+      const = 0;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/Region.hpp b/cppcache/include/geode/Region.hpp
index da31e7e4..f8a5a19c 100644
--- a/cppcache/include/geode/Region.hpp
+++ b/cppcache/include/geode/Region.hpp
@@ -48,6 +48,7 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 class Pool;
 
 static constexpr std::chrono::milliseconds DEFAULT_RESPONSE_TIMEOUT =
@@ -91,13 +92,13 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    */
  public:
   /** return single name of region. The storage is backed by the region. */
-  virtual const char* getName() const = 0;
+  virtual const std::string& getName() const = 0;
   // virtual uint64_t getUpdateReceived() const { return 0; };
 
   /** return the full path of the region as can be used to lookup the
    * region from Cache::getRegion. The storage is backed by the region.
    */
-  virtual const char* getFullPath() const = 0;
+  virtual const std::string& getFullPath() const = 0;
 
   /** Returns the parent region, or nullptr if a root region.
    * @throws RegionDestroyedException
@@ -238,11 +239,11 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
 
   /** Returns the subregion identified by the path, nullptr if no such subregion
    */
-  virtual std::shared_ptr<Region> getSubregion(const char* path) = 0;
+  virtual std::shared_ptr<Region> getSubregion(const std::string& path) = 0;
 
   /** Creates a subregion with the specified attributes */
   virtual std::shared_ptr<Region> createSubregion(
-      const char* subregionName,
+      const std::string& subregionName,
       const std::shared_ptr<RegionAttributes>& aRegionAttributes) = 0;
 
   /** Populates the passed in std::vector<std::shared_ptr<Region>> with
@@ -1254,7 +1255,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @throws UnknownException For other exceptions.
    * @throws TimeoutException if operation timed out
    */
-  virtual void registerRegex(const char* regex, bool isDurable = false,
+  virtual void registerRegex(const std::string& regex, bool isDurable = false,
                              bool getInitialValues = false,
                              bool receiveValues = true) = 0;
 
@@ -1285,7 +1286,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @throws UnknownException For other exceptions.
    * @throws TimeoutException if operation timed out
    */
-  virtual void unregisterRegex(const char* regex) = 0;
+  virtual void unregisterRegex(const std::string& regex) = 0;
 
   /**
    * Gets values for an array of keys from the local cache or server.
@@ -1360,7 +1361,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * ResultSet or a StructSet.
    */
   virtual std::shared_ptr<SelectResults> query(
-      const char* predicate,
+      const std::string& predicate,
       std::chrono::milliseconds timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT) = 0;
 
   /**
@@ -1384,7 +1385,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * @returns true if the result size is non-zero, false otherwise.
    */
   virtual bool existsValue(
-      const char* predicate,
+      const std::string& predicate,
       std::chrono::milliseconds timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT) = 0;
 
   /**
@@ -1410,7 +1411,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    * nullptr of no results are available.
    */
   virtual std::shared_ptr<Serializable> selectValue(
-      const char* predicate,
+      const std::string& predicate,
       std::chrono::milliseconds timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT) = 0;
 
   /**
@@ -1450,7 +1451,7 @@ class CPPCACHE_EXPORT Region : public std::enable_shared_from_this<Region> {
    */
   virtual uint32_t size() = 0;
 
-  virtual const std::shared_ptr<Pool>& getPool() = 0;
+  virtual const std::shared_ptr<Pool>& getPool() const = 0;
 
   inline Cache& getCache() { return *m_cache; }
 
diff --git a/cppcache/include/geode/RegionAttributes.hpp b/cppcache/include/geode/RegionAttributes.hpp
index cb6eef54..d8afa375 100644
--- a/cppcache/include/geode/RegionAttributes.hpp
+++ b/cppcache/include/geode/RegionAttributes.hpp
@@ -185,7 +185,7 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
   /**
    * Returns the name of the pool attached to the region.
    */
-  const char* getPoolName() const;
+  const std::string& getPoolName() const;
 
   /*destructor
    *
@@ -214,49 +214,49 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
    * This method returns the path of the library from which
    * the factory function will be invoked on a cache server.
    */
-  const char* getCacheLoaderLibrary();
+  const std::string& getCacheLoaderLibrary();
 
   /**
    * This method returns the symbol name of the factory function from which
    * the loader will be created on a cache server.
    */
-  const char* getCacheLoaderFactory();
+  const std::string& getCacheLoaderFactory();
 
   /**
    * This method returns the path of the library from which
    * the factory function will be invoked on a cache server.
    */
-  const char* getCacheListenerLibrary();
+  const std::string& getCacheListenerLibrary();
 
   /**
    * This method returns the symbol name of the factory function from which
    * the loader will be created on a cache server.
    */
-  const char* getCacheListenerFactory();
+  const std::string& getCacheListenerFactory();
 
   /**
    * This method returns the path of the library from which
    * the factory function will be invoked on a cache server.
    */
-  const char* getCacheWriterLibrary();
+  const std::string& getCacheWriterLibrary();
 
   /**
    * This method returns the symbol name of the factory function from which
    * the loader will be created on a cache server.
    */
-  const char* getCacheWriterFactory();
+  const std::string& getCacheWriterFactory();
 
   /**
    * This method returns the path of the library from which
    * the factory function will be invoked on a cache server.
    */
-  const char* getPartitionResolverLibrary();
+  const std::string& getPartitionResolverLibrary();
 
   /**
    * This method returns the symbol name of the factory function from which
    * the loader will be created on a cache server.
    */
-  const char* getPartitionResolverFactory();
+  const std::string& getPartitionResolverFactory();
 
   /** Return true if all the attributes are equal to those of other. */
   bool operator==(const RegionAttributes& other) const;
@@ -274,7 +274,7 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
   /**
    * This method returns the list of servername:portno separated by comma
    */
-  const char* getEndpoints();
+  const std::string& getEndpoints();
 
   /**
    * This method returns the setting of client notification
@@ -285,13 +285,13 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
    * This method returns the path of the library from which
    * the factory function will be invoked on a cache server.
    */
-  const char* getPersistenceLibrary();
+  const std::string& getPersistenceLibrary();
 
   /**
    * This method returns the symbol name of the factory function from which
    * the persistence will be created on a cache server.
    */
-  const char* getPersistenceFactory();
+  const std::string& getPersistenceFactory();
 
   /**
    * This method returns the properties pointer which is set for persistence.
@@ -311,7 +311,7 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
    * will use to communicate with servers, if any.
    * @return the name of the client-server {@link Pool}
    */
-  const char* getPoolName() { return m_poolName; }
+  const std::string& getPoolName() { return m_poolName; }
   bool getCloningEnabled() { return m_isClonable; }
 
   /**
@@ -323,23 +323,18 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
   const RegionAttributes& operator=(const RegionAttributes&) = delete;
 
  private:
-  // Helper function that safely compares two attribute string
-  // taking into consideration the fact the one or the other
-  // might be nullptr
-  static int32_t compareStringAttribute(char* attributeA, char* attributeB);
-
-  // Helper function that safely copies one string attribute to
-  // another.
-  static void copyStringAttribute(char*& lhs, const char* rhs);
-
-  void setCacheListener(const char* libpath, const char* factoryFuncName);
-  void setCacheLoader(const char* libpath, const char* factoryFuncName);
-  void setCacheWriter(const char* libpath, const char* factoryFuncName);
-  void setPartitionResolver(const char* libpath, const char* factoryFuncName);
-  void setPersistenceManager(const char* lib, const char* func,
+  void setCacheListener(const std::string& libpath,
+                        const std::string& factoryFuncName);
+  void setCacheLoader(const std::string& libpath,
+                      const std::string& factoryFuncName);
+  void setCacheWriter(const std::string& libpath,
+                      const std::string& factoryFuncName);
+  void setPartitionResolver(const std::string& libpath,
+                            const std::string& factoryFuncName);
+  void setPersistenceManager(const std::string& lib, const std::string& func,
                              const std::shared_ptr<Properties>& config);
-  void setEndpoints(const char* endpoints);
-  void setPoolName(const char* poolName);
+  void setEndpoints(const std::string& endpoints);
+  void setPoolName(const std::string& poolName);
   void setCloningEnabled(bool isClonable);
   void setCachingEnabled(bool enable);
   void setLruEntriesLimit(int limit);
@@ -378,22 +373,22 @@ class CPPCACHE_EXPORT RegionAttributes : public Serializable {
   uint32_t m_initialCapacity;
   float m_loadFactor;
   uint8_t m_concurrencyLevel;
-  char* m_cacheLoaderLibrary;
-  char* m_cacheWriterLibrary;
-  char* m_cacheListenerLibrary;
-  char* m_partitionResolverLibrary;
-  char* m_cacheLoaderFactory;
-  char* m_cacheWriterFactory;
-  char* m_cacheListenerFactory;
-  char* m_partitionResolverFactory;
+  std::string m_cacheLoaderLibrary;
+  std::string m_cacheWriterLibrary;
+  std::string m_cacheListenerLibrary;
+  std::string m_partitionResolverLibrary;
+  std::string m_cacheLoaderFactory;
+  std::string m_cacheWriterFactory;
+  std::string m_cacheListenerFactory;
+  std::string m_partitionResolverFactory;
   DiskPolicyType::PolicyType m_diskPolicy;
-  char* m_endpoints;
+  std::string m_endpoints;
   bool m_clientNotificationEnabled;
-  char* m_persistenceLibrary;
-  char* m_persistenceFactory;
+  std::string m_persistenceLibrary;
+  std::string m_persistenceFactory;
   std::shared_ptr<Properties> m_persistenceProperties;
   std::shared_ptr<PersistenceManager> m_persistenceManager;
-  char* m_poolName;
+  std::string m_poolName;
   bool m_isClonable;
   bool m_isConcurrencyChecksEnabled;
   friend class AttributesFactory;
diff --git a/cppcache/include/geode/RegionEntry.hpp b/cppcache/include/geode/RegionEntry.hpp
index 6fc9b91c..93a63164 100644
--- a/cppcache/include/geode/RegionEntry.hpp
+++ b/cppcache/include/geode/RegionEntry.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_REGIONENTRY_H_
-#define GEODE_REGIONENTRY_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_REGIONENTRY_H_
+#define GEODE_REGIONENTRY_H_
+
 #include "geode_globals.hpp"
 #include "CacheableKey.hpp"
 #include "CacheStatistics.hpp"
@@ -84,6 +84,7 @@ class CPPCACHE_EXPORT RegionEntry {
    * @return true if this entry has been destroyed
    */
   bool isDestroyed() const;
+
   /**
    * @brief destructor
    */
diff --git a/cppcache/include/geode/RegionEvent.hpp b/cppcache/include/geode/RegionEvent.hpp
index bd310b06..af3a3098 100644
--- a/cppcache/include/geode/RegionEvent.hpp
+++ b/cppcache/include/geode/RegionEvent.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_REGIONEVENT_H_
-#define GEODE_REGIONEVENT_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,6 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#pragma once
+
+#ifndef GEODE_REGIONEVENT_H_
+#define GEODE_REGIONEVENT_H_
+
 #include "geode_globals.hpp"
 #include "Region.hpp"
 #include "CacheableKey.hpp"
@@ -30,9 +31,9 @@ namespace apache {
 namespace geode {
 namespace client {
 
-/** Declares region events.
-*/
-
+/**
+ * Declares region events.
+ */
 class CPPCACHE_EXPORT RegionEvent {
  protected:
   const std::shared_ptr<Region> m_region; /**< Region for this event. */
diff --git a/cppcache/include/geode/RegionFactory.hpp b/cppcache/include/geode/RegionFactory.hpp
index 5c656721..74d4da9d 100644
--- a/cppcache/include/geode/RegionFactory.hpp
+++ b/cppcache/include/geode/RegionFactory.hpp
@@ -49,7 +49,7 @@ class CPPCACHE_EXPORT RegionFactory {
    * this cache
    * @throws CacheClosedException if the cache is closed
    */
-  std::shared_ptr<Region> create(const char* name);
+  std::shared_ptr<Region> create(std::string name);
 
   /** Sets the cache loader for the next <code>RegionAttributes</code> created.
    * @param cacheLoader the cache loader or nullptr if no loader
@@ -85,32 +85,32 @@ class CPPCACHE_EXPORT RegionFactory {
    * of the region.
    * @return a reference to <code>this</code>
    */
-  RegionFactory& setCacheLoader(const char* libpath,
-                                const char* factoryFuncName);
+  RegionFactory& setCacheLoader(const std::string& libpath,
+                                const std::string& factoryFuncName);
 
   /**
    * Sets the library path for the library that will be invoked for the writer
    * of the region.
    * @return a reference to <code>this</code>
    */
-  RegionFactory& setCacheWriter(const char* libpath,
-                                const char* factoryFuncName);
+  RegionFactory& setCacheWriter(const std::string& libpath,
+                                const std::string& factoryFuncName);
 
   /**
    * Sets the library path for the library that will be invoked for the listener
    * of the region.
    * @return a reference to <code>this</code>
    */
-  RegionFactory& setCacheListener(const char* libpath,
-                                  const char* factoryFuncName);
+  RegionFactory& setCacheListener(const std::string& libpath,
+                                  const std::string& factoryFuncName);
 
   /**
    * Sets the library path for the library that will be invoked for the
    * partition resolver of the region.
    * @return a reference to <code>this</code>
    */
-  RegionFactory& setPartitionResolver(const char* libpath,
-                                      const char* factoryFuncName);
+  RegionFactory& setPartitionResolver(const std::string& libpath,
+                                      const std::string& factoryFuncName);
 
   // EXPIRATION ATTRIBUTES
 
@@ -160,7 +160,7 @@ class CPPCACHE_EXPORT RegionFactory {
    * @return a reference to <code>this</code>
    */
   RegionFactory& setPersistenceManager(
-      const char* libpath, const char* factoryFuncName,
+      const std::string& libpath, const std::string& factoryFuncName,
       const std::shared_ptr<Properties>& config = nullptr);
 
   /** Sets the PersistenceManager for the next <code>RegionAttributes</code>
@@ -238,7 +238,7 @@ class CPPCACHE_EXPORT RegionFactory {
    *        the name of the Pool to which region will be attached.
    * @return a reference to <code>this</code>
    */
-  RegionFactory& setPoolName(const char* name);
+  RegionFactory& setPoolName(const std::string& name);
 
   /*
    * Set boolean to enable/disable cloning while applying delta.
diff --git a/cppcache/include/geode/RegionService.hpp b/cppcache/include/geode/RegionService.hpp
index abb0062e..49dcc4db 100644
--- a/cppcache/include/geode/RegionService.hpp
+++ b/cppcache/include/geode/RegionService.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_REGIONSERVICE_H_
-#define GEODE_REGIONSERVICE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,10 +15,16 @@
  * limitations under the License.
  */
 
-#include "geode_globals.hpp"
+#pragma once
+
+#ifndef GEODE_REGIONSERVICE_H_
+#define GEODE_REGIONSERVICE_H_
+
 #include <vector>
 #include <memory>
 
+#include "geode_globals.hpp"
+
 /**
  * @file
  */
@@ -89,7 +90,7 @@ class CPPCACHE_EXPORT RegionService {
    * @param name the region's name, such as <code>root</code>.
    * @returns region, or nullptr if no such region exists.
    */
-  virtual std::shared_ptr<Region> getRegion(const char* name) = 0;
+  virtual std::shared_ptr<Region> getRegion(const std::string& name) const = 0;
 
   /**
    * Gets the QueryService from which a new Query can be obtained.
@@ -105,7 +106,7 @@ class CPPCACHE_EXPORT RegionService {
    * @param regions the returned set of
    * regions
    */
-  virtual std::vector<std::shared_ptr<Region>> rootRegions() = 0;
+  virtual std::vector<std::shared_ptr<Region>> rootRegions() const = 0;
 
   /**
    * Returns a factory that can create a {@link PdxInstance}.
@@ -115,7 +116,7 @@ class CPPCACHE_EXPORT RegionService {
    * @return the factory
    */
   virtual std::shared_ptr<PdxInstanceFactory> createPdxInstanceFactory(
-      const char* className) = 0;
+      std::string className) const = 0;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/RegionShortcut.hpp b/cppcache/include/geode/RegionShortcut.hpp
index 6f698815..62437047 100644
--- a/cppcache/include/geode/RegionShortcut.hpp
+++ b/cppcache/include/geode/RegionShortcut.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_REGIONSHORTCUT_H_
-#define GEODE_REGIONSHORTCUT_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_REGIONSHORTCUT_H_
+#define GEODE_REGIONSHORTCUT_H_
+
 #include "geode_globals.hpp"
 
 /**
@@ -34,6 +34,7 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 enum RegionShortcut {
 
   /**
@@ -72,6 +73,7 @@ enum RegionShortcut {
    */
   LOCAL_ENTRY_LRU
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/include/geode/ResultSet.hpp b/cppcache/include/geode/ResultSet.hpp
index 9a04f00f..68249b9a 100644
--- a/cppcache/include/geode/ResultSet.hpp
+++ b/cppcache/include/geode/ResultSet.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_RESULTSET_H_
-#define GEODE_RESULTSET_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,11 +15,14 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_RESULTSET_H_
+#define GEODE_RESULTSET_H_
+
 #include "geode_globals.hpp"
 #include "ExceptionTypes.hpp"
-
 #include "SelectResults.hpp"
-
 #include "SelectResultsIterator.hpp"
 
 /**
@@ -47,14 +45,14 @@ class CPPCACHE_EXPORT ResultSet : public SelectResults {
    *
    * @returns false always at this time.
    */
-  virtual bool isModifiable() const = 0;
+  virtual bool isModifiable() const override = 0;
 
   /**
    * Get the size of the ResultSet.
    *
    * @returns the number of items in the ResultSet.
    */
-  virtual int32_t size() const = 0;
+  virtual int32_t size() const override = 0;
 
   /**
    * Index operator to directly access an item in the ResultSet.
@@ -63,7 +61,8 @@ class CPPCACHE_EXPORT ResultSet : public SelectResults {
    * @throws IllegalArgumentException if the index is out of bounds.
    * @returns A smart pointer to the item indexed.
    */
-  virtual const std::shared_ptr<Serializable> operator[](int32_t index) const = 0;
+  virtual const std::shared_ptr<Serializable> operator[](
+      int32_t index) const override = 0;
 
   /**
    * Get a SelectResultsIterator with which to iterate over the items in the
@@ -71,12 +70,12 @@ class CPPCACHE_EXPORT ResultSet : public SelectResults {
    *
    * @returns The SelectResultsIterator with which to iterate.
    */
-  virtual SelectResultsIterator getIterator() = 0;
+  virtual SelectResultsIterator getIterator() override = 0;
 
   /**
    * Destructor
    */
-  virtual ~ResultSet(){};
+  virtual ~ResultSet() = default;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/SelectResults.hpp b/cppcache/include/geode/SelectResults.hpp
index 1f10071e..a3b150eb 100644
--- a/cppcache/include/geode/SelectResults.hpp
+++ b/cppcache/include/geode/SelectResults.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_SELECTRESULTS_H_
-#define GEODE_SELECTRESULTS_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_SELECTRESULTS_H_
+#define GEODE_SELECTRESULTS_H_
+
 /**
  * @file
  */
@@ -28,6 +28,7 @@
 #include "ExceptionTypes.hpp"
 #include "Serializable.hpp"
 #include "CacheableBuiltins.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
diff --git a/cppcache/include/geode/SelectResultsIterator.hpp b/cppcache/include/geode/SelectResultsIterator.hpp
index c4a114d3..89bf8303 100644
--- a/cppcache/include/geode/SelectResultsIterator.hpp
+++ b/cppcache/include/geode/SelectResultsIterator.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_SELECTRESULTSITERATOR_H_
-#define GEODE_SELECTRESULTSITERATOR_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_SELECTRESULTSITERATOR_H_
+#define GEODE_SELECTRESULTSITERATOR_H_
+
 /**
  * @file
  */
@@ -27,7 +27,6 @@
 #include "geode_globals.hpp"
 #include "ExceptionTypes.hpp"
 #include "Serializable.hpp"
-
 #include "SelectResults.hpp"
 #include "CacheableBuiltins.hpp"
 
diff --git a/cppcache/include/geode/Serializable.hpp b/cppcache/include/geode/Serializable.hpp
index 9f8da906..b5110416 100644
--- a/cppcache/include/geode/Serializable.hpp
+++ b/cppcache/include/geode/Serializable.hpp
@@ -24,10 +24,11 @@
  * @file
  */
 
-#include "geode_globals.hpp"
 #include <functional>
 #include <memory>
 
+#include "geode_globals.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
@@ -38,6 +39,7 @@ class Cache;
 class PdxSerializable;
 class Serializable;
 class CacheableString;
+
 typedef void (*CliCallbackMethod)(Cache &cache);
 
 /** @brief signature of functions passed to registerType. Such functions
@@ -112,7 +114,7 @@ class CPPCACHE_EXPORT Serializable
    * the subclasses.
    * The default implementation renders the classname.
    */
-  virtual std::shared_ptr<CacheableString> toString() const;
+  virtual std::string toString() const;
 
   /** Factory method that creates the Serializable object that matches the type
    * of value.
@@ -127,18 +129,12 @@ class CPPCACHE_EXPORT Serializable
   /**
    * @brief destructor
    */
-  virtual ~Serializable() {}
+  virtual ~Serializable() = default;
 
  protected:
-  /**
-   * @brief constructors
-   */
-  Serializable() {}
-
- private:
-  // Never defined.
-  Serializable(const Serializable &other);
-  void operator=(const Serializable &other);
+  Serializable() = default;
+  Serializable(const Serializable &other) = default;
+  Serializable &operator=(const Serializable &other) = default;
 };
 
 }  // namespace client
diff --git a/cppcache/include/geode/StructSet.hpp b/cppcache/include/geode/StructSet.hpp
index dd495e10..f2749999 100644
--- a/cppcache/include/geode/StructSet.hpp
+++ b/cppcache/include/geode/StructSet.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_STRUCTSET_H_
-#define GEODE_STRUCTSET_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,11 +15,14 @@
  * limitations under the License.
  */
 
-#include "geode_globals.hpp"
+#pragma once
 
+#ifndef GEODE_STRUCTSET_H_
+#define GEODE_STRUCTSET_H_
+
+#include "geode_globals.hpp"
 #include "CqResults.hpp"
 #include "Struct.hpp"
-
 #include "SelectResultsIterator.hpp"
 
 /**
@@ -34,6 +32,7 @@
 namespace apache {
 namespace geode {
 namespace client {
+
 /**
  * @class StructSet StructSet.hpp
  *
@@ -97,7 +96,7 @@ class CPPCACHE_EXPORT StructSet : public CqResults {
   /**
    * Destructor
    */
-  virtual ~StructSet(){};
+  virtual ~StructSet() = default;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/SystemProperties.hpp b/cppcache/include/geode/SystemProperties.hpp
index 8262cd75..162f4962 100644
--- a/cppcache/include/geode/SystemProperties.hpp
+++ b/cppcache/include/geode/SystemProperties.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_SYSTEMPROPERTIES_H_
-#define GEODE_SYSTEMPROPERTIES_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_SYSTEMPROPERTIES_H_
+#define GEODE_SYSTEMPROPERTIES_H_
+
 #include "Properties.hpp"
 #include "util/Log.hpp"
 
@@ -41,7 +41,6 @@ namespace client {
  * set from DistributedSystem::connect.
  *
  */
-
 class CPPCACHE_EXPORT SystemProperties {
  public:
   /**
@@ -53,7 +52,10 @@ class CPPCACHE_EXPORT SystemProperties {
    * member type to SERVER.
    */
   SystemProperties(const std::shared_ptr<Properties>& propertiesPtr,
-                   const char* configFile = nullptr);
+                   const std::string& configFile = "");
+
+  SystemProperties(const SystemProperties& rhs) = delete;
+  void operator=(const SystemProperties& rhs) = delete;
 
   /**
    * Destructor.
@@ -94,29 +96,33 @@ class CPPCACHE_EXPORT SystemProperties {
   /**
    * Returns the path of the private key file for SSL use.
    */
-  const char* sslKeyStore() const { return m_sslKeyStore; }
+  const std::string& sslKeyStore() const { return m_sslKeyStore; }
 
   /**
    * Returns the client keystore password.
    */
-  const char* sslKeystorePassword() const { return m_sslKeystorePassword; }
+  const std::string& sslKeystorePassword() const {
+    return m_sslKeystorePassword;
+  }
 
   /**
    * Returns the path of the public key file for SSL use.
    */
-  const char* sslTrustStore() const { return m_sslTrustStore; }
+  const std::string& sslTrustStore() const { return m_sslTrustStore; }
 
   /**
    * Returns the name of the filename into which statistics would
    * be archived.
    */
-  const char* statisticsArchiveFile() const { return m_statisticsArchiveFile; }
+  const std::string& statisticsArchiveFile() const {
+    return m_statisticsArchiveFile;
+  }
 
   /**
    * Returns the name of the filename into which logging would
    * be done.
    */
-  const char* logFilename() const { return m_logFilename; }
+  const std::string& logFilename() const { return m_logFilename; }
 
   /**
    * Returns the log level at which logging would be done.
@@ -183,7 +189,7 @@ class CPPCACHE_EXPORT SystemProperties {
   /**
    * Returns the durable client ID
    */
-  const char* durableClientId() const { return m_durableClientId; }
+  const std::string& durableClientId() const { return m_durableClientId; }
 
   /**
    * Returns the durable timeout
@@ -216,27 +222,11 @@ class CPPCACHE_EXPORT SystemProperties {
   /**
    * Returns client Queueconflation option
    */
-  char* conflateEvents() const { return m_conflateEvents; }
-
-  /**
-   * Returns  true if the stack trace is enabled ,false otherwise
-   */
-  const bool debugStackTraceEnabled() const { return m_debugStackTraceEnabled; }
-
-  /**
-   * Returns true if crash dump generation for unhandled fatal errors
-   * is enabled, false otherwise.
-   * By default crash dumps are created in the current working directory.
-   * If log-file has been specified then they are created in the same
-   * directory as the log file, and having the same prefix as log file.
-   * The default prefix is "geode_cpp".
-   * The actual dump file will have timestamp and process ID in the full name.
-   */
-  inline const bool crashDumpEnabled() const { return m_crashDumpEnabled; }
+  const std::string& conflateEvents() const { return m_conflateEvents; }
 
-  const char* name() const { return m_name; }
+  const std::string& name() const { return m_name; }
 
-  const char* cacheXMLFile() const { return m_cacheXMLFile; }
+  const std::string& cacheXMLFile() const { return m_cacheXMLFile; }
 
   /**
    * Returns the log-file-size-limit.
@@ -298,17 +288,13 @@ class CPPCACHE_EXPORT SystemProperties {
   }
 
   /** Return the security diffie hellman secret key algo */
-  const char* securityClientDhAlgo() const {
-    return (m_securityClientDhAlgo == nullptr
-                ? ""
-                : m_securityClientDhAlgo->asChar());
+  const std::string& securityClientDhAlgo() const {
+    return m_securityClientDhAlgo;
   }
 
   /** Return the keystore (.pem file ) path */
-  const char* securityClientKsPath() const {
-    return (m_securityClientKsPath == nullptr
-                ? ""
-                : m_securityClientKsPath->asChar());
+  const std::string& securityClientKsPath() const {
+    return m_securityClientKsPath;
   }
 
   /** Returns securityPropertiesPtr.
@@ -329,10 +315,7 @@ class CPPCACHE_EXPORT SystemProperties {
    * Check whether Diffie-Hellman based credentials encryption is on.
    * @return bool flag to indicate whether DH for credentials is on.
    */
-  bool isDhOn() const {
-    return m_securityClientDhAlgo != nullptr &&
-           m_securityClientDhAlgo->length() > 0;
-  }
+  bool isDhOn() const { return !m_securityClientDhAlgo.empty(); }
 
   /**
    * Checks to see if this native client is being invoked as part of small
@@ -390,23 +373,19 @@ class CPPCACHE_EXPORT SystemProperties {
 
   bool m_appDomainEnabled;
 
-  char* m_statisticsArchiveFile;
+  std::string m_statisticsArchiveFile;
 
-  char* m_logFilename;
+  std::string m_logFilename;
 
   Log::LogLevel m_logLevel;
 
   int m_sessions;
 
-  char* m_name;
-
-  bool m_debugStackTraceEnabled;
-
-  bool m_crashDumpEnabled;
+  std::string m_name;
 
   bool m_disableShufflingEndpoint;
 
-  char* m_cacheXMLFile;
+  std::string m_cacheXMLFile;
 
   uint32_t m_logFileSizeLimit;
   uint32_t m_logDiskSpaceLimit;
@@ -428,10 +407,10 @@ class CPPCACHE_EXPORT SystemProperties {
 
   std::shared_ptr<Properties> m_securityPropertiesPtr;
 
-  std::shared_ptr<CacheableString> m_securityClientDhAlgo;
-  std::shared_ptr<CacheableString> m_securityClientKsPath;
+  std::string m_securityClientDhAlgo;
+  std::string m_securityClientKsPath;
 
-  char* m_durableClientId;
+  std::string m_durableClientId;
   std::chrono::seconds m_durableTimeout;
 
   std::chrono::milliseconds m_connectTimeout;
@@ -444,12 +423,12 @@ class CPPCACHE_EXPORT SystemProperties {
 
   bool m_sslEnabled;
   bool m_timestatisticsEnabled;
-  char* m_sslKeyStore;
-  char* m_sslTrustStore;
+  std::string m_sslKeyStore;
+  std::string m_sslTrustStore;
 
-  char* m_sslKeystorePassword;
+  std::string m_sslKeystorePassword;
 
-  char* m_conflateEvents;
+  std::string m_conflateEvents;
 
   uint32_t m_threadPoolSize;
   std::chrono::seconds m_suspendedTxTimeout;
@@ -457,22 +436,19 @@ class CPPCACHE_EXPORT SystemProperties {
   bool m_disableChunkHandlerThread;
   bool m_onClientDisconnectClearPdxTypeIds;
 
- private:
   /**
    * Processes the given property/value pair, saving
    * the results internally:
    */
-  void processProperty(const char* property, const char* value);
+  void processProperty(const std::string& property, const std::string& value);
+  static bool parseBooleanProperty(const std::string& property,
+                                   const std::string& value);
   template <class _Rep, class _Period>
-  void parseDurationProperty(const std::string& property,
-                             const std::string& value,
-                             std::chrono::duration<_Rep, _Period>& duration);
-
- private:
-  SystemProperties(const SystemProperties& rhs);  // never defined
-  void operator=(const SystemProperties& rhs);    // never defined
+  static void parseDurationProperty(
+      const std::string& property, const std::string& value,
+      std::chrono::duration<_Rep, _Period>& duration);
 
-  void throwError(const char* msg);
+  static void throwError(const std::string& msg);
 
  public:
   friend class DistributedSystemImpl;
diff --git a/cppcache/include/geode/TransactionId.hpp b/cppcache/include/geode/TransactionId.hpp
index b0f110f4..c516a6ab 100644
--- a/cppcache/include/geode/TransactionId.hpp
+++ b/cppcache/include/geode/TransactionId.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_TRANSACTIONID_H_
-#define GEODE_TRANSACTIONID_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,7 +15,13 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_TRANSACTIONID_H_
+#define GEODE_TRANSACTIONID_H_
+
 #include <memory>
+
 #include "geode_base.hpp"
 
 namespace apache {
diff --git a/cppcache/include/geode/TypeRegistry.hpp b/cppcache/include/geode/TypeRegistry.hpp
index 14b852c7..f5942a18 100644
--- a/cppcache/include/geode/TypeRegistry.hpp
+++ b/cppcache/include/geode/TypeRegistry.hpp
@@ -1,9 +1,3 @@
-
-#pragma once
-
-#ifndef GEODE_TYPEREGISTRY_H_
-#define GEODE_TYPEREGISTRY_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -21,8 +15,14 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_TYPEREGISTRY_H_
+#define GEODE_TYPEREGISTRY_H_
+
 #include "geode_globals.hpp"
 #include "Serializable.hpp"
+
 namespace apache {
 namespace geode {
 namespace client {
@@ -63,9 +63,9 @@ class TypeRegistry {
 
   CacheImpl* m_cache;
 };
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
 
 #endif //GEODE_TYPEREGISTRY_H_
-
diff --git a/cppcache/include/geode/UserFunctionExecutionException.hpp b/cppcache/include/geode/UserFunctionExecutionException.hpp
index ad748588..c5fe5305 100644
--- a/cppcache/include/geode/UserFunctionExecutionException.hpp
+++ b/cppcache/include/geode/UserFunctionExecutionException.hpp
@@ -34,33 +34,32 @@ class UserFunctionExecutionException;
  *sendException in case of Function execution.
  **/
 class UserFunctionExecutionException : public Serializable {
-  /**
-   * @brief public methods
-   */
-
  public:
   /**
-   * @brief destructor
+   * @brief constructors
    */
-  virtual ~UserFunctionExecutionException() {}
+  explicit UserFunctionExecutionException(std::shared_ptr<CacheableString> msg);
+  UserFunctionExecutionException(const UserFunctionExecutionException& other) =
+      delete;
+  void operator=(const UserFunctionExecutionException& other) = delete;
 
   /**
-   * @brief constructors
+   * @brief destructor
    */
-  UserFunctionExecutionException(std::shared_ptr<CacheableString> msg);
+  virtual ~UserFunctionExecutionException() = default;
 
   /**
    *@brief serialize this object
    * @throws IllegalStateException If this api is called from User code.
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object, typical implementation should return
    * the 'this' pointer.
    * @throws IllegalStateException If this api is called from User code.
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    *@brief Return the classId of the instance being serialized.
@@ -71,7 +70,7 @@ class UserFunctionExecutionException : public Serializable {
    * Using a negative value may result in undefined behavior.
    * @throws IllegalStateException If this api is called from User code.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    *@brief return the size in bytes of the instance being serialized.
@@ -82,7 +81,7 @@ class UserFunctionExecutionException : public Serializable {
    * Note that you must implement this only if you use the HeapLRU feature.
    * @throws IllegalStateException If this api is called from User code.
    */
-  virtual uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
 
   /**
    *@brief return the typeId byte of the instance being serialized.
@@ -92,7 +91,7 @@ class UserFunctionExecutionException : public Serializable {
    * Note that this should not be overridden by custom implementations
    * and is reserved only for builtin types.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   /**
    *@brief return as std::shared_ptr<CacheableString> the Exception message
@@ -105,15 +104,12 @@ class UserFunctionExecutionException : public Serializable {
    *returned from geode sendException api.
    **/
   std::shared_ptr<CacheableString> getName() {
-    const char* msg = "UserFunctionExecutionException";
-    auto str = CacheableString::create(msg);
-    return str;
+    static const auto name =
+        CacheableString::create("UserFunctionExecutionException");
+    return name;
   }
 
  private:
-  // never implemented.
-  UserFunctionExecutionException(const UserFunctionExecutionException& other);
-  void operator=(const UserFunctionExecutionException& other);
 
   std::shared_ptr<CacheableString> m_message;  // error message
 };
diff --git a/cppcache/include/geode/WritablePdxInstance.hpp b/cppcache/include/geode/WritablePdxInstance.hpp
index ec075de9..dd39a750 100644
--- a/cppcache/include/geode/WritablePdxInstance.hpp
+++ b/cppcache/include/geode/WritablePdxInstance.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_WRITABLEPDXINSTANCE_H_
-#define GEODE_WRITABLEPDXINSTANCE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,15 +15,22 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_WRITABLEPDXINSTANCE_H_
+#define GEODE_WRITABLEPDXINSTANCE_H_
+
 #include <memory>
-#include "Cacheable.hpp"
 
+#include "Cacheable.hpp"
 #include "PdxInstance.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
+
 class CacheableObjectArray;
+
 /**
  * WritablePdxInstance is a {@link PdxInstance} that also supports field
  * modification
@@ -36,15 +38,11 @@ class CacheableObjectArray;
  * To get a WritablePdxInstance call {@link PdxInstance#createWriter}.
  */
 class CPPCACHE_EXPORT WritablePdxInstance : public PdxInstance {
-  /**
-   * @brief public methods
-   */
-
  public:
   /**
    * @brief destructor
    */
-  virtual ~WritablePdxInstance() {}
+  virtual ~WritablePdxInstance() = default;
 
   /**
    * Set the existing named field to the given value.
@@ -60,7 +58,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,
+  virtual void setField(const std::string& fieldName,
                         std::shared_ptr<Cacheable> value) = 0;
 
   /**
@@ -76,7 +74,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, bool value) = 0;
+  virtual void setField(const std::string& fieldName, bool value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -95,7 +93,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, signed char value) = 0;
+  virtual void setField(const std::string& fieldName, signed char value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -114,7 +112,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, unsigned char value) = 0;
+  virtual void setField(const std::string& fieldName, unsigned char value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -129,7 +127,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, int16_t value) = 0;
+  virtual void setField(const std::string& fieldName, int16_t value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -144,7 +142,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, int32_t value) = 0;
+  virtual void setField(const std::string& fieldName, int32_t value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -159,7 +157,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, int64_t value) = 0;
+  virtual void setField(const std::string& fieldName, int64_t value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -174,7 +172,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, float value) = 0;
+  virtual void setField(const std::string& fieldName, float value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -189,7 +187,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, double value) = 0;
+  virtual void setField(const std::string& fieldName, double value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -204,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, char16_t value) = 0;
+  virtual void setField(const std::string& fieldName, char16_t value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -221,7 +219,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,
+  virtual void setField(const std::string& fieldName,
                         std::shared_ptr<CacheableDate> value) = 0;
 
   /**
@@ -239,7 +237,8 @@ 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, bool* value, int32_t length) = 0;
+  virtual void setField(const std::string& fieldName, bool* value,
+                        int32_t length) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -260,7 +259,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, signed char* value,
+  virtual void setField(const std::string& fieldName, signed char* value,
                         int32_t length) = 0;
 
   /**
@@ -282,7 +281,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, unsigned char* value,
+  virtual void setField(const std::string& fieldName, unsigned char* value,
                         int32_t length) = 0;
 
   /**
@@ -300,7 +299,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, int16_t* value,
+  virtual void setField(const std::string& fieldName, int16_t* value,
                         int32_t length) = 0;
 
   /**
@@ -318,7 +317,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, int32_t* value,
+  virtual void setField(const std::string& fieldName, int32_t* value,
                         int32_t length) = 0;
 
   /**
@@ -336,7 +335,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, int64_t* value,
+  virtual void setField(const std::string& fieldName, int64_t* value,
                         int32_t length) = 0;
 
   /**
@@ -354,7 +353,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, float* value,
+  virtual void setField(const std::string& fieldName, float* value,
                         int32_t length) = 0;
 
   /**
@@ -372,7 +371,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, double* value,
+  virtual void setField(const std::string& fieldName, double* value,
                         int32_t length) = 0;
 
   /**
@@ -388,7 +387,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, const wchar_t* value) = 0;
+  virtual void setField(const std::string& fieldName, const wchar_t* value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -403,7 +402,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, const char* value) = 0;
+  virtual void setField(const std::string& fieldName, const char* value) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -420,7 +419,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, wchar_t* value,
+  virtual void setField(const std::string& fieldName, wchar_t* value,
                         int32_t length) = 0;
 
   /**
@@ -438,7 +437,8 @@ 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, int32_t length) = 0;
+  virtual void setField(const std::string& fieldName, char* value,
+                        int32_t length) = 0;
 
   /**
    * Set the existing named field to the given value.
@@ -455,7 +455,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, wchar_t** value,
+  virtual void setField(const std::string& fieldName, wchar_t** value,
                         int32_t length) = 0;
 
   /**
@@ -473,7 +473,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,
+  virtual void setField(const std::string& fieldName, char** value,
                         int32_t length) = 0;
 
   /**
@@ -493,7 +493,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, int8_t** value,
+  virtual void setField(const std::string& fieldName, int8_t** value,
                         int32_t arrayLength, int32_t* elementLength) = 0;
 
   /**
@@ -511,19 +511,18 @@ 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,
+  virtual void setField(const std::string& fieldName,
                         std::shared_ptr<CacheableObjectArray> value) = 0;
 
  protected:
   /**
    * @brief constructors
    */
-  WritablePdxInstance(){};
+  WritablePdxInstance() = default;
 
  private:
-  // never implemented.
-  WritablePdxInstance(const WritablePdxInstance& other);
-  void operator=(const WritablePdxInstance& other);
+  WritablePdxInstance(const WritablePdxInstance& other) = delete;
+  void operator=(const WritablePdxInstance& other) = delete;
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/include/geode/geode_base.hpp b/cppcache/include/geode/geode_base.hpp
index 4fec9406..6dde29d4 100644
--- a/cppcache/include/geode/geode_base.hpp
+++ b/cppcache/include/geode/geode_base.hpp
@@ -318,6 +318,7 @@ typedef enum {
 #endif
 
 #include <chrono>
+#include <string>
 
 namespace apache {
 namespace geode {
@@ -326,6 +327,8 @@ namespace client {
 constexpr static std::chrono::milliseconds DEFAULT_QUERY_RESPONSE_TIMEOUT =
     std::chrono::seconds{15};
 
+static const std::string EMPTY_STRING{};
+
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/include/geode/statistics/StatisticDescriptor.hpp b/cppcache/include/geode/statistics/StatisticDescriptor.hpp
index af050865..f99f3ee7 100644
--- a/cppcache/include/geode/statistics/StatisticDescriptor.hpp
+++ b/cppcache/include/geode/statistics/StatisticDescriptor.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_STATISTICS_STATISTICDESCRIPTOR_H_
-#define GEODE_STATISTICS_STATISTICDESCRIPTOR_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,9 +15,14 @@
  * limitations under the License.
  */
 
-#include <geode/geode_globals.hpp>
+#pragma once
 
-using namespace apache::geode::client;
+#ifndef GEODE_STATISTICS_STATISTICDESCRIPTOR_H_
+#define GEODE_STATISTICS_STATISTICDESCRIPTOR_H_
+
+#include <string>
+
+#include "../geode_globals.hpp"
 
 /** @file
 */
@@ -31,6 +31,8 @@ namespace apache {
 namespace geode {
 namespace statistics {
 
+using namespace apache::geode::client;
+
 /**
  * Describes an individual statistic whose value is updated by an
  * application and may be archived by Geode.  These descriptions are
@@ -51,34 +53,34 @@ class CPPCACHE_EXPORT StatisticDescriptor {
     * }. The id is initialized when its statistics
     * type is created.
     */
-  virtual int32_t getId() = 0;
+  virtual int32_t getId() const = 0;
 
   /**
    * Returns the name of this statistic
    */
-  virtual const char* getName() = 0;
+  virtual const std::string& getName() const = 0;
 
   /**
    * Returns a description of this statistic
    */
-  virtual const char* getDescription() = 0;
+  virtual const std::string& getDescription() const = 0;
 
   /**
    * Returns true if this statistic is a counter; false if its a gauge.
    * Counter statistics have values that always increase.
    * Gauge statistics have unconstrained values.
    */
-  virtual bool isCounter() = 0;
+  virtual bool isCounter() const = 0;
 
   /**
    *  Returns true if a larger statistic value indicates better performance.
    */
-  virtual bool isLargerBetter() = 0;
+  virtual bool isLargerBetter() const = 0;
 
   /**
    *  Returns the unit in which this statistic is measured
    */
-  virtual const char* getUnit() = 0;
+  virtual const std::string& getUnit() const = 0;
 
   /*
    * Destructor
diff --git a/cppcache/include/geode/statistics/Statistics.hpp b/cppcache/include/geode/statistics/Statistics.hpp
index 54c972a3..dced8fcb 100644
--- a/cppcache/include/geode/statistics/Statistics.hpp
+++ b/cppcache/include/geode/statistics/Statistics.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_STATISTICS_STATISTICS_H_
-#define GEODE_STATISTICS_STATISTICS_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,16 +15,24 @@
  * limitations under the License.
  */
 
-#include <geode/geode_globals.hpp>
-#include <geode/statistics/StatisticsType.hpp>
-#include <geode/statistics/StatisticDescriptor.hpp>
+#pragma once
+
+#ifndef GEODE_STATISTICS_STATISTICS_H_
+#define GEODE_STATISTICS_STATISTICS_H_
+
+#include <string>
+
+#include "../geode_globals.hpp"
+#include "StatisticsType.hpp"
+#include "StatisticDescriptor.hpp"
 
 /** @file
-*/
+ */
 
 namespace apache {
 namespace geode {
 namespace statistics {
+
 /**
  * An instantiation of an existing <code>StatisticsType</code> object with
  * methods for
@@ -59,7 +62,7 @@ class CPPCACHE_EXPORT Statistics {
    *
    * @see StatisticsType#nameToDescriptor
    */
-  virtual int32_t nameToId(const char* name) = 0;
+  virtual int32_t nameToId(const std::string& name) const = 0;
 
   /**
    * Returns the descriptor of the statistic with the given name in this
@@ -72,26 +75,29 @@ class CPPCACHE_EXPORT Statistics {
    *
    * @see StatisticsType#nameToId
    */
-  virtual StatisticDescriptor* nameToDescriptor(const char* name) = 0;
+  virtual StatisticDescriptor* nameToDescriptor(
+      const std::string& name) const = 0;
 
   /**
    * Gets a value that uniquely identifies this statistics.
    */
-  virtual int64_t getUniqueId() = 0;
+  virtual int64_t getUniqueId() const = 0;
 
   /**
    * Gets the {@link StatisticsType} of this instance.
    */
-  virtual StatisticsType* getType() = 0;
+  virtual StatisticsType* getType() const = 0;
+
   /**
    * Gets the text associated with this instance that helps identify it.
    */
-  virtual const char* getTextId() = 0;
+  virtual const std::string& getTextId() const = 0;
+
   /**
    * Gets the number associated with this instance that helps identify it.
    */
+  virtual int64_t getNumericId() const = 0;
 
-  virtual int64_t getNumericId() = 0;
   /**
    * Returns true if modifications are atomic. This means that multiple threads
    * can safely modify this instance without additional synchronization.
@@ -102,23 +108,25 @@ class CPPCACHE_EXPORT Statistics {
    * <P>
    * Note that all instances that are {@link #isShared shared} are also atomic.
    */
-  virtual bool isAtomic() = 0;
+  virtual bool isAtomic() const = 0;
+
   /**
    * Returns true if the data for this instance is stored in shared memory.
    * Returns false if the data is store in local memory.
    * <P>
    * Note that all instances that are {@link #isShared shared} are also atomic.
    */
-  virtual bool isShared() = 0;
+  virtual bool isShared() const = 0;
+
   /**
    * Returns true if the instance has been {@link #close closed}.
    */
-  virtual bool isClosed() = 0;
+  virtual bool isClosed() const = 0;
 
   ////////////////////////  set() Methods  ///////////////////////
 
   /**
-    * Sets the value of a statistic with the given <code>id</code>
+   * Sets the value of a statistic with the given <code>id</code>
    * whose type is <code>int</code>.
    * @param id a statistic id obtained with {@link #nameToId}
    * or {@link StatisticsType#nameToId}.
@@ -139,7 +147,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic with name <code>name</code> is not of
    *         type <code>int</code>.
    */
-  virtual void setInt(char* name, int32_t value) = 0;
+  virtual void setInt(const std::string& name, int32_t value) = 0;
 
   /**
    * Sets the value of a described statistic of type <code>int</code>
@@ -153,7 +161,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>int</code>.
    */
-  virtual void setInt(StatisticDescriptor* descriptor, int32_t value) = 0;
+  virtual void setInt(const StatisticDescriptor* descriptor, int32_t value) = 0;
 
   /**
    * Sets the value of a statistic with the given <code>id</code>
@@ -179,7 +187,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>long</code>.
    */
-  virtual void setLong(StatisticDescriptor* descriptor, int64_t value) = 0;
+  virtual void setLong(const StatisticDescriptor* descriptor,
+                       int64_t value) = 0;
 
   /**
    * Sets the value of a named statistic of type <code>long</code>.
@@ -191,7 +200,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic with name <code>name</code> is not of
    *         type <code>long</code>.
    */
-  virtual void setLong(char* name, int64_t value) = 0;
+  virtual void setLong(const std::string& name, int64_t value) = 0;
 
   /**
    * Sets the value of a statistic with the given <code>id</code>
@@ -217,9 +226,9 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>double</code>.
    */
-  virtual void setDouble(
-      apache::geode::statistics::StatisticDescriptor* descriptor,
-      double value) = 0;
+  virtual void setDouble(const StatisticDescriptor* descriptor,
+                         double value) = 0;
+
   /**
    * Sets the value of a named statistic of type <code>double</code>.
    *
@@ -230,7 +239,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic with name <code>name</code> is not of
    *         type <code>double</code>.
    */
-  virtual void setDouble(char* name, double value) = 0;
+  virtual void setDouble(const std::string&, double value) = 0;
 
   ///////////////////////  get() Methods  ///////////////////////
 
@@ -242,7 +251,7 @@ class CPPCACHE_EXPORT Statistics {
    * @throws IllegalArgumentException
    *         If the id is invalid.
    */
-  virtual int32_t getInt(int32_t id) = 0;
+  virtual int32_t getInt(int32_t id) const = 0;
 
   /**
    * Returns the value of the described statistic of type <code>int</code>.
@@ -256,8 +265,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>int</code>.
    */
-  virtual int32_t getInt(
-      apache::geode::statistics::StatisticDescriptor* descriptor) = 0;
+  virtual int32_t getInt(const StatisticDescriptor* descriptor) const = 0;
+
   /**
    * Returns the value of the statistic of type <code>int</code> at
    * the given name.
@@ -268,7 +277,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic named <code>name</code> is not of
    *         type <code>int</code>.
    */
-  virtual int32_t getInt(char* name) = 0;
+  virtual int32_t getInt(const std::string& name) const = 0;
 
   /**
    * Returns the value of the identified statistic of type <code>long</code>.
@@ -278,7 +287,7 @@ class CPPCACHE_EXPORT Statistics {
    * @throws IllegalArgumentException
    *         If the id is invalid.
    */
-  virtual int64_t getLong(int32_t id) = 0;
+  virtual int64_t getLong(int32_t id) const = 0;
 
   /**
    * Returns the value of the described statistic of type <code>long</code>.
@@ -292,7 +301,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>long</code>.
    */
-  virtual int64_t getLong(StatisticDescriptor* descriptor) = 0;
+  virtual int64_t getLong(const StatisticDescriptor* descriptor) const = 0;
+
   /**
    * Returns the value of the statistic of type <code>long</code> at
    * the given name.
@@ -303,7 +313,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic named <code>name</code> is not of
    *         type <code>long</code>.
    */
-  virtual int64_t getLong(char* name) = 0;
+  virtual int64_t getLong(const std::string& name) const = 0;
 
   /**
    * Returns the value of the identified statistic of type <code>double</code>.
@@ -313,7 +323,7 @@ class CPPCACHE_EXPORT Statistics {
    * @throws IllegalArgumentException
    *         If the id is invalid.
    */
-  virtual double getDouble(int32_t id) = 0;
+  virtual double getDouble(int32_t id) const = 0;
 
   /**
    * Returns the value of the described statistic of type <code>double</code>.
@@ -327,7 +337,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>double</code>.
    */
-  virtual double getDouble(StatisticDescriptor* descriptor) = 0;
+  virtual double getDouble(const StatisticDescriptor* descriptor) const = 0;
+
   /**
    * Returns the value of the statistic of type <code>double</code> at
    * the given name.
@@ -338,26 +349,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic named <code>name</code> is not of
    *         type <code>double</code>.
    */
-  virtual double getDouble(char* name) = 0;
-
-  /**
-   * Returns the value of the identified statistic.
-   *
-   * @param descriptor a statistic descriptor obtained with {@link
-   * #nameToDescriptor}
-   * or {@link StatisticsType#nameToDescriptor}.
-   * @throws IllegalArgumentException
-   *         If the described statistic does not exist
-   */
-  //   virtual Number get(StatisticDescriptor* descriptor)=0;
-
-  /**
-   * Returns the value of the named statistic.
-   *
-   * @throws IllegalArgumentException
-   *         If the named statistic does not exist
-   */
-  //   virtual Number get(char* name)=0;
+  virtual double getDouble(const std::string& name) const = 0;
 
   /**
    * Returns the bits that represent the raw value of the described statistic.
@@ -368,15 +360,7 @@ class CPPCACHE_EXPORT Statistics {
    * @throws IllegalArgumentException
    *         If the described statistic does not exist
    */
-  virtual int64_t getRawBits(StatisticDescriptor* descriptor) = 0;
-
-  /**
-   * Returns the bits that represent the raw value of the named statistic.
-   *
-   * @throws IllegalArgumentException
-   *         If the named statistic does not exist
-   */
-  // virtual double getRawBits(char* name)=0;
+  virtual int64_t getRawBits(const StatisticDescriptor* descriptor) const = 0;
 
   ////////////////////////  inc() Methods  ////////////////////////
 
@@ -409,7 +393,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>int</code>.
    */
-  virtual int32_t incInt(StatisticDescriptor* descriptor, int32_t delta) = 0;
+  virtual int32_t incInt(const StatisticDescriptor* descriptor,
+                         int32_t delta) = 0;
 
   /**
    * Increments the value of the statistic of type <code>int</code> with
@@ -423,7 +408,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic named <code>name</code> is not of
    *         type <code>int</code>.
    */
-  virtual int32_t incInt(char* name, int32_t delta) = 0;
+  virtual int32_t incInt(const std::string& name, int32_t delta) = 0;
 
   /**
    * Increments the value of the identified statistic of type <code>long</code>
@@ -455,7 +440,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>long</code>.
    */
-  virtual int64_t incLong(StatisticDescriptor* descriptor, int64_t delta) = 0;
+  virtual int64_t incLong(const StatisticDescriptor* descriptor,
+                          int64_t delta) = 0;
   /**
    * Increments the value of the statistic of type <code>long</code> with
    * the given name by a given amount.
@@ -469,7 +455,7 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic named <code>name</code> is not of
    *         type <code>long</code>.
    */
-  virtual int64_t incLong(char* name, int64_t delta) = 0;
+  virtual int64_t incLong(const std::string& name, int64_t delta) = 0;
 
   /**
    * Increments the value of the identified statistic of type
@@ -502,7 +488,8 @@ class CPPCACHE_EXPORT Statistics {
    *         if the described statistic is not of
    *         type <code>double</code>.
    */
-  virtual double incDouble(StatisticDescriptor* descriptor, double delta) = 0;
+  virtual double incDouble(const StatisticDescriptor* descriptor,
+                           double delta) = 0;
   /**
    * Increments the value of the statistic of type <code>double</code> with
    * the given name by a given amount.
@@ -516,13 +503,13 @@ class CPPCACHE_EXPORT Statistics {
    *         if the statistic named <code>name</code> is not of
    *         type <code>double</code>.
    */
-  virtual double incDouble(char* name, double delta) = 0;
+  virtual double incDouble(const std::string& name, double delta) = 0;
 
  protected:
   /**
-  *  Destructor is protected to prevent direct deletion. Use close().
-  */
-  virtual ~Statistics() = 0;
+   *  Destructor is protected to prevent direct deletion. Use close().
+   */
+  virtual ~Statistics() = default;
 };  // class
 
 }  // namespace statistics
diff --git a/cppcache/include/geode/statistics/StatisticsFactory.hpp b/cppcache/include/geode/statistics/StatisticsFactory.hpp
index 5c395b1e..e0596cc8 100644
--- a/cppcache/include/geode/statistics/StatisticsFactory.hpp
+++ b/cppcache/include/geode/statistics/StatisticsFactory.hpp
@@ -14,16 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #pragma once
 
 #ifndef GEODE_STATISTICS_STATISTICSFACTORY_H_
 #define GEODE_STATISTICS_STATISTICSFACTORY_H_
 
-#include <geode/geode_globals.hpp>
-#include <geode/statistics/StatisticDescriptor.hpp>
-#include <geode/statistics/StatisticsType.hpp>
+#include "../geode_globals.hpp"
+#include "StatisticDescriptor.hpp"
+#include "StatisticsType.hpp"
+#include "Statistics.hpp"
 #include "../ExceptionTypes.hpp"
-#include <geode/statistics/Statistics.hpp>
 
 /** @file
  */
@@ -65,9 +66,9 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * <code>units</code>,and with larger values indicating better performance.
    */
 
-  virtual StatisticDescriptor* createIntCounter(const char* name,
-                                                const char* description,
-                                                const char* units,
+  virtual StatisticDescriptor* createIntCounter(const std::string& name,
+                                                const std::string& description,
+                                                const std::string& units,
                                                 bool largerBetter = true) = 0;
 
   /**
@@ -76,9 +77,9 @@ class CPPCACHE_EXPORT StatisticsFactory {
    *<code>units</code>, and with larger values indicating better performance.
    */
 
-  virtual StatisticDescriptor* createLongCounter(const char* name,
-                                                 const char* description,
-                                                 const char* units,
+  virtual StatisticDescriptor* createLongCounter(const std::string& name,
+                                                 const std::string& description,
+                                                 const std::string& units,
                                                  bool largerBetter = true) = 0;
 
   /**
@@ -89,17 +90,17 @@ class CPPCACHE_EXPORT StatisticsFactory {
    */
 
   virtual StatisticDescriptor* createDoubleCounter(
-      const char* name, const char* description, const char* units,
-      bool largerBetter = true) = 0;
+      const std::string& name, const std::string& description,
+      const std::string& units, bool largerBetter = true) = 0;
 
   /**
    * Creates and returns an int gauge {@link StatisticDescriptor}
    * with the given <code>name</code>, <code>description</code>,
    * <code>units</code>,  and with smaller values indicating better performance.
    */
-  virtual StatisticDescriptor* createIntGauge(const char* name,
-                                              const char* description,
-                                              const char* units,
+  virtual StatisticDescriptor* createIntGauge(const std::string& name,
+                                              const std::string& description,
+                                              const std::string& units,
                                               bool largerBetter = false) = 0;
 
   /**
@@ -107,9 +108,9 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * with the given <code>name</code>, <code>description</code>,
    * <code>units</code>,  and with smaller values indicating better performance.
    */
-  virtual StatisticDescriptor* createLongGauge(const char* name,
-                                               const char* description,
-                                               const char* units,
+  virtual StatisticDescriptor* createLongGauge(const std::string& name,
+                                               const std::string& description,
+                                               const std::string& units,
                                                bool largerBetter = false) = 0;
 
   /**
@@ -117,9 +118,9 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * with the given <code>name</code>, <code>description</code>,
    * <code>units</code>,  and with smaller values indicating better performance.
    */
-  virtual StatisticDescriptor* createDoubleGauge(const char* name,
-                                                 const char* description,
-                                                 const char* units,
+  virtual StatisticDescriptor* createDoubleGauge(const std::string& name,
+                                                 const std::string& description,
+                                                 const std::string& units,
                                                  bool largerBetter = false) = 0;
 
   /**
@@ -129,7 +130,8 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * @throws IllegalArgumentException
    * if a type with the given <code>name</code> already exists.
    */
-  virtual StatisticsType* createType(const char* name, const char* description,
+  virtual StatisticsType* createType(const std::string& name,
+                                     const std::string& description,
                                      StatisticDescriptor** stats,
                                      int32_t statsLength) = 0;
 
@@ -138,7 +140,7 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * with the given <code>name</code>.
    * Returns <code>null</code> if the type does not exist.
    */
-  virtual StatisticsType* findType(const char* name) = 0;
+  virtual StatisticsType* findType(const std::string& name) const = 0;
 
   /**
    * Creates and returns a {@link Statistics} instance of the given {@link
@@ -155,7 +157,7 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * The created instance may not be {@link Statistics#isAtomic atomic}.
    */
   virtual Statistics* createStatistics(StatisticsType* type,
-                                       const char* textId) = 0;
+                                       const std::string& textId) = 0;
 
   /**
    * Creates and returns a {@link Statistics} instance of the given {@link
@@ -163,7 +165,8 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * <p>
    * The created instance may not be {@link Statistics#isAtomic atomic}.
    */
-  virtual Statistics* createStatistics(StatisticsType* type, const char* textId,
+  virtual Statistics* createStatistics(StatisticsType* type,
+                                       const std::string& textId,
                                        int64_t numericId) = 0;
 
   /**
@@ -181,7 +184,7 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * The created instance will be {@link Statistics#isAtomic atomic}.
    */
   virtual Statistics* createAtomicStatistics(StatisticsType* type,
-                                             const char* textId) = 0;
+                                             const std::string& textId) = 0;
 
   /**
    * Creates and returns a {@link Statistics} instance of the given {@link
@@ -190,21 +193,22 @@ class CPPCACHE_EXPORT StatisticsFactory {
    * The created instance will be {@link Statistics#isAtomic atomic}.
    */
   virtual Statistics* createAtomicStatistics(StatisticsType* type,
-                                             const char* textId,
+                                             const std::string& textId,
                                              int64_t numericId) = 0;
 
   /** Return the first instance that matches the type, or nullptr */
-  virtual Statistics* findFirstStatisticsByType(StatisticsType* type) = 0;
+  virtual Statistics* findFirstStatisticsByType(
+      const StatisticsType* type) const = 0;
 
   /**
    * Returns a name that can be used to identify the manager
    */
-  virtual const char* getName() = 0;
+  virtual const std::string& getName() const = 0;
 
   /**
    * Returns a numeric id that can be used to identify the manager
    */
-  virtual int64_t getId() = 0;
+  virtual int64_t getId() const = 0;
 
  private:
   const StatisticsFactory& operator=(const StatisticsFactory&);
diff --git a/cppcache/include/geode/statistics/StatisticsType.hpp b/cppcache/include/geode/statistics/StatisticsType.hpp
index c4d34ab5..6fcf0dc2 100644
--- a/cppcache/include/geode/statistics/StatisticsType.hpp
+++ b/cppcache/include/geode/statistics/StatisticsType.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_STATISTICS_STATISTICSTYPE_H_
-#define GEODE_STATISTICS_STATISTICSTYPE_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -19,18 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <geode/geode_globals.hpp>
-#include <geode/statistics/StatisticDescriptor.hpp>
 
-using namespace apache::geode::client;
+#pragma once
+
+#ifndef GEODE_STATISTICS_STATISTICSTYPE_H_
+#define GEODE_STATISTICS_STATISTICSTYPE_H_
+
+#include "../geode_globals.hpp"
+#include "StatisticDescriptor.hpp"
 
 /** @file
-*/
+ */
 
 namespace apache {
 namespace geode {
 namespace statistics {
 
+using namespace apache::geode::client;
+
 /**
  * Used to describe a logical collection of StatisticDescriptors. These
  * descriptions
@@ -47,18 +48,18 @@ class CPPCACHE_EXPORT StatisticsType {
   /**
    * Returns the name of this statistics type.
    */
-  virtual const char* getName() = 0;
+  virtual const std::string& getName() const = 0;
 
   /**
    * Returns a description of this statistics type.
    */
-  virtual const char* getDescription() = 0;
+  virtual const std::string& getDescription() const = 0;
 
   /**
    * Returns descriptions of the statistics that this statistics type
    * gathers together.
    */
-  virtual StatisticDescriptor** getStatistics() = 0;
+  virtual StatisticDescriptor** getStatistics() const = 0;
 
   /**
    * Returns the id of the statistic with the given name in this
@@ -68,7 +69,7 @@ class CPPCACHE_EXPORT StatisticsType {
    *         No statistic named <code>name</code> exists in this
    *         statistics instance.
    */
-  virtual int32_t nameToId(const char* name) = 0;
+  virtual int32_t nameToId(const std::string& name) const = 0;
   /**
    * Returns the descriptor of the statistic with the given name in this
    * statistics instance.
@@ -77,12 +78,13 @@ class CPPCACHE_EXPORT StatisticsType {
    *         No statistic named <code>name</code> exists in this
    *         statistics instance.
    */
-  virtual StatisticDescriptor* nameToDescriptor(const char* name) = 0;
+  virtual StatisticDescriptor* nameToDescriptor(
+      const std::string& name) const = 0;
 
   /**
    * Returns the total number of statistics descriptors in the type.
    */
-  virtual int32_t getDescriptorsCount() = 0;
+  virtual int32_t getDescriptorsCount() const = 0;
 
   // protected:
   /**
diff --git a/cppcache/integration-test/CacheHelper.cpp b/cppcache/integration-test/CacheHelper.cpp
index 2ebf3216..da6abd92 100644
--- a/cppcache/integration-test/CacheHelper.cpp
+++ b/cppcache/integration-test/CacheHelper.cpp
@@ -504,29 +504,28 @@ std::shared_ptr<Pool> CacheHelper::createPool2(
 void CacheHelper::logPoolAttributes(std::shared_ptr<Pool>& pool) {
   using namespace apache::geode::util::chrono::duration;
   LOG("logPoolAttributes() entered");
-  LOGINFO("CPPTEST: Pool attribtes for pool %s are as follows:",
+  LOGINFO("CPPTEST: Pool attributes for pool %s are as follows" +
           pool->getName());
-  LOGINFO("getFreeConnectionTimeout: %s",
-          to_string(pool->getFreeConnectionTimeout()).c_str());
-  LOGINFO("getLoadConditioningInterval: %s",
-          to_string(pool->getLoadConditioningInterval()).c_str());
+  LOGINFO("getFreeConnectionTimeout: " +
+          to_string(pool->getFreeConnectionTimeout()));
+  LOGINFO("getLoadConditioningInterval: " +
+          to_string(pool->getLoadConditioningInterval()));
   LOGINFO("getSocketBufferSize: %d", pool->getSocketBufferSize());
-  LOGINFO("getReadTimeout: %s", to_string(pool->getReadTimeout()).c_str());
+  LOGINFO("getReadTimeout: " + to_string(pool->getReadTimeout()));
   LOGINFO("getMinConnections: %d", pool->getMinConnections());
   LOGINFO("getMaxConnections: %d", pool->getMaxConnections());
-  LOGINFO("getIdleTimeout: %s", to_string(pool->getIdleTimeout()).c_str());
-  LOGINFO("getPingInterval: %s", to_string(pool->getPingInterval()).c_str());
-  LOGINFO("getStatisticInterval: %s",
-          to_string(pool->getStatisticInterval()).c_str());
+  LOGINFO("getIdleTimeout: " + to_string(pool->getIdleTimeout()));
+  LOGINFO("getPingInterval: " + to_string(pool->getPingInterval()));
+  LOGINFO("getStatisticInterval: " + to_string(pool->getStatisticInterval()));
   LOGINFO("getRetryAttempts: %d", pool->getRetryAttempts());
   LOGINFO("getSubscriptionEnabled: %s",
           pool->getSubscriptionEnabled() ? "true" : "false");
   LOGINFO("getSubscriptionRedundancy: %d", pool->getSubscriptionRedundancy());
-  LOGINFO("getSubscriptionMessageTrackingTimeout: %s",
-          to_string(pool->getSubscriptionMessageTrackingTimeout()).c_str());
-  LOGINFO("getSubscriptionAckInterval: %s",
-          to_string(pool->getSubscriptionAckInterval()).c_str());
-  LOGINFO("getServerGroup: %s", pool->getServerGroup());
+  LOGINFO("getSubscriptionMessageTrackingTimeout: " +
+          to_string(pool->getSubscriptionMessageTrackingTimeout()));
+  LOGINFO("getSubscriptionAckInterval: " +
+          to_string(pool->getSubscriptionAckInterval()));
+  LOGINFO("getServerGroup: " + pool->getServerGroup());
   LOGINFO("getThreadLocalConnections: %s",
           pool->getThreadLocalConnections() ? "true" : "false");
   LOGINFO("getPRSingleHopEnabled: %s",
@@ -714,7 +713,7 @@ std::shared_ptr<Region> CacheHelper::createPooledRegionConcurrencyCheckDisabled(
   }
   return regionFactory.create(name);
 }
- std::shared_ptr<Region> CacheHelper::createRegionDiscOverFlow(
+std::shared_ptr<Region> CacheHelper::createRegionDiscOverFlow(
     const char* name, bool caching, bool clientNotificationEnabled,
     const std::chrono::seconds& ettl, const std::chrono::seconds& eit,
     const std::chrono::seconds& rttl, const std::chrono::seconds& rit, int lel,
@@ -729,7 +728,7 @@ std::shared_ptr<Region> CacheHelper::createPooledRegionConcurrencyCheckDisabled(
   af.setCloningEnabled(true);
   if (lel > 0) {
     af.setDiskPolicy(DiskPolicyType::OVERFLOWS);
-   auto sqLiteProps = Properties::create();
+    auto sqLiteProps = Properties::create();
     sqLiteProps->insert("PageSize", "65536");
     sqLiteProps->insert("MaxPageCount", "1073741823");
     std::string sqlite_dir =
@@ -850,18 +849,18 @@ std::shared_ptr<Region> CacheHelper::createPooledRegionStickySingleHop(
     const std::shared_ptr<CacheListener>& cacheListener,
     ExpirationAction::Action action) {
   LOG("createPooledRegionStickySingleHop");
- auto poolFacPtr = getCache()->getPoolManager().createFactory();
- poolFacPtr->setSubscriptionEnabled(clientNotificationEnabled);
- poolFacPtr->setThreadLocalConnections(true);
- poolFacPtr->setPRSingleHopEnabled(true);
- LOG("adding pool locators");
- addServerLocatorEPs(locators, poolFacPtr);
+  auto poolFacPtr = getCache()->getPoolManager().createFactory();
+  poolFacPtr->setSubscriptionEnabled(clientNotificationEnabled);
+  poolFacPtr->setThreadLocalConnections(true);
+  poolFacPtr->setPRSingleHopEnabled(true);
+  LOG("adding pool locators");
+  addServerLocatorEPs(locators, poolFacPtr);
 
- if ((getCache()->getPoolManager().find(poolName)) ==
-     nullptr) {  // Pool does not exist with the same name.
-   auto pptr = poolFacPtr->create(poolName);
-   LOG("createPooledRegionStickySingleHop logPoolAttributes");
-   logPoolAttributes(pptr);
+  if ((getCache()->getPoolManager().find(poolName)) ==
+      nullptr) {  // Pool does not exist with the same name.
+    auto pptr = poolFacPtr->create(poolName);
+    LOG("createPooledRegionStickySingleHop logPoolAttributes");
+    logPoolAttributes(pptr);
   }
 
   RegionShortcut preDefRA = PROXY;
@@ -891,44 +890,39 @@ std::shared_ptr<Region> CacheHelper::createSubregion(
   if (listener != nullptr) {
     af.setCacheListener(listener);
   }
- std::shared_ptr<RegionAttributes> rattrsPtr = af.createRegionAttributes();
+  std::shared_ptr<RegionAttributes> rattrsPtr = af.createRegionAttributes();
 
- return parent->createSubregion(name, rattrsPtr);
+  return parent->createSubregion(name, rattrsPtr);
 }
 std::shared_ptr<CacheableString> CacheHelper::createCacheable(
     const char* value) {
   return CacheableString::create(value);
- }
-
- void CacheHelper::showKeys(
-     std::vector<std::shared_ptr<CacheableKey>>& vecKeys) {
-   fprintf(stdout, "vecKeys.size() = %zd\n", vecKeys.size());
-   for (uint32_t i = 0; i < static_cast<uint32_t>(vecKeys.size()); i++) {
-     char msg[1024];
-     size_t wrote = vecKeys.at(i)->logString(msg, 1023);
-     msg[wrote] = '\0';  // just in case...
-     fprintf(stdout, "key[%d] - %s\n", i, msg);
-   }
-   fflush(stdout);
- }
-
- void CacheHelper::showRegionAttributes(RegionAttributes& attributes) {
-   printf("caching=%s\n", attributes.getCachingEnabled() ? "true" : "false");
-   printf("Entry Time To Live = %s\n",
-          to_string(attributes.getEntryTimeToLive()).c_str());
-   printf("Entry Idle Timeout = %s\n",
-          to_string(attributes.getEntryIdleTimeout()).c_str());
-   printf("Region Time To Live = %s\n",
-          to_string(attributes.getRegionTimeToLive()).c_str());
-   printf("Region Idle Timeout = %s\n",
-          to_string(attributes.getRegionIdleTimeout()).c_str());
-   printf("Initial Capacity = %d\n", attributes.getInitialCapacity());
-   printf("Load Factor = %f\n", attributes.getLoadFactor());
-   printf("End Points = %s\n",
-          (attributes.getEndpoints() != nullptr ? attributes.getEndpoints()
-                                                : "(null)"));
-}
- std::shared_ptr<QueryService> CacheHelper::getQueryService() {
+}
+
+void CacheHelper::showKeys(
+    std::vector<std::shared_ptr<CacheableKey>>& vecKeys) {
+  fprintf(stdout, "vecKeys.size() = %zd\n", vecKeys.size());
+  for (size_t i = 0; i < vecKeys.size(); i++) {
+    fprintf(stdout, "key[%zd] - %s\n", i, vecKeys.at(i)->toString().c_str());
+  }
+  fflush(stdout);
+}
+
+void CacheHelper::showRegionAttributes(RegionAttributes& attributes) {
+  printf("caching=%s\n", attributes.getCachingEnabled() ? "true" : "false");
+  printf("Entry Time To Live = %s\n",
+         to_string(attributes.getEntryTimeToLive()).c_str());
+  printf("Entry Idle Timeout = %s\n",
+         to_string(attributes.getEntryIdleTimeout()).c_str());
+  printf("Region Time To Live = %s\n",
+         to_string(attributes.getRegionTimeToLive()).c_str());
+  printf("Region Idle Timeout = %s\n",
+         to_string(attributes.getRegionIdleTimeout()).c_str());
+  printf("Initial Capacity = %d\n", attributes.getInitialCapacity());
+  printf("Load Factor = %f\n", attributes.getLoadFactor());
+  printf("End Points = %s\n", attributes.getEndpoints().c_str());
+}
+std::shared_ptr<QueryService> CacheHelper::getQueryService() {
   return cachePtr->getQueryService();
 }
 
@@ -1645,8 +1639,8 @@ void CacheHelper::terminate_process_file(
             std::chrono::system_clock::now() - start);
         LOG("CacheHelper::terminate_process_file: process exited. "
             "pidFileName=" +
-            pidFileName + ", pid=" + pid + ", elapsed=" +
-            std::to_string(elapsed.count()) + "ms");
+            pidFileName + ", pid=" + pid +
+            ", elapsed=" + std::to_string(elapsed.count()) + "ms");
         return;
       }
       std::this_thread::yield();
@@ -1765,7 +1759,7 @@ void CacheHelper::initLocator(int instance, bool ssl, bool multiDS, int dsId,
 
   sprintf(cmd,
           "%s/bin/%s start locator --name=%s --port=%d --dir=%s "
-          "--properties-file=%s ",
+          "--properties-file=%s --http-service-port=0",
           gfjavaenv, GFSH, locDirname.c_str(), portnum, currDir.c_str(),
           geodeFile.c_str());
 
@@ -1775,11 +1769,11 @@ void CacheHelper::initLocator(int instance, bool ssl, bool multiDS, int dsId,
 }
 
 void CacheHelper::clearSecProp() {
- auto tmpSecProp = CacheHelper::getHelper()
-                                 .getCache()
-                                 ->getDistributedSystem()
-                                 .getSystemProperties()
-                                 .getSecurityProperties();
+  auto tmpSecProp = CacheHelper::getHelper()
+                        .getCache()
+                        ->getDistributedSystem()
+                        .getSystemProperties()
+                        .getSecurityProperties();
   tmpSecProp->remove("security-username");
   tmpSecProp->remove("security-password");
 }
diff --git a/cppcache/integration-test/DeltaEx.hpp b/cppcache/integration-test/DeltaEx.hpp
index 8a5ffa2e..3c30eced 100644
--- a/cppcache/integration-test/DeltaEx.hpp
+++ b/cppcache/integration-test/DeltaEx.hpp
@@ -48,13 +48,15 @@ class DeltaEx : public Cacheable, public Delta {
   static int cloneCount;
   DeltaEx() : Delta(nullptr), counter(1), isDelta(false) {}
   DeltaEx(int count) : Delta(nullptr), counter(0), isDelta(false) {}
-  virtual bool hasDelta() { return isDelta; }
-  virtual void toDelta(DataOutput& out) const {
+  DeltaEx(const DeltaEx& rhs) = default;
+
+  virtual bool hasDelta() const override { return isDelta; }
+  virtual void toDelta(DataOutput& out) const override {
     out.writeInt(counter);
     toDeltaCount++;
   }
 
-  virtual void fromDelta(DataInput& in) {
+  virtual void fromDelta(DataInput& in) override {
     LOG("From delta gets called");
     int32_t val = in.readInt32();
     if (fromDeltaCount == 1) {
@@ -65,19 +67,19 @@ class DeltaEx : public Cacheable, public Delta {
     counter += val;
     fromDeltaCount++;
   }
-  virtual void toData(DataOutput& output) const {
+  virtual void toData(DataOutput& output) const override {
     output.writeInt(counter);
     toDataCount++;
   }
-  virtual void fromData(DataInput& input) {
+  virtual void fromData(DataInput& input) override {
     counter = input.readInt32();
     fromDataCount++;
   }
-  virtual int32_t classId() const { return 1; }
-  virtual uint32_t objectSize() const { return 0; }
-  std::shared_ptr<Delta> clone() {
+  virtual int32_t classId() const override { return 1; }
+  virtual uint32_t objectSize() const override { return 0; }
+  std::shared_ptr<Delta> clone() const override {
     cloneCount++;
-    return shared_from_this();
+    return std::make_shared<DeltaEx>(*this);
   }
   virtual ~DeltaEx() {}
   void setDelta(bool delta) { this->isDelta = delta; }
@@ -103,13 +105,15 @@ class PdxDeltaEx : public PdxSerializable, public Delta {
   static int m_cloneCount;
   PdxDeltaEx() : Delta(nullptr), m_counter(1), m_isDelta(false) {}
   PdxDeltaEx(int count) : Delta(nullptr), m_counter(0), m_isDelta(false) {}
-  virtual bool hasDelta() { return m_isDelta; }
-  virtual void toDelta(DataOutput& out) const {
+  PdxDeltaEx(const PdxDeltaEx& rhs)
+      : Delta(nullptr), m_counter(rhs.m_counter), m_isDelta(rhs.m_isDelta) {}
+  virtual bool hasDelta() const override { return m_isDelta; }
+  virtual void toDelta(DataOutput& out) const override {
     out.writeInt(m_counter);
     m_toDeltaCount++;
   }
 
-  virtual void fromDelta(DataInput& in) {
+  virtual void fromDelta(DataInput& in) override {
     LOG("From delta gets called");
     int32_t val = in.readInt32();
     if (m_fromDeltaCount == 1) {
@@ -121,34 +125,37 @@ class PdxDeltaEx : public PdxSerializable, public Delta {
     m_fromDeltaCount++;
   }
 
-  const char* getClassName() const { return "PdxTests.PdxDeltaEx"; }
+  const std::string& getClassName() const override {
+    static std::string className = "PdxTests.PdxDeltaEx";
+    return className;
+  }
 
-  void toData(std::shared_ptr<PdxWriter> pw) {
+  void toData(std::shared_ptr<PdxWriter> pw) const override {
     pw->writeInt("counter", m_counter);
     m_toDataCount++;
   }
 
-  void fromData(std::shared_ptr<PdxReader> pr) {
+  void fromData(std::shared_ptr<PdxReader> pr) override {
     m_counter = pr->readInt("counter");
     m_fromDataCount++;
   }
 
   static PdxSerializable* createDeserializable() { return new PdxDeltaEx(); }
 
-  std::shared_ptr<Delta> clone() {
+  std::shared_ptr<Delta> clone() const override {
     m_cloneCount++;
-    return shared_from_this();
+    return std::make_shared<PdxDeltaEx>(*this);
   }
 
   virtual ~PdxDeltaEx() {}
 
   void setDelta(bool delta) { this->m_isDelta = delta; }
 
-  std::shared_ptr<CacheableString> toString() const {
+  std::string toString() const override {
     char idbuf[1024];
     sprintf(idbuf, "PdxDeltaEx :: [counter=%d]  [isDelta=%d]", m_counter,
             m_isDelta);
-    return CacheableString::create(idbuf);
+    return idbuf;
   }
 };
 
diff --git a/cppcache/integration-test/QueryHelper.hpp b/cppcache/integration-test/QueryHelper.hpp
index 97eebabc..dab0079e 100644
--- a/cppcache/integration-test/QueryHelper.hpp
+++ b/cppcache/integration-test/QueryHelper.hpp
@@ -219,8 +219,8 @@ void QueryHelper::populatePortfolioPdxData(std::shared_ptr<Region>& rptr,
       auto keyport = CacheableKey::create(portname);
 
       rptr->put(keyport, port);
-      LOGINFO("populatePortfolioPdxData:: Put for iteration current = %d done",
-              current);
+      LOGDEBUG("populatePortfolioPdxData:: Put for iteration current = %d done",
+               current);
     }
   }
   // portfolioSetSize = setSize; portfolioNumSets = numSets; objectSize =
@@ -251,7 +251,7 @@ void QueryHelper::populatePositionPdxData(std::shared_ptr<Region>& rptr,
 void QueryHelper::populatePDXObject(std::shared_ptr<Region>& rptr) {
   // Register PdxType Object
 
-  CacheImpl* cacheImpl = CacheRegionHelper::getCacheImpl(&rptr->getCache());
+  auto cacheImpl = CacheRegionHelper::getCacheImpl(&rptr->getCache());
   cacheImpl->getSerializationRegistry()->addPdxType(PdxTests::PdxType::createDeserializable);
   LOG("PdxObject Registered Successfully....");
 
diff --git a/cppcache/integration-test/QueryStrings.hpp b/cppcache/integration-test/QueryStrings.hpp
index 669d44d9..e9ac83ab 100644
--- a/cppcache/integration-test/QueryStrings.hpp
+++ b/cppcache/integration-test/QueryStrings.hpp
@@ -57,14 +57,11 @@ enum queryCategory {
 
 class QueryStrings {
  public:
-  QueryStrings(queryCategory pcategory, const char* pquery,
-               bool pisLargeResultset = false) {
-    size_t querylen = static_cast<int>(strlen(pquery));
-    if (querylen < MAX_QRY_LENGTH) memcpy(_query, pquery, querylen);
-    memset(&_query[querylen], '\0', 1);
-    category = pcategory;
-    haveLargeResultset = pisLargeResultset;
-  }
+  QueryStrings(queryCategory pcategory, std::string pquery,
+               bool pisLargeResultset = false)
+      : category(pcategory),
+        _query(std::move(pquery)),
+        haveLargeResultset(pisLargeResultset) {}
 
   static int RSsize() { return RS_ARRAY_SIZE; };
   static int RSPsize() { return RSP_ARRAY_SIZE; };
@@ -74,11 +71,11 @@ class QueryStrings {
   static int SSOPLsize() { return SSOPL_ARRAY_SIZE; };
   static int RQsize() { return RQ_ARRAY_SIZE; };
   static int CQRSsize() { return CQRS_ARRAY_SIZE; };
-  const char* query() const { return _query; };
+  const std::string& query() const { return _query; };
 
  public:
-  char _query[MAX_QRY_LENGTH];
   queryCategory category;
+  std::string _query;
   bool haveLargeResultset;
 
  private:
diff --git a/cppcache/integration-test/TallyListener.hpp b/cppcache/integration-test/TallyListener.hpp
index 65e9dcce..44d90ea0 100644
--- a/cppcache/integration-test/TallyListener.hpp
+++ b/cppcache/integration-test/TallyListener.hpp
@@ -122,8 +122,8 @@ class TallyListener : public CacheListener {
     if (m_callbackArg != nullptr) {
       auto callbkArg =
           std::dynamic_pointer_cast<CacheableKey>(event.getCallbackArgument());
-      if (strcmp(m_callbackArg->toString()->asChar(),
-                 callbkArg->toString()->asChar()) == 0) {
+      if (strcmp(m_callbackArg->toString().c_str(),
+                 callbkArg->toString().c_str()) == 0) {
         isCallbackCalled = true;
       }
     }
@@ -168,15 +168,13 @@ void TallyListener::afterCreate(const EntryEvent& event) {
   checkcallbackArg(event);
 
   auto strPtr = std::dynamic_pointer_cast<CacheableString>(event.getNewValue());
-  char keytext[100];
-  m_lastKey->logString(keytext, 100);
   if (!m_quiet) {
     char buf[1024];
-    sprintf(buf, "TallyListener create - key = \"%s\", value = \"%s\"", keytext,
-            strPtr->asChar());
+    sprintf(buf, "TallyListener create - key = \"%s\", value = \"%s\"",
+            m_lastKey->toString().c_str(), strPtr->asChar());
     LOGDEBUG(buf);
   }
-  std::string keyString(keytext);
+  std::string keyString(m_lastKey->toString().c_str());
   if ((!m_ignoreTimeout) && (keyString.find("timeout") != std::string::npos)) {
     LOG("TallyListener: Sleeping 10 seconds to force a timeout.");
     SLEEP(10000);  // this should give the client cause to timeout...
@@ -190,15 +188,13 @@ void TallyListener::afterUpdate(const EntryEvent& event) {
   m_lastValue = event.getNewValue();
   checkcallbackArg(event);
   auto strPtr = std::dynamic_pointer_cast<CacheableString>(event.getNewValue());
-  char keytext[100];
-  m_lastKey->logString(keytext, 100);
   if (!m_quiet) {
     char buf[1024];
-    sprintf(buf, "TallyListener update - key = \"%s\", value = \"%s\"", keytext,
-            strPtr->asChar());
+    sprintf(buf, "TallyListener update - key = \"%s\", value = \"%s\"",
+            m_lastKey->toString().c_str(), strPtr->asChar());
     LOG(buf);
   }
-  std::string keyString(keytext);
+  std::string keyString(m_lastKey->toString().c_str());
   if ((!m_ignoreTimeout) && (keyString.find("timeout") != std::string::npos)) {
     LOG("TallyListener: Sleeping 10 seconds to force a timeout.");
     SLEEP(10000);  // this should give the client cause to timeout...
diff --git a/cppcache/integration-test/TallyWriter.hpp b/cppcache/integration-test/TallyWriter.hpp
index e8425b76..2dc43272 100644
--- a/cppcache/integration-test/TallyWriter.hpp
+++ b/cppcache/integration-test/TallyWriter.hpp
@@ -141,8 +141,8 @@ class TallyWriter : virtual public CacheWriter {
     if (m_callbackArg != nullptr) {
       auto callbkArg =
           std::dynamic_pointer_cast<CacheableKey>(event.getCallbackArgument());
-      if (strcmp(m_callbackArg->toString()->asChar(),
-                 callbkArg->toString()->asChar()) == 0) {
+      if (strcmp(m_callbackArg->toString().c_str(),
+                 callbkArg->toString().c_str()) == 0) {
         isCallbackCalled = true;
       }
     }
diff --git a/cppcache/integration-test/ThinClientDistOps.hpp b/cppcache/integration-test/ThinClientDistOps.hpp
index a0209d1f..111c8ab5 100644
--- a/cppcache/integration-test/ThinClientDistOps.hpp
+++ b/cppcache/integration-test/ThinClientDistOps.hpp
@@ -347,7 +347,7 @@ void createAndVerifyEntry(const char* name) {
   auto keyObject3 = std::make_shared<PdxTests::PdxType>();
   regPtr->create(keyObject3, "testString");
   auto strVal = regPtr->get(keyObject3);
-  ASSERT(strcmp(strVal->toString()->asChar(), "testString") == 0,
+  ASSERT(strcmp(strVal->toString().c_str(), "testString") == 0,
          "strVal should be testString.");
 
   /*8.create new with entry userobject cantain all cacheable type ( like
@@ -447,7 +447,7 @@ void doGetAgain(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "get  region name%s\n", regPtr->getName());
+  fprintf(stdout, "get  region name%s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -479,7 +479,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -700,16 +700,16 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     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;
-    key0 = vec0[0]->toString()->asChar();
-    key1 = vec0[1]->toString()->asChar();
+    key0 = vec0[0]->toString().c_str();
+    key1 = vec0[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in first region.");
     ASSERT(key0 == keys[0] || key0 == keys[1],
            "Unexpected key in first region.");
     ASSERT(key1 == keys[0] || key1 == keys[1],
            "Unexpected key in first region.");
 
-    key0 = vec1[0]->toString()->asChar();
-    key1 = vec1[1]->toString()->asChar();
+    key0 = vec1[0]->toString().c_str();
+    key1 = vec1[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in second region.");
     ASSERT(key0 == keys[2] || key0 == keys[3],
            "Unexpected key in second region.");
diff --git a/cppcache/integration-test/ThinClientDurable.hpp b/cppcache/integration-test/ThinClientDurable.hpp
index 59e86bbb..b662eaa5 100644
--- a/cppcache/integration-test/ThinClientDurable.hpp
+++ b/cppcache/integration-test/ThinClientDurable.hpp
@@ -71,11 +71,12 @@ class OperMonitor : public CacheListener {
     char buff[128] = {'\0'};
     auto keyPtr = std::dynamic_pointer_cast<CacheableString>(key);
     if (value != nullptr) {
-      sprintf(buff, "Event [%s, %d] called for %s:%s", keyPtr->toString(),
-              value->value(), m_clientName.c_str(), m_regionName.c_str());
+      sprintf(buff, "Event [%s, %d] called for %s:%s",
+              keyPtr->toString().c_str(), value->value(), m_clientName.c_str(),
+              m_regionName.c_str());
       m_map[key] = value;
     } else {
-      sprintf(buff, "Event Key=%s called for %s:%s", keyPtr->toString(),
+      sprintf(buff, "Event Key=%s called for %s:%s", keyPtr->toString().c_str(),
               m_clientName.c_str(), m_regionName.c_str());
     }
     LOG(buff);
@@ -106,7 +107,8 @@ class OperMonitor : public CacheListener {
       const auto valuePtr =
           std::dynamic_pointer_cast<CacheableInt32>(item.second);
 
-      if (strchr(keyPtr->toString(), 'D') == nullptr) { /*Non Durable Key */
+      if (keyPtr->toString().find('D') ==
+          std::string::npos) { /*Non Durable Key */
         sprintf(buf,
                 "Expected final value for nonDurable Keys = %d, Actual = %d",
                 nonDurableValue, valuePtr->value());
@@ -138,11 +140,16 @@ class OperMonitor : public CacheListener {
   virtual void afterRegionDestroy(const RegionEvent& event){};
 };
 
-void setCacheListener(const char* regName, std::shared_ptr<OperMonitor> monitor) {
+void setCacheListener(const char* regName,
+                      std::shared_ptr<OperMonitor> monitor) {
   auto reg = getHelper()->getRegion(regName);
   auto attrMutator = reg->getAttributesMutator();
   attrMutator->setCacheListener(monitor);
-}std::shared_ptr<OperMonitor> mon1C1 = nullptr;std::shared_ptr<OperMonitor> mon2C1=nullptr;std::shared_ptr<OperMonitor> mon1C2 = nullptr;std::shared_ptr<OperMonitor> mon2C2=nullptr;
+}
+std::shared_ptr<OperMonitor> mon1C1 = nullptr;
+std::shared_ptr<OperMonitor> mon2C1 = nullptr;
+std::shared_ptr<OperMonitor> mon1C2 = nullptr;
+std::shared_ptr<OperMonitor> mon2C2 = nullptr;
 
 /* Total 10 Keys , alternate durable and non-durable */
 const char* mixKeys[] = {"Key-1", "D-Key-1", "L-Key", "LD-Key"};
@@ -152,8 +159,10 @@ const char* testRegex[] = {"D-Key-.*", "Key-.*"};
 #include "ThinClientTasks_C2S2.hpp"
 
 void initClientCache(int durableIdx, int redundancy,
-                     std::chrono::seconds durableTimeout, std::shared_ptr<OperMonitor>& mon1,
-                     std::shared_ptr<OperMonitor>& mon2, int sleepDuration = 0) {
+                     std::chrono::seconds durableTimeout,
+                     std::shared_ptr<OperMonitor>& mon1,
+                     std::shared_ptr<OperMonitor>& mon2,
+                     int sleepDuration = 0) {
   // Sleep before starting , Used for Timeout testing.
   if (sleepDuration) SLEEP(sleepDuration);
 
@@ -164,8 +173,8 @@ void initClientCache(int durableIdx, int redundancy,
 
   getHelper()->cachePtr->readyForEvents();
 
- auto regPtr0 = getHelper()->getRegion(regionNames[0]);
- auto regPtr1 = getHelper()->getRegion(regionNames[1]);
+  auto regPtr0 = getHelper()->getRegion(regionNames[0]);
+  auto regPtr1 = getHelper()->getRegion(regionNames[1]);
 
   // Register Regex in both region.
   regPtr0->registerRegex(testRegex[0], true);
@@ -174,18 +183,18 @@ void initClientCache(int durableIdx, int redundancy,
   regPtr1->registerRegex(testRegex[1], false);
 
   // Register List in both regions
-  std::vector<std::shared_ptr<CacheableKey>>  v;
- auto ldkey = CacheableKey::create(mixKeys[3]);
+  std::vector<std::shared_ptr<CacheableKey>> v;
+  auto ldkey = CacheableKey::create(mixKeys[3]);
   v.push_back(ldkey);
   regPtr0->registerKeys(v, true);
   regPtr1->registerKeys(v, true);
   v.clear();
- auto lkey = CacheableKey::create(mixKeys[2]);
- v.push_back(lkey);
- regPtr0->registerKeys(v);
- regPtr1->registerKeys(v);
+  auto lkey = CacheableKey::create(mixKeys[2]);
+  v.push_back(lkey);
+  regPtr0->registerKeys(v);
+  regPtr1->registerKeys(v);
 
- LOG("Clnt1Init complete.");
+  LOG("Clnt1Init complete.");
 }
 
 void feederUpdate(int value, int ignoreR2 = false) {
diff --git a/cppcache/integration-test/ThinClientDurableFailover.hpp b/cppcache/integration-test/ThinClientDurableFailover.hpp
index 9188d4f3..d484daa5 100644
--- a/cppcache/integration-test/ThinClientDurableFailover.hpp
+++ b/cppcache/integration-test/ThinClientDurableFailover.hpp
@@ -69,7 +69,7 @@ class OperMonitor : public CacheListener {
     auto keyPtr = std::dynamic_pointer_cast<CacheableString>(key);
     if (keyPtr != nullptr && value != nullptr) {
       char buf[256] = {'\0'};
-      sprintf(buf, " Got Key: %s, Value: %d", keyPtr->toString(),
+      sprintf(buf, " Got Key: %s, Value: %d", keyPtr->toString().c_str(),
               value->value());
       LOG(buf);
     }
@@ -101,7 +101,8 @@ class OperMonitor : public CacheListener {
       auto keyPtr = std::dynamic_pointer_cast<CacheableString>(item.first);
       auto valuePtr = std::dynamic_pointer_cast<CacheableInt32>(item.second);
 
-      if (strchr(keyPtr->toString(), 'D') == nullptr) { /*Non Durable Key */
+      if (keyPtr->toString().find('D') ==
+          std::string::npos) { /*Non Durable Key */
         sprintf(buf,
                 "Expected final value for nonDurable Keys = %d, Actual = %d",
                 nonDurableValue, valuePtr->value());
@@ -133,11 +134,14 @@ class OperMonitor : public CacheListener {
   virtual void afterRegionDestroy(const RegionEvent& event){};
 };
 
-void setCacheListener(const char* regName, std::shared_ptr<OperMonitor> monitor) {
+void setCacheListener(const char* regName,
+                      std::shared_ptr<OperMonitor> monitor) {
   auto reg = getHelper()->getRegion(regName);
   auto attrMutator = reg->getAttributesMutator();
   attrMutator->setCacheListener(monitor);
-}std::shared_ptr<OperMonitor> mon1 = nullptr;std::shared_ptr<OperMonitor> mon2=nullptr;
+}
+std::shared_ptr<OperMonitor> mon1 = nullptr;
+std::shared_ptr<OperMonitor> mon2 = nullptr;
 
 #include "ThinClientDurableInit.hpp"
 #include "ThinClientTasks_C2S2.hpp"
@@ -146,8 +150,9 @@ void setCacheListener(const char* regName, std::shared_ptr<OperMonitor> monitor)
 const char* mixKeys[] = {"Key-1", "D-Key-1", "L-Key", "LD-Key"};
 const char* testRegex[] = {"D-Key-.*", "Key-.*"};
 
-void initClientCache(int redundancy, int durableTimeout, std::shared_ptr<OperMonitor>& mon,
-                     int sleepDuration = 0, int durableIdx = 0) {
+void initClientCache(int redundancy, int durableTimeout,
+                     std::shared_ptr<OperMonitor>& mon, int sleepDuration = 0,
+                     int durableIdx = 0) {
   if (sleepDuration) SLEEP(sleepDuration);
 
   if (mon == nullptr) {
@@ -165,7 +170,7 @@ void initClientCache(int redundancy, int durableTimeout, std::shared_ptr<OperMon
 
   getHelper()->cachePtr->readyForEvents();
 
- auto regPtr0 = getHelper()->getRegion(regionNames[0]);
+  auto regPtr0 = getHelper()->getRegion(regionNames[0]);
 
   // for R =1 it will get a redundancy error
   try {
diff --git a/cppcache/integration-test/ThinClientDurableInterest.hpp b/cppcache/integration-test/ThinClientDurableInterest.hpp
index e5fab230..ab389b1c 100644
--- a/cppcache/integration-test/ThinClientDurableInterest.hpp
+++ b/cppcache/integration-test/ThinClientDurableInterest.hpp
@@ -58,7 +58,7 @@ class OperMonitor : public CacheListener {
     char buf[256];
     sprintf(buf,
             "Received event for Cachelistener id =%d with key %s and value %d.",
-            m_id, key->toString()->asChar(), value->value());
+            m_id, key->toString().c_str(), value->value());
     LOG(buf);
 
     m_map[key] = value;
@@ -92,7 +92,8 @@ class OperMonitor : public CacheListener {
       const auto valuePtr =
           std::dynamic_pointer_cast<CacheableInt32>(item.second);
 
-      if (strchr(keyPtr->toString(), 'D') == nullptr) { /*Non Durable Key */
+      if (keyPtr->toString().find('D') ==
+          std::string::npos) { /*Non Durable Key */
         sprintf(buf,
                 "Expected final value for nonDurable Keys = %d, Actual = %d",
                 nonDurableValue, valuePtr->value());
@@ -116,12 +117,14 @@ class OperMonitor : public CacheListener {
 };
 
 const char* mixKeys[] = {"Key-1", "D-Key-1", "Key-2", "D-Key-2"};
-const char* testRegex[] = {"D-Key-.*", "Key-.*"}; std::shared_ptr<OperMonitor> mon1, mon2;
+const char* testRegex[] = {"D-Key-.*", "Key-.*"};
+std::shared_ptr<OperMonitor> mon1, mon2;
 
 #include "ThinClientDurableInit.hpp"
 #include "ThinClientTasks_C2S2.hpp"
 
-void setCacheListener(const char* regName, std::shared_ptr<OperMonitor> monitor) {
+void setCacheListener(const char* regName,
+                      std::shared_ptr<OperMonitor> monitor) {
   LOGINFO("setCacheListener to %s ", regName);
   auto reg = getHelper()->getRegion(regName);
   auto attrMutator = reg->getAttributesMutator();
@@ -143,12 +146,13 @@ void initClientWithIntrest(int ClientIdx, std::shared_ptr<OperMonitor>& mon) {
     LOG("Exception occured while sending readyForEvents");
   }
 
- auto regPtr0 = getHelper()->getRegion(regionNames[0]);
+  auto regPtr0 = getHelper()->getRegion(regionNames[0]);
   regPtr0->registerRegex(testRegex[0], true);
   regPtr0->registerRegex(testRegex[1], false);
 }
 
-void initClientWithIntrest2(int ClientIdx, std::shared_ptr<OperMonitor>& monitor1,
+void initClientWithIntrest2(int ClientIdx,
+                            std::shared_ptr<OperMonitor>& monitor1,
                             std::shared_ptr<OperMonitor>& monitor2) {
   initClientAndTwoRegionsAndTwoPools(0, ClientIdx, std::chrono::seconds(60));
   if (monitor1 == nullptr) {
@@ -175,7 +179,7 @@ void initClientRemoveIntrest(int ClientIdx, std::shared_ptr<OperMonitor> mon) {
   getHelper()->cachePtr->readyForEvents();
 
   // Only unregister durable Intrest.
- auto regPtr0 = getHelper()->getRegion(regionNames[0]);
+  auto regPtr0 = getHelper()->getRegion(regionNames[0]);
   regPtr0->registerRegex(testRegex[0], true);
   regPtr0->unregisterRegex(testRegex[0]);
 }
diff --git a/cppcache/integration-test/ThinClientFailover.hpp b/cppcache/integration-test/ThinClientFailover.hpp
index 49f1e7dc..3defe9fa 100644
--- a/cppcache/integration-test/ThinClientFailover.hpp
+++ b/cppcache/integration-test/ThinClientFailover.hpp
@@ -247,7 +247,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientFailover2.hpp b/cppcache/integration-test/ThinClientFailover2.hpp
index a57b4c9f..50369b8e 100644
--- a/cppcache/integration-test/ThinClientFailover2.hpp
+++ b/cppcache/integration-test/ThinClientFailover2.hpp
@@ -254,7 +254,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -427,9 +427,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     ASSERT(vec1.size() == 2, "Should have 2 keys in second region.");
 
     std::string key0, key1, key2;
-    key0 = vec0[0]->toString()->asChar();
-    key1 = vec0[1]->toString()->asChar();
-    key2 = vec0[2]->toString()->asChar();
+    key0 = vec0[0]->toString().c_str();
+    key1 = vec0[1]->toString().c_str();
+    key2 = vec0[2]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in first region.");
     ASSERT(key0 != key2, "The two keys should be different in first region.");
     ASSERT(key1 != key2, "The two keys should be different in first region.");
@@ -440,8 +440,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     ASSERT(key2 == keys[0] || key2 == keys[1] || key2 == keys[4],
            "Unexpected key in first region.");
 
-    key0 = vec1[0]->toString()->asChar();
-    key1 = vec1[1]->toString()->asChar();
+    key0 = vec1[0]->toString().c_str();
+    key1 = vec1[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in second region.");
     ASSERT(key0 == keys[2] || key0 == keys[3],
            "Unexpected key in second region.");
diff --git a/cppcache/integration-test/ThinClientFailover3.hpp b/cppcache/integration-test/ThinClientFailover3.hpp
index 11ba8a24..c4bdefc9 100644
--- a/cppcache/integration-test/ThinClientFailover3.hpp
+++ b/cppcache/integration-test/ThinClientFailover3.hpp
@@ -219,7 +219,7 @@ void doNetsearch(const char *name, const char *key, const char *value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientFailoverInterest.hpp b/cppcache/integration-test/ThinClientFailoverInterest.hpp
index 323a1750..f566138c 100644
--- a/cppcache/integration-test/ThinClientFailoverInterest.hpp
+++ b/cppcache/integration-test/ThinClientFailoverInterest.hpp
@@ -260,7 +260,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientFailoverInterest2.hpp b/cppcache/integration-test/ThinClientFailoverInterest2.hpp
index 1c28de1a..1d805ef2 100644
--- a/cppcache/integration-test/ThinClientFailoverInterest2.hpp
+++ b/cppcache/integration-test/ThinClientFailoverInterest2.hpp
@@ -259,7 +259,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp b/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp
index f22b9d49..23f611dd 100644
--- a/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp
+++ b/cppcache/integration-test/ThinClientFailoverInterestAllWithCache.hpp
@@ -246,7 +246,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  LOGINFO("netsearch  region %s", regPtr->getName());
+  LOGINFO("netsearch  region %s", regPtr->getName().c_str());
   ASSERT(regPtr != nullptr, "Region not found.");
 
   // ASSERT(!regPtr->containsKey(keyPtr),
diff --git a/cppcache/integration-test/ThinClientFailoverRegex.hpp b/cppcache/integration-test/ThinClientFailoverRegex.hpp
index 7c670705..f1ed1466 100644
--- a/cppcache/integration-test/ThinClientFailoverRegex.hpp
+++ b/cppcache/integration-test/ThinClientFailoverRegex.hpp
@@ -260,7 +260,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientHelper.hpp b/cppcache/integration-test/ThinClientHelper.hpp
index 1f2f2a3b..3576bc2d 100644
--- a/cppcache/integration-test/ThinClientHelper.hpp
+++ b/cppcache/integration-test/ThinClientHelper.hpp
@@ -558,15 +558,15 @@ void doNetsearch(const char* name, const char* key, const char* value,
  auto keyPtr = CacheableKey::create(key);
 
  auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
-  fflush(stdout);
-  ASSERT(regPtr != nullptr, "Region not found.");
+ fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
+ fflush(stdout);
+ ASSERT(regPtr != nullptr, "Region not found.");
 
-  // ASSERT( !regPtr->containsKey( keyPtr ), "Key should not have been found in
-  // region." );
-  if (checkVal) {
-    ASSERT(!regPtr->containsValueForKey(keyPtr),
-           "Value should not have been found in region.");
+ // ASSERT( !regPtr->containsKey( keyPtr ), "Key should not have been found in
+ // region." );
+ if (checkVal) {
+   ASSERT(!regPtr->containsValueForKey(keyPtr),
+          "Value should not have been found in region.");
   }
 
   auto checkPtr = std::dynamic_pointer_cast<CacheableString>(
diff --git a/cppcache/integration-test/ThinClientInterestList.hpp b/cppcache/integration-test/ThinClientInterestList.hpp
index 357d4b58..e47abdc3 100644
--- a/cppcache/integration-test/ThinClientInterestList.hpp
+++ b/cppcache/integration-test/ThinClientInterestList.hpp
@@ -270,7 +270,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientInterestList2.hpp b/cppcache/integration-test/ThinClientInterestList2.hpp
index 687401d4..e0385cf0 100644
--- a/cppcache/integration-test/ThinClientInterestList2.hpp
+++ b/cppcache/integration-test/ThinClientInterestList2.hpp
@@ -270,7 +270,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientListenerInit.hpp b/cppcache/integration-test/ThinClientListenerInit.hpp
index 99f63b8b..4ed7e6f0 100644
--- a/cppcache/integration-test/ThinClientListenerInit.hpp
+++ b/cppcache/integration-test/ThinClientListenerInit.hpp
@@ -64,8 +64,8 @@ class ThinClientTallyLoader : public TallyLoader {
     char lstrvalue[32];
     sprintf(lstrvalue, "%i", loadValue);
     auto lreturnValue = CacheableString::create(lstrvalue);
-    if (key != nullptr && (nullptr != rp->getAttributes()->getEndpoints() ||
-                           rp->getAttributes()->getPoolName() != nullptr)) {
+    if (key && (!rp->getAttributes()->getEndpoints().empty() ||
+                !rp->getAttributes()->getPoolName().empty())) {
       LOGDEBUG("Putting the value (%s) for local region clients only ",
                lstrvalue);
       rp->put(key, lreturnValue);
@@ -155,7 +155,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testLoaderAndWriter)
 
     auto regEntryPtr = regPtr->getEntry(keyPtr);
     auto valuePtr = regEntryPtr->getValue();
-    int val = atoi(valuePtr->toString()->asChar());
+    int val = atoi(valuePtr->toString().c_str());
     LOGFINE("val for keyPtr is %d", val);
     ASSERT(val == 0, "Expected value CacheLoad value should be 0");
     numLoads++;
@@ -228,7 +228,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testDestroy)
     regPtr->get(keyPtr1);
     auto regEntryPtr = regPtr->getEntry(keyPtr1);
     auto valuePtr = regEntryPtr->getValue();
-    int val = atoi(valuePtr->toString()->asChar());
+    int val = atoi(valuePtr->toString().c_str());
     LOGFINE("val for keyPtr1 is %d", val);
     ASSERT(val == 0, "Expected value CacheLoad value should be 0");
     numUpdates++;
@@ -238,7 +238,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testDestroy)
     regPtr->get(keyPtr2);
     auto regEntryPtr1 = regPtr->getEntry(keyPtr2);
     auto valuePtr1 = regEntryPtr1->getValue();
-    int val1 = atoi(valuePtr1->toString()->asChar());
+    int val1 = atoi(valuePtr1->toString().c_str());
     LOGFINE("val1 for keyPtr2 is %d", val1);
     ASSERT(val1 == 1, "Expected value CacheLoad value should be 1");
     numLoads++;
diff --git a/cppcache/integration-test/ThinClientListenerWriter.hpp b/cppcache/integration-test/ThinClientListenerWriter.hpp
index f5d9d281..02767606 100644
--- a/cppcache/integration-test/ThinClientListenerWriter.hpp
+++ b/cppcache/integration-test/ThinClientListenerWriter.hpp
@@ -61,45 +61,45 @@ class SimpleCacheListener : public CacheListener {
 
 void SimpleCacheListener::afterCreate(const EntryEvent& event) {
   LOGINFO("SimpleCacheListener: Got an afterCreate event for %s region .",
-          event.getRegion()->getName());
+          event.getRegion()->getName().c_str());
   m_creates++;
 }
 
 void SimpleCacheListener::afterUpdate(const EntryEvent& event) {
   LOGINFO("SimpleCacheListener: Got an afterUpdate event for %s region .",
-          event.getRegion()->getName());
+          event.getRegion()->getName().c_str());
 }
 
 void SimpleCacheListener::afterInvalidate(const EntryEvent& event) {
   LOGINFO("SimpleCacheListener: Got an afterInvalidate event for %s region .",
-          event.getRegion()->getName());
+          event.getRegion()->getName().c_str());
 }
 
 void SimpleCacheListener::afterDestroy(const EntryEvent& event) {
   LOGINFO("SimpleCacheListener: Got an afterDestroy event for %s region .",
-          event.getRegion()->getName());
+          event.getRegion()->getName().c_str());
 }
 
 void SimpleCacheListener::afterRegionInvalidate(const RegionEvent& event) {
   LOGINFO(
       "SimpleCacheListener: Got an afterRegionInvalidate event for %s region .",
-      event.getRegion()->getName());
+      event.getRegion()->getName().c_str());
 }
 
 void SimpleCacheListener::afterRegionDestroy(const RegionEvent& event) {
   LOGINFO(
       "SimpleCacheListener: Got an afterRegionDestroy event for %s region .",
-      event.getRegion()->getName());
+      event.getRegion()->getName().c_str());
 }
 
 void SimpleCacheListener::close(const std::shared_ptr<Region>& region) {
   LOGINFO("SimpleCacheListener: Got an close event for %s region .",
-          region.get()->getName());
+          region.get()->getName().c_str());
 }
 
 void SimpleCacheListener::afterRegionClear(const RegionEvent& event) {
   LOGINFO("SimpleCacheListener: Got an afterRegionClear event for %s region .",
-          event.getRegion()->getName());
+          event.getRegion()->getName().c_str());
   m_clears++;
 }
 
diff --git a/cppcache/integration-test/ThinClientLocalCacheLoader.hpp b/cppcache/integration-test/ThinClientLocalCacheLoader.hpp
index 1f3b15a0..e84a81f4 100644
--- a/cppcache/integration-test/ThinClientLocalCacheLoader.hpp
+++ b/cppcache/integration-test/ThinClientLocalCacheLoader.hpp
@@ -51,8 +51,8 @@ class ThinClientTallyLoader : public TallyLoader {
     char lstrvalue[32];
     sprintf(lstrvalue, "%i", loadValue);
    auto lreturnValue = CacheableString::create(lstrvalue);
-   if (key != nullptr && (nullptr != rp->getAttributes()->getEndpoints() ||
-                          rp->getAttributes()->getPoolName() != nullptr)) {
+   if (key != nullptr && (!rp->getAttributes()->getEndpoints().empty() ||
+                          !rp->getAttributes()->getPoolName().empty())) {
      LOGDEBUG("Putting the value (%s) for local region clients only ",
               lstrvalue);
      rp->put(key, lreturnValue);
@@ -63,7 +63,7 @@ class ThinClientTallyLoader : public TallyLoader {
   void close(const std::shared_ptr<Region>& region) {
     LOG(" ThinClientTallyLoader::close() called");
     if (region != nullptr) {
-      LOGINFO(" Region %s is Destroyed = %d ", region->getName(),
+      LOGINFO(" Region %s is Destroyed = %d ", region->getName().c_str(),
               region->isDestroyed());
       ASSERT(region->isDestroyed() == true,
              "region.isDestroyed should return true");
@@ -138,7 +138,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testLoader)
 
    auto regEntryPtr = regionPtr->getEntry(keyPtr);
    auto valuePtr = regEntryPtr->getValue();
-   int val = atoi(valuePtr->toString()->asChar());
+   int val = atoi(valuePtr->toString().c_str());
    LOGFINE("val for keyPtr is %d", val);
    numLoads++;
    validateEventCount(__LINE__);
@@ -153,7 +153,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testDestroy)
    regionPtr->get(keyPtr2);
    auto regEntryPtr2 = regionPtr->getEntry(keyPtr2);
    auto valuePtr2 = regEntryPtr2->getValue();
-   int val2 = atoi(valuePtr2->toString()->asChar());
+   int val2 = atoi(valuePtr2->toString().c_str());
    LOGFINE("val2 for keyPtr2 is %d", val2);
    numLoads++;
    validateEventCount(__LINE__);
@@ -169,7 +169,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testInvalidateKey)
    regionPtr->get(keyPtr2);
    auto regEntryPtr = regionPtr->getEntry(keyPtr2);
    auto valuePtr = regEntryPtr->getValue();
-   int val = atoi(valuePtr->toString()->asChar());
+   int val = atoi(valuePtr->toString().c_str());
    LOGFINE("val for keyPtr1 is %d", val);
    numLoads++;
    validateEventCount(__LINE__);
@@ -183,7 +183,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testInvalidateKey)
    regionPtr->get(keyPtr4);
    auto regEntryPtr1 = regionPtr->getEntry(keyPtr4);
    auto valuePtr1 = regEntryPtr1->getValue();
-   int val1 = atoi(valuePtr1->toString()->asChar());
+   int val1 = atoi(valuePtr1->toString().c_str());
    LOGFINE("val1 for keyPtr4 is %d", val1);
    numLoads++;
    validateEventCount(__LINE__);
@@ -192,7 +192,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testInvalidateKey)
    regionPtr->get(keyPtr4);
    auto regEntryPtr2 = regionPtr->getEntry(keyPtr4);
    auto valuePtr2 = regEntryPtr2->getValue();
-   int val2 = atoi(valuePtr2->toString()->asChar());
+   int val2 = atoi(valuePtr2->toString().c_str());
    LOGFINE("val2 for keyPtr4 is %d", val2);
    numLoads++;
    validateEventCount(__LINE__);
@@ -209,7 +209,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testInvalidateRegion)
    regionPtr->get(keyPtr3);
    auto regEntryPtr = regionPtr->getEntry(keyPtr3);
    auto valuePtr = regEntryPtr->getValue();
-   int val = atoi(valuePtr->toString()->asChar());
+   int val = atoi(valuePtr->toString().c_str());
    LOGFINE("val for keyPtr3 is %d", val);
    numLoads++;
    validateEventCount(__LINE__);
@@ -225,7 +225,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testInvalidateRegion)
    regionPtr->get(keyPtr4);
    auto regEntryPtr1 = regionPtr->getEntry(keyPtr4);
    auto valuePtr1 = regEntryPtr1->getValue();
-   int val1 = atoi(valuePtr1->toString()->asChar());
+   int val1 = atoi(valuePtr1->toString().c_str());
    LOGFINE("val1 for keyPtr4 is %d", val1);
    numLoads++;
    validateEventCount(__LINE__);
@@ -234,7 +234,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testInvalidateRegion)
    regionPtr->get(keyPtr4);
    auto regEntryPtr2 = regionPtr->getEntry(keyPtr4);
    auto valuePtr2 = regEntryPtr2->getValue();
-   int val2 = atoi(valuePtr2->toString()->asChar());
+   int val2 = atoi(valuePtr2->toString().c_str());
    LOGFINE("val2 for keyPtr4 is %d", val2);
    numLoads++;
    validateEventCount(__LINE__);
diff --git a/cppcache/integration-test/ThinClientMultipleCaches.hpp b/cppcache/integration-test/ThinClientMultipleCaches.hpp
index cb9b2932..2811f6bb 100644
--- a/cppcache/integration-test/ThinClientMultipleCaches.hpp
+++ b/cppcache/integration-test/ThinClientMultipleCaches.hpp
@@ -74,9 +74,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, SetupAndTestMutlipleCaches)
     LOG("Doing get() on second cache.");
     auto value = region2->get("a")->toString();
 
-    ASSERT(std::strcmp(value->asChar(), "key") == 0,
+    ASSERT(value == "key",
            std::string("Expected value 'key' didn't equal actual value '")
-               .append(value->asChar())
+               .append(value)
                .append("'")
                .c_str());
   }
diff --git a/cppcache/integration-test/ThinClientNotification.hpp b/cppcache/integration-test/ThinClientNotification.hpp
index a04040ed..2f071db1 100644
--- a/cppcache/integration-test/ThinClientNotification.hpp
+++ b/cppcache/integration-test/ThinClientNotification.hpp
@@ -241,7 +241,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
   /*NIL: Changed the asserion due to the change in invalidate.
diff --git a/cppcache/integration-test/ThinClientPdxSerializers.hpp b/cppcache/integration-test/ThinClientPdxSerializers.hpp
index 8eabc70e..0f405f9f 100644
--- a/cppcache/integration-test/ThinClientPdxSerializers.hpp
+++ b/cppcache/integration-test/ThinClientPdxSerializers.hpp
@@ -25,12 +25,11 @@ static const char *CLASSNAME2 = "PdxTests.Address";
 
 class TestPdxSerializer : public PdxSerializer {
  public:
-  static void deallocate(void *testObject, const char *className) {
-    ASSERT(strcmp(className, CLASSNAME1) == 0 ||
-               strcmp(className, CLASSNAME2) == 0,
+  static void deallocate(void *testObject, const std::string &className) {
+    ASSERT(className == CLASSNAME1 || className == CLASSNAME2,
            "Unexpected classname in deallocate()");
     LOG("TestPdxSerializer::deallocate called");
-    if (strcmp(className, CLASSNAME1) == 0) {
+    if (className == CLASSNAME1) {
       PdxTests::NonPdxType *npt =
           reinterpret_cast<PdxTests::NonPdxType *>(testObject);
       delete npt;
@@ -41,24 +40,21 @@ class TestPdxSerializer : public PdxSerializer {
     }
   }
 
-  static uint32_t objectSize(void *testObject, const char *className) {
-    ASSERT(strcmp(className, CLASSNAME1) == 0 ||
-               strcmp(className, CLASSNAME2) == 0,
+  static uint32_t objectSize(void *testObject, const std::string &className) {
+    ASSERT(className == CLASSNAME1 || className == CLASSNAME2,
            "Unexpected classname in objectSize()");
     LOG("TestPdxSerializer::objectSize called");
     return 12345;  // dummy value
   }
 
-  UserDeallocator getDeallocator(const char *className) {
-    ASSERT(strcmp(className, CLASSNAME1) == 0 ||
-               strcmp(className, CLASSNAME2) == 0,
+  UserDeallocator getDeallocator(const std::string &className) override {
+    ASSERT(className == CLASSNAME1 || className == CLASSNAME2,
            "Unexpected classname in getDeallocator");
     return deallocate;
   }
 
-  UserObjectSizer getObjectSizer(const char *className) {
-    ASSERT(strcmp(className, CLASSNAME1) == 0 ||
-               strcmp(className, CLASSNAME2) == 0,
+  UserObjectSizer getObjectSizer(const std::string &className) override {
+    ASSERT(className == CLASSNAME1 || className == CLASSNAME2,
            "Unexpected classname in getObjectSizer");
     return objectSize;
   }
@@ -75,12 +71,12 @@ class TestPdxSerializer : public PdxSerializer {
     }
   }
 
-  void *fromData(const char *className, std::shared_ptr<PdxReader> pr) {
-    ASSERT(strcmp(className, CLASSNAME1) == 0 ||
-               strcmp(className, CLASSNAME2) == 0,
+  void *fromData(const std::string &className,
+                 std::shared_ptr<PdxReader> pr) override {
+    ASSERT(className == CLASSNAME1 || className == CLASSNAME2,
            "Unexpected classname in fromData");
 
-    if (strcmp(className, CLASSNAME2) == 0) {
+    if (className == CLASSNAME2) {
       return fromDataForAddress(pr);
     }
 
@@ -193,13 +189,12 @@ class TestPdxSerializer : public PdxSerializer {
     }
   }
 
-  bool toData(void *testObject, const char *className,
-              std::shared_ptr<PdxWriter> pw) {
-    ASSERT(strcmp(className, CLASSNAME1) == 0 ||
-               strcmp(className, CLASSNAME2) == 0,
+  bool toData(void *testObject, const std::string &className,
+              std::shared_ptr<PdxWriter> pw) override {
+    ASSERT(className == CLASSNAME1 || className == CLASSNAME2,
            "Unexpected classname in toData");
 
-    if (strcmp(className, CLASSNAME2) == 0) {
+    if (className == CLASSNAME2) {
       return toDataForAddress(testObject, pw);
     }
 
diff --git a/cppcache/integration-test/ThinClientPutAll.hpp b/cppcache/integration-test/ThinClientPutAll.hpp
index 9d63780d..bf22a0c8 100644
--- a/cppcache/integration-test/ThinClientPutAll.hpp
+++ b/cppcache/integration-test/ThinClientPutAll.hpp
@@ -302,7 +302,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -684,7 +684,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThirteen)
     map0.emplace(keyObject6, CacheableString::create("testString"));
     regPtr0->putAll(map0);
     auto checkPtr1 = regPtr0->get(keyObject6);
-    ASSERT(strcmp(checkPtr1->toString()->asChar(), "testString") == 0,
+    ASSERT(strcmp(checkPtr1->toString().c_str(), "testString") == 0,
            "strVal should be testString.");
     map0.clear();
 
diff --git a/cppcache/integration-test/ThinClientPutAllTimeout.hpp b/cppcache/integration-test/ThinClientPutAllTimeout.hpp
index baed7056..d3b96418 100644
--- a/cppcache/integration-test/ThinClientPutAllTimeout.hpp
+++ b/cppcache/integration-test/ThinClientPutAllTimeout.hpp
@@ -208,7 +208,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testWithoutTimeoutException)
       logmsg += excp.what();
       LOG(logmsg.c_str());
     } catch (const Exception& ex) {
-      printf("Exception while putALL :: %s : %s\n", ex.getName(),
+      printf("Exception while putALL :: %s : %s\n", ex.getName().c_str(),
              ex.what());
     }
     FAIL("Something is wrong while putAll");
@@ -233,7 +233,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, testWithoutTimeoutWithCallBackArgException)
       printf(
           "Exception while putAllWithOneEntryTimeoutWithCallBackArg :: %s : "
           "%s\n",
-          ex.getName(), ex.what());
+          ex.getName().c_str(), ex.what());
     }
     FAIL("Something is wrong while putAllWithOneEntryTimeoutWithCallBackArg");
   }
diff --git a/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp b/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp
index 955e50ca..2ae5b769 100644
--- a/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp
+++ b/cppcache/integration-test/ThinClientPutAllWithCallBack.hpp
@@ -301,7 +301,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -751,7 +751,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, VerifyPutAllWithObjectKey)
     regPtr0->putAll(map0, std::chrono::seconds(15),
                     CacheableInt32::create(1000));
     auto checkPtr1 = regPtr0->get(keyObject6);
-    ASSERT(strcmp(checkPtr1->toString()->asChar(), "testString") == 0,
+    ASSERT(strcmp(checkPtr1->toString().c_str(), "testString") == 0,
            "strVal should be testString.");
     map0.clear();
 
diff --git a/cppcache/integration-test/ThinClientPutGetAll.hpp b/cppcache/integration-test/ThinClientPutGetAll.hpp
index 264a25d4..be7e3968 100644
--- a/cppcache/integration-test/ThinClientPutGetAll.hpp
+++ b/cppcache/integration-test/ThinClientPutGetAll.hpp
@@ -79,11 +79,11 @@ void verifyGetAll(std::shared_ptr<Region> region, bool addToLocalCache,
     char buf[2048];
     for (const auto& iter : valuesMap) {
       const auto key = std::dynamic_pointer_cast<CacheableKey>(iter.first);
-      const auto actualKey = key->toString()->asChar();
+      const auto actualKey = key->toString().c_str();
       const auto& mVal = iter.second;
       if (mVal != nullptr) {
         const auto expectedVal = expected[actualKey].c_str();
-        const auto actualVal = mVal->toString()->asChar();
+        const auto actualVal = mVal->toString().c_str();
         sprintf(buf, "value from map %s , expected value %s ", actualVal,
                 expectedVal);
         LOG(buf);
diff --git a/cppcache/integration-test/ThinClientRegex.hpp b/cppcache/integration-test/ThinClientRegex.hpp
index 0114909a..3b46163a 100644
--- a/cppcache/integration-test/ThinClientRegex.hpp
+++ b/cppcache/integration-test/ThinClientRegex.hpp
@@ -269,7 +269,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientRegex2.hpp b/cppcache/integration-test/ThinClientRegex2.hpp
index b78616c1..36f6d976 100644
--- a/cppcache/integration-test/ThinClientRegex2.hpp
+++ b/cppcache/integration-test/ThinClientRegex2.hpp
@@ -280,7 +280,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientRegex3.hpp b/cppcache/integration-test/ThinClientRegex3.hpp
index f0354800..53816394 100644
--- a/cppcache/integration-test/ThinClientRegex3.hpp
+++ b/cppcache/integration-test/ThinClientRegex3.hpp
@@ -280,7 +280,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -369,14 +369,6 @@ DUNIT_TASK_DEFINITION(CLIENT2, RegisterEmptyNullAndNonExistentRegex)
       LOG(excp.what());
     }
 
-    try {
-      LOG("Registering null regex");
-      regPtr1->registerRegex(nullptr);
-      FAIL("Did not get expected exception!");
-    } catch (Exception& excp) {
-      LOG(excp.what());
-    }
-
     try {
       LOG("Unregistering non-existent regex");
       regPtr1->unregisterRegex("Non*Existent*Regex");
diff --git a/cppcache/integration-test/ThinClientSSL.hpp b/cppcache/integration-test/ThinClientSSL.hpp
index 01dbc194..8efe645a 100644
--- a/cppcache/integration-test/ThinClientSSL.hpp
+++ b/cppcache/integration-test/ThinClientSSL.hpp
@@ -250,7 +250,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientSSLWithPassword.hpp b/cppcache/integration-test/ThinClientSSLWithPassword.hpp
index 22297cc3..59079523 100644
--- a/cppcache/integration-test/ThinClientSSLWithPassword.hpp
+++ b/cppcache/integration-test/ThinClientSSLWithPassword.hpp
@@ -264,7 +264,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientTXFailover.hpp b/cppcache/integration-test/ThinClientTXFailover.hpp
index fcfb6e78..c26f295a 100644
--- a/cppcache/integration-test/ThinClientTXFailover.hpp
+++ b/cppcache/integration-test/ThinClientTXFailover.hpp
@@ -247,7 +247,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/ThinClientTransactions.hpp b/cppcache/integration-test/ThinClientTransactions.hpp
index 33b9b087..817ed18d 100644
--- a/cppcache/integration-test/ThinClientTransactions.hpp
+++ b/cppcache/integration-test/ThinClientTransactions.hpp
@@ -310,7 +310,7 @@ void doGetAgain(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "get  region name%s\n", regPtr->getName());
+  fprintf(stdout, "get  region name%s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -342,7 +342,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -985,16 +985,16 @@ DUNIT_TASK_DEFINITION(CLIENT1, UpdateClient1Entries)
     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;
-    key0 = vec0[0]->toString()->asChar();
-    key1 = vec0[1]->toString()->asChar();
+    key0 = vec0[0]->toString().c_str();
+    key1 = vec0[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in first region.");
     ASSERT(key0 == keys[0] || key0 == keys[1],
            "Unexpected key in first region.");
     ASSERT(key1 == keys[0] || key1 == keys[1],
            "Unexpected key in first region.");
 
-    key0 = vec1[0]->toString()->asChar();
-    key1 = vec1[1]->toString()->asChar();
+    key0 = vec1[0]->toString().c_str();
+    key1 = vec1[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in second region.");
     ASSERT(key0 == keys[2] || key0 == keys[3],
            "Unexpected key in second region.");
diff --git a/cppcache/integration-test/ThinClientTransactionsXA.hpp b/cppcache/integration-test/ThinClientTransactionsXA.hpp
index 4e162aad..942cb373 100644
--- a/cppcache/integration-test/ThinClientTransactionsXA.hpp
+++ b/cppcache/integration-test/ThinClientTransactionsXA.hpp
@@ -309,7 +309,7 @@ void doGetAgain(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "get  region name%s\n", regPtr->getName());
+  fprintf(stdout, "get  region name%s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -341,7 +341,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -1005,16 +1005,16 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     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;
-    key0 = vec0[0]->toString()->asChar();
-    key1 = vec0[1]->toString()->asChar();
+    key0 = vec0[0]->toString().c_str();
+    key1 = vec0[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in first region.");
     ASSERT(key0 == keys[0] || key0 == keys[1],
            "Unexpected key in first region.");
     ASSERT(key1 == keys[0] || key1 == keys[1],
            "Unexpected key in first region.");
 
-    key0 = vec1[0]->toString()->asChar();
-    key1 = vec1[1]->toString()->asChar();
+    key0 = vec1[0]->toString().c_str();
+    key1 = vec1[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in second region.");
     ASSERT(key0 == keys[2] || key0 == keys[3],
            "Unexpected key in second region.");
diff --git a/cppcache/integration-test/fw_helper.hpp b/cppcache/integration-test/fw_helper.hpp
index 839e2638..7fbde0c7 100644
--- a/cppcache/integration-test/fw_helper.hpp
+++ b/cppcache/integration-test/fw_helper.hpp
@@ -92,15 +92,28 @@ BEGIN_TEST.
 
 #include <list>
 #include <string>
-
+#include <sstream>
 #include <cstdio>
 
 #include "TimeBomb.hpp"
 
 #define ASSERT(x, y) \
   if (!(x)) throw TestException(y, __LINE__, __FILE__)
+
+#define ASSERT1(x) ASSERT(x, "Expected: " #x)
+
+#define ASSERT_EQ(x, y) _ASSERT_EQ(x, y, __LINE__, __FILE__)
+
+#define ASSERT_STREQ(x, y)                                            \
+  ASSERT((strcmp(x, y) == 0),                                         \
+         (std::string("Assert: " #x " == " #y ", Expected: \"") + x + \
+          "\", Actual: \"" + y + "\"")                                \
+             .c_str())
+
 #define FAIL(y) throw TestException(y, __LINE__, __FILE__)
+
 #define LOG(y) dunit::log(y, __LINE__, __FILE__, 0)
+
 #define SLEEP(x) dunit::sleep(x)
 
 namespace dunit {
@@ -229,4 +242,14 @@ int main(int argc, char* argv[])
   }                 \
   a_##x;
 
+template <class _Expected, class _Actual>
+void _ASSERT_EQ(const _Expected& expected, const _Actual& actual, int line,
+                const char* file) {
+  if (expected != actual) {
+    std::stringstream ss;
+    ss << "ASSERT_EQ: Expected: " << expected << ", Actual: " << actual;
+    throw TestException(ss.str().c_str(), line, file);
+  }
+}
+
 #endif  // GEODE_INTEGRATION_TEST_FW_HELPER_H_
diff --git a/cppcache/integration-test/testExpiration.cpp b/cppcache/integration-test/testExpiration.cpp
index 842e6290..d80572d5 100644
--- a/cppcache/integration-test/testExpiration.cpp
+++ b/cppcache/integration-test/testExpiration.cpp
@@ -29,7 +29,8 @@ ExpirationAction::Action action = ExpirationAction::DESTROY;
 
 size_t getNumOfEntries(std::shared_ptr<Region>& R1) {
   std::vector<std::shared_ptr<CacheableKey>> v = R1->keys();
-  LOGFINE("Number of keys in region %s is %d", R1->getFullPath(), v.size());
+  LOGFINE("Number of keys in region %s is %d", R1->getFullPath().c_str(),
+          v.size());
   return v.size();
 }
 
@@ -52,8 +53,8 @@ void doNPuts(std::shared_ptr<Region>& rptr, int n) {
   for (int i = 0; i < n; i++) {
     sprintf(buf, "KeyA - %d", i + 1);
     auto key = CacheableKey::create(buf);
-    LOGINFO("Putting key %s value %s in region %s", buf, value->toString(),
-            rptr->getFullPath());
+    LOGINFO("Putting key %s value %s in region %s", buf,
+            value->toString().c_str(), rptr->getFullPath().c_str());
     rptr->put(key, value);
   }
 }
@@ -67,11 +68,11 @@ std::shared_ptr<CacheableKey> do1Put(std::shared_ptr<Region>& rptr) {
   ASSERT(value != nullptr, "Failed to create value.");
 
   sprintf(buf, "KeyA - %d", 0 + 1);
- auto key = CacheableKey::create(buf);
- LOGINFO("Putting key %s value %s in region %s", buf, value->toString(),
-         rptr->getFullPath());
- rptr->put(key, value);
- return key;
+  auto key = CacheableKey::create(buf);
+  LOGINFO("Putting key %s value %s in region %s", buf,
+          value->toString().c_str(), rptr->getFullPath().c_str());
+  rptr->put(key, value);
+  return key;
 }
 
 void setExpTimes(
diff --git a/cppcache/integration-test/testOverflowPutGetSqLite.cpp b/cppcache/integration-test/testOverflowPutGetSqLite.cpp
index 1d23b931..d955b718 100644
--- a/cppcache/integration-test/testOverflowPutGetSqLite.cpp
+++ b/cppcache/integration-test/testOverflowPutGetSqLite.cpp
@@ -292,7 +292,7 @@ void verifyGetAll(std::shared_ptr<Region> region, int startIndex) {
       auto key = std::dynamic_pointer_cast<CacheableKey>(iter.first);
       auto mVal = iter.second;
       if (mVal != nullptr) {
-        int val = atoi(mVal->toString()->asChar());
+        int val = atoi(mVal->toString().c_str());
         ASSERT(val == i, "value not matched");
       }
     }
@@ -393,7 +393,7 @@ BEGIN_TEST(OverFlowTest)
       char sqliteDirSubRgn[512];
       sprintf(sqliteDirSubRgn, "%s/%s_%u/_%s_SubRegion/file_0.db",
               sqlite_dir.c_str(), hname, ACE_OS::getpid(),
-              regionPtr->getName());
+              regionPtr->getName().c_str());
 
       ACE_stat fileStat;
       ASSERT(ACE_OS::stat(sqliteDirSubRgn, &fileStat) == -1,
@@ -493,8 +493,8 @@ BEGIN_TEST(OverFlowTest_SqLiteFull)
                         // catching generic message as we dont
                         // have any specific sqlitefull exception
       char buffer[1024];
-      sprintf(buffer, "Got expected exception %s: msg = %s", ex.getName(),
-              ex.what());
+      sprintf(buffer, "Got expected exception %s: msg = %s",
+              ex.getName().c_str(), ex.what());
       LOG(buffer);
     }
 
diff --git a/cppcache/integration-test/testSystemProperties.cpp b/cppcache/integration-test/testSystemProperties.cpp
index 87d40729..f882a0bb 100644
--- a/cppcache/integration-test/testSystemProperties.cpp
+++ b/cppcache/integration-test/testSystemProperties.cpp
@@ -49,12 +49,11 @@ BEGIN_TEST(DEFAULT)
            "expected 1");
     ASSERT(sp->statisticsEnabled() == true, "expected true");
     LOG(sp->statisticsArchiveFile());
-    const char* safname = sp->statisticsArchiveFile();
-    int ret = strcmp(safname, "statArchive.gfs");
-    ASSERT(ret == 0, "expected 0");
-    const char* ll = Log::levelToChars(sp->logLevel());
-    ret = strcmp(ll, "config");
-    ASSERT(ret == 0, "expected 0");
+    auto&& safname = sp->statisticsArchiveFile();
+    ASSERT(safname == "statArchive.gfs",
+           "Expected safname == \"statArchive.gfs\"");
+    auto&& ll = Log::levelToChars(sp->logLevel());
+    ASSERT_STREQ("config", ll);
     delete sp;
   }
 END_TEST(DEFAULT)
@@ -82,9 +81,8 @@ BEGIN_TEST(CONFIG)
     ASSERT(sp->statisticsSampleInterval() == std::chrono::seconds(1),
            "expected 1");
     ASSERT(sp->statisticsEnabled() == true, "expected true");
-    const char* safname = sp->statisticsArchiveFile();
-    int ret = strcmp(safname, "statArchive.gfs");
-    ASSERT(ret == 0, "expected 0");
+    auto&& safname = sp->statisticsArchiveFile();
+    ASSERT_EQ("statArchive.gfs", safname);
     Log::LogLevel ll = sp->logLevel();
     ASSERT(ll == Log::Config, "expected Log::Config");
     delete sp;
@@ -110,24 +108,20 @@ BEGIN_TEST(NEW_CONFIG)
 
     ASSERT(sp->threadPoolSize() == 96, "max-fe-thread should be 96");
 
-    const char* safname = sp->statisticsArchiveFile();
-    int ret = strcmp(safname, "stats.gfs");
-    ASSERT(ret == 0, "expected 0");
+    auto&& safname = sp->statisticsArchiveFile();
+    ASSERT1(safname == "stats.gfs");
 
-    const char* logfname = sp->logFilename();
-    ret = strcmp(logfname, "gfcpp.log");
-    ASSERT(ret == 0, "expected 0");
+    auto&& logfname = sp->logFilename();
+    ASSERT1(logfname == "gfcpp.log");
 
     // Log::LogLevel ll = sp->logLevel();
     // ASSERT( ll == Log::Debug, "expected Log::Debug" );
 
-    const char* name = sp->name();
-    ret = strcmp(name, "system");
-    ASSERT(ret == 0, "expected 0");
+    auto&& name = sp->name();
+    ASSERT1(name == "system");
 
-    const char* cxml = sp->cacheXMLFile();
-    ret = strcmp(cxml, "cache.xml");
-    ASSERT(ret == 0, "expected 0");
+    auto&& cxml = sp->cacheXMLFile();
+    ASSERT1(cxml == "cache.xml");
 
     ASSERT(sp->pingInterval() == std::chrono::seconds(123),
            "expected 123 pingInterval");
@@ -146,9 +140,8 @@ BEGIN_TEST(NEW_CONFIG)
 
     ASSERT(sp->statsFileSizeLimit() == 1024000000, "expected 1024000000");
 
-    const char* durableId = sp->durableClientId();
-    ret = strcmp(durableId, "testDurableId");
-    ASSERT(ret == 0, "expected 0");
+    auto&& durableId = sp->durableClientId();
+    ASSERT1(durableId == "testDurableId");
 
     ASSERT(sp->durableTimeout() == std::chrono::seconds(123),
            "expected 123 durableTimeOut");
diff --git a/cppcache/integration-test/testThinClientCacheableStringArray.cpp b/cppcache/integration-test/testThinClientCacheableStringArray.cpp
index ab244354..90680c30 100644
--- a/cppcache/integration-test/testThinClientCacheableStringArray.cpp
+++ b/cppcache/integration-test/testThinClientCacheableStringArray.cpp
@@ -132,7 +132,7 @@ DUNIT_TASK(CLIENT1, StepThree)
 
         else {
           if (ser != nullptr) {
-            printf(" query pulled object %s\n", ser->toString()->asChar());
+            printf(" query pulled object %s\n", ser->toString().c_str());
           } else {
             printf("   query pulled bad object\n");
           }
diff --git a/cppcache/integration-test/testThinClientConflation.cpp b/cppcache/integration-test/testThinClientConflation.cpp
index babd98c6..83152d15 100644
--- a/cppcache/integration-test/testThinClientConflation.cpp
+++ b/cppcache/integration-test/testThinClientConflation.cpp
@@ -52,7 +52,8 @@ class OperMonitor : public CacheListener {
     if (valuePtr != nullptr) {
       m_value = valuePtr->value();
     }
-    sprintf(buf, "Key = %s, Value = %d", keyPtr->toString(), valuePtr->value());
+    sprintf(buf, "Key = %s, Value = %d", keyPtr->toString().c_str(),
+            valuePtr->value());
     LOG(buf);
   }
 
@@ -81,11 +82,16 @@ class OperMonitor : public CacheListener {
   }
 };
 
-void setCacheListener(const char* regName, std::shared_ptr<OperMonitor> monitor) {
+void setCacheListener(const char* regName,
+                      std::shared_ptr<OperMonitor> monitor) {
   auto reg = getHelper()->getRegion(regName);
   auto attrMutator = reg->getAttributesMutator();
   attrMutator->setCacheListener(monitor);
-}std::shared_ptr<OperMonitor> mon1C1 = nullptr;std::shared_ptr<OperMonitor> mon2C1=nullptr;std::shared_ptr<OperMonitor> mon1C2=nullptr;std::shared_ptr<OperMonitor> mon2C2=nullptr;
+}
+std::shared_ptr<OperMonitor> mon1C1 = nullptr;
+std::shared_ptr<OperMonitor> mon2C1 = nullptr;
+std::shared_ptr<OperMonitor> mon1C2 = nullptr;
+std::shared_ptr<OperMonitor> mon2C2 = nullptr;
 
 const char* regions[] = {"ConflatedRegion", "NonConflatedRegion"};
 
@@ -93,7 +99,8 @@ const char* regions[] = {"ConflatedRegion", "NonConflatedRegion"};
 #include "ThinClientTasks_C2S2.hpp"
 #include "LocatorHelper.hpp"
 
-void initClientCache(std::shared_ptr<OperMonitor>& mon1, std::shared_ptr<OperMonitor>& mon2, int durableIdx,
+void initClientCache(std::shared_ptr<OperMonitor>& mon1,
+                     std::shared_ptr<OperMonitor>& mon2, int durableIdx,
                      const char* conflation) {
   initClientAndTwoRegions(durableIdx, 0, std::chrono::seconds(300), conflation,
                           regions);
@@ -104,8 +111,8 @@ void initClientCache(std::shared_ptr<OperMonitor>& mon1, std::shared_ptr<OperMon
 
   setCacheListener(regions[0], mon1);
   setCacheListener(regions[1], mon2);
- auto regPtr0 = getHelper()->getRegion(regions[0]);
- auto regPtr1 = getHelper()->getRegion(regions[1]);
+  auto regPtr0 = getHelper()->getRegion(regions[0]);
+  auto regPtr1 = getHelper()->getRegion(regions[1]);
 
   regPtr0->registerAllKeys(true);
   regPtr1->registerAllKeys(true);
diff --git a/cppcache/integration-test/testThinClientCqDurable.cpp b/cppcache/integration-test/testThinClientCqDurable.cpp
index c9c88e81..9e03c32c 100644
--- a/cppcache/integration-test/testThinClientCqDurable.cpp
+++ b/cppcache/integration-test/testThinClientCqDurable.cpp
@@ -110,7 +110,7 @@ class MyCqListener1 : public CqListener {
         break;
     }
     LOGINFO("MyCqListener1::OnEvent called with %s, key[%s], value=(%s)", opStr,
-            key->toString()->asChar(), value->toString()->asChar());
+            key->toString().c_str(), value->toString().c_str());
   }
 
   void onError(const CqEvent& cqe) { LOGINFO("MyCqListener1::OnError called"); }
@@ -801,12 +801,12 @@ DUNIT_TASK_DEFINITION(CLIENT1, VerifyCqs1)
 
     ASSERT(durableCqListPtr != nullptr, "Durable CQ List should not be null");
     ASSERT(durableCqListPtr->size() == 2, "Durable CQ List lenght should be 2");
-    ASSERT(isDurableCQName(durableCqListPtr->at(0)->toString()->asChar(), 1,
-                           false),
-           "Durable CQ name should be in the durable cq list");
-    ASSERT(isDurableCQName(durableCqListPtr->at(1)->toString()->asChar(), 1,
-                           false),
-           "Durable CQ name should be in the durable cq list");
+    ASSERT(
+        isDurableCQName(durableCqListPtr->at(0)->toString().c_str(), 1, false),
+        "Durable CQ name should be in the durable cq list");
+    ASSERT(
+        isDurableCQName(durableCqListPtr->at(1)->toString().c_str(), 1, false),
+        "Durable CQ name should be in the durable cq list");
   }
 END_TASK_DEFINITION
 
@@ -825,16 +825,16 @@ DUNIT_TASK_DEFINITION(CLIENT1, VerifyCqsAfterClientup1)
     ASSERT(durableCqListPtr != nullptr, "Durable CQ List should not be null");
     ASSERT(durableCqListPtr->size() == 4, "Durable CQ List length should be 4");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(0)->toString()->asChar(), 1, true),
+        isDurableCQName(durableCqListPtr->at(0)->toString().c_str(), 1, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(1)->toString()->asChar(), 1, true),
+        isDurableCQName(durableCqListPtr->at(1)->toString().c_str(), 1, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(2)->toString()->asChar(), 1, true),
+        isDurableCQName(durableCqListPtr->at(2)->toString().c_str(), 1, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(3)->toString()->asChar(), 1, true),
+        isDurableCQName(durableCqListPtr->at(3)->toString().c_str(), 1, true),
         "Durable CQ name should be in the durable cq list");
   }
 END_TASK_DEFINITION
@@ -852,18 +852,18 @@ DUNIT_TASK_DEFINITION(CLIENT2, VerifyCqs2)
     auto durableCqListPtr = qs->getAllDurableCqsFromServer();
     ASSERT(durableCqListPtr != nullptr, "Durable CQ List should not be null");
     ASSERT(durableCqListPtr->size() == 4, "Durable CQ List lenght should be 4");
-    ASSERT(isDurableCQName(durableCqListPtr->at(0)->toString()->asChar(), 2,
-                           false),
-           "Durable CQ name should be in the durable cq list");
-    ASSERT(isDurableCQName(durableCqListPtr->at(1)->toString()->asChar(), 2,
-                           false),
-           "Durable CQ name should be in the durable cq list");
-    ASSERT(isDurableCQName(durableCqListPtr->at(2)->toString()->asChar(), 2,
-                           false),
-           "Durable CQ name should be in the durable cq list");
-    ASSERT(isDurableCQName(durableCqListPtr->at(3)->toString()->asChar(), 2,
-                           false),
-           "Durable CQ name should be in the durable cq list");
+    ASSERT(
+        isDurableCQName(durableCqListPtr->at(0)->toString().c_str(), 2, false),
+        "Durable CQ name should be in the durable cq list");
+    ASSERT(
+        isDurableCQName(durableCqListPtr->at(1)->toString().c_str(), 2, false),
+        "Durable CQ name should be in the durable cq list");
+    ASSERT(
+        isDurableCQName(durableCqListPtr->at(2)->toString().c_str(), 2, false),
+        "Durable CQ name should be in the durable cq list");
+    ASSERT(
+        isDurableCQName(durableCqListPtr->at(3)->toString().c_str(), 2, false),
+        "Durable CQ name should be in the durable cq list");
   }
 END_TASK_DEFINITION
 
@@ -881,28 +881,28 @@ DUNIT_TASK_DEFINITION(CLIENT2, VerifyCqsAfterClientup2)
     ASSERT(durableCqListPtr != nullptr, "Durable CQ List should not be null");
     ASSERT(durableCqListPtr->size() == 8, "Durable CQ List lenght should be 8");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(0)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(0)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(1)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(1)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(2)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(2)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(3)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(3)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(4)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(4)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(5)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(5)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(6)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(6)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
     ASSERT(
-        isDurableCQName(durableCqListPtr->at(7)->toString()->asChar(), 2, true),
+        isDurableCQName(durableCqListPtr->at(7)->toString().c_str(), 2, true),
         "Durable CQ name should be in the durable cq list");
   }
 END_TASK_DEFINITION
diff --git a/cppcache/integration-test/testThinClientCqHAFailover.cpp b/cppcache/integration-test/testThinClientCqHAFailover.cpp
index f80d2ff9..43807892 100644
--- a/cppcache/integration-test/testThinClientCqHAFailover.cpp
+++ b/cppcache/integration-test/testThinClientCqHAFailover.cpp
@@ -245,7 +245,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree)
 
         else {
           if (ser != nullptr) {
-            printf(" query pulled object %s\n", ser->toString()->asChar());
+            printf(" query pulled object %s\n", ser->toString().c_str());
           } else {
             printf("   query pulled bad object\n");
           }
diff --git a/cppcache/integration-test/testThinClientCqIR.cpp b/cppcache/integration-test/testThinClientCqIR.cpp
index 96c88b50..c96d413d 100644
--- a/cppcache/integration-test/testThinClientCqIR.cpp
+++ b/cppcache/integration-test/testThinClientCqIR.cpp
@@ -192,7 +192,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryData)
         auto ser = iter.next();
 
         if (ser != nullptr) {
-          printf(" query pulled object %s\n", ser->toString()->asChar());
+          printf(" query pulled object %s\n", ser->toString().c_str());
 
           auto stPtr = std::dynamic_pointer_cast<Struct>(ser);
           ASSERT(stPtr != nullptr, "Failed to get struct in CQ result.");
@@ -203,7 +203,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryData)
             ASSERT(serKey != nullptr, "Failed to get KEY in CQ result.");
             if (serKey != nullptr) {
               LOG("got struct key ");
-              printf("  got struct key %s\n", serKey->toString()->asChar());
+              printf("  got struct key %s\n", serKey->toString().c_str());
             }
 
             auto serVal = (*stPtr)["value"];
@@ -211,7 +211,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryData)
 
             if (serVal != nullptr) {
               LOG("got struct value ");
-              printf("  got struct value %s\n", serVal->toString()->asChar());
+              printf("  got struct value %s\n", serVal->toString().c_str());
             }
           }
         } else {
@@ -238,7 +238,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryData)
         auto ser = iter2.next();
 
         if (ser != nullptr) {
-          printf(" query pulled object %s\n", ser->toString()->asChar());
+          printf(" query pulled object %s\n", ser->toString().c_str());
 
           auto stPtr = std::dynamic_pointer_cast<Struct>(ser);
           ASSERT(stPtr != nullptr, "Failed to get struct in CQ result.");
@@ -249,7 +249,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryData)
             ASSERT(serKey != nullptr, "Failed to get KEY in CQ result.");
             if (serKey != nullptr) {
               LOG("got struct key ");
-              printf("  got struct key %s\n", serKey->toString()->asChar());
+              printf("  got struct key %s\n", serKey->toString().c_str());
             }
 
             auto serVal = (*stPtr)["value"];
@@ -257,7 +257,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryData)
 
             if (serVal != nullptr) {
               LOG("got struct value ");
-              printf("  got struct value %s\n", serVal->toString()->asChar());
+              printf("  got struct value %s\n", serVal->toString().c_str());
             }
           }
         } else {
diff --git a/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp b/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp
index 73a5a2a6..a95c02b7 100644
--- a/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp
+++ b/cppcache/integration-test/testThinClientExecuteFunctionPrSHOP.cpp
@@ -167,7 +167,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest2)
 
     for (int i = 0; i < 230; i++) {
       sprintf(buf, "VALUE--%d", i);
-      std::shared_ptr<Cacheable> value(CacheableString::create(buf));
+      auto value = CacheableString::create(buf);
       regPtr0->put(i, value);
     }
     LOG("Put done.");
diff --git a/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp b/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp
index bbc5678b..26be65af 100644
--- a/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp
+++ b/cppcache/integration-test/testThinClientFixedPartitionResolver.cpp
@@ -39,36 +39,45 @@ class CustomFixedPartitionResolver1 : public FixedPartitionResolver {
  public:
   CustomFixedPartitionResolver1() {}
   ~CustomFixedPartitionResolver1() {}
-  const char* getName() {
+  const std::string& getName() override {
+    static std::string name = "CustomFixedPartitionResolver1";
     LOG("CustomFixedPartitionResolver1::getName()");
-    return "CustomFixedPartitionResolver1";
+    return name;
   }
 
-  std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& opDetails) {
+  std::shared_ptr<CacheableKey> getRoutingObject(
+      const EntryEvent& opDetails) override {
     LOG("CustomFixedPartitionResolver1::getRoutingObject()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newKey = key + 5;
     return CacheableKey::create(newKey);
   }
 
-  const char* getPartitionName(const EntryEvent& opDetails) {
+  const std::string& getPartitionName(const EntryEvent& opDetails) override {
     LOG("CustomFixedPartitionResolver1::getPartitionName()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newkey = key % 6;
     if (newkey == 0) {
-      return "P1";
+      static std::string P1 = "P1";
+      return P1;
     } else if (newkey == 1) {
-      return "P2";
+      static std::string P2 = "P2";
+      return P2;
     } else if (newkey == 2) {
-      return "P3";
+      static std::string P3 = "P3";
+      return P3;
     } else if (newkey == 3) {
-      return "P4";
+      static std::string P4 = "P4";
+      return P4;
     } else if (newkey == 4) {
-      return "P5";
+      static std::string P5 = "P5";
+      return P5;
     } else if (newkey == 5) {
-      return "P6";
+      static std::string P6 = "P6";
+      return P6;
     } else {
-      return "Invalid";
+      static std::string Invalid = "Invalid";
+      return Invalid;
     }
   }
 };
@@ -78,36 +87,45 @@ class CustomFixedPartitionResolver2 : public FixedPartitionResolver {
  public:
   CustomFixedPartitionResolver2() {}
   ~CustomFixedPartitionResolver2() {}
-  const char* getName() {
+  const std::string& getName() override {
+    static std::string name = "CustomFixedPartitionResolver2";
     LOG("CustomFixedPartitionResolver2::getName()");
-    return "CustomFixedPartitionResolver2";
+    return name;
   }
 
-  std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& opDetails) {
+  std::shared_ptr<CacheableKey> getRoutingObject(
+      const EntryEvent& opDetails) override {
     LOG("CustomFixedPartitionResolver2::getRoutingObject()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newKey = key + 4;
     return CacheableKey::create(newKey /*key*/);
   }
 
-  const char* getPartitionName(const EntryEvent& opDetails) {
+  const std::string& getPartitionName(const EntryEvent& opDetails) override {
     LOG("CustomFixedPartitionResolver2::getPartitionName()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newkey = key % 6;
     if (newkey == 0) {
-      return "P1";
+      static std::string P1 = "P1";
+      return P1;
     } else if (newkey == 1) {
-      return "P2";
+      static std::string P2 = "P2";
+      return P2;
     } else if (newkey == 2) {
-      return "P3";
+      static std::string P3 = "P3";
+      return P3;
     } else if (newkey == 3) {
-      return "P4";
+      static std::string P4 = "P4";
+      return P4;
     } else if (newkey == 4) {
-      return "P5";
+      static std::string P5 = "P5";
+      return P5;
     } else if (newkey == 5) {
-      return "P6";
+      static std::string P6 = "P6";
+      return P6;
     } else {
-      return "Invalid";
+      static std::string Invalid = "Invalid";
+      return Invalid;
     }
   }
 };
@@ -117,30 +135,36 @@ class CustomFixedPartitionResolver3 : public FixedPartitionResolver {
  public:
   CustomFixedPartitionResolver3() {}
   ~CustomFixedPartitionResolver3() {}
-  const char* getName() {
+  const std::string& getName() override {
+    static std::string name = "CustomFixedPartitionResolver3";
     LOG("CustomFixedPartitionResolver3::getName()");
-    return "CustomFixedPartitionResolver3";
+    return name;
   }
 
-  std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent& opDetails) {
+  std::shared_ptr<CacheableKey> getRoutingObject(
+      const EntryEvent& opDetails) override {
     LOG("CustomFixedPartitionResolver3::getRoutingObject()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newKey = key % 5;
     return CacheableKey::create(newKey /*key*/);
   }
 
-  const char* getPartitionName(const EntryEvent& opDetails) {
+  const std::string& getPartitionName(const EntryEvent& opDetails) override {
     LOG("CustomFixedPartitionResolver3::getPartitionName()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newkey = key % 3;
     if (newkey == 0) {
-      return "P1";
+      static std::string P1 = "P1";
+      return P1;
     } else if (newkey == 1) {
-      return "P2";
+      static std::string P2 = "P2";
+      return P2;
     } else if (newkey == 2) {
-      return "P3";
+      static std::string P3 = "P3";
+      return P3;
     } else {
-      return "Invalid";
+      static std::string Invalid = "Invalid";
+      return Invalid;
     }
   }
 };
@@ -261,7 +285,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
         FAIL("Put caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -305,7 +329,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
         FAIL("get caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("get caused unexpected exception");
@@ -349,8 +373,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
         FAIL("getAll caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -385,8 +409,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
         FAIL("getAll caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -428,8 +452,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_REGION)
         FAIL("destroy caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
diff --git a/cppcache/integration-test/testThinClientGetInterests.cpp b/cppcache/integration-test/testThinClientGetInterests.cpp
index abe4c3cf..beba9654 100644
--- a/cppcache/integration-test/testThinClientGetInterests.cpp
+++ b/cppcache/integration-test/testThinClientGetInterests.cpp
@@ -80,7 +80,7 @@ DUNIT_TASK(CLIENT1, SetupClient1)
       LOG(buf);
       bool found = false;
       for (const auto& k : vkey) {
-        if (!strcmp(key, k->toString()->asChar())) {
+        if (!strcmp(key, k->toString().c_str())) {
           found = true;
           break;
         }
diff --git a/cppcache/integration-test/testThinClientHADistOps.cpp b/cppcache/integration-test/testThinClientHADistOps.cpp
index 7719408d..34bafb63 100644
--- a/cppcache/integration-test/testThinClientHADistOps.cpp
+++ b/cppcache/integration-test/testThinClientHADistOps.cpp
@@ -296,7 +296,7 @@ void doGetAgain(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "get  region name%s\n", regPtr->getName());
+  fprintf(stdout, "get  region name%s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -328,7 +328,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -423,16 +423,16 @@ DUNIT_TASK_DEFINITION(CLIENT1, RegisterClient1Keys)
     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;
-    key0 = vec0[0]->toString()->asChar();
-    key1 = vec0[1]->toString()->asChar();
+    key0 = vec0[0]->toString().c_str();
+    key1 = vec0[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in first region.");
     ASSERT(key0 == keys[0] || key0 == keys[1],
            "Unexpected key in first region.");
     ASSERT(key1 == keys[0] || key1 == keys[1],
            "Unexpected key in first region.");
 
-    key0 = vec1[0]->toString()->asChar();
-    key1 = vec1[1]->toString()->asChar();
+    key0 = vec1[0]->toString().c_str();
+    key1 = vec1[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in second region.");
     ASSERT(key0 == keys[2] || key0 == keys[3],
            "Unexpected key in second region.");
diff --git a/cppcache/integration-test/testThinClientHAFailover.cpp b/cppcache/integration-test/testThinClientHAFailover.cpp
index 583bfd6d..8a5930d9 100644
--- a/cppcache/integration-test/testThinClientHAFailover.cpp
+++ b/cppcache/integration-test/testThinClientHAFailover.cpp
@@ -268,7 +268,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/testThinClientHAFailoverRegex.cpp b/cppcache/integration-test/testThinClientHAFailoverRegex.cpp
index f662ad8f..499fa5b0 100644
--- a/cppcache/integration-test/testThinClientHAFailoverRegex.cpp
+++ b/cppcache/integration-test/testThinClientHAFailoverRegex.cpp
@@ -246,7 +246,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -427,16 +427,16 @@ DUNIT_TASK_DEFINITION(CLIENT2, StepSix)
     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;
-    key0 = vec0[0]->toString()->asChar();
-    key1 = vec0[1]->toString()->asChar();
+    key0 = vec0[0]->toString().c_str();
+    key1 = vec0[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in first region.");
     ASSERT(key0 == keys[0] || key0 == keys[1],
            "Unexpected key in first region.");
     ASSERT(key1 == keys[0] || key1 == keys[1],
            "Unexpected key in first region.");
 
-    key0 = vec1[0]->toString()->asChar();
-    key1 = vec1[1]->toString()->asChar();
+    key0 = vec1[0]->toString().c_str();
+    key1 = vec1[1]->toString().c_str();
     ASSERT(key0 != key1, "The two keys should be different in second region.");
     ASSERT(key0 == keys[2] || key0 == keys[3],
            "Unexpected key in second region.");
diff --git a/cppcache/integration-test/testThinClientHAMixedRedundancy.cpp b/cppcache/integration-test/testThinClientHAMixedRedundancy.cpp
index a2323329..32be4466 100644
--- a/cppcache/integration-test/testThinClientHAMixedRedundancy.cpp
+++ b/cppcache/integration-test/testThinClientHAMixedRedundancy.cpp
@@ -252,7 +252,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/testThinClientIntResPolKeysInv.cpp b/cppcache/integration-test/testThinClientIntResPolKeysInv.cpp
index 7311f64d..81c18f48 100644
--- a/cppcache/integration-test/testThinClientIntResPolKeysInv.cpp
+++ b/cppcache/integration-test/testThinClientIntResPolKeysInv.cpp
@@ -260,7 +260,7 @@ void doNetsearch(const char *name, const char *key, const char *value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
diff --git a/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp b/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp
index b2a442ab..97b83bbc 100644
--- a/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp
+++ b/cppcache/integration-test/testThinClientInterest1_Bug1001.cpp
@@ -242,7 +242,7 @@ std::shared_ptr<CacheableString> getUString(int index) {
            str, static_cast<int32_t>(wcslen(str) + 1) * sizeof(wchar_t));
        const wchar_t* lRtnCd ATTR_UNUSED = lCStringP->asWChar();
      } catch (const Exception& geodeExcp) {
-       printf("%s: %s", geodeExcp.getName(), geodeExcp.what());
+       printf("%s: %s", geodeExcp.getName().c_str(), geodeExcp.what());
        FAIL("Should not have got exception.");
      }
 
@@ -252,7 +252,7 @@ std::shared_ptr<CacheableString> getUString(int index) {
            str, static_cast<int32_t>(wcslen(str) + 1) * sizeof(wchar_t));
        const wchar_t* lRtnCd ATTR_UNUSED = lCStringP->asWChar();
      } catch (const Exception& geodeExcp) {
-       printf("%s: %s", geodeExcp.getName(), geodeExcp.what());
+       printf("%s: %s", geodeExcp.getName().c_str(), geodeExcp.what());
        FAIL("Should not have got exception.");
      }
 
diff --git a/cppcache/integration-test/testThinClientInterestNotify.cpp b/cppcache/integration-test/testThinClientInterestNotify.cpp
index 52751c51..1e46a3f7 100644
--- a/cppcache/integration-test/testThinClientInterestNotify.cpp
+++ b/cppcache/integration-test/testThinClientInterestNotify.cpp
@@ -51,14 +51,13 @@ class EventListener : public CacheListener {
       auto valuePtr =
           std::dynamic_pointer_cast<CacheableInt32>(event.getNewValue());
 
-      sprintf(
-          buf, "%s: %s: Key = %s, NewValue = %s", m_name.c_str(), eventType,
-          keyPtr->asChar(),
-          (valuePtr == nullptr ? "nullptr" : valuePtr->toString()->asChar()));
+      sprintf(buf, "%s: %s: Key = %s, NewValue = %s", m_name.c_str(), eventType,
+              keyPtr->asChar(),
+              (valuePtr == nullptr ? "nullptr" : valuePtr->toString().c_str()));
       LOG(buf);
     } catch (const Exception& excp) {
-      sprintf(buf, "%s: %s: %s: %s", m_name.c_str(), eventType, excp.getName(),
-              excp.what());
+      sprintf(buf, "%s: %s: %s: %s", m_name.c_str(), eventType,
+              excp.getName().c_str(), excp.what());
       LOG(buf);
     } catch (...) {
       sprintf(buf, "%s: %s: unknown exception", m_name.c_str(), eventType);
diff --git a/cppcache/integration-test/testThinClientLRUExpiration.cpp b/cppcache/integration-test/testThinClientLRUExpiration.cpp
index fe47106e..969a7a54 100644
--- a/cppcache/integration-test/testThinClientLRUExpiration.cpp
+++ b/cppcache/integration-test/testThinClientLRUExpiration.cpp
@@ -124,13 +124,13 @@ void ValidateDestroyRegion(const char* name) {
    FAIL("Put should not be happened");
   } catch (RegionDestroyedException& ex) {
     char buffer[1024];
-    sprintf(buffer, "Got expected exception %s: msg = %s", ex.getName(),
+    sprintf(buffer, "Got expected exception %s: msg = %s", ex.getName().c_str(),
             ex.what());
     LOG(buffer);
   } catch (Exception& ex) {
     char buffer[1024];
-    sprintf(buffer, "Got unexpected exception %s: msg = %s", ex.getName(),
-            ex.what());
+    sprintf(buffer, "Got unexpected exception %s: msg = %s",
+            ex.getName().c_str(), ex.what());
     FAIL(buffer);
   }
 }
@@ -241,8 +241,8 @@ void createThinClientRegion(
       doRgnOperations(regionName, noOfEntry, rgnOpt);
     } catch (EntryNotFoundException& ex) {
       char buffer[1024];
-      sprintf(buffer, "Got expected exception %s: msg = %s", ex.getName(),
-              ex.what());
+      sprintf(buffer, "Got expected exception %s: msg = %s",
+              ex.getName().c_str(), ex.what());
       LOG(buffer);
     }
     localDestroyRegion(regionName);
diff --git a/cppcache/integration-test/testThinClientPRPutAllFailover.cpp b/cppcache/integration-test/testThinClientPRPutAllFailover.cpp
index ebb03384..d3cb4dc5 100644
--- a/cppcache/integration-test/testThinClientPRPutAllFailover.cpp
+++ b/cppcache/integration-test/testThinClientPRPutAllFailover.cpp
@@ -135,7 +135,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, PutAllOneTask)
    try {
      dataReg->putAll(entryMap);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR("CPPTEST: PutAll caused random exception in PutAllOneTask");
@@ -169,7 +169,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, PutAllTwoTask)
    try {
      dataReg->putAll(entryMap);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR("CPPTEST: PutAll caused random exception in PutAllTwoTask");
@@ -203,7 +203,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, PutAllThreeTask)
    try {
      dataReg->putAll(entryMap);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR("CPPTEST: PutAll caused random exception in PutAllThreeTask");
@@ -237,7 +237,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, PutAllFourTask)
    try {
      dataReg->putAll(entryMap);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR("CPPTEST: PutAll caused random exception in PutAllFourTask");
@@ -303,7 +303,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, RemoveAllOneTask)
      dataReg->putAll(entryMap);
      dataReg->removeAll(keys);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR("CPPTEST: RemoveAll caused random exception in PutAllOneTask");
@@ -339,7 +339,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, RemoveAllTwoTask)
      dataReg->putAll(entryMap);
      dataReg->removeAll(keys);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR("CPPTEST: RemoveAll caused random exception in PutAllTwoTask");
@@ -376,7 +376,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, RemoveAllThreeTask)
      dataReg->putAll(entryMap);
      dataReg->removeAll(keys);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR(
@@ -413,7 +413,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, RemoveAllFourTask)
      dataReg->putAll(entryMap);
      dataReg->removeAll(keys);
     } catch (Exception& ex) {
-      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+      LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
       FAIL(ex.what());
     } catch (...) {
       LOGERROR(
diff --git a/cppcache/integration-test/testThinClientPRSingleHop.cpp b/cppcache/integration-test/testThinClientPRSingleHop.cpp
index e41856ff..160971d4 100644
--- a/cppcache/integration-test/testThinClientPRSingleHop.cpp
+++ b/cppcache/integration-test/testThinClientPRSingleHop.cpp
@@ -136,7 +136,7 @@ class putThread : public ACE_Task_Base {
           m_failureCount++;
         }
       } catch (const Exception& excp) {
-        LOGINFO("Exception occured in put %s: %s ", excp.getName(),
+        LOGINFO("Exception occured in put %s: %s ", excp.getName().c_str(),
                 excp.what());
       } catch (...) {
         LOG("Random Exception occured");
@@ -151,7 +151,7 @@ class putThread : public ACE_Task_Base {
             m_failureCount++;
           }
         } catch (const Exception& excp) {
-          LOGINFO("Exception occured in get %s: %s ", excp.getName(),
+          LOGINFO("Exception occured in get %s: %s ", excp.getName().c_str(),
                   excp.what());
         } catch (...) {
           LOG("Random Exception occured");
@@ -165,8 +165,8 @@ class putThread : public ACE_Task_Base {
             m_failureCount++;
           }
         } catch (const Exception& excp) {
-          LOGINFO("Exception occured in destroy %s: %s ", excp.getName(),
-                  excp.what());
+          LOGINFO("Exception occured in destroy %s: %s ",
+                  excp.getName().c_str(), excp.what());
         } catch (...) {
           LOG("Random Exception occured");
         }
@@ -339,7 +339,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, WarmUpTask)
         // LOGINFO("CPPTEST: SINGLEHOP SUCCEEDED while putting key %s with
         // hashcode %d", logmsg, (int32_t)keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+        LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
         FAIL(ex.what());
       } catch (...) {
         LOGERROR("CPPTEST: Put caused random exception in WarmUpTask");
@@ -420,7 +420,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, WarmUpTask3)
         // LOGINFO("CPPTEST: SINGLEHOP SUCCEEDED while putting key %s with
         // hashcode %d", logmsg, (int32_t)keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+        LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
         FAIL(ex.what());
       } catch (...) {
         LOGERROR("CPPTEST: Put caused random exception in WarmUpTask");
@@ -510,12 +510,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForAllKeysTask)
       ASSERT(tmpkey->getCacheable() != nullptr,
              "tmpkey->getCacheable() is nullptr");
 
-      char logmsg[KEYSIZE * 4 + 100] = {0};
-      keyPtr->toString()->logString(logmsg, KEYSIZE * 4);
-
       try {
-        LOGDEBUG("CPPTEST: Putting key %s with hashcode %d", logmsg,
-                 keyPtr->hashcode());
+        LOGDEBUG("CPPTEST: Putting key %s with hashcode %d",
+                 keyPtr->toString().c_str(), keyPtr->hashcode());
 
         dataReg->put(keyPtr, keyPtr->hashcode());
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
@@ -530,7 +527,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForAllKeysTask)
         FAIL("Put caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -545,8 +542,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForAllKeysTask)
       }
 
       try {
-        LOGDEBUG("CPPTEST: Destroying key %s with hashcode %d", logmsg,
-                 keyPtr->hashcode());
+        LOGDEBUG("CPPTEST: Destroying key %s with hashcode %d",
+                 keyPtr->toString().c_str(), keyPtr->hashcode());
 
         dataReg->destroy(keyPtr);
         bool networkhop = TestUtils::getCacheImpl(getHelper()->cachePtr)
@@ -561,8 +558,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForAllKeysTask)
         FAIL("Destroy caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: Destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("Destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -669,7 +666,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask2)
             "%d",
             i, keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -727,8 +724,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask2)
             "%d",
             i, keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: Destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("Destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -789,7 +786,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask2)
             "%d",
             i, keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("get caused unexpected exception");
@@ -841,8 +838,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask2)
         // LOGINFO("CPPTEST: SINGLEHOP SUCCEEDED while getting key %d with
         // hashcode %d", i, (int32_t)keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -926,7 +923,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
             "%d",
             i, keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -976,8 +973,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
             "%d",
             i, keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: Destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("Destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -1030,7 +1027,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
             "%d",
             i, keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("get caused unexpected exception");
@@ -1082,8 +1079,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
         // LOGINFO("CPPTEST: SINGLEHOP SUCCEEDED while getting key %d with
         // hashcode %d", i, (int32_t)keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -1126,8 +1123,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
         // LOGINFO("CPPTEST: SINGLEHOP SUCCEEDED while getting key %d with
         // hashcode %d", i, (int32_t)keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
diff --git a/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp b/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp
index aa4f81d0..18450843 100644
--- a/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp
+++ b/cppcache/integration-test/testThinClientPRSingleHopServerGroup.cpp
@@ -134,7 +134,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_CLIENT1)
         FAIL("Put caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -174,7 +174,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_CLIENT1)
         FAIL("get caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("get caused unexpected exception");
@@ -214,8 +214,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_CLIENT1)
         FAIL("getAll caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -250,8 +250,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask_CLIENT1)
         FAIL("destroy caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -308,7 +308,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, CheckPrSingleHopForIntKeysTask_CLIENT2)
         FAIL("Put caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -344,7 +344,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, CheckPrSingleHopForIntKeysTask_CLIENT2)
         FAIL("get caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("get caused unexpected exception");
@@ -380,8 +380,8 @@ DUNIT_TASK_DEFINITION(CLIENT2, CheckPrSingleHopForIntKeysTask_CLIENT2)
         FAIL("getAll caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -413,8 +413,8 @@ DUNIT_TASK_DEFINITION(CLIENT2, CheckPrSingleHopForIntKeysTask_CLIENT2)
         FAIL("destroy caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -471,7 +471,7 @@ DUNIT_TASK_DEFINITION(CLIENT3, CheckPrSingleHopForIntKeysTask_CLIENT3)
         FAIL("Put caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: Put caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("Put caused unexpected exception");
@@ -507,7 +507,7 @@ DUNIT_TASK_DEFINITION(CLIENT3, CheckPrSingleHopForIntKeysTask_CLIENT3)
         FAIL("get caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName(),
+        LOGERROR("CPPTEST: get caused unexpected %s: %s", ex.getName().c_str(),
                  ex.what());
         cleanProc();
         FAIL("get caused unexpected exception");
@@ -542,8 +542,8 @@ DUNIT_TASK_DEFINITION(CLIENT3, CheckPrSingleHopForIntKeysTask_CLIENT3)
         FAIL("getAll caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: getALL caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: getALL caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("getAll caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
@@ -575,8 +575,8 @@ DUNIT_TASK_DEFINITION(CLIENT3, CheckPrSingleHopForIntKeysTask_CLIENT3)
         FAIL("destroy caused extra hop.");
         throw IllegalStateException("TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: destroy caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: destroy caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("destroy caused unexpected exception");
         throw IllegalStateException("TEST FAIL");
diff --git a/cppcache/integration-test/testThinClientPartitionResolver.cpp b/cppcache/integration-test/testThinClientPartitionResolver.cpp
index b2c1a4ee..9a049830 100644
--- a/cppcache/integration-test/testThinClientPartitionResolver.cpp
+++ b/cppcache/integration-test/testThinClientPartitionResolver.cpp
@@ -43,15 +43,17 @@ class CustomPartitionResolver : public PartitionResolver {
 
   CustomPartitionResolver() : called(false) {}
   ~CustomPartitionResolver() {}
-  const char *getName() {
+  const std::string &getName() override {
+    static std::string name = "CustomPartitionResolver";
     LOG("CustomPartitionResolver::getName()");
-    return "CustomPartitionResolver";
+    return name;
   }
 
-  std::shared_ptr<CacheableKey> getRoutingObject(const EntryEvent &opDetails) {
+  std::shared_ptr<CacheableKey> getRoutingObject(
+      const EntryEvent &opDetails) override {
     called = true;
     LOG("CustomPartitionResolver::getRoutingObject()");
-    int32_t key = atoi(opDetails.getKey()->toString()->asChar());
+    int32_t key = atoi(opDetails.getKey()->toString().c_str());
     int32_t newKey = key + 5;
     return CacheableKey::create(newKey);
   }
diff --git a/cppcache/integration-test/testThinClientPdxInstance.cpp b/cppcache/integration-test/testThinClientPdxInstance.cpp
index 14ee0064..5c2c99bf 100644
--- a/cppcache/integration-test/testThinClientPdxInstance.cpp
+++ b/cppcache/integration-test/testThinClientPdxInstance.cpp
@@ -585,7 +585,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxPut)
            "pdxInstanceDeserializationTime should be greater than 0.");
 
     auto toString = pIPtr1->toString();
-    LOGINFO("pdxinstance toString = %s ", toString->asChar());
+    LOGINFO("pdxinstance toString = %s ", toString.c_str());
     int pdxInstHashcode = pIPtr1->hashcode();
     LOGINFO("pdxinstance hash code = %d ", pdxInstHashcode);
 
@@ -644,8 +644,8 @@ DUNIT_TASK_DEFINITION(CLIENT2, getObject)
     auto pIPtr = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport));
     LOG("PdxObject get Successful....");
 
-    LOGINFO("pdxinstance classname = %s ", pIPtr->getClassName());
-    ASSERT(strcmp(pIPtr->getClassName(), "PdxTests.PdxType") == 0,
+    LOGINFO("pdxinstance classname = " + pIPtr->getClassName());
+    ASSERT(pIPtr->getClassName() == "PdxTests.PdxType",
            "pdxInstance.getClassName should return PdxTests.PdxType.");
 
     auto pt = pIPtr->getObject();
@@ -653,7 +653,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, getObject)
     LOG("PdxObject getObject Successful....");
 
     LOG("Statistics for for (PdxTests.PdxType) PdxInstance ");
-    LocalRegion* lregPtr = (dynamic_cast<LocalRegion*>(rptr.get()));
+    auto&& lregPtr = std::dynamic_pointer_cast<LocalRegion>(rptr);
 
     LOGINFO(
         "pdxInstanceDeserializations for (PdxTests.PdxType) PdxInstance  = %d ",
@@ -696,7 +696,7 @@ DUNIT_TASK_DEFINITION(CLIENT2, getObject)
     auto pIPtr1 = std::dynamic_pointer_cast<PdxInstance>(rptr->get(keyport1));
     LOG("ParentPdxObject get Successful....");
     auto toString = pIPtr1->toString();
-    LOGINFO("ParentPdxObject toString = %s ", toString->asChar());
+    LOGINFO("ParentPdxObject toString = %s ", toString.c_str());
     auto pt1 = std::dynamic_pointer_cast<ParentPdx>(pIPtr1->getObject());
     LOG("ParentPdxObject getObject Successful....");
 
@@ -1052,11 +1052,10 @@ DUNIT_TASK_DEFINITION(CLIENT2, accessPdxInstance)
     ASSERT(
         enumObject->getEnumOrdinal() == pdxobjPtr->getEnum()->getEnumOrdinal(),
         "enumObject ordinal should be equal");
-    ASSERT(strcmp(enumObject->getEnumClassName(),
-                  pdxobjPtr->getEnum()->getEnumClassName()) == 0,
+    ASSERT(enumObject->getEnumClassName() ==
+               pdxobjPtr->getEnum()->getEnumClassName(),
            "enumObject classname should be equal");
-    ASSERT(strcmp(enumObject->getEnumName(),
-                  pdxobjPtr->getEnum()->getEnumName()) == 0,
+    ASSERT(enumObject->getEnumName() == pdxobjPtr->getEnum()->getEnumName(),
            "enumObject enumname should be equal");
     ASSERT(pIPtr->getFieldType("m_pdxEnum") == PdxFieldTypes::OBJECT,
            "Type Value OBJECT Mismatch");
@@ -2479,15 +2478,15 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxIFPutGetTest)
     std::shared_ptr<PdxInstance> ret = pifPtr->create();
     LOG("PdxInstancePtr created....");
 
-    LOGINFO("PdxInstance getClassName = %s ", ret->getClassName());
-    ASSERT(strcmp(ret->getClassName(), "PdxTests.PdxType") == 0,
+    LOGINFO("PdxInstance getClassName = " + ret->getClassName());
+    ASSERT(ret->getClassName() == "PdxTests.PdxType",
            "pdxInstance.getClassName should return PdxTests.PdxType.");
 
     auto psPtr = ret->getObject();
     LOG("getObject created....");
 
     LOG("Statistics for for (PdxTests.PdxType) PdxInstance ");
-    LocalRegion* lregPtr = (dynamic_cast<LocalRegion*>(rptr.get()));
+    auto&& lregPtr = std::dynamic_pointer_cast<LocalRegion>(rptr);
 
     LOGINFO(
         "pdxInstanceDeserializations for (PdxTests.PdxType) PdxInstance  = %d ",
@@ -2597,8 +2596,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxIFPutGetTest)
     std::shared_ptr<PdxInstance> ip2 = if2->create();
     LOG("PdxInstancePtr created");
 
-    LOGINFO("PdxInstance getClassName = %s ", ip2->getClassName());
-    ASSERT(strcmp(ip2->getClassName(), "testobject::ParentPdx") == 0,
+    LOGINFO("PdxInstance getClassName = " + ip2->getClassName());
+    ASSERT(ip2->getClassName() == "testobject::ParentPdx",
            "pdxInstance.getClassName should return testobject::ParentPdx.");
 
     auto keyport = CacheableKey::create("pp");
@@ -2609,8 +2608,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxIFPutGetTest)
     LOG("get done....");
 
     LOGINFO(
-        "pdxInstanceDeserializations for (testobject::ParentPdx) PdxInstance  "
-        "= "
+        "pdxInstanceDeserializations for (testobject::ParentPdx) PdxInstance = "
         "%d ",
         lregPtr->getCacheImpl()
             ->getCachePerfStats()
@@ -2620,7 +2618,6 @@ DUNIT_TASK_DEFINITION(CLIENT1, pdxIFPutGetTest)
         lregPtr->getCacheImpl()->getCachePerfStats().getPdxInstanceCreations());
     LOGINFO(
         "pdxInstanceDeserializationTime for(testobject::ParentPdx) PdxInstance "
-        " "
         "= %d ",
         lregPtr->getCacheImpl()
             ->getCachePerfStats()
diff --git a/cppcache/integration-test/testThinClientPdxTests.cpp b/cppcache/integration-test/testThinClientPdxTests.cpp
index 58c866d9..d0d7c525 100644
--- a/cppcache/integration-test/testThinClientPdxTests.cpp
+++ b/cppcache/integration-test/testThinClientPdxTests.cpp
@@ -582,7 +582,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, JavaPutGet1)
     auto jsonDoc =
         std::dynamic_pointer_cast<PdxInstance>(regPtr0->get("jsondoc1"));
     auto toString = jsonDoc->toString();
-    LOGINFO("Task:JavaPutGet: Result = %s ", toString->asChar());
+    LOGINFO("Task:JavaPutGet: Result = %s ", toString.c_str());
     /*
     int16_t age = 0;
     jsonDoc->getField("age", age);
@@ -2538,43 +2538,43 @@ DUNIT_TASK_DEFINITION(CLIENT1, putAllPdxTypes)
     auto regPtr0 = getHelper()->getRegion("DistRegionAck");
 
     auto p1 = std::make_shared<PdxTypes1>();
-    auto keyport1 = CacheableKey::create(p1->getClassName());
+    auto keyport1 = CacheableKey::create(p1->getClassName().c_str());
     regPtr0->put(keyport1, p1);
 
     auto p2 = std::make_shared<PdxTypes2>();
-    auto keyport2 = CacheableKey::create(p2->getClassName());
+    auto keyport2 = CacheableKey::create(p2->getClassName().c_str());
     regPtr0->put(keyport2, p2);
 
     auto p3 = std::make_shared<PdxTypes3>();
-    auto keyport3 = CacheableKey::create(p3->getClassName());
+    auto keyport3 = CacheableKey::create(p3->getClassName().c_str());
     regPtr0->put(keyport3, p3);
 
     auto p4 = std::make_shared<PdxTypes4>();
-    auto keyport4 = CacheableKey::create(p4->getClassName());
+    auto keyport4 = CacheableKey::create(p4->getClassName().c_str());
     regPtr0->put(keyport4, p4);
 
     auto p5 = std::make_shared<PdxTypes5>();
-    auto keyport5 = CacheableKey::create(p5->getClassName());
+    auto keyport5 = CacheableKey::create(p5->getClassName().c_str());
     regPtr0->put(keyport5, p5);
 
     auto p6 = std::make_shared<PdxTypes6>();
-    auto keyport6 = CacheableKey::create(p6->getClassName());
+    auto keyport6 = CacheableKey::create(p6->getClassName().c_str());
     regPtr0->put(keyport6, p6);
 
     auto p7 = std::make_shared<PdxTypes7>();
-    auto keyport7 = CacheableKey::create(p7->getClassName());
+    auto keyport7 = CacheableKey::create(p7->getClassName().c_str());
     regPtr0->put(keyport7, p7);
 
     auto p8 = std::make_shared<PdxTypes8>();
-    auto keyport8 = CacheableKey::create(p8->getClassName());
+    auto keyport8 = CacheableKey::create(p8->getClassName().c_str());
     regPtr0->put(keyport8, p8);
 
     auto p9 = std::make_shared<PdxTypes9>();
-    auto keyport9 = CacheableKey::create(p9->getClassName());
+    auto keyport9 = CacheableKey::create(p9->getClassName().c_str());
     regPtr0->put(keyport9, p9);
 
     auto p10 = std::make_shared<PdxTypes10>();
-    auto keyport10 = CacheableKey::create(p10->getClassName());
+    auto keyport10 = CacheableKey::create(p10->getClassName().c_str());
     regPtr0->put(keyport10, p10);
 
     //
diff --git a/cppcache/integration-test/testThinClientPoolAttrTest.cpp b/cppcache/integration-test/testThinClientPoolAttrTest.cpp
index 3ba5d886..38c16779 100644
--- a/cppcache/integration-test/testThinClientPoolAttrTest.cpp
+++ b/cppcache/integration-test/testThinClientPoolAttrTest.cpp
@@ -114,7 +114,7 @@ void doAttrTestingAndCreatePool(const char* poolName) {
      "UpdateLocatorListInterval Should have been 122000");
  ASSERT(pptr->getStatisticInterval() == std::chrono::milliseconds(120000),
         "StatisticInterval Should have been 120000");
- ASSERT(strcmp(pptr->getServerGroup(), "ServerGroup1") == 0,
+ ASSERT(pptr->getServerGroup() == "ServerGroup1",
         "ServerGroup Should have been ServerGroup1");
  ASSERT(pptr->getSubscriptionEnabled() == true,
         "SubscriptionEnabled Should have been true");
@@ -136,7 +136,7 @@ void doAttrTesting(const char* poolName1) {
   auto pptr = getHelper()->getCache()->getPoolManager().find(poolName1);
   // auto pptr = poolFacPtr->find(poolName1);
 
-  ASSERT(strcmp(pptr->getName(), "clientPool") == 0,
+  ASSERT(pptr->getName() == "clientPool",
          "Pool name should have been clientPool");
   ASSERT(pptr->getFreeConnectionTimeout() == std::chrono::milliseconds(10000),
          "FreeConnectionTimeout Should have been 10000");
@@ -158,7 +158,7 @@ void doAttrTesting(const char* poolName1) {
       "UpdateLocatorListInterval Should have been 25000");
   ASSERT(pptr->getStatisticInterval() == std::chrono::seconds(1),
          "StatisticInterval Should have been 1");
-  ASSERT(strcmp(pptr->getServerGroup(), "ServerGroup1") == 0,
+  ASSERT(pptr->getServerGroup() == "ServerGroup1",
          "ServerGroup Should have been ServerGroup1");
   ASSERT(pptr->getSubscriptionEnabled() == true,
          "SubscriptionEnabled Should have been true");
diff --git a/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp b/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp
index ece4df90..2cea10e5 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteFunction.cpp
@@ -175,7 +175,7 @@ bool validateResultTypeAndAllowUserFunctionExecutionException(
       return true;
     } else {
       LOGINFO("Unexpected result type %s for index %d.",
-              result->toString()->asChar(), index);
+              result->toString().c_str(), index);
     }
   }
 
@@ -192,7 +192,7 @@ bool validateResultTypeIsUserFunctionExecutionException(
     return true;
   } else {
     LOGINFO("Unexpected result type %s for index %d.",
-            result->toString()->asChar(), index);
+            result->toString().c_str(), index);
   }
 
   return false;
@@ -258,7 +258,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
       auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     SLEEP(10000);  // let the put finish
@@ -611,7 +611,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
         auto value = CacheableString::create(buf);
 
         sprintf(buf, "KEY--%d", i);
-        auto key = CacheableKey::create(buf);
+        auto key = CacheableString::create(buf);
         regPtr0->put(key, value);
       }
 
@@ -732,7 +732,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
               "get result[%d]=%s", i,
               std::dynamic_pointer_cast<PdxTypes8>(resultListPdx->operator[](i))
                   ->toString()
-                  ->asChar());
+                  .c_str());
           auto pdxObj2 = std::dynamic_pointer_cast<PdxTypes8>(
               resultListPdx->operator[](i));
           ASSERT(pdxobj->equals(pdxObj2) == true,
@@ -805,7 +805,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
                   std::dynamic_pointer_cast<PdxTypes8>(
                       resultListPdxInstance->operator[](i))
                       ->toString()
-                      ->asChar());
+                      .c_str());
           auto pdxObj2 = std::dynamic_pointer_cast<PdxTypes8>(
               resultListPdxInstance->operator[](i));
 
@@ -824,7 +824,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
         auto value = CacheableString::create(buf);
 
         sprintf(buf, "KEY--%d", i);
-        auto key = CacheableKey::create(buf);
+        auto key = CacheableString::create(buf);
         regPtr0->put(key, value);
       }
       SLEEP(10000);  // let the put finish
@@ -849,14 +849,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
         ASSERT(false, "get executeFunctionResult is nullptr");
       } else {
         resultList->clear();
-        for (unsigned item = 0;
-             item < static_cast<uint32_t>(executeFunctionResult->size());
-             item++) {
-          auto arrayList = std::dynamic_pointer_cast<CacheableArrayList>(
-              executeFunctionResult->operator[](item));
-          for (unsigned pos = 0; pos < static_cast<uint32_t>(arrayList->size());
-               pos++) {
-            resultList->push_back(arrayList->operator[](pos));
+        for (auto&& result : *executeFunctionResult) {
+          for (auto&& entry :
+               *std::dynamic_pointer_cast<CacheableArrayList>(result)) {
+            resultList->push_back(entry);
           }
         }
         sprintf(buf, "get result count = %zd", resultList->size());
@@ -864,10 +860,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
         printf("resultlist size: %zd", resultList->size());
         ASSERT(resultList->size() == 51,
                "get executeFunctionResult on all servers count is not 51");
-        for (int32_t i = 0; i < resultList->size(); i++) {
-          sprintf(buf, "result[%d] is null\n", i);
+        for (size_t i = 0; i < resultList->size(); i++) {
+          sprintf(buf, "result[%zd] is null\n", i);
           ASSERT(resultList->operator[](i) != nullptr, buf);
-          sprintf(buf, "get result[%d]=%s", i,
+          sprintf(buf, "get result[%zd]=%s", i,
                   std::dynamic_pointer_cast<CacheableString>(
                       resultList->operator[](i))
                       ->asChar());
diff --git a/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp b/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp
index 8988d5ce..19283fdc 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteFunctionPrSHOP.cpp
@@ -178,7 +178,7 @@ bool validateResultTypeAndAllowUserFunctionExecutionException(
       return true;
     } else {
       LOGINFO("Unexpected result type %s for index %d.",
-              result->toString()->asChar(), index);
+              result->toString().c_str(), index);
     }
   }
 
@@ -195,7 +195,7 @@ bool validateResultTypeIsUserFunctionExecutionException(
     return true;
   } else {
     LOGINFO("Unexpected result type %s for index %d.",
-            result->toString()->asChar(), index);
+            result->toString().c_str(), index);
   }
 
   return false;
@@ -252,7 +252,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
       auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     SLEEP(10000);  // let the put finish
@@ -615,7 +615,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
         auto value = CacheableString::create(buf);
 
         sprintf(buf, "KEY--%d", i);
-        auto key = CacheableKey::create(buf);
+        auto key = CacheableString::create(buf);
         regPtr0->put(key, value);
       }
 
@@ -737,7 +737,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
               "get result[%d]=%s", i,
               std::dynamic_pointer_cast<PdxTypes8>(resultListPdx->operator[](i))
                   ->toString()
-                  ->asChar());
+                  .c_str());
           auto pdxObj2 = std::dynamic_pointer_cast<PdxTypes8>(
               resultListPdx->operator[](i));
           ASSERT(pdxobj->equals(pdxObj2) == true,
@@ -810,7 +810,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
                   std::dynamic_pointer_cast<PdxTypes8>(
                       resultListPdxInstance->operator[](i))
                       ->toString()
-                      ->asChar());
+                      .c_str());
           auto pdxObj2 = std::dynamic_pointer_cast<PdxTypes8>(
               resultListPdxInstance->operator[](i));
 
@@ -829,7 +829,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
         auto value = CacheableString::create(buf);
 
         sprintf(buf, "KEY--%d", i);
-        auto key = CacheableKey::create(buf);
+        auto key = CacheableString::create(buf);
         regPtr0->put(key, value);
       }
       SLEEP(10000);  // let the put finish
diff --git a/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp b/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp
index d2befe38..70326743 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteFunctionThrowsException.cpp
@@ -204,10 +204,10 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
 
     for (int i = 0; i < 34; i++) {
       sprintf(buf, "VALUE--%d", i);
-      std::shared_ptr<Cacheable> value(CacheableString::create(buf));
+      auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     std::this_thread::sleep_for(
diff --git a/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp b/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp
index 062c0041..177bf5fa 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteHAFunction.cpp
@@ -185,7 +185,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
       auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     SLEEP(10000);  // let the put finish
@@ -310,7 +310,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OnServerHATest)
       auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     SLEEP(10000);  // let the put finish
diff --git a/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp b/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp
index e77dfe7e..b0761663 100644
--- a/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp
+++ b/cppcache/integration-test/testThinClientPoolExecuteHAFunctionPrSHOP.cpp
@@ -183,7 +183,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OpTest)
       auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     SLEEP(10000);  // let the put finish
@@ -261,7 +261,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, Client1OnServerHATest)
       auto value = CacheableString::create(buf);
 
       sprintf(buf, "KEY--%d", i);
-      auto key = CacheableKey::create(buf);
+      auto key = CacheableString::create(buf);
       regPtr0->put(key, value);
     }
     SLEEP(10000);  // let the put finish
diff --git a/cppcache/integration-test/testThinClientPutAllPRSingleHop.cpp b/cppcache/integration-test/testThinClientPutAllPRSingleHop.cpp
index e713e12f..b903e4ab 100644
--- a/cppcache/integration-test/testThinClientPutAllPRSingleHop.cpp
+++ b/cppcache/integration-test/testThinClientPutAllPRSingleHop.cpp
@@ -175,7 +175,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, WarmUpTask)
         // LOGINFO("CPPTEST: SINGLEHOP SUCCEEDED while putting key %s with
         // hashcode %d", logmsg, (int32_t)keyPtr->hashcode());
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName(), ex.what());
+        LOGERROR("CPPTEST: Unexpected %s: %s", ex.getName().c_str(), ex.what());
         FAIL(ex.what());
       } catch (...) {
         LOGERROR("CPPTEST: Put caused random exception in WarmUpTask");
@@ -238,8 +238,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopForIntKeysTask)
         FAIL("putAll caused extra hop.");
         throw IllegalStateException("putAll::TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: putAll caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: putAll caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("putAll caused unexpected exception");
         throw IllegalStateException("putAll::TEST FAIL");
@@ -313,8 +313,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, CheckPrSingleHopRemoveAllForIntKeysTask)
         FAIL("removeall caused extra hop.");
         throw IllegalStateException("removeall::TEST FAIL DUE TO EXTRA HOP");
       } catch (Exception& ex) {
-        LOGERROR("CPPTEST: removeall caused unexpected %s: %s", ex.getName(),
-                 ex.what());
+        LOGERROR("CPPTEST: removeall caused unexpected %s: %s",
+                 ex.getName().c_str(), ex.what());
         cleanProc();
         FAIL("putAll caused unexpected exception");
         throw IllegalStateException("removeall::TEST FAIL");
diff --git a/cppcache/integration-test/testThinClientRemoteQueryRS.cpp b/cppcache/integration-test/testThinClientRemoteQueryRS.cpp
index acb91a58..0e66fa76 100644
--- a/cppcache/integration-test/testThinClientRemoteQueryRS.cpp
+++ b/cppcache/integration-test/testThinClientRemoteQueryRS.cpp
@@ -63,8 +63,7 @@ void stepOne() {
     serializationRegistry->addType(Portfolio::createDeserializable);
     serializationRegistry->addPdxType(PositionPdx::createDeserializable);
     serializationRegistry->addPdxType(PortfolioPdx::createDeserializable);
-  }
-  catch (const IllegalStateException&) {
+  } catch (const IllegalStateException&) {
     // ignore exception
   }
   isPoolConfig = true;
@@ -184,8 +183,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
       qs = getHelper()->cachePtr->getQueryService();
     }
     for (int i = 0; i < QueryStrings::RSOPLsize(); i++) {
-      auto qry =
-          qs->newQuery(const_cast<char*>(resultsetQueriesOPL[i].query()));
+      auto qry = qs->newQuery(resultsetQueriesOPL[i].query());
       auto results = qry->execute();
       if (!qh->verifyRS(results, resultsetRowCountsOPL[i])) {
         char failmsg[100] = {0};
@@ -219,7 +217,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
           } else {
             if (ser != nullptr) {
               printf(" query idx %d pulled object %s \n", i,
-                     ser->toString()->asChar());
+                     ser->toString().c_str());
             } else {
               printf("   query idx %d pulled bad object \n", i);
               FAIL("Unexpected object received in query");
@@ -243,13 +241,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
                 positionpdx->getSharesOutstanding());
           } else {
             if (pdxser != nullptr) {
-              if (pdxser->toString()->isWideString()) {
-                printf(" query idx %d pulled object %S  :: \n", i,
-                       pdxser->toString()->asWChar());
-              } else {
-                printf(" query idx %d pulled object %s  :: \n", i,
-                       pdxser->toString()->asChar());
-              }
+              printf(" query idx %d pulled object %s  :: \n", i,
+                     pdxser->toString().c_str());
             } else {
               printf("   query idx %d pulled bad object  :: \n", i);
               FAIL("Unexpected object received in query");
@@ -293,7 +286,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
       }
 
       if (resultsetQueries[i].category != unsupported) {
-        auto qry = qs->newQuery(const_cast<char*>(resultsetQueries[i].query()));
+        auto qry = qs->newQuery(resultsetQueries[i].query());
         auto results = qry->execute();
         if (!qh->verifyRS(results, (qh->isExpectedRowsConstantRS(i)
                                         ? resultsetRowCounts[i]
@@ -331,7 +324,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
             } else {
               if (ser != nullptr) {
                 printf(" query idx %d pulled object %s \n", i,
-                       ser->toString()->asChar());
+                       ser->toString().c_str());
               } else {
                 printf("   query idx %d pulled bad object \n", i);
                 FAIL("Unexpected object received in query");
@@ -357,13 +350,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
                   positionpdx->getSharesOutstanding());
             } else {
               if (pdxser != nullptr) {
-                if (pdxser->toString()->isWideString()) {
-                  printf(" query idx %d pulled object %S  :: \n", i,
-                         pdxser->toString()->asWChar());
-                } else {
-                  printf(" query idx %d pulled object %s  :: \n", i,
-                         pdxser->toString()->asChar());
-                }
+                printf(" query idx %d pulled object %s  :: \n", i,
+                       pdxser->toString().c_str());
               } else {
                 printf("   query idx %d pulled bad object  :: \n", i);
                 FAIL("Unexpected object received in query");
@@ -400,8 +388,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepSix)
 
     for (int i = 0; i < QueryStrings::RSPsize(); i++) {
       if (resultsetparamQueries[i].category != unsupported) {
-        auto qry =
-            qs->newQuery(const_cast<char*>(resultsetparamQueries[i].query()));
+        auto qry = qs->newQuery(resultsetparamQueries[i].query());
         // LOGINFO("NIL::229:Retrieved QueryString = %s",
         // qry->getQueryString());
 
@@ -453,7 +440,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepSix)
             } else {
               if (ser != nullptr) {
                 printf(" query idx %d pulled object %s  : \n", i,
-                       ser->toString()->asChar());
+                       ser->toString().c_str());
               } else {
                 printf("   query idx %d pulled bad object  \n", i);
                 FAIL("Unexpected object received in query");
@@ -479,7 +466,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepSix)
             } else {
               if (ser != nullptr) {
                 printf(" query idx %d pulled object %s : \n", i,
-                       ser->toString()->asChar());
+                       ser->toString().c_str());
               } else {
                 printf("   query idx %d pulled bad object\n", i);
                 FAIL("Unexpected object received in query");
@@ -512,7 +499,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, DoQueryRSError)
 
     for (int i = 0; i < QueryStrings::RSsize(); i++) {
       if (resultsetQueries[i].category == unsupported) {
-        auto qry = qs->newQuery(const_cast<char*>(resultsetQueries[i].query()));
+        auto qry = qs->newQuery(resultsetQueries[i].query());
 
         try {
           auto results = qry->execute();
diff --git a/cppcache/integration-test/testThinClientRemoteQuerySS.cpp b/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
index 7339d8c3..5cab4fa5 100644
--- a/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
+++ b/cppcache/integration-test/testThinClientRemoteQuerySS.cpp
@@ -102,13 +102,11 @@ void _printFields(std::shared_ptr<Cacheable> field, Struct* ssptr,
       } else if (auto boolptr =
                      std::dynamic_pointer_cast<CacheableBoolean>(field)) {
         printf("   pulled %s :- %s\n", ssptr->getFieldName(fields).c_str(),
-               boolptr->toString()->asChar());
+               boolptr->toString().c_str());
       } else {
         if (auto ptr = std::dynamic_pointer_cast<CacheableKey>(field)) {
-          char buff[1024] = {'\0'};
-          ptr->logString(&buff[0], 1024);
           printf("   pulled %s :- %s \n", ssptr->getFieldName(fields).c_str(),
-                 buff);
+                 ptr->toString().c_str());
         } else if (auto strArr =
                        std::dynamic_pointer_cast<CacheableStringArray>(field)) {
           printf(" string array object printing \n\n");
diff --git a/cppcache/integration-test/testThinClientRemoteQueryTimeout.cpp b/cppcache/integration-test/testThinClientRemoteQueryTimeout.cpp
index f7f4db5b..fb09ffef 100644
--- a/cppcache/integration-test/testThinClientRemoteQueryTimeout.cpp
+++ b/cppcache/integration-test/testThinClientRemoteQueryTimeout.cpp
@@ -148,7 +148,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry = qs->newQuery(const_cast<char*>(resultsetQueries[34].query()));
+    auto qry = qs->newQuery(resultsetQueries[34].query());
 
     std::shared_ptr<SelectResults> results;
 
@@ -191,7 +191,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry = qs->newQuery(const_cast<char*>(resultsetQueries[34].query()));
+    auto qry = qs->newQuery((resultsetQueries[34].query()));
 
     std::shared_ptr<SelectResults> results;
 
@@ -230,7 +230,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry = qs->newQuery(const_cast<char*>(structsetQueries[17].query()));
+    auto qry = qs->newQuery(structsetQueries[17].query());
 
     std::shared_ptr<SelectResults> results;
 
@@ -273,7 +273,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepSix)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry = qs->newQuery(const_cast<char*>(structsetQueries[17].query()));
+    auto qry = qs->newQuery(structsetQueries[17].query());
 
     std::shared_ptr<SelectResults> results;
 
@@ -312,8 +312,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepSeven)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry =
-        qs->newQuery(const_cast<char*>(structsetParamQueries[5].query()));
+    auto qry = qs->newQuery(structsetParamQueries[5].query());
 
     std::shared_ptr<SelectResults> results;
 
@@ -365,8 +364,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepEight)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry =
-        qs->newQuery(const_cast<char*>(structsetParamQueries[5].query()));
+    auto qry = qs->newQuery((structsetParamQueries[5].query()));
 
     std::shared_ptr<SelectResults> results;
 
@@ -415,7 +413,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, verifyNegativeValueTimeout)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry = qs->newQuery(const_cast<char*>(resultsetQueries[34].query()));
+    auto qry = qs->newQuery((resultsetQueries[34].query()));
 
     std::shared_ptr<SelectResults> results;
 
@@ -460,7 +458,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, verifyLargeValueTimeout)
     } else {
       qs = getHelper()->cachePtr->getQueryService();
     }
-    auto qry = qs->newQuery(const_cast<char*>(resultsetQueries[34].query()));
+    auto qry = qs->newQuery((resultsetQueries[34].query()));
 
     std::shared_ptr<SelectResults> results;
 
diff --git a/cppcache/integration-test/testThinClientRemoteRegionQuery.cpp b/cppcache/integration-test/testThinClientRemoteRegionQuery.cpp
index d886e4d4..1cb3410a 100644
--- a/cppcache/integration-test/testThinClientRemoteRegionQuery.cpp
+++ b/cppcache/integration-test/testThinClientRemoteRegionQuery.cpp
@@ -179,7 +179,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree)
         continue;
       }
 
-      auto results = region->query(const_cast<char*>(regionQueries[i].query()));
+      auto results = region->query((regionQueries[i].query()));
 
       if (results->size() != regionQueryRowCounts[i]) {
         char failmsg[100] = {0};
@@ -203,7 +203,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree)
     }
 
     try {
-      auto results = region->query(const_cast<char*>(regionQueries[0].query()),
+      auto results = region->query((regionQueries[0].query()),
                                    std::chrono::seconds(2200000));
       FAIL("Expected IllegalArgumentException exception for invalid timeout");
     } catch (apache::geode::client::IllegalArgumentException ex) {
@@ -213,8 +213,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepThree)
     }
 
     try {
-      auto results = region->query(const_cast<char*>(regionQueries[0].query()),
-                                   std::chrono::seconds(-1));
+      auto results =
+          region->query((regionQueries[0].query()), std::chrono::seconds(-1));
       FAIL("Expected IllegalArgumentException exception for invalid timeout");
     } catch (apache::geode::client::IllegalArgumentException ex) {
       LOG("got expected IllegalArgumentException exception for invalid "
@@ -251,8 +251,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
         continue;
       }
 
-      bool existsValue =
-          region->existsValue(const_cast<char*>(regionQueries[i].query()));
+      bool existsValue = region->existsValue((regionQueries[i].query()));
 
       bool expectedResult = regionQueryRowCounts[i] > 0 ? true : false;
 
@@ -278,9 +277,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     }
 
     try {
-      bool existsValue ATTR_UNUSED =
-          region->existsValue(const_cast<char*>(regionQueries[0].query()),
-                              std::chrono::seconds(2200000));
+      bool existsValue ATTR_UNUSED = region->existsValue(
+          (regionQueries[0].query()), std::chrono::seconds(2200000));
       FAIL("Expected IllegalArgumentException exception for invalid timeout");
     } catch (apache::geode::client::IllegalArgumentException ex) {
       LOG("got expected IllegalArgumentException exception for invalid "
@@ -289,9 +287,8 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFour)
     }
 
     try {
-      bool existsValue ATTR_UNUSED =
-          region->existsValue(const_cast<char*>(regionQueries[0].query()),
-                              std::chrono::seconds(-1));
+      bool existsValue ATTR_UNUSED = region->existsValue(
+          (regionQueries[0].query()), std::chrono::seconds(-1));
       FAIL("Expected IllegalArgumentException exception for invalid timeout");
     } catch (apache::geode::client::IllegalArgumentException ex) {
       LOG("got expected IllegalArgumentException exception for invalid "
@@ -329,8 +326,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
       }
 
       try {
-        auto result =
-            region->selectValue(const_cast<char*>(regionQueries[i].query()));
+        auto result = region->selectValue((regionQueries[i].query()));
 
         /*
               if (result == nullptr)
@@ -385,9 +381,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     }
 
     try {
-      auto results = std::dynamic_pointer_cast<SelectResults>(
-          region->selectValue(const_cast<char*>(regionQueries[0].query()),
-                              std::chrono::seconds(2200000)));
+      auto results =
+          std::dynamic_pointer_cast<SelectResults>(region->selectValue(
+              (regionQueries[0].query()), std::chrono::seconds(2200000)));
       FAIL("Expected IllegalArgumentException exception for invalid timeout");
     } catch (apache::geode::client::IllegalArgumentException ex) {
       LOG("got expected IllegalArgumentException exception for invalid "
@@ -396,9 +392,9 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepFive)
     }
 
     try {
-      auto results = std::dynamic_pointer_cast<SelectResults>(
-          region->selectValue(const_cast<char*>(regionQueries[0].query()),
-                              std::chrono::seconds(-1)));
+      auto results =
+          std::dynamic_pointer_cast<SelectResults>(region->selectValue(
+              (regionQueries[0].query()), std::chrono::seconds(-1)));
       FAIL("Expected IllegalArgumentException exception for invalid timeout");
     } catch (apache::geode::client::IllegalArgumentException ex) {
       LOG("got expected IllegalArgumentException exception for invalid "
@@ -436,8 +432,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, QueryError)
       }
 
       try {
-        auto results =
-            region->query(const_cast<char*>(regionQueries[i].query()));
+        auto results = region->query((regionQueries[i].query()));
 
         char failmsg[100] = {0};
         ACE_OS::sprintf(failmsg, "Query exception didnt occur for index %d", i);
diff --git a/cppcache/integration-test/testThinClientRemoveOps.cpp b/cppcache/integration-test/testThinClientRemoveOps.cpp
index d151155d..b9bd16e3 100644
--- a/cppcache/integration-test/testThinClientRemoveOps.cpp
+++ b/cppcache/integration-test/testThinClientRemoveOps.cpp
@@ -311,7 +311,7 @@ void doGetAgain(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "get  region name%s\n", regPtr->getName());
+  fprintf(stdout, "get  region name%s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -343,7 +343,7 @@ void doNetsearch(const char* name, const char* key, const char* value) {
   auto keyPtr = CacheableKey::create(key);
 
   auto regPtr = getHelper()->getRegion(name);
-  fprintf(stdout, "netsearch  region %s\n", regPtr->getName());
+  fprintf(stdout, "netsearch  region %s\n", regPtr->getName().c_str());
   fflush(stdout);
   ASSERT(regPtr != nullptr, "Region not found.");
 
@@ -1393,7 +1393,7 @@ DUNIT_TASK_DEFINITION(CLIENT1, StepTwelve)
     regPtr0->localCreate(keyObject3, "testString");
     if (regPtr0->containsKey(keyObject3)) {
       auto strVal1 = regPtr0->get(keyObject3);
-      ASSERT(strcmp(strVal1->toString()->asChar(), "testString") == 0,
+      ASSERT(strcmp(strVal1->toString().c_str(), "testString") == 0,
              "strVal should be testString.");
     }
     try {
diff --git a/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp b/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
index d0356427..b0ddeddc 100644
--- a/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
+++ b/cppcache/integration-test/testThinClientSSLWithSecurityAuthz.cpp
@@ -430,10 +430,10 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
     createRegionForSecurity(regionNamesAuth[0], USE_ACK, true);
 
     rptr = getHelper()->getRegion(regionNamesAuth[0]);
-    sprintf(buf, "%s: %d", rptr->getName(), i);
+    sprintf(buf, "%s: %d", rptr->getName().c_str(), i);
     auto key = createKey(buf);
-    sprintf(buf, "testUpdate::%s: value of %d", rptr->getName(), i);
-    auto valuePtr = CacheableString::create(buf);
+    sprintf(buf, "testUpdate::%s: value of %d", rptr->getName().c_str(), i);
+    auto valuePtr = buf;
     try {
       LOG("Trying put Operation");
       rptr->put(key, valuePtr);
diff --git a/cppcache/integration-test/testThinClientSecurityAuthenticationSetAuthInitialize.cpp b/cppcache/integration-test/testThinClientSecurityAuthenticationSetAuthInitialize.cpp
index 50e78765..badbb5d3 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthenticationSetAuthInitialize.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthenticationSetAuthInitialize.cpp
@@ -51,7 +51,8 @@ class UserPasswordAuthInit : public AuthInitialize {
   ~UserPasswordAuthInit() {}
 
   std::shared_ptr<Properties> getCredentials(
-      const std::shared_ptr<Properties>& securityprops, const char* server) {
+      const std::shared_ptr<Properties>& securityprops,
+      const std::string& server) override {
     // LOGDEBUG("UserPasswordAuthInit: inside userPassword::getCredentials");
     std::shared_ptr<Cacheable> userName;
     if (securityprops == nullptr ||
@@ -62,19 +63,19 @@ class UserPasswordAuthInit : public AuthInitialize {
     }
 
     auto credentials = Properties::create();
-    credentials->insert(SECURITY_USERNAME, userName->toString()->asChar());
-   auto passwd = securityprops->find(SECURITY_PASSWORD);
-   // If password is not provided then use empty string as the password.
-   if (passwd == nullptr) {
-     passwd = CacheableString::create("");
+    credentials->insert(SECURITY_USERNAME, userName->toString().c_str());
+    auto passwd = securityprops->find(SECURITY_PASSWORD);
+    // If password is not provided then use empty string as the password.
+    if (passwd == nullptr) {
+      passwd = CacheableString::create("");
    }
    credentials->insert(SECURITY_PASSWORD, passwd->asChar());
    // LOGDEBUG("UserPasswordAuthInit: inserted username:password - %s:%s",
-   //    userName->toString()->asChar(), passwd->toString()->asChar());
+   //    userName->toString().c_str(), passwd->toString().c_str());
    return credentials;
   }
 
-  void close() { return; }
+  void close() override { return; }
 
  private:
 };
diff --git a/cppcache/integration-test/testThinClientSecurityAuthorization.cpp b/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
index ca816b83..fd67887c 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthorization.cpp
@@ -456,10 +456,10 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
     createRegionForSecurity(regionNamesAuth[0], USE_ACK, true);
 
     rptr = getHelper()->getRegion(regionNamesAuth[0]);
-    sprintf(buf, "%s: %d", rptr->getName(), i);
+    sprintf(buf, "%s: %d", rptr->getName().c_str(), i);
     auto key = createKey(buf);
-    sprintf(buf, "testUpdate::%s: value of %d", rptr->getName(), i);
-    auto valuePtr = CacheableString::create(buf);
+    sprintf(buf, "testUpdate::%s: value of %d", rptr->getName().c_str(), i);
+    auto valuePtr = buf;
     try {
       LOG("Trying put Operation");
       rptr->put(key, valuePtr);
diff --git a/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp b/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
index 824e0b97..5e670f34 100644
--- a/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
+++ b/cppcache/integration-test/testThinClientSecurityAuthorizationMU.cpp
@@ -892,10 +892,10 @@ DUNIT_TASK_DEFINITION(READER_CLIENT, StepThree)
     }
 
     // rptr = getHelper()->getRegion(regionNamesAuth[0]);
-    sprintf(buf, "%s: %d", rptr->getName(), i);
-   auto key = createKey(buf);
-    sprintf(buf, "testUpdate::%s: value of %d", rptr->getName(), i);
-    auto valuePtr = CacheableString::create(buf);
+    sprintf(buf, "%s: %d", rptr->getName().c_str(), i);
+    auto key = createKey(buf);
+    sprintf(buf, "testUpdate::%s: value of %d", rptr->getName().c_str(), i);
+    auto valuePtr = buf;
     try {
       LOG("Trying put Operation");
       rptr->put(key, valuePtr);
diff --git a/cppcache/integration-test/testThinClientWriterException.cpp b/cppcache/integration-test/testThinClientWriterException.cpp
index 8afa353a..d2cd890b 100644
--- a/cppcache/integration-test/testThinClientWriterException.cpp
+++ b/cppcache/integration-test/testThinClientWriterException.cpp
@@ -163,10 +163,10 @@ void startClient() {
   setCacheWriter(regionNamesAuth[0], regWriter);
   rptr = getHelper()->getRegion(regionNamesAuth[0]);
   rptr->registerAllKeys();
-  sprintf(buf, "%s: %d", rptr->getName(), i);
- auto key = createKey(buf);
-  sprintf(buf, "testUpdate::%s: value of %d", rptr->getName(), i);
-  auto valuePtr = CacheableString::create(buf);
+  sprintf(buf, "%s: %d", rptr->getName().c_str(), i);
+  auto key = createKey(buf);
+  sprintf(buf, "testUpdate::%s: value of %d", rptr->getName().c_str(), i);
+  auto valuePtr = buf;
   try {
     LOG("Trying put Operation");
     rptr->put(key, valuePtr);
diff --git a/cppcache/integration-test/testUtils.hpp b/cppcache/integration-test/testUtils.hpp
index 1e331bd1..a5b2f68e 100644
--- a/cppcache/integration-test/testUtils.hpp
+++ b/cppcache/integration-test/testUtils.hpp
@@ -127,13 +127,12 @@ class TestUtils {
     }
     std::vector<std::shared_ptr<CacheableKey>> v = rptr->keys();
     auto len = v.size();
-    sprintf(buf, "Total keys in region %s : %zu\n", rptr->getName(), len);
+    sprintf(buf, "Total keys in region %s : %zu\n", rptr->getName().c_str(),
+            len);
     LOG(buf);
     for (uint32_t i = 0; i < len; i++) {
-      char keyText[100];
-      v[i]->logString(keyText, 100);
       sprintf(buf, "key[%u] = '%s'\n", i,
-              (v[i] == nullptr) ? "nullptr KEY" : keyText);
+              (v[i] == nullptr) ? "nullptr KEY" : v[i]->toString().c_str());
       LOG(buf);
     }
   }
@@ -146,17 +145,16 @@ class TestUtils {
     }
     std::vector<std::shared_ptr<CacheableKey>> v = rptr->keys();
     auto len = v.size();
-    sprintf(buf, "Total keys in region %s : %zu\n", rptr->getName(), len);
+    sprintf(buf, "Total keys in region %s : %zu\n", rptr->getName().c_str(),
+            len);
     LOG(buf);
     for (uint32_t i = 0; i < len; i++) {
       auto keyPtr = v[i];
-      char keyText[100];
-      keyPtr->logString(keyText, 100);
       auto valPtr =
           std::dynamic_pointer_cast<CacheableString>(rptr->get(keyPtr));
       sprintf(buf, "key[%u] = '%s', value[%u]='%s'\n", i,
-              (keyPtr == nullptr) ? "nullptr KEY" : keyText, i,
-              (valPtr == nullptr) ? "NULL_VALUE" : valPtr->asChar());
+              (keyPtr == nullptr) ? "nullptr KEY" : keyPtr->toString().c_str(),
+              i, (valPtr == nullptr) ? "NULL_VALUE" : valPtr->asChar());
       LOG(buf);
     }
   }
@@ -169,7 +167,8 @@ class TestUtils {
     }
     auto v = rptr->values();
     auto len = v.size();
-    sprintf(buf, "Total values in region %s : %zu\n", rptr->getName(), len);
+    sprintf(buf, "Total values in region %s : %zu\n", rptr->getName().c_str(),
+            len);
     LOG(buf);
     for (size_t i = 0; i < len; i++) {
       auto value = std::dynamic_pointer_cast<CacheableString>(v[i]);
diff --git a/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp b/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
index 94ee5da1..5da63ad0 100644
--- a/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
+++ b/cppcache/integration-test/testXmlCacheCreationWithOverFlow.cpp
@@ -120,18 +120,13 @@ int testXmlCacheCreationWithOverflow() {
   }
 
   std::cout << "Test if the nesting of regions is correct" << std::endl;
-  const char* parentName;
-  const char* childName;
   auto regPtr2 = vrp.at(1);
-  std::vector<std::shared_ptr<Region>> 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();
-
-    auto x = regPtr->getParentRegion();
-    parentName = (x.get())->getName();
-    if (strcmp(childName, "SubSubRegion221") == 0) {
-      if (strcmp(parentName, "SubRegion22") != 0) {
+  auto&& vsr = regPtr2->subregions(true);
+  for (auto&& regPtr : vsr) {
+    auto&& childName = regPtr->getName();
+    auto&& parentName = regPtr->getParentRegion()->getName();
+    if (childName == "SubSubRegion221") {
+      if (parentName != "SubRegion22") {
         std::cout << "Incorrect parent: tree structure not formed correctly" << std::endl;
         return -1;
       }
@@ -187,10 +182,6 @@ int testXmlCacheCreationWithOverflow() {
     return -1;
   }
 
-  const char* lib = regAttr->getPersistenceLibrary();
-  const char* libFun = regAttr->getPersistenceFactory();
-  printf(" persistence library1 = %s\n", lib);
-  printf(" persistence function1 = %s\n", libFun);
   std::cout << "persistence library = " << regAttr->getPersistenceLibrary() << std::endl;
   std::cout << "persistence function = " << regAttr->getPersistenceFactory() << std::endl;
   auto pconfig = regAttr->getPersistenceProperties();
@@ -205,10 +196,6 @@ int testXmlCacheCreationWithOverflow() {
   std::cout << "****Attributes of Root1 are correctly set****" << std::endl;
 
   std::shared_ptr<RegionAttributes> raPtr2 = regPtr2->getAttributes();
-  const char* lib2 = raPtr2->getPersistenceLibrary();
-  const char* libFun2 = raPtr2->getPersistenceFactory();
-  printf(" persistence library2 = %s\n", lib2);
-  printf(" persistence function2 = %s\n", libFun2);
   std::cout << "persistence library = " << raPtr2->getPersistenceLibrary() << std::endl;
   std::cout << "persistence function = " << raPtr2->getPersistenceFactory() << std::endl;
   auto pconfig2 = raPtr2->getPersistenceProperties();
diff --git a/cppcache/integration-test/testXmlCacheCreationWithPools.cpp b/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
index 2bed9341..cfc48450 100644
--- a/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
+++ b/cppcache/integration-test/testXmlCacheCreationWithPools.cpp
@@ -77,8 +77,8 @@ bool checkPoolAttribs(std::shared_ptr<Pool> pool, SLIST& locators,
                       int loadConditioningInterval, int minConnections,
                       int maxConnections, int retryAttempts,
                       std::chrono::milliseconds idleTimeout, int pingInterval,
-                      const char* name, int readTimeout,
-                      const char* serverGroup, int socketBufferSize,
+                      const std::string& name, int readTimeout,
+                      const std::string& serverGroup, int socketBufferSize,
                       bool subscriptionEnabled,
                       int subscriptionMessageTrackingTimeout,
                       int subscriptionAckInterval, int subscriptionRedundancy,
@@ -95,9 +95,9 @@ bool checkPoolAttribs(std::shared_ptr<Pool> pool, SLIST& locators,
 
   std::cout << "Checking pool " << pool->getName() << std::endl;
 
-  if (strcmp(pool->getName(), name)) {
+  if (pool->getName() != name) {
     sprintf(logmsg, "checkPoolAttribs: Pool name expected [%s], actual [%s]",
-            name, pool->getName() == nullptr ? "null" : pool->getName());
+            name.c_str(), pool->getName().c_str());
     LOG(logmsg);
     return false;
   }
@@ -171,11 +171,10 @@ bool checkPoolAttribs(std::shared_ptr<Pool> pool, SLIST& locators,
     LOG(logmsg);
     return false;
   }
-  if (strcmp(serverGroup, pool->getServerGroup())) {
-    sprintf(
-        logmsg, "checkPoolAttribs: Pool serverGroup expected [%s], actual [%s]",
-        serverGroup,
-        pool->getServerGroup() == nullptr ? "null" : pool->getServerGroup());
+  if (serverGroup != pool->getServerGroup()) {
+    sprintf(logmsg,
+            "checkPoolAttribs: Pool serverGroup expected [%s], actual [%s]",
+            serverGroup.c_str(), pool->getServerGroup().c_str());
     LOG(logmsg);
     return false;
   }
@@ -348,19 +347,19 @@ int testXmlCacheCreationWithPools() {
 
   std::cout << "Test the attributes of region" << std::endl;
 
-  const char* poolNameReg1 = regPtr1->getAttributes()->getPoolName();
-  const char* poolNameSubReg = subRegPtr->getAttributes()->getPoolName();
-  const char* poolNameReg2 = regPtr2->getAttributes()->getPoolName();
+  const auto& poolNameReg1 = regPtr1->getAttributes()->getPoolName();
+  const auto& poolNameSubReg = subRegPtr->getAttributes()->getPoolName();
+  const auto& poolNameReg2 = regPtr2->getAttributes()->getPoolName();
 
-  if (strcmp(poolNameReg1, "test_pool_1")) {
+  if (poolNameReg1 != "test_pool_1") {
     std::cout << "Wrong pool name for region 1" << std::endl;
     return -1;
   }
-  if (strcmp(poolNameReg2, "test_pool_2")) {
+  if (poolNameReg2 != "test_pool_2") {
     std::cout << "Wrong pool name for region 2" << std::endl;
     return -1;
   }
-  if (strcmp(poolNameSubReg, "test_pool_2")) {
+  if (poolNameSubReg != "test_pool_2") {
     std::cout << "Wrong pool name for sub region" << std::endl;
     return -1;
   }
diff --git a/cppcache/src/AdminRegion.cpp b/cppcache/src/AdminRegion.cpp
index c386cd3e..ada54b61 100644
--- a/cppcache/src/AdminRegion.cpp
+++ b/cppcache/src/AdminRegion.cpp
@@ -14,16 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#include <geode/SystemProperties.hpp>
+
 #include "AdminRegion.hpp"
 #include "CacheImpl.hpp"
-#include <geode/SystemProperties.hpp>
 #include "ThinClientRegion.hpp"
-#include <statistics/StatisticsManager.hpp>
 #include "ThinClientPoolDM.hpp"
+#include "statistics/StatisticsManager.hpp"
+#include "util/exception.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
+
 std::shared_ptr<AdminRegion> AdminRegion::create(CacheImpl* cache,
                                                  ThinClientBaseDM* distMan) {
   auto adminRegion = std::make_shared<AdminRegion>();
diff --git a/cppcache/src/AttributesFactory.cpp b/cppcache/src/AttributesFactory.cpp
index 7a80b54c..90805b5a 100644
--- a/cppcache/src/AttributesFactory.cpp
+++ b/cppcache/src/AttributesFactory.cpp
@@ -60,26 +60,26 @@ AttributesFactory& AttributesFactory::setPartitionResolver(
   return *this;
 }
 
-AttributesFactory& AttributesFactory::setCacheLoader(const char* lib,
-                                                     const char* func) {
+AttributesFactory& AttributesFactory::setCacheLoader(const std::string& lib,
+                                                     const std::string& func) {
   m_regionAttributes.setCacheLoader(lib, func);
   return *this;
 }
 
-AttributesFactory& AttributesFactory::setCacheWriter(const char* lib,
-                                                     const char* func) {
+AttributesFactory& AttributesFactory::setCacheWriter(const std::string& lib,
+                                                     const std::string& func) {
   m_regionAttributes.setCacheWriter(lib, func);
   return *this;
 }
 
-AttributesFactory& AttributesFactory::setCacheListener(const char* lib,
-                                                       const char* func) {
+AttributesFactory& AttributesFactory::setCacheListener(
+    const std::string& lib, const std::string& func) {
   m_regionAttributes.setCacheListener(lib, func);
   return *this;
 }
 
-AttributesFactory& AttributesFactory::setPartitionResolver(const char* lib,
-                                                           const char* func) {
+AttributesFactory& AttributesFactory::setPartitionResolver(
+    const std::string& lib, const std::string& func) {
   m_regionAttributes.setPartitionResolver(lib, func);
   return *this;
 }
@@ -162,8 +162,8 @@ void AttributesFactory::validateAttributes(RegionAttributes& attrs) {
 
   if (attrs.m_diskPolicy != DiskPolicyType::NONE) {
     if (attrs.m_persistenceManager == nullptr &&
-        (attrs.m_persistenceLibrary == nullptr ||
-         attrs.m_persistenceFactory == nullptr)) {
+        (attrs.m_persistenceLibrary.empty() ||
+         attrs.m_persistenceFactory.empty())) {
       throw IllegalStateException(
           "Persistence Manager must be set if DiskPolicy is OVERFLOWS");
     }
@@ -205,13 +205,13 @@ AttributesFactory& AttributesFactory::setPersistenceManager(
 }
 
 AttributesFactory& AttributesFactory::setPersistenceManager(
-    const char* lib, const char* func,
+    const std::string& lib, const std::string& func,
     const std::shared_ptr<Properties>& config) {
   m_regionAttributes.setPersistenceManager(lib, func, config);
   return *this;
 }
 
-AttributesFactory& AttributesFactory::setPoolName(const char* name) {
+AttributesFactory& AttributesFactory::setPoolName(const std::string& name) {
   m_regionAttributes.setPoolName(name);
   return *this;
 }
diff --git a/cppcache/src/AttributesMutator.cpp b/cppcache/src/AttributesMutator.cpp
index 7f866b02..88e39943 100644
--- a/cppcache/src/AttributesMutator.cpp
+++ b/cppcache/src/AttributesMutator.cpp
@@ -35,85 +35,85 @@ std::chrono::seconds AttributesMutator::setEntryIdleTimeout(
 
 ExpirationAction::Action AttributesMutator::setEntryIdleTimeoutAction(
     ExpirationAction::Action action) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustEntryExpiryAction(action);
 }
 
 std::chrono::seconds AttributesMutator::setEntryTimeToLive(
     std::chrono::seconds timeToLive) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustEntryExpiryDuration(timeToLive);
 }
 
 ExpirationAction::Action AttributesMutator::setEntryTimeToLiveAction(
     ExpirationAction::Action action) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustEntryExpiryAction(action);
 }
 
 std::chrono::seconds AttributesMutator::setRegionIdleTimeout(
     std::chrono::seconds idleTimeout) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustRegionExpiryDuration(idleTimeout);
 }
 
 ExpirationAction::Action AttributesMutator::setRegionIdleTimeoutAction(
     ExpirationAction::Action action) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustRegionExpiryAction(action);
 }
 
 std::chrono::seconds AttributesMutator::setRegionTimeToLive(
     std::chrono::seconds timeToLive) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustRegionExpiryDuration(timeToLive);
 }
 
 ExpirationAction::Action AttributesMutator::setRegionTimeToLiveAction(
     ExpirationAction::Action action) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustRegionExpiryAction(action);
 }
 
 uint32_t AttributesMutator::setLruEntriesLimit(uint32_t entriesLimit) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   return rImpl->adjustLruEntriesLimit(entriesLimit);
 }
 
 void AttributesMutator::setCacheListener(
     const std::shared_ptr<CacheListener>& aListener) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   rImpl->adjustCacheListener(aListener);
 }
 
-void AttributesMutator::setCacheListener(const char* libpath,
-                                         const char* factoryFuncName) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
-  rImpl->adjustCacheListener(libpath, factoryFuncName);
+void AttributesMutator::setCacheListener(const std::string& libpath,
+                                         const std::string& factoryFuncName) {
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
+  rImpl->adjustCacheListener(libpath.c_str(), factoryFuncName.c_str());
 }
 
 void AttributesMutator::setCacheLoader(
     const std::shared_ptr<CacheLoader>& aLoader) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   rImpl->adjustCacheLoader(aLoader);
 }
 
-void AttributesMutator::setCacheLoader(const char* libpath,
-                                       const char* factoryFuncName) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
-  rImpl->adjustCacheLoader(libpath, factoryFuncName);
+void AttributesMutator::setCacheLoader(const std::string& libpath,
+                                       const std::string& factoryFuncName) {
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
+  rImpl->adjustCacheLoader(libpath.c_str(), factoryFuncName.c_str());
 }
 
 void AttributesMutator::setCacheWriter(
     const std::shared_ptr<CacheWriter>& aWriter) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
   rImpl->adjustCacheWriter(aWriter);
 }
 
-void AttributesMutator::setCacheWriter(const char* libpath,
-                                       const char* factoryFuncName) {
-  RegionInternal* rImpl = dynamic_cast<RegionInternal*>(m_region.get());
-  rImpl->adjustCacheWriter(libpath, factoryFuncName);
+void AttributesMutator::setCacheWriter(const std::string& libpath,
+                                       const std::string& factoryFuncName) {
+  auto rImpl = std::static_pointer_cast<RegionInternal>(m_region);
+  rImpl->adjustCacheWriter(libpath.c_str(), factoryFuncName.c_str());
 }
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/Cache.cpp b/cppcache/src/Cache.cpp
index d10bf0e2..6eca8a07 100644
--- a/cppcache/src/Cache.cpp
+++ b/cppcache/src/Cache.cpp
@@ -86,18 +86,17 @@ void Cache::close(bool keepalive) {
   } catch (...) {
   }
 }
-std::shared_ptr<Region> Cache::getRegion(const char* path) {
-  LOGDEBUG("Cache::getRegion");
+std::shared_ptr<Region> Cache::getRegion(const std::string& path) const {
+  LOGDEBUG("Cache::getRegion " + path);
   std::shared_ptr<Region> result;
-  m_cacheImpl->getRegion(path, result);
+  m_cacheImpl->getRegion(path.c_str(), result);
 
   if (result != nullptr) {
     if (isPoolInMultiuserMode(result)) {
-      LOGWARN(
-          "Pool [%s] attached with region [%s] is in multiuser authentication "
-          "mode. "
-          "Operations may fail as this instance does not have any credentials.",
-          result->getAttributes()->getPoolName(), result->getFullPath());
+      LOGWARN("Pool " + result->getAttributes()->getPoolName() +
+              " attached with region " + result->getFullPath() +
+              " is in multiuser authentication mode. Operations may fail as "
+              "this instance does not have any credentials.");
     }
   }
 
@@ -113,7 +112,7 @@ std::shared_ptr<Region> Cache::getRegion(const char* path) {
  * regions when the function returns
  */
 
-std::vector<std::shared_ptr<Region>> Cache::rootRegions() {
+std::vector<std::shared_ptr<Region>> Cache::rootRegions() const {
   std::vector<std::shared_ptr<Region>> regions;
   m_cacheImpl->rootRegions(regions);
   return regions;
@@ -124,15 +123,15 @@ RegionFactory Cache::createRegionFactory(RegionShortcut preDefinedRegion) {
 }
 
 std::shared_ptr<QueryService> Cache::getQueryService() {
-  return m_cacheImpl->getQueryService();
+ return m_cacheImpl->getQueryService();
 }
-
-std::shared_ptr<QueryService> Cache::getQueryService(const char* poolName) {
-  return m_cacheImpl->getQueryService(poolName);
+std::shared_ptr<QueryService> Cache::getQueryService(
+   const std::string& poolName) const {
+ return m_cacheImpl->getQueryService(poolName.c_str());
 }
-
-std::shared_ptr<CacheTransactionManager> Cache::getCacheTransactionManager() {
-  return m_cacheImpl->getCacheTransactionManager();
+std::shared_ptr<CacheTransactionManager> Cache::getCacheTransactionManager()
+   const {
+ return m_cacheImpl->getCacheTransactionManager();
 }
 
 TypeRegistry& Cache::getTypeRegistry() { return *(m_typeRegistry.get()); }
@@ -158,22 +157,8 @@ Cache::Cache(Cache&& other) noexcept :
 
 Cache::~Cache() = default;
 
-/** Initialize the cache by the contents of an xml file
- * @param  cacheXml
- *         The xml file
- * @throws OutOfMemoryException
- * @throws CacheXmlException
- *         Something went wrong while parsing the XML
- * @throws IllegalStateException
- *         If xml file is well-flrmed but not valid
- * @throws RegionExistsException if a region is already in
- *         this cache
- * @throws CacheClosedException if the cache is closed
- *         at the time of region creation
- * @throws UnknownException otherwise
- */
-void Cache::initializeDeclarativeCache(const char* cacheXml) {
-  CacheXmlParser* xmlParser = CacheXmlParser::parse(cacheXml, this);
+void Cache::initializeDeclarativeCache(const std::string& cacheXml) {
+  CacheXmlParser* xmlParser = CacheXmlParser::parse(cacheXml.c_str(), this);
   xmlParser->setAttributes(this);
   m_cacheImpl->initServices();
   xmlParser->create(this);
@@ -184,9 +169,9 @@ void Cache::initializeDeclarativeCache(const char* cacheXml) {
 void Cache::readyForEvents() { m_cacheImpl->readyForEvents(); }
 
 bool Cache::isPoolInMultiuserMode(std::shared_ptr<Region> regionPtr) {
-  const char* poolName = regionPtr->getAttributes()->getPoolName();
+  const auto& poolName = regionPtr->getAttributes()->getPoolName();
 
-  if (poolName != nullptr) {
+  if (!poolName.empty()) {
     auto poolPtr = regionPtr->getCache().getPoolManager().find(poolName);
     if (poolPtr != nullptr && !poolPtr->isDestroyed()) {
       return poolPtr->getMultiuserAuthentication();
@@ -195,24 +180,26 @@ bool Cache::isPoolInMultiuserMode(std::shared_ptr<Region> regionPtr) {
   return false;
 }
 
-bool Cache::getPdxIgnoreUnreadFields() {
+bool Cache::getPdxIgnoreUnreadFields() const {
   return m_cacheImpl->getPdxIgnoreUnreadFields();
 }
 
-bool Cache::getPdxReadSerialized() {
+bool Cache::getPdxReadSerialized() const {
   return m_cacheImpl->getPdxReadSerialized();
 }
- std::shared_ptr<PdxInstanceFactory> Cache::createPdxInstanceFactory(const char* className) {
-   return std::make_shared<PdxInstanceFactoryImpl>(
-       className, m_cacheImpl->m_cacheStats, m_cacheImpl->getPdxTypeRegistry(),
-       this,
-       m_cacheImpl->getDistributedSystem()
-           .getSystemProperties()
-           .getEnableTimeStatistics());
+std::shared_ptr<PdxInstanceFactory> Cache::createPdxInstanceFactory(
+    std::string className) const {
+  return std::make_shared<PdxInstanceFactoryImpl>(
+      className.c_str(), m_cacheImpl->m_cacheStats,
+      m_cacheImpl->getPdxTypeRegistry(), this,
+      m_cacheImpl->getDistributedSystem()
+          .getSystemProperties()
+          .getEnableTimeStatistics());
  }
  std::shared_ptr<RegionService> Cache::createAuthenticatedView(
-     std::shared_ptr<Properties> userSecurityProperties, const char* poolName) {
-   if (poolName == nullptr) {
+     std::shared_ptr<Properties> userSecurityProperties,
+     const std::string& poolName) {
+   if (poolName.empty()) {
      auto pool = m_cacheImpl->getPoolManager().getDefaultPool();
      if (!this->isClosed() && pool != nullptr) {
        return pool->createSecureUserCache(userSecurityProperties,
@@ -224,7 +211,7 @@ bool Cache::getPdxReadSerialized() {
          "Pass poolname to get the secure Cache");
    } else {
      if (!this->isClosed()) {
-       if (poolName != nullptr) {
+       if (!poolName.empty()) {
          auto poolPtr = m_cacheImpl->getPoolManager().find(poolName);
          if (poolPtr != nullptr && !poolPtr->isDestroyed()) {
            return poolPtr->createSecureUserCache(userSecurityProperties,
diff --git a/cppcache/src/CacheAttributes.cpp b/cppcache/src/CacheAttributes.cpp
index f09adc46..e4dd7eb3 100644
--- a/cppcache/src/CacheAttributes.cpp
+++ b/cppcache/src/CacheAttributes.cpp
@@ -15,62 +15,38 @@
  * limitations under the License.
  */
 
-#include <Utils.hpp>
 #include <string>
 #include <cstdlib>
+
 #include <geode/GeodeTypeIds.hpp>
 #include <geode/CacheAttributes.hpp>
 
-using namespace apache::geode::client;
-CacheAttributes::CacheAttributes()
-    : m_redundancyLevel(0), m_endpoints(nullptr), m_cacheMode(false) {}
+#include "Utils.hpp"
 
-CacheAttributes::CacheAttributes(const CacheAttributes& rhs)
-    : m_redundancyLevel(rhs.m_redundancyLevel) {
-  copyStringAttribute(m_endpoints, rhs.m_endpoints);
-  m_cacheMode = rhs.m_cacheMode;
-}
+namespace apache {
+namespace geode {
+namespace client {
 
-CacheAttributes::~CacheAttributes() { GF_SAFE_DELETE_ARRAY(m_endpoints); }
+CacheAttributes::CacheAttributes()
+    : m_redundancyLevel(0), m_endpoints(nullptr), m_cacheMode(false) {}
 
 int CacheAttributes::getRedundancyLevel() { return m_redundancyLevel; }
 
-char* CacheAttributes::getEndpoints() { return m_endpoints; }
+const std::string& CacheAttributes::getEndpoints() { return m_endpoints; }
 
 /** Return true if all the attributes are equal to those of other. */
 bool CacheAttributes::operator==(const CacheAttributes& other) const {
   if (m_redundancyLevel != other.m_redundancyLevel) return false;
-  if (0 != compareStringAttribute(m_endpoints, other.m_endpoints)) return false;
+  if (m_endpoints != other.m_endpoints) return false;
 
   return true;
 }
 
-int32_t CacheAttributes::compareStringAttribute(char* attributeA,
-                                                char* attributeB) const {
-  if (attributeA == nullptr && attributeB == nullptr) {
-    return 0;
-  } else if (attributeA == nullptr && attributeB != nullptr) {
-    return -1;
-  } else if (attributeA != nullptr && attributeB == nullptr) {
-    return -1;
-  }
-  return (strcmp(attributeA, attributeB));
-}
-
 /** Return true if any of the attributes are not equal to those of other. */
 bool CacheAttributes::operator!=(const CacheAttributes& other) const {
   return !(*this == other);
 }
 
-void CacheAttributes::copyStringAttribute(char*& lhs, const char* rhs) {
-  if (lhs != nullptr) {
-    delete[] lhs;
-  }
-  if (rhs == nullptr) {
-    lhs = nullptr;
-  } else {
-    size_t len = strlen(rhs) + 1;
-    lhs = new char[len];
-    memcpy(lhs, rhs, len);
-  }
-}
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/CacheFactory.cpp b/cppcache/src/CacheFactory.cpp
index 1d0d2f97..cfcdd185 100644
--- a/cppcache/src/CacheFactory.cpp
+++ b/cppcache/src/CacheFactory.cpp
@@ -50,31 +50,34 @@ extern ACE_Recursive_Thread_Mutex* g_disconnectLock;
 namespace apache {
 namespace geode {
 namespace client {
+
 std::shared_ptr<CacheFactory> CacheFactory::createCacheFactory(
     const std::shared_ptr<Properties>& configPtr) {
   return std::make_shared<CacheFactory>(configPtr);
 }
 
-const char* CacheFactory::getVersion() { return PRODUCT_VERSION; }
-
-const char* CacheFactory::getProductDescription() {
-  return PRODUCT_VENDOR " " PRODUCT_NAME " " PRODUCT_VERSION " (" PRODUCT_BITS
-                        ") " PRODUCT_BUILDDATE;
+const std::string& CacheFactory::getVersion() {
+  static std::string version{PRODUCT_VERSION};
+  return version;
 }
 
-CacheFactory::CacheFactory() {
-  ignorePdxUnreadFields = false;
-  pdxReadSerialized = false;
-  dsProp = nullptr;
+const std::string& CacheFactory::getProductDescription() {
+  static std::string description{PRODUCT_VENDOR
+                                 " " PRODUCT_NAME " " PRODUCT_VERSION
+                                 " (" PRODUCT_BITS ") " PRODUCT_BUILDDATE};
+  return description;
 }
 
+CacheFactory::CacheFactory()
+    : ignorePdxUnreadFields(false), pdxReadSerialized(false), dsProp(nullptr) {}
+
 CacheFactory::CacheFactory(const std::shared_ptr<Properties> dsProps) {
   ignorePdxUnreadFields = false;
   pdxReadSerialized = false;
   this->dsProp = dsProps;
 }
 
-Cache CacheFactory::create() {
+Cache CacheFactory::create() const {
   ACE_Guard<ACE_Recursive_Thread_Mutex> connectGuard(*g_disconnectLock);
 
   LOGFINE("CacheFactory called DistributedSystem::connect");
@@ -112,24 +115,18 @@ Cache CacheFactory::create() {
 }
 
 Cache CacheFactory::create(
-    const char* name,
-    const std::shared_ptr<CacheAttributes>& attrs /*= nullptr*/) {
+    std::string name,
+    const std::shared_ptr<CacheAttributes>& attrs /*= nullptr*/) const {
   ACE_Guard<ACE_Recursive_Thread_Mutex> connectGuard(*g_disconnectLock);
 
-  if (name == nullptr) {
-    throw IllegalArgumentException("CacheFactory::create: name is nullptr");
-  }
-  if (name[0] == '\0') {
-    name = "NativeCache";
-  }
-
-  auto cache = Cache(name, dsProp, ignorePdxUnreadFields,
-                    pdxReadSerialized, authInitialize);
+  auto cache = Cache(std::move(name), dsProp, ignorePdxUnreadFields,
+                     pdxReadSerialized, authInitialize);
   cache.m_cacheImpl->setAttributes(attrs);
+
   try {
-    const auto cacheXml =
+    auto&& cacheXml =
         cache.getDistributedSystem().getSystemProperties().cacheXMLFile();
-    if (cacheXml != 0 && strlen(cacheXml) > 0) {
+    if (!cacheXml.empty()) {
       cache.initializeDeclarativeCache(cacheXml);
     } else {
       cache.m_cacheImpl->initServices();
@@ -152,8 +149,8 @@ Cache CacheFactory::create(
   return cache;
 }
 
-CacheFactory::~CacheFactory() {}
- std::shared_ptr<CacheFactory> CacheFactory::set(const char* name, const char* value) {
+std::shared_ptr<CacheFactory> CacheFactory::set(const std::string& name,
+                                                const std::string& value) {
   if (this->dsProp == nullptr) {
     this->dsProp = Properties::create();
   }
diff --git a/cppcache/src/CacheImpl.cpp b/cppcache/src/CacheImpl.cpp
index 1732f5cd..6990c8ab 100644
--- a/cppcache/src/CacheImpl.cpp
+++ b/cppcache/src/CacheImpl.cpp
@@ -97,7 +97,8 @@ CacheImpl::CacheImpl(Cache* c, const std::string& name,
 
 void CacheImpl::initServices() {
   m_tcrConnectionManager = new TcrConnectionManager(this);
-  if (!m_initDone && m_attributes != nullptr && m_attributes->getEndpoints()) {
+  if (!m_initDone && m_attributes != nullptr &&
+      !m_attributes->getEndpoints().empty()) {
     if (getCache()->getPoolManager().getAll().size() > 0 && getCacheMode()) {
       LOGWARN(
           "At least one pool has been created so ignoring cache level "
@@ -131,24 +132,24 @@ void CacheImpl::revive() { m_tcrConnectionManager->revive(); }
 CacheImpl::RegionKind CacheImpl::getRegionKind(
     const std::shared_ptr<RegionAttributes>& rattrs) const {
   RegionKind regionKind = CPP_REGION;
-  const char* endpoints = nullptr;
+  std::string endpoints;
 
   if (m_attributes != nullptr &&
-      (endpoints = m_attributes->getEndpoints()) != nullptr &&
+      !(endpoints = m_attributes->getEndpoints()).empty() &&
       (m_attributes->getRedundancyLevel() > 0 ||
        m_tcrConnectionManager->isDurable())) {
     regionKind = THINCLIENT_HA_REGION;
-  } else if (endpoints != nullptr && rattrs->getEndpoints() == nullptr) {
+  } else if (!endpoints.empty() && rattrs->getEndpoints().empty()) {
     rattrs->setEndpoints(endpoints);
   }
 
-  if ((endpoints = rattrs->getEndpoints()) != nullptr) {
-    if (strcmp(endpoints, "none") == 0) {
+  if (!(endpoints = rattrs->getEndpoints()).empty()) {
+    if ("none" == endpoints) {
       regionKind = CPP_REGION;
     } else if (regionKind != THINCLIENT_HA_REGION) {
       regionKind = THINCLIENT_REGION;
     }
-  } else if (rattrs->getPoolName()) {
+  } else if (!rattrs->getPoolName().empty()) {
     auto pPtr = getCache()->getPoolManager().find(rattrs->getPoolName());
     if ((pPtr != nullptr && (pPtr->getSubscriptionRedundancy() > 0 ||
                              pPtr->getSubscriptionEnabled())) ||
@@ -329,29 +330,27 @@ void CacheImpl::close(bool keepalive) {
 bool CacheImpl::isCacheDestroyPending() const { return m_destroyPending; }
 
 void CacheImpl::validateRegionAttributes(
-    const char* name, const std::shared_ptr<RegionAttributes>& attrs) const {
-  RegionKind kind = getRegionKind(attrs);
-  std::string buffer = "Cache::createRegion: \"";
-  buffer += name;
-  buffer += "\" ";
-
+    const std::string& name,
+    const std::shared_ptr<RegionAttributes>& attrs) const {
+  auto&& kind = getRegionKind(attrs);
   if (attrs->m_clientNotificationEnabled && kind == CPP_REGION) {
-    buffer +=
-        "Client notification can be enabled only for native client region";
-    throw UnsupportedOperationException(buffer.c_str());
+    throw UnsupportedOperationException(
+        "Cache::createRegion: \"" + name +
+        "\" Client notification can be enabled only for native client region");
   }
 }
 
 // We'll pass a nullptr loader function pointer and let the region.get method to
 // do a load using a real C++ loader, instead of passing a member function
 // pointer here
-void CacheImpl::createRegion(const char* name,
-                             const std::shared_ptr<RegionAttributes>& aRegionAttributes,
-                             std::shared_ptr<Region>& regionPtr) {
+void CacheImpl::createRegion(
+    std::string name,
+    const std::shared_ptr<RegionAttributes>& aRegionAttributes,
+    std::shared_ptr<Region>& regionPtr) {
   {
     ACE_Guard<ACE_Thread_Mutex> _guard(m_initDoneLock);
     if (!m_initDone) {
-      if (!(aRegionAttributes->getPoolName())) {
+      if (aRegionAttributes->getPoolName().empty()) {
         m_tcrConnectionManager->init();
         m_remoteQueryServicePtr = std::make_shared<RemoteQueryService>(this);
         auto& prop = m_distributedSystem->getSystemProperties();
@@ -370,9 +369,8 @@ void CacheImpl::createRegion(const char* name,
     throw IllegalArgumentException(
         "Cache::createRegion: RegionAttributes is null");
   }
-  std::string namestr(name);
 
-  if (namestr.find('/') != std::string::npos) {
+  if (name.find('/') != std::string::npos) {
     throw IllegalArgumentException(
         "Malformed name string, contains region path seperator '/'");
   }
@@ -385,49 +383,32 @@ void CacheImpl::createRegion(const char* name,
     // bound
     MapOfRegionGuard guard1(m_regions->mutex());
     std::shared_ptr<Region> tmp;
-    if (0 == m_regions->find(namestr, tmp)) {
-      char buffer[256];
-      ACE_OS::snprintf(
-          buffer, 256,
-          "Cache::createRegion: \"%s\" region exists in local cache",
-          namestr.c_str());
-      throw RegionExistsException(buffer);
+    if (0 == m_regions->find(name, tmp)) {
+      throw RegionExistsException("Cache::createRegion: \"" + name +
+                                  "\" region exists in local cache");
     }
 
     auto csptr = std::make_shared<CacheStatistics>();
     try {
-      rpImpl = createRegion_internal(namestr.c_str(), nullptr,
-                                     aRegionAttributes, csptr, false);
+      rpImpl = createRegion_internal(name.c_str(), nullptr, aRegionAttributes,
+                                     csptr, false);
     } catch (const AuthenticationFailedException&) {
       throw;
     } catch (const AuthenticationRequiredException&) {
       throw;
     } catch (const Exception&) {
-      //      LOGERROR( "Cache::createRegion: region creation failed, caught
-      //      exception: %s", ex.what() );
-      //      ex.printStackTrace();
       throw;
     } catch (std::exception& ex) {
-      char buffer[512];
-      ACE_OS::snprintf(buffer, 512,
-                       "Cache::createRegion: Failed to create Region \"%s\" "
-                       "due to unknown exception: %s",
-                       namestr.c_str(), ex.what());
-      throw UnknownException(buffer);
+      throw UnknownException("Cache::createRegion: Failed to create Region \"" +
+                             name +
+                             "\" due to unknown exception: " + ex.what());
     } catch (...) {
-      char buffer[256];
-      ACE_OS::snprintf(buffer, 256,
-                       "Cache::createRegion: Failed to create Region \"%s\" "
-                       "due to unknown exception.",
-                       namestr.c_str());
-      throw UnknownException(buffer);
+      throw UnknownException("Cache::createRegion: Failed to create Region \"" +
+                             name + "\" due to unknown exception.");
     }
     if (rpImpl == nullptr) {
-      char buffer[256];
-      ACE_OS::snprintf(buffer, 256,
-                       "Cache::createRegion: Failed to create Region \"%s\"",
-                       namestr.c_str());
-      throw RegionCreationFailedException(buffer);
+      throw RegionCreationFailedException(
+          "Cache::createRegion: Failed to create Region \"" + name + "\"");
     }
     regionPtr = rpImpl;
     rpImpl->addDisMessToQueue();
@@ -451,22 +432,21 @@ void CacheImpl::createRegion(const char* name,
     // metadata for single hop.
     auto& props = m_distributedSystem->getSystemProperties();
     if (!props.isGridClient()) {
-      const char* poolName = aRegionAttributes->getPoolName();
-      if (poolName != nullptr) {
-       auto pool = getCache()->getPoolManager().find(poolName);
-       if (pool != nullptr && !pool->isDestroyed() &&
-           pool->getPRSingleHopEnabled()) {
-         ThinClientPoolDM* poolDM = dynamic_cast<ThinClientPoolDM*>(pool.get());
-         if ((poolDM != nullptr) &&
-             (poolDM->getClientMetaDataService() != nullptr)) {
-           LOGFINE(
-               "enqueued region %s for initial metadata refresh for "
-               "singlehop ",
-               name);
-           poolDM->getClientMetaDataService()->enqueueForMetadataRefresh(
-               regionPtr->getFullPath(), 0);
-         }
-       }
+      const auto& poolName = aRegionAttributes->getPoolName();
+      if (!poolName.empty()) {
+        auto pool = getCache()->getPoolManager().find(poolName);
+        if (pool != nullptr && !pool->isDestroyed() &&
+            pool->getPRSingleHopEnabled()) {
+          ThinClientPoolDM* poolDM =
+              dynamic_cast<ThinClientPoolDM*>(pool.get());
+          if ((poolDM != nullptr) &&
+              (poolDM->getClientMetaDataService() != nullptr)) {
+            LOGFINE("enqueued region " + name +
+                    " for initial metadata refresh for singlehop ");
+            poolDM->getClientMetaDataService()->enqueueForMetadataRefresh(
+                regionPtr->getFullPath(), 0);
+          }
+        }
       }
     }
   }
@@ -490,32 +470,28 @@ void CacheImpl::createRegion(const char* name,
  * @throws IllegalArgumentException if path is null, the empty string, or "/"
  */
 
-void CacheImpl::getRegion(const char* path, std::shared_ptr<Region>& rptr) {
+void CacheImpl::getRegion(const std::string& path,
+                          std::shared_ptr<Region>& rptr) {
   TryReadGuard guardCacheDestroy(m_destroyCacheMutex, m_destroyPending);
+  rptr = nullptr;
+
   if (m_destroyPending) {
-    rptr = nullptr;
     return;
   }
 
   MapOfRegionGuard guard(m_regions->mutex());
-  std::string pathstr;
-  if (path != nullptr) {
-    pathstr = path;
-  }
-  rptr = nullptr;
-  std::string slash("/");
-  if ((path == (void*)nullptr) || (pathstr == slash) ||
-      (pathstr.length() < 1)) {
-    LOGERROR("Cache::getRegion: path [%s] is not valid.", pathstr.c_str());
-    throw IllegalArgumentException("Cache::getRegion: path is null or a /");
+  static const std::string slash("/");
+  if (path == slash || path.length() < 1) {
+    LOGERROR("Cache::getRegion: path [" + path + "] is not valid.");
+    throw IllegalArgumentException("Cache::getRegion: path is empty or a /");
   }
-  std::string fullname = pathstr;
+  auto fullname = path;
   if (fullname.substr(0, 1) == slash) {
-    fullname = pathstr.substr(1);
+    fullname = path.substr(1);
   }
   // find second separator
   uint32_t idx = static_cast<uint32_t>(fullname.find('/'));
-  std::string stepname = fullname.substr(0, idx);
+  auto stepname = fullname.substr(0, idx);
   std::shared_ptr<Region> region;
   if (0 == m_regions->find(stepname, region)) {
     if (stepname == fullname) {
@@ -523,7 +499,7 @@ void CacheImpl::getRegion(const char* path, std::shared_ptr<Region>& rptr) {
       rptr = region;
       return;
     }
-    std::string remainder = fullname.substr(stepname.length() + 1);
+    auto remainder = fullname.substr(stepname.length() + 1);
     if (region != nullptr) {
       rptr = region->getSubregion(remainder.c_str());
     } else {
@@ -545,10 +521,10 @@ std::shared_ptr<RegionInternal> CacheImpl::createRegion_internal(
 
   std::shared_ptr<RegionInternal> rptr = nullptr;
   RegionKind regionKind = getRegionKind(attrs);
-  const char* poolName = attrs->getPoolName();
-  const char* regionEndpoints = attrs->getEndpoints();
-  const char* cacheEndpoints =
-      m_attributes == nullptr ? nullptr : m_attributes->getEndpoints();
+  const auto& poolName = attrs->getPoolName();
+  const auto& regionEndpoints = attrs->getEndpoints();
+  const std::string cacheEndpoints =
+      m_attributes ? m_attributes->getEndpoints() : "";
 
   /*if(m_defaultPool != nullptr && (poolName == nullptr || strlen(poolName) ==
   0))
@@ -556,15 +532,15 @@ std::shared_ptr<RegionInternal> CacheImpl::createRegion_internal(
     attrs->setPoolName(m_defaultPool->getName());
   }*/
 
-  if (poolName != nullptr) {
-   auto pool = getCache()->getPoolManager().find(poolName);
+  if (!poolName.empty()) {
+    auto pool = getCache()->getPoolManager().find(poolName);
     if (pool != nullptr && !pool->isDestroyed()) {
       bool isMultiUserSecureMode = pool->getMultiuserAuthentication();
       if (isMultiUserSecureMode && (attrs->getCachingEnabled())) {
         LOGERROR(
             "Pool [%s] is in multiuser authentication mode so region local "
             "caching is not supported.",
-            poolName);
+            poolName.c_str());
         throw IllegalStateException(
             "Pool is in multiuser authentication so region local caching is "
             "not supported.");
@@ -572,9 +548,8 @@ std::shared_ptr<RegionInternal> CacheImpl::createRegion_internal(
     }
   }
 
-  if (poolName && strlen(poolName) &&
-      ((regionEndpoints && strlen(regionEndpoints)) ||
-       (cacheEndpoints && strlen(cacheEndpoints)))) {
+  if (!poolName.empty() &&
+      (!regionEndpoints.empty() || !cacheEndpoints.empty())) {
     LOGERROR(
         "Cache or region endpoints cannot be specified when pool name is "
         "specified for region %s",
@@ -585,27 +560,27 @@ std::shared_ptr<RegionInternal> CacheImpl::createRegion_internal(
   }
 
   if (regionKind == THINCLIENT_REGION) {
-    LOGINFO("Creating region %s with region endpoints %s", name.c_str(),
-            attrs->getEndpoints());
+    LOGINFO("Creating region " + name + " with region endpoints " +
+            attrs->getEndpoints().c_str());
     auto tmp = std::make_shared<ThinClientRegion>(name, this, rootRegion, attrs,
                                                   csptr, shared);
     tmp->initTCR();
     rptr = tmp;
   } else if (regionKind == THINCLIENT_HA_REGION) {
-    LOGINFO("Creating region %s with subscriptions enabled", name.c_str());
+    LOGINFO("Creating region " + name + " with subscriptions enabled");
     auto tmp = std::make_shared<ThinClientHARegion>(name, this, rootRegion,
                                                     attrs, csptr, shared);
     tmp->initTCR();
     rptr = tmp;
   } else if (regionKind == THINCLIENT_POOL_REGION) {
-    LOGINFO("Creating region %s attached to pool %s", name.c_str(),
+    LOGINFO("Creating region " + name + " attached to pool " +
             attrs->getPoolName());
     auto tmp = std::make_shared<ThinClientPoolRegion>(name, this, rootRegion,
                                                       attrs, csptr, shared);
     tmp->initTCR();
     rptr = tmp;
   } else {
-    LOGINFO("Creating local region %s", name.c_str());
+    LOGINFO("Creating local region " + name);
     rptr = std::make_shared<LocalRegion>(name, this, rootRegion, attrs, csptr,
                                          shared);
   }
@@ -655,15 +630,15 @@ void CacheImpl::readyForEvents() {
   if (pools.empty()) throw IllegalStateException("No pools found.");
   for (const auto& itr : pools) {
     const auto& currPool = itr.second;
-    LOGDEBUG("Sending readyForEvents( ) with pool %s", currPool->getName());
+    LOGDEBUG("Sending readyForEvents( ) with pool " + currPool->getName());
     try {
       if (const auto& poolHADM =
               std::dynamic_pointer_cast<ThinClientPoolHADM>(currPool)) {
         poolHADM->readyForEvents();
       }
     } catch (Exception& ex) {
-      LOGWARN("readyForEvents( ) failed for pool %s with exception: %s",
-              currPool->getName(), ex.what());
+      LOGWARN("readyForEvents( ) failed for pool " + currPool->getName() +
+              " with exception: " + ex.getMessage());
     }
   }
 }
diff --git a/cppcache/src/CacheImpl.hpp b/cppcache/src/CacheImpl.hpp
index 97eb8815..38e88b52 100644
--- a/cppcache/src/CacheImpl.hpp
+++ b/cppcache/src/CacheImpl.hpp
@@ -169,11 +169,11 @@ class CPPCACHE_EXPORT CacheImpl : private NonCopyable, private NonAssignable {
    * @throws NotConnectedException if the cache is not connected
    * @throws UnknownException otherwise
    */
-  void createRegion(const char* name,
+  void createRegion(std::string name,
                     const std::shared_ptr<RegionAttributes>& aRegionAttributes,
                     std::shared_ptr<Region>& regionPtr);
 
-  void getRegion(const char* path, std::shared_ptr<Region>& rptr);
+  void getRegion(const std::string& path, std::shared_ptr<Region>& rptr);
 
   /**
    * Returns a set of root regions in the cache. Does not cause any
@@ -310,8 +310,9 @@ class CPPCACHE_EXPORT CacheImpl : private NonCopyable, private NonAssignable {
 
   void sendNotificationCloseMsgs();
 
-  void validateRegionAttributes(const char* name,
-                                const std::shared_ptr<RegionAttributes>& attrs) const;
+  void validateRegionAttributes(
+      const std::string& name,
+      const std::shared_ptr<RegionAttributes>& attrs) const;
 
   inline void getSubRegions(MapOfRegionWithLock& srm) {
     MapOfRegionGuard guard(m_regions->mutex());
diff --git a/cppcache/src/CacheTransactionManagerImpl.cpp b/cppcache/src/CacheTransactionManagerImpl.cpp
index ff201b42..956065e2 100644
--- a/cppcache/src/CacheTransactionManagerImpl.cpp
+++ b/cppcache/src/CacheTransactionManagerImpl.cpp
@@ -14,12 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * CacheTransactionManagerImpl.cpp
- *
- *  Created on: 04-Feb-2011
- *      Author: ankurs
- */
 
 #include "CacheTransactionManagerImpl.hpp"
 #include <geode/TransactionId.hpp>
@@ -34,6 +28,7 @@
 #include "CacheImpl.hpp"
 #include "TssConnectionWrapper.hpp"
 #include "TXCleaner.hpp"
+#include "util/exception.hpp"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/CacheXmlParser.cpp b/cppcache/src/CacheXmlParser.cpp
index a9627630..859ab60e 100644
--- a/cppcache/src/CacheXmlParser.cpp
+++ b/cppcache/src/CacheXmlParser.cpp
@@ -32,21 +32,19 @@
 #include <dlfcn.h>
 #endif
 
-using namespace apache::geode::client;
-
 namespace apache {
 namespace geode {
 namespace client {
+
 namespace impl {
-void* getFactoryFunc(const char* lib, const char* funcName);
+void* getFactoryFunc(const std::string& lib, const std::string& funcName);
 }  // namespace impl
-}  // namespace client
-}  // namespace geode
-}  // namespace apache
 
-using namespace apache::geode::client::impl;
 
 namespace {
+
+using namespace apache::geode::client::impl;
+
 std::vector<std::pair<std::string, int>> parseEndPoints(
     const std::string& str) {
   std::vector<std::pair<std::string, int>> endPoints;
@@ -1711,3 +1709,7 @@ CacheXmlParser::~CacheXmlParser() { GF_SAFE_DELETE(m_cacheCreation); }
 void CacheXmlParser::setError(const std::string& err) { m_error = err; }
 
 const std::string& CacheXmlParser::getError() const { return m_error; }
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/CacheableBuiltins.cpp b/cppcache/src/CacheableBuiltins.cpp
index 704a4b04..256a8568 100644
--- a/cppcache/src/CacheableBuiltins.cpp
+++ b/cppcache/src/CacheableBuiltins.cpp
@@ -24,26 +24,6 @@ namespace apache {
 namespace geode {
 namespace client {
 
-int gf_sprintf(char* buffer, const char* fmt, ...) {
-  va_list args;
-  int result;
-
-  va_start(args, fmt);
-  result = ACE_OS::vsprintf(buffer, fmt, args);
-  va_end(args);
-  return result;
-}
-
-int gf_snprintf(char* buffer, int32_t maxLength, const char* fmt, ...) {
-  va_list args;
-  int result;
-
-  va_start(args, fmt);
-  result = ACE_OS::vsnprintf(buffer, maxLength, fmt, args);
-  va_end(args);
-  return result;
-}
-
 #define _GF_CACHEABLE_KEY_DEF_(k, s) \
   const char tName_##k[] = #k;       \
   const char tStr_##k[] = s;
diff --git a/cppcache/src/CacheableDate.cpp b/cppcache/src/CacheableDate.cpp
index f6098b37..f617a31a 100644
--- a/cppcache/src/CacheableDate.cpp
+++ b/cppcache/src/CacheableDate.cpp
@@ -85,7 +85,7 @@ CacheableDate::CacheableDate(const CacheableDate::duration& value) {
 }
 
 CacheableDate::~CacheableDate() {}
-std::shared_ptr<CacheableString> CacheableDate::toString() const {
+std::string CacheableDate::toString() const {
   char buffer[25];
   struct tm date = {0};
   time_t sec = m_timevalue / 1000;
@@ -93,16 +93,7 @@ std::shared_ptr<CacheableString> CacheableDate::toString() const {
   ACE_OS::snprintf(buffer, 24, "%d/%d/%d %d:%d:%d", date.tm_mon + 1,
                    date.tm_mday, date.tm_year + 1900, date.tm_hour, date.tm_min,
                    date.tm_sec);
-  return CacheableString::create(buffer);
-}
-
-int32_t CacheableDate::logString(char* buffer, int32_t maxLength) const {
-  struct tm date = {0};
-  time_t sec = m_timevalue / 1000;
-  ACE_OS::localtime_r(&sec, &date);
-  return ACE_OS::snprintf(buffer, maxLength,
-                          "CacheableDate (mm/dd/yyyy) ( %d/%d/%d )",
-                          date.tm_mon + 1, date.tm_mday, date.tm_year + 1900);
+  return std::string(buffer);
 }
 
 }  // namespace client
diff --git a/cppcache/src/CacheableEnum.cpp b/cppcache/src/CacheableEnum.cpp
index 843d7543..79785fae 100644
--- a/cppcache/src/CacheableEnum.cpp
+++ b/cppcache/src/CacheableEnum.cpp
@@ -14,12 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include <geode/CacheableEnum.hpp>
-#include <Utils.hpp>
-#include <PdxHelper.hpp>
-#include <GeodeTypeIdsImpl.hpp>
-#include <EnumInfo.hpp>
+
+#include "Utils.hpp"
+#include "PdxHelper.hpp"
+#include "GeodeTypeIdsImpl.hpp"
+#include "EnumInfo.hpp"
 #include "CacheRegionHelper.hpp"
+#include "util/functional.hpp"
 
 namespace apache {
 namespace geode {
@@ -33,16 +36,16 @@ CacheableEnum::CacheableEnum()
       m_ordinal(-1),
       m_hashcode(0) {}
 
-CacheableEnum::CacheableEnum(const char* enumClassName, const char* enumName,
+CacheableEnum::CacheableEnum(std::string enumClassName, std::string enumName,
                              int32_t ordinal)
-    : m_ordinal(ordinal), m_hashcode(0) {
-  m_enumClassName = CacheableString::create(enumClassName);
-  m_enumName = CacheableString::create(enumName);
-}
+    : m_enumClassName(std::move(enumClassName)),
+      m_enumName(std::move(enumName)),
+      m_ordinal(ordinal),
+      m_hashcode(0) {}
 
 void CacheableEnum::toData(apache::geode::client::DataOutput& output) const {
   int enumVal = PdxHelper::getEnumValue(
-      m_enumClassName->asChar(), m_enumName->asChar(), m_ordinal,
+      m_enumClassName.c_str(), m_enumName.c_str(), m_ordinal,
       CacheRegionHelper::getCacheImpl(output.getCache())->getPdxTypeRegistry());
   output.write(static_cast<int8_t>(GeodeTypeIds::CacheableEnum));
   output.write(int8_t(enumVal >> 24));
@@ -57,48 +60,35 @@ void CacheableEnum::fromData(apache::geode::client::DataInput& input) {
       enumId,
       CacheRegionHelper::getCacheImpl(input.getCache())->getPdxTypeRegistry());
 
-  m_enumClassName = enumVal->getEnumClassName();
-  m_enumName = enumVal->getEnumName();
+  m_enumClassName = enumVal->getEnumClassName()->toString();
+  m_enumName = enumVal->getEnumName()->toString();
   m_ordinal = enumVal->getEnumOrdinal();
+
+  calculateHashcode();
 }
 
-int32_t CacheableEnum::hashcode() const {
-  int localHash = 1;
-  if (m_hashcode == 0) {
-    int prime = 31;
-    localHash =
-        prime * localHash +
-        ((m_enumClassName != nullptr ? m_enumClassName->hashcode() : 0));
-    localHash = prime * localHash +
-                ((m_enumName != nullptr ? m_enumName->hashcode() : 0));
-    m_hashcode = localHash;
-  }
-  return m_hashcode;
+void CacheableEnum::calculateHashcode() {
+  m_hashcode = 1;
+  const int32_t prime = 31;
+  m_hashcode = prime * m_hashcode + geode_hash<std::string>{}(m_enumClassName);
+  m_hashcode = prime * m_hashcode + geode_hash<std::string>{}(m_enumName);
 }
 
 bool CacheableEnum::operator==(const CacheableKey& other) const {
   if (other.typeId() != typeId()) {
     return false;
   }
-  CacheableKey& temp = const_cast<CacheableKey&>(other);
-  CacheableEnum* otherEnum = static_cast<CacheableEnum*>(&temp);
+  auto&& otherEnum = dynamic_cast<const CacheableEnum*>(&other);
   if (otherEnum == nullptr) {
     return false;
   }
   if (m_ordinal != otherEnum->m_ordinal) {
     return false;
   }
-  if (m_enumClassName == nullptr) {
-    return (otherEnum->m_enumClassName == nullptr);
-  }
-  if (m_enumName == nullptr) {
-    return (otherEnum->m_enumName == nullptr);
-  }
-  if (strcmp(m_enumClassName->asChar(), otherEnum->m_enumClassName->asChar()) !=
-      0) {
+  if (m_enumClassName != otherEnum->m_enumClassName) {
     return false;
   }
-  if (strcmp(m_enumName->asChar(), otherEnum->m_enumName->asChar()) != 0) {
+  if (m_enumName != otherEnum->m_enumName) {
     return false;
   }
   return true;
diff --git a/cppcache/src/CacheableString.cpp b/cppcache/src/CacheableString.cpp
index b609df8f..bc973330 100644
--- a/cppcache/src/CacheableString.cpp
+++ b/cppcache/src/CacheableString.cpp
@@ -14,21 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#include <codecvt>
+#include <locale>
+#include <cwchar>
+#include <cstdlib>
+
+#include <ace/ACE.h>
+#include <ace/OS.h>
+
 #include <geode/CacheableString.hpp>
 #include <geode/DataOutput.hpp>
 #include <geode/DataInput.hpp>
 #include <geode/ExceptionTypes.hpp>
 #include <geode/GeodeTypeIds.hpp>
-#include <Utils.hpp>
 
-#include <cwchar>
-#include <cstdlib>
-#include <ace/ACE.h>
-#include <ace/OS.h>
 #include "DataOutputInternal.hpp"
 #include "SerializationRegistry.hpp"
+#include "Utils.hpp"
 
-using namespace apache::geode::client;
+namespace apache {
+namespace geode {
+namespace client {
 
 void CacheableString::toData(DataOutput& output) const {
   if (m_type == GF_STRING) {
@@ -298,32 +305,6 @@ CacheableString::~CacheableString() {
   }
 }
 
-int32_t CacheableString::logString(char* buffer, int32_t maxLength) const {
-  if (isCString()) {
-    return ACE_OS::snprintf(
-        buffer, maxLength, "%s( %s )", className(),
-        (m_str != nullptr ? reinterpret_cast<const char*>(m_str) : "null"));
-  } else {
-    GF_DEV_ASSERT(isWideString());
-    int32_t numChars = ACE_OS::snprintf(buffer, maxLength, "%s( ", className());
-    if (numChars >= (int)maxLength || numChars <= 0) {
-      return numChars;
-    }
-    const char* bufStart = buffer;
-    buffer += numChars;
-    maxLength -= numChars;
-    numChars = Utils::logWideString(buffer, maxLength,
-                                    reinterpret_cast<const wchar_t*>(m_str));
-    if (numChars >= (int)maxLength || numChars <= 0) {
-      return numChars + static_cast<int32_t>(buffer - bufStart);
-    }
-    buffer += numChars;
-    maxLength -= numChars;
-    numChars = ACE_OS::snprintf(buffer, maxLength, " )");
-    return numChars + static_cast<int32_t>(buffer - bufStart);
-  }
-}
-
 uint32_t CacheableString::objectSize() const {
   uint32_t size = sizeof(CacheableString);
   if (isCString()) {
@@ -334,3 +315,16 @@ uint32_t CacheableString::objectSize() const {
   }
   return size;
 }
+
+std::string CacheableString::toString() const {
+  if (this->isCString()) {
+    return this->asChar();
+  } else {
+    return std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t>{}
+        .to_bytes(this->asWChar());
+  }
+}
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/CacheableToken.cpp b/cppcache/src/CacheableToken.cpp
index e75c1016..5839125f 100644
--- a/cppcache/src/CacheableToken.cpp
+++ b/cppcache/src/CacheableToken.cpp
@@ -69,13 +69,14 @@ CacheableToken::~CacheableToken() {}
  * Display this object as 'string', which depend on the implementation in
  * the subclasses
  * The default implementation renders the classname.
- */ std::shared_ptr<CacheableString> CacheableToken::toString() const {
+ */
+std::string CacheableToken::toString() const {
   static const char* ctstrings[] = {
       "CacheableToken::NOT_USED", "CacheableToken::INVALID",
       "CacheableToken::DESTROYED", "CacheableToken::OVERFLOWED",
       "CacheableToken::TOMBSTONE"};
 
-  return CacheableString::create(ctstrings[m_value]);
+  return ctstrings[m_value];
 }
 
 uint32_t CacheableToken::objectSize() const { return sizeof(m_value); }
diff --git a/cppcache/src/CacheableToken.hpp b/cppcache/src/CacheableToken.hpp
index 44a27a9c..b0f6d9ec 100644
--- a/cppcache/src/CacheableToken.hpp
+++ b/cppcache/src/CacheableToken.hpp
@@ -56,12 +56,12 @@ class CPPCACHE_EXPORT CacheableToken : public Cacheable {
   /**
    *@brief serialize this object
    **/
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
   /**
    *@brief deserialize this object
    **/
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
   /**
    * @brief creation function for strings.
@@ -73,14 +73,14 @@ class CPPCACHE_EXPORT CacheableToken : public Cacheable {
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int32_t classId() const;
+  virtual int32_t classId() const override;
 
   /**
    *@brief return the typeId byte of the instance being serialized.
    * This is used by deserialization to determine what instance
    * type to create and deserialize into.
    */
-  virtual int8_t typeId() const;
+  virtual int8_t typeId() const override;
 
   virtual ~CacheableToken();
 
@@ -99,7 +99,9 @@ class CPPCACHE_EXPORT CacheableToken : public Cacheable {
            (overflowedToken == ptr) || (tombstoneToken == ptr);
   }
 
-  static bool isInvalid(const std::shared_ptr<Cacheable>& ptr) { return invalidToken == ptr; }
+  static bool isInvalid(const std::shared_ptr<Cacheable>& ptr) {
+    return invalidToken == ptr;
+  }
 
   static bool isDestroyed(const std::shared_ptr<Cacheable>& ptr) {
     return destroyedToken == ptr;
@@ -118,9 +120,9 @@ class CPPCACHE_EXPORT CacheableToken : public Cacheable {
    * the subclasses. The default implementation renders the classname.
    * This returns constant strings of the form "CacheableToken::INVALID".
    */
-  virtual std::shared_ptr<CacheableString> toString() const;
+  virtual std::string toString() const override;
 
-  virtual uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
 
  protected:
   CacheableToken(TokenType value);
diff --git a/cppcache/src/ClientMetadata.cpp b/cppcache/src/ClientMetadata.cpp
index c3dd4f15..2173cc6c 100644
--- a/cppcache/src/ClientMetadata.cpp
+++ b/cppcache/src/ClientMetadata.cpp
@@ -170,7 +170,7 @@ void ClientMetadata::updateBucketServerLocations(
   // WriteGuard guard( m_readWriteLock );
   checkBucketId(bucketId);
 
-  std::string serverGroup = m_tcrdm->getServerGroup();
+  auto&& serverGroup = m_tcrdm->getServerGroup();
 
   // This is for pruning according to server groups, only applicable when client
   // is configured with
@@ -181,40 +181,40 @@ void ClientMetadata::updateBucketServerLocations(
     for (BucketServerLocationsType::iterator iter =
              bucketServerLocations.begin();
          iter != bucketServerLocations.end(); ++iter) {
-     auto groups = (*iter)->getServerGroups();
-     if ((groups != nullptr) && (groups->length() > 0)) {
-       bool added = false;
-       for (int i = 0; i < groups->length(); i++) {
-         auto cs = (*groups)[i];
-         if (cs->length() > 0) {
-           std::string str = cs->toString();
-           if ((ACE_OS::strcmp(str.c_str(), serverGroup.c_str()) == 0)) {
-             added = true;
-             if ((*iter)->isPrimary()) {
-               primaries.push_back(*iter);
-               break;
-             } else {
-               secondaries.push_back(*iter);
-               break;
-             }
-           }
-         } else {
-           added = true;
-           if ((*iter)->isPrimary()) {
-             primaries.push_back(*iter);
-           } else {
-             secondaries.push_back(*iter);
-           }
-         }
-       }
-       if (!added) {
-         (*iter)->setServername(nullptr);
-         if ((*iter)->isPrimary()) {
-           primaries.push_back(*iter);
-         } else {
-           secondaries.push_back(*iter);
-         }
-       }
+      auto groups = (*iter)->getServerGroups();
+      if ((groups != nullptr) && (groups->length() > 0)) {
+        bool added = false;
+        for (int i = 0; i < groups->length(); i++) {
+          auto cs = (*groups)[i];
+          if (cs->length() > 0) {
+            auto&& str = cs->toString();
+            if (str == serverGroup) {
+              added = true;
+              if ((*iter)->isPrimary()) {
+                primaries.push_back(*iter);
+                break;
+              } else {
+                secondaries.push_back(*iter);
+                break;
+              }
+            }
+          } else {
+            added = true;
+            if ((*iter)->isPrimary()) {
+              primaries.push_back(*iter);
+            } else {
+              secondaries.push_back(*iter);
+            }
+          }
+        }
+        if (!added) {
+          (*iter)->setServername(nullptr);
+          if ((*iter)->isPrimary()) {
+            primaries.push_back(*iter);
+          } else {
+            secondaries.push_back(*iter);
+          }
+        }
       }
     }
 
@@ -336,18 +336,18 @@ void ClientMetadata::populateDummyServers(int bucketId,
   m_bucketServerLocationsList[bucketId] = locations;
 }
 
-int ClientMetadata::assignFixedBucketId(const char* partitionName,
-                                        std::shared_ptr<CacheableKey> resolvekey) {
+int ClientMetadata::assignFixedBucketId(
+    const char* partitionName, std::shared_ptr<CacheableKey> resolvekey) {
   LOGDEBUG(
       "FPR assignFixedBucketId partititonname = %s , m_fpaMap.size() = %d ",
       partitionName, m_fpaMap.size());
   FixedMapType::iterator iter = m_fpaMap.find(partitionName);
   if (iter != m_fpaMap.end()) {
-   auto attList =iter->second;
-   int32_t hc = resolvekey->hashcode();
-   int bucketId = std::abs(hc % (attList.at(0)));
-   int partitionBucketID = bucketId + attList.at(1);
-   return partitionBucketID;
+    auto attList = iter->second;
+    int32_t hc = resolvekey->hashcode();
+    int bucketId = std::abs(hc % (attList.at(0)));
+    int partitionBucketID = bucketId + attList.at(1);
+    return partitionBucketID;
   } else {
     return -1;
   }
@@ -371,13 +371,13 @@ ClientMetadata::advisePrimaryServerLocation(int bucketId) {
   }
   return nullptr;
 }
- std::shared_ptr<BucketServerLocation> ClientMetadata::adviseRandomServerLocation() {
+std::shared_ptr<BucketServerLocation>
+ClientMetadata::adviseRandomServerLocation() {
   if (m_bucketServerLocationsList.size() > 0) {
     RandGen randGen;
     size_t random = randGen(m_bucketServerLocationsList.size());
     checkBucketId(random);
-    auto locations =
-        m_bucketServerLocationsList[random];
+    auto locations = m_bucketServerLocationsList[random];
     if (locations.size() == 0) return nullptr;
     return locations.at(0);
   }
diff --git a/cppcache/src/ClientMetadataService.cpp b/cppcache/src/ClientMetadataService.cpp
index e2a4f330..32991227 100644
--- a/cppcache/src/ClientMetadataService.cpp
+++ b/cppcache/src/ClientMetadataService.cpp
@@ -61,7 +61,7 @@ ClientMetadataService::ClientMetadataService(Pool* pool)
 
 int ClientMetadataService::svc() {
   DistributedSystemImpl::setThreadName(NC_CMDSvcThread);
-  LOGINFO("ClientMetadataService started for pool %s", m_pool->getName());
+  LOGINFO("ClientMetadataService started for pool " + m_pool->getName());
   while (m_run) {
     m_regionQueueSema.acquire();
     ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
@@ -101,7 +101,7 @@ int ClientMetadataService::svc() {
     }
     // while(m_regionQueueSema.tryacquire( ) != -1); // release all
   }
-  LOGINFO("ClientMetadataService stopped for pool %s", m_pool->getName());
+  LOGINFO("ClientMetadataService stopped for pool " + m_pool->getName());
   return 0;
 }
 
@@ -196,34 +196,34 @@ std::shared_ptr<ClientMetadata> ClientMetadataService::SendClientPRMetadata(
   // send this message to server and get metadata from server.
   LOGFINE("Now sending GET_CLIENT_PR_METADATA for getting from server: %s",
           regionPath);
-std::shared_ptr<Region> region = nullptr;
-GfErrType err = tcrdm->sendSyncRequest(request, reply);
-if (err == GF_NOERR &&
-    reply.getMessageType() == TcrMessage::RESPONSE_CLIENT_PR_METADATA) {
-  tcrdm->getConnectionManager().getCacheImpl()->getRegion(regionPath, region);
-  if (region != nullptr) {
-    LocalRegion* lregion = dynamic_cast<LocalRegion*>(region.get());
-    lregion->getRegionStats()->incMetaDataRefreshCount();
-  }
-  std::vector<BucketServerLocationsType>* metadata = reply.getMetadata();
-  if (metadata == nullptr) return nullptr;
-  if (metadata->empty()) {
-    delete metadata;
-    return nullptr;
-  }
-  auto newCptr = std::make_shared<ClientMetadata>(*cptr);
-  for (std::vector<BucketServerLocationsType>::iterator iter =
-           metadata->begin();
-       iter != metadata->end(); ++iter) {
-    if (!(*iter).empty()) {
-      newCptr->updateBucketServerLocations((*iter).at(0)->getBucketId(),
-                                           (*iter));
+  std::shared_ptr<Region> region = nullptr;
+  GfErrType err = tcrdm->sendSyncRequest(request, reply);
+  if (err == GF_NOERR &&
+      reply.getMessageType() == TcrMessage::RESPONSE_CLIENT_PR_METADATA) {
+    tcrdm->getConnectionManager().getCacheImpl()->getRegion(regionPath, region);
+    if (region != nullptr) {
+      LocalRegion* lregion = dynamic_cast<LocalRegion*>(region.get());
+      lregion->getRegionStats()->incMetaDataRefreshCount();
+    }
+    std::vector<BucketServerLocationsType>* metadata = reply.getMetadata();
+    if (metadata == nullptr) return nullptr;
+    if (metadata->empty()) {
+      delete metadata;
+      return nullptr;
+    }
+    auto newCptr = std::make_shared<ClientMetadata>(*cptr);
+    for (std::vector<BucketServerLocationsType>::iterator iter =
+             metadata->begin();
+         iter != metadata->end(); ++iter) {
+      if (!(*iter).empty()) {
+        newCptr->updateBucketServerLocations((*iter).at(0)->getBucketId(),
+                                             (*iter));
+      }
     }
+    delete metadata;
+    return newCptr;
   }
-  delete metadata;
-  return newCptr;
-}
-return nullptr;
+  return nullptr;
 }
 
 void ClientMetadataService::getBucketServerLocation(
@@ -262,17 +262,12 @@ void ClientMetadataService::getBucketServerLocation(
             "The RoutingObject returned by PartitionResolver is null.");
       }
     }
-    if (const auto fpResolver =
+    if (auto&& fpResolver =
             std::dynamic_pointer_cast<FixedPartitionResolver>(resolver)) {
-      const auto partition = fpResolver->getPartitionName(event);
-      if (partition == nullptr) {
-        throw IllegalStateException(
-            "partition name returned by Partition resolver is null.");
-      } else {
-        bucketId = cptr->assignFixedBucketId(partition, resolvekey);
-        if (bucketId == -1) {
-          return;
-        }
+      auto&& partition = fpResolver->getPartitionName(event);
+      bucketId = cptr->assignFixedBucketId(partition.c_str(), resolvekey);
+      if (bucketId == -1) {
+        return;
       }
     } else {
       if (cptr->getTotalNumBuckets() > 0) {
@@ -298,7 +293,7 @@ void ClientMetadataService::removeBucketServerLocation(
   }
 }
 std::shared_ptr<ClientMetadata> ClientMetadataService::getClientMetadata(
-    const char* regionFullPath) {
+    const std::string& regionFullPath) {
   ReadGuard guard(m_regionMetadataLock);
   RegionMetadataMapType::iterator regionMetadataIter =
       m_regionMetaDataMap.find(regionFullPath);
@@ -315,7 +310,7 @@ void ClientMetadataService::populateDummyServers(
 }
 
 void ClientMetadataService::enqueueForMetadataRefresh(
-    const char* regionFullPath, int8_t serverGroupFlag) {
+    const std::string& regionFullPath, int8_t serverGroupFlag) {
   ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool);
   if (tcrdm == nullptr) {
     throw IllegalArgumentException(
@@ -378,11 +373,11 @@ ClientMetadataService::getServerToFilterMap(
 
   auto serverToFilterMap = std::make_shared<ServerToFilterMap>();
 
-  std::vector<std::shared_ptr<CacheableKey>>  keysWhichLeft;
+  std::vector<std::shared_ptr<CacheableKey>> keysWhichLeft;
   std::map<int, std::shared_ptr<BucketServerLocation>> buckets;
 
   for (const auto& key : keys) {
-    LOGDEBUG("cmds = %s", key->toString()->toString());
+    LOGDEBUG("cmds = %s", key->toString().c_str());
     const auto resolver = region->getAttributes()->getPartitionResolver();
     std::shared_ptr<CacheableKey> resolveKey;
 
@@ -397,18 +392,19 @@ ClientMetadataService::getServerToFilterMap(
 
     int bucketId =
         std::abs(resolveKey->hashcode() % clientMetadata->getTotalNumBuckets());
-  std::shared_ptr<std::vector<std::shared_ptr<CacheableKey>> > keyList = nullptr;
+    std::shared_ptr<std::vector<std::shared_ptr<CacheableKey>>> keyList =
+        nullptr;
 
     const auto& bucketsIter = buckets.find(bucketId);
     if (bucketsIter == buckets.end()) {
       int8_t version = -1;
       // auto serverLocation = std::make_shared<BucketServerLocation>();
-    std::shared_ptr<BucketServerLocation> serverLocation = nullptr;
-    clientMetadata->getServerLocation(bucketId, isPrimary, serverLocation,
-                                      version);
-    if (!(serverLocation && serverLocation->isValid())) {
-      keysWhichLeft.push_back(key);
-      continue;
+      std::shared_ptr<BucketServerLocation> serverLocation = nullptr;
+      clientMetadata->getServerLocation(bucketId, isPrimary, serverLocation,
+                                        version);
+      if (!(serverLocation && serverLocation->isValid())) {
+        keysWhichLeft.push_back(key);
+        continue;
       }
 
       buckets[bucketId] = serverLocation;
@@ -416,7 +412,8 @@ ClientMetadataService::getServerToFilterMap(
       const auto& itrRes = serverToFilterMap->find(serverLocation);
 
       if (itrRes == serverToFilterMap->end()) {
-        keyList = std::make_shared<std::vector<std::shared_ptr<CacheableKey>> >();
+        keyList =
+            std::make_shared<std::vector<std::shared_ptr<CacheableKey>>>();
         serverToFilterMap->emplace(serverLocation, keyList);
       } else {
         keyList = itrRes->second;
@@ -508,17 +505,12 @@ ClientMetadataService::groupByBucketOnClientSide(
       resolvekey = key;
     }
 
-    if (const auto fpResolver =
+    if (auto&& fpResolver =
             std::dynamic_pointer_cast<FixedPartitionResolver>(resolver)) {
-      const auto partition = fpResolver->getPartitionName(event);
-      if (partition) {
-        bucketId = metadata->assignFixedBucketId(partition, resolvekey);
-        if (bucketId == -1) {
-          this->enqueueForMetadataRefresh(region->getFullPath(), 0);
-        }
-      } else {
-        throw IllegalStateException(
-            "partition name returned by Partition resolver is null.");
+      auto&& partition = fpResolver->getPartitionName(event);
+      bucketId = metadata->assignFixedBucketId(partition.c_str(), resolvekey);
+      if (bucketId == -1) {
+        this->enqueueForMetadataRefresh(region->getFullPath(), 0);
       }
     } else {
       if (metadata->getTotalNumBuckets() > 0) {
@@ -829,19 +821,19 @@ void ClientMetadataService::markPrimaryBucketForTimeoutButLookSecondaryBucket(
   getBucketServerLocation(region, key, value, aCallbackArgument, true,
                           serverLocation, version);
 
-std::shared_ptr<ClientMetadata> cptr = nullptr;
-{
-  ReadGuard guard(m_regionMetadataLock);
-  RegionMetadataMapType::iterator cptrIter =
-      m_regionMetaDataMap.find(region->getFullPath());
+  std::shared_ptr<ClientMetadata> cptr = nullptr;
+  {
+    ReadGuard guard(m_regionMetadataLock);
+    RegionMetadataMapType::iterator cptrIter =
+        m_regionMetaDataMap.find(region->getFullPath());
 
-  if (cptrIter != m_regionMetaDataMap.end()) {
-    cptr = cptrIter->second;
-  }
+    if (cptrIter != m_regionMetaDataMap.end()) {
+      cptr = cptrIter->second;
+    }
 
-  if (cptr == nullptr) {
-    return;
-  }
+    if (cptr == nullptr) {
+      return;
+    }
   }
 
   LOGFINE("Setting in markPrimaryBucketForTimeoutButLookSecondaryBucket");
diff --git a/cppcache/src/ClientMetadataService.hpp b/cppcache/src/ClientMetadataService.hpp
index d9f05385..e714863c 100644
--- a/cppcache/src/ClientMetadataService.hpp
+++ b/cppcache/src/ClientMetadataService.hpp
@@ -123,12 +123,13 @@ class ClientMetadataService : public ACE_Task_Base,
 
   void removeBucketServerLocation(BucketServerLocation serverLocation);
 
-  std::shared_ptr<ClientMetadata> getClientMetadata(const char* regionFullPath);
+  std::shared_ptr<ClientMetadata> getClientMetadata(
+      const std::string& regionFullPath);
 
   void populateDummyServers(const char* regionName,
                             std::shared_ptr<ClientMetadata> clientmetadata);
 
-  void enqueueForMetadataRefresh(const char* regionFullPath,
+  void enqueueForMetadataRefresh(const std::string& regionFullPath,
                                  int8_t serverGroupFlag);
 
   typedef std::unordered_map<
diff --git a/cppcache/src/CqEventImpl.cpp b/cppcache/src/CqEventImpl.cpp
index fe7d6e33..76c715a7 100644
--- a/cppcache/src/CqEventImpl.cpp
+++ b/cppcache/src/CqEventImpl.cpp
@@ -100,8 +100,8 @@ std::string CqEventImpl::toString() {
   ACE_OS::snprintf(
       buffer, 1024,
       "CqEvent CqName=%s; base operation=%d; cq operation= %d;key=%s;value=%s",
-      m_cQuery->getName(), m_baseOp, m_queryOp, m_key->toString()->asChar(),
-      m_newValue->toString()->asChar());
+      m_cQuery->getName().c_str(), m_baseOp, m_queryOp,
+      m_key->toString().c_str(), m_newValue->toString().c_str());
   return buffer;
 }
 std::shared_ptr<CacheableBytes> CqEventImpl::getDeltaValue() const {
diff --git a/cppcache/src/CqQueryImpl.cpp b/cppcache/src/CqQueryImpl.cpp
index 00478672..09603661 100644
--- a/cppcache/src/CqQueryImpl.cpp
+++ b/cppcache/src/CqQueryImpl.cpp
@@ -27,6 +27,7 @@
 #include "ThinClientRegion.hpp"
 #include "util/bounds.hpp"
 #include "util/Log.hpp"
+#include "util/exception.hpp"
 
 using namespace apache::geode::client;
 
@@ -63,12 +64,12 @@ CqQueryImpl::~CqQueryImpl() {}
  */
 void CqQueryImpl::updateStats() { m_cqService->updateStats(); }
 
-const char* CqQueryImpl::getName() const { return m_cqName.c_str(); }
+const std::string& CqQueryImpl::getName() const { return m_cqName; }
 
 /**
  * sets the CqName.
  */
-void CqQueryImpl::setName(std::string& cqName) {
+void CqQueryImpl::setName(std::string cqName) {
   m_cqName = m_serverCqName = cqName;
 }
 
@@ -212,9 +213,7 @@ void CqQueryImpl::removeFromCqMap() {
 /**
  * Returns the QueryString of this CQ.
  */
-const char* CqQueryImpl::getQueryString() const {
-  return m_queryString.c_str();
-}
+const std::string& CqQueryImpl::getQueryString() const { return m_queryString; }
 
 /**
  * Return the query
@@ -225,10 +224,12 @@ const char* CqQueryImpl::getQueryString() const {
 /**
  * @see org.apache.geode.cache.query.CqQuery#getStatistics()
  */
-const std::shared_ptr<CqStatistics> CqQueryImpl::getStatistics() const { return m_stats; }
+ std::shared_ptr<CqStatistics> CqQueryImpl::getStatistics() const {
+   return m_stats;
+ }
 
-const std::shared_ptr<CqAttributes> CqQueryImpl::getCqAttributes() const {
-  return m_cqAttributes;
+ std::shared_ptr<CqAttributes> CqQueryImpl::getCqAttributes() const {
+   return m_cqAttributes;
 }
 
 /**
@@ -529,13 +530,14 @@ void CqQueryImpl::setCqState(CqState::StateType state) {
   m_cqState = state;
 }
 
-const std::shared_ptr<CqAttributesMutator> CqQueryImpl::getCqAttributesMutator() const {
+std::shared_ptr<CqAttributesMutator> CqQueryImpl::getCqAttributesMutator()
+    const {
   return m_cqAttributesMutator;
 }
 /**
  * @return Returns the cqOperation.
  */
-CqOperation::CqOperationType CqQueryImpl::getCqOperation() {
+CqOperation::CqOperationType CqQueryImpl::getCqOperation() const {
   return m_cqOperation;
 }
 
@@ -572,7 +574,7 @@ void CqQueryImpl::updateStats(CqEvent& cqEvent) {
  * Return true if the CQ is in running state
  * @return true if running, false otherwise
  */
-bool CqQueryImpl::isRunning() {
+bool CqQueryImpl::isRunning() const {
   ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
   return m_cqState == CqState::RUNNING;
 }
@@ -581,7 +583,7 @@ bool CqQueryImpl::isRunning() {
  * Return true if the CQ is in Sstopped state
  * @return true if stopped, false otherwise
  */
-bool CqQueryImpl::isStopped() {
+bool CqQueryImpl::isStopped() const {
   ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
   return m_cqState == CqState::STOPPED ||
          (m_proxyCache && m_proxyCache->isClosed());
@@ -591,7 +593,7 @@ bool CqQueryImpl::isStopped() {
  * Return true if the CQ is closed
  * @return true if closed, false otherwise
  */
-bool CqQueryImpl::isClosed() {
+bool CqQueryImpl::isClosed() const {
   ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_mutex);
   return m_cqState == CqState::CLOSED ||
          (m_proxyCache && m_proxyCache->isClosed());
@@ -601,4 +603,4 @@ bool CqQueryImpl::isClosed() {
  * Return true if the CQ is durable
  * @return true if durable, false otherwise
  */
-bool CqQueryImpl::isDurable() { return m_isDurable; }
+bool CqQueryImpl::isDurable() const { return m_isDurable; }
diff --git a/cppcache/src/CqQueryImpl.hpp b/cppcache/src/CqQueryImpl.hpp
index 2a824b81..700ee4d8 100644
--- a/cppcache/src/CqQueryImpl.hpp
+++ b/cppcache/src/CqQueryImpl.hpp
@@ -103,12 +103,12 @@ class CqQueryImpl : public CqQuery,
   /**
    * returns CQ name
    */
-  const char* getName() const override;
+  const std::string& getName() const override;
 
   /**
    * sets the CqName.
    */
-  void setName(std::string& cqName);
+  void setName(std::string cqName);
 
   /**
    * Initializes the CqQuery.
@@ -148,7 +148,7 @@ class CqQueryImpl : public CqQuery,
   /**
    * Returns the QueryString of this CQ.
    */
-  const char* getQueryString() const override;
+  const std::string& getQueryString() const override;
 
   /**
    * Return the query after replacing region names with parameters
@@ -159,13 +159,13 @@ class CqQueryImpl : public CqQuery,
   /**
    * @see org.apache.geode.cache.query.CqQuery#getStatistics()
    */
-  const std::shared_ptr<CqStatistics> getStatistics() const override;
+  std::shared_ptr<CqStatistics> getStatistics() const override;
 
   CqQueryVsdStats& getVsdStats() {
     return *dynamic_cast<CqQueryVsdStats*>(m_stats.get());
   }
 
-  const std::shared_ptr<CqAttributes> getCqAttributes() const override;
+  std::shared_ptr<CqAttributes> getCqAttributes() const override;
 
   std::shared_ptr<Region> getCqBaseRegion();
 
@@ -223,13 +223,12 @@ class CqQueryImpl : public CqQuery,
    */
   void setCqState(CqState::StateType state);
 
-  const std::shared_ptr<CqAttributesMutator> getCqAttributesMutator()
-      const override;
+  std::shared_ptr<CqAttributesMutator> getCqAttributesMutator() const override;
 
   /**
    * @return Returns the cqOperation.
    */
-  CqOperation::CqOperationType getCqOperation();
+  CqOperation::CqOperationType getCqOperation() const;
 
   /**
    * @param cqOperation The cqOperation to set.
@@ -246,31 +245,31 @@ class CqQueryImpl : public CqQuery,
    * Return true if the CQ is in running state
    * @return true if running, false otherwise
    */
-  bool isRunning() override;
+  bool isRunning() const override;
 
   /**
    * Return true if the CQ is in Sstopped state
    * @return true if stopped, false otherwise
    */
-  bool isStopped() override;
+  bool isStopped() const override;
 
   /**
    * Return true if the CQ is closed
    * @return true if closed, false otherwise
    */
-  bool isClosed() override;
+  bool isClosed() const override;
 
   /**
    * Return true if the CQ is durable
    * @return true if durable, false otherwise
    */
-  bool isDurable() override;
+  bool isDurable() const override;
 
   inline ThinClientBaseDM* getDM() { return m_tccdm; }
 
  private:
   void updateStats();
-  ACE_Recursive_Thread_Mutex m_mutex;
+  mutable ACE_Recursive_Thread_Mutex m_mutex;
   void sendStopOrClose(TcrMessage::MsgType requestType);
   ThinClientBaseDM* m_tccdm;
   std::shared_ptr<ProxyCache> m_proxyCache;
diff --git a/cppcache/src/CqService.cpp b/cppcache/src/CqService.cpp
index ff60bff2..3cff7d95 100644
--- a/cppcache/src/CqService.cpp
+++ b/cppcache/src/CqService.cpp
@@ -17,17 +17,22 @@
 
 #include <sstream>
 
-#include "CqService.hpp"
-#include "ReadWriteLock.hpp"
+#include <geode/CqStatusListener.hpp>
+#include <geode/CqServiceStatistics.hpp>
 #include <geode/DistributedSystem.hpp>
 #include <geode/SystemProperties.hpp>
 #include <geode/ExceptionTypes.hpp>
+
+#include "CqService.hpp"
+#include "ReadWriteLock.hpp"
 #include "CqQueryImpl.hpp"
 #include "CqEventImpl.hpp"
-#include <geode/CqServiceStatistics.hpp>
 #include "ThinClientPoolDM.hpp"
-#include <geode/CqStatusListener.hpp>
-using namespace apache::geode::client;
+#include "util/exception.hpp"
+
+namespace apache {
+namespace geode {
+namespace client {
 
 CqService::CqService(ThinClientBaseDM* tccdm,
                      StatisticsFactory* statisticsFactory)
@@ -103,12 +108,12 @@ std::shared_ptr<CqQuery> CqService::newCq(
 
   // check for durable client
   if (isDurable) {
-    const auto durableID = m_tccdm->getConnectionManager()
-                               .getCacheImpl()
-                               ->getDistributedSystem()
-                               .getSystemProperties()
-                               .durableClientId();
-    if (durableID == nullptr || strlen(durableID) == 0) {
+    auto&& durableID = m_tccdm->getConnectionManager()
+                           .getCacheImpl()
+                           ->getDistributedSystem()
+                           .getSystemProperties()
+                           .durableClientId();
+    if (durableID.empty()) {
       LOGERROR("Cannot create durable CQ because client is not durable.");
       throw IllegalStateException(
           "Cannot create durable CQ because client is not durable.");
@@ -598,3 +603,7 @@ CqOperation::CqOperationType CqService::getOperation(int eventType) {
   delete resultCollector;
   return tmpRes;
 }
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/CqState.cpp b/cppcache/src/CqState.cpp
index bbe9ef20..1967ab54 100644
--- a/cppcache/src/CqState.cpp
+++ b/cppcache/src/CqState.cpp
@@ -14,28 +14,46 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include <geode/CqState.hpp>
 
-using namespace apache::geode::client;
+namespace apache {
+namespace geode {
+namespace client {
+
+const std::string CqState::STOPPED_STRING = "STOPPED";
+const std::string CqState::RUNNING_STRING = "RUNNING";
+const std::string CqState::CLOSED_STRING = "CLOSED";
+const std::string CqState::CLOSING_STRING = "CLOSING";
+const std::string CqState::INVALID_STRING = "INVALID";
 
 bool CqState::isRunning() const { return (m_state == RUNNING); }
 
 bool CqState::isStopped() const { return (m_state == STOPPED); }
 
 bool CqState::isClosed() const { return (m_state == CLOSED); }
+
 bool CqState::isClosing() const { return (m_state == CLOSING); }
+
 void CqState::setState(CqState::StateType state) { m_state = state; }
 
-CqState::StateType CqState::getState() { return m_state; }
-const char* CqState::toString() const {
+CqState::StateType CqState::getState() const { return m_state; }
+
+const std::string& CqState::toString() const {
   switch (m_state) {
     case STOPPED:
-      return "STOPPED";
+      return STOPPED_STRING;
     case RUNNING:
-      return "RUNNING";
+      return RUNNING_STRING;
     case CLOSED:
-      return "CLOSED";
+      return CLOSED_STRING;
+    case CLOSING:
+      return CLOSING_STRING;
     default:
-      return "UNKNOWN";
+      return INVALID_STRING;
   }
 }
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/DataInputInternal.hpp b/cppcache/src/DataInputInternal.hpp
index c566d829..c597c09e 100644
--- a/cppcache/src/DataInputInternal.hpp
+++ b/cppcache/src/DataInputInternal.hpp
@@ -34,6 +34,15 @@ class DataInputInternal : public DataInput {
   virtual const Cache* getCache() override {
     throw FatalInternalException("DataInputInternal does not have a Cache");
   }
+
+  inline static const std::string& getPoolName(const DataInput& dataInput) {
+    return dataInput.getPoolName();
+  }
+
+  inline static void setPoolName(DataInput& dataInput,
+                                 const std::string& poolName) {
+    return dataInput.setPoolName(poolName);
+  }
 };
 
 }  // namespace client
diff --git a/cppcache/src/DataOutput.cpp b/cppcache/src/DataOutput.cpp
index ffa3994a..69e1f2cc 100644
--- a/cppcache/src/DataOutput.cpp
+++ b/cppcache/src/DataOutput.cpp
@@ -112,7 +112,10 @@ TSSDataOutput::~TSSDataOutput() {
 ACE_TSS<TSSDataOutput> TSSDataOutput::s_tssDataOutput;
 
 DataOutput::DataOutput(const Cache* cache)
-    : m_cache(cache), m_poolName(nullptr), m_size(0), m_haveBigBuffer(false) {
+    : m_cache(cache),
+      m_poolName(EMPTY_STRING),
+      m_size(0),
+      m_haveBigBuffer(false) {
   m_buf = m_bytes = DataOutput::checkoutBuffer(&m_size);
 }
 
diff --git a/cppcache/src/DataOutputInternal.hpp b/cppcache/src/DataOutputInternal.hpp
index fd0412e5..9452ca84 100644
--- a/cppcache/src/DataOutputInternal.hpp
+++ b/cppcache/src/DataOutputInternal.hpp
@@ -35,6 +35,15 @@ class DataOutputInternal : public DataOutput {
   virtual const Cache* getCache() override {
     throw FatalInternalException("DataOutputInternal does not have a Cache");
   }
+
+  inline static const std::string& getPoolName(const DataOutput& dataOutput) {
+    return dataOutput.getPoolName();
+  }
+
+  inline static void setPoolName(DataOutput& dataOutput,
+                                 const std::string& poolName) {
+    return dataOutput.setPoolName(poolName);
+  }
 };
 
 }  // namespace client
diff --git a/cppcache/src/Delta.cpp b/cppcache/src/Delta.cpp
index db51be25..25cd875e 100644
--- a/cppcache/src/Delta.cpp
+++ b/cppcache/src/Delta.cpp
@@ -14,25 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * Delta.cpp
- *
- *  Created on: Nov 9, 2009
- *      Author: abhaware
- */
 
 #include <geode/Delta.hpp>
 #include <geode/Cache.hpp>
 
-using namespace apache::geode::client;
+namespace apache {
+namespace geode {
+namespace client {
 
 Delta::Delta(Cache* cache) : m_cache(cache) {}
-std::shared_ptr<Delta> Delta::clone() {
+
+std::shared_ptr<Delta> Delta::clone() const {
   auto out = m_cache->createDataOutput();
-  auto ptr = dynamic_cast<Cacheable*>(this);
+  auto ptr = dynamic_cast<const Cacheable*>(this);
   out->writeObject(ptr);
   auto in = m_cache->createDataInput(out->getBuffer(), out->getBufferLength());
   std::shared_ptr<Cacheable> theClonePtr;
   in->readObject(theClonePtr);
   return std::dynamic_pointer_cast<Delta>(theClonePtr);
 }
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/DiskPolicyType.cpp b/cppcache/src/DiskPolicyType.cpp
index a71ee1f8..aa940c9a 100644
--- a/cppcache/src/DiskPolicyType.cpp
+++ b/cppcache/src/DiskPolicyType.cpp
@@ -18,23 +18,29 @@
 #include <geode/DiskPolicyType.hpp>
 #include "ace/OS.h"
 
-using namespace apache::geode::client;
+namespace apache {
+namespace geode {
+namespace client {
 
-const char* DiskPolicyType::names[] = {"none", "overflows", "persist", nullptr};
+const std::string DiskPolicyType::names[] = {"none", "overflows", "persist"};
 
-const char* DiskPolicyType::fromOrdinal(const uint8_t ordinal) {
-  if (ordinal > DiskPolicyType::PERSIST) return names[DiskPolicyType::NONE];
-  return names[ordinal];
-}
-
-DiskPolicyType::PolicyType DiskPolicyType::fromName(const char* name) {
-  uint32_t i = 0;
-  while ((names[i] != nullptr) ||
-         (i <= static_cast<uint32_t>(DiskPolicyType::PERSIST))) {
-    if (name && names[i] && ACE_OS::strcasecmp(names[i], name) == 0) {
-      return static_cast<DiskPolicyType::PolicyType>(i);
+DiskPolicyType::PolicyType DiskPolicyType::fromName(const std::string& name) {
+  for (int i = NONE; i <= PERSIST; i++) {
+    if (names[i] == name) {
+      return static_cast<PolicyType>(i);
     }
-    ++i;
   }
   return DiskPolicyType::NONE;
 }
+
+const std::string& DiskPolicyType::fromOrdinal(const uint8_t ordinal) {
+  if (NONE <= ordinal && ordinal <= PERSIST) {
+    return names[ordinal];
+  }
+
+  return names[NONE];
+}
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/DistributedSystem.cpp b/cppcache/src/DistributedSystem.cpp
index a3824b09..8c053821 100644
--- a/cppcache/src/DistributedSystem.cpp
+++ b/cppcache/src/DistributedSystem.cpp
@@ -109,13 +109,13 @@ DistributedSystem::DistributedSystem(
       m_sysProps(std::move(sysProps)),
       m_connected(false) {
   LOGDEBUG("DistributedSystem::DistributedSystem");
-  if (strlen(m_sysProps->securityClientDhAlgo()) > 0) {
+  if (!m_sysProps->securityClientDhAlgo().empty()) {
     DiffieHellman::initOpenSSLFuncPtrs();
   }
 }
 DistributedSystem::~DistributedSystem() {}
 
-void DistributedSystem::logSystemInformation() {
+void DistributedSystem::logSystemInformation() const {
   std::string gfcpp = CppCacheLibrary::getProductDir();
   LOGCONFIG("Using Geode Native Client Product Directory: %s", gfcpp.c_str());
 
@@ -156,8 +156,8 @@ std::unique_ptr<DistributedSystem> DistributedSystem::create(
   // Trigger other library initialization.
   CppCacheLibrary::initLib();
 
-  auto sysProps = std::unique_ptr<SystemProperties>(
-      new SystemProperties(configPtr, nullptr));
+  auto sysProps =
+      std::unique_ptr<SystemProperties>(new SystemProperties(configPtr));
 
   auto name = _name;
   if (name.empty()) {
@@ -165,18 +165,18 @@ std::unique_ptr<DistributedSystem> DistributedSystem::create(
   }
 
   // Set client name via native client API
-  const char* propName = sysProps->name();
-  if (propName != nullptr && strlen(propName) > 0) {
+  auto&& propName = sysProps->name();
+  if (!propName.empty()) {
     name = propName;
   }
 
   // TODO global - keep global but setup once.
-  const char* logFilename = sysProps->logFilename();
-  if (logFilename) {
+  auto&& logFilename = sysProps->logFilename();
+  if (!logFilename.empty()) {
     try {
       Log::close();
-      Log::init(sysProps->logLevel(), logFilename, sysProps->logFileSizeLimit(),
-                sysProps->logDiskSpaceLimit());
+      Log::init(sysProps->logLevel(), logFilename.c_str(),
+                sysProps->logFileSizeLimit(), sysProps->logDiskSpaceLimit());
     } catch (const GeodeIOException&) {
       Log::close();
       sysProps = nullptr;
@@ -219,8 +219,7 @@ void DistributedSystem::connect(Cache* cache) {
   try {
     m_impl->connect();
   } catch (const apache::geode::client::Exception& e) {
-    LOGERROR("Exception caught during client initialization: %s",
-             e.what());
+    LOGERROR("Exception caught during client initialization: %s", e.what());
     std::string msg = "DistributedSystem::connect: caught exception: ";
     msg.append(e.what());
     throw NotConnectedException(msg.c_str());
@@ -237,12 +236,16 @@ void DistributedSystem::connect(Cache* cache) {
 
   auto cacheImpl = CacheRegionHelper::getCacheImpl(cache);
   try {
-    m_statisticsManager = std::unique_ptr<StatisticsManager>(new StatisticsManager(
-        m_sysProps->statisticsArchiveFile(), m_sysProps->statisticsSampleInterval(),
-        m_sysProps->statisticsEnabled(), cacheImpl,
-        m_sysProps->durableClientId(), m_sysProps->durableTimeout(),
-        m_sysProps->statsFileSizeLimit(), m_sysProps->statsDiskSpaceLimit()));
-    cacheImpl->m_cacheStats = new CachePerfStats(getStatisticsManager()->getStatisticsFactory());
+    m_statisticsManager =
+        std::unique_ptr<StatisticsManager>(new StatisticsManager(
+            m_sysProps->statisticsArchiveFile().c_str(),
+            m_sysProps->statisticsSampleInterval(),
+            m_sysProps->statisticsEnabled(), cacheImpl,
+            m_sysProps->durableClientId().c_str(), m_sysProps->durableTimeout(),
+            m_sysProps->statsFileSizeLimit(),
+            m_sysProps->statsDiskSpaceLimit()));
+    cacheImpl->m_cacheStats =
+        new CachePerfStats(getStatisticsManager()->getStatisticsFactory());
   }
   catch (const NullPointerException&) {
     Log::close();
diff --git a/cppcache/src/EntryExpiryHandler.cpp b/cppcache/src/EntryExpiryHandler.cpp
index 53229d76..6b0eeb23 100644
--- a/cppcache/src/EntryExpiryHandler.cpp
+++ b/cppcache/src/EntryExpiryHandler.cpp
@@ -56,7 +56,8 @@ int EntryExpiryHandler::handle_timeout(const ACE_Time_Value& current_time,
     LOGDEBUG(
         "Entered entry expiry task handler for key [%s] of region [%s]: "
         "%d,%d,%d,%d",
-        Utils::getCacheableKeyString(key)->asChar(), m_regionPtr->getFullPath(),
+        Utils::getCacheableKeyString(key)->asChar(),
+        m_regionPtr->getFullPath().c_str(),
         curr_time.time_since_epoch().count(),
         lastTimeForExp.time_since_epoch().count(), m_duration.count(),
         elapsed.count());
@@ -69,7 +70,7 @@ int EntryExpiryHandler::handle_timeout(const ACE_Time_Value& current_time,
       LOGDEBUG(
           "Resetting expiry task %d secs later for key [%s] of region [%s]",
           remaining.count(), Utils::getCacheableKeyString(key)->asChar(),
-          m_regionPtr->getFullPath());
+          m_regionPtr->getFullPath().c_str());
       m_regionPtr->getCacheImpl()->getExpiryTaskManager().resetTask(
           expProps.getExpiryTaskId(), remaining);
       return 0;
@@ -79,7 +80,7 @@ int EntryExpiryHandler::handle_timeout(const ACE_Time_Value& current_time,
   }
   LOGDEBUG("Removing expiry task for key [%s] of region [%s]",
            Utils::getCacheableKeyString(key)->asChar(),
-           m_regionPtr->getFullPath());
+           m_regionPtr->getFullPath().c_str());
   m_regionPtr->getCacheImpl()->getExpiryTaskManager().resetTask(
       expProps.getExpiryTaskId(), std::chrono::seconds::zero());
   //  we now delete the handler in GF_Timer_Heap_ImmediateReset_T
@@ -104,7 +105,7 @@ inline void EntryExpiryHandler::DoTheExpirationAction(
       LOGDEBUG(
           "EntryExpiryHandler::DoTheExpirationAction INVALIDATE "
           "for region %s entry with key %s",
-          m_regionPtr->getFullPath(),
+          m_regionPtr->getFullPath().c_str(),
           Utils::getCacheableKeyString(key)->asChar());
       m_regionPtr->invalidateNoThrow(key, nullptr, -1,
                                      CacheEventFlags::EXPIRATION, versionTag);
@@ -114,7 +115,7 @@ inline void EntryExpiryHandler::DoTheExpirationAction(
       LOGDEBUG(
           "EntryExpiryHandler::DoTheExpirationAction LOCAL_INVALIDATE "
           "for region %s entry with key %s",
-          m_regionPtr->getFullPath(),
+          m_regionPtr->getFullPath().c_str(),
           Utils::getCacheableKeyString(key)->asChar());
       m_regionPtr->invalidateNoThrow(
           key, nullptr, -1,
@@ -125,7 +126,7 @@ inline void EntryExpiryHandler::DoTheExpirationAction(
       LOGDEBUG(
           "EntryExpiryHandler::DoTheExpirationAction DESTROY "
           "for region %s entry with key %s",
-          m_regionPtr->getFullPath(),
+          m_regionPtr->getFullPath().c_str(),
           Utils::getCacheableKeyString(key)->asChar());
       m_regionPtr->destroyNoThrow(key, nullptr, -1, CacheEventFlags::EXPIRATION,
                                   versionTag);
@@ -135,7 +136,7 @@ inline void EntryExpiryHandler::DoTheExpirationAction(
       LOGDEBUG(
           "EntryExpiryHandler::DoTheExpirationAction LOCAL_DESTROY "
           "for region %s entry with key %s",
-          m_regionPtr->getFullPath(),
+          m_regionPtr->getFullPath().c_str(),
           Utils::getCacheableKeyString(key)->asChar());
       m_regionPtr->destroyNoThrow(
           key, nullptr, -1,
@@ -146,7 +147,7 @@ inline void EntryExpiryHandler::DoTheExpirationAction(
       LOGERROR(
           "Unknown expiration action "
           "%d for region %s for key %s",
-          m_action, m_regionPtr->getFullPath(),
+          m_action, m_regionPtr->getFullPath().c_str(),
           Utils::getCacheableKeyString(key)->asChar());
       break;
     }
diff --git a/cppcache/src/EnumInfo.hpp b/cppcache/src/EnumInfo.hpp
index ffdc171b..1a97caa5 100644
--- a/cppcache/src/EnumInfo.hpp
+++ b/cppcache/src/EnumInfo.hpp
@@ -39,24 +39,22 @@ class CPPCACHE_EXPORT EnumInfo : public CacheableKey {
   EnumInfo();
   EnumInfo(const char* enumClassName, const char* enumName, int32_t m_ordinal);
   static Serializable* createDeserializable() { return new EnumInfo(); }
-  virtual void toData(DataOutput& output) const;
-  virtual void fromData(DataInput& input);
-  virtual uint32_t objectSize() const {
+  virtual void toData(DataOutput& output) const override;
+  virtual void fromData(DataInput& input) override;
+  virtual uint32_t objectSize() const override {
     uint32_t size = sizeof(EnumInfo);
     size += sizeof(int32_t);
     size += m_enumClassName->objectSize();
     size += m_enumName->objectSize();
     return size;
   }
-  virtual int32_t classId() const { return 0; }
-  virtual int8_t typeId() const { return GeodeTypeIds::EnumInfo; }
-  virtual std::shared_ptr<CacheableString> toString() const {
-    return CacheableString::create("EnumInfo");
-  }
-  virtual bool operator==(const CacheableKey& other) const;
-  virtual int32_t hashcode() const;
+  virtual int32_t classId() const override { return 0; }
+  virtual int8_t typeId() const override { return GeodeTypeIds::EnumInfo; }
+  virtual std::string toString() const override { return "EnumInfo"; }
+  virtual bool operator==(const CacheableKey& other) const override;
+  virtual int32_t hashcode() const override;
 
-  virtual int8_t DSFID() const;
+  virtual int8_t DSFID() const override;
   std::shared_ptr<CacheableString> getEnumClassName() const {
     return m_enumClassName;
   }
diff --git a/cppcache/src/EventId.cpp b/cppcache/src/EventId.cpp
index bf23ffda..a07752fe 100644
--- a/cppcache/src/EventId.cpp
+++ b/cppcache/src/EventId.cpp
@@ -166,13 +166,6 @@ void EventId::initFromTSS_SameThreadIdAndSameSequenceId() {
 
 EventId::~EventId() {}
 
-/** used to render as a string for logging. */
-size_t EventId::logString(char* buffer, size_t maxLength) const {
-  return ACE_OS::snprintf(buffer, maxLength,
-                          "EventId( memID=[binary], thr=%" PRIi64
-                          ", seq=%" PRIi64 " )",
-                          m_eidThr, m_eidSeq);
-}
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/EventId.hpp b/cppcache/src/EventId.hpp
index a0b9738a..5869997c 100644
--- a/cppcache/src/EventId.hpp
+++ b/cppcache/src/EventId.hpp
@@ -110,9 +110,6 @@ class CPPCACHE_EXPORT EventId : public Cacheable {
   /** Destructor. */
   virtual ~EventId();
 
-  /** used to render as a string for logging. */
-  virtual size_t logString(char* buffer, size_t maxLength) const;
-
   int64_t getEventIdData(DataInput& input, char numberCode);
 
   inline void writeIdsData(DataOutput& output) {
diff --git a/cppcache/src/Exception.cpp b/cppcache/src/Exception.cpp
index c7daa664..b36512ec 100644
--- a/cppcache/src/Exception.cpp
+++ b/cppcache/src/Exception.cpp
@@ -28,27 +28,24 @@ namespace apache {
 namespace geode {
 namespace client {
 
-Exception::Exception(const std::string& msg)
-  : Exception(msg.c_str()) {
-}
+Exception::Exception(const std::string& message) : message(message) {}
 
-Exception::Exception(const char* msg1)
-  : message(msg1) {
-  m_stack = std::unique_ptr<StackTrace>();
-}
+Exception::Exception(std::string&& message) : message(std::move(message)) {}
 
-const char *Exception::what() const noexcept {
-  return message.c_str();
-}
+Exception::Exception(const char* message) : Exception(std::string(message)) {}
+
+const std::string& Exception::getMessage() const noexcept { return message; }
+
+const char* Exception::what() const noexcept { return message.c_str(); }
 
 Exception::~Exception() noexcept {}
 
-const char* Exception::getName() const {
-  return boost::core::demangle(typeid(*this).name()).c_str();
+std::string Exception::getName() const {
+  return boost::core::demangle(typeid(*this).name());
 }
 
 std::string Exception::getStackTrace() const {
-  return m_stack ? m_stack->getString() : "  No stack available.\n";
+  return m_stack ? m_stack->getString() : "No stack available.";
 }
 
 // class to store/clear last server exception in TSS area
diff --git a/cppcache/src/ExecutionImpl.cpp b/cppcache/src/ExecutionImpl.cpp
index 8741ea90..8878c5cb 100644
--- a/cppcache/src/ExecutionImpl.cpp
+++ b/cppcache/src/ExecutionImpl.cpp
@@ -16,6 +16,7 @@
  */
 
 #include <sstream>
+
 #include <geode/geode_globals.hpp>
 #include <geode/ExceptionTypes.hpp>
 #include <geode/DefaultResultCollector.hpp>
@@ -25,6 +26,11 @@
 #include "ThinClientPoolDM.hpp"
 #include "NoResult.hpp"
 #include "UserAttributes.hpp"
+#include "util/exception.hpp"
+
+namespace apache {
+namespace geode {
+namespace client {
 
 FunctionToFunctionAttributes ExecutionImpl::m_func_attrs;
 ACE_Recursive_Thread_Mutex ExecutionImpl::m_func_attrs_lock;
@@ -65,9 +71,9 @@ std::shared_ptr<Execution> ExecutionImpl::withCollector(
                                          m_allServer, m_pool, m_proxyCache);
 }
 
-std::vector<int8_t>* ExecutionImpl::getFunctionAttributes(const char* func) {
-  std::map<std::string, std::vector<int8_t>*>::iterator itr =
-      m_func_attrs.find(func);
+std::vector<int8_t>* ExecutionImpl::getFunctionAttributes(
+    const std::string& func) {
+  auto&& itr = m_func_attrs.find(func);
   if (itr != m_func_attrs.end()) {
     return itr->second;
   }
@@ -76,7 +82,7 @@ std::vector<int8_t>* ExecutionImpl::getFunctionAttributes(const char* func) {
 std::shared_ptr<ResultCollector> ExecutionImpl::execute(
     const std::shared_ptr<CacheableVector>& routingObj,
     const std::shared_ptr<Cacheable>& args,
-    const std::shared_ptr<ResultCollector>& rs, const char* func,
+    const std::shared_ptr<ResultCollector>& rs, const std::string& func,
     std::chrono::milliseconds timeout) {
   m_routingObj = routingObj;
   m_args = args;
@@ -84,8 +90,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
   return execute(func, timeout);
 }
 std::shared_ptr<ResultCollector> ExecutionImpl::execute(
-    const char* fn, std::chrono::milliseconds timeout) {
-  std::string func = fn;
+    const std::string& func, std::chrono::milliseconds timeout) {
   LOGDEBUG("ExecutionImpl::execute: ");
   GuardUserAttribures gua;
   if (m_proxyCache != nullptr) {
@@ -96,24 +101,24 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
   bool serverIsHA = false;
   bool serverOptimizeForWrite = false;
 
-  std::vector<int8_t>* attr = getFunctionAttributes(fn);
+  auto&& attr = getFunctionAttributes(func);
   {
     if (attr == nullptr) {
       ACE_Guard<ACE_Recursive_Thread_Mutex> _guard(m_func_attrs_lock);
       GfErrType err = GF_NOERR;
-      attr = getFunctionAttributes(fn);
+      attr = getFunctionAttributes(func);
       if (attr == nullptr) {
         if (m_region != nullptr) {
           err = dynamic_cast<ThinClientRegion*>(m_region.get())
-                    ->getFuncAttributes(fn, &attr);
+                    ->getFuncAttributes(func, &attr);
         } else if (m_pool != nullptr) {
-          err = getFuncAttributes(fn, &attr);
+          err = getFuncAttributes(func, &attr);
         }
         if (err != GF_NOERR) {
           GfErrTypeToException("Execute::GET_FUNCTION_ATTRIBUTES", err);
         }
         if (!attr->empty() && err == GF_NOERR) {
-          m_func_attrs[fn] = attr;
+          m_func_attrs[func] = attr;
         }
       }
     }
@@ -184,8 +189,8 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
               "is also empty so use old FE onRegion");
           std::dynamic_pointer_cast<ThinClientRegion>(m_region)
               ->executeFunction(
-                  fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite, m_rc,
-                  (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
+                  func, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
+                  m_rc, (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
                   timeout);
           cms->enqueueForMetadataRefresh(m_region->getFullPath(), 0);
         } else {
@@ -207,7 +212,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
               "empty");
           bool reExecute = std::dynamic_pointer_cast<ThinClientRegion>(m_region)
                                ->executeFunctionSH(
-                                   fn, m_args, isHAHasResultOptimizeForWrite,
+                                   func, m_args, isHAHasResultOptimizeForWrite,
                                    m_rc, serverToKeysMap, failedNodes, timeout,
                                    /*allBuckets*/ true);
           if (reExecute) {  // Fallback to old FE onREgion
@@ -215,7 +220,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
               m_rc->clearResults();
               auto rs =
                   std::dynamic_pointer_cast<ThinClientRegion>(m_region)
-                      ->reExecuteFunction(fn, m_args, m_routingObj,
+                      ->reExecuteFunction(func, m_args, m_routingObj,
                                           isHAHasResultOptimizeForWrite, m_rc,
                                           (isHAHasResultOptimizeForWrite & 1)
                                               ? retryAttempts
@@ -225,7 +230,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
               m_rc->clearResults();
               dynamic_cast<ThinClientRegion*>(m_region.get())
                   ->executeFunction(
-                      fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
+                      func, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
                       m_rc,
                       (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
                       timeout);
@@ -236,7 +241,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
         LOGDEBUG("executeFunction onRegion WithFilter size equal to 1 ");
         dynamic_cast<ThinClientRegion*>(m_region.get())
             ->executeFunction(
-                fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite, m_rc,
+                func, m_args, m_routingObj, isHAHasResultOptimizeForWrite, m_rc,
                 (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
                 timeout);
       } else {
@@ -250,7 +255,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
                 "so use old FE onRegion");
             dynamic_cast<ThinClientRegion*>(m_region.get())
                 ->executeFunction(
-                    fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
+                    func, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
                     m_rc,
                     (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
                     timeout);
@@ -261,7 +266,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
                 "empty");
             bool reExecute =
                 dynamic_cast<ThinClientRegion*>(m_region.get())
-                    ->executeFunctionSH(fn, m_args,
+                    ->executeFunctionSH(func, m_args,
                                         isHAHasResultOptimizeForWrite, m_rc,
                                         serverToKeysMap, failedNodes, timeout,
                                         /*allBuckets*/ false);
@@ -270,7 +275,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
                 m_rc->clearResults();
                 auto rs =
                     dynamic_cast<ThinClientRegion*>(m_region.get())
-                        ->reExecuteFunction(fn, m_args, m_routingObj,
+                        ->reExecuteFunction(func, m_args, m_routingObj,
                                             isHAHasResultOptimizeForWrite, m_rc,
                                             (isHAHasResultOptimizeForWrite & 1)
                                                 ? retryAttempts
@@ -280,8 +285,8 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
                 m_rc->clearResults();
                 dynamic_cast<ThinClientRegion*>(m_region.get())
                     ->executeFunction(
-                        fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
-                        m_rc,
+                        func, m_args, m_routingObj,
+                        isHAHasResultOptimizeForWrite, m_rc,
                         (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
                         timeout);
               }
@@ -290,15 +295,15 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
         } else {  // For transactions use old way
           dynamic_cast<ThinClientRegion*>(m_region.get())
               ->executeFunction(
-                  fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite, m_rc,
-                  (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
+                  func, m_args, m_routingObj, isHAHasResultOptimizeForWrite,
+                  m_rc, (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0,
                   timeout);
         }
       }
     } else {  // w/o single hop, Fallback to old FE onREgion
       dynamic_cast<ThinClientRegion*>(m_region.get())
           ->executeFunction(
-              fn, m_args, m_routingObj, isHAHasResultOptimizeForWrite, m_rc,
+              func, m_args, m_routingObj, isHAHasResultOptimizeForWrite, m_rc,
               (isHAHasResultOptimizeForWrite & 1) ? retryAttempts : 0, timeout);
     }
     /*    } catch (TransactionDataNodeHasDepartedException e) {
@@ -351,7 +356,7 @@ std::shared_ptr<ResultCollector> ExecutionImpl::execute(
   return m_rc;
 }
 
-GfErrType ExecutionImpl::getFuncAttributes(const char* func,
+GfErrType ExecutionImpl::getFuncAttributes(const std::string& func,
                                            std::vector<int8_t>** attr) {
   ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool.get());
   if (tcrdm == nullptr) {
@@ -363,12 +368,11 @@ GfErrType ExecutionImpl::getFuncAttributes(const char* func,
 
   // do TCR GET_FUNCTION_ATTRIBUTES
   LOGDEBUG("Tcrmessage request GET_FUNCTION_ATTRIBUTES ");
-  std::string funcName(func);
   TcrMessageGetFunctionAttributes request(tcrdm->getConnectionManager()
                                               .getCacheImpl()
                                               ->getCache()
                                               ->createDataOutput(),
-                                          funcName, tcrdm);
+                                          func, tcrdm);
   TcrMessageReply reply(true, tcrdm);
   err = tcrdm->sendSyncRequest(request, reply);
   if (err != GF_NOERR) {
@@ -405,7 +409,9 @@ void ExecutionImpl::addResults(std::shared_ptr<ResultCollector>& collector,
     collector->addResult(result);
   }
 }
-void ExecutionImpl::executeOnAllServers(std::string& func, uint8_t getResult,
+
+void ExecutionImpl::executeOnAllServers(const std::string& func,
+                                        uint8_t getResult,
                                         std::chrono::milliseconds timeout) {
   ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool.get());
   if (tcrdm == nullptr) {
@@ -446,7 +452,7 @@ if (exceptionPtr != nullptr && err != GF_NOERR) {
   }
 }
 std::shared_ptr<CacheableVector> ExecutionImpl::executeOnPool(
-    std::string& func, uint8_t getResult, int32_t retryAttempts,
+    const std::string& func, uint8_t getResult, int32_t retryAttempts,
     std::chrono::milliseconds timeout) {
   ThinClientPoolDM* tcrdm = dynamic_cast<ThinClientPoolDM*>(m_pool.get());
   if (tcrdm == nullptr) {
@@ -548,3 +554,7 @@ std::shared_ptr<CacheableVector> ExecutionImpl::executeOnPool(
   }
   return nullptr;
 }
+
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/ExecutionImpl.hpp b/cppcache/src/ExecutionImpl.hpp
index 196fd836..82cfb3bf 100644
--- a/cppcache/src/ExecutionImpl.hpp
+++ b/cppcache/src/ExecutionImpl.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_EXECUTIONIMPL_H_
-#define GEODE_EXECUTIONIMPL_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,14 +15,22 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_EXECUTIONIMPL_H_
+#define GEODE_EXECUTIONIMPL_H_
+
+#include <map>
+
+#include <ace/Condition_Recursive_Thread_Mutex.h>
+#include <ace/Guard_T.h>
+
 #include <geode/Execution.hpp>
 #include <geode/CacheableBuiltins.hpp>
 #include <geode/ResultCollector.hpp>
 #include <geode/Region.hpp>
+
 #include "ProxyCache.hpp"
-#include <ace/Condition_Recursive_Thread_Mutex.h>
-#include <ace/Guard_T.h>
-#include <map>
 
 namespace apache {
 namespace geode {
@@ -67,12 +70,12 @@ class ExecutionImpl : public Execution {
   virtual std::shared_ptr<ResultCollector> execute(
       const std::shared_ptr<CacheableVector>& routingObj,
       const std::shared_ptr<Cacheable>& args,
-      const std::shared_ptr<ResultCollector>& rs, const char* func,
+      const std::shared_ptr<ResultCollector>& rs, const std::string& func,
       std::chrono::milliseconds timeout) override;
 
   virtual std::shared_ptr<ResultCollector> execute(
-      const char* func, std::chrono::milliseconds timeout =
-                            DEFAULT_QUERY_RESPONSE_TIMEOUT) override;
+      const std::string& func, std::chrono::milliseconds timeout =
+                                   DEFAULT_QUERY_RESPONSE_TIMEOUT) override;
 
   static void addResults(std::shared_ptr<ResultCollector>& collector,
                          const std::shared_ptr<CacheableVector>& results);
@@ -112,15 +115,16 @@ class ExecutionImpl : public Execution {
   //  std::vector<int8_t> m_attributes;
 
   std::shared_ptr<CacheableVector> executeOnPool(
-      std::string& func, uint8_t getResult, int32_t retryAttempts,
+      const std::string& func, uint8_t getResult, int32_t retryAttempts,
       std::chrono::milliseconds timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT);
 
   void executeOnAllServers(
-      std::string& func, uint8_t getResult,
+      const std::string& func, uint8_t getResult,
       std::chrono::milliseconds timeout = DEFAULT_QUERY_RESPONSE_TIMEOUT);
 
-  std::vector<int8_t>* getFunctionAttributes(const char* func);
-  GfErrType getFuncAttributes(const char* func, std::vector<int8_t>** attr);
+  std::vector<int8_t>* getFunctionAttributes(const std::string& func);
+  GfErrType getFuncAttributes(const std::string& func,
+                              std::vector<int8_t>** attr);
 
   FRIEND_STD_SHARED_PTR(ExecutionImpl)
 };
diff --git a/cppcache/src/ExpirationAction.cpp b/cppcache/src/ExpirationAction.cpp
index 9579c552..fc144e92 100644
--- a/cppcache/src/ExpirationAction.cpp
+++ b/cppcache/src/ExpirationAction.cpp
@@ -17,33 +17,30 @@
 
 #include <geode/ExpirationAction.hpp>
 
-#include <string>
-#include <ace/OS.h>
+namespace apache {
+namespace geode {
+namespace client {
 
-using namespace apache::geode::client;
+const std::string ExpirationAction::names[] = {"INVALIDATE", "LOCAL_INVALIDATE",
+                                               "DESTROY", "LOCAL_DESTROY",
+                                               "INVALID_ACTION"};
 
-char* ExpirationAction::names[] = {(char*)"INVALIDATE",
-                                   (char*)"LOCAL_INVALIDATE", (char*)"DESTROY",
-                                   (char*)"LOCAL_DESTROY", (char*)nullptr};
-
-ExpirationAction::Action ExpirationAction::fromName(const char* name) {
-  uint32_t i = 0;
-  while ((names[i] != nullptr) || (i <= static_cast<uint32_t>(LOCAL_DESTROY))) {
-    if (name && names[i] && ACE_OS::strcasecmp(names[i], name) == 0) {
+ExpirationAction::Action ExpirationAction::fromName(const std::string& name) {
+  for (int i = INVALIDATE; i <= INVALID_ACTION; i++) {
+    if (names[i] == name) {
       return static_cast<Action>(i);
     }
-    ++i;
   }
   return INVALID_ACTION;
 }
 
-const char* ExpirationAction::fromOrdinal(const int ordinal) {
+const std::string& ExpirationAction::fromOrdinal(const int ordinal) {
   if (INVALIDATE <= ordinal && ordinal <= LOCAL_DESTROY) {
     return names[ordinal];
   }
-  return nullptr;
+  return names[INVALID_ACTION];
 }
 
-ExpirationAction::ExpirationAction() {}
-
-ExpirationAction::~ExpirationAction() {}
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/FarSideEntryOp.cpp b/cppcache/src/FarSideEntryOp.cpp
index b5c1223c..6596b68f 100644
--- a/cppcache/src/FarSideEntryOp.cpp
+++ b/cppcache/src/FarSideEntryOp.cpp
@@ -14,17 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * FarSideEntryOp.cpp
- *
- *  Created on: 22-Feb-2011
- *      Author: ankurs
- */
 
 #include "FarSideEntryOp.hpp"
 #include "RegionCommit.hpp"
 #include "ClientProxyMembershipID.hpp"
 #include "DiskVersionTag.hpp"
+#include "util/exception.hpp"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp b/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp
index b46c16f1..9f7f04db 100644
--- a/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp
+++ b/cppcache/src/InternalCacheTransactionManager2PCImpl.cpp
@@ -14,22 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * CacheTransactionManager2PCImpl.cpp
- *
- *  Created on: 13-Nov-2015
- *      Author: sshcherbakov
- */
 
-#include "InternalCacheTransactionManager2PCImpl.hpp"
-#include "CacheTransactionManagerImpl.hpp"
 #include <geode/TransactionId.hpp>
 #include <geode/ExceptionTypes.hpp>
+#include <geode/PoolManager.hpp>
+
+#include "InternalCacheTransactionManager2PCImpl.hpp"
+#include "CacheTransactionManagerImpl.hpp"
 #include "TcrMessage.hpp"
 #include "ThinClientPoolDM.hpp"
 #include "CacheRegionHelper.hpp"
-#include <geode/PoolManager.hpp>
 #include "TXCleaner.hpp"
+#include "util/exception.hpp"
 
 namespace apache {
 namespace geode {
diff --git a/cppcache/src/LRUEntriesMap.cpp b/cppcache/src/LRUEntriesMap.cpp
index 1e30258e..b0666899 100644
--- a/cppcache/src/LRUEntriesMap.cpp
+++ b/cppcache/src/LRUEntriesMap.cpp
@@ -372,9 +372,6 @@ GfErrType LRUEntriesMap::put(const std::shared_ptr<CacheableKey>& key,
 bool LRUEntriesMap::get(const std::shared_ptr<CacheableKey>& key,
                         std::shared_ptr<Cacheable>& returnPtr,
                         std::shared_ptr<MapEntryImpl>& me) {
-  char logkey[2048];
-  key->logString(logkey, 2040);
-  // LOGDEBUG("key = %s", logkey);
   bool doProcessLRU = false;
   MapSegment* segmentRPtr = segmentFor(key);
   bool segmentLocked = false;
@@ -511,7 +508,7 @@ std::shared_ptr<Cacheable> LRUEntriesMap::getFromDisk(
   std::shared_ptr<Cacheable> tmpObj;
   try {
     LOGDEBUG("Reading value from persistence layer for key: %s",
-             key->toString()->asChar());
+             key->toString().c_str());
     tmpObj = m_pmPtr->read(key, persistenceInfo);
   } catch (Exception& ex) {
     LOGERROR("read on the persistence layer failed - %s", ex.what());
diff --git a/cppcache/src/LocalRegion.cpp b/cppcache/src/LocalRegion.cpp
index 5aa9c4e9..9396d36b 100644
--- a/cppcache/src/LocalRegion.cpp
+++ b/cppcache/src/LocalRegion.cpp
@@ -35,6 +35,7 @@
 #include "VersionTag.hpp"
 #include "util/bounds.hpp"
 #include "util/Log.hpp"
+#include "util/exception.hpp"
 
 namespace apache {
 namespace geode {
@@ -98,9 +99,10 @@ LocalRegion::LocalRegion(const std::string& name, CacheImpl* cache,
   setPool(p);
 }
 
-const char* LocalRegion::getName() const { return m_name.c_str(); }
+const std::string& LocalRegion::getName() const { return m_name; }
+
+const std::string& LocalRegion::getFullPath() const { return m_fullPath; }
 
-const char* LocalRegion::getFullPath() const { return m_fullPath.c_str(); }
 std::shared_ptr<Region> LocalRegion::getParentRegion() const {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::getParentRegion);
   return m_parentRegion;
@@ -110,12 +112,12 @@ void LocalRegion::updateAccessAndModifiedTime(bool modified) {
   // locking not required since setters use atomic operations
   if (regionExpiryEnabled()) {
     auto now = std::chrono::system_clock::now();
-    LOGDEBUG("Setting last accessed time for region %s to %d", getFullPath(),
-             now.time_since_epoch().count());
+    LOGDEBUG("Setting last accessed time for region %s to %d",
+             getFullPath().c_str(), now.time_since_epoch().count());
     m_cacheStatistics->setLastAccessedTime(now);
     if (modified) {
-      LOGDEBUG("Setting last modified time for region %s to %d", getFullPath(),
-               now.time_since_epoch().count());
+      LOGDEBUG("Setting last modified time for region %s to %d",
+               getFullPath().c_str(), now.time_since_epoch().count());
       m_cacheStatistics->setLastModifiedTime(now);
     }
     // TODO:  should we really touch the parent region??
@@ -183,7 +185,7 @@ void LocalRegion::tombstoneOperationNoThrow(
       } else {
         LOGERROR(
             "tombstone_operation contains incorrect gc versions in the "
-            "message. Region %s",
+            "message. Region " +
             getFullPath());
         continue;
       }
@@ -192,25 +194,22 @@ void LocalRegion::tombstoneOperationNoThrow(
   } else {
     m_entries->reapTombstones(tombstoneKeys);
   }
-} std::shared_ptr<Region> LocalRegion::getSubregion(const char* path) {
-  if (path == nullptr) {
-    throw IllegalArgumentException("LocalRegion::getSubregion: path is null");
-  }
-
+}
+std::shared_ptr<Region> LocalRegion::getSubregion(const std::string& path) {
   CHECK_DESTROY_PENDING(TryReadGuard, LocalRegion::getSubregion);
-  std::string pathstr(path);
-  std::string slash("/");
-  if ((pathstr == slash) || (pathstr.length() < 1)) {
-    LOGERROR("Get subregion path [%s] is not valid.", pathstr.c_str());
-    throw IllegalArgumentException("Get subegion path is null or a /");
+
+  static const std::string slash("/");
+  if (path == slash || path.empty()) {
+    LOGERROR("Get subregion path [" + path + "] is not valid.");
+    throw IllegalArgumentException("Get subegion path is empty or a /");
   }
-  std::string fullname = pathstr;
+  auto fullname = path;
   if (fullname.substr(0, 1) == slash) {
-    fullname = pathstr.substr(1);
+    fullname = path.substr(1);
   }
   // find second separator
   size_t idx = fullname.find('/');
-  std::string stepname = fullname.substr(0, idx);
+  auto stepname = fullname.substr(0, idx);
 
   std::shared_ptr<Region> region, rptr;
   if (0 == m_subRegions.find(stepname, region)) {
@@ -224,8 +223,9 @@ void LocalRegion::tombstoneOperationNoThrow(
   }
   return rptr;
 }
- std::shared_ptr<Region> LocalRegion::createSubregion(
-    const char* subregionName, const std::shared_ptr<RegionAttributes>& aRegionAttributes) {
+std::shared_ptr<Region> LocalRegion::createSubregion(
+    const std::string& subregionName,
+    const std::shared_ptr<RegionAttributes>& aRegionAttributes) {
   CHECK_DESTROY_PENDING(TryWriteGuard, LocalRegion::createSubregion);
   {
     std::string namestr = subregionName;
@@ -912,7 +912,7 @@ GfErrType LocalRegion::getNoThrow(
                        m_regionStats->getLoaderCallTimeId(), sampleStartNanos);
       m_regionStats->incLoaderCallsCompleted();
     } catch (const Exception& ex) {
-      LOGERROR("Error in CacheLoader::load: %s: %s", ex.getName(),
+      LOGERROR("Error in CacheLoader::load: %s: %s", ex.getName().c_str(),
                ex.what());
       err = GF_CACHE_LOADER_EXCEPTION;
     } catch (...) {
@@ -1259,7 +1259,7 @@ class DestroyActions {
       // not exist locally
       GfErrType err;
       LOGDEBUG("Region::destroy: region [%s] destroying key [%s]",
-               m_region.getFullPath(),
+               m_region.getFullPath().c_str(),
                Utils::getCacheableKeyString(key)->asChar());
       if ((err = m_region.m_entries->remove(key, oldValue, entry, updateCount,
                                             versionTag, afterRemote)) !=
@@ -1268,7 +1268,7 @@ class DestroyActions {
           LOGDEBUG(
               "Region::destroy: region [%s] destroy key [%s] for "
               "notification having value [%s] failed with %d",
-              m_region.getFullPath(),
+              m_region.getFullPath().c_str(),
               Utils::getCacheableKeyString(key)->asChar(),
               Utils::getCacheableString(oldValue)->asChar(), err);
           err = GF_NOERR;
@@ -1280,7 +1280,8 @@ class DestroyActions {
         LOGDEBUG(
             "Region::destroy: region [%s] destroyed key [%s] having "
             "value [%s]",
-            m_region.getFullPath(), Utils::getCacheableKeyString(key)->asChar(),
+            m_region.getFullPath().c_str(),
+            Utils::getCacheableKeyString(key)->asChar(),
             Utils::getCacheableString(oldValue)->asChar());
         // any cleanup required for the entry (e.g. removing from LRU list)
         if (entry != nullptr) {
@@ -1462,7 +1463,7 @@ class RemoveActions {
       // not exist locally
       GfErrType err;
       LOGDEBUG("Region::remove: region [%s] removing key [%s]",
-               m_region.getFullPath(),
+               m_region.getFullPath().c_str(),
                Utils::getCacheableKeyString(key)->asChar());
       if ((err = m_region.m_entries->remove(key, oldValue, entry, updateCount,
                                             versionTag, afterRemote)) !=
@@ -1471,7 +1472,7 @@ class RemoveActions {
           LOGDEBUG(
               "Region::remove: region [%s] remove key [%s] for "
               "notification having value [%s] failed with %d",
-              m_region.getFullPath(),
+              m_region.getFullPath().c_str(),
               Utils::getCacheableKeyString(key)->asChar(),
               Utils::getCacheableString(oldValue)->asChar(), err);
           err = GF_NOERR;
@@ -1482,7 +1483,8 @@ class RemoveActions {
         LOGDEBUG(
             "Region::remove: region [%s] removed key [%s] having "
             "value [%s]",
-            m_region.getFullPath(), Utils::getCacheableKeyString(key)->asChar(),
+            m_region.getFullPath().c_str(),
+            Utils::getCacheableKeyString(key)->asChar(),
             Utils::getCacheableString(oldValue)->asChar());
         // any cleanup required for the entry (e.g. removing from LRU list)
         if (entry != nullptr) {
@@ -2171,7 +2173,7 @@ GfErrType LocalRegion::localClearNoThrow(
 }
 
 GfErrType LocalRegion::invalidateLocal(
-    const char* name, const std::shared_ptr<CacheableKey>& keyPtr,
+    const std::string& name, const std::shared_ptr<CacheableKey>& keyPtr,
     const std::shared_ptr<Cacheable>& value, const CacheEventFlags eventFlags,
     std::shared_ptr<VersionTag> versionTag) {
   if (keyPtr == nullptr) {
@@ -2187,8 +2189,9 @@ GfErrType LocalRegion::invalidateLocal(
 
   if (!eventFlags.isNotification() || getProcessedMarker()) {
     if (cachingEnabled) {
-      LOGDEBUG("%s: region [%s] invalidating key [%s], value [%s]", name,
-               getFullPath(), Utils::getCacheableKeyString(keyPtr)->asChar(),
+      LOGDEBUG("%s: region [%s] invalidating key [%s], value [%s]",
+               name.c_str(), getFullPath().c_str(),
+               Utils::getCacheableKeyString(keyPtr)->asChar(),
                Utils::getCacheableString(value)->asChar());
       /* adongre - Coverity II
        * CID 29193: Parse warning (PW.PARAMETER_HIDDEN)
@@ -2200,8 +2203,8 @@ GfErrType LocalRegion::invalidateLocal(
           LOGDEBUG(
               "Region::invalidate: region [%s] invalidate key [%s] "
               "failed with error %d",
-              getFullPath(), Utils::getCacheableKeyString(keyPtr)->asChar(),
-              err);
+              getFullPath().c_str(),
+              Utils::getCacheableKeyString(keyPtr)->asChar(), err);
         }
         if (err == GF_CACHE_CONCURRENT_MODIFICATION_EXCEPTION) {
           LOGDEBUG(
@@ -2220,7 +2223,8 @@ GfErrType LocalRegion::invalidateLocal(
         }
       } else {
         LOGDEBUG("Region::invalidate: region [%s] invalidated key [%s]",
-                 getFullPath(), Utils::getCacheableKeyString(keyPtr)->asChar());
+                 getFullPath().c_str(),
+                 Utils::getCacheableKeyString(keyPtr)->asChar());
       }
       // entry/region expiration
       if (!eventFlags.isEvictOrExpire()) {
@@ -2405,20 +2409,23 @@ GfErrType LocalRegion::destroyRegionNoThrow(
   return err;
 }
 
-GfErrType LocalRegion::putLocal(
-    const char* name, bool isCreate, const std::shared_ptr<CacheableKey>& key,
-    const std::shared_ptr<Cacheable>& value,
-    std::shared_ptr<Cacheable>& oldValue, bool cachingEnabled, int updateCount,
-    int destroyTracker, std::shared_ptr<VersionTag> versionTag,
-    DataInput* delta, std::shared_ptr<EventId> eventId) {
+GfErrType LocalRegion::putLocal(const std::string& name, bool isCreate,
+                                const std::shared_ptr<CacheableKey>& key,
+                                const std::shared_ptr<Cacheable>& value,
+                                std::shared_ptr<Cacheable>& oldValue,
+                                bool cachingEnabled, int updateCount,
+                                int destroyTracker,
+                                std::shared_ptr<VersionTag> versionTag,
+                                DataInput* delta,
+                                std::shared_ptr<EventId> eventId) {
   GfErrType err = GF_NOERR;
   bool isUpdate = !isCreate;
   auto& cachePerfStats = m_cacheImpl->getCachePerfStats();
 
   if (cachingEnabled) {
     std::shared_ptr<MapEntryImpl> entry;
-    LOGDEBUG("%s: region [%s] putting key [%s], value [%s]", name,
-             getFullPath(), Utils::getCacheableKeyString(key)->asChar(),
+    LOGDEBUG("%s: region [%s] putting key [%s], value [%s]", name.c_str(),
+             getFullPath().c_str(), Utils::getCacheableKeyString(key)->asChar(),
              Utils::getCacheableString(value)->asChar());
     if (isCreate) {
       err = m_entries->create(key, value, entry, oldValue, updateCount,
@@ -2447,8 +2454,8 @@ GfErrType LocalRegion::putLocal(
     if (err != GF_NOERR) {
       return err;
     }
-    LOGDEBUG("%s: region [%s] %s key [%s], value [%s]", name, getFullPath(),
-             isUpdate ? "updated" : "created",
+    LOGDEBUG("%s: region [%s] %s key [%s], value [%s]", name.c_str(),
+             getFullPath().c_str(), isUpdate ? "updated" : "created",
              Utils::getCacheableKeyString(key)->asChar(),
              Utils::getCacheableString(value)->asChar());
     // entry/region expiration
@@ -2559,8 +2566,8 @@ bool LocalRegion::invokeCacheWriterForEntryEvent(
       }
 
     } catch (const Exception& ex) {
-      LOGERROR("Exception in CacheWriter::%s: %s: %s", eventStr, ex.getName(),
-               ex.what());
+      LOGERROR(std::string("Exception in CacheWriter::") + eventStr + ": " +
+               ex.getName() + ": " + ex.getMessage());
       bCacheWriterReturn = false;
     } catch (...) {
       LOGERROR("Unknown exception in CacheWriter::%s", eventStr);
@@ -2606,8 +2613,8 @@ bool LocalRegion::invokeCacheWriterForRegionEvent(
         m_regionStats->incWriterCallsCompleted();
       }
     } catch (const Exception& ex) {
-      LOGERROR("Exception in CacheWriter::%s: %s", eventStr, ex.getName(),
-               ex.what());
+      LOGERROR(std::string("Exception in CacheWriter::") + eventStr + ": " +
+               ex.getName() + ": " + ex.getMessage());
       bCacheWriterReturn = false;
     } catch (...) {
       LOGERROR("Unknown exception in CacheWriter::%s", eventStr);
@@ -2679,7 +2686,7 @@ GfErrType LocalRegion::invokeCacheListenerForEntryEvent(
     } catch (const Exception& ex) {
       LOGERROR("Exception in CacheListener for key[%s]::%s: %s: %s",
                Utils::getCacheableKeyString(key)->asChar(), eventStr,
-               ex.getName(), ex.what());
+               ex.getName().c_str(), ex.what());
       err = GF_CACHE_LISTENER_EXCEPTION;
     } catch (...) {
       LOGERROR("Unknown exception in CacheListener for key[%s]::%s",
@@ -2739,8 +2746,8 @@ GfErrType LocalRegion::invokeCacheListenerForRegionEvent(
         m_regionStats->incListenerCallsCompleted();
       }
     } catch (const Exception& ex) {
-      LOGERROR("Exception in CacheListener::%s: %s: %s", eventStr, ex.getName(),
-               ex.what());
+      LOGERROR("Exception in CacheListener::%s: %s: %s", eventStr,
+               ex.getName().c_str(), ex.what());
       err = GF_CACHE_LISTENER_EXCEPTION;
     } catch (...) {
       LOGERROR("Unknown exception in CacheListener::%s", eventStr);
@@ -2765,12 +2772,12 @@ void LocalRegion::updateAccessAndModifiedTimeForEntry(std::shared_ptr<MapEntryIm
       keyStr = Utils::getCacheableKeyString(key);
     }
     LOGDEBUG("Setting last accessed time for key [%s] in region %s to %d",
-             keyStr->asChar(), getFullPath(),
+             keyStr->asChar(), getFullPath().c_str(),
              currTime.time_since_epoch().count());
     expProps.updateLastAccessTime(currTime);
     if (modified) {
       LOGDEBUG("Setting last modified time for key [%s] in region %s to %d",
-               keyStr->asChar(), getFullPath(),
+               keyStr->asChar(), getFullPath().c_str(),
                currTime.time_since_epoch().count());
       expProps.updateLastModifiedTime(currTime);
     }
@@ -3051,7 +3058,8 @@ void LocalRegion::adjustCacheListener(
   m_listener = aListener;
 }
 
-void LocalRegion::adjustCacheListener(const char* lib, const char* func) {
+void LocalRegion::adjustCacheListener(const std::string& lib,
+                                      const std::string& func) {
   WriteGuard guard(m_rwLock);
   setCacheListener(lib, func);
   m_listener = m_regionAttributes->getCacheListener();
@@ -3064,7 +3072,8 @@ void LocalRegion::adjustCacheLoader(
   m_loader = aLoader;
 }
 
-void LocalRegion::adjustCacheLoader(const char* lib, const char* func) {
+void LocalRegion::adjustCacheLoader(const std::string& lib,
+                                    const std::string& func) {
   WriteGuard guard(m_rwLock);
   setCacheLoader(lib, func);
   m_loader = m_regionAttributes->getCacheLoader();
@@ -3076,7 +3085,8 @@ void LocalRegion::adjustCacheWriter(const std::shared_ptr<CacheWriter>& aWriter)
   m_writer = aWriter;
 }
 
-void LocalRegion::adjustCacheWriter(const char* lib, const char* func) {
+void LocalRegion::adjustCacheWriter(const std::string& lib,
+                                    const std::string& func) {
   WriteGuard guard(m_rwLock);
   setCacheWriter(lib, func);
   m_writer = m_regionAttributes->getCacheWriter();
@@ -3102,7 +3112,7 @@ void LocalRegion::invokeAfterAllEndPointDisconnected() {
       m_listener->afterRegionDisconnected(shared_from_this());
     } catch (const Exception& ex) {
       LOGERROR("Exception in CacheListener::afterRegionDisconnected: %s: %s",
-               ex.getName(), ex.what());
+               ex.getName().c_str(), ex.what());
     } catch (...) {
       LOGERROR("Unknown exception in CacheListener::afterRegionDisconnected");
     }
diff --git a/cppcache/src/LocalRegion.hpp b/cppcache/src/LocalRegion.hpp
index abe7233e..ab019287 100644
--- a/cppcache/src/LocalRegion.hpp
+++ b/cppcache/src/LocalRegion.hpp
@@ -135,8 +135,8 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
               bool shared = false, bool enableTimeStatistics = true);
   virtual ~LocalRegion();
 
-  const char* getName() const override;
-  const char* getFullPath() const override;
+  const std::string& getName() const override;
+  const std::string& getFullPath() const override;
   std::shared_ptr<Region> getParentRegion() const override;
   std::shared_ptr<RegionAttributes> getAttributes() const override {
     return m_regionAttributes;
@@ -163,9 +163,9 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
                          nullptr) override;
   void localDestroyRegion(const std::shared_ptr<Serializable>&
                               aCallbackArgument = nullptr) override;
-  std::shared_ptr<Region> getSubregion(const char* path) override;
+  std::shared_ptr<Region> getSubregion(const std::string& path) override;
   std::shared_ptr<Region> createSubregion(
-      const char* subregionName,
+      const std::string& subregionName,
       const std::shared_ptr<RegionAttributes>& aRegionAttributes) override;
   std::vector<std::shared_ptr<Region>> subregions(
       const bool recursive) override;
@@ -344,7 +344,7 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   //  moved putLocal to public since this is used by a few other
   // classes like CacheableObjectPartList now
   /** put an entry in local cache without invoking any callbacks */
-  GfErrType putLocal(const char* name, bool isCreate,
+  GfErrType putLocal(const std::string& name, bool isCreate,
                      const std::shared_ptr<CacheableKey>& keyPtr,
                      const std::shared_ptr<Cacheable>& valuePtr,
                      std::shared_ptr<Cacheable>& oldValue, bool cachingEnabled,
@@ -352,7 +352,7 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
                      std::shared_ptr<VersionTag> versionTag,
                      DataInput* delta = nullptr,
                      std::shared_ptr<EventId> eventId = nullptr);
-  GfErrType invalidateLocal(const char* name,
+  GfErrType invalidateLocal(const std::string& name,
                             const std::shared_ptr<CacheableKey>& keyPtr,
                             const std::shared_ptr<Cacheable>& value,
                             const CacheEventFlags eventFlags,
@@ -385,16 +385,16 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   /* above public methods are inherited from RegionInternal */
 
   virtual void adjustCacheListener(const std::shared_ptr<CacheListener>& aListener) override;
-  virtual void adjustCacheListener(const char* libpath,
-                                   const char* factoryFuncName) override;
+  virtual void adjustCacheListener(const std::string& libpath,
+                                   const std::string& factoryFuncName) override;
   virtual void adjustCacheLoader(
       const std::shared_ptr<CacheLoader>& aLoader) override;
-  virtual void adjustCacheLoader(const char* libpath,
-                                 const char* factoryFuncName) override;
+  virtual void adjustCacheLoader(const std::string& libpath,
+                                 const std::string& factoryFuncName) override;
   virtual void adjustCacheWriter(
       const std::shared_ptr<CacheWriter>& aWriter) override;
-  virtual void adjustCacheWriter(const char* libpath,
-                                 const char* factoryFuncName) override;
+  virtual void adjustCacheWriter(const std::string& libpath,
+                                 const std::string& factoryFuncName) override;
   virtual CacheImpl* getCacheImpl() const override;
   virtual void evict(int32_t percentage) override;
 
@@ -462,7 +462,9 @@ class CPPCACHE_EXPORT LocalRegion : public RegionInternal {
   virtual GfErrType destroyRegionNoThrow_remote(
       const std::shared_ptr<Serializable>& aCallbackArgument);
   virtual GfErrType unregisterKeysBeforeDestroyRegion();
-  virtual const std::shared_ptr<Pool>& getPool() override { return m_attachedPool; }
+  virtual const std::shared_ptr<Pool>& getPool() const override {
+    return m_attachedPool;
+  }
 
   void setPool(const std::shared_ptr<Pool>& p) { m_attachedPool = p; }
 
diff --git a/cppcache/src/Log.cpp b/cppcache/src/Log.cpp
index 4ebab82a..d7105c75 100644
--- a/cppcache/src/Log.cpp
+++ b/cppcache/src/Log.cpp
@@ -495,7 +495,7 @@ const char* Log::levelToChars(Log::LogLevel level) {
   }
 }
 
-Log::LogLevel Log::charsToLevel(const char* chars) {
+Log::LogLevel Log::charsToLevel(const std::string& chars) {
   std::string level = chars;
 
   if (level.empty()) return Log::None;
@@ -553,6 +553,10 @@ char* Log::formatLogLine(char* buf, Log::LogLevel level) {
   return buf;
 }
 
+void Log::put(LogLevel level, const std::string& msg) {
+  put(level, msg.c_str());
+}
+
 // int g_count = 0;
 void Log::put(LogLevel level, const char* msg) {
   ACE_Guard<ACE_Thread_Mutex> guard(*g_logMutex);
@@ -703,15 +707,15 @@ void Log::put(LogLevel level, const char* msg) {
 }
 
 void Log::putThrow(LogLevel level, const char* msg, const Exception& ex) {
-  char buf[128] = {0};
-  ACE_OS::snprintf(buf, 128, "Geode exception %s thrown: ", ex.getName());
-  put(level, (std::string(buf) + ex.what() + "\n" + msg).c_str());
+  std::string message = "Geode exception " + ex.getName() +
+                        " thrown: " + ex.getMessage() + "\n" + msg;
+  put(level, message);
 }
 
 void Log::putCatch(LogLevel level, const char* msg, const Exception& ex) {
-  char buf[128] = {0};
-  ACE_OS::snprintf(buf, 128, "Geode exception %s caught: ", ex.getName());
-  put(level, (std::string(buf) + ex.what() + "\n" + msg).c_str());
+  std::string message = "Geode exception " + ex.getName() +
+                        " caught: " + ex.getMessage() + "\n" + msg;
+  put(level, message);
 }
 
 void Log::enterFn(LogLevel level, const char* functionName) {
diff --git a/cppcache/src/PartitionResolver.cpp b/cppcache/src/PartitionResolver.cpp
index 584c4309..f7ebef45 100644
--- a/cppcache/src/PartitionResolver.cpp
+++ b/cppcache/src/PartitionResolver.cpp
@@ -25,7 +25,10 @@ PartitionResolver::PartitionResolver() {}
 
 PartitionResolver::~PartitionResolver() {}
 
-const char* PartitionResolver::getName() { return "PartitionResolver"; }
+const std::string& PartitionResolver::getName() {
+  static std::string name = "PartitionResolver";
+  return name;
+}
 }  // namespace client
 }  // namespace geode
 }  // namespace apache
diff --git a/cppcache/src/PdxFieldType.cpp b/cppcache/src/PdxFieldType.cpp
index 668a823e..5157531a 100644
--- a/cppcache/src/PdxFieldType.cpp
+++ b/cppcache/src/PdxFieldType.cpp
@@ -33,35 +33,34 @@ namespace apache {
 namespace geode {
 namespace client {
 
-PdxFieldType::PdxFieldType() : Serializable() {
-  // m_fieldName = nullptr;
-  // m_className = nullptr;
-  m_typeId = 0;
-  m_sequenceId = 0;
-  m_isVariableLengthType = false;
-  m_fixedSize = 0;
-  m_varLenFieldIdx = 0;
-  m_isIdentityField = false;
-  m_relativeOffset = 0;
-  m_vlOffsetIndex = 0;
-}
-
-PdxFieldType::PdxFieldType(const char* fieldName, const char* className,
+PdxFieldType::PdxFieldType()
+    : Serializable(),
+      m_fieldName(),
+      m_className(),
+      m_typeId(0),
+      m_sequenceId(0),
+      m_isVariableLengthType(false),
+      m_fixedSize(0),
+      m_varLenFieldIdx(0),
+      m_isIdentityField(false),
+      m_relativeOffset(0),
+      m_vlOffsetIndex(0) {}
+
+PdxFieldType::PdxFieldType(std::string fieldName, std::string className,
                            uint8_t typeId, int32_t sequenceId,
                            bool isVariableLengthType, int32_t fixedSize,
                            int32_t varLenFieldIdx)
-    : Serializable() {
-  m_fieldName = fieldName;
-  m_className = className;
-  m_typeId = typeId;
-  m_sequenceId = sequenceId;  // start with 0
-  m_isVariableLengthType = isVariableLengthType;
-  m_fixedSize = fixedSize;
-  m_varLenFieldIdx = varLenFieldIdx;  // start with 0
-  m_isIdentityField = false;
-  m_relativeOffset = 0;
-  m_vlOffsetIndex = 0;
-}
+    : Serializable(),
+      m_fieldName(fieldName),
+      m_className(className),
+      m_typeId(typeId),
+      m_sequenceId(sequenceId),
+      m_isVariableLengthType(isVariableLengthType),
+      m_fixedSize(fixedSize),
+      m_varLenFieldIdx(varLenFieldIdx),
+      m_isIdentityField(false),
+      m_relativeOffset(0),
+      m_vlOffsetIndex(0) {}
 
 PdxFieldType::~PdxFieldType() {}
 
@@ -142,24 +141,14 @@ int32_t PdxFieldType::getFixedTypeSize() const {
   }
   return -1;
 }
-std::shared_ptr<CacheableString> PdxFieldType::toString() const {
+std::string PdxFieldType::toString() const {
   char stringBuf[1024];
-  /* adongre  - Coverity II
-   * CID 29208: 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(
       stringBuf, 1024,
       " PdxFieldName=%s TypeId=%d VarLenFieldIdx=%d sequenceid=%d\n",
       this->m_fieldName.c_str(), this->m_typeId, this->m_varLenFieldIdx,
       this->m_sequenceId);
-  return CacheableString::create(stringBuf);
+  return std::string(stringBuf);
 }
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/PdxFieldType.hpp b/cppcache/src/PdxFieldType.hpp
index a843f8bd..2a4f189e 100644
--- a/cppcache/src/PdxFieldType.hpp
+++ b/cppcache/src/PdxFieldType.hpp
@@ -51,7 +51,7 @@ class CPPCACHE_EXPORT PdxFieldType : public Serializable {
   int32_t getFixedTypeSize() const;
 
  public:
-  PdxFieldType(const char* fieldName, const char* className, uint8_t typeId,
+  PdxFieldType(std::string fieldName, std::string className, uint8_t typeId,
                int32_t sequenceId, bool isVariableLengthType, int32_t fixedSize,
                int32_t varLenFieldIdx);
 
@@ -82,20 +82,20 @@ class CPPCACHE_EXPORT PdxFieldType : public Serializable {
 
   // TODO:add more getters for the remaining members.
 
-  virtual void toData(DataOutput& output) const;
+  virtual void toData(DataOutput& output) const override;
 
-  virtual void fromData(DataInput& input);
+  virtual void fromData(DataInput& input) override;
 
-  virtual int32_t classId() const { return m_typeId; }
+  virtual int32_t classId() const override { return m_typeId; }
 
-  virtual uint32_t objectSize() const {
+  virtual uint32_t objectSize() const override {
     uint32_t size = sizeof(PdxFieldType);
     size += static_cast<uint32_t>(m_className.length());
     size += static_cast<uint32_t>(m_fieldName.length());
     return size;
   }
 
-  std::shared_ptr<CacheableString> toString() const;
+  std::string toString() const override;
 
   virtual ~PdxFieldType();
 
diff --git a/cppcache/src/PdxHelper.cpp b/cppcache/src/PdxHelper.cpp
index 5ee0613e..a15f2caf 100644
--- a/cppcache/src/PdxHelper.cpp
+++ b/cppcache/src/PdxHelper.cpp
@@ -21,6 +21,10 @@
  *      Author: npatel
  */
 
+#include <geode/Cache.hpp>
+#include <geode/DataInput.hpp>
+#include <geode/PoolManager.hpp>
+
 #include "PdxHelper.hpp"
 #include "PdxTypeRegistry.hpp"
 #include "PdxWriterWithTypeCollector.hpp"
@@ -34,13 +38,13 @@
 #include "PdxRemoteWriter.hpp"
 #include "CacheRegionHelper.hpp"
 #include "ThinClientPoolDM.hpp"
-#include <geode/Cache.hpp>
-#include <geode/DataInput.hpp>
-#include <geode/PoolManager.hpp>
+#include "DataInputInternal.hpp"
+#include "DataOutputInternal.hpp"
 
 namespace apache {
 namespace geode {
 namespace client {
+
 uint8_t PdxHelper::PdxHeader = 8;
 
 PdxHelper::PdxHelper() {}
@@ -57,7 +61,6 @@ void PdxHelper::serializePdx(DataOutput& output,
 
 void PdxHelper::serializePdx(
     DataOutput& output, const std::shared_ptr<PdxSerializable>& pdxObject) {
-  const char* pdxClassname = nullptr;
 
   auto pdxII = std::dynamic_pointer_cast<PdxInstanceImpl>(pdxObject);
   auto cacheImpl = CacheRegionHelper::getCacheImpl(output.getCache());
@@ -70,7 +73,8 @@ void PdxHelper::serializePdx(
         piPt->getTypeId() ==
             0)  // from pdxInstance factory need to get typeid from server
     {
-      int typeId = pdxTypeRegistry->getPDXIdForType(piPt, output.getPoolName());
+      int typeId = pdxTypeRegistry->getPDXIdForType(
+          piPt, DataOutputInternal::getPoolName(output).c_str());
       pdxII->setPdxId(typeId);
     }
     auto plw = std::make_shared<PdxLocalWriter>(output, piPt, pdxTypeRegistry);
@@ -85,25 +89,25 @@ void PdxHelper::serializePdx(
     return;
   }
 
-  const char* pdxType = pdxObject->getClassName();
-  pdxClassname = pdxType;
-  auto localPdxType = pdxTypeRegistry->getLocalPdxType(pdxType);
+  auto&& className = pdxObject->getClassName();
+  auto localPdxType = pdxTypeRegistry->getLocalPdxType(className);
 
   if (localPdxType == nullptr) {
     // need to grab type info, as fromdata is not called yet
 
-    auto ptc = std::make_shared<PdxWriterWithTypeCollector>(output, pdxType,
+    auto ptc = std::make_shared<PdxWriterWithTypeCollector>(output, className,
                                                             pdxTypeRegistry);
     pdxObject->toData(std::dynamic_pointer_cast<PdxWriter>(ptc));
     auto nType = ptc->getPdxLocalType();
 
     nType->InitializeType();
     int32_t nTypeId = pdxTypeRegistry->getPDXIdForType(
-        pdxType, output.getPoolName(), nType, true);
+        className.c_str(), DataOutputInternal::getPoolName(output).c_str(),
+        nType, true);
     nType->setTypeId(nTypeId);
 
     ptc->endObjectWriting();
-    pdxTypeRegistry->addLocalPdxType(pdxType, nType);
+    pdxTypeRegistry->addLocalPdxType(className, nType);
     pdxTypeRegistry->addPdxType(nTypeId, nType);
 
     if (cacheImpl != nullptr) {
@@ -131,8 +135,8 @@ void PdxHelper::serializePdx(
       prw = std::make_shared<PdxRemoteWriter>(output, mergedPdxType, pd,
                                               pdxTypeRegistry);
     } else {
-      prw = std::make_shared<PdxRemoteWriter>(output, pdxClassname,
-                                              pdxTypeRegistry);
+      prw =
+          std::make_shared<PdxRemoteWriter>(output, className, pdxTypeRegistry);
     }
     pdxObject->toData(std::dynamic_pointer_cast<PdxWriter>(prw));
     prw->endObjectWriting();
@@ -147,10 +151,10 @@ void PdxHelper::serializePdx(
     }
   }
 }
+
 std::shared_ptr<PdxSerializable> PdxHelper::deserializePdx(
     DataInput& dataInput, bool forceDeserialize, int32_t typeId,
     int32_t length) {
-  char* pdxClassname = nullptr;
   std::shared_ptr<PdxSerializable> pdxObjectptr = nullptr;
   std::shared_ptr<PdxType> pdxLocalType = nullptr;
 
@@ -161,13 +165,14 @@ std::shared_ptr<PdxSerializable> PdxHelper::deserializePdx(
   auto pType = pdxTypeRegistry->getPdxType(typeId);
   if (pType != nullptr) {  // this may happen with PdxInstanceFactory {
     pdxLocalType = pdxTypeRegistry->getLocalPdxType(
-        pType->getPdxClassName());  // this should be fine for IPdxTypeMapper
+        pType->getPdxClassName()
+            .c_str());  // this should be fine for IPdxTypeMapper
   }
   if (pType != nullptr && pdxLocalType != nullptr)  // type found
   {
-    pdxClassname = pType->getPdxClassName();
-    LOGDEBUG("deserializePdx ClassName = %s, isLocal = %d ",
-             pType->getPdxClassName(), pType->isLocal());
+    auto&& pdxClassname = pType->getPdxClassName();
+    LOGDEBUG("deserializePdx ClassName = " + pdxClassname +
+             ", isLocal = " + std::to_string(pType->isLocal()));
 
     pdxObjectptr = serializationRegistry->getPdxType(pdxClassname);
     if (pType->isLocal())  // local type no need to read Unread data
@@ -197,7 +202,7 @@ std::shared_ptr<PdxSerializable> PdxHelper::deserializePdx(
       pType = std::static_pointer_cast<PdxType>(
           serializationRegistry->GetPDXTypeById(
               cacheImpl->getCache()->getPoolManager().find(
-                  dataInput.getPoolName()),
+                  DataInputInternal::getPoolName(dataInput)),
               typeId));
       pdxLocalType = pdxTypeRegistry->getLocalPdxType(pType->getPdxClassName());
     }
@@ -228,7 +233,8 @@ std::shared_ptr<PdxSerializable> PdxHelper::deserializePdx(
        // Need to know local type and then merge type
        pdxLocalType->InitializeType();
        pdxLocalType->setTypeId(pdxTypeRegistry->getPDXIdForType(
-           pdxObjectptr->getClassName(), dataInput.getPoolName(), pdxLocalType,
+           pdxObjectptr->getClassName(),
+           DataInputInternal::getPoolName(dataInput).c_str(), pdxLocalType,
            true));
        pdxLocalType->setLocal(true);
        pdxTypeRegistry->addLocalPdxType(pdxRealObject->getClassName(),
@@ -306,7 +312,7 @@ std::shared_ptr<PdxSerializable> PdxHelper::deserializePdx(
       auto pType = std::static_pointer_cast<PdxType>(
           serializationRegistry->GetPDXTypeById(
               cacheImpl->getCache()->getPoolManager().find(
-                  dataInput.getPoolName()),
+                  DataInputInternal::getPoolName(dataInput)),
               typeId));
       pdxTypeRegistry->addLocalPdxType(pType->getPdxClassName(), pType);
       pdxTypeRegistry->addPdxType(pType->getTypeId(), pType);
@@ -343,7 +349,8 @@ void PdxHelper::createMergedType(std::shared_ptr<PdxType> localType, std::shared
     mergedVersion->InitializeType();
     if (mergedVersion->getTypeId() == 0) {
       mergedVersion->setTypeId(serializaionRegistry->GetPDXIdForType(
-          dataInput.getCache()->getPoolManager().find(dataInput.getPoolName()),
+          dataInput.getCache()->getPoolManager().find(
+              DataInputInternal::getPoolName(dataInput)),
           mergedVersion));
     }
 
diff --git a/cppcache/src/PdxInstanceFactoryImpl.cpp b/cppcache/src/PdxInstanceFactoryImpl.cpp
index 006d853c..495c8aff 100644
--- a/cppcache/src/PdxInstanceFactoryImpl.cpp
+++ b/cppcache/src/PdxInstanceFactoryImpl.cpp
@@ -27,7 +27,7 @@ namespace client {
 PdxInstanceFactoryImpl::~PdxInstanceFactoryImpl() {}
 
 PdxInstanceFactoryImpl::PdxInstanceFactoryImpl(
-    const char* className, CachePerfStats* cachePerfStats,
+    std::string className, CachePerfStats* cachePerfStats,
     std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry, const Cache* cache,
     bool enableTimeStatistics)
     : m_pdxType(std::make_shared<PdxType>(pdxTypeRegistry, className, false)),
@@ -35,12 +35,7 @@ PdxInstanceFactoryImpl::PdxInstanceFactoryImpl(
       m_cachePerfStats(cachePerfStats),
       m_pdxTypeRegistry(pdxTypeRegistry),
       m_cache(cache),
-      m_enableTimeStatistics(enableTimeStatistics) {
-  if (className == nullptr ||
-      *className == '\0') {  // COVERITY ---> 30289 Same on both sides
-    throw IllegalStateException("className should not be null.");
-  }
-}
+      m_enableTimeStatistics(enableTimeStatistics) {}
 
 std::unique_ptr<PdxInstance> PdxInstanceFactoryImpl::create() {
   if (m_created) {
@@ -54,16 +49,16 @@ std::unique_ptr<PdxInstance> PdxInstanceFactoryImpl::create() {
   return pi;
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeChar(
-    const char* fieldName, char16_t value) {
+    const std::string& fieldName, char16_t value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                      PdxTypes::CHAR_SIZE);
- auto cacheableObject = CacheableCharacter::create(value);
- m_FieldVsValues.emplace(fieldName, cacheableObject);
- return shared_from_this();
+  auto cacheableObject = CacheableCharacter::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeChar(
-    const char* fieldName, char value) {
+    const std::string& fieldName, char value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                      PdxTypes::CHAR_SIZE);
@@ -71,236 +66,191 @@ std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeChar(
   m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeBoolean(
-    const char* fieldName, bool value) {
-   isFieldAdded(fieldName);
-   m_pdxType->addFixedLengthTypeField(fieldName, "bool", PdxFieldTypes::BOOLEAN,
-                                      PdxTypes::BOOLEAN_SIZE);
-   auto cacheableObject = CacheableBoolean::create(value);
-   m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-       fieldName, cacheableObject));
-   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeByte(
-     const char* fieldName, int8_t value) {
-   isFieldAdded(fieldName);
-   m_pdxType->addFixedLengthTypeField(fieldName, "byte", PdxFieldTypes::BYTE,
-                                      PdxTypes::BYTE_SIZE);
-   auto cacheableObject = CacheableByte::create(value);
-   m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-       fieldName, cacheableObject));
-   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeShort(
-     const char* fieldName, int16_t value) {
-   isFieldAdded(fieldName);
-   m_pdxType->addFixedLengthTypeField(fieldName, "short", PdxFieldTypes::SHORT,
-                                      PdxTypes::SHORT_SIZE);
-   auto cacheableObject = CacheableInt16::create(value);
-   m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-       fieldName, cacheableObject));
-   return shared_from_this();
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeBoolean(
+    const std::string& fieldName, bool value) {
+  isFieldAdded(fieldName);
+  m_pdxType->addFixedLengthTypeField(fieldName, "bool", PdxFieldTypes::BOOLEAN,
+                                     PdxTypes::BOOLEAN_SIZE);
+  auto cacheableObject = CacheableBoolean::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  return shared_from_this();
+}
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeByte(
+    const std::string& fieldName, int8_t value) {
+  isFieldAdded(fieldName);
+  m_pdxType->addFixedLengthTypeField(fieldName, "byte", PdxFieldTypes::BYTE,
+                                     PdxTypes::BYTE_SIZE);
+  auto cacheableObject = CacheableByte::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  return shared_from_this();
+}
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeShort(
+    const std::string& fieldName, int16_t value) {
+  isFieldAdded(fieldName);
+  m_pdxType->addFixedLengthTypeField(fieldName, "short", PdxFieldTypes::SHORT,
+                                     PdxTypes::SHORT_SIZE);
+  auto cacheableObject = CacheableInt16::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeInt(
-    const char* fieldName, int32_t value) {
+    const std::string& fieldName, int32_t value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "int", PdxFieldTypes::INT,
                                      PdxTypes::INTEGER_SIZE);
   auto cacheableObject = CacheableInt32::create(value);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeLong(
-    const char* fieldName, int64_t value) {
+    const std::string& fieldName, int64_t value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "long", PdxFieldTypes::LONG,
                                      PdxTypes::LONG_SIZE);
   auto cacheableObject = CacheableInt64::create(value);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeFloat(const char* fieldName,
-                                                         float value) {
-   isFieldAdded(fieldName);
-   m_pdxType->addFixedLengthTypeField(fieldName, "float", PdxFieldTypes::FLOAT,
-                                      PdxTypes::FLOAT_SIZE);
-   auto cacheableObject = CacheableFloat::create(value);
-   m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-       fieldName, cacheableObject));
-   return shared_from_this();
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeFloat(
+    const std::string& fieldName, float value) {
+  isFieldAdded(fieldName);
+  m_pdxType->addFixedLengthTypeField(fieldName, "float", PdxFieldTypes::FLOAT,
+                                     PdxTypes::FLOAT_SIZE);
+  auto cacheableObject = CacheableFloat::create(value);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeDouble(
-    const char* fieldName, double value) {
+    const std::string& fieldName, double value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "double", PdxFieldTypes::DOUBLE,
                                      PdxTypes::DOUBLE_SIZE);
   auto cacheableObject = CacheableDouble::create(value);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeWideString(
-    const char* fieldName, const wchar_t* value) {
+    const std::string& fieldName, const wchar_t* value) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "string",
                                         PdxFieldTypes::STRING);
   auto cacheableObject = CacheableString::create(value);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeString(
-    const char* fieldName, const char* value) {
+    const std::string& fieldName, const char* value) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "string",
                                         PdxFieldTypes::STRING);
   auto cacheableObject = CacheableString::create(value);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeObject(
-    const char* fieldName, std::shared_ptr<Cacheable> value) {
+    const std::string& fieldName, std::shared_ptr<Cacheable> value) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "Object",
                                         PdxFieldTypes::OBJECT);
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, value));
+  m_FieldVsValues.emplace(fieldName, value);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeObjectArray(
-    const char* fieldName, std::shared_ptr<CacheableObjectArray> value) {
+    const std::string& fieldName, std::shared_ptr<CacheableObjectArray> value) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "Object[]",
                                         PdxFieldTypes::OBJECT_ARRAY);
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, value));
+  m_FieldVsValues.emplace(fieldName, value);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeBooleanArray(
-    const char* fieldName, bool* value, int32_t length) {
+    const std::string& fieldName, bool* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "bool[]",
                                         PdxFieldTypes::BOOLEAN_ARRAY);
   auto cacheableObject = BooleanArray::create(value, length);
-  m_FieldVsValues.insert(
-      std::pair<std::string, std::shared_ptr<Cacheable>>(fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeWideCharArray(
-    const char* fieldName, wchar_t* value, int32_t length) {
+    const std::string& fieldName, wchar_t* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "char[]",
                                         PdxFieldTypes::CHAR_ARRAY);
   auto cacheableObject = CharArray::create(value, length);
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeCharArray(
-    const char* fieldName, char* value, int32_t length) {
+    const std::string& fieldName, char* value, int32_t length) {
   isFieldAdded(fieldName);
   size_t size = strlen(value) + 1;
   wchar_t* tempWideCharArray = new wchar_t[size];
   mbstowcs(tempWideCharArray, value, size);
   m_pdxType->addVariableLengthTypeField(fieldName, "char[]",
                                         PdxFieldTypes::CHAR_ARRAY);
- auto cacheableObject = CharArray::create(tempWideCharArray, length);
- m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-     fieldName, cacheableObject));
- delete[] tempWideCharArray;
- return shared_from_this();
+  auto cacheableObject = CharArray::create(tempWideCharArray, length);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  delete[] tempWideCharArray;
+  return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeByteArray(
-    const char* fieldName, int8_t* value, int32_t length) {
+    const std::string& fieldName, int8_t* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "byte[]",
                                         PdxFieldTypes::BYTE_ARRAY);
- auto cacheableObject =
+  auto cacheableObject =
       CacheableBytes::create(reinterpret_cast<uint8_t*>(value), length);
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeShortArray(
-    const char* fieldName, int16_t* value, int32_t length) {
+    const std::string& fieldName, int16_t* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "short[]",
                                         PdxFieldTypes::SHORT_ARRAY);
   auto cacheableObject = CacheableInt16Array::create(value, length);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
 std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeIntArray(
-    const char* fieldName, int32_t* value, int32_t length) {
+    const std::string& fieldName, int32_t* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "int32[]",
                                         PdxFieldTypes::INT_ARRAY);
   auto cacheableObject = CacheableInt32Array::create(value, length);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeLongArray(
-    const char* fieldName, int64_t* value, int32_t length) {
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeLongArray(
+    const std::string& fieldName, int64_t* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "int64[]",
                                         PdxFieldTypes::LONG_ARRAY);
   auto cacheableObject = CacheableInt64Array::create(value, length);
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeFloatArray(
-    const char* fieldName, float* value, int32_t length) {
+}
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeFloatArray(
+    const std::string& fieldName, float* value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "float[]",
                                         PdxFieldTypes::FLOAT_ARRAY);
   auto cacheableObject = CacheableFloatArray::create(value, length);
-  m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-      fieldName, cacheableObject));
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
+  return shared_from_this();
+}
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeDoubleArray(
+    const std::string& fieldName, double* value, int32_t length) {
+  isFieldAdded(fieldName);
+  m_pdxType->addVariableLengthTypeField(fieldName, "double[]",
+                                        PdxFieldTypes::DOUBLE_ARRAY);
+  auto cacheableObject = CacheableDoubleArray::create(value, length);
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeDoubleArray(
-     const char* fieldName, double* value, int32_t length) {
-   isFieldAdded(fieldName);
-   m_pdxType->addVariableLengthTypeField(fieldName, "double[]",
-                                         PdxFieldTypes::DOUBLE_ARRAY);
-   auto cacheableObject = CacheableDoubleArray::create(value, length);
-   m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-       fieldName, cacheableObject));
-   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeStringArray(
-     const char* fieldName, char** value, int32_t length) {
-   isFieldAdded(fieldName);
-   m_pdxType->addVariableLengthTypeField(fieldName, "string[]",
-                                         PdxFieldTypes::STRING_ARRAY);
-   std::shared_ptr<CacheableString>* ptrArr = nullptr;
-   if (length > 0) {
-     ptrArr = new std::shared_ptr<CacheableString>[length];
-     for (int32_t i = 0; i < length; i++) {
-       ptrArr[i] = CacheableString::create(value[i]);
-     }
-   }
-   if (length > 0) {
-     auto cacheableObject = CacheableStringArray::create(ptrArr, length);
-     m_FieldVsValues.insert(std::pair<const char*, std::shared_ptr<Cacheable>>(
-         fieldName, cacheableObject));
-   }
-   /* adongre  - Coverity II
-    * CID 29199: Resource leak (RESOURCE_LEAK)
-    */
-   if (ptrArr) {
-     delete[] ptrArr;
-   }
-   return shared_from_this();
 }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeWideStringArray(
-    const char* fieldName, wchar_t** value, int32_t length) {
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeStringArray(
+    const std::string& fieldName, char** value, int32_t length) {
   isFieldAdded(fieldName);
   m_pdxType->addVariableLengthTypeField(fieldName, "string[]",
                                         PdxFieldTypes::STRING_ARRAY);
@@ -313,75 +263,78 @@ std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeIntArray(
   }
   if (length > 0) {
     auto cacheableObject = CacheableStringArray::create(ptrArr, length);
-    m_FieldVsValues.insert(
-        std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, cacheableObject));
+    m_FieldVsValues.emplace(fieldName, cacheableObject);
   }
-  /* adongre - Coverity II
-   * CID 29200: Resource leak (RESOURCE_LEAK)
-   */
   if (ptrArr) {
     delete[] ptrArr;
   }
   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeDate(
-    const char* fieldName, std::shared_ptr<CacheableDate> value) {
+}
+std::shared_ptr<PdxInstanceFactory>
+PdxInstanceFactoryImpl::writeWideStringArray(const std::string& fieldName,
+                                             wchar_t** value, int32_t length) {
+  isFieldAdded(fieldName);
+  m_pdxType->addVariableLengthTypeField(fieldName, "string[]",
+                                        PdxFieldTypes::STRING_ARRAY);
+  std::shared_ptr<CacheableString>* ptrArr = nullptr;
+  if (length > 0) {
+    ptrArr = new std::shared_ptr<CacheableString>[length];
+    for (int32_t i = 0; i < length; i++) {
+      ptrArr[i] = CacheableString::create(value[i]);
+    }
+  }
+  if (length > 0) {
+    auto cacheableObject = CacheableStringArray::create(ptrArr, length);
+    m_FieldVsValues.emplace(fieldName, cacheableObject);
+  }
+  if (ptrArr) {
+    delete[] ptrArr;
+  }
+  return shared_from_this();
+}
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeDate(
+    const std::string& fieldName, std::shared_ptr<CacheableDate> value) {
   isFieldAdded(fieldName);
   m_pdxType->addFixedLengthTypeField(fieldName, "Date", PdxFieldTypes::DATE,
                                      PdxTypes::DATE_SIZE /*+ 1*/);
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, value));
+  m_FieldVsValues.emplace(fieldName, value);
+  return shared_from_this();
+}
+std::shared_ptr<PdxInstanceFactory>
+PdxInstanceFactoryImpl::writeArrayOfByteArrays(const std::string& fieldName,
+                                               int8_t** value,
+                                               int32_t arrayLength,
+                                               int32_t* elementLength) {
+  isFieldAdded(fieldName);
+  m_pdxType->addVariableLengthTypeField(fieldName, "byte[][]",
+                                        PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS);
+  auto cacheableObject = CacheableVector::create();
+  for (int i = 0; i < arrayLength; i++) {
+    auto ptr = CacheableBytes::create(reinterpret_cast<uint8_t*>(value[i]),
+                                      elementLength[i]);
+    cacheableObject->push_back(ptr);
+  }
+  m_FieldVsValues.emplace(fieldName, cacheableObject);
   return shared_from_this();
 }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::writeArrayOfByteArrays(
-    const char* fieldName, int8_t** value, int32_t arrayLength,
-    int32_t* elementLength) {
-   isFieldAdded(fieldName);
-   m_pdxType->addVariableLengthTypeField(fieldName, "byte[][]",
-                                         PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS);
-   auto cacheableObject = CacheableVector::create();
-   for (int i = 0; i < arrayLength; i++) {
-     auto ptr = CacheableBytes::create(reinterpret_cast<uint8_t*>(value[i]),
-                                       elementLength[i]);
-     cacheableObject->push_back(ptr);
+std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::markIdentityField(
+    const std::string& fieldName) {
+  auto pfType = m_pdxType->getPdxField(fieldName);
+  if (pfType == nullptr) {
+    throw IllegalStateException(
+        "Field must be added before calling MarkIdentityField ");
   }
-  m_FieldVsValues.insert(
-      std::pair<const char*, std::shared_ptr<Cacheable>>(fieldName, cacheableObject));
+  pfType->setIdentityField(true);
   return shared_from_this();
- }
- std::shared_ptr<PdxInstanceFactory> PdxInstanceFactoryImpl::markIdentityField(
-     const char* fieldName) {
-   auto pfType = m_pdxType->getPdxField(fieldName);
-   if (pfType == nullptr) {
-     throw IllegalStateException(
-         "Field must be added before calling MarkIdentityField ");
-   }
-   pfType->setIdentityField(true);
-   return shared_from_this();
- }
+}
 
- void PdxInstanceFactoryImpl::isFieldAdded(const char* fieldName) {
-   if (fieldName == nullptr ||
-       /**fieldName == '\0' ||*/ m_FieldVsValues.find(fieldName) !=
-           m_FieldVsValues.end()) {
-     char excpStr[256] = {0};
-     /* adongre - Coverity II
-      * CID 29209: 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,
-                      "Field: %s is either already added into "
-                      "PdxInstanceFactory or it is null ",
-                      fieldName);
-     throw IllegalStateException(excpStr);
-   }
- }
- }  // namespace client
- }  // namespace geode
- }  // namespace apache
+void PdxInstanceFactoryImpl::isFieldAdded(const std::string& fieldName) {
+  if (m_FieldVsValues.find(fieldName) != m_FieldVsValues.end()) {
+    throw IllegalStateException("Field: " + fieldName +
+                                " is either already added into "
+                                "PdxInstanceFactory or it is null");
+  }
+}
+}  // namespace client
+}  // namespace geode
+}  // namespace apache
diff --git a/cppcache/src/PdxInstanceFactoryImpl.hpp b/cppcache/src/PdxInstanceFactoryImpl.hpp
index 24537beb..48a3d03c 100644
--- a/cppcache/src/PdxInstanceFactoryImpl.hpp
+++ b/cppcache/src/PdxInstanceFactoryImpl.hpp
@@ -1,8 +1,3 @@
-#pragma once
-
-#ifndef GEODE_PDXINSTANCEFACTORYIMPL_H_
-#define GEODE_PDXINSTANCEFACTORYIMPL_H_
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -20,9 +15,16 @@
  * limitations under the License.
  */
 
+#pragma once
+
+#ifndef GEODE_PDXINSTANCEFACTORYIMPL_H_
+#define GEODE_PDXINSTANCEFACTORYIMPL_H_
+
+#include <map>
+
 #include <geode/PdxInstanceFactory.hpp>
 #include <geode/CacheableBuiltins.hpp>
-#include <map>
+
 #include "PdxType.hpp"
 #include "PdxTypeRegistry.hpp"
 #include "CachePerfStats.hpp"
@@ -60,7 +62,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @return the created Pdxinstance
    * @throws IllegalStateException if called more than once
    */
-  virtual std::unique_ptr<PdxInstance> create();
+  virtual std::unique_ptr<PdxInstance> create() override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -72,8 +74,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeChar(const char* fieldName,
-                                                        char16_t value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeChar(
+      const std::string& fieldName, char16_t value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -85,8 +87,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeChar(const char* fieldName,
-                                                        char value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeChar(
+      const std::string& fieldName, char value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -99,7 +101,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeBoolean(
-      const char* fieldName, bool value);
+      const std::string& fieldName, bool value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -111,8 +113,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeByte(const char* fieldName,
-                                                        int8_t value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeByte(
+      const std::string& fieldName, int8_t value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -124,8 +126,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeShort(const char* fieldName,
-                                                         int16_t value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeShort(
+      const std::string& fieldName, int16_t value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -137,8 +139,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeInt(const char* fieldName,
-                                                       int32_t value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeInt(
+      const std::string& fieldName, int32_t value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -150,8 +152,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeLong(const char* fieldName,
-                                                        int64_t value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeLong(
+      const std::string& fieldName, int64_t value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -163,8 +165,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeFloat(const char* fieldName,
-                                                         float value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeFloat(
+      const std::string& fieldName, float value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -176,8 +178,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeDouble(const char* fieldName,
-                                                          double value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeDouble(
+      const std::string& fieldName, double value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -190,7 +192,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeDate(
-      const char* fieldName, std::shared_ptr<CacheableDate> value);
+      const std::string& fieldName,
+      std::shared_ptr<CacheableDate> value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -203,7 +206,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeWideString(
-      const char* fieldName, const wchar_t* value);
+      const std::string& fieldName, const wchar_t* value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -215,8 +218,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field has already been written
    * or fieldName is nullptr or empty.
    */
-  virtual std::shared_ptr<PdxInstanceFactory> writeString(const char* fieldName,
-                                                          const char* value);
+  virtual std::shared_ptr<PdxInstanceFactory> writeString(
+      const std::string& fieldName, const char* value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -236,7 +239,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeObject(
-      const char* fieldName, std::shared_ptr<Cacheable> value);
+      const std::string& fieldName, std::shared_ptr<Cacheable> value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -250,7 +253,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeBooleanArray(
-      const char* fieldName, bool* value, int32_t length);
+      const std::string& fieldName, bool* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -264,7 +267,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeWideCharArray(
-      const char* fieldName, wchar_t* value, int32_t length);
+      const std::string& fieldName, wchar_t* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -278,7 +281,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeCharArray(
-      const char* fieldName, char* value, int32_t length);
+      const std::string& fieldName, char* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -292,7 +295,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeByteArray(
-      const char* fieldName, int8_t* value, int32_t length);
+      const std::string& fieldName, int8_t* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -306,7 +309,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeShortArray(
-      const char* fieldName, int16_t* value, int32_t length);
+      const std::string& fieldName, int16_t* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -320,7 +323,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeIntArray(
-      const char* fieldName, int32_t* value, int32_t length);
+      const std::string& fieldName, int32_t* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -334,7 +337,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeLongArray(
-      const char* fieldName, int64_t* value, int32_t length);
+      const std::string& fieldName, int64_t* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -348,7 +351,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeFloatArray(
-      const char* fieldName, float* value, int32_t length);
+      const std::string& fieldName, float* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -362,7 +365,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeDoubleArray(
-      const char* fieldName, double* value, int32_t length);
+      const std::string& fieldName, double* value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -376,7 +379,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeStringArray(
-      const char* fieldName, char** value, int32_t length);
+      const std::string& fieldName, char** value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -390,7 +393,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeWideStringArray(
-      const char* fieldName, wchar_t** value, int32_t length);
+      const std::string& fieldName, wchar_t** value, int32_t length) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -407,7 +410,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeObjectArray(
-      const char* fieldName, std::shared_ptr<CacheableObjectArray> value);
+      const std::string& fieldName,
+      std::shared_ptr<CacheableObjectArray> value) override;
 
   /**
    * Writes the named field with the given value to the serialized form.
@@ -423,8 +427,8 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * or fieldName is nullptr or empty.
    */
   virtual std::shared_ptr<PdxInstanceFactory> writeArrayOfByteArrays(
-      const char* fieldName, int8_t** value, int32_t arrayLength,
-      int32_t* elementLength);
+      const std::string& fieldName, int8_t** value, int32_t arrayLength,
+      int32_t* elementLength) override;
 
   /**
    * Indicate that the named field should be included in hashCode and equals
@@ -450,9 +454,9 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
    * @throws IllegalStateException if the named field does not exist.
    */
   virtual std::shared_ptr<PdxInstanceFactory> markIdentityField(
-      const char* fieldName);
+      const std::string& fieldName) override;
 
-  PdxInstanceFactoryImpl(const char* className, CachePerfStats* cachePerfStats,
+  PdxInstanceFactoryImpl(std::string className, CachePerfStats* cachePerfStats,
                          std::shared_ptr<PdxTypeRegistry> m_pdxTypeRegistry,
                          const Cache* cache, bool enableTimeStatistics);
 
@@ -464,7 +468,7 @@ class CPPCACHE_EXPORT PdxInstanceFactoryImpl
   std::shared_ptr<PdxTypeRegistry> m_pdxTypeRegistry;
   const Cache* m_cache;
   bool m_enableTimeStatistics;
-  void isFieldAdded(const char* fieldName);
+  void isFieldAdded(const std::string& fieldName);
 };
 }  // namespace client
 }  // namespace geode
diff --git a/cppcache/src/PdxInstanceImpl.cpp b/cppcache/src/PdxInstanceImpl.cpp
index 68cb5fcb..4d5a92c9 100644
--- a/cppcache/src/PdxInstanceImpl.cpp
+++ b/cppcache/src/PdxInstanceImpl.cpp
@@ -34,14 +34,6 @@
  * correct precision specifiers. Fix : using ACE_OS::snprintf
  */
 
-#define VERIFY_PDX_INSTANCE_FIELD_THROW                                 \
-  if (pft == nullptr) {                                                 \
-    char excpStr[256] = {0};                                            \
-    ACE_OS::snprintf(excpStr, 256, "PdxInstance doesn't has field %s ", \
-                     fieldname);                                        \
-    throw IllegalStateException(excpStr);                               \
-  }
-
 namespace apache {
 namespace geode {
 namespace client {
@@ -95,7 +87,7 @@ PdxInstanceImpl::PdxInstanceImpl(
 }
 
 void PdxInstanceImpl::writeField(std::shared_ptr<PdxWriter> writer,
-                                 const char* fieldName, int typeId,
+                                 const std::string& fieldName, int typeId,
                                  std::shared_ptr<Cacheable> value) {
   switch (typeId) {
     case PdxFieldTypes::INT: {
@@ -553,7 +545,7 @@ bool PdxInstanceImpl::deepArrayEquals(std::shared_ptr<Cacheable> obj,
                        "PdxInstance cannot calculate equals of the field %s "
                        "since equals is only supported for CacheableKey "
                        "derived types ",
-                       obj->toString()->asChar());
+                       obj->toString().c_str());
       throw IllegalStateException(excpStr);
     }
   }
@@ -701,7 +693,7 @@ int PdxInstanceImpl::deepArrayHashCode(std::shared_ptr<Cacheable> obj) {
                        "PdxInstance cannot calculate hashcode of the field %s "
                        "since hashcode is only supported for CacheableKey "
                        "derived types ",
-                       obj->toString()->asChar());
+                       obj->toString().c_str());
       throw IllegalStateException(excpStr);
     }
   }
@@ -800,477 +792,457 @@ std::shared_ptr<PdxType> PdxInstanceImpl::getPdxType() const {
   return pType;
 }
 
-bool PdxInstanceImpl::isIdentityField(const char* fieldname) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldname);
- if (pft != nullptr) {
-   return pft->getIdentityField();
+bool PdxInstanceImpl::isIdentityField(const std::string& fieldname) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldname.c_str());
+  if (pft != nullptr) {
+    return pft->getIdentityField();
   }
   return false;
 }
 
-bool PdxInstanceImpl::hasField(const char* fieldname) {
- auto pf = getPdxType();
- auto pft = pf->getPdxField(fieldname);
- return (pft != nullptr);
+bool PdxInstanceImpl::hasField(const std::string& fieldname) {
+  auto pf = getPdxType();
+  auto pft = pf->getPdxField(fieldname.c_str());
+  return (pft != nullptr);
 }
 
-bool PdxInstanceImpl::getBooleanField(const char* fieldname) const {
+bool PdxInstanceImpl::getBooleanField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readBoolean();
 }
 
-int8_t PdxInstanceImpl::getByteField(const char* fieldname) const {
+int8_t PdxInstanceImpl::getByteField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->read();
 }
 
-int16_t PdxInstanceImpl::getShortField(const char* fieldname) const {
+int16_t PdxInstanceImpl::getShortField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readInt16();
 }
 
-int32_t PdxInstanceImpl::getIntField(const char* fieldname) const {
+int32_t PdxInstanceImpl::getIntField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readInt32();
 }
 
-int64_t PdxInstanceImpl::getLongField(const char* fieldname) const {
+int64_t PdxInstanceImpl::getLongField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readInt64();
 }
 
-float PdxInstanceImpl::getFloatField(const char* fieldname) const {
+float PdxInstanceImpl::getFloatField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readFloat();
 }
 
-double PdxInstanceImpl::getDoubleField(const char* fieldname) const {
+double PdxInstanceImpl::getDoubleField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readDouble();
 }
 
-char16_t PdxInstanceImpl::getCharField(const char* fieldname) const {
+char16_t PdxInstanceImpl::getCharField(const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   return dataInput->readInt16();
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, bool** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, bool** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readBooleanArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, signed char** value,
-                               int32_t& length) const {
+void PdxInstanceImpl::getField(const std::string& fieldname,
+                               signed char** value, int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   int8_t* temp = nullptr;
   dataInput->readByteArray(&temp, length);
   *value = (signed char*)temp;
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, unsigned char** value,
-                               int32_t& length) const {
+void PdxInstanceImpl::getField(const std::string& fieldname,
+                               unsigned char** value, int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   int8_t* temp = nullptr;
   dataInput->readByteArray(&temp, length);
   *value = reinterpret_cast<unsigned char*>(temp);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, int16_t** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, int16_t** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readShortArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, int32_t** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, int32_t** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readIntArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, int64_t** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, int64_t** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readLongArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, float** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, float** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readFloatArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, double** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, double** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readDoubleArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, wchar_t** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, wchar_t** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readWideCharArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, char** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, char** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readCharArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, wchar_t** value) const {
+void PdxInstanceImpl::getField(const std::string& fieldname,
+                               wchar_t** value) const {
   auto dataInput = getDataInputForField(fieldname);
   wchar_t* temp = nullptr;
   dataInput->readWideString(&temp);
   *value = temp;
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, char** value) const {
+void PdxInstanceImpl::getField(const std::string& fieldname,
+                               char** value) const {
   auto dataInput = getDataInputForField(fieldname);
   char* temp = nullptr;
   dataInput->readString(&temp);
   *value = temp;
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, wchar_t*** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, wchar_t*** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readWideStringArray(value, length);
 }
 
-void PdxInstanceImpl::getField(const char* fieldname, char*** value,
+void PdxInstanceImpl::getField(const std::string& fieldname, char*** value,
                                int32_t& length) const {
   auto dataInput = getDataInputForField(fieldname);
   dataInput->readStringArray(value, length);
 }
 std::shared_ptr<CacheableDate> PdxInstanceImpl::getCacheableDateField(
-    const char* fieldname) const {
+    const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   auto value = CacheableDate::create();
   value->fromData(*dataInput);
   return value;
 }
- std::shared_ptr<Cacheable> PdxInstanceImpl::getCacheableField(const char* fieldname) const {
+std::shared_ptr<Cacheable> PdxInstanceImpl::getCacheableField(
+    const std::string& fieldname) const {
   auto dataInput = getDataInputForField(fieldname);
   std::shared_ptr<Cacheable> value;
   dataInput->readObject(value);
   return value;
- }
- std::shared_ptr<CacheableObjectArray>
- PdxInstanceImpl::getCacheableObjectArrayField(const char* fieldname) const {
-   auto dataInput = getDataInputForField(fieldname);
-   auto value = CacheableObjectArray::create();
-   value->fromData(*dataInput);
-   return value;
- }
-
- void PdxInstanceImpl::getField(const char* fieldname, int8_t*** value,
-                                int32_t& arrayLength,
-                                int32_t*& elementLength) const {
-   auto dataInput = getDataInputForField(fieldname);
-   dataInput->readArrayOfByteArrays(value, arrayLength, &elementLength);
- }
- std::shared_ptr<CacheableString> PdxInstanceImpl::toString() const {
-   /* adongre - Coverity II
-    * CID 29265: 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
-    */
-   auto pt = getPdxType();
-   std::string toString = "PDX[";
-   char buf[2048];
-   ACE_OS::snprintf(buf, 2048, "%d", pt->getTypeId());
-   toString += buf;
-   toString += ",";
-   ACE_OS::snprintf(buf, 2048, "%s", pt->getPdxClassName());
-   toString += buf;
-   toString += "]{";
-   bool firstElement = true;
-   auto identityFields = getIdentityPdxFields(pt);
-   for (size_t i = 0; i < static_cast<int>(identityFields.size()); i++) {
-     if (firstElement) {
-       firstElement = false;
-     } else {
-       toString += ",";
-     }
-     ACE_OS::snprintf(buf, 2048, "%s", identityFields.at(i)->getFieldName());
-     toString += buf;
-     toString += "=";
-
-     switch (identityFields.at(i)->getTypeId()) {
-       case PdxFieldTypes::BOOLEAN: {
-         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 = getByteField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%d", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::SHORT: {
-         int16_t value = getShortField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%d", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::INT: {
-         int32_t value = getIntField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%d", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::LONG: {
-         int64_t value = getLongField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%lld", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::FLOAT: {
-         float value = getFloatField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%f", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::DOUBLE: {
-         double value = getDoubleField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%f", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::CHAR: {
-         auto value = getCharField(identityFields.at(i)->getFieldName());
-         ACE_OS::snprintf(buf, 2048, "%c", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::STRING: {
-         wchar_t* value = 0;
-         getField(identityFields.at(i)->getFieldName(), &value);
-         ACE_OS::snprintf(buf, 2048, "%ls", value);
-         toString += buf;
-         break;
-       }
-       case PdxFieldTypes::CHAR_ARRAY: {
-         wchar_t* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%c\t", value[i]);
-             toString += buf;
-           }
-           GF_SAFE_DELETE_ARRAY(value);
-         }
-         break;
-       }
-       case PdxFieldTypes::STRING_ARRAY: {
-         wchar_t** value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%ls\t", value[i]);
-             toString += buf;
-           }
-         }
-         break;
-       }
-       case PdxFieldTypes::BYTE_ARRAY: {
-         signed char* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%d\t", value[i]);
-             toString += buf;
-           }
-           GF_SAFE_DELETE_ARRAY(value);
-         }
-         break;
-       }
-       case PdxFieldTypes::SHORT_ARRAY: {
-         int16_t* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%d\t", value[i]);
-             toString += buf;
-           }
-           GF_SAFE_DELETE_ARRAY(value);
-         }
-         break;
-       }
-       case PdxFieldTypes::INT_ARRAY: {
-         int32_t* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%d\t", value[i]);
-             toString += buf;
-           }
-           GF_SAFE_DELETE_ARRAY(value);
-         }
-         break;
-       }
-       case PdxFieldTypes::LONG_ARRAY: {
-         int64_t* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%lld\t", value[i]);
-             toString += buf;
-           }
-         }
-         break;
-       }
-       case PdxFieldTypes::FLOAT_ARRAY: {
-         float* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%f\t", value[i]);
-             toString += buf;
-           }
-           GF_SAFE_DELETE_ARRAY(value);
-         }
-         break;
-       }
-       case PdxFieldTypes::DOUBLE_ARRAY: {
-         double* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%f\t", value[i]);
-             toString += buf;
-           }
-         }
-         break;
-       }
-       case PdxFieldTypes::DATE: {
-         auto value =
-             getCacheableDateField(identityFields.at(i)->getFieldName());
-         if (value != nullptr) {
-           ACE_OS::snprintf(buf, 2048, "%s", value->toString()->asChar());
-           toString += buf;
-         }
-         break;
-       }
-       case PdxFieldTypes::BOOLEAN_ARRAY: {
-         bool* value = 0;
-         int32_t length;
-         getField(identityFields.at(i)->getFieldName(), &value, length);
-         if (length > 0) {
-           for (int i = 0; i < length; i++) {
-             ACE_OS::snprintf(buf, 2048, "%s\t", value[i] ? "true" : "false");
-             toString += buf;
-           }
-           GF_SAFE_DELETE_ARRAY(value);
-         }
-         break;
-       }
-       case PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS: {
-         int8_t** value = 0;
-         int32_t arrayLength;
-         int32_t* elementLength;
-         getField(identityFields.at(i)->getFieldName(), &value, arrayLength,
-                  elementLength);
-         if (arrayLength > 0) {
-           for (int j = 0; j < arrayLength; j++) {
-             for (int k = 0; k < elementLength[j]; k++) {
-               ACE_OS::snprintf(buf, 2048, "%d\t", value[j][k]);
-               toString += buf;
-             }
-           }
-         }
-         break;
-       }
-       case PdxFieldTypes::OBJECT_ARRAY: {
-         auto value =
-             getCacheableObjectArrayField(identityFields.at(i)->getFieldName());
-         if (value != nullptr) {
-           ACE_OS::snprintf(buf, 2048, "%s\t", value->toString()->asChar());
-           toString += buf;
-         }
-         break;
-       }
-       default: {
-         auto value = getCacheableField(identityFields.at(i)->getFieldName());
-         if (value != nullptr) {
-           ACE_OS::snprintf(buf, 2048, "%s\t", value->toString()->asChar());
-           toString += buf;
-         }
-       }
-     }
-   }
-   toString += "}";
-
-   return CacheableString::create(toString.c_str());
- }
- std::shared_ptr<PdxSerializable> PdxInstanceImpl::getObject() {
-   auto dataInput = m_cache->createDataInput(m_buffer, m_bufferLength);
-   int64_t sampleStartNanos =
-       m_enableTimeStatistics ? Utils::startStatOpTime() : 0;
-   //[ToDo] do we have to call incPdxDeSerialization here?
-   auto ret =
-       PdxHelper::deserializePdx(*dataInput, true, m_typeId, m_bufferLength);
-
-   if (m_cacheStats != nullptr) {
-     if (m_enableTimeStatistics) {
-       Utils::updateStatOpTime(
-           m_cacheStats->getStat(),
-           m_cacheStats->getPdxInstanceDeserializationTimeId(),
-           sampleStartNanos);
-     }
-     m_cacheStats->incPdxInstanceDeserializations();
-   }
-   return ret;
- }
-
- void PdxInstanceImpl::equatePdxFields(
-     std::vector<std::shared_ptr<PdxFieldType>>& my,
-     std::vector<std::shared_ptr<PdxFieldType>>& other) const {
-   int otherIdx = -1;
-   for (int32_t i = 0; i < static_cast<int32_t>(my.size()); i++) {
-     auto myF = my.at(i);
-     if (!myF->equals(m_DefaultPdxFieldType)) {
-       for (int32_t j = 0; j < static_cast<int32_t>(other.size()); j++) {
-         if (myF->equals(other[j])) {
-           otherIdx = j;
-           break;
-         } else {
-           otherIdx = -1;
-         }
-       }
-
-       if (otherIdx == -1)  // field not there
-       {
-         if (i < static_cast<int32_t>(other.size())) {
-           auto tmp = other.at(i);
-           other.at(i) = m_DefaultPdxFieldType;
-           other.push_back(tmp);
-         } else {
-           other.push_back(m_DefaultPdxFieldType);
-         }
-       } else if (otherIdx != i) {
-         auto tmp = other.at(i);
-         other.at(i) = other.at(otherIdx);
-         other.at(otherIdx) = tmp;
-       }
-     }
-   }
+}
+std::shared_ptr<CacheableObjectArray>
+PdxInstanceImpl::getCacheableObjectArrayField(
+    const std::string& fieldname) const {
+  auto dataInput = getDataInputForField(fieldname);
+  auto value = CacheableObjectArray::create();
+  value->fromData(*dataInput);
+  return value;
+}
+
+void PdxInstanceImpl::getField(const std::string& fieldname, int8_t*** value,
+                               int32_t& arrayLength,
+                               int32_t*& elementLength) const {
+  auto dataInput = getDataInputForField(fieldname);
+  dataInput->readArrayOfByteArrays(value, arrayLength, &elementLength);
+}
+
+std::string PdxInstanceImpl::toString() const {
+  /* adongre - Coverity II
+   * CID 29265: 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
+   */
+  auto pt = getPdxType();
+  std::string toString = "PDX[" + std::to_string(pt->getTypeId()) + "," +
+                         pt->getPdxClassName() + "]{";
+  bool firstElement = true;
+  auto identityFields = getIdentityPdxFields(pt);
+  for (size_t i = 0; i < static_cast<int>(identityFields.size()); i++) {
+    if (firstElement) {
+      firstElement = false;
+    } else {
+      toString += ",";
+    }
+    toString += identityFields.at(i)->getFieldName();
+    toString += "=";
+
+    switch (identityFields.at(i)->getTypeId()) {
+      case PdxFieldTypes::BOOLEAN: {
+        auto&& value = getBooleanField(identityFields.at(i)->getFieldName());
+        toString += value ? "true" : "false";
+        break;
+      }
+      case PdxFieldTypes::BYTE: {
+        auto&& value = getByteField(identityFields.at(i)->getFieldName());
+        toString += std::to_string(value);
+        break;
+      }
+      case PdxFieldTypes::SHORT: {
+        int16_t value = getShortField(identityFields.at(i)->getFieldName());
+        toString += std::to_string(value);
+        break;
+      }
+      case PdxFieldTypes::INT: {
+        int32_t value = getIntField(identityFields.at(i)->getFieldName());
+        toString += std::to_string(value);
+        break;
+      }
+      case PdxFieldTypes::LONG: {
+        int64_t value = getLongField(identityFields.at(i)->getFieldName());
+        toString += std::to_string(value);
+        break;
+      }
+      case PdxFieldTypes::FLOAT: {
+        float value = getFloatField(identityFields.at(i)->getFieldName());
+        toString += std::to_string(value);
+        break;
+      }
+      case PdxFieldTypes::DOUBLE: {
+        double value = getDoubleField(identityFields.at(i)->getFieldName());
+        toString += std::to_string(value);
+        break;
+      }
+      case PdxFieldTypes::CHAR: {
+        auto value = getCharField(identityFields.at(i)->getFieldName());
+        // TODO string convert UTF16 to UTF8
+        toString += value;
+        break;
+      }
+      case PdxFieldTypes::STRING: {
+        char* value = 0;
+        getField(identityFields.at(i)->getFieldName(), &value);
+        toString += value;
+        break;
+      }
+      case PdxFieldTypes::CHAR_ARRAY: {
+        wchar_t* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            // TODO string fix mismatch from wchar to char16_t
+            toString += static_cast<char>(value[i]);
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::STRING_ARRAY: {
+        char** value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += value[i];
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::BYTE_ARRAY: {
+        signed char* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += std::to_string(value[i]);
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::SHORT_ARRAY: {
+        int16_t* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += std::to_string(value[i]);
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::INT_ARRAY: {
+        int32_t* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += std::to_string(value[i]);
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::LONG_ARRAY: {
+        int64_t* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += std::to_string(value[i]);
+          }
+        }
+        break;
+      }
+      case PdxFieldTypes::FLOAT_ARRAY: {
+        float* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += std::to_string(value[i]);
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::DOUBLE_ARRAY: {
+        double* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += std::to_string(value[i]);
+          }
+        }
+        break;
+      }
+      case PdxFieldTypes::DATE: {
+        auto value =
+            getCacheableDateField(identityFields.at(i)->getFieldName());
+        if (value != nullptr) {
+          toString += value->toString().c_str();
+        }
+        break;
+      }
+      case PdxFieldTypes::BOOLEAN_ARRAY: {
+        bool* value = 0;
+        int32_t length;
+        getField(identityFields.at(i)->getFieldName(), &value, length);
+        if (length > 0) {
+          for (int i = 0; i < length; i++) {
+            toString += value[i] ? "true" : "false";
+          }
+          GF_SAFE_DELETE_ARRAY(value);
+        }
+        break;
+      }
+      case PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS: {
+        int8_t** value = 0;
+        int32_t arrayLength;
+        int32_t* elementLength;
+        getField(identityFields.at(i)->getFieldName(), &value, arrayLength,
+                 elementLength);
+        if (arrayLength > 0) {
+          for (int j = 0; j < arrayLength; j++) {
+            for (int k = 0; k < elementLength[j]; k++) {
+              toString += std::to_string(value[j][k]);
+            }
+          }
+        }
+        break;
+      }
+      case PdxFieldTypes::OBJECT_ARRAY: {
+        auto value =
+            getCacheableObjectArrayField(identityFields.at(i)->getFieldName());
+        if (value != nullptr) {
+          toString += value->toString().c_str();
+        }
+        break;
+      }
+      default: {
+        auto value = getCacheableField(identityFields.at(i)->getFieldName());
+        if (value != nullptr) {
+          toString += value->toString().c_str();
+        }
+      }
+    }
+  }
+  toString += "}";
+
+  return toString;
+}
+
+std::shared_ptr<PdxSerializable> PdxInstanceImpl::getObject() {
+  auto dataInput = m_cache->createDataInput(m_buffer, m_bufferLength);
+  int64_t sampleStartNanos =
+      m_enableTimeStatistics ? Utils::startStatOpTime() : 0;
+  //[ToDo] do we have to call incPdxDeSerialization here?
+  auto ret =
+      PdxHelper::deserializePdx(*dataInput, true, m_typeId, m_bufferLength);
+
+  if (m_cacheStats != nullptr) {
+    if (m_enableTimeStatistics) {
+      Utils::updateStatOpTime(
+          m_cacheStats->getStat(),
+          m_cacheStats->getPdxInstanceDeserializationTimeId(),
+          sampleStartNanos);
+    }
+    m_cacheStats->incPdxInstanceDeserializations();
+  }
+  return ret;
+}
+
+void PdxInstanceImpl::equatePdxFields(
+    std::vector<std::shared_ptr<PdxFieldType>>& my,
+    std::vector<std::shared_ptr<PdxFieldType>>& other) const {
+  int otherIdx = -1;
+  for (int32_t i = 0; i < static_cast<int32_t>(my.size()); i++) {
+    auto myF = my.at(i);
+    if (!myF->equals(m_DefaultPdxFieldType)) {
+      for (int32_t j = 0; j < static_cast<int32_t>(other.size()); j++) {
+        if (myF->equals(other[j])) {
+          otherIdx = j;
+          break;
+        } else {
+          otherIdx = -1;
+        }
+      }
+
+      if (otherIdx == -1)  // field not there
+      {
+        if (i < static_cast<int32_t>(other.size())) {
+          auto tmp = other.at(i);
+          other.at(i) = m_DefaultPdxFieldType;
+          other.push_back(tmp);
+        } else {
+          other.push_back(m_DefaultPdxFieldType);
+        }
+      } else if (otherIdx != i) {
+        auto tmp = other.at(i);
+        other.at(i) = other.at(otherIdx);
+        other.at(otherIdx) = tmp;
+      }
+    }
+  }
 }
 
 bool PdxInstanceImpl::operator==(const CacheableKey& other) const {
@@ -1281,31 +1253,30 @@ bool PdxInstanceImpl::operator==(const CacheableKey& other) const {
     return false;
   }
 
- auto myPdxType = getPdxType();
- auto otherPdxType = otherPdx->getPdxType();
+  auto myPdxType = getPdxType();
+  auto otherPdxType = otherPdx->getPdxType();
 
-  char* myPdxClassName = myPdxType->getPdxClassName();
-  char* otherPdxClassName = otherPdxType->getPdxClassName();
+  auto&& myPdxClassName = myPdxType->getPdxClassName();
+  auto&& otherPdxClassName = otherPdxType->getPdxClassName();
 
-  if (ACE_OS::strcmp(otherPdxClassName, myPdxClassName) != 0) {
+  if (otherPdxClassName != myPdxClassName) {
     return false;
   }
 
-  auto myPdxIdentityFieldList =
-      getIdentityPdxFields(myPdxType);
-  auto otherPdxIdentityFieldList =
-      otherPdx->getIdentityPdxFields(otherPdxType);
+  auto myPdxIdentityFieldList = getIdentityPdxFields(myPdxType);
+  auto otherPdxIdentityFieldList = otherPdx->getIdentityPdxFields(otherPdxType);
 
   equatePdxFields(myPdxIdentityFieldList, otherPdxIdentityFieldList);
   equatePdxFields(otherPdxIdentityFieldList, myPdxIdentityFieldList);
 
   auto myDataInput = m_cache->createDataInput(m_buffer, m_bufferLength);
-  auto otherDataInput = m_cache->createDataInput(otherPdx->m_buffer, otherPdx->m_bufferLength);
+  auto otherDataInput =
+      m_cache->createDataInput(otherPdx->m_buffer, otherPdx->m_bufferLength);
 
   int fieldTypeId = -1;
   for (size_t i = 0; i < myPdxIdentityFieldList.size(); i++) {
-   auto myPFT = myPdxIdentityFieldList.at(i);
-   auto otherPFT = otherPdxIdentityFieldList.at(i);
+    auto myPFT = myPdxIdentityFieldList.at(i);
+    auto otherPFT = otherPdxIdentityFieldList.at(i);
 
     LOGDEBUG("pdxfield %s ",
              ((myPFT != m_DefaultPdxFieldType) ? myPFT->getFieldName()
@@ -1346,8 +1317,8 @@ bool PdxInstanceImpl::operator==(const CacheableKey& other) const {
         break;
       }
       case PdxFieldTypes::OBJECT: {
-      std::shared_ptr<Cacheable> object = nullptr;
-      std::shared_ptr<Cacheable> otherObject = nullptr;
+        std::shared_ptr<Cacheable> object = nullptr;
+        std::shared_ptr<Cacheable> otherObject = nullptr;
         if (!myPFT->equals(m_DefaultPdxFieldType)) {
           setOffsetForObject(*myDataInput, myPdxType, myPFT->getSequenceId());
           myDataInput->readObject(object);
@@ -1369,9 +1340,8 @@ bool PdxInstanceImpl::operator==(const CacheableKey& other) const {
         break;
       }
       case PdxFieldTypes::OBJECT_ARRAY: {
-       auto otherObjectArray =
-            CacheableObjectArray::create();
-       auto objectArray = CacheableObjectArray::create();
+        auto otherObjectArray = CacheableObjectArray::create();
+        auto objectArray = CacheableObjectArray::create();
 
         if (!myPFT->equals(m_DefaultPdxFieldType)) {
           setOffsetForObject(*myDataInput, myPdxType, myPFT->getSequenceId());
@@ -1409,7 +1379,8 @@ bool PdxInstanceImpl::operator==(const CacheableKey& other) const {
   return true;
 }
 
-bool PdxInstanceImpl::compareRawBytes(PdxInstanceImpl& other, std::shared_ptr<PdxType> myPT,
+bool PdxInstanceImpl::compareRawBytes(PdxInstanceImpl& other,
+                                      std::shared_ptr<PdxType> myPT,
                                       std::shared_ptr<PdxFieldType> myF,
                                       DataInput& myDataInput,
                                       std::shared_ptr<PdxType> otherPT,
@@ -1456,9 +1427,10 @@ bool PdxInstanceImpl::compareRawBytes(PdxInstanceImpl& other, std::shared_ptr<Pd
     }
   }
 }
- std::shared_ptr<CacheableStringArray> PdxInstanceImpl::getFieldNames() {
- auto pt = getPdxType();
-  std::vector<std::shared_ptr<PdxFieldType>>* vectorOfFieldTypes = pt->getPdxFieldTypes();
+std::shared_ptr<CacheableStringArray> PdxInstanceImpl::getFieldNames() {
+  auto pt = getPdxType();
+  std::vector<std::shared_ptr<PdxFieldType>>* vectorOfFieldTypes =
+      pt->getPdxFieldTypes();
   int size = static_cast<int>(vectorOfFieldTypes->size());
   std::shared_ptr<CacheableString>* ptrArr = nullptr;
   if (size > 0) {
@@ -1476,11 +1448,13 @@ bool PdxInstanceImpl::compareRawBytes(PdxInstanceImpl& other, std::shared_ptr<Pd
 }
 
 PdxFieldTypes::PdxFieldType PdxInstanceImpl::getFieldType(
-    const char* fieldname) const {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldname);
+    const std::string& fieldname) const {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldname.c_str());
 
-  VERIFY_PDX_INSTANCE_FIELD_THROW;
+  if (!pft) {
+    throw IllegalStateException("PdxInstance doesn't have field " + fieldname);
+  }
 
   return static_cast<PdxFieldTypes::PdxFieldType>(pft->getTypeId());
 }
@@ -1494,7 +1468,11 @@ void PdxInstanceImpl::writeUnmodifieldField(
   }
 }
 
-void PdxInstanceImpl::toData(std::shared_ptr<PdxWriter> writer) /*const*/ {
+void PdxInstanceImpl::toData(std::shared_ptr<PdxWriter> writer) const {
+  const_cast<PdxInstanceImpl*>(this)->toDataMutable(writer);
+}
+
+void PdxInstanceImpl::toDataMutable(std::shared_ptr<PdxWriter> writer) {
   auto pt = getPdxType();
   std::vector<std::shared_ptr<PdxFieldType>>* pdxFieldList =
       pt->getPdxFieldTypes();
@@ -1510,10 +1488,9 @@ void PdxInstanceImpl::toData(std::shared_ptr<PdxWriter> writer) /*const*/ {
                currPf->getFieldName(), currPf->IsVariableLengthType());
       std::shared_ptr<Cacheable> value = nullptr;
 
-      FieldVsValues::iterator iter =
-          m_updatedFields.find(currPf->getFieldName());
+      auto&& iter = m_updatedFields.find(currPf->getFieldName());
       if (iter != m_updatedFields.end()) {
-        value = ((*iter).second);
+        value = iter->second;
       } else {
         value = nullptr;
       }
@@ -1552,7 +1529,7 @@ void PdxInstanceImpl::fromData(std::shared_ptr<PdxReader> input) {
       "PdxInstance::FromData( .. ) shouldn't have called");
 }
 
-const char* PdxInstanceImpl::getClassName() const {
+const std::string& PdxInstanceImpl::getClassName() const {
   if (m_typeId != 0) {
     auto pdxtype = getPdxTypeRegistry()->getPdxType(m_typeId);
     if (pdxtype == nullptr) {
@@ -1576,13 +1553,14 @@ void PdxInstanceImpl::setPdxId(int32_t typeId) {
   }
 }
 
-std::vector<std::shared_ptr<PdxFieldType>> PdxInstanceImpl::getIdentityPdxFields(
-    std::shared_ptr<PdxType> pt) const {
-  std::vector<std::shared_ptr<PdxFieldType>>* pdxFieldList = pt->getPdxFieldTypes();
+std::vector<std::shared_ptr<PdxFieldType>>
+PdxInstanceImpl::getIdentityPdxFields(std::shared_ptr<PdxType> pt) const {
+  std::vector<std::shared_ptr<PdxFieldType>>* pdxFieldList =
+      pt->getPdxFieldTypes();
   std::vector<std::shared_ptr<PdxFieldType>> retList;
   int size = static_cast<int>(pdxFieldList->size());
   for (int i = 0; i < size; i++) {
-   auto pft = pdxFieldList->at(i);
+    auto pft = pdxFieldList->at(i);
     if (pft->getIdentityField()) retList.push_back(pft);
   }
 
@@ -1633,7 +1611,8 @@ int PdxInstanceImpl::getOffset(DataInput& dataInput,
                               serializedLength);
 }
 
-int PdxInstanceImpl::getRawHashCode(std::shared_ptr<PdxType> pt, std::shared_ptr<PdxFieldType> pField,
+int PdxInstanceImpl::getRawHashCode(std::shared_ptr<PdxType> pt,
+                                    std::shared_ptr<PdxFieldType> pField,
                                     DataInput& dataInput) const {
   int pos = getOffset(dataInput, pt, pField->getSequenceId());
   int nextpos =
@@ -1721,16 +1700,19 @@ bool PdxInstanceImpl::hasDefaultBytes(std::shared_ptr<PdxFieldType> pField,
       return compareDefaultBytes(dataInput, start, end, m_IntDefaultBytes, 4);
     }
     case PdxFieldTypes::STRING: {
-      return compareDefaultBytes(dataInput, start, end, m_StringDefaultBytes, 1);
+      return compareDefaultBytes(dataInput, start, end, m_StringDefaultBytes,
+                                 1);
     }
     case PdxFieldTypes::BOOLEAN: {
-      return compareDefaultBytes(dataInput, start, end, m_BooleanDefaultBytes, 1);
+      return compareDefaultBytes(dataInput, start, end, m_BooleanDefaultBytes,
+                                 1);
     }
     case PdxFieldTypes::FLOAT: {
       return compareDefaultBytes(dataInput, start, end, m_FloatDefaultBytes, 4);
     }
     case PdxFieldTypes::DOUBLE: {
-      return compareDefaultBytes(dataInput, start, end, m_DoubleDefaultBytes, 8);
+      return compareDefaultBytes(dataInput, start, end, m_DoubleDefaultBytes,
+                                 8);
     }
     case PdxFieldTypes::CHAR: {
       return compareDefaultBytes(dataInput, start, end, m_CharDefaultBytes, 2);
@@ -1755,13 +1737,15 @@ bool PdxInstanceImpl::hasDefaultBytes(std::shared_ptr<PdxFieldType> pField,
     case PdxFieldTypes::STRING_ARRAY:
     case PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS:
     case PdxFieldTypes::OBJECT_ARRAY: {
-      return compareDefaultBytes(dataInput, start, end, m_NULLARRAYDefaultBytes, 1);
+      return compareDefaultBytes(dataInput, start, end, m_NULLARRAYDefaultBytes,
+                                 1);
     }
     case PdxFieldTypes::DATE: {
       return compareDefaultBytes(dataInput, start, end, m_DateDefaultBytes, 8);
     }
     case PdxFieldTypes::OBJECT: {
-      return compareDefaultBytes(dataInput, start, end, m_ObjectDefaultBytes, 1);
+      return compareDefaultBytes(dataInput, start, end, m_ObjectDefaultBytes,
+                                 1);
     }
     default: {
       throw IllegalStateException("hasDefaultBytes unable to find typeID ");
@@ -1769,544 +1753,324 @@ bool PdxInstanceImpl::hasDefaultBytes(std::shared_ptr<PdxFieldType> pField,
   }
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, bool value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, bool value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BOOLEAN) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29233: 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);
-  }
- auto cacheableObject = CacheableBoolean::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableBoolean::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, signed char value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               signed char value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BYTE) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29233: 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);
-  }
- auto cacheableObject = CacheableByte::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableByte::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, unsigned char value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               unsigned char value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BYTE) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29236: 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);
-  }
- auto cacheableObject = CacheableByte::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableByte::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, int16_t value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, int16_t value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::SHORT) {
-    char excpStr[256] = {0};
-    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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto cacheableObject = CacheableInt16::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, int32_t value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, int32_t value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::INT) {
     char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29234: 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);
-  }
- auto cacheableObject = CacheableInt32::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableInt32::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, int64_t value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, int64_t value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::LONG) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29235: 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);
-  }
- auto cacheableObject = CacheableInt64::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableInt64::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, float value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, float value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::FLOAT) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29232: 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);
-  }
- auto cacheableObject = CacheableFloat::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableFloat::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, double value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, double value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::DOUBLE) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29231: 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);
-  }
- auto cacheableObject = CacheableDouble::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableDouble::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, char16_t value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName, char16_t value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::CHAR) {
-    char excpStr[256] = {0};
-    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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto cacheableObject = CacheableCharacter::create(value);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, std::shared_ptr<CacheableDate> value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               std::shared_ptr<CacheableDate> value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::DATE) {
-    char excpStr[256] = {0};
-    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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto cacheableObject = value;
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, std::shared_ptr<Cacheable> value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               std::shared_ptr<Cacheable> value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::OBJECT) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29212: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   m_updatedFields[fieldName] = value;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName,
+void PdxInstanceImpl::setField(const std::string& fieldName,
                                std::shared_ptr<CacheableObjectArray> value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::OBJECT_ARRAY) {
-    char excpStr[256] = {0};
-    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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   m_updatedFields[fieldName] = value;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, bool* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, bool* value,
                                int32_t length) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BOOLEAN_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29218: 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);
-  }
- auto cacheableObject = BooleanArray::create(value, length);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = BooleanArray::create(value, length);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, signed char* value,
-                               int32_t length) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
-
- if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BYTE_ARRAY) {
-   char excpStr[256] = {0};
-   /* adongre - Coverity II
-    * CID 29217: 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);
- }
- auto cacheableObject =
-     CacheableBytes::create(reinterpret_cast<uint8_t*>(value), length);
- m_updatedFields[fieldName] = cacheableObject;
-}
-
-void PdxInstanceImpl::setField(const char* fieldName, unsigned char* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, signed char* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BYTE_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29222: 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);
-  }
- auto cacheableObject =
-      CacheableBytes::create((uint8_t*)value, length);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject =
+      CacheableBytes::create(reinterpret_cast<uint8_t*>(value), length);
+  m_updatedFields[fieldName] = cacheableObject;
+}
+
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               unsigned char* value, int32_t length) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
+
+  if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::BYTE_ARRAY) {
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableBytes::create((uint8_t*)value, length);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, int16_t* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, int16_t* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::SHORT_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29225: 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);
-  }
- auto cacheableObject = CacheableInt16Array::create(value, length);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableInt16Array::create(value, length);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, int32_t* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, int32_t* value,
                                int32_t length) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
-
- if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::INT_ARRAY) {
-   char excpStr[256] = {0};
-   /* adongre - Coverity II
-    * CID 29223: 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);
- }
- auto cacheableObject = CacheableInt32Array::create(value, length);
- m_updatedFields[fieldName] = cacheableObject;
-}
-
-void PdxInstanceImpl::setField(const char* fieldName, int64_t* value,
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
+
+  if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::INT_ARRAY) {
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableInt32Array::create(value, length);
+  m_updatedFields[fieldName] = cacheableObject;
+}
+
+void PdxInstanceImpl::setField(const std::string& fieldName, int64_t* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::LONG_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29224: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto cacheableObject = CacheableInt64Array::create(value, length);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, float* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, float* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::FLOAT_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29221: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto cacheableObject = CacheableFloatArray::create(value, length);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, double* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, double* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::DOUBLE_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29220: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto cacheableObject = CacheableDoubleArray::create(value, length);
   m_updatedFields[fieldName] = cacheableObject;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, wchar_t* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, wchar_t* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::CHAR_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29226: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   auto ptr = CharArray::create(value, length);
   m_updatedFields[fieldName] = ptr;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, char* value,
+void PdxInstanceImpl::setField(const std::string& fieldName, char* value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::CHAR_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29219: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   size_t size = strlen(value) + 1;
   wchar_t* tempWideCharArray = new wchar_t[size];
@@ -2316,113 +2080,67 @@ void PdxInstanceImpl::setField(const char* fieldName, char* value,
   delete[] tempWideCharArray;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, const wchar_t* value) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
-
- if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::STRING) {
-   char excpStr[256] = {0};
-   /* adongre - Coverity II
-    * CID 29213: 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);
- }
- auto ptr = CacheableString::create(value);
- m_updatedFields[fieldName] = ptr;
-}
-
-void PdxInstanceImpl::setField(const char* fieldName, const char* value) {
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               const wchar_t* value) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::STRING) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29227: 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);
-  }
- auto ptr = CacheableString::create(value);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto ptr = CacheableString::create(value);
+  m_updatedFields[fieldName] = ptr;
+}
+
+void PdxInstanceImpl::setField(const std::string& fieldName,
+                               const char* value) {
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
+
+  if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::STRING) {
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto ptr = CacheableString::create(value);
   m_updatedFields[fieldName] = ptr;
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, int8_t** value,
+void PdxInstanceImpl::setField(const std::string& fieldName, int8_t** value,
                                int32_t arrayLength, int32_t* elementLength) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
-
- if (pft != nullptr &&
-     pft->getTypeId() != PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS) {
-   char excpStr[256] = {0};
-   /* adongre - Coverity II
-    * CID 29214: 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);
- }
- auto cacheableObject = CacheableVector::create();
- for (int i = 0; i < arrayLength; i++) {
-   auto ptr = CacheableBytes::create(reinterpret_cast<uint8_t*>(value[i]),
-                                     elementLength[i]);
-   cacheableObject->push_back(ptr);
- }
- m_updatedFields[fieldName] = cacheableObject;
-}
-
-void PdxInstanceImpl::setField(const char* fieldName, wchar_t** value,
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
+
+  if (pft != nullptr &&
+      pft->getTypeId() != PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS) {
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
+  }
+  auto cacheableObject = CacheableVector::create();
+  for (int i = 0; i < arrayLength; i++) {
+    auto ptr = CacheableBytes::create(reinterpret_cast<uint8_t*>(value[i]),
+                                      elementLength[i]);
+    cacheableObject->push_back(ptr);
+  }
+  m_updatedFields[fieldName] = cacheableObject;
+}
+
+void PdxInstanceImpl::setField(const std::string& fieldName, wchar_t** value,
                                int32_t length) {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldName);
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::STRING_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29216: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   std::shared_ptr<CacheableString>* ptrArr = nullptr;
   if (length > 0) {
@@ -2435,37 +2153,18 @@ void PdxInstanceImpl::setField(const char* fieldName, wchar_t** value,
     auto cacheableObject = CacheableStringArray::create(ptrArr, length);
     m_updatedFields[fieldName] = cacheableObject;
   }
-
-  /* adongre - Coverity II
-   * CID 29202: Resource leak (RESOURCE_LEAK)
-   */
-  /*if ( ptrArr ) {
-    delete [] ptrArr ;
-  }*/
 }
 
-void PdxInstanceImpl::setField(const char* fieldName, char** value,
+void PdxInstanceImpl::setField(const std::string& fieldName, char** value,
                                int32_t length) {
- auto pt = getPdxType();
- auto pft = pt->getPdxField(fieldName);
+  auto pt = getPdxType();
+  auto pft = pt->getPdxField(fieldName.c_str());
 
   if (pft != nullptr && pft->getTypeId() != PdxFieldTypes::STRING_ARRAY) {
-    char excpStr[256] = {0};
-    /* adongre - Coverity II
-     * CID 29215: 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);
+    throw IllegalStateException(
+        "PdxInstance doesn't have field " + fieldName +
+        " or type of field not matched " +
+        (pft != nullptr ? pft->toString().c_str() : ""));
   }
   std::shared_ptr<CacheableString>* ptrArr = nullptr;
   if (length > 0) {
@@ -2478,15 +2177,10 @@ void PdxInstanceImpl::setField(const char* fieldName, char** value,
     auto cacheableObject = CacheableStringArray::create(ptrArr, length);
     m_updatedFields[fieldName] = cacheableObject;
   }
-  /* adongre - Coverity II
-   * CID 29201: Resource leak (RESOURCE_LEAK)
-   */
-  /*if ( ptrArr ) {
-    delete [] ptrArr;
-  }*/
 }
 
-void PdxInstanceImpl::setOffsetForObject(DataInput& dataInput, std::shared_ptr<PdxType> pt,
+void PdxInstanceImpl::setOffsetForObject(DataInput& dataInput,
+                                         std::shared_ptr<PdxType> pt,
                                          int sequenceId) const {
   int pos = getOffset(dataInput, pt, sequenceId);
   dataInput.reset();
@@ -2504,15 +2198,18 @@ uint32_t PdxInstanceImpl::objectSize() const {
   }
   return size;
 }
- std::shared_ptr<PdxTypeRegistry> PdxInstanceImpl::getPdxTypeRegistry() const {
+std::shared_ptr<PdxTypeRegistry> PdxInstanceImpl::getPdxTypeRegistry() const {
   return m_pdxTypeRegistry;
 }
 
-std::unique_ptr<DataInput> PdxInstanceImpl::getDataInputForField(const char* fieldname) const {
+std::unique_ptr<DataInput> PdxInstanceImpl::getDataInputForField(
+    const std::string& fieldname) const {
   auto pt = getPdxType();
-  auto pft = pt->getPdxField(fieldname);
+  auto pft = pt->getPdxField(fieldname.c_str());
 
-  VERIFY_PDX_INSTANCE_FIELD_THROW;
+  if (!pft) {
+    throw IllegalStateException("PdxInstance doesn't have field " + fieldname);
+  }
 
   auto dataInput = m_cache->createDataInput(m_buffer, m_bufferLength);
   auto pos = getOffset(*dataInput, pt, pft->getSequenceId());
diff --git a/cppcache/src/PdxInstanceImpl.hpp b/cppcache/src/PdxInstanceImpl.hpp
index cad80842..bcd9a3ea 100644
--- a/cppcache/src/PdxInstanceImpl.hpp
+++ b/cppcache/src/PdxInstanceImpl.hpp
@@ -53,7 +53,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual std::shared_ptr<PdxSerializable> getObject();
+  virtual std::shared_ptr<PdxSerializable> getObject() override;
 
   /**
    * Checks if the named field exists and returns the result.
@@ -63,7 +63,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @return <code>true</code> if the named field exists; otherwise
    * <code>false</code>
    */
-  virtual bool hasField(const char* fieldname);
+  virtual bool hasField(const std::string& fieldname) override;
 
   /**
    * Reads the named field and set its value in bool type out param.
@@ -74,7 +74,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual bool getBooleanField(const char* fieldname) const;
+  virtual bool getBooleanField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in signed char type out param.
@@ -89,7 +89,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual int8_t getByteField(const char* fieldname) const;
+  virtual int8_t getByteField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in int16_t type out param.
@@ -100,7 +100,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual int16_t getShortField(const char* fieldname) const;
+  virtual int16_t getShortField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in int32_t type out param.
@@ -109,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 int32_t getIntField(const char* fieldname) const;
+  virtual int32_t getIntField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in int64_t type out param.
@@ -120,7 +120,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual int64_t getLongField(const char* fieldname) const;
+  virtual int64_t getLongField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in float type out param.
@@ -131,7 +131,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual float getFloatField(const char* fieldname) const;
+  virtual float getFloatField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in double type out param.
@@ -142,7 +142,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual double getDoubleField(const char* fieldname) const;
+  virtual double getDoubleField(const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in char type out param.
@@ -153,7 +153,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual char16_t getCharField(const char* fieldName) const;
+  virtual char16_t getCharField(const std::string& fieldName) const override;
 
   /**
    * Reads the named field and set its value in bool array type out param.
@@ -165,8 +165,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, bool** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, bool** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in signed char array type out
@@ -181,8 +181,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, signed char** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, signed char** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in unsigned char array type out
@@ -199,8 +199,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, unsigned char** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, unsigned char** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in int16_t array type out param.
@@ -212,8 +212,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int16_t** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, int16_t** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in int32_t array type out param.
@@ -225,8 +225,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int32_t** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, int32_t** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in int64_t array type out param.
@@ -238,8 +238,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, int64_t** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, int64_t** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in float array type out param.
@@ -251,8 +251,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, float** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, float** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in double array type out param.
@@ -264,8 +264,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, double** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, double** value,
+                        int32_t& length) const override;
 
   // charArray
   /**
@@ -278,8 +278,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, wchar_t** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldName, wchar_t** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in char array type out param.
@@ -291,8 +291,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, char** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldName, char** value,
+                        int32_t& length) const override;
 
   // String
   /**
@@ -304,7 +304,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, wchar_t** value) const;
+  virtual void getField(const std::string& fieldname,
+                        wchar_t** value) const override;
 
   /**
    * Reads the named field and set its value in char* type out param.
@@ -315,7 +316,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, char** value) const;
+  virtual void getField(const std::string& fieldname,
+                        char** value) const override;
 
   // StringArray
   /**
@@ -328,8 +330,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, wchar_t*** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, wchar_t*** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in char* array type out param.
@@ -341,8 +343,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldname, char*** value,
-                        int32_t& length) const;
+  virtual void getField(const std::string& fieldname, char*** value,
+                        int32_t& length) const override;
 
   /**
    * Reads the named field and set its value in std::shared_ptr<CacheableDate>
@@ -356,7 +358,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @see PdxInstance#hasField
    */
   virtual std::shared_ptr<CacheableDate> getCacheableDateField(
-      const char* fieldname) const;
+      const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in array of byte arrays type out
@@ -370,8 +372,9 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see PdxInstance#hasField
    */
-  virtual void getField(const char* fieldName, int8_t*** value,
-                        int32_t& arrayLength, int32_t*& elementLength) const;
+  virtual void getField(const std::string& fieldName, int8_t*** value,
+                        int32_t& arrayLength,
+                        int32_t*& elementLength) const override;
 
   /**
    * Reads the named field and set its value in std::shared_ptr<Cacheable> type
@@ -388,7 +391,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @see PdxInstance#hasField
    */
   virtual std::shared_ptr<Cacheable> getCacheableField(
-      const char* fieldname) const;
+      const std::string& fieldname) const override;
 
   /**
    * Reads the named field and set its value in
@@ -405,7 +408,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @see PdxInstance#hasField
    */
   virtual std::shared_ptr<CacheableObjectArray> getCacheableObjectArrayField(
-      const char* fieldname) const;
+      const std::string& fieldname) const override;
 
   /**
    * Set the existing named field to the given value.
@@ -420,7 +423,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, bool value);
+  virtual void setField(const std::string& fieldName, bool value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -439,7 +442,8 @@ 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, signed char value);
+  virtual void setField(const std::string& fieldName,
+                        signed char value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -458,7 +462,8 @@ 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, unsigned char value);
+  virtual void setField(const std::string& fieldName,
+                        unsigned char value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -473,7 +478,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, int16_t value);
+  virtual void setField(const std::string& fieldName, int16_t value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -488,7 +493,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, int32_t value);
+  virtual void setField(const std::string& fieldName, int32_t value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -503,7 +508,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, int64_t value);
+  virtual void setField(const std::string& fieldName, int64_t value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -518,7 +523,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, float value);
+  virtual void setField(const std::string& fieldName, float value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -533,7 +538,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, double value);
+  virtual void setField(const std::string& fieldName, double value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -548,7 +553,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, char16_t value);
+  virtual void setField(const std::string& fieldName, char16_t value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -565,8 +570,8 @@ 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,
-                        std::shared_ptr<CacheableDate> value);
+  virtual void setField(const std::string& fieldName,
+                        std::shared_ptr<CacheableDate> value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -583,7 +588,8 @@ 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, bool* value, int32_t length);
+  virtual void setField(const std::string& fieldName, bool* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -604,8 +610,8 @@ 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, signed char* value,
-                        int32_t length);
+  virtual void setField(const std::string& fieldName, signed char* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -626,8 +632,8 @@ 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, unsigned char* value,
-                        int32_t length);
+  virtual void setField(const std::string& fieldName, unsigned char* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -644,7 +650,8 @@ 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, int16_t* value, int32_t length);
+  virtual void setField(const std::string& fieldName, int16_t* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -661,7 +668,8 @@ 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, int32_t* value, int32_t length);
+  virtual void setField(const std::string& fieldName, int32_t* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -678,7 +686,8 @@ 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, int64_t* value, int32_t length);
+  virtual void setField(const std::string& fieldName, int64_t* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -695,7 +704,8 @@ 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, float* value, int32_t length);
+  virtual void setField(const std::string& fieldName, float* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -712,7 +722,8 @@ 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, double* value, int32_t length);
+  virtual void setField(const std::string& fieldName, double* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -727,7 +738,8 @@ 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, const wchar_t* value);
+  virtual void setField(const std::string& fieldName,
+                        const wchar_t* value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -742,7 +754,8 @@ 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, const char* value);
+  virtual void setField(const std::string& fieldName,
+                        const char* value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -759,7 +772,8 @@ 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, wchar_t* value, int32_t length);
+  virtual void setField(const std::string& fieldName, wchar_t* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -776,7 +790,8 @@ 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, int32_t length);
+  virtual void setField(const std::string& fieldName, char* value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -793,7 +808,8 @@ 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, wchar_t** value, int32_t length);
+  virtual void setField(const std::string& fieldName, wchar_t** value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -810,7 +826,8 @@ 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, int32_t length);
+  virtual void setField(const std::string& fieldName, char** value,
+                        int32_t length) override;
 
   /**
    * Set the existing named field to the given value.
@@ -829,8 +846,8 @@ 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, int8_t** value,
-                        int32_t arrayLength, int32_t* elementLength);
+  virtual void setField(const std::string& fieldName, int8_t** value,
+                        int32_t arrayLength, int32_t* elementLength) override;
 
   /**
    * Set the existing named field to the given value.
@@ -846,8 +863,8 @@ 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,
-                        std::shared_ptr<Cacheable> value);
+  virtual void setField(const std::string& fieldName,
+                        std::shared_ptr<Cacheable> value) override;
 
   /**
    * Set the existing named field to the given value.
@@ -864,8 +881,8 @@ 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,
-                        std::shared_ptr<CacheableObjectArray> value);
+  virtual void setField(const std::string& fieldName,
+                        std::shared_ptr<CacheableObjectArray> value) override;
 
   /**
    * Checks if the named field was {@link PdxWriter#markIdentityField}marked as
@@ -878,7 +895,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * @return <code>true</code> if the named field exists and was marked as an
    * identify field; otherwise <code>false</code>
    */
-  virtual bool isIdentityField(const char* fieldname);
+  virtual bool isIdentityField(const std::string& fieldname) override;
 
   /**
    * Creates and returns a {@link WritablePdxInstance} whose initial
@@ -887,7 +904,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * made to the returned value will not modify this PdxInstance.
    * @return a {@link WritablePdxInstance}
    */
-  virtual std::shared_ptr<WritablePdxInstance> createWriter();
+  virtual std::shared_ptr<WritablePdxInstance> createWriter() override;
 
   /**
    * Generates a hashcode based on the identity fields of
@@ -907,7 +924,7 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual int32_t hashcode() const;
+  virtual int32_t hashcode() const override;
 
   /**
    * Prints out all of the identity fields of this PdxInstance.
@@ -920,18 +937,22 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual std::shared_ptr<CacheableString> toString() const;
+  virtual std::string toString() const override;
 
   /**
    * @brief serialize this object. This is an internal method.
    */
-  virtual void toData(DataOutput& output) const { PdxInstance::toData(output); }
+  virtual void toData(DataOutput& output) const override {
+    PdxInstance::toData(output);
+  }
 
   /**
    * @brief deserialize this object, typical implementation should return
    * the 'this' pointer. This is an internal method.
    */
-  virtual void fromData(DataInput& input) { PdxInstance::fromData(input); }
+  virtual void fromData(DataInput& input) override {
+    PdxInstance::fromData(input);
+  }
 
   /**
    * Returns true if the given CacheableKey derived object is equals to this
@@ -975,19 +996,19 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    *
    * @see serializationRegistry->addPdxType
    */
-  virtual bool operator==(const CacheableKey& other) const;
+  virtual bool operator==(const CacheableKey& other) const override;
 
   /** @return the size of the object in bytes
    * This is an internal method.
    * It is used in case of heap LRU property is set.
    */
-  virtual uint32_t objectSize() const;
+  virtual uint32_t objectSize() const override;
 
   /**
    * Return an unmodifiable list of the field names on this PdxInstance.
    * @return an unmodifiable list of the field names on this PdxInstance
    */
-  virtual std::shared_ptr<CacheableStringArray> getFieldNames();
+  virtual std::shared_ptr<CacheableStringArray> getFieldNames() override;
 
   // From PdxSerializable
   /**
@@ -995,13 +1016,13 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * method.
    * @param PdxWriter to serialize the PDX object
    */
-  virtual void toData(std::shared_ptr<PdxWriter> output) /*const*/;
+  virtual void toData(std::shared_ptr<PdxWriter> output) const override;
 
   /**
    * @brief Deserialize this object. This is an internal method.
    * @param PdxReader to Deserialize the PDX object
    */
-  virtual void fromData(std::shared_ptr<PdxReader> input);
+  virtual void fromData(std::shared_ptr<PdxReader> input) override;
 
   /**
    * Return the full name of the class that this pdx instance represents.
@@ -1010,9 +1031,10 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
    * to get classname
    * or if PdxType is not defined for PdxInstance.
    */
-  virtual const char* getClassName() const;
+  virtual const std::string& getClassName() const override;
 
-  virtual PdxFieldTypes::PdxFieldType getFieldType(const char* fieldname) const;
+  virtual PdxFieldTypes::PdxFieldType getFieldType(
+      const std::string& fieldname) const override;
 
   void setPdxId(int32_t typeId);
 
@@ -1083,8 +1105,9 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
   bool compareDefaultBytes(DataInput& dataInput, int start, int end,
                            int8_t* defaultBytes, int32_t length) const;
 
-  void writeField(std::shared_ptr<PdxWriter> writer, const char* fieldName,
-                  int typeId, std::shared_ptr<Cacheable> value);
+  void writeField(std::shared_ptr<PdxWriter> writer,
+                  const std::string& fieldName, int typeId,
+                  std::shared_ptr<Cacheable> value);
 
   void writeUnmodifieldField(DataInput& dataInput, int startPos, int endPos,
                              std::shared_ptr<PdxLocalWriter> localWriter);
@@ -1103,6 +1126,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
 
   std::shared_ptr<PdxTypeRegistry> getPdxTypeRegistry() const;
 
+  void toDataMutable(std::shared_ptr<PdxWriter> output);
+
   static int deepArrayHashCode(std::shared_ptr<Cacheable> obj);
 
   static int enumerateMapHashCode(std::shared_ptr<CacheableHashMap> map);
@@ -1154,7 +1179,8 @@ class CPPCACHE_EXPORT PdxInstanceImpl : public WritablePdxInstance {
       std::shared_ptr<CacheableHashTable> Obj,
       std::shared_ptr<CacheableHashTable> OtherObj);
 
-  std::unique_ptr<DataInput> getDataInputForField(const char* fieldname) const;
+  std::unique_ptr<DataInput> getDataInputForField(
+      const std::string& fieldname) const;
 
   static int8_t m_BooleanDefaultBytes[];
   static int8_t m_ByteDefaultBytes[];
diff --git a/cppcache/src/PdxLocalReader.cpp b/cppcache/src/PdxLocalReader.cpp
index e48a32fe..0247ea49 100644
--- a/cppcache/src/PdxLocalReader.cpp
+++ b/cppcache/src/PdxLocalReader.cpp
@@ -93,75 +93,57 @@ void PdxLocalReader::MoveStream() {
   m_dataInput->reset(m_startPosition + m_serializedLengthWithOffsets);
 }
 
-void PdxLocalReader::checkEmptyFieldName(const char* fieldName) {
-  if (fieldName == nullptr) {
-    throw IllegalStateException("Field name is null");
-  }
-}
-
-char PdxLocalReader::readChar(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+char PdxLocalReader::readChar(const std::string& fieldName) {
   uint16_t value = m_dataInput->readInt16();
   return (static_cast<char>(value));
 }
 
-wchar_t PdxLocalReader::readWideChar(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+wchar_t PdxLocalReader::readWideChar(const std::string& fieldName) {
   uint16_t value = m_dataInput->readInt16();
   return static_cast<wchar_t>(value);
 }
 
-bool PdxLocalReader::readBoolean(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+bool PdxLocalReader::readBoolean(const std::string& fieldName) {
   return m_dataInput->readBoolean();
 }
 
-int8_t PdxLocalReader::readByte(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+int8_t PdxLocalReader::readByte(const std::string& fieldName) {
   return m_dataInput->read();
 }
 
-int16_t PdxLocalReader::readShort(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+int16_t PdxLocalReader::readShort(const std::string& fieldName) {
   return m_dataInput->readInt16();
 }
 
-int32_t PdxLocalReader::readInt(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+int32_t PdxLocalReader::readInt(const std::string& fieldName) {
   return m_dataInput->readInt32();
 }
 
-int64_t PdxLocalReader::readLong(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+int64_t PdxLocalReader::readLong(const std::string& fieldName) {
   return m_dataInput->readInt64();
 }
 
-float PdxLocalReader::readFloat(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+float PdxLocalReader::readFloat(const std::string& fieldName) {
   return m_dataInput->readFloat();
 }
 
-double PdxLocalReader::readDouble(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+double PdxLocalReader::readDouble(const std::string& fieldName) {
   return m_dataInput->readDouble();
 }
 
-char* PdxLocalReader::readString(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+char* PdxLocalReader::readString(const std::string& fieldName) {
   char* str;
   m_dataInput->readString(&str);
   return str;
 }
 
-wchar_t* PdxLocalReader::readWideString(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+wchar_t* PdxLocalReader::readWideString(const std::string& fieldName) {
   wchar_t* str;
   m_dataInput->readWideString(&str);
   return str;
 }
 std::shared_ptr<Serializable> PdxLocalReader::readObject(
-    const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+    const std::string& fieldName) {
   std::shared_ptr<Serializable> ptr;
   m_dataInput->readObject(ptr);
   if (ptr != nullptr) {
@@ -171,93 +153,87 @@ std::shared_ptr<Serializable> PdxLocalReader::readObject(
   }
 }
 
-char* PdxLocalReader::readCharArray(const char* fieldName,
+char* PdxLocalReader::readCharArray(const std::string& fieldName,
                                     int32_t& length) {  // TODO:: need to return
                                                         // Length to user for
                                                         // all primitive arrays
-  checkEmptyFieldName(fieldName);
   char* charArray = nullptr;
   m_dataInput->readCharArray(&charArray, length);
   return charArray;
 }
 
 wchar_t* PdxLocalReader::readWideCharArray(
-    const char* fieldName,
+    const std::string& fieldName,
     int32_t& length) {  // TODO:: need to return Length to user for all
                         // primitive arrays
-  checkEmptyFieldName(fieldName);
   wchar_t* charArray = nullptr;
   m_dataInput->readWideCharArray(&charArray, length);
   return charArray;
 }
-bool* PdxLocalReader::readBooleanArray(const char* fieldName, int32_t& length) {
-  checkEmptyFieldName(fieldName);
+bool* PdxLocalReader::readBooleanArray(const std::string& fieldName,
+                                       int32_t& length) {
   bool* boolArray = nullptr;
   m_dataInput->readBooleanArray(&boolArray, length);
   return boolArray;
 }
 
-int8_t* PdxLocalReader::readByteArray(const char* fieldName, int32_t& length) {
-  checkEmptyFieldName(fieldName);
+int8_t* PdxLocalReader::readByteArray(const std::string& fieldName,
+                                      int32_t& length) {
   int8_t* byteArray = nullptr;
   m_dataInput->readByteArray(&byteArray, length);
   return byteArray;
 }
 
-int16_t* PdxLocalReader::readShortArray(const char* fieldName,
+int16_t* PdxLocalReader::readShortArray(const std::string& fieldName,
                                         int32_t& length) {
-  checkEmptyFieldName(fieldName);
   int16_t* shortArray = nullptr;
   m_dataInput->readShortArray(&shortArray, length);
   return shortArray;
 }
 
-int32_t* PdxLocalReader::readIntArray(const char* fieldName, int32_t& length) {
-  checkEmptyFieldName(fieldName);
+int32_t* PdxLocalReader::readIntArray(const std::string& fieldName,
+                                      int32_t& length) {
   int32_t* intArray = nullptr;
   m_dataInput->readIntArray(&intArray, length);
   return intArray;
 }
 
-int64_t* PdxLocalReader::readLongArray(const char* fieldName, int32_t& length) {
-  checkEmptyFieldName(fieldName);
+int64_t* PdxLocalReader::readLongArray(const std::string& fieldName,
+                                       int32_t& length) {
   int64_t* longArray = nullptr;
   m_dataInput->readLongArray(&longArray, length);
   return longArray;
 }
 
-float* PdxLocalReader::readFloatArray(const char* fieldName, int32_t& length) {
-  checkEmptyFieldName(fieldName);
+float* PdxLocalReader::readFloatArray(const std::string& fieldName,
+                                      int32_t& length) {
   float* floatArray = nullptr;
   m_dataInput->readFloatArray(&floatArray, length);
   return floatArray;
 }
 
-double* PdxLocalReader::readDoubleArray(const char* fieldName,
+double* PdxLocalReader::readDoubleArray(const std::string& fieldName,
                                         int32_t& length) {
-  checkEmptyFieldName(fieldName);
   double* doubleArray = nullptr;
   m_dataInput->readDoubleArray(&doubleArray, length);
   return doubleArray;
 }
 
-char** PdxLocalReader::readStringArray(const char* fieldName, int32_t& length) {
-  checkEmptyFieldName(fieldName);
+char** PdxLocalReader::readStringArray(const std::string& fieldName,
+                                       int32_t& length) {
   char** stringArray = nullptr;
   m_dataInput->readStringArray(&stringArray, length);
   return stringArray;
 }
 
-wchar_t** PdxLocalReader::readWideStringArray(const char* fieldName,
+wchar_t** PdxLocalReader::readWideStringArray(const std::string& fieldName,
                                               int32_t& length) {
-  checkEmptyFieldName(fieldName);
   wchar_t** stringArray = nullptr;
   m_dataInput->readWideStringArray(&stringArray, length);
   return stringArray;
 }
 std::shared_ptr<CacheableObjectArray> PdxLocalReader::readObjectArray(
-    const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+    const std::string& fieldName) {
   auto coa = CacheableObjectArray::create();
   coa->fromData(*m_dataInput);
   LOGDEBUG("PdxLocalReader::readObjectArray coa->size() = %d", coa->size());
@@ -267,16 +243,15 @@ std::shared_ptr<CacheableObjectArray> PdxLocalReader::readObjectArray(
   return coa;
 }
 
-int8_t** PdxLocalReader::readArrayOfByteArrays(const char* fieldName,
+int8_t** PdxLocalReader::readArrayOfByteArrays(const std::string& fieldName,
                                                int32_t& arrayLength,
                                                int32_t** elementLength) {
-  checkEmptyFieldName(fieldName);
   int8_t** arrofBytearr = nullptr;
   m_dataInput->readArrayOfByteArrays(&arrofBytearr, arrayLength, elementLength);
   return arrofBytearr;
 }
-std::shared_ptr<CacheableDate> PdxLocalReader::readDate(const char* fieldName) {
-  checkEmptyFieldName(fieldName);
+std::shared_ptr<CacheableDate> PdxLocalReader::readDate(
+    const std::string& fieldName) {
   auto cd = CacheableDate::create();
   cd->fromData(*m_dataInput);
   return cd;
@@ -342,17 +317,18 @@ std::shared_ptr<CacheableDate> PdxLocalReader::readDate(const char* fieldName) {
    return nullptr;
 }
 
-bool PdxLocalReader::hasField(const char* fieldName) {
+bool PdxLocalReader::hasField(const std::string& fieldName) {
   return m_pdxType->getPdxField(fieldName) != nullptr;
 }
 
-bool PdxLocalReader::isIdentityField(const char* fieldName) {
- auto pft = m_pdxType->getPdxField(fieldName);
+bool PdxLocalReader::isIdentityField(const std::string& fieldName) {
+  auto pft = m_pdxType->getPdxField(fieldName);
   return (pft != nullptr) && (pft->getIdentityField());
 }
 
 void PdxLocalReader::readCollection(
-    const char* fieldName, std::shared_ptr<CacheableArrayList>& collection) {
+    const std::string& fieldName,
+    std::shared_ptr<CacheableArrayList>& collection) {
   collection = m_dataInput->readObject<CacheableArrayList>();
 }
 std::shared_ptr<PdxUnreadFields> PdxLocalReader::readUnreadFields() {
diff --git a/cppcache/src/PdxLocalReader.hpp b/cppcache/src/PdxLocalReader.hpp
index 654f1f1c..bea2c782 100644
--- a/cppcache/src/PdxLocalReader.hpp
+++ b/cppcache/src/PdxLocalReader.hpp
@@ -48,7 +48,6 @@ class PdxLocalReader : public PdxReader {
 
   void initialize();
   void resettoPdxHead();
-  void checkEmptyFieldName(const char* fieldName);
 
  public:
   PdxLocalReader(std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry);
@@ -70,150 +69,155 @@ class PdxLocalReader : public PdxReader {
    * @param fieldName name of the field which needs to serialize
    * Returns char value
    */
-  virtual char readChar(const char* fieldName);
+  virtual char readChar(const std::string& fieldName);
 
   /**
    * Read a wide char value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns wide char value
    */
-  virtual wchar_t readWideChar(const char* fieldName);
+  virtual wchar_t readWideChar(const std::string& fieldName);
 
   /**
    * Read a boolean value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns bool value
    */
-  virtual bool readBoolean(const char* fieldName);
+  virtual bool readBoolean(const std::string& fieldName);
 
   /**
    * Read a byte value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns byte value
    */
-  virtual int8_t readByte(const char* fieldName);
+  virtual int8_t readByte(const std::string& fieldName);
 
   /**
    * Read a 16-bit integer value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns short value
    */
-  virtual int16_t readShort(const char* fieldName);
+  virtual int16_t readShort(const std::string& fieldName);
 
   /**
    * Read a 32-bit integer value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Int value
    */
-  virtual int32_t readInt(const char* fieldName);
+  virtual int32_t readInt(const std::string& fieldName);
 
   /**
    * Read a 64-bit long value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Long value
    */
-  virtual int64_t readLong(const char* fieldName);
+  virtual int64_t readLong(const std::string& fieldName);
 
   /**
    * Read a float value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Float value
    */
-  virtual float readFloat(const char* fieldName);
+  virtual float readFloat(const std::string& fieldName);
 
   /**
    * Read a double value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns double value
    */
-  virtual double readDouble(const char* fieldName);
+  virtual double readDouble(const std::string& fieldName);
 
   /**
    * Read a string from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns string value
    */
-  virtual char* readString(const char* fieldName);
+  virtual char* readString(const std::string& fieldName);
 
-  virtual wchar_t* readWideString(const char* fieldName);
+  virtual wchar_t* readWideString(const std::string& fieldName);
   /**
    * Read a object from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns std::shared_ptr<Serializable>
    */
-  virtual std::shared_ptr<Serializable> readObject(const char* fieldName);
+  virtual std::shared_ptr<Serializable> readObject(
+      const std::string& fieldName);
 
-  virtual char* readCharArray(const char* fieldName, int32_t& length);
+  virtual char* readCharArray(const std::string& fieldName, int32_t& length);
 
-  virtual wchar_t* readWideCharArray(const char* fieldName, int32_t& length);
+  virtual wchar_t* readWideCharArray(const std::string& fieldName,
+                                     int32_t& length);
 
-  virtual bool* readBooleanArray(const char* fieldName, int32_t& length);
+  virtual bool* readBooleanArray(const std::string& fieldName, int32_t& length);
 
   /**
    * Read a 8bit-Integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Byte Array
    */
-  virtual int8_t* readByteArray(const char* fieldName, int32_t& length);
+  virtual int8_t* readByteArray(const std::string& fieldName, int32_t& length);
 
   /**
    * Read a 16bit-Integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Short Array
    */
-  virtual int16_t* readShortArray(const char* fieldName, int32_t& length);
+  virtual int16_t* readShortArray(const std::string& fieldName,
+                                  int32_t& length);
 
   /**
    * Read a 32bit-Integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Int Array
    */
-  virtual int32_t* readIntArray(const char* fieldName, int32_t& length);
+  virtual int32_t* readIntArray(const std::string& fieldName, int32_t& length);
 
   /**
    * Read a Long integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Long Array
    */
-  virtual int64_t* readLongArray(const char* fieldName, int32_t& length);
+  virtual int64_t* readLongArray(const std::string& fieldName, int32_t& length);
 
   /**
    * Read a Float Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Float Array
    */
-  virtual float* readFloatArray(const char* fieldName, int32_t& length);
+  virtual float* readFloatArray(const std::string& fieldName, int32_t& length);
 
   /**
    * Read a Double Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns double Array
    */
-  virtual double* readDoubleArray(const char* fieldName, int32_t& length);
+  virtual double* readDoubleArray(const std::string& fieldName,
+                                  int32_t& length);
 
   /**
    * Read a String Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns String Array
    */
-  virtual char** readStringArray(const char* fieldName, int32_t& length);
+  virtual char** readStringArray(const std::string& fieldName, int32_t& length);
 
-  virtual wchar_t** readWideStringArray(const char* fieldName, int32_t& length);
+  virtual wchar_t** readWideStringArray(const std::string& fieldName,
+                                        int32_t& length);
 
   virtual std::shared_ptr<CacheableObjectArray> readObjectArray(
-      const char* fieldName);
+      const std::string& fieldName);
 
-  virtual int8_t** readArrayOfByteArrays(const char* fieldName,
+  virtual int8_t** readArrayOfByteArrays(const std::string& fieldName,
                                          int32_t& arrayLength,
                                          int32_t** elementLength);
 
-  virtual std::shared_ptr<CacheableDate> readDate(const char* fieldName);
+  virtual std::shared_ptr<CacheableDate> readDate(const std::string& fieldName);
 
-  virtual bool hasField(const char* fieldName);
+  virtual bool hasField(const std::string& fieldName);
 
-  virtual bool isIdentityField(const char* fieldName);
+  virtual bool isIdentityField(const std::string& fieldName);
 
-  virtual void readCollection(const char* fieldName,
+  virtual void readCollection(const std::string& fieldName,
                               std::shared_ptr<CacheableArrayList>& collection);
 
   virtual std::shared_ptr<PdxUnreadFields> readUnreadFields();
diff --git a/cppcache/src/PdxLocalWriter.cpp b/cppcache/src/PdxLocalWriter.cpp
index 92649b65..f52bd3ca 100644
--- a/cppcache/src/PdxLocalWriter.cpp
+++ b/cppcache/src/PdxLocalWriter.cpp
@@ -34,22 +34,21 @@ namespace client {
 PdxLocalWriter::PdxLocalWriter(DataOutput& output,
                                std::shared_ptr<PdxType> pdxType,
                                std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry)
-    : PdxLocalWriter(output, pdxType,
-                     pdxType ? pdxType->getPdxClassName() : nullptr,
+    : PdxLocalWriter(output, pdxType, pdxType ? pdxType->getPdxClassName() : "",
                      pdxTypeRegistry)
 
 {}
 
 PdxLocalWriter::PdxLocalWriter(DataOutput& dataOutput,
                                std::shared_ptr<PdxType> pdxType,
-                               const char* pdxClassName,
+                               std::string pdxClassName,
                                std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry)
     : m_dataOutput(&dataOutput),
       m_pdxType(pdxType),
       m_pdxClassName(pdxClassName),
       m_startPosition(nullptr),
       m_startPositionOffset(0),
-      m_domainClassName(nullptr),
+      m_domainClassName(""),
       m_currentOffsetIndex(0),
       m_pdxTypeRegistry(pdxTypeRegistry) {
   initialize();
@@ -160,51 +159,53 @@ int32_t PdxLocalWriter::calculateLenWithOffsets() {
 }
 
 bool PdxLocalWriter::isFieldWritingStarted() { return true; }
-std::shared_ptr<PdxWriter> PdxLocalWriter::writeChar(const char* fieldName,
-                                                     char value) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeChar(
+    const std::string& fieldName, char value) {
   m_dataOutput->writeChar(static_cast<uint16_t>(value));
   return shared_from_this();
 }
-std::shared_ptr<PdxWriter> PdxLocalWriter::writeChar(const char* fieldName,
-                                                     char16_t value) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeChar(
+    const std::string& fieldName, char16_t value) {
   m_dataOutput->writeChar(value);
   return shared_from_this();
 }
-std::shared_ptr<PdxWriter> PdxLocalWriter::writeBoolean(const char* fieldName,
-                                                        bool value) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeBoolean(
+    const std::string& fieldName, bool value) {
   m_dataOutput->writeBoolean(value);
   return shared_from_this();
  }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeByte(const char* fieldName,
-                                                      int8_t value) {
+ std::shared_ptr<PdxWriter> PdxLocalWriter::writeByte(
+     const std::string& fieldName, int8_t value) {
    m_dataOutput->write(value);
    return shared_from_this();
  }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeShort(const char* fieldName,
-                                                       int16_t value) {
+ std::shared_ptr<PdxWriter> PdxLocalWriter::writeShort(
+     const std::string& fieldName, int16_t value) {
    m_dataOutput->writeInt(value);
    return shared_from_this();
 }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeInt(const char* fieldName, int32_t value) {
-   m_dataOutput->writeInt(value);
-   return shared_from_this();
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeInt(
+    const std::string& fieldName, int32_t value) {
+  m_dataOutput->writeInt(value);
+  return shared_from_this();
  }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeLong(const char* fieldName,
-                                                      int64_t value) {
+ std::shared_ptr<PdxWriter> PdxLocalWriter::writeLong(
+     const std::string& fieldName, int64_t value) {
    m_dataOutput->writeInt(value);
    return shared_from_this();
  }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeFloat(const char* fieldName, float value) {
-  m_dataOutput->writeFloat(value);
-  return shared_from_this();
+ std::shared_ptr<PdxWriter> PdxLocalWriter::writeFloat(
+     const std::string& fieldName, float value) {
+   m_dataOutput->writeFloat(value);
+   return shared_from_this();
  }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeDouble(const char* fieldName,
-                                                        double value) {
+ std::shared_ptr<PdxWriter> PdxLocalWriter::writeDouble(
+     const std::string& fieldName, double value) {
    m_dataOutput->writeDouble(value);
    return shared_from_this();
  }
  std::shared_ptr<PdxWriter> PdxLocalWriter::writeDate(
-     const char* fieldName, std::shared_ptr<CacheableDate> date) {
+     const std::string& fieldName, std::shared_ptr<CacheableDate> date) {
    // m_dataOutput->writeObject(date.get());
    if (date != nullptr) {
      date->toData(*m_dataOutput);
@@ -213,8 +214,8 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeBoolean(const char* fieldName,
    }
    return shared_from_this();
 }
-std::shared_ptr<PdxWriter> PdxLocalWriter::writeString(const char* fieldName,
-                                                       const char* value) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeString(
+    const std::string& fieldName, const char* value) {
   addOffset();
   if (value == nullptr) {
     m_dataOutput->write(static_cast<int8_t>(GeodeTypeIds::CacheableNullString));
@@ -233,8 +234,8 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeString(const char* fieldName,
   }
   return shared_from_this();
 }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeWideString(const char* fieldName,
-                                             const wchar_t* value) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeWideString(
+    const std::string& fieldName, const wchar_t* value) {
   addOffset();
   if (value == nullptr) {
     m_dataOutput->write(static_cast<int8_t>(GeodeTypeIds::CacheableNullString));
@@ -290,8 +291,8 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeString(const char* fieldName,
   }
   return shared_from_this();
 }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeStringArray(const char* fieldName,
-                                              char** array, int length) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeStringArray(
+    const std::string& fieldName, char** array, int length) {
   addOffset();
   if (array == nullptr) {
     m_dataOutput->write(static_cast<int8_t>(-1));
@@ -305,7 +306,7 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeString(const char* fieldName,
   return shared_from_this();
 }
 std::shared_ptr<PdxWriter> PdxLocalWriter::writeWideStringArray(
-    const char* fieldName, wchar_t** array, int length) {
+    const std::string& fieldName, wchar_t** array, int length) {
   addOffset();
   if (array == nullptr) {
     m_dataOutput->write(static_cast<int8_t>(-1));
@@ -318,7 +319,7 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeWideStringArray(
   return shared_from_this();
 }
 std::shared_ptr<PdxWriter> PdxLocalWriter::writeObject(
-    const char* fieldName, std::shared_ptr<Serializable> value) {
+    const std::string& fieldName, std::shared_ptr<Serializable> value) {
   addOffset();
   std::shared_ptr<CacheableEnum> enumValPtr = nullptr;
   std::shared_ptr<CacheableObjectArray> objArrPtr = nullptr;
@@ -353,7 +354,7 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeObject(
 
       m_dataOutput->write(
           static_cast<int8_t>(GeodeTypeIds::CacheableASCIIString));
-      m_dataOutput->writeASCII(actualObjPtr->getClassName());
+      m_dataOutput->writeASCII(actualObjPtr->getClassName().c_str());
 
       for (; iter != objArrPtr->end(); ++iter) {
         m_dataOutput->writeObject(*iter);
@@ -364,63 +365,63 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeObject(
   }
   return shared_from_this();
 }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeBooleanArray(const char* fieldName,
-                                               bool* array, int length) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeBooleanArray(
+    const std::string& fieldName, bool* array, int length) {
   addOffset();
   writeObject(array, length);
   return shared_from_this();
 }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeCharArray(const char* fieldName, char* array,
-                                            int length) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeCharArray(
+    const std::string& fieldName, char* array, int length) {
   addOffset();
   writePdxCharArray(array, length);
   return shared_from_this();
 }
 std::shared_ptr<PdxWriter> PdxLocalWriter::writeWideCharArray(
-    const char* fieldName, wchar_t* array, int length) {
+    const std::string& fieldName, wchar_t* array, int length) {
   addOffset();
   writeObject(array, length);
   return shared_from_this();
 }
-std::shared_ptr<PdxWriter> PdxLocalWriter::writeByteArray(const char* fieldName,
-                                                          int8_t* array,
-                                                          int length) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeByteArray(
+    const std::string& fieldName, int8_t* array, int length) {
   addOffset();
   writeObject(array, length);
   return shared_from_this();
 }
 std::shared_ptr<PdxWriter> PdxLocalWriter::writeShortArray(
-    const char* fieldName, int16_t* array, int length) {
+    const std::string& fieldName, int16_t* array, int length) {
   addOffset();
   writeObject(array, length);
   return shared_from_this();
 }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeIntArray(const char* fieldName,
-                                           int32_t* array, int length) {
-   addOffset();
-   writeObject(array, length);
-   return shared_from_this();
-}
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeLongArray(const char* fieldName,
-                                            int64_t* array, int length) {
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeIntArray(
+    const std::string& fieldName, int32_t* array, int length) {
   addOffset();
   writeObject(array, length);
   return shared_from_this();
- }
- std::shared_ptr<PdxWriter> PdxLocalWriter::writeFloatArray(const char* fieldName,
-                                             float* array, int length) {
+}
+std::shared_ptr<PdxWriter> PdxLocalWriter::writeLongArray(
+    const std::string& fieldName, int64_t* array, int length) {
   addOffset();
   writeObject(array, length);
   return shared_from_this();
  }
+ std::shared_ptr<PdxWriter> PdxLocalWriter::writeFloatArray(
+     const std::string& fieldName, float* array, int length) {
+   addOffset();
+   writeObject(array, length);
+   return shared_from_this();
+ }
  std::shared_ptr<PdxWriter> PdxLocalWriter::writeDoubleArray(
-     const char* fieldName, double* array, int length) {
+     const std::string& fieldName, double* array, int length) {
    addOffset();
    writeObject(array, length);
    return shared_from_this();
  }
  std::shared_ptr<PdxWriter> PdxLocalWriter::writeObjectArray(
-     const char* fieldName, std::shared_ptr<CacheableObjectArray> array) {
+     const std::string& fieldName,
+     std::shared_ptr<CacheableObjectArray> array) {
    addOffset();
    if (array != nullptr) {
      array->toData(*m_dataOutput);
@@ -430,7 +431,7 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeShortArray(
    return shared_from_this();
 }
 std::shared_ptr<PdxWriter> PdxLocalWriter::writeArrayOfByteArrays(
-    const char* fieldName, int8_t** byteArrays, int arrayLength,
+    const std::string& fieldName, int8_t** byteArrays, int arrayLength,
     int* elementLength) {
   addOffset();
   if (byteArrays != nullptr) {
@@ -445,7 +446,7 @@ std::shared_ptr<PdxWriter> PdxLocalWriter::writeArrayOfByteArrays(
   return shared_from_this();
 }
 std::shared_ptr<PdxWriter> PdxLocalWriter::markIdentityField(
-    const char* fieldName) {
+    const std::string& fieldName) {
   return shared_from_this();
 }
 
diff --git a/cppcache/src/PdxLocalWriter.hpp b/cppcache/src/PdxLocalWriter.hpp
index 8f487250..5aa07d0a 100644
--- a/cppcache/src/PdxLocalWriter.hpp
+++ b/cppcache/src/PdxLocalWriter.hpp
@@ -41,13 +41,13 @@ class PdxLocalWriter : public PdxWriter,
   std::shared_ptr<PdxType> m_pdxType;
   const uint8_t* m_startPosition;
   int32_t m_startPositionOffset;
-  const char* m_domainClassName;
+  std::string m_domainClassName;
   std::vector<int32_t> m_offsets;
   int32_t m_currentOffsetIndex;
 
   std::shared_ptr<PdxRemotePreservedData> m_preserveData;
   std::shared_ptr<PdxTypeRegistry> m_pdxTypeRegistry;
-  const char* m_pdxClassName;
+  std::string m_pdxClassName;
 
   std::shared_ptr<PdxWriter> writeStringwithoutOffset(const char* value);
 
@@ -58,7 +58,7 @@ class PdxLocalWriter : public PdxWriter,
                  std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry);
 
   PdxLocalWriter(DataOutput& output, std::shared_ptr<PdxType> pdxType,
-                 const char* pdxDomainType,
+                 std::string pdxDomainType,
                  std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry);
 
   virtual ~PdxLocalWriter();
@@ -130,222 +130,93 @@ class PdxLocalWriter : public PdxWriter,
     }
   }
 
-  /**
-   *Write a wide char to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The wide char value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeChar(const char* fieldName,
-                                               char value);
-
-  virtual std::shared_ptr<PdxWriter> writeChar(const char* fieldName,
-                                               char16_t value);
-
-  /**
-   *Write a boolean value to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The boolean value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeBoolean(const char* fieldName,
-                                                  bool value);
-
-  /**
-   *Write a 8-bit integer or byte to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The 8-bit integer or byte to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeByte(const char* fieldName,
-                                               int8_t value);
-
-  /**
-   *Write a 16-bit integer to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The 16-bit integer to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeShort(const char* fieldName,
-                                                int16_t value);
-
-  /**
-   *Write a 32-bit integer to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The 32-bit integer to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeInt(const char* fieldName,
-                                              int32_t value);
-
-  /**
-   *Write a long integer to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The long integer to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeLong(const char* fieldName,
-                                               int64_t value);
-
-  /**
-   *Write a Float to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The float value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeFloat(const char* fieldName,
-                                                float value);
-
-  /**
-   *Write a Double to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The double value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeDouble(const char* fieldName,
-                                                 double value);
-
-  /**
-   *Write a Date to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The date value to write
-   */
+  virtual std::shared_ptr<PdxWriter> writeChar(const std::string& fieldName,
+                                               char value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeChar(const std::string& fieldName,
+                                               char16_t value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeBoolean(const std::string& fieldName,
+                                                  bool value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeByte(const std::string& fieldName,
+                                               int8_t value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeShort(const std::string& fieldName,
+                                                int16_t value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeInt(const std::string& fieldName,
+                                              int32_t value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeLong(const std::string& fieldName,
+                                               int64_t value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeFloat(const std::string& fieldName,
+                                                float value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeDouble(const std::string& fieldName,
+                                                 double value) override;
+
   virtual std::shared_ptr<PdxWriter> writeDate(
-      const char* fieldName, std::shared_ptr<CacheableDate> date);
-
-  /**
-   *Write a string to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The string to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeString(const char* fieldName,
-                                                 const char* value);
-
-  virtual std::shared_ptr<PdxWriter> writeWideString(const char* fieldName,
-                                                     const wchar_t* value);
-  /**
-   *Write a object to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The object to write
-   */
+      const std::string& fieldName,
+      std::shared_ptr<CacheableDate> date) override;
+
+  virtual std::shared_ptr<PdxWriter> writeString(const std::string& fieldName,
+                                                 const char* value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeWideString(
+      const std::string& fieldName, const wchar_t* value) override;
   virtual std::shared_ptr<PdxWriter> writeObject(
-      const char* fieldName, std::shared_ptr<Serializable> value);
-
-  /**
-   *Write a boolean array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The boolean array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeBooleanArray(const char* fieldName,
-                                                       bool* array, int length);
-
-  /**
-   *Write a Char array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The char array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeCharArray(const char* fieldName,
-                                                    char* array, int length);
-
-  virtual std::shared_ptr<PdxWriter> writeWideCharArray(const char* fieldName,
-                                                        wchar_t* array,
-                                                        int length);
-  /**
-   *Write a Byte array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The byte array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeByteArray(const char* fieldName,
-                                                    int8_t* array, int length);
-
-  /**
-   *Write a 16-bit integer array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeShortArray(const char* fieldName,
-                                                     int16_t* array,
-                                                     int length);
-
-  /**
-   *Write a 32-bit integer array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The integer array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeIntArray(const char* fieldName,
-                                                   int32_t* array, int length);
-
-  /**
-   *Write a long integer array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The long integer array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeLongArray(const char* fieldName,
-                                                    int64_t* array, int length);
-
-  /**
-   *Write a Float array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The float array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeFloatArray(const char* fieldName,
-                                                     float* array, int length);
-
-  /**
-   *Write a double array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The double array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeDoubleArray(const char* fieldName,
-                                                      double* array,
-                                                      int length);
-
-  /**
-   *Write a string array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The string array value to write
-   */
-  virtual std::shared_ptr<PdxWriter> writeStringArray(const char* fieldName,
-                                                      char** array, int length);
-
-  virtual std::shared_ptr<PdxWriter> writeWideStringArray(const char* fieldName,
-                                                          wchar_t** array,
-                                                          int length);
-  /**
-   *Write a object array to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param value The object array value to write
-   */
+      const std::string& fieldName,
+      std::shared_ptr<Serializable> value) override;
+
+  virtual std::shared_ptr<PdxWriter> writeBooleanArray(
+      const std::string& fieldName, bool* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeCharArray(
+      const std::string& fieldName, char* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeWideCharArray(
+      const std::string& fieldName, wchar_t* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeByteArray(
+      const std::string& fieldName, int8_t* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeShortArray(
+      const std::string& fieldName, int16_t* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeIntArray(const std::string& fieldName,
+                                                   int32_t* array,
+                                                   int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeLongArray(
+      const std::string& fieldName, int64_t* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeFloatArray(
+      const std::string& fieldName, float* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeDoubleArray(
+      const std::string& fieldName, double* array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeStringArray(
+      const std::string& fieldName, char** array, int length) override;
+
+  virtual std::shared_ptr<PdxWriter> writeWideStringArray(
+      const std::string& fieldName, wchar_t** array, int length) override;
+
   virtual std::shared_ptr<PdxWriter> writeObjectArray(
-      const char* fieldName, std::shared_ptr<CacheableObjectArray> array);
+      const std::string& fieldName,
+      std::shared_ptr<CacheableObjectArray> array) override;
 
-  /**
-   *Write a array of byte arrays to the PdxWriter.
-   *@param fieldName The name of the field associated with the value.
-   *@param array The arrayOfbytearray value to write
-   */
   virtual std::shared_ptr<PdxWriter> writeArrayOfByteArrays(
-      const char* fieldName, int8_t** array, int arrayLength,
-      int* elementLength);
-
-  /**
-   *Indicate that the given field name should be included in hashCode and equals
-   *checks
-   *of this object on a server that is using {@link
-   *CacheFactory#setPdxReadSerialized(boolean)} or when a client executes a
-   *query on a server.
-   *The fields that are marked as identity fields are used to generate the
-   *hashCode and
-   *equals methods of {@link PdxInstance}. Because of this, the identity fields
-   *should themselves
-   *either be primatives, or implement hashCode and equals.
-   *
-   *If no fields are set as identity fields, then all fields will be used in
-   *hashCode and equal checks.
-   *
-   *The identity fields should make marked after they are written using a write*
-   *method.
-   *
-   *@param fieldName The name of the field that should be used in the as part of
-   *the identity.
-   *@eturns this std::shared_ptr<PdxWriter>
-   */
-  virtual std::shared_ptr<PdxWriter> markIdentityField(const char* fieldName);
+      const std::string& fieldName, int8_t** array, int arrayLength,
+      int* elementLength) override;
+
+  virtual std::shared_ptr<PdxWriter> markIdentityField(
+      const std::string& fieldName) override;
 
   virtual std::shared_ptr<PdxWriter> writeUnreadFields(
-      std::shared_ptr<PdxUnreadFields> unread);
+      std::shared_ptr<PdxUnreadFields> unread) override;
 
   // this is used to get pdx stream when WriteablePdxStream udpadates the field
   // It should be called after pdx stream has been written to output
diff --git a/cppcache/src/PdxReaderWithTypeCollector.cpp b/cppcache/src/PdxReaderWithTypeCollector.cpp
index 3962cecf..51bb7657 100644
--- a/cppcache/src/PdxReaderWithTypeCollector.cpp
+++ b/cppcache/src/PdxReaderWithTypeCollector.cpp
@@ -35,32 +35,26 @@ PdxReaderWithTypeCollector::PdxReaderWithTypeCollector(
     DataInput& dataInput, std::shared_ptr<PdxType> pdxType, int32_t pdxlen,
     std::shared_ptr<PdxTypeRegistry> pdxTypeRegistry)
     : PdxLocalReader(dataInput, pdxType, pdxlen, pdxTypeRegistry) {
-  m_newPdxType = std::make_shared<PdxType>(m_pdxTypeRegistry ,pdxType->getPdxClassName(), true);
+  m_newPdxType = std::make_shared<PdxType>(
+      m_pdxTypeRegistry, pdxType->getPdxClassName().c_str(), true);
 }
 
 PdxReaderWithTypeCollector::~PdxReaderWithTypeCollector() {}
 
-void PdxReaderWithTypeCollector::checkType(const char* fieldName, int8_t typeId,
-                                           const char* fieldType) {
-  // Check for Empty Field.
-  if (fieldName == nullptr) {
-    throw IllegalStateException("Field name is null");
-  }
-
+void PdxReaderWithTypeCollector::checkType(const std::string& fieldName,
+                                           int8_t typeId,
+                                           const std::string& fieldType) {
   auto pft = m_pdxType->getPdxField(fieldName);
   if (pft != nullptr) {
     if (typeId != pft->getTypeId()) {
-      char excpStr[128] = {0};
-      ACE_OS::snprintf(
-          excpStr, 128,
-          "Expected %s fieldType field but found field of type %s ", fieldType,
-          pft->toString()->asChar());
-      throw IllegalStateException(excpStr);
+      throw IllegalStateException("Expected " + fieldType +
+                                  " fieldType field but found field of type " +
+                                  pft->toString().c_str());
     }
   }
 }
 
-char PdxReaderWithTypeCollector::readChar(const char* fieldName) {
+char PdxReaderWithTypeCollector::readChar(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::CHAR, "char");
   m_newPdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                         PdxTypes::CHAR_SIZE);
@@ -77,7 +71,7 @@ char PdxReaderWithTypeCollector::readChar(const char* fieldName) {
   }
 }
 
-wchar_t PdxReaderWithTypeCollector::readWideChar(const char* fieldName) {
+wchar_t PdxReaderWithTypeCollector::readWideChar(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::CHAR, "char");
   m_newPdxType->addFixedLengthTypeField(fieldName, "char", PdxFieldTypes::CHAR,
                                         PdxTypes::CHAR_SIZE);
@@ -94,7 +88,7 @@ wchar_t PdxReaderWithTypeCollector::readWideChar(const char* fieldName) {
   }
 }
 
-bool PdxReaderWithTypeCollector::readBoolean(const char* fieldName) {
+bool PdxReaderWithTypeCollector::readBoolean(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::BOOLEAN, "boolean");
   m_newPdxType->addFixedLengthTypeField(
       fieldName, "boolean", PdxFieldTypes::BOOLEAN, PdxTypes::BOOLEAN_SIZE);
@@ -111,7 +105,7 @@ bool PdxReaderWithTypeCollector::readBoolean(const char* fieldName) {
   }
 }
 
-int8_t PdxReaderWithTypeCollector::readByte(const char* fieldName) {
+int8_t PdxReaderWithTypeCollector::readByte(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::BYTE, "byte");
   m_newPdxType->addFixedLengthTypeField(fieldName, "byte", PdxFieldTypes::BYTE,
                                         PdxTypes::BYTE_SIZE);
@@ -129,7 +123,7 @@ int8_t PdxReaderWithTypeCollector::readByte(const char* fieldName) {
   }
 }
 
-int16_t PdxReaderWithTypeCollector::readShort(const char* fieldName) {
+int16_t PdxReaderWithTypeCollector::readShort(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::SHORT, "short");
   m_newPdxType->addFixedLengthTypeField(
       fieldName, "short", PdxFieldTypes::SHORT, PdxTypes::SHORT_SIZE);
@@ -147,7 +141,7 @@ int16_t PdxReaderWithTypeCollector::readShort(const char* fieldName) {
   }
 }
 
-int32_t PdxReaderWithTypeCollector::readInt(const char* fieldName) {
+int32_t PdxReaderWithTypeCollector::readInt(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::INT, "int");
   m_newPdxType->addFixedLengthTypeField(fieldName, "int", PdxFieldTypes::INT,
                                         PdxTypes::INTEGER_SIZE);
@@ -165,7 +159,7 @@ int32_t PdxReaderWithTypeCollector::readInt(const char* fieldName) {
   }
 }
 
-int64_t PdxReaderWithTypeCollector::readLong(const char* fieldName) {
+int64_t PdxReaderWithTypeCollector::readLong(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::LONG, "long");
   m_newPdxType->addFixedLengthTypeField(fieldName, "long", PdxFieldTypes::LONG,
                                         PdxTypes::LONG_SIZE);
@@ -183,7 +177,7 @@ int64_t PdxReaderWithTypeCollector::readLong(const char* fieldName) {
   }
 }
 
-float PdxReaderWithTypeCollector::readFloat(const char* fieldName) {
+float PdxReaderWithTypeCollector::readFloat(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::FLOAT, "float");
   m_newPdxType->addFixedLengthTypeField(
       fieldName, "float", PdxFieldTypes::FLOAT, PdxTypes::FLOAT_SIZE);
@@ -201,7 +195,7 @@ float PdxReaderWithTypeCollector::readFloat(const char* fieldName) {
   }
 }
 
-double PdxReaderWithTypeCollector::readDouble(const char* fieldName) {
+double PdxReaderWithTypeCollector::readDouble(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::DOUBLE, "double");
   m_newPdxType->addFixedLengthTypeField(
       fieldName, "double", PdxFieldTypes::DOUBLE, PdxTypes::DOUBLE_SIZE);
@@ -219,7 +213,7 @@ double PdxReaderWithTypeCollector::readDouble(const char* fieldName) {
   }
 }
 
-char* PdxReaderWithTypeCollector::readString(const char* fieldName) {
+char* PdxReaderWithTypeCollector::readString(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::STRING, "String");
   m_newPdxType->addVariableLengthTypeField(fieldName, "String",
                                            PdxFieldTypes::STRING);
@@ -243,7 +237,8 @@ char* PdxReaderWithTypeCollector::readString(const char* fieldName) {
   }
 }
 
-wchar_t* PdxReaderWithTypeCollector::readWideString(const char* fieldName) {
+wchar_t* PdxReaderWithTypeCollector::readWideString(
+    const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::STRING, "String");
   m_newPdxType->addVariableLengthTypeField(fieldName, "String",
                                            PdxFieldTypes::STRING);
@@ -268,7 +263,7 @@ wchar_t* PdxReaderWithTypeCollector::readWideString(const char* fieldName) {
   }
 }
 std::shared_ptr<Serializable> PdxReaderWithTypeCollector::readObject(
-    const char* fieldName) {
+    const std::string& fieldName) {
   // field is collected after reading
   checkType(fieldName, PdxFieldTypes::OBJECT, "Serializable");
   int position = m_pdxType->getFieldPosition(fieldName, m_offsetsBuffer,
@@ -291,7 +286,7 @@ std::shared_ptr<Serializable> PdxReaderWithTypeCollector::readObject(
   }
 }
 
-char* PdxReaderWithTypeCollector::readCharArray(const char* fieldName,
+char* PdxReaderWithTypeCollector::readCharArray(const std::string& fieldName,
                                                 int32_t& length) {
   checkType(fieldName, PdxFieldTypes::CHAR_ARRAY, "char[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "char[]",
@@ -314,8 +309,8 @@ char* PdxReaderWithTypeCollector::readCharArray(const char* fieldName,
   }
 }
 
-wchar_t* PdxReaderWithTypeCollector::readWideCharArray(const char* fieldName,
-                                                       int32_t& length) {
+wchar_t* PdxReaderWithTypeCollector::readWideCharArray(
+    const std::string& fieldName, int32_t& length) {
   checkType(fieldName, PdxFieldTypes::CHAR_ARRAY, "char[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "char[]",
                                            PdxFieldTypes::CHAR_ARRAY);
@@ -337,7 +332,7 @@ wchar_t* PdxReaderWithTypeCollector::readWideCharArray(const char* fieldName,
   }
 }
 
-bool* PdxReaderWithTypeCollector::readBooleanArray(const char* fieldName,
+bool* PdxReaderWithTypeCollector::readBooleanArray(const std::string& fieldName,
                                                    int32_t& length) {
   checkType(fieldName, PdxFieldTypes::BOOLEAN_ARRAY, "boolean[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "boolean[]",
@@ -362,7 +357,7 @@ bool* PdxReaderWithTypeCollector::readBooleanArray(const char* fieldName,
   return nullptr;
 }
 
-int8_t* PdxReaderWithTypeCollector::readByteArray(const char* fieldName,
+int8_t* PdxReaderWithTypeCollector::readByteArray(const std::string& fieldName,
                                                   int32_t& length) {
   checkType(fieldName, PdxFieldTypes::BYTE_ARRAY, "byte[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "byte[]",
@@ -386,8 +381,8 @@ int8_t* PdxReaderWithTypeCollector::readByteArray(const char* fieldName,
   }
 }
 
-int16_t* PdxReaderWithTypeCollector::readShortArray(const char* fieldName,
-                                                    int32_t& length) {
+int16_t* PdxReaderWithTypeCollector::readShortArray(
+    const std::string& fieldName, int32_t& length) {
   checkType(fieldName, PdxFieldTypes::SHORT_ARRAY, "short[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "short[]",
                                            PdxFieldTypes::SHORT_ARRAY);
@@ -410,7 +405,7 @@ int16_t* PdxReaderWithTypeCollector::readShortArray(const char* fieldName,
   }
 }
 
-int32_t* PdxReaderWithTypeCollector::readIntArray(const char* fieldName,
+int32_t* PdxReaderWithTypeCollector::readIntArray(const std::string& fieldName,
                                                   int32_t& length) {
   checkType(fieldName, PdxFieldTypes::INT_ARRAY, "int[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "int[]",
@@ -434,7 +429,7 @@ int32_t* PdxReaderWithTypeCollector::readIntArray(const char* fieldName,
   }
 }
 
-int64_t* PdxReaderWithTypeCollector::readLongArray(const char* fieldName,
+int64_t* PdxReaderWithTypeCollector::readLongArray(const std::string& fieldName,
                                                    int32_t& length) {
   checkType(fieldName, PdxFieldTypes::LONG_ARRAY, "long[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "long[]",
@@ -458,7 +453,7 @@ int64_t* PdxReaderWithTypeCollector::readLongArray(const char* fieldName,
   }
 }
 
-float* PdxReaderWithTypeCollector::readFloatArray(const char* fieldName,
+float* PdxReaderWithTypeCollector::readFloatArray(const std::string& fieldName,
                                                   int32_t& length) {
   checkType(fieldName, PdxFieldTypes::FLOAT_ARRAY, "float[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "float[]",
@@ -482,8 +477,8 @@ float* PdxReaderWithTypeCollector::readFloatArray(const char* fieldName,
   }
 }
 
-double* PdxReaderWithTypeCollector::readDoubleArray(const char* fieldName,
-                                                    int32_t& length) {
+double* PdxReaderWithTypeCollector::readDoubleArray(
+    const std::string& fieldName, int32_t& length) {
   checkType(fieldName, PdxFieldTypes::DOUBLE_ARRAY, "double[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "double[]",
                                            PdxFieldTypes::DOUBLE_ARRAY);
@@ -506,7 +501,7 @@ double* PdxReaderWithTypeCollector::readDoubleArray(const char* fieldName,
   }
 }
 
-char** PdxReaderWithTypeCollector::readStringArray(const char* fieldName,
+char** PdxReaderWithTypeCollector::readStringArray(const std::string& fieldName,
                                                    int32_t& length) {
   checkType(fieldName, PdxFieldTypes::STRING_ARRAY, "String[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "String[]",
@@ -530,8 +525,8 @@ char** PdxReaderWithTypeCollector::readStringArray(const char* fieldName,
   }
 }
 
-wchar_t** PdxReaderWithTypeCollector::readWideStringArray(const char* fieldName,
-                                                          int32_t& length) {
+wchar_t** PdxReaderWithTypeCollector::readWideStringArray(
+    const std::string& fieldName, int32_t& length) {
   checkType(fieldName, PdxFieldTypes::STRING_ARRAY, "String[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "String[]",
                                            PdxFieldTypes::STRING_ARRAY);
@@ -554,7 +549,7 @@ wchar_t** PdxReaderWithTypeCollector::readWideStringArray(const char* fieldName,
   }
 }
 std::shared_ptr<CacheableObjectArray>
-PdxReaderWithTypeCollector::readObjectArray(const char* fieldName) {
+PdxReaderWithTypeCollector::readObjectArray(const std::string& fieldName) {
   checkType(fieldName, PdxFieldTypes::OBJECT_ARRAY, "Object[]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "Object[]",
                                            PdxFieldTypes::OBJECT_ARRAY);
@@ -577,7 +572,8 @@ PdxReaderWithTypeCollector::readObjectArray(const char* fieldName) {
 }
 
 int8_t** PdxReaderWithTypeCollector::readArrayOfByteArrays(
-    const char* fieldName, int32_t& arrayLength, int32_t** elementLength) {
+    const std::string& fieldName, int32_t& arrayLength,
+    int32_t** elementLength) {
   checkType(fieldName, PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS, "byte[][]");
   m_newPdxType->addVariableLengthTypeField(fieldName, "byte[][]",
                                            PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS);
@@ -599,25 +595,27 @@ int8_t** PdxReaderWithTypeCollector::readArrayOfByteArrays(
     return nullptr;
   }
 }
- std::shared_ptr<CacheableDate> PdxReaderWithTypeCollector::readDate(const char* fieldName) {
-   checkType(fieldName, PdxFieldTypes::DATE, "Date");
-   m_newPdxType->addFixedLengthTypeField(fieldName, "Date", PdxFieldTypes::DATE,
-                                         PdxTypes::DATE_SIZE);
-   int position = m_pdxType->getFieldPosition(fieldName, m_offsetsBuffer,
-                                              m_offsetSize, m_serializedLength);
-   LOGDEBUG("PdxReaderWithTypeCollector::readDate() position = %d", position);
-   if (position != -1) {
-     m_dataInput->advanceCursor(position);
-     auto retVal = PdxLocalReader::readDate(fieldName);
-     m_dataInput->rewindCursor(position + PdxTypes::DATE_SIZE);
-     return retVal;
+std::shared_ptr<CacheableDate> PdxReaderWithTypeCollector::readDate(
+    const std::string& fieldName) {
+  checkType(fieldName, PdxFieldTypes::DATE, "Date");
+  m_newPdxType->addFixedLengthTypeField(fieldName, "Date", PdxFieldTypes::DATE,
+                                        PdxTypes::DATE_SIZE);
+  int position = m_pdxType->getFieldPosition(fieldName, m_offsetsBuffer,
+                                             m_offsetSize, m_serializedLength);
+  LOGDEBUG("PdxReaderWithTypeCollector::readDate() position = %d", position);
+  if (position != -1) {
+    m_dataInput->advanceCursor(position);
+    auto retVal = PdxLocalReader::readDate(fieldName);
+    m_dataInput->rewindCursor(position + PdxTypes::DATE_SIZE);
+    return retVal;
   } else {
     return nullptr;
   }
 }
 
 void PdxReaderWithTypeCollector::readCollection(
-    const char* fieldName, std::shared_ptr<CacheableArrayList>& collection) {
+    const std::string& fieldName,
+    std::shared_ptr<CacheableArrayList>& collection) {
   checkType(fieldName, apache::geode::client::GeodeTypeIds::CacheableArrayList,
             "Collection");
   m_newPdxType->addVariableLengthTypeField(
diff --git a/cppcache/src/PdxReaderWithTypeCollector.hpp b/cppcache/src/PdxReaderWithTypeCollector.hpp
index 1bf310b1..e4c6b070 100644
--- a/cppcache/src/PdxReaderWithTypeCollector.hpp
+++ b/cppcache/src/PdxReaderWithTypeCollector.hpp
@@ -31,7 +31,8 @@ class PdxReaderWithTypeCollector : public PdxLocalReader {
  private:
   std::shared_ptr<PdxType> m_newPdxType;
 
-  void checkType(const char* fieldName, int8_t typeId, const char* fieldType);
+  void checkType(const std::string& fieldName, int8_t typeId,
+                 const std::string& fieldType);
 
  public:
   PdxReaderWithTypeCollector(DataInput& dataInput,
@@ -42,138 +43,152 @@ class PdxReaderWithTypeCollector : public PdxLocalReader {
 
   std::shared_ptr<PdxType> getLocalType() const { return m_newPdxType; }
 
-  virtual char readChar(const char* fieldName);
+  virtual char readChar(const std::string& fieldName) override;
 
-  virtual wchar_t readWideChar(const char* fieldName);
+  virtual wchar_t readWideChar(const std::string& fieldName) override;
 
   /**
    * Read a boolean value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns bool value
    */
-  virtual bool readBoolean(const char* fieldName);
+  virtual bool readBoolean(const std::string& fieldName) override;
 
   /**
    * Read a byte value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Byte value
    */
-  virtual int8_t readByte(const char* fieldName);
+  virtual int8_t readByte(const std::string& fieldName) override;
 
   /**
    * Read a 16-bit integer value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Short value
    */
-  virtual int16_t readShort(const char* fieldName);
+  virtual int16_t readShort(const std::string& fieldName) override;
 
   /**
    * Read a 32-bit integer value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Int value
    */
-  virtual int32_t readInt(const char* fieldName);
+  virtual int32_t readInt(const std::string& fieldName) override;
 
   /**
    * Read a 64-bit long value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Long value
    */
-  virtual int64_t readLong(const char* fieldName);
+  virtual int64_t readLong(const std::string& fieldName) override;
 
   /**
    * Read a float value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Float value
    */
-  virtual float readFloat(const char* fieldName);
+  virtual float readFloat(const std::string& fieldName) override;
 
   /**
    * Read a double value from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Double value
    */
-  virtual double readDouble(const char* fieldName);
+  virtual double readDouble(const std::string& fieldName) override;
 
-  virtual char* readString(const char* fieldName);
+  virtual char* readString(const std::string& fieldName) override;
 
-  virtual wchar_t* readWideString(const char* fieldName);
+  virtual wchar_t* readWideString(const std::string& fieldName) override;
 
   /**
    * Read a object from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns String value
    */
-  virtual std::shared_ptr<Serializable> readObject(const char* fieldName);
+  virtual std::shared_ptr<Serializable> readObject(
+      const std::string& fieldName) override;
 
-  virtual char* readCharArray(const char* fieldName, int32_t& length);
+  virtual char* readCharArray(const std::string& fieldName,
+                              int32_t& length) override;
 
-  virtual wchar_t* readWideCharArray(const char* fieldName, int32_t& length);
+  virtual wchar_t* readWideCharArray(const std::string& fieldName,
+                                     int32_t& length) override;
 
-  virtual bool* readBooleanArray(const char* fieldName, int32_t& length);
+  virtual bool* readBooleanArray(const std::string& fieldName,
+                                 int32_t& length) override;
 
   /**
    * Read a 8bit-Integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Byte array
    */
-  virtual int8_t* readByteArray(const char* fieldName, int32_t& length);
+  virtual int8_t* readByteArray(const std::string& fieldName,
+                                int32_t& length) override;
 
   /**
    * Read a 16bit-Integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Short array
    */
-  virtual int16_t* readShortArray(const char* fieldName, int32_t& length);
+  virtual int16_t* readShortArray(const std::string& fieldName,
+                                  int32_t& length) override;
 
   /**
    * Read a 32bit-Integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Int array
    */
-  virtual int32_t* readIntArray(const char* fieldName, int32_t& length);
+  virtual int32_t* readIntArray(const std::string& fieldName,
+                                int32_t& length) override;
 
   /**
    * Read a Long integer Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Long array
    */
-  virtual int64_t* readLongArray(const char* fieldName, int32_t& length);
+  virtual int64_t* readLongArray(const std::string& fieldName,
+                                 int32_t& length) override;
 
   /**
    * Read a Float Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Float array
    */
-  virtual float* readFloatArray(const char* fieldName, int32_t& length);
+  virtual float* readFloatArray(const std::string& fieldName,
+                                int32_t& length) override;
 
   /**
    * Read a Double Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns Double array
    */
-  virtual double* readDoubleArray(const char* fieldName, int32_t& length);
+  virtual double* readDoubleArray(const std::string& fieldName,
+                                  int32_t& length) override;
 
   /**
    * Read a String Array from the <code>PdxReader</code>.
    * @param fieldName name of the field which needs to serialize
    * Returns String array
    */
-  virtual char** readStringArray(const char* fieldName, int32_t& length);
+  virtual char** readStringArray(const std::string& fieldName,
+                                 int32_t& length) override;
 
-  virtual wchar_t** readWideStringArray(const char* fieldName, int32_t& length);
+  virtual wchar_t** readWideStringArray(const std::string& fieldName,
+                                        int32_t& length) override;
 
   virtual std::shared_ptr<CacheableObjectArray> readObjectArray(
-      const char* fieldName);
+      const std::string& fieldName) override;
 
-  virtual int8_t** readArrayOfByteArrays(const char* fieldName,
+  virtua