You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ec...@apache.org on 2017/08/10 15:20:32 UTC

[24/27] geode-native git commit: GEODE-2729: Remove global variables

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Execution.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Execution.cpp b/src/clicache/src/Execution.cpp
index 0a43e9b..2ba9187 100644
--- a/src/clicache/src/Execution.cpp
+++ b/src/clicache/src/Execution.cpp
@@ -49,7 +49,7 @@ namespace Apache
         
           for each(TFilter item in routingObj)
           {
-            rsptr->push_back(Serializable::GetUnmanagedValueGeneric<TFilter>( item ));
+            rsptr->push_back(Serializable::GetUnmanagedValueGeneric<TFilter>( item, nullptr ));
           }
           
           try
@@ -74,7 +74,7 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
           try
           {
-            auto argsptr = Serializable::GetUnmanagedValueGeneric<TArgs>( args );
+            auto argsptr = Serializable::GetUnmanagedValueGeneric<TArgs>( args, nullptr );
             return Execution<TResult>::Create(m_nativeptr->get()->withArgs(argsptr), this->m_rc);
           }
           finally

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/LocalRegion.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/LocalRegion.cpp b/src/clicache/src/LocalRegion.cpp
index 143f51a..1313558 100644
--- a/src/clicache/src/LocalRegion.cpp
+++ b/src/clicache/src/LocalRegion.cpp
@@ -15,6 +15,11 @@
  * limitations under the License.
  */
 
+#include "begin_native.hpp"
+#include "geode/Region.hpp"
+#include "geode/Cache.hpp"
+#include "end_native.hpp"
+
 #include "LocalRegion.hpp"
 #include "Cache.hpp"
 #include "CacheStatistics.hpp"
@@ -35,7 +40,7 @@ namespace Apache
       generic<class TKey, class TValue>
       TValue LocalRegion<TKey, TValue>::Get(TKey key, Object^ callbackArg)
       {
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
         auto nativeptr= this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr)
         {
@@ -72,9 +77,9 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value );        
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value, m_nativeptr->get()->getCache().get() );        
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg, m_nativeptr->get()->getCache().get() );
           m_nativeptr->get()->localPut( keyptr, valueptr, callbackptr );
         }
         finally
@@ -88,7 +93,7 @@ namespace Apache
       generic<class TKey, class TValue>
       TValue LocalRegion<TKey, TValue>::default::get(TKey key)
       { 
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
         auto nativeptr = this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr)
         {
@@ -105,8 +110,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value );
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value, m_nativeptr->get()->getCache().get() );
           m_nativeptr->get()->localPut( keyptr, valueptr );
         }
         finally
@@ -195,15 +200,15 @@ namespace Apache
           {
             return false;
           }
-          apache::geode::client::DataOutput out1;
-          apache::geode::client::DataOutput out2;
-          val1->toData(out1);
-          val2->toData(out2);
-          if ( out1.getBufferLength() != out2.getBufferLength() )
+          std::unique_ptr<apache::geode::client::DataOutput> out1 = m_nativeptr->get_shared_ptr()->getCache()->createDataOutput();
+          std::unique_ptr<apache::geode::client::DataOutput> out2 = m_nativeptr->get_shared_ptr()->getCache()->createDataOutput();
+          val1->toData(*out1);
+          val2->toData(*out2);
+          if ( out1->getBufferLength() != out2->getBufferLength() )
           {
             return false;
           }
-          else if (memcmp(out1.getBuffer(), out2.getBuffer(), out1.getBufferLength()) != 0)
+          else if (memcmp(out1->getBuffer(), out2->getBuffer(), out1->getBufferLength()) != 0)
           {
             return false;
           }
@@ -215,7 +220,7 @@ namespace Apache
       generic<class TKey, class TValue> 
       bool LocalRegion<TKey, TValue>::Contains(KeyValuePair<TKey,TValue> keyValuePair) 
       { 
-        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key ); 
+        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key, m_nativeptr->get()->getCache().get() ); 
         auto nativeptr = this->getRegionEntryValue(keyptr);
         //This means that key is not present.
         if (nativeptr == nullptr) {
@@ -232,7 +237,7 @@ namespace Apache
 
         try
         {
-          auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );          
+          auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );          
           return m_nativeptr->get()->containsKey(keyptr);
         }
         finally
@@ -246,7 +251,7 @@ namespace Apache
       generic<class TKey, class TValue>
       bool LocalRegion<TKey, TValue>::TryGetValue(TKey key, TValue %val)
       {        
-        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
+        auto keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
         auto nativeptr = this->getRegionEntryValue(keyptr);
         if (nativeptr == nullptr) {            
           val = TValue();
@@ -320,8 +325,8 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
-            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value );
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
+            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value, m_nativeptr->get()->getCache().get() );
             m_nativeptr->get()->localCreate( keyptr, valueptr );
           }
           finally
@@ -339,8 +344,8 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key );
-            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value );
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key, m_nativeptr->get()->getCache().get() );
+            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value, m_nativeptr->get()->getCache().get() );
             m_nativeptr->get()->localCreate( keyptr, valueptr );
           }
           finally
@@ -358,9 +363,9 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );
-            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value );          
-            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );
+            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( value, m_nativeptr->get()->getCache().get() );          
+            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg, m_nativeptr->get()->getCache().get() );
             m_nativeptr->get()->localCreate( keyptr, valueptr, callbackptr );
           }
           finally
@@ -378,7 +383,7 @@ namespace Apache
     
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
             m_nativeptr->get()->localDestroy(keyptr);
             return true;
           }
@@ -401,8 +406,8 @@ namespace Apache
          _GF_MG_EXCEPTION_TRY2/* due to auto replace */
            try
            {
-             native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-             native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+             native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+             native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
              m_nativeptr->get()->localDestroy(keyptr, callbackptr);
              return true;
            }
@@ -424,8 +429,8 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key );
-            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value );
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( keyValuePair.Key, m_nativeptr->get()->getCache().get() );
+            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>( keyValuePair.Value, m_nativeptr->get()->getCache().get() );
             return m_nativeptr->get()->localRemove(keyptr, valueptr);
           }
           finally
@@ -443,9 +448,9 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value);
-            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value, m_nativeptr->get()->getCache().get());
+            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
             return m_nativeptr->get()->localRemove(keyptr, valueptr, callbackptr);
           }
           finally
@@ -473,7 +478,7 @@ namespace Apache
                     
           try
           {
-            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg, m_nativeptr->get()->getCache().get() );
             m_nativeptr->get()->localInvalidateRegion( callbackptr );
           }
           finally
@@ -500,7 +505,7 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */          
           try
           {
-            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );
+            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg, m_nativeptr->get()->getCache().get() );
             m_nativeptr->get()->localDestroyRegion( callbackptr );
           }
           finally
@@ -528,8 +533,8 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key );          
-            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg );            
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>( key, m_nativeptr->get()->getCache().get() );          
+            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg, m_nativeptr->get()->getCache().get() );            
             m_nativeptr->get()->localInvalidate( keyptr, callbackptr );
           }
           finally
@@ -774,7 +779,7 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
             auto nativeptr = m_nativeptr->get()->getEntry(keyptr);
             return RegionEntry<TKey, TValue>::Create(nativeptr);
           }
@@ -846,7 +851,7 @@ namespace Apache
 
            try
            {
-             return m_nativeptr->get()->containsValueForKey(Serializable::GetUnmanagedValueGeneric<TKey>(key));
+             return m_nativeptr->get()->containsValueForKey(Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get()));
            }
            finally
            {
@@ -881,7 +886,7 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */        
           try
           {
-            m_nativeptr->get()->localClear(Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg ) );
+            m_nativeptr->get()->localClear(Serializable::GetUnmanagedValueGeneric<Object^>( callbackArg, m_nativeptr->get()->getCache().get() ) );
           }
           finally
           {

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Pool.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Pool.cpp b/src/clicache/src/Pool.cpp
index 32921fb..6bb1f91 100644
--- a/src/clicache/src/Pool.cpp
+++ b/src/clicache/src/Pool.cpp
@@ -20,7 +20,7 @@
 #include "QueryService.hpp"
 #include "CacheableString.hpp"
 #include "Cache.hpp"
-#include "Properties.hpp"
+//#include "Properties.hpp"
 #include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/PoolFactory.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolFactory.cpp b/src/clicache/src/PoolFactory.cpp
index e17bdee..bf3c0b1 100644
--- a/src/clicache/src/PoolFactory.cpp
+++ b/src/clicache/src/PoolFactory.cpp
@@ -23,6 +23,8 @@
 #include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 
+#include "Cache.hpp"
+
 using namespace System;
 
 namespace Apache
@@ -429,7 +431,7 @@ namespace Apache
 		  }
 
 
-      Pool^ PoolFactory::Create(String^ name)
+      Pool^ PoolFactory::Create(String^ name, Cache^ cache)
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/PoolFactory.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolFactory.hpp b/src/clicache/src/PoolFactory.hpp
index 49665bb..cf16906 100644
--- a/src/clicache/src/PoolFactory.hpp
+++ b/src/clicache/src/PoolFactory.hpp
@@ -390,7 +390,7 @@ namespace Apache
         /// throws IllegalStateException if a pool with name already exists
         /// throws IllegalStateException if a locator or server has not been added.
         /// </exception>
-        Pool^ Create(String^ name);
+        Pool^ Create(String^ name, Cache^ cache);
 
       internal:
 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/PoolManager.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolManager.cpp b/src/clicache/src/PoolManager.cpp
index 5136442..3f641a7 100644
--- a/src/clicache/src/PoolManager.cpp
+++ b/src/clicache/src/PoolManager.cpp
@@ -35,12 +35,12 @@ namespace Apache
 
       PoolFactory^ PoolManager::CreateFactory()
       {
-        return PoolFactory::Create(native::PoolManager::createFactory());
+        return PoolFactory::Create(m_nativeref.createFactory());
       }
 
       const Dictionary<String^, Pool^>^ PoolManager::GetAll()
       {
-        auto pools = native::PoolManager::getAll();
+        auto pools = m_nativeref.getAll();
         auto result = gcnew Dictionary<String^, Pool^>();
         for (const auto& iter : pools)
         {
@@ -54,23 +54,23 @@ namespace Apache
       Pool^ PoolManager::Find(String^ name)
       {
         ManagedString mg_name( name );
-        auto pool = native::PoolManager::find(mg_name.CharPtr);
+        auto pool = m_nativeref.find(mg_name.CharPtr);
         return Pool::Create(pool);
       }
 
       Pool^ PoolManager::Find(Client::Region<Object^, Object^>^ region)
       {
-        return Pool::Create(native::PoolManager::find(region->GetNative()));
+        return Pool::Create(m_nativeref.find(region->GetNative()));
       }
 
       void PoolManager::Close(Boolean KeepAlive)
       {
-        native::PoolManager::close(KeepAlive);
+        m_nativeref.close(KeepAlive);
       }
 
       void PoolManager::Close()
       {
-        native::PoolManager::close();
+        m_nativeref.close();
       }
     }  // namespace Client
   }  // namespace Geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/PoolManager.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/PoolManager.hpp b/src/clicache/src/PoolManager.hpp
index f47d553..0ea139d 100644
--- a/src/clicache/src/PoolManager.hpp
+++ b/src/clicache/src/PoolManager.hpp
@@ -23,7 +23,6 @@
 #include "end_native.hpp"
 
 
-
 using namespace System;
 
 namespace Apache
@@ -38,44 +37,64 @@ namespace Apache
      // generic<class TKey, class TValue>
       ref class PoolFactory;
 
+      namespace native = apache::geode::client;
+
       /// <summary>
       /// This interface provides for the configuration and creation of instances of PoolFactory.
       /// </summary>
      // generic<class TKey, class TValue>
-      public ref class PoolManager STATICCLASS
+      public ref class PoolManager
       {
       public:
 
         /// <summary>
         /// Creates a new PoolFactory which is used to configure and create Pools.
         /// </summary>
-        static PoolFactory/*<TKey, TValue>*/^ CreateFactory();
+        PoolFactory/*<TKey, TValue>*/^ CreateFactory();
 
         /// <summary>
         /// Returns a map containing all the pools in this manager.
         /// The keys are pool names and the values are Pool instances.
         /// </summary>
-        static const Dictionary<String^, Pool/*<TKey, TValue>*/^>^ GetAll();
+        const Dictionary<String^, Pool/*<TKey, TValue>*/^>^ GetAll();
 
         /// <summary>
         /// Find by name an existing connection pool.
         /// </summary>
-        static Pool/*<TKey, TValue>*/^ Find(String^ name);
+        Pool/*<TKey, TValue>*/^ Find(String^ name);
 
         /// <summary>
         /// Find the pool used by the given region.
         /// </summary>
-        static Pool/*<TKey, TValue>*/^ Find(Client::Region<Object^, Object^>^ region);
+        Pool/*<TKey, TValue>*/^ Find(Client::Region<Object^, Object^>^ region);
 
         /// <summary>
         /// Destroys all created pools.
         /// </summary>
-        static void Close(Boolean KeepAlive);
+        void Close(Boolean KeepAlive);
 
         /// <summary>
         /// Destroys all created pools.
         /// </summary>
-        static void Close();
+        void Close();
+
+      internal:
+
+        native::PoolManager& GetNative()
+        {
+          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)
+        {
+        }
+
+        native::PoolManager& m_nativeref;
       };
     }  // namespace Client
   }  // namespace Geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Properties.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Properties.cpp b/src/clicache/src/Properties.cpp
index b499369..af41931 100644
--- a/src/clicache/src/Properties.cpp
+++ b/src/clicache/src/Properties.cpp
@@ -15,13 +15,17 @@
  * limitations under the License.
  */
 
+#include "begin_native.hpp"
+#include "CacheImpl.hpp"
+#include "SerializationRegistry.hpp"
+#include "end_native.hpp"
+
 #include "Properties.hpp"
 #include "impl/ManagedVisitor.hpp"
 #include "impl/ManagedString.hpp"
 #include "impl/SafeConvert.hpp"
 #include "ExceptionTypes.hpp"
 
-
 using namespace System;
 
 
@@ -65,7 +69,7 @@ namespace Apache
       {
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TPropKey>(key);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TPropKey>(key, nullptr);
           auto nativeptr = m_nativeptr->get()->find(keyptr);
           return Serializable::GetManagedValueGeneric<TPropValue>(nativeptr);
         }
@@ -78,8 +82,8 @@ namespace Apache
       generic<class TPropKey, class TPropValue>
       void Properties<TPropKey, TPropValue>::Insert( TPropKey key, TPropValue value )
       {
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TPropKey>(key, true);
-        native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TPropValue>(value, true);
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TPropKey>(key, true, nullptr);
+        native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TPropValue>(value, true, nullptr);
 
         _GF_MG_EXCEPTION_TRY2
 
@@ -98,7 +102,7 @@ namespace Apache
       generic<class TPropKey, class TPropValue>
       void Properties<TPropKey, TPropValue>::Remove( TPropKey key)
       {
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TPropKey>(key);
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TPropKey>(key, nullptr);
 
         _GF_MG_EXCEPTION_TRY2
 
@@ -294,57 +298,59 @@ namespace Apache
 
       // ISerializable methods
 
-      generic<class TPropKey, class TPropValue>
-      void Properties<TPropKey, TPropValue>::GetObjectData( SerializationInfo^ info,
-        StreamingContext context )
-      {
-        native::DataOutput output;
-
-        _GF_MG_EXCEPTION_TRY2
-
-          try
-          {
-            m_nativeptr->get()->toData( output );
-          }
-          finally
-          {
-            GC::KeepAlive(m_nativeptr);
-          }
-
-        _GF_MG_EXCEPTION_CATCH_ALL2
-
-        auto bytes = gcnew array<Byte>( output.getBufferLength( ) );
-        {
-          pin_ptr<const Byte> pin_bytes = &bytes[0];
-          memcpy( (System::Byte*)pin_bytes, output.getBuffer( ),
-            output.getBufferLength( ) );
-        }
-        info->AddValue( "bytes", bytes, array<Byte>::typeid );
-      }
-      
-      generic<class TPropKey, class TPropValue>
-      Properties<TPropKey, TPropValue>::Properties( SerializationInfo^ info,
-        StreamingContext context )
-        : Properties()
-      {
-        array<Byte>^ bytes = nullptr;
-        try {
-          bytes = dynamic_cast<array<Byte>^>( info->GetValue( "bytes",
-            array<Byte>::typeid ) );
-        }
-        catch ( System::Exception^ ) {
-          // could not find the header -- null value
-        }
-        if (bytes != nullptr) {
-          pin_ptr<const Byte> pin_bytes = &bytes[0];
+      //generic<class TPropKey, class TPropValue>
+      //void Properties<TPropKey, TPropValue>::GetObjectData( SerializationInfo^ info,
+      //  StreamingContext context )
+      //{
+      //  auto output = std::unique_ptr<native::DataOutput>(new native::DataOutput(*m_serializationRegistry->get_shared_ptr()));
+
+      //  _GF_MG_EXCEPTION_TRY2
+
+      //    try
+      //    {
+      //      m_nativeptr->get()->toData( *output );
+      //    }
+      //    finally
+      //    {
+      //      GC::KeepAlive(m_nativeptr);
+      //    }
+
+      //  _GF_MG_EXCEPTION_CATCH_ALL2
+
+      //  auto bytes = gcnew array<Byte>( output->getBufferLength( ) );
+      //  {
+      //    pin_ptr<const Byte> pin_bytes = &bytes[0];
+      //    memcpy( (System::Byte*)pin_bytes, output->getBuffer( ),
+      //      output->getBufferLength( ) );
+      //  }
+      //  info->AddValue( "bytes", bytes, array<Byte>::typeid );
+      //}
+      //
+      //generic<class TPropKey, class TPropValue>
+      //Properties<TPropKey, TPropValue>::Properties( SerializationInfo^ info,
+      //  StreamingContext context, native::SerializationRegistryPtr serializationRegistry)
+      //  : Properties(serializationRegistry)
+      //{
+      //  array<Byte>^ bytes = nullptr;
+      //  try {
+      //    bytes = dynamic_cast<array<Byte>^>( info->GetValue( "bytes",
+      //      array<Byte>::typeid ) );
+      //  }
+      //  catch ( System::Exception^ ) {
+      //    // could not find the header -- null value
+      //  }
+      //  if (bytes != nullptr) {
+      //    pin_ptr<const Byte> pin_bytes = &bytes[0];
+
+      //    _GF_MG_EXCEPTION_TRY2
+
+      //      native::DataInput input( (System::Byte*)pin_bytes, bytes->Length, *CacheImpl::getInstance()->getSerializationRegistry().get());
+      //      FromData(input);
+      //    _GF_MG_EXCEPTION_CATCH_ALL2
+      //  }
+      //}
 
-          _GF_MG_EXCEPTION_TRY2
 
-            native::DataInput input( (System::Byte*)pin_bytes, bytes->Length );
-            FromData(input);
-          _GF_MG_EXCEPTION_CATCH_ALL2
-        }
-      }
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Properties.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Properties.hpp b/src/clicache/src/Properties.hpp
index cf798b6..c175fff 100644
--- a/src/clicache/src/Properties.hpp
+++ b/src/clicache/src/Properties.hpp
@@ -21,6 +21,7 @@
 
 #include "begin_native.hpp"
 #include <geode/Properties.hpp>
+#include "SerializationRegistry.hpp"
 #include "end_native.hpp"
 
 #include "IGeodeSerializable.hpp"
@@ -31,7 +32,6 @@
 #include "native_shared_ptr.hpp"
 #include "impl/SafeConvert.hpp"
 #include "Serializable.hpp"
-#include "native_shared_ptr.hpp"
 
 using namespace System;
 using namespace System::Runtime::Serialization;
@@ -71,28 +71,30 @@ namespace Apache
       /// or an integer.
       /// </summary>
       public ref class Properties sealed
-        : public IGeodeSerializable,
-        public ISerializable
+        : public IGeodeSerializable //,public ISerializable
       {
       public:
 
         /// <summary>
         /// Default constructor: returns an empty collection.
         /// </summary>
-        inline Properties( )
+         inline Properties()
         : Properties(native::Properties::create())
-        {}
+        {
+        
+        }
 
         /// <summary>
         /// Factory method to create an empty collection of properties.
         /// </summary>
         /// <returns>empty collection of properties</returns>
         generic<class TPropKey, class TPropValue>
-        inline static Properties<TPropKey, TPropValue>^ Create( )
+        inline static Properties<TPropKey, TPropValue>^ Create()
         {
-          return gcnew Properties<TPropKey, TPropValue>( );
+          return gcnew Properties<TPropKey, TPropValue>();
         }
 
+
         /// <summary>
         /// Return the value for the given key, or NULL if not found. 
         /// </summary>
@@ -204,15 +206,15 @@ namespace Apache
 
         // ISerializable members
 
-        virtual void GetObjectData( SerializationInfo^ info,
-          StreamingContext context );
+        //virtual void GetObjectData( SerializationInfo^ info,
+        //  StreamingContext context);
 
         // End: ISerializable members
 
       protected:
 
         // For deserialization using the .NET serialization (ISerializable)
-        Properties( SerializationInfo^ info, StreamingContext context );
+        //Properties(SerializationInfo^ info, StreamingContext context, native::SerializationRegistryPtr serializationRegistry);
 
 
       internal:
@@ -237,9 +239,9 @@ namespace Apache
           return m_nativeptr->get_shared_ptr();
         }
 
-        inline static IGeodeSerializable^ CreateDeserializable( )
+        inline static IGeodeSerializable^ CreateDeserializable()
         {
-          return Create<String^, String^>();
+          return Create<TPropKey, TPropValue>();
         }
 
       private:
@@ -283,6 +285,19 @@ namespace Apache
         Apache::Geode::Client::PropertyVisitorGeneric<TPropKey, TPropValue>^ m_visitor;
 
       };
+
+  /*    ref class PropertiesFactory {
+      public:
+          PropertiesFactory(native::SerializationRegistryPtr serializationRegistry)
+          {
+             m_serializationRegistry = gcnew native_shared_ptr<native::SerializationRegistry>(serializationRegistry);
+          }
+          IGeodeSerializable^ CreateDeserializable() {
+            return Properties<String^, String^>::CreateDeserializable(m_serializationRegistry->get_shared_ptr());
+          }
+      private:
+        native_shared_ptr<native::SerializationRegistry>^  m_serializationRegistry;
+        };*/
     }  // namespace Client
   }  // namespace Geode
 }  // namespace Apache

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Query.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Query.cpp b/src/clicache/src/Query.cpp
index f1041f8..071c51f 100644
--- a/src/clicache/src/Query.cpp
+++ b/src/clicache/src/Query.cpp
@@ -70,7 +70,7 @@ namespace Apache
           auto rsptr = apache::geode::client::CacheableVector::create();
           for( int index = 0; index < paramList->Length; index++ )
           {
-            auto valueptr = Serializable::GetUnmanagedValueGeneric<Object^>(paramList[index]->GetType(), (Object^)paramList[index]);
+            auto valueptr = Serializable::GetUnmanagedValueGeneric<Object^>(paramList[index]->GetType(), (Object^)paramList[index], nullptr);
             rsptr->push_back(valueptr);
 		      }
 

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Region.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Region.cpp b/src/clicache/src/Region.cpp
index f7d4b23..17e9a62 100644
--- a/src/clicache/src/Region.cpp
+++ b/src/clicache/src/Region.cpp
@@ -15,6 +15,11 @@
  * limitations under the License.
  */
 
+#include "begin_native.hpp"
+#include "geode/Region.hpp"
+#include "geode/Cache.hpp"
+#include "end_native.hpp"
+
 #include "Region.hpp"
 #include "Cache.hpp"
 #include "CacheStatistics.hpp"
@@ -45,8 +50,9 @@ namespace Apache
       generic<class TKey, class TValue>
       TValue Region<TKey, TValue>::Get(TKey key, Object^ callbackArg)
       {
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-        native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+        native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
+        GC::KeepAlive(m_nativeptr);
         auto nativeptr = this->get(keyptr, callbackptr);
         if (nativeptr == nullptr)
         {
@@ -93,7 +99,8 @@ namespace Apache
           auto rAttributes = this->Attributes;
           auto poolName = rAttributes->PoolName;
           if (poolName != nullptr) {
-            auto pool = PoolManager::Find(poolName);
+            auto poolManager = gcnew PoolManager(m_nativeptr->get()->getCache()->getPoolManager());
+            auto pool = poolManager->Find(poolName);
             if (pool != nullptr && !pool->Destroyed) {
               return pool->MultiuserAuthentication;
             }
@@ -109,9 +116,9 @@ namespace Apache
 
           try
           {
-            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value);
-            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+            native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+            native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value, m_nativeptr->get()->getCache().get());
+            native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
             m_nativeptr->get()->put(keyptr, valueptr, callbackptr);
           }
           finally
@@ -125,7 +132,8 @@ namespace Apache
       generic<class TKey, class TValue>
       TValue Region<TKey, TValue>::default::get(TKey key)
       {
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+        GC::KeepAlive(m_nativeptr);
         auto nativeptr = this->get(keyptr);
         if (nativeptr == nullptr)
         {
@@ -142,8 +150,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->put(keyptr, valueptr);
         }
         finally
@@ -233,15 +241,17 @@ namespace Apache
           {
             return false;
           }
-          native::DataOutput out1;
-          native::DataOutput out2;
-          val1->toData(out1);
-          val2->toData(out2);
-          if (out1.getBufferLength() != out2.getBufferLength())
+          std::unique_ptr<native::DataOutput> out1 = m_nativeptr->get_shared_ptr()->getCache()->createDataOutput();
+          std::unique_ptr<native::DataOutput> out2 = m_nativeptr->get_shared_ptr()->getCache()->createDataOutput();
+          val1->toData(*out1);
+          val2->toData(*out2);
+
+          GC::KeepAlive(m_nativeptr);
+          if (out1->getBufferLength() != out2->getBufferLength())
           {
             return false;
           }
-          else if (memcmp(out1.getBuffer(), out2.getBuffer(), out1.getBufferLength()) != 0)
+          else if (memcmp(out1->getBuffer(), out2->getBuffer(), out1->getBufferLength()) != 0)
           {
             return false;
           }
@@ -253,7 +263,8 @@ namespace Apache
       generic<class TKey, class TValue>
       bool Region<TKey, TValue>::Contains(KeyValuePair<TKey, TValue> keyValuePair)
       {
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValuePair.Key);
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValuePair.Key, m_nativeptr->get()->getCache().get());
+        GC::KeepAlive(m_nativeptr);
         auto nativeptr = this->get(keyptr);
         //This means that key is not present.
         if (nativeptr == nullptr) {
@@ -270,7 +281,7 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
           return m_nativeptr->get()->containsKeyOnServer(keyptr);
         }
         finally
@@ -285,7 +296,8 @@ namespace Apache
       bool Region<TKey, TValue>::TryGetValue(TKey key, TValue %val)
       {
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
-        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+        native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+        GC::KeepAlive(m_nativeptr);
         auto nativeptr = this->get(keyptr);
         if (nativeptr == nullptr) {
           val = TValue();
@@ -358,8 +370,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->create(keyptr, valueptr);
         }
         finally
@@ -377,8 +389,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValuePair.Key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValuePair.Value);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValuePair.Key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValuePair.Value, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->create(keyptr, valueptr);
         }
         finally
@@ -396,9 +408,9 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value);
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value, m_nativeptr->get()->getCache().get());
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->create(keyptr, valueptr, callbackptr);
         }
         finally
@@ -416,7 +428,7 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
           return m_nativeptr->get()->removeEx(keyptr);
         }
         finally
@@ -435,8 +447,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
           return m_nativeptr->get()->removeEx(keyptr, callbackptr);
         }
         finally
@@ -454,8 +466,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValuePair.Key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValuePair.Value);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValuePair.Key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValuePair.Value, m_nativeptr->get()->getCache().get());
           return m_nativeptr->get()->remove(keyptr, valueptr);
         }
         finally
@@ -473,9 +485,10 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value);
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(value, m_nativeptr->get()->getCache().get());
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
+          GC::KeepAlive(m_nativeptr);
           return m_nativeptr->get()->remove(keyptr, valueptr, callbackptr);
         }
         finally
@@ -503,7 +516,7 @@ namespace Apache
 
         try
         {
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->invalidateRegion(callbackptr);
         }
         finally
@@ -531,7 +544,7 @@ namespace Apache
 
         try
         {
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->destroyRegion(callbackptr);
         }
         finally
@@ -560,8 +573,8 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->invalidate(keyptr, callbackptr);
         }
         finally
@@ -591,8 +604,8 @@ namespace Apache
           native::HashMapOfCacheable nativeMap;
         for each (KeyValuePair<TKey, TValue> keyValPair in map)
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValPair.Key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValPair.Value);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValPair.Key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValPair.Value, m_nativeptr->get()->getCache().get());
           nativeMap.emplace(keyptr, valueptr);
         }
         try
@@ -616,11 +629,11 @@ namespace Apache
           native::HashMapOfCacheable nativeMap;
         for each (KeyValuePair<TKey, TValue> keyValPair in map)
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValPair.Key);
-          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValPair.Value);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(keyValPair.Key, m_nativeptr->get()->getCache().get());
+          native::CacheablePtr valueptr = Serializable::GetUnmanagedValueGeneric<TValue>(keyValPair.Value, m_nativeptr->get()->getCache().get());
           nativeMap.emplace(keyptr, valueptr);
         }
-        native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+        native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
         try
         {
           m_nativeptr->get()->putAll(nativeMap, timeout, callbackptr);
@@ -661,7 +674,7 @@ namespace Apache
           for each(TKey item in keys)
           {
             vecKeys.push_back(
-              Serializable::GetUnmanagedValueGeneric<TKey>(item));
+              Serializable::GetUnmanagedValueGeneric<TKey>(item, m_nativeptr->get()->getCache().get()));
           }
 
           native::HashMapOfCacheablePtr valuesPtr;
@@ -716,7 +729,7 @@ namespace Apache
           for each(TKey item in keys)
           {
             vecKeys.push_back(
-              Serializable::GetUnmanagedValueGeneric<TKey>(item));
+              Serializable::GetUnmanagedValueGeneric<TKey>(item, m_nativeptr->get()->getCache().get()));
           }
 
           native::HashMapOfCacheablePtr valuesPtr;
@@ -728,7 +741,7 @@ namespace Apache
             exceptionsPtr = std::make_shared<native::HashMapOfException>();
           }
 
-         native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+         native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
 
           try
           {
@@ -779,9 +792,9 @@ namespace Apache
 
           native::VectorOfCacheableKey vecKeys;
         for each(TKey item in keys)
-          vecKeys.push_back(Serializable::GetUnmanagedValueGeneric<TKey>(item));
+          vecKeys.push_back(Serializable::GetUnmanagedValueGeneric<TKey>(item, m_nativeptr->get()->getCache().get()));
 
-        native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+        native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
 
         try
         {
@@ -968,7 +981,7 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
           auto nativeptr = m_nativeptr->get()->getEntry(keyptr);
           return RegionEntry<TKey, TValue>::Create(nativeptr);
         }
@@ -1041,7 +1054,7 @@ namespace Apache
 
         try
         {
-          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key);
+          native::CacheableKeyPtr keyptr = Serializable::GetUnmanagedValueGeneric<TKey>(key, m_nativeptr->get()->getCache().get());
           return m_nativeptr->get()->containsValueForKey(keyptr);
         }
         finally
@@ -1079,7 +1092,7 @@ namespace Apache
         _GF_MG_EXCEPTION_TRY2/* due to auto replace */
         try
         {
-          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg);
+          native::UserDataPtr callbackptr = Serializable::GetUnmanagedValueGeneric<Object^>(callbackArg, m_nativeptr->get()->getCache().get());
           m_nativeptr->get()->clear(callbackptr);
         }
         finally
@@ -1170,7 +1183,7 @@ namespace Apache
 
           for each(TKey item in keys)
           {
-            vecKeys.push_back(Serializable::GetUnmanagedValueGeneric<TKey>(item));
+            vecKeys.push_back(Serializable::GetUnmanagedValueGeneric<TKey>(item, m_nativeptr->get()->getCache().get()));
           }
           try
           {
@@ -1197,7 +1210,7 @@ namespace Apache
           for each(TKey item in keys)
           {
             vecKeys.push_back(
-              Serializable::GetUnmanagedValueGeneric<TKey>(item));
+              Serializable::GetUnmanagedValueGeneric<TKey>(item, m_nativeptr->get()->getCache().get()));
           }
 
           try

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/ResultCollector.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/ResultCollector.cpp b/src/clicache/src/ResultCollector.cpp
index 9b0e249..595bd9c 100644
--- a/src/clicache/src/ResultCollector.cpp
+++ b/src/clicache/src/ResultCollector.cpp
@@ -40,7 +40,7 @@ namespace Apache
 
           try
           {
-            auto result = std::shared_ptr<native::Cacheable>(SafeGenericMSerializableConvert((IGeodeSerializable^)rs));
+            auto result = std::shared_ptr<native::Cacheable>(SafeGenericMSerializableConvert((IGeodeSerializable^)rs, nullptr));
             m_nativeptr->get()->addResult(result);
           }
           finally

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Serializable.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Serializable.cpp b/src/clicache/src/Serializable.cpp
index 5771095..8760bab 100644
--- a/src/clicache/src/Serializable.cpp
+++ b/src/clicache/src/Serializable.cpp
@@ -16,7 +16,11 @@
  */
 
 #include "begin_native.hpp"
+#include <geode/Cache.hpp>
 #include <SerializationRegistry.hpp>
+#include <geode/PoolManager.hpp>
+#include <CacheImpl.hpp>
+#include "CacheRegionHelper.hpp"
 #include "end_native.hpp"
 
 #include <msclr/lock.h>
@@ -42,6 +46,9 @@
 #include "CacheableIdentityHashMap.hpp"
 #include "IPdxSerializer.hpp"
 #include "impl/DotNetTypes.hpp"
+#include "CacheRegionHelper.hpp"
+#include "Cache.hpp"
+
 #pragma warning(disable:4091)
 
 using namespace System::Reflection;
@@ -255,27 +262,27 @@ namespace Apache
         return (Apache::Geode::Client::Serializable^)CacheableStringArray::Create(value);
       }
 
-      System::Int32 Serializable::GetPDXIdForType(const char* poolName, IGeodeSerializable^ pdxType)
+      System::Int32 Serializable::GetPDXIdForType(const char* poolName, IGeodeSerializable^ pdxType, const native::Cache* cache)
       {
         native::CacheablePtr kPtr(SafeMSerializableConvertGeneric(pdxType));
-        return native::SerializationRegistry::GetPDXIdForType(poolName, kPtr);
+        return CacheRegionHelper::getCacheImpl(cache)->getSerializationRegistry()->GetPDXIdForType(cache->getPoolManager().find(poolName), kPtr);
       }
 
-      IGeodeSerializable^ Serializable::GetPDXTypeById(const char* poolName, System::Int32 typeId)
-      {
-        SerializablePtr sPtr = native::SerializationRegistry::GetPDXTypeById(poolName, typeId);
+      IGeodeSerializable^ Serializable::GetPDXTypeById(const char* poolName, System::Int32 typeId, const native::Cache* cache)
+      {        
+        SerializablePtr sPtr = CacheRegionHelper::getCacheImpl(cache)->getSerializationRegistry()->GetPDXTypeById(cache->getPoolManager().find(poolName), typeId);
         return SafeUMSerializableConvertGeneric(sPtr);
       }
 
-      int Serializable::GetEnumValue(Internal::EnumInfo^ ei)
+      int Serializable::GetEnumValue(Internal::EnumInfo^ ei, const native::Cache* cache)
       {
         native::CacheablePtr kPtr(SafeMSerializableConvertGeneric(ei));
-        return native::SerializationRegistry::GetEnumValue(kPtr);
+        return  CacheRegionHelper::getCacheImpl(cache)->getSerializationRegistry()->GetEnumValue(cache->getPoolManager().getAll().begin()->second, kPtr);
       }
 
-      Internal::EnumInfo^ Serializable::GetEnum(int val)
+      Internal::EnumInfo^ Serializable::GetEnum(int val, const native::Cache* cache)
       {
-        SerializablePtr sPtr = native::SerializationRegistry::GetEnum(val);
+        SerializablePtr sPtr = CacheRegionHelper::getCacheImpl(cache)->getSerializationRegistry()->GetEnum(cache->getPoolManager().getAll().begin()->second, val);
         return (Internal::EnumInfo^)SafeUMSerializableConvertGeneric(sPtr);
       }
 
@@ -511,21 +518,22 @@ namespace Apache
         return retVal();
       }
 
-      void Serializable::RegisterPDXManagedCacheableKey(bool appDomainEnable)
+      void Serializable::RegisterPDXManagedCacheableKey(bool appDomainEnable, Cache^ cache)
       {
+        CacheImpl *cacheImpl = CacheRegionHelper::getCacheImpl(cache->GetNative().get());
         if (!appDomainEnable)
         {
-          native::SerializationRegistry::addType(native::GeodeTypeIdsImpl::PDX,
+          cacheImpl->getSerializationRegistry()->addType(native::GeodeTypeIdsImpl::PDX,
                                                                 &native::PdxManagedCacheableKey::CreateDeserializable);
         }
         else
         {
-          native::SerializationRegistry::addType(native::GeodeTypeIdsImpl::PDX,
-                                                                &native::PdxManagedCacheableKeyBytes::CreateDeserializable);
+          cacheImpl->getSerializationRegistry()->addType(native::GeodeTypeIdsImpl::PDX,
+                                                         std::bind(native::PdxManagedCacheableKeyBytes::CreateDeserializable, cache->GetNative().get()));
         }
       }
 
-      void Apache::Geode::Client::Serializable::RegisterTypeGeneric(TypeFactoryMethodGeneric^ creationMethod)
+      void Apache::Geode::Client::Serializable::RegisterTypeGeneric(TypeFactoryMethodGeneric^ creationMethod, Cache^ cache)
       {
         if (creationMethod == nullptr) {
           throw gcnew IllegalArgumentException("Serializable.RegisterType(): "
@@ -539,7 +547,7 @@ namespace Apache
         if (!ManagedDelegatesGeneric->ContainsKey(classId))
           ManagedDelegatesGeneric->Add(classId, creationMethod);
 
-        DelegateWrapperGeneric^ delegateObj = gcnew DelegateWrapperGeneric(creationMethod);
+        DelegateWrapperGeneric^ delegateObj = gcnew DelegateWrapperGeneric(creationMethod, cache);
         TypeFactoryNativeMethodGeneric^ nativeDelegate =
           gcnew TypeFactoryNativeMethodGeneric(delegateObj,
           &DelegateWrapperGeneric::NativeDelegateGeneric);
@@ -554,22 +562,20 @@ namespace Apache
         DelegateMapGeneric[tmp->ClassId] = creationMethod;
 
         _GF_MG_EXCEPTION_TRY2
-
-          native::Serializable::registerType((native::TypeFactoryMethod)
-          System::Runtime::InteropServices::Marshal::
-          GetFunctionPointerForDelegate(nativeDelegate).ToPointer());
+          CacheImpl *cacheImpl = CacheRegionHelper::getCacheImpl(cache->GetNative().get());
+          cacheImpl->getSerializationRegistry()->addType((native::Serializable*(*)())System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(nativeDelegate).ToPointer());
 
         _GF_MG_EXCEPTION_CATCH_ALL2
       }
 
       void Apache::Geode::Client::Serializable::RegisterTypeGeneric(Byte typeId,
-                                                                    TypeFactoryMethodGeneric^ creationMethod, Type^ type)
+                                                                    TypeFactoryMethodGeneric^ creationMethod, Type^ type, Cache^ cache)
       {
         if (creationMethod == nullptr) {
           throw gcnew IllegalArgumentException("Serializable.RegisterType(): "
                                                "null TypeFactoryMethod delegate passed");
         }
-        DelegateWrapperGeneric^ delegateObj = gcnew DelegateWrapperGeneric(creationMethod);
+        DelegateWrapperGeneric^ delegateObj = gcnew DelegateWrapperGeneric(creationMethod, cache);
         TypeFactoryNativeMethodGeneric^ nativeDelegate =
           gcnew TypeFactoryNativeMethodGeneric(delegateObj,
           &DelegateWrapperGeneric::NativeDelegateGeneric);
@@ -591,17 +597,18 @@ namespace Apache
 
         try
         {
+           CacheImpl *cacheImpl = CacheRegionHelper::getCacheImpl(cache->GetNative().get());
           if (tmp->ClassId < 0xa0000000)
           {
-            native::SerializationRegistry::addType(typeId,
-                                                                  (native::TypeFactoryMethod)System::Runtime::InteropServices::
+            cacheImpl->getSerializationRegistry()->addType(typeId,
+                                                                  (native::Serializable*(*)())System::Runtime::InteropServices::
                                                                   Marshal::GetFunctionPointerForDelegate(
                                                                   nativeDelegate).ToPointer());
           }
           else
           {//special case for CacheableUndefined type
-            native::SerializationRegistry::addType2(typeId,
-                                                                   (native::TypeFactoryMethod)System::Runtime::InteropServices::
+            cacheImpl->getSerializationRegistry()->addType2(typeId,
+                                                                   (native::Serializable*(*)())System::Runtime::InteropServices::
                                                                    Marshal::GetFunctionPointerForDelegate(
                                                                    nativeDelegate).ToPointer());
           }
@@ -613,12 +620,12 @@ namespace Apache
         }
       }
 
-      void Apache::Geode::Client::Serializable::UnregisterTypeGeneric(Byte typeId)
+      void Apache::Geode::Client::Serializable::UnregisterTypeGeneric(Byte typeId, Cache^ cache)
       {
         BuiltInDelegatesGeneric->Remove(typeId);
         _GF_MG_EXCEPTION_TRY2
 
-          native::SerializationRegistry::removeType(typeId);
+          CacheRegionHelper::getCacheImpl(cache->GetNative().get())->getSerializationRegistry()->removeType(typeId);
 
         _GF_MG_EXCEPTION_CATCH_ALL2
       }
@@ -935,23 +942,23 @@ namespace Apache
       }
 
       generic<class TKey>
-      native::CacheableKeyPtr Serializable::GetUnmanagedValueGeneric(TKey key)
+      native::CacheableKeyPtr Serializable::GetUnmanagedValueGeneric(TKey key, native::Cache* cache)
       {
         //System::Type^ managedType = TKey::typeid;  
         if (key != nullptr) {
           //System::Type^ managedType = key->GetType();
-          return GetUnmanagedValueGeneric(key->GetType(), key);
+          return GetUnmanagedValueGeneric(key->GetType(), key, cache);
         }
         return nullptr;
       }
 
       generic<class TKey>
-      native::CacheableKeyPtr Serializable::GetUnmanagedValueGeneric(TKey key, bool isAciiChar)
+      native::CacheableKeyPtr Serializable::GetUnmanagedValueGeneric(TKey key, bool isAciiChar, native::Cache* cache)
       {
         //System::Type^ managedType = TKey::typeid;  
         if (key != nullptr) {
           //System::Type^ managedType = key->GetType();
-          return GetUnmanagedValueGeneric(key->GetType(), key, isAciiChar);
+          return GetUnmanagedValueGeneric(key->GetType(), key, isAciiChar, cache);
         }
         return nullptr;
       }
@@ -1066,14 +1073,14 @@ namespace Apache
 
       generic<class TKey>
       native::CacheableKeyPtr Serializable::GetUnmanagedValueGeneric(
-        Type^ managedType, TKey key)
+        Type^ managedType, TKey key, native::Cache* cache)
       {
-        return GetUnmanagedValueGeneric(managedType, key, false);
+        return GetUnmanagedValueGeneric(managedType, key, false, cache);
       }
 
       generic<class TKey>
       native::CacheableKeyPtr Serializable::GetUnmanagedValueGeneric(
-        Type^ managedType, TKey key, bool isAsciiChar)
+        Type^ managedType, TKey key, bool isAsciiChar, native::Cache* cache)
       {
         Byte typeId = Apache::Geode::Client::Serializable::GetManagedTypeMappingGeneric(managedType);
 
@@ -1107,122 +1114,122 @@ namespace Apache
         }
         case native::GeodeTypeIds::CacheableBytes:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableBytes::Create((array<Byte>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableBytes::Create((array<Byte>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableDoubleArray:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableDoubleArray::Create((array<Double>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableDoubleArray::Create((array<Double>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableFloatArray:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableFloatArray::Create((array<float>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableFloatArray::Create((array<float>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableInt16Array:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableInt16Array::Create((array<Int16>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableInt16Array::Create((array<Int16>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableInt32Array:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableInt32Array::Create((array<Int32>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableInt32Array::Create((array<Int32>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableInt64Array:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableInt64Array::Create((array<Int64>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableInt64Array::Create((array<Int64>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableStringArray:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableStringArray::Create((array<String^>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableStringArray::Create((array<String^>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableFileName:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)(Apache::Geode::Client::CacheableFileName^)key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)(Apache::Geode::Client::CacheableFileName^)key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableHashTable://collection::hashtable
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableHashTable::Create((System::Collections::Hashtable^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableHashTable::Create((System::Collections::Hashtable^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableHashMap://generic dictionary
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableHashMap::Create((System::Collections::IDictionary^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableHashMap::Create((System::Collections::IDictionary^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableVector://collection::arraylist
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)CacheableVector::Create((System::Collections::IList^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)CacheableVector::Create((System::Collections::IList^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableArrayList://generic ilist
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableArrayList::Create((System::Collections::IList^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableArrayList::Create((System::Collections::IList^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableLinkedList://generic linked list
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableLinkedList::Create((System::Collections::Generic::LinkedList<Object^>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableLinkedList::Create((System::Collections::Generic::LinkedList<Object^>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableStack:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert(Apache::Geode::Client::CacheableStack::Create((System::Collections::ICollection^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert(Apache::Geode::Client::CacheableStack::Create((System::Collections::ICollection^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case 7: //GeodeClassIds::CacheableManagedObject
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableObject^)key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableObject^)key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case 8://GeodeClassIds::CacheableManagedObjectXml
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableObjectXml^)key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableObjectXml^)key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableObjectArray:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableObjectArray^)key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableObjectArray^)key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableIdentityHashMap:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert(Apache::Geode::Client::CacheableIdentityHashMap::Create((System::Collections::IDictionary^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert(Apache::Geode::Client::CacheableIdentityHashMap::Create((System::Collections::IDictionary^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableHashSet://no need of it, default case should work
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableHashSet^)key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableHashSet^)key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableLinkedHashSet://no need of it, default case should work
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableLinkedHashSet^)key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((Apache::Geode::Client::CacheableLinkedHashSet^)key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CacheableDate:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableDate::Create((System::DateTime)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CacheableDate::Create((System::DateTime)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::BooleanArray:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::BooleanArray::Create((array<bool>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::BooleanArray::Create((array<bool>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         case native::GeodeTypeIds::CharArray:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CharArray::Create((array<Char>^)key)));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert((IGeodeSerializable^)Apache::Geode::Client::CharArray::Create((array<Char>^)key), cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         default:
         {
-          native::CacheablePtr kPtr(SafeGenericMSerializableConvert(key));
+          native::CacheablePtr kPtr(SafeGenericMSerializableConvert(key, cache));
           return std::dynamic_pointer_cast<native::CacheableKey>(kPtr);
         }
         }

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/Serializable.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/Serializable.hpp b/src/clicache/src/Serializable.hpp
index 999dc80..6f9e51f 100644
--- a/src/clicache/src/Serializable.hpp
+++ b/src/clicache/src/Serializable.hpp
@@ -31,6 +31,7 @@
 #include "Log.hpp"
 #include <vcclr.h>
 #include "IPdxTypeMapper.hpp"
+
 using namespace System::Reflection;
 using namespace System;
 using namespace System::Collections::Generic;
@@ -45,6 +46,8 @@ namespace Apache
 
 				interface class IPdxSerializable;
         interface class IPdxSerializer;
+        ref class Cache;
+
       /// <summary>
       /// Signature of native function delegates passed to native
       /// <c>native::Serializable::registerType</c>.
@@ -246,7 +249,8 @@ namespace Apache
         /// to a <c>Serializable</c>.
         /// </summary>
         static operator Apache::Geode::Client::Serializable^ (array<String^>^ value);
-
+        
+        
         /// <summary>
         /// Register an instance factory method for a given type.
         /// This should be used when registering types that implement
@@ -263,7 +267,7 @@ namespace Apache
         /// in registering the type; check <c>Utils::LastError</c> for more
         /// information in the latter case.
         /// </exception>
-        static void RegisterTypeGeneric(TypeFactoryMethodGeneric^ creationMethod);
+        static void RegisterTypeGeneric(TypeFactoryMethodGeneric^ creationMethod, Cache^ cache);
 
         /// <summary>
         /// Set the PDX serializer for the cache. If this serializer is set,
@@ -298,10 +302,10 @@ namespace Apache
 
       internal:
 
-				static System::Int32 GetPDXIdForType(const char* poolName, IGeodeSerializable^ pdxType);
-				static IGeodeSerializable^ GetPDXTypeById(const char* poolName, System::Int32 typeId);
+				static System::Int32 GetPDXIdForType(const char* poolName, IGeodeSerializable^ pdxType, const native::Cache* cache);
+				static IGeodeSerializable^ GetPDXTypeById(const char* poolName, System::Int32 typeId, const native::Cache* cache);
 				static IPdxSerializable^ Serializable::GetPdxType(String^ className);
-				static void RegisterPDXManagedCacheableKey(bool appDomainEnable);
+				static void RegisterPDXManagedCacheableKey(bool appDomainEnable, Cache^ cache);
         static bool IsObjectAndPdxSerializerRegistered(String^ className);
 
         static IPdxSerializer^ GetPdxSerializer();
@@ -311,8 +315,8 @@ namespace Apache
 
         static Type^ GetType(String^ className);
 
-        static int GetEnumValue(Internal::EnumInfo^ ei);
-        static Internal::EnumInfo^ GetEnum(int val);
+        static int GetEnumValue(Internal::EnumInfo^ ei, const native::Cache* cache);
+        static Internal::EnumInfo^ GetEnum(int val, const native::Cache* cache);
 
          static Dictionary<String^, PdxTypeFactoryMethod^>^ PdxDelegateMap =
           gcnew Dictionary<String^, PdxTypeFactoryMethod^>();
@@ -441,31 +445,31 @@ namespace Apache
         /// <exception cref="IllegalArgumentException">
         /// if the method is null
         /// </exception>
-        static void RegisterTypeGeneric(Byte typeId,
-          TypeFactoryMethodGeneric^ creationMethod, Type^ type);
+        static void RegisterTypeGeneric(Byte typeId, TypeFactoryMethodGeneric^ creationMethod, Type^ type, Cache^ cache);
+
 
         /// <summary>
         /// Unregister the type with the given typeId
         /// </summary>
         /// <param name="typeId">typeId of the type to unregister.</param>
-        static void UnregisterTypeGeneric(Byte typeId);
+        static void UnregisterTypeGeneric(Byte typeId, Cache^ cache);
 
         generic<class TValue>
         static TValue GetManagedValueGeneric(native::SerializablePtr val);
 
         generic<class TKey>
-        static native::CacheableKeyPtr GetUnmanagedValueGeneric(TKey key);
+        static native::CacheableKeyPtr GetUnmanagedValueGeneric(TKey key, native::Cache* cache);
 
         generic<class TKey>
-        static native::CacheableKeyPtr GetUnmanagedValueGeneric(TKey key, bool isAciiChar);
+        static native::CacheableKeyPtr GetUnmanagedValueGeneric(TKey key, bool isAciiChar, native::Cache* cache);
 
         generic<class TKey>
         static native::CacheableKeyPtr GetUnmanagedValueGeneric(
-          Type^ managedType, TKey key);
+          Type^ managedType, TKey key, native::Cache* cache);
 
         generic<class TKey>
         static native::CacheableKeyPtr GetUnmanagedValueGeneric(
-          Type^ managedType, TKey key, bool isAsciiChar);
+          Type^ managedType, TKey key, bool isAsciiChar, native::Cache* cache);
 
         /// <summary>
         /// Static map of <c>TypeFactoryMethod</c> delegates created

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/StatisticsFactory.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/StatisticsFactory.cpp b/src/clicache/src/StatisticsFactory.cpp
index dd100e1..79cfc44 100644
--- a/src/clicache/src/StatisticsFactory.cpp
+++ b/src/clicache/src/StatisticsFactory.cpp
@@ -16,13 +16,14 @@
  */
 
 
+#include "begin_native.hpp"
+#include "statistics/StatisticsManager.hpp"
+#include "end_native.hpp"
 
-//#include "geode_includes.hpp"
 #include "StatisticsFactory.hpp"
 #include "StatisticsType.hpp"
 #include "StatisticDescriptor.hpp"
 #include "Statistics.hpp"
-
 #include "impl/ManagedString.hpp"
 #include "ExceptionTypes.hpp"
 #include "impl/SafeConvert.hpp"
@@ -35,21 +36,23 @@ namespace Apache
     namespace Client
     {
 
-      StatisticsFactory^ StatisticsFactory::GetExistingInstance()
-      {
-        _GF_MG_EXCEPTION_TRY2/* due to auto replace */
+      // TODO globals - pass in distributed system
+      //StatisticsFactory^ StatisticsFactory::GetExistingInstance(DistributedSystem^ distributedSystem)
+      //{
+      //  _GF_MG_EXCEPTION_TRY2/* due to auto replace */
 
-          return StatisticsFactory::Create(apache::geode::statistics::StatisticsFactory::getExistingInstance());
 
-        _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
-      }
+      //    return StatisticsFactory::Create(distributedSystem->getStatisticsManager()->getStatisticsFactory());
+
+      //  _GF_MG_EXCEPTION_CATCH_ALL2/* due to auto replace */
+      //}
 
       StatisticDescriptor^ StatisticsFactory::CreateIntCounter( String^ name, String^ description,String^ units )
       {
         return CreateIntCounter(name,description,units,true);
       }
 
-      StatisticDescriptor^ StatisticsFactory::CreateIntCounter(String^ name, String^ description,String^ units, int8_t largerBetter)
+      StatisticDescriptor^ StatisticsFactory::CreateIntCounter(String^ name, String^ description,String^ units, bool largerBetter)
       {
         ManagedString mg_name( name );
         ManagedString mg_description( description );
@@ -66,7 +69,7 @@ namespace Apache
         return CreateLongCounter(name,description,units,true);
       }
 
-      StatisticDescriptor^ StatisticsFactory::CreateLongCounter( String^ name, String^ description,String^ units, int8_t largerBetter )
+      StatisticDescriptor^ StatisticsFactory::CreateLongCounter( String^ name, String^ description,String^ units, bool largerBetter )
       {
         ManagedString mg_name( name );
         ManagedString mg_description( description );
@@ -83,7 +86,7 @@ namespace Apache
         return CreateDoubleCounter(name,description,units,true);
       }
 
-      StatisticDescriptor^ StatisticsFactory::CreateDoubleCounter( String^ name, String^ description, String^ units, int8_t largerBetter )
+      StatisticDescriptor^ StatisticsFactory::CreateDoubleCounter( String^ name, String^ description, String^ units, bool largerBetter )
       {
         ManagedString mg_name( name );
         ManagedString mg_description( description );
@@ -101,7 +104,7 @@ namespace Apache
         return CreateIntGauge(name,description,units,false);
       }
 
-      StatisticDescriptor^ StatisticsFactory::CreateIntGauge( String^ name, String^ description, String^ units, int8_t largerBetter )
+      StatisticDescriptor^ StatisticsFactory::CreateIntGauge( String^ name, String^ description, String^ units, bool largerBetter )
       {
         ManagedString mg_name( name );
         ManagedString mg_description( description );
@@ -118,7 +121,7 @@ namespace Apache
         return CreateLongGauge(name,description,units,false);
       }
 
-      StatisticDescriptor^ StatisticsFactory::CreateLongGauge( String^ name, String^ description, String^ units, int8_t largerBetter )
+      StatisticDescriptor^ StatisticsFactory::CreateLongGauge( String^ name, String^ description, String^ units, bool largerBetter )
       {
         ManagedString mg_name( name );
         ManagedString mg_description( description );
@@ -135,7 +138,7 @@ namespace Apache
         return CreateDoubleGauge(name,description,units,false);
       }
 
-      StatisticDescriptor^ StatisticsFactory::CreateDoubleGauge( String^ name, String^ description, String^ units,int8_t largerBetter )
+      StatisticDescriptor^ StatisticsFactory::CreateDoubleGauge( String^ name, String^ description, String^ units, bool largerBetter )
       {
         ManagedString mg_name( name );
         ManagedString mg_description( description );

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/StatisticsFactory.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/StatisticsFactory.hpp b/src/clicache/src/StatisticsFactory.hpp
index 7a5d330..efce9c5 100644
--- a/src/clicache/src/StatisticsFactory.hpp
+++ b/src/clicache/src/StatisticsFactory.hpp
@@ -66,14 +66,14 @@ namespace Apache
         /// Return a pre-existing statistics factory. Typically configured through
         /// creation of a distributed system.
         /// </summary>
-        static StatisticsFactory^ GetExistingInstance();
+        //static StatisticsFactory^ GetExistingInstance();
 
         /// <summary>
         /// Creates and returns an int counter  <see cref="StatisticDescriptor" />
         /// with the given <c>name</c>, <c>description</c>,
         /// <c>units</c>, and with larger values indicating better performance.
         /// </summary>
-        virtual StatisticDescriptor^ CreateIntCounter(String^ name, String^ description, String^ units, int8_t largerBetter);
+        virtual StatisticDescriptor^ CreateIntCounter(String^ name, String^ description, String^ units, bool largerBetter);
 
         /// <summary>
         /// Creates and returns an int counter  <see cref="StatisticDescriptor" />
@@ -87,7 +87,7 @@ namespace Apache
         /// with the given <c>name</c>, <c>description</c>,
         /// <c>units</c>, and with larger values indicating better performance.
         /// </summary>
-        virtual StatisticDescriptor^ CreateLongCounter(String^ name, String^ description, String^ units, int8_t largerBetter);
+        virtual StatisticDescriptor^ CreateLongCounter(String^ name, String^ description, String^ units, bool largerBetter);
 
         /// <summary>
         /// Creates and returns an long counter  <see cref="StatisticDescriptor" />
@@ -102,7 +102,7 @@ namespace Apache
         /// <c>units</c>, and with larger values indicating better performance.
         /// </summary>
 
-        virtual StatisticDescriptor^ CreateDoubleCounter(String^ name, String^ description, String^ units, int8_t largerBetter);
+        virtual StatisticDescriptor^ CreateDoubleCounter(String^ name, String^ description, String^ units, bool largerBetter);
 
         /// <summary>
         /// Creates and returns an double counter  <see cref="StatisticDescriptor" />
@@ -116,7 +116,7 @@ namespace Apache
         /// with the given <c>name</c>, <c>description</c>,
         /// <c>units</c>, and with smaller values indicating better performance.
         /// </summary>
-        virtual StatisticDescriptor^ CreateIntGauge(String^ name, String^ description, String^ units, int8_t largerBetter);
+        virtual StatisticDescriptor^ CreateIntGauge(String^ name, String^ description, String^ units, bool largerBetter);
 
         /// <summary>
         /// Creates and returns an int gauge  <see cref="StatisticDescriptor" />
@@ -130,7 +130,7 @@ namespace Apache
         /// with the given <c>name</c>, <c>description</c>,
         /// <c>units</c>, and with smaller values indicating better performance.
         /// </summary>
-        virtual StatisticDescriptor^ CreateLongGauge(String^ name, String^ description, String^ units, int8_t largerBetter);
+        virtual StatisticDescriptor^ CreateLongGauge(String^ name, String^ description, String^ units, bool largerBetter);
 
         /// <summary>
         /// Creates and returns an long gauge <see cref="StatisticDescriptor" />
@@ -144,7 +144,7 @@ namespace Apache
         /// with the given <c>name</c>, <c>description</c>,
         /// <c>units</c>, and with smaller values indicating better performance.
         /// </summary>
-        virtual StatisticDescriptor^ CreateDoubleGauge(String^ name, String^ description, String^ units, int8_t largerBetter);
+        virtual StatisticDescriptor^ CreateDoubleGauge(String^ name, String^ description, String^ units, bool largerBetter);
 
         /// <summary>
         /// Creates and returns an double gauge <see cref="StatisticDescriptor" />

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/impl/AuthenticatedCache.cpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/impl/AuthenticatedCache.cpp b/src/clicache/src/impl/AuthenticatedCache.cpp
index a8e2b15..acd96c0 100644
--- a/src/clicache/src/impl/AuthenticatedCache.cpp
+++ b/src/clicache/src/impl/AuthenticatedCache.cpp
@@ -15,7 +15,12 @@
  * limitations under the License.
  */
 
-//#include "../geode_includes.hpp"
+
+#include "begin_native.hpp"
+#include "CacheRegionHelper.hpp"
+#include "CacheImpl.hpp"
+#include "end_native.hpp"
+
 #include "../Cache.hpp"
 #include "../DistributedSystem.hpp"
 #include "../Region.hpp"
@@ -25,6 +30,7 @@
 #include "../Execution.hpp"
 #include "AuthenticatedCache.hpp"
 #include "PdxInstanceFactoryImpl.hpp"
+
 using namespace System;
 
 namespace Apache
@@ -123,7 +129,7 @@ namespace Apache
 
       IPdxInstanceFactory^ AuthenticatedCache::CreatePdxInstanceFactory(String^ className)
       {
-        return gcnew Internal::PdxInstanceFactoryImpl(className);
+        return gcnew Internal::PdxInstanceFactoryImpl(className, native::CacheRegionHelper::getCacheImpl(m_nativeptr->get())->getCache());
       }
     }  // namespace Client
   }  // namespace Geode

http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/clicache/src/impl/CacheLoader.hpp
----------------------------------------------------------------------
diff --git a/src/clicache/src/impl/CacheLoader.hpp b/src/clicache/src/impl/CacheLoader.hpp
index 9f8a049..c785338 100644
--- a/src/clicache/src/impl/CacheLoader.hpp
+++ b/src/clicache/src/impl/CacheLoader.hpp
@@ -70,7 +70,7 @@ namespace Apache
             Object^ ghelper = Serializable::GetManagedValueGeneric<Object^>(helper);
 
             //return SafeMSerializableConvertGeneric(m_loader->Load(gregion, gkey, ghelper));
-            return Serializable::GetUnmanagedValueGeneric<TValue>(m_loader->Load(gregion, gkey, ghelper));
+            return Serializable::GetUnmanagedValueGeneric<TValue>(m_loader->Load(gregion, gkey, ghelper), nullptr);
           }
 
           virtual void close( const apache::geode::client::RegionPtr& region )