You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2019/08/23 20:39:41 UTC

[geode] branch dsfid_separation_wip created (now c5e5b8d)

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

bschuchardt pushed a change to branch dsfid_separation_wip
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at c5e5b8d  redoing lost work

This branch includes the following new commits:

     new 2e9adb3  Proof of concept: Isolation of DataSerializableFixedID for use in membership
     new c5e5b8d  redoing lost work

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 02/02: redoing lost work

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch dsfid_separation_wip
in repository https://gitbox.apache.org/repos/asf/geode.git

commit c5e5b8de60ad6b6d47ece786bb11d4b38bef8095
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Fri Aug 23 13:38:00 2019 -0700

    redoing lost work
---
 .../geode/ClusterCommunicationsDUnitTest.java      |   12 +-
 ...ackwardCompatibilitySerializationDUnitTest.java |   24 +-
 .../cache/client/ClientCacheFactoryJUnitTest.java  |    8 +-
 .../ResultsDataSerializabilityJUnitTest.java       |    2 +-
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |    2 +-
 ...FOEvictionAlgoMemoryEnabledRegionJUnitTest.java |    2 +-
 .../apache/geode/pdx/PdxSerializableJUnitTest.java |    2 +-
 .../internal/InternalDataSerializerBenchmark.java  |    4 +-
 .../main/java/org/apache/geode/DataSerializer.java |    2 +-
 .../admin/jmx/internal/StatAlertNotification.java  |    2 +-
 .../geode/cache/client/internal/AbstractOp.java    |    2 +-
 .../cache/client/internal/AuthenticateUserOp.java  |    2 +-
 .../client/internal/ClientSideHandshakeImpl.java   |   12 +-
 .../apache/geode/cache/client/internal/PutOp.java  |    2 +-
 .../internal/locator/ClientConnectionRequest.java  |    2 +-
 .../internal/locator/ClientConnectionResponse.java |    2 +-
 .../internal/locator/ClientReplacementRequest.java |    2 +-
 .../internal/locator/GetAllServersRequest.java     |    2 +-
 .../internal/locator/GetAllServersResponse.java    |    2 +-
 .../internal/locator/LocatorListRequest.java       |    2 +-
 .../internal/locator/LocatorListResponse.java      |    2 +-
 .../internal/locator/LocatorStatusRequest.java     |    4 +-
 .../internal/locator/LocatorStatusResponse.java    |    2 +-
 .../internal/locator/QueueConnectionRequest.java   |    2 +-
 .../internal/locator/QueueConnectionResponse.java  |    2 +-
 .../internal/locator/ServerLocationRequest.java    |    2 +-
 .../internal/locator/ServerLocationResponse.java   |    2 +-
 .../apache/geode/cache/query/internal/CqEntry.java |    2 +-
 .../internal/CumulativeNonDistinctResults.java     |    4 +-
 .../cache/query/internal/LinkedResultSet.java      |    2 +-
 .../cache/query/internal/LinkedStructSet.java      |    2 +-
 .../cache/query/internal/NWayMergeResults.java     |    4 +-
 .../geode/cache/query/internal/NullToken.java      |    2 +-
 .../cache/query/internal/PRQueryTraceInfo.java     |    2 +-
 .../geode/cache/query/internal/ResultsBag.java     |    2 +-
 .../query/internal/ResultsCollectionWrapper.java   |    2 +-
 .../geode/cache/query/internal/ResultsSet.java     |    2 +-
 .../cache/query/internal/SortedResultSet.java      |    2 +-
 .../cache/query/internal/SortedStructSet.java      |    2 +-
 .../geode/cache/query/internal/StructImpl.java     |    2 +-
 .../geode/cache/query/internal/StructSet.java      |    2 +-
 .../geode/cache/query/internal/Undefined.java      |    2 +-
 .../query/internal/index/IndexCreationData.java    |    2 +-
 .../cache/query/internal/types/ObjectTypeImpl.java |    2 +-
 .../apache/geode/cache/wan/EventSequenceID.java    |    2 +-
 .../distributed/internal/DistributionAdvisor.java  |    2 +-
 .../distributed/internal/DistributionMessage.java  |    2 +-
 .../internal/InternalDistributedSystem.java        |    7 -
 .../distributed/internal/ReplyProcessor21.java     |    2 +-
 .../geode/distributed/internal/ServerLocator.java  |    2 +-
 .../internal/WaitForViewInstallation.java          |    2 +-
 .../internal/locks/DLockRemoteToken.java           |    2 +-
 .../distributed/internal/locks/DLockService.java   |    2 +-
 .../membership/InternalDistributedMember.java      |    2 +-
 .../membership/adapter/GMSMembershipManager.java   |    2 +-
 .../membership/adapter/GMSMessageAdapter.java      |    2 +-
 .../internal/membership/gms/GMSMember.java         |    2 +-
 .../internal/membership/gms/GMSMembershipView.java |    2 +-
 .../internal/membership/gms/GMSUtil.java           |    4 +-
 .../membership/gms/interfaces/Manager.java         |    2 +-
 .../gms/locator/FindCoordinatorResponse.java       |    2 +-
 .../membership/gms/locator/GetViewRequest.java     |    2 +-
 .../membership/gms/locator/GetViewResponse.java    |    2 +-
 .../membership/gms/membership/GMSJoinLeave.java    |    6 +-
 .../gms/messages/AbstractGMSMessage.java           |    2 +-
 .../membership/gms/messenger/JGroupsMessenger.java |   14 +-
 .../distributed/internal/tcpserver/TcpClient.java  |   21 +-
 .../distributed/internal/tcpserver/TcpServer.java  |   14 +-
 .../{serialization => }/ByteBufferWriter.java      |    0
 .../org/apache/geode/internal/DSFIDFactory.java    | 1104 ++++++++++++++++++--
 .../apache/geode/internal/ExternalizableDSFID.java |    2 +
 .../geode/internal/HeapDataOutputStream.java       | 1032 +-----------------
 .../geode/internal/InternalDataSerializer.java     |  122 +--
 .../org/apache/geode/internal/SystemAdmin.java     |    7 +-
 .../internal/{serialization => }/Version.java      |   13 +
 .../geode/internal/VersionedDataSerializable.java  |    1 +
 .../{serialization => }/VersionedObjectInput.java  |    9 +-
 .../{serialization => }/VersionedObjectOutput.java |    9 +-
 .../internal/admin/ClientMembershipMessage.java    |    3 +-
 .../internal/admin/remote/ClientHealthStats.java   |    2 +-
 .../admin/remote/DurableClientInfoRequest.java     |    2 +-
 .../statalerts/GaugeThresholdDecoratorImpl.java    |    2 +-
 .../statalerts/NumberThresholdDecoratorImpl.java   |    2 +-
 .../geode/internal/cache/AbstractRegion.java       |    2 +-
 .../internal/cache/CacheDistributionAdvisor.java   |    2 +-
 .../cache/CachedDeserializableFactory.java         |    2 +-
 .../internal/cache/DistTXPrecommitMessage.java     |    2 +-
 .../internal/cache/DistributedPutAllOperation.java |    4 +-
 .../cache/DistributedRemoveAllOperation.java       |    2 +-
 .../cache/DistributedTombstoneOperation.java       |    2 +-
 .../geode/internal/cache/EntryEventImpl.java       |    4 +-
 .../org/apache/geode/internal/cache/EventID.java   |    7 +-
 .../apache/geode/internal/cache/FilterProfile.java |    4 +-
 .../geode/internal/cache/FilterRoutingInfo.java    |    5 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |    2 +-
 .../internal/cache/InitialImageFlowControl.java    |    2 +-
 .../internal/cache/InitialImageOperation.java      |   10 +-
 .../cache/InvalidatePartitionedRegionMessage.java  |    2 +-
 .../geode/internal/cache/NonLocalRegionEntry.java  |    2 +-
 .../org/apache/geode/internal/cache/Oplog.java     |    2 +-
 .../geode/internal/cache/PRQueryProcessor.java     |    2 +-
 .../cache/PreferBytesCachedDeserializable.java     |    2 +-
 .../geode/internal/cache/ProxyRegionMap.java       |    2 +-
 .../apache/geode/internal/cache/RegionEntry.java   |    2 +-
 .../geode/internal/cache/RegionEventImpl.java      |    2 +-
 .../cache/StoreAllCachedDeserializable.java        |    2 +-
 .../apache/geode/internal/cache/TXEntryState.java  |    2 +-
 .../org/apache/geode/internal/cache/Token.java     |    4 +-
 .../internal/cache/VMCachedDeserializable.java     |    2 +-
 .../geode/internal/cache/ValidatingDiskRegion.java |    2 +-
 .../CompressedCachedDeserializable.java            |    2 +-
 .../entries/AbstractOplogDiskRegionEntry.java      |    2 +-
 .../cache/entries/AbstractRegionEntry.java         |    2 +-
 .../geode/internal/cache/entries/DiskEntry.java    |    2 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |   10 +-
 .../geode/internal/cache/ha/ThreadIdentifier.java  |    2 +-
 .../geode/internal/cache/locks/TXLockBatch.java    |    2 +-
 .../geode/internal/cache/locks/TXLockIdImpl.java   |    2 +-
 .../cache/partitioned/BucketCountLoadProbe.java    |    2 +-
 .../cache/partitioned/PRTombstoneMessage.java      |    2 +-
 .../partitioned/PRUpdateEntryVersionMessage.java   |    2 +-
 .../cache/partitioned/PutAllPRMessage.java         |    2 +-
 .../cache/partitioned/RemoveAllPRMessage.java      |    2 +-
 .../cache/partitioned/SizedBasedLoadProbe.java     |    2 +-
 .../cache/snapshot/RegionSnapshotServiceImpl.java  |    2 +-
 .../internal/cache/snapshot/SnapshotPacket.java    |    2 +-
 .../geode/internal/cache/tier/sockets/AuthIds.java |    2 +-
 .../cache/tier/sockets/CacheClientProxy.java       |    2 +-
 .../cache/tier/sockets/CacheClientUpdater.java     |    2 +-
 .../tier/sockets/ClientInterestMessageImpl.java    |    2 +-
 .../internal/cache/tier/sockets/ClientMessage.java |    2 +-
 .../tier/sockets/ClientProxyMembershipID.java      |    4 +-
 .../tier/sockets/ClientRegistrationMetadata.java   |    9 +-
 .../tier/sockets/ClientUpdateMessageImpl.java      |    4 +-
 .../internal/cache/tier/sockets/EncryptorImpl.java |    2 +-
 .../cache/tier/sockets/HAEventWrapper.java         |    4 +-
 .../tier/sockets/InterestResultPolicyImpl.java     |    2 +-
 .../cache/tier/sockets/ObjectPartList.java         |    2 +-
 .../cache/tier/sockets/ObjectPartList651.java      |    2 +-
 .../geode/internal/cache/tier/sockets/Part.java    |    2 +-
 .../tier/sockets/SerializedObjectPartList.java     |    2 +-
 .../cache/tier/sockets/ServerConnection.java       |    2 +-
 .../tier/sockets/ServerSideHandshakeImpl.java      |   17 +-
 .../cache/tier/sockets/VersionedObjectList.java    |    2 +-
 .../geode/internal/cache/tx/DistTxEntryEvent.java  |    2 +-
 .../internal/cache/tx/RemotePutAllMessage.java     |    2 +-
 .../internal/cache/tx/RemoteRemoveAllMessage.java  |    2 +-
 .../internal/cache/versions/DiskVersionTag.java    |    4 +-
 .../cache/versions/RegionVersionVector.java        |    7 +-
 .../internal/cache/versions/VersionSource.java     |    2 +-
 .../geode/internal/cache/versions/VersionTag.java  |    2 +-
 .../wan/GatewaySenderEventCallbackArgument.java    |    2 +-
 .../internal/cache/wan/GatewaySenderEventImpl.java |    6 +-
 ...aySenderQueueEntrySynchronizationOperation.java |    2 +-
 .../internal/offheap/AbstractStoredObject.java     |    4 +-
 .../apache/geode/internal/offheap/DataType.java    |   22 +-
 .../internal/offheap/OffHeapRegionEntryHelper.java |    2 +-
 .../internal/offheap/OffHeapStoredObject.java      |    2 +-
 .../serialization/BufferDataOutputStream.java      | 1029 +++++++++++++++++-
 .../{ => serialization}/ByteArrayDataInput.java    |   24 +-
 .../geode/internal/serialization/DSCODE.java       |    3 +-
 .../serialization/DSFIDNotFoundException.java      |    4 +-
 .../internal/serialization/DSFIDSerializer.java    |   36 +-
 .../serialization/DataSerializableFixedID.java     |   40 +-
 .../geode/internal/serialization/DscodeHelper.java |    3 +-
 .../serialization/SerializationVersions.java       |    4 +-
 .../serialization/VersionedDataInputStream.java    |    9 +-
 .../serialization/VersionedDataOutputStream.java   |    9 +-
 .../serialization/VersionedDataStream.java         |   11 +-
 .../apache/geode/internal/tcp/MsgDestreamer.java   |    5 +-
 .../tcp/VersionedByteBufferInputStream.java        |    9 +-
 .../geode/internal/tcp/VersionedMsgStreamer.java   |    9 +-
 .../org/apache/geode/internal/util/BlobHelper.java |    6 +-
 .../management/internal/FederationComponent.java   |    2 +-
 .../internal/JmxManagerLocatorRequest.java         |    2 +-
 .../internal/JmxManagerLocatorResponse.java        |    2 +-
 .../internal/cli/commands/ConnectCommand.java      |    6 -
 .../internal/cli/functions/CliFunctionResult.java  |    2 +-
 .../messages/ConfigurationResponse.java            |    2 +-
 .../main/java/org/apache/geode/pdx/FieldType.java  |    2 +-
 .../java/org/apache/geode/pdx/internal/EnumId.java |    2 +-
 .../org/apache/geode/pdx/internal/EnumInfo.java    |    2 +-
 .../apache/geode/pdx/internal/PdxInstanceEnum.java |    2 +-
 .../apache/geode/pdx/internal/PdxInstanceImpl.java |    2 +-
 .../apache/geode/pdx/internal/PdxReaderImpl.java   |    2 +-
 .../org/apache/geode/pdx/internal/PdxString.java   |    2 +-
 .../apache/geode/pdx/internal/PdxWriterImpl.java   |    2 +-
 .../apache/geode/pdx/internal/json/PdxToJSON.java  |    5 +-
 .../java/org/apache/geode/DataSerializerTest.java  |    6 +-
 .../cache/execute/FunctionAdapterJUnitTest.java    |    5 +-
 .../MembershipDependenciesJUnitTest.java           |    4 +-
 .../membership/gms/GMSMemberJUnitTest.java         |    4 +-
 .../geode/internal/ByteArrayDataInputTest.java     |    4 +-
 .../geode/internal/DataSerializableJUnitTest.java  |    7 +-
 .../internal/HeapDataOutputStreamJUnitTest.java    |    7 +-
 .../geode/internal/HeapDataOutputStreamTest.java   |   11 +-
 .../internal/InternalDataSerializerJUnitTest.java  |    1 +
 .../alerting/AlertListenerMessageFactoryTest.java  |    2 +-
 .../geode/internal/cache/FilterInfoTest.java       |    4 +-
 .../cache/ha/EventIdOptimizationJUnitTest.java     |    9 +-
 .../offheap/AbstractStoredObjectTestBase.java      |    2 +-
 .../geode/internal/offheap/DataTypeJUnitTest.java  |   35 +-
 .../internal/offheap/MemoryBlockNodeJUnitTest.java |    2 +-
 .../offheap/OffHeapRegionEntryHelperJUnitTest.java |    2 +-
 .../offheap/OffHeapStoredObjectJUnitTest.java      |    2 +-
 .../offheap/TinyStoredObjectJUnitTest.java         |    2 +-
 .../geode/internal/serialization/DSCODETest.java   |    2 +-
 .../internal/serialization/VersionJUnitTest.java   |    1 -
 .../apache/geode/internal/util/BlobHelperTest.java |    2 +-
 .../org/apache/geode/pdx/internal/EnumIdTest.java  |    2 +-
 .../apache/geode/pdx/internal/EnumInfoTest.java    |    2 +-
 .../geode/codeAnalysis/decode/CompiledClass.java   |    2 +-
 .../internal/cache/eviction/LRUTestEntry.java      |    2 +-
 .../lucene/internal/LuceneResultStructImpl.java    |    2 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |   44 +-
 .../cache/lucene/internal/StringQueryProvider.java |    2 +-
 .../lucene/internal/distributed/EntryScore.java    |    2 +-
 .../distributed/LuceneFunctionContext.java         |    2 +-
 .../lucene/internal/distributed/TopEntries.java    |    2 +-
 .../internal/distributed/TopEntriesCollector.java  |    2 +-
 .../distributed/TopEntriesCollectorManager.java    |    2 +-
 .../WaitUntilFlushedFunctionContext.java           |    2 +-
 .../cache/lucene/internal/filesystem/ChunkKey.java |    2 +-
 .../cache/lucene/internal/filesystem/File.java     |    2 +-
 .../cache/lucene/internal/results/PageResults.java |    2 +-
 .../LuceneQueryFunctionContextJUnitTest.java       |    2 +-
 .../internal/results/PageEntryJUnitTest.java       |    4 +-
 .../internal/results/PageResultsJUnitTest.java     |    8 +-
 .../apache/geode/OldClientSupportDUnitTest.java    |   16 +-
 .../gemstone/gemfire/OldClientSupportProvider.java |    4 +-
 .../internal/locator/wan/LocatorJoinMessage.java   |    2 +-
 .../locator/wan/RemoteLocatorJoinRequest.java      |    2 +-
 .../locator/wan/RemoteLocatorJoinResponse.java     |    2 +-
 .../locator/wan/RemoteLocatorPingRequest.java      |    2 +-
 .../locator/wan/RemoteLocatorPingResponse.java     |    2 +-
 .../internal/locator/wan/RemoteLocatorRequest.java |    2 +-
 .../locator/wan/RemoteLocatorResponse.java         |    2 +-
 .../internal/locator/wan/WANFactoryImpl.java       |   25 +-
 .../geode/rest/internal/web/util/JSONUtils.java    |   13 +-
 239 files changed, 2668 insertions(+), 1643 deletions(-)

diff --git a/geode-core/src/distributedTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java
index 046d656..a3afd62 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java
@@ -29,7 +29,7 @@ import static org.apache.geode.distributed.ConfigurationProperties.SSL_REQUIRE_A
 import static org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE;
 import static org.apache.geode.distributed.ConfigurationProperties.SSL_TRUSTSTORE_PASSWORD;
 import static org.apache.geode.distributed.ConfigurationProperties.USE_CLUSTER_CONFIGURATION;
-import static org.apache.geode.internal.DataSerializableFixedID.SERIAL_ACKED_MESSAGE;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.SERIAL_ACKED_MESSAGE;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
 import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
@@ -77,7 +77,7 @@ import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.SerialAckedMessage;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.internal.DSFIDFactory;
+import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.DirectReplyMessage;
 import org.apache.geode.test.dunit.DistributedTestUtils;
 import org.apache.geode.test.dunit.Host;
@@ -172,8 +172,9 @@ public class ClusterCommunicationsDUnitTest implements Serializable {
 
   @Test
   public void receiveBigResponse() {
-    invokeInEveryVM(() -> DSFIDFactory.registerDSFID(SERIAL_ACKED_MESSAGE,
-        SerialAckedMessageWithBigReply.class));
+    invokeInEveryVM(
+        () -> InternalDataSerializer.getDSFIDSerializer().registerDSFID(SERIAL_ACKED_MESSAGE,
+            SerialAckedMessageWithBigReply.class));
     try {
       int locatorPort = createLocator(getVM(0));
       for (int i = 1; i <= NUM_SERVERS; i++) {
@@ -190,7 +191,8 @@ public class ClusterCommunicationsDUnitTest implements Serializable {
       });
     } finally {
       invokeInEveryVM(
-          () -> DSFIDFactory.registerDSFID(SERIAL_ACKED_MESSAGE, SerialAckedMessage.class));
+          () -> InternalDataSerializer.getDSFIDSerializer().registerDSFID(SERIAL_ACKED_MESSAGE,
+              SerialAckedMessage.class));
     }
   }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java
index 4c82444..7a0396c 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/BackwardCompatibilitySerializationDUnitTest.java
@@ -34,6 +34,10 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.cache.Cache;
 import org.apache.geode.internal.cache.DistributedPutAllOperation.EntryVersionsList;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationVersions;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
@@ -66,14 +70,16 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   public final void postSetUp() {
     baos = new ByteArrayOutputStream();
     // register TestMessage using an existing dsfid
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.PUTALL_VERSIONS_LIST, TestMessage.class);
+    InternalDataSerializer.getDSFIDSerializer()
+        .registerDSFID(DataSerializableFixedID.PUTALL_VERSIONS_LIST, TestMessage.class);
   }
 
   @Override
   public final void preTearDownCacheTestCase() {
     resetFlags();
     // reset the class mapped to the dsfid
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.PUTALL_VERSIONS_LIST,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.PUTALL_VERSIONS_LIST,
         EntryVersionsList.class);
     this.baos = null;
     this.bais = null;
@@ -87,7 +93,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   @Test
   public void testToDataFromHigherVersionToLower() throws Exception {
     DataOutputStream dos =
-        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_56);
+        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_56.ordinal());
     InternalDataSerializer.writeDSFID(msg, dos);
     assertTrue(toDataPre66Called);
     assertFalse(toDataCalled);
@@ -101,7 +107,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   @Test
   public void testToDataFromLowerVersionToHigher() throws Exception {
     DataOutputStream dos =
-        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_701);
+        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_701.ordinal());
     InternalDataSerializer.writeDSFID(msg, dos);
     assertTrue(toDataCalled);
   }
@@ -116,7 +122,8 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     InternalDataSerializer.writeDSFID(msg, new DataOutputStream(baos));
     this.bais = new ByteArrayInputStream(baos.toByteArray());
 
-    DataInputStream dis = new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_701);
+    DataInputStream dis =
+        new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_701.ordinal());
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof TestMessage);
     assertTrue(fromDataCalled);
@@ -132,7 +139,8 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     InternalDataSerializer.writeDSFID(msg, new DataOutputStream(baos));
     this.bais = new ByteArrayInputStream(baos.toByteArray());
 
-    DataInputStream dis = new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_56);
+    DataInputStream dis =
+        new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_56.ordinal());
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof TestMessage);
     assertTrue(fromDataPre66Called);
@@ -164,7 +172,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     constdsfids.add(new Short(DataSerializableFixedID.TOKEN_TOMBSTONE).intValue());
 
     for (int i = 0; i < 256; i++) {
-      Constructor<?> cons = DSFIDFactory.getDsfidmap()[i];
+      Constructor<?> cons = InternalDataSerializer.getDSFIDSerializer().getDsfidmap()[i];
       if (!constdsfids.contains(i - Byte.MAX_VALUE - 1) && cons != null) {
         Object ds = cons.newInstance((Object[]) null);
         checkSupportForRollingUpgrade(ds);
@@ -173,7 +181,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
 
     // some msgs require distributed system
     Cache c = getCache();
-    for (Object o : DSFIDFactory.getDsfidmap2().values()) {
+    for (Object o : InternalDataSerializer.getDSFIDSerializer().getDsfidmap2().values()) {
       Constructor<?> cons = (Constructor<?>) o;
       if (cons != null) {
         DataSerializableFixedID ds = (DataSerializableFixedID) cons.newInstance((Object[]) null);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
index f35b79f..fbebdd6 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
@@ -60,11 +60,11 @@ import org.apache.geode.distributed.internal.membership.adapter.GMSMemberAdapter
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
 import org.apache.geode.internal.cache.xmlcache.ClientCacheCreation;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.pdx.ReflectionBasedAutoSerializer;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
@@ -355,7 +355,8 @@ public class ClientCacheFactoryJUnitTest {
     DataSerializer.writeObject(clientID, out);
 
     DataInputStream in =
-        new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()), Version.CURRENT);
+        new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()),
+            Version.CURRENT_ORDINAL);
     ClientProxyMembershipID newID = DataSerializer.readObject(in);
     InternalDistributedMember newMemberID =
         (InternalDistributedMember) newID.getDistributedMember();
@@ -372,7 +373,8 @@ public class ClientCacheFactoryJUnitTest {
     out = new HeapDataOutputStream(Version.CURRENT);
     DataSerializer.writeObject(clientID, out);
 
-    in = new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()), Version.CURRENT);
+    in = new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()),
+        Version.CURRENT_ORDINAL);
     newID = DataSerializer.readObject(in);
     newMemberID = (InternalDistributedMember) newID.getDistributedMember();
     assertThat(newMemberID.getVersionObject()).isEqualTo(Version.CURRENT);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/query/functional/ResultsDataSerializabilityJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/query/functional/ResultsDataSerializabilityJUnitTest.java
index 3539bc6..7ec2bc1 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/query/functional/ResultsDataSerializabilityJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/query/functional/ResultsDataSerializabilityJUnitTest.java
@@ -54,7 +54,7 @@ import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
 import org.apache.geode.cache.query.internal.types.MapTypeImpl;
 import org.apache.geode.cache.query.internal.types.ObjectTypeImpl;
 import org.apache.geode.cache.query.internal.types.StructTypeImpl;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.test.junit.categories.OQLQueryTest;
 
 /**
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
index 602bccb..87e56bb 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessengerJUnitTest.java
@@ -91,10 +91,10 @@ import org.apache.geode.distributed.internal.membership.gms.messages.JoinRespons
 import org.apache.geode.distributed.internal.membership.gms.messages.LeaveRequestMessage;
 import org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger.JGroupsReceiver;
 import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
index 7fa5f8d..1063deb 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
@@ -49,7 +49,6 @@ import org.apache.geode.cache.Scope;
 import org.apache.geode.cache.TimeoutException;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.DistributionManager;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DistributedRegion.DiskPosition;
@@ -63,6 +62,7 @@ import org.apache.geode.internal.cache.persistence.DiskRecoveryStore;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * This is a test verifies region is LIFO enabled by MEMORY verifies correct stats updating and
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
index c5864c0..af9e806 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
@@ -54,12 +54,12 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.DiskStoreFactory;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionShortcut;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.PdxSerializerObject;
 import org.apache.geode.internal.SystemAdmin;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.pdx.internal.DataSize;
diff --git a/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java b/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
index 1417a50..cc12370 100644
--- a/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
+++ b/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
@@ -33,6 +33,8 @@ import org.openjdk.jmh.annotations.State;
 import org.openjdk.jmh.annotations.Warmup;
 
 import org.apache.geode.DataSerializer;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DSCODE;
 
 
 /**
@@ -64,7 +66,7 @@ public class InternalDataSerializerBenchmark {
   @BenchmarkMode(Mode.Throughput)
   @OutputTimeUnit(TimeUnit.MILLISECONDS)
   public String readStringBenchmark() throws IOException {
-    dataInput.initialize(serializedBytes, Version.CURRENT);
+    dataInput.initialize(serializedBytes, Version.CURRENT_ORDINAL);
     String result = InternalDataSerializer.readString(dataInput, DSCODE.STRING_BYTES.toByte());
     return result;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/DataSerializer.java b/geode-core/src/main/java/org/apache/geode/DataSerializer.java
index 3fd91fc..d7cf3c7 100644
--- a/geode-core/src/main/java/org/apache/geode/DataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/DataSerializer.java
@@ -52,7 +52,6 @@ import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.ObjToByteArraySerializer;
@@ -65,6 +64,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.StoredObject;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.pdx.PdxInstance;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java
index 3511568..a8f333d 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/jmx/internal/StatAlertNotification.java
@@ -21,10 +21,10 @@ import java.io.Serializable;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.StatAlert;
 import org.apache.geode.internal.admin.StatAlertDefinition;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Notification to be sent to clients (e.g GFMon2.0 ). It incorporates
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
index 785f2a1..49fec15 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
@@ -22,7 +22,6 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.InternalGemFireError;
 import org.apache.geode.cache.client.ServerConnectivityException;
 import org.apache.geode.cache.client.ServerOperationException;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.PutAllPartialResultException;
@@ -34,6 +33,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Represents an operation that can be performed in a client by sending a message to a server.
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
index 333b68e..296b757 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
@@ -27,7 +27,6 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.tier.MessageType;
@@ -36,6 +35,7 @@ import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.command.PutUserCredentials;
 import org.apache.geode.internal.logging.InternalLogWriter;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.security.NotAuthorizedException;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
index 6a25c0d..3a61b0d 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
@@ -49,13 +49,10 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.LonerDistributionManager;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.tier.ClientSideHandshake;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.Encryptor;
@@ -64,6 +61,9 @@ import org.apache.geode.internal.cache.tier.sockets.EncryptorImpl;
 import org.apache.geode.internal.cache.tier.sockets.Handshake;
 import org.apache.geode.internal.cache.tier.sockets.ServerQueueStatus;
 import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.security.GemFireSecurityException;
@@ -215,7 +215,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
         conn.setWanSiteVersion(wanSiteVersion);
         // establish a versioned stream for the other site, if necessary
         if (wanSiteVersion < Version.CURRENT_ORDINAL) {
-          dis = new VersionedDataInputStream(dis, Version.fromOrdinalOrCurrent(wanSiteVersion));
+          dis = new VersionedDataInputStream(dis, wanSiteVersion);
         }
       }
 
@@ -270,7 +270,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
 
     byte[] memberBytes = DataSerializer.readByteArray(p_dis);
     Version v = InternalDataSerializer.getVersionForDataStreamOrNull(p_dis);
-    ByteArrayDataInput dis = new ByteArrayDataInput(memberBytes, v);
+    ByteArrayDataInput dis = new ByteArrayDataInput(memberBytes, v == null ? 0 : v.ordinal());
     try {
       return DataSerializer.readObject(dis);
     } catch (EOFException e) {
@@ -389,7 +389,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // we do not know the receiver's version at this point, but the on-wire
       // form of InternalDistributedMember changed in 9.0, so we must serialize
       // it using the previous version
-      DataOutput idOut = new VersionedDataOutputStream(hdos, Version.GFE_82);
+      DataOutput idOut = new VersionedDataOutputStream(hdos, Version.GFE_82.ordinal());
       DataSerializer.writeObject(this.id, idOut);
 
       if (currentClientVersion.compareTo(Version.GFE_603) >= 0) {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutOp.java
index 57b25bd..4c1fc8b 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutOp.java
@@ -27,7 +27,6 @@ import org.apache.geode.cache.client.ServerConnectivityException;
 import org.apache.geode.cache.client.ServerOperationException;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.LocalRegion;
@@ -36,6 +35,7 @@ import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Does a region put (or create) on a server
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionRequest.java
index 7ed4617..9be89d9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionRequest.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import java.util.Set;
 
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A request from a client to the locator asking for a server to connect to for client to server
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionResponse.java
index ce0b717..d9c36bb 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientConnectionResponse.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A response from a locator to a client Indicating which server to connect to for client to server
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientReplacementRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientReplacementRequest.java
index aef7f06..c032ba9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientReplacementRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ClientReplacementRequest.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 import java.util.Set;
 
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A request from a client to the locator asking for a server to connect to for client to server
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersRequest.java
index 882fc11..ce28361 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersRequest.java
@@ -18,7 +18,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class GetAllServersRequest extends ServerLocationRequest {
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersResponse.java
index c827938..2433195 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/GetAllServersResponse.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class GetAllServersResponse extends ServerLocationResponse {
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListRequest.java
index 8c1a819..9b96ecd 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListRequest.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.cache.client.internal.locator;
 
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 
 public class LocatorListRequest extends ServerLocationRequest {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListResponse.java
index d53a1d2..7764ee1 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorListResponse.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 import java.util.List;
 
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class LocatorListResponse extends ServerLocationResponse {
   /** ArrayList of ServerLocations for controllers */
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusRequest.java
index 2e70576..ce500dc 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusRequest.java
@@ -15,14 +15,14 @@
 
 package org.apache.geode.cache.client.internal.locator;
 
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * The LocatorStatusRequest class...
  * </p>
  *
  * @see org.apache.geode.cache.client.internal.locator.ServerLocationRequest
- * @see org.apache.geode.internal.DataSerializableFixedID
+ * @see DataSerializableFixedID
  * @since GemFire 7.0
  */
 public class LocatorStatusRequest extends ServerLocationRequest {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusResponse.java
index e972a67..9d09864 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/LocatorStatusResponse.java
@@ -24,12 +24,12 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.lang.ObjectUtils;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.process.PidUnavailableException;
 import org.apache.geode.internal.process.ProcessUtils;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.ArgumentRedactor;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionRequest.java
index 14dbffe..4caf01c 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionRequest.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 import java.util.Set;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A request from a client to locator asking for a server to host a queue. If the durable client Id
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionResponse.java
index b719f44..022453a 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/QueueConnectionResponse.java
@@ -21,7 +21,7 @@ import java.util.List;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A response from locator to client indicating the servers to use to host the clients queue. The
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java
index 6340f74..0b8a63c 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationRequest.java
@@ -19,8 +19,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public abstract class ServerLocationRequest implements DataSerializableFixedID {
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
index f7ac45b..75bf6c0 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
@@ -14,8 +14,8 @@
  */
 package org.apache.geode.cache.client.internal.locator;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public abstract class ServerLocationResponse implements DataSerializableFixedID {
   public abstract boolean hasResult();
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java
index 9a87c99..53b11e1 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CqEntry.java
@@ -20,8 +20,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java
index fc65a63..5382e71 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/CumulativeNonDistinctResults.java
@@ -34,10 +34,10 @@ import org.apache.geode.cache.query.internal.utils.LimitIterator;
 import org.apache.geode.cache.query.internal.utils.PDXUtils;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.HeapDataOutputStream.LongUpdater;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This is used as a wrapper over all the results of PR which are of non distinct type
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java
index 8725ced..f01a6e3 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedResultSet.java
@@ -32,8 +32,8 @@ import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class LinkedResultSet extends java.util.LinkedHashSet
     implements Ordered, SelectResults, DataSerializableFixedID {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java
index d52931c..3df19d4 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/LinkedStructSet.java
@@ -31,8 +31,8 @@ import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
 import org.apache.geode.cache.query.internal.types.StructTypeImpl;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class LinkedStructSet extends LinkedHashSet<Struct>
     implements SelectResults<Struct>, Ordered, DataSerializableFixedID {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java
index db54692..e388351 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NWayMergeResults.java
@@ -35,10 +35,10 @@ import org.apache.geode.cache.query.internal.types.StructTypeImpl;
 import org.apache.geode.cache.query.internal.utils.LimitIterator;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.HeapDataOutputStream.LongUpdater;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * The n - way merge results returns a sorted results on the cumulative sorted results for
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java
index c1a6f98..75106c8 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/NullToken.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.query.internal.index.IndexManager;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A Token representing null.
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
index aaa0833..cc798d1 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
@@ -23,8 +23,8 @@ import java.util.Iterator;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 
 public class PRQueryTraceInfo implements DataSerializableFixedID {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java
index 89f18bd..8f7f8c0 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsBag.java
@@ -24,9 +24,9 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.query.SelectResults;
 import org.apache.geode.cache.query.internal.ObjectIntHashMap.Entry;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CachePerfStats;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class ResultsBag extends Bag implements DataSerializableFixedID {
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java
index 4a24a3c..6c65ebf 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsCollectionWrapper.java
@@ -36,10 +36,10 @@ import org.apache.geode.cache.query.SelectResults;
 import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.EntriesSet;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Implementation of SelectResults that wraps an existing java.util.Collection and optionally adds a
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java
index 5e8f873..adabcc0 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/ResultsSet.java
@@ -33,9 +33,9 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 // @todo probably should assert element type when elements added
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java
index 4b0046a..d46e284 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedResultSet.java
@@ -32,8 +32,8 @@ import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Implementation of SelectResults that extends TreeSet This is the sorted version of ResultSet used
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java
index d8b522a..ccb2392 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/SortedStructSet.java
@@ -32,8 +32,8 @@ import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
 import org.apache.geode.cache.query.internal.types.StructTypeImpl;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A TreeSet constrained to contain Structs of all the same type. To conserve on objects, we store
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java
index 7e48c2d..618e63f 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructImpl.java
@@ -26,8 +26,8 @@ import org.apache.geode.cache.query.Struct;
 import org.apache.geode.cache.query.internal.types.StructTypeImpl;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.PdxString;
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java
index c998152..baa6dc5 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructSet.java
@@ -36,8 +36,8 @@ import org.apache.geode.cache.query.internal.types.StructTypeImpl;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A Set constrained to contain Structs of all the same type. To conserve on objects, we store the
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java
index ab69172..363c691 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/Undefined.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 import java.io.Serializable;
 
 import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * An UNDEFINED value is the result of accessing an attribute of a null-valued attribute. If you
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java
index 711e1bd..f180b1d 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/index/IndexCreationData.java
@@ -24,8 +24,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.cache.query.IndexType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  *
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java
index 18edb5d..ccabae1 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/ObjectTypeImpl.java
@@ -21,9 +21,9 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.query.types.ObjectType;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Implementation of ObjectType
diff --git a/geode-core/src/main/java/org/apache/geode/cache/wan/EventSequenceID.java b/geode-core/src/main/java/org/apache/geode/cache/wan/EventSequenceID.java
index 8400376..3e25abe 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/wan/EventSequenceID.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/wan/EventSequenceID.java
@@ -17,7 +17,7 @@ package org.apache.geode.cache.wan;
 import java.util.Arrays;
 
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * This class wraps 1) DistributedMembershipID 2) ThreadID 3) SequenceID attributes which are used
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java
index e551157..ad81f30 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionAdvisor.java
@@ -39,7 +39,6 @@ import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CacheDistributionAdvisor.CacheProfile;
@@ -49,6 +48,7 @@ import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.ArrayUtils;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java
index 21151a0..9ebba6b 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionMessage.java
@@ -32,12 +32,12 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.deadlock.MessageDependencyMonitor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.sequencelog.MessageLogger;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.tcp.Connection;
 import org.apache.geode.internal.util.Breadcrumbs;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
index 96ae52d..66c3e2a 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
@@ -76,7 +76,6 @@ import org.apache.geode.distributed.internal.membership.QuorumChecker;
 import org.apache.geode.distributed.internal.membership.adapter.GMSMembershipManager;
 import org.apache.geode.distributed.internal.membership.gms.messenger.MembershipInformation;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DSFIDFactory;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
 import org.apache.geode.internal.SystemTimer;
@@ -534,12 +533,6 @@ public class InternalDistributedSystem extends DistributedSystem
     alertingSession = AlertingSession.create();
     alertingService = new AlertingService();
     loggingSession = LoggingSession.create();
-
-    // register DSFID types first; invoked explicitly so that all message type
-    // initializations do not happen in first deserialization on a possibly
-    // "precious" thread
-    DSFIDFactory.registerTypes();
-
     originalConfig = config.distributionConfig();
     isReconnectingDS = config.isReconnecting();
     quorumChecker = config.quorumChecker();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java
index 486d102..30b0897 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyProcessor21.java
@@ -34,10 +34,10 @@ import org.apache.geode.distributed.DistributedSystemDisconnectedException;
 import org.apache.geode.distributed.internal.deadlock.MessageDependencyMonitor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DSFIDNotFoundException;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DSFIDNotFoundException;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.internal.util.concurrent.StoppableCountDownLatch;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ServerLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ServerLocator.java
index 2ed366e..4e8014a 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ServerLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ServerLocator.java
@@ -51,7 +51,6 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.DistributionAdvisor.Profile;
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.cache.CacheServerAdvisor.CacheServerProfile;
 import org.apache.geode.internal.cache.ControllerAdvisor;
 import org.apache.geode.internal.cache.ControllerAdvisor.ControllerProfile;
@@ -59,6 +58,7 @@ import org.apache.geode.internal.cache.FindDurableQueueProcessor;
 import org.apache.geode.internal.cache.GridAdvisor.GridProfile;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  *
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/WaitForViewInstallation.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/WaitForViewInstallation.java
index a813bbd..c26e055 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/WaitForViewInstallation.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/WaitForViewInstallation.java
@@ -78,7 +78,7 @@ public class WaitForViewInstallation extends HighPriorityDistributionMessage
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+   * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
    */
   @Override
   public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java
index c94c13d..22b8ca7 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRemoteToken.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Represents a held lock in a member for use when initializing a new grantor. All currently held
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java
index f453f61..54813c3 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockService.java
@@ -54,11 +54,11 @@ import org.apache.geode.distributed.internal.deadlock.UnsafeThreadLocal;
 import org.apache.geode.distributed.internal.locks.DLockQueryProcessor.DLockQueryReplyMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.OSProcess;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.StopWatch;
 import org.apache.geode.internal.util.concurrent.FutureResult;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index 7327829..8c0c597 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -44,12 +44,12 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DistributionAdvisor.ProfileId;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.OSProcess;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This is the fundamental representation of a member of a GemFire distributed system.
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java
index 300b36f..598f5a7 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMembershipManager.java
@@ -82,7 +82,6 @@ import org.apache.geode.distributed.internal.membership.gms.interfaces.Manager;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.distributed.internal.membership.gms.messenger.GMSQuorumChecker;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.SystemTimer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
@@ -90,6 +89,7 @@ import org.apache.geode.internal.cache.partitioned.PartitionMessageWithDirectRep
 import org.apache.geode.internal.logging.LoggingThread;
 import org.apache.geode.internal.logging.log4j.AlertAppender;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.tcp.ConnectExceptions;
 import org.apache.geode.internal.tcp.MemberShunnedException;
 import org.apache.geode.internal.util.Breadcrumbs;
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMessageAdapter.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMessageAdapter.java
index fc0178c..75e78e4 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMessageAdapter.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMessageAdapter.java
@@ -25,8 +25,8 @@ import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.GMSMessage;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.cache.DirectReplyMessage;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * GMSMessageAdapter wraps a Geode DistributionMessage to be sent via the GMS Messenger
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java
index 71ec3a1..f059e64 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMember.java
@@ -24,10 +24,10 @@ import org.jgroups.util.UUID;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.VisibleForTesting;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * GMSMember is the membership identifier class for Group Membership Services.
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java
index 6336838..a44d6e5 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembershipView.java
@@ -34,10 +34,10 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * The GMSMembershipView class represents a membership view. Note that this class is not
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
index d320d84..ce09a5c 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSUtil.java
@@ -220,8 +220,8 @@ public class GMSUtil {
       DataSerializer.writeObject(id, out);
       return;
     }
-    if (InternalDataSerializer.getVersionForDataStream(out).ordinal() < Version.GEODE_1_10_0
-        .ordinal()) {
+    short ordinal = InternalDataSerializer.getVersionForDataStream(out).ordinal();
+    if (ordinal < Version.GEODE_1_10_0.ordinal()) {
       writeAsInternalDistributedMember(id, out);
     } else {
       DataSerializer.writeObject(id, out);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/interfaces/Manager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/interfaces/Manager.java
index 46510d6..dc244f2 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/interfaces/Manager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/interfaces/Manager.java
@@ -19,7 +19,7 @@ import java.util.Collection;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
 import org.apache.geode.distributed.internal.membership.gms.Services;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Manager presents the GMS services to the outside world and handles startup/shutdown race
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorResponse.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorResponse.java
index 1b05a68..0caf10c 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorResponse.java
@@ -27,9 +27,9 @@ import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
 import org.apache.geode.distributed.internal.membership.gms.messages.AbstractGMSMessage;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class FindCoordinatorResponse extends AbstractGMSMessage
     implements DataSerializableFixedID {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewRequest.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewRequest.java
index 5f69884..528a1a1 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewRequest.java
@@ -18,8 +18,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class GetViewRequest implements DataSerializableFixedID, PeerLocatorRequest {
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewResponse.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewResponse.java
index aeb9984..136618c 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GetViewResponse.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class GetViewResponse implements DataSerializableFixedID {
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index 3399db7..4de93ae 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -17,9 +17,9 @@ package org.apache.geode.distributed.internal.membership.gms.membership;
 import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
 import static org.apache.geode.distributed.ConfigurationProperties.START_LOCATOR;
 import static org.apache.geode.distributed.internal.membership.gms.ServiceConfig.MEMBER_REQUEST_COLLECTION_INTERVAL;
-import static org.apache.geode.internal.DataSerializableFixedID.JOIN_REQUEST;
-import static org.apache.geode.internal.DataSerializableFixedID.LEAVE_REQUEST_MESSAGE;
-import static org.apache.geode.internal.DataSerializableFixedID.REMOVE_MEMBER_REQUEST;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.JOIN_REQUEST;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.LEAVE_REQUEST_MESSAGE;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.REMOVE_MEMBER_REQUEST;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/AbstractGMSMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/AbstractGMSMessage.java
index bb4303b..de51cdb 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/AbstractGMSMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/AbstractGMSMessage.java
@@ -20,7 +20,7 @@ import java.util.List;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.GMSMessage;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public abstract class AbstractGMSMessage implements DataSerializableFixedID, GMSMessage {
   @Immutable
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
index 8b0dcf6..75385d9 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/JGroupsMessenger.java
@@ -16,10 +16,10 @@ package org.apache.geode.distributed.internal.membership.gms.messenger;
 
 import static org.apache.geode.distributed.internal.membership.gms.GMSUtil.replaceStrings;
 import static org.apache.geode.distributed.internal.membership.gms.messages.AbstractGMSMessage.ALL_RECIPIENTS;
-import static org.apache.geode.internal.DataSerializableFixedID.FIND_COORDINATOR_REQ;
-import static org.apache.geode.internal.DataSerializableFixedID.FIND_COORDINATOR_RESP;
-import static org.apache.geode.internal.DataSerializableFixedID.JOIN_REQUEST;
-import static org.apache.geode.internal.DataSerializableFixedID.JOIN_RESPONSE;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.FIND_COORDINATOR_REQ;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.FIND_COORDINATOR_RESP;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.JOIN_REQUEST;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.JOIN_RESPONSE;
 
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
@@ -93,11 +93,11 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.OSProcess;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.alerting.AlertingAction;
 import org.apache.geode.internal.cache.DistributedCacheOperation;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.tcp.MemberShunnedException;
 
 @SuppressWarnings("StatementWithEmptyBody")
@@ -1005,7 +1005,7 @@ public class JGroupsMessenger implements Messenger {
       short ordinal = Version.readOrdinal(dis);
 
       if (ordinal < Version.CURRENT_ORDINAL) {
-        dis = new VersionedDataInputStream(dis, Version.fromOrdinalNoThrow(ordinal, true));
+        dis = new VersionedDataInputStream(dis, ordinal);
       }
 
       // read
@@ -1101,7 +1101,7 @@ public class JGroupsMessenger implements Messenger {
         DataInputStream in = new DataInputStream(new ByteArrayInputStream(data));
 
         if (ordinal < Version.CURRENT_ORDINAL) {
-          in = new VersionedDataInputStream(in, Version.fromOrdinalNoThrow(ordinal, true));
+          in = new VersionedDataInputStream(in, ordinal);
         }
 
         GMSMessage result = deserializeMessage(in, ordinal);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
index b3453b3..29f0b8e 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpClient.java
@@ -34,17 +34,16 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.internal.MakeNotStatic;
-import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.net.SSLConfigurationFactory;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 
 /**
  * <p>
@@ -210,7 +209,7 @@ public class TcpClient {
       out = new DataOutputStream(new BufferedOutputStream(sock.getOutputStream()));
 
       if (serverVersion < Version.CURRENT_ORDINAL) {
-        out = new VersionedDataOutputStream(out, Version.fromOrdinalNoThrow(serverVersion, false));
+        out = new VersionedDataOutputStream(out, serverVersion);
       }
 
       out.writeInt(gossipVersion);
@@ -222,7 +221,7 @@ public class TcpClient {
 
       if (replyExpected) {
         DataInputStream in = new DataInputStream(sock.getInputStream());
-        in = new VersionedDataInputStream(in, Version.fromOrdinal(serverVersion, false));
+        in = new VersionedDataInputStream(in, serverVersion);
         try {
           Object response = DataSerializer.readObject(in);
           logger.debug("received response: {}", response);
@@ -237,13 +236,6 @@ public class TcpClient {
       } else {
         return null;
       }
-    } catch (UnsupportedVersionException ex) {
-      if (logger.isDebugEnabled()) {
-        logger
-            .debug("Remote TcpServer version: " + serverVersion + " is higher than local version: "
-                + Version.CURRENT_ORDINAL + ". This is never expected as remoteVersion");
-      }
-      return null;
     } finally {
       try {
         if (replyExpected) {
@@ -296,7 +288,8 @@ public class TcpClient {
     try {
       OutputStream outputStream = new BufferedOutputStream(sock.getOutputStream());
       DataOutputStream out =
-          new VersionedDataOutputStream(new DataOutputStream(outputStream), Version.GFE_57);
+          new VersionedDataOutputStream(new DataOutputStream(outputStream),
+              Version.GFE_57.ordinal());
 
       out.writeInt(gossipVersion);
 
@@ -306,7 +299,7 @@ public class TcpClient {
 
       InputStream inputStream = sock.getInputStream();
       DataInputStream in = new DataInputStream(inputStream);
-      in = new VersionedDataInputStream(in, Version.GFE_57);
+      in = new VersionedDataInputStream(in, Version.GFE_57.ordinal());
       try {
         Object readObject = DataSerializer.readObject(in);
         if (!(readObject instanceof VersionResponse)) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
index f6604c6..99658d0 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/tcpserver/TcpServer.java
@@ -52,11 +52,8 @@ import org.apache.geode.distributed.internal.InternalConfigurationPersistenceSer
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.PoolStatHelper;
-import org.apache.geode.internal.DSFIDFactory;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.client.protocol.ClientProtocolProcessor;
 import org.apache.geode.internal.cache.client.protocol.ClientProtocolService;
@@ -71,6 +68,8 @@ import org.apache.geode.internal.logging.LoggingThread;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 
 /**
  * TCP server which listens on a port and delegates requests to a request handler. The server uses
@@ -168,11 +167,6 @@ public class TcpServer {
     this.poolHelper = poolHelper;
     this.internalLocator = internalLocator;
     this.clientProtocolServiceLoader = clientProtocolServiceLoader;
-    // register DSFID types first; invoked explicitly so that all message type
-    // initializations do not happen in first deserialization on a possibly
-    // "precious" thread
-    DSFIDFactory.registerTypes();
-
     this.executor = createExecutor(poolHelper);
     this.threadName = threadName;
 
@@ -464,7 +458,7 @@ public class TcpServer {
         log.debug("Locator reading request from " + socket.getInetAddress() + " with version "
             + Version.fromOrdinal(versionOrdinal, false));
       }
-      input = new VersionedDataInputStream(input, Version.fromOrdinal(versionOrdinal, false));
+      input = new VersionedDataInputStream(input, versionOrdinal);
       request = DataSerializer.readObject(input);
       if (log.isDebugEnabled()) {
         log.debug("Locator received request " + request + " from " + socket.getInetAddress());
@@ -490,7 +484,7 @@ public class TcpServer {
         DataOutputStream output = new DataOutputStream(socket.getOutputStream());
         if (versionOrdinal != Version.CURRENT_ORDINAL) {
           output =
-              new VersionedDataOutputStream(output, Version.fromOrdinal(versionOrdinal, false));
+              new VersionedDataOutputStream(output, versionOrdinal);
         }
         DataSerializer.writeObject(response, output);
         output.flush();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/ByteBufferWriter.java b/geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/internal/serialization/ByteBufferWriter.java
rename to geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
diff --git a/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java b/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
index 2cb5ea1..7aeecfe 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
@@ -12,49 +12,961 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.serialization;
+package org.apache.geode.internal;
 
 import java.io.DataInput;
+import java.io.DataOutput;
 import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
 
-import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
-
-import org.apache.geode.InternalGemFireError;
-import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.DataSerializer;
+import org.apache.geode.admin.internal.SystemMemberCacheEventProcessor;
+import org.apache.geode.admin.jmx.internal.StatAlertNotification;
+import org.apache.geode.cache.InterestResultPolicy;
+import org.apache.geode.cache.client.internal.CacheServerLoadMessage;
+import org.apache.geode.cache.client.internal.locator.ClientConnectionRequest;
+import org.apache.geode.cache.client.internal.locator.ClientConnectionResponse;
+import org.apache.geode.cache.client.internal.locator.ClientReplacementRequest;
+import org.apache.geode.cache.client.internal.locator.GetAllServersRequest;
+import org.apache.geode.cache.client.internal.locator.GetAllServersResponse;
+import org.apache.geode.cache.client.internal.locator.LocatorListRequest;
+import org.apache.geode.cache.client.internal.locator.LocatorListResponse;
+import org.apache.geode.cache.client.internal.locator.LocatorStatusRequest;
+import org.apache.geode.cache.client.internal.locator.LocatorStatusResponse;
+import org.apache.geode.cache.client.internal.locator.QueueConnectionRequest;
+import org.apache.geode.cache.client.internal.locator.QueueConnectionResponse;
+import org.apache.geode.cache.query.QueryService;
+import org.apache.geode.cache.query.internal.CqEntry;
+import org.apache.geode.cache.query.internal.CumulativeNonDistinctResults;
+import org.apache.geode.cache.query.internal.LinkedResultSet;
+import org.apache.geode.cache.query.internal.LinkedStructSet;
+import org.apache.geode.cache.query.internal.NWayMergeResults;
+import org.apache.geode.cache.query.internal.NullToken;
+import org.apache.geode.cache.query.internal.PRQueryTraceInfo;
+import org.apache.geode.cache.query.internal.ResultsBag;
+import org.apache.geode.cache.query.internal.ResultsCollectionWrapper;
+import org.apache.geode.cache.query.internal.ResultsSet;
+import org.apache.geode.cache.query.internal.SortedResultSet;
+import org.apache.geode.cache.query.internal.SortedStructSet;
+import org.apache.geode.cache.query.internal.StructBag;
+import org.apache.geode.cache.query.internal.StructImpl;
+import org.apache.geode.cache.query.internal.StructSet;
+import org.apache.geode.cache.query.internal.Undefined;
+import org.apache.geode.cache.query.internal.index.IndexCreationData;
+import org.apache.geode.cache.query.internal.index.IndexManager;
+import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
+import org.apache.geode.cache.query.internal.types.MapTypeImpl;
+import org.apache.geode.cache.query.internal.types.ObjectTypeImpl;
+import org.apache.geode.cache.query.internal.types.StructTypeImpl;
+import org.apache.geode.distributed.internal.DistributionAdvisor;
+import org.apache.geode.distributed.internal.HighPriorityAckedMessage;
+import org.apache.geode.distributed.internal.ReplyMessage;
+import org.apache.geode.distributed.internal.SerialAckedMessage;
+import org.apache.geode.distributed.internal.ShutdownMessage;
+import org.apache.geode.distributed.internal.StartupMessage;
+import org.apache.geode.distributed.internal.StartupResponseMessage;
+import org.apache.geode.distributed.internal.StartupResponseWithVersionMessage;
+import org.apache.geode.distributed.internal.WaitForViewInstallation;
+import org.apache.geode.distributed.internal.locks.DLockQueryProcessor;
+import org.apache.geode.distributed.internal.locks.DLockRecoverGrantorProcessor.DLockRecoverGrantorMessage;
+import org.apache.geode.distributed.internal.locks.DLockRecoverGrantorProcessor.DLockRecoverGrantorReplyMessage;
+import org.apache.geode.distributed.internal.locks.DLockReleaseProcessor;
+import org.apache.geode.distributed.internal.locks.DLockRemoteToken;
+import org.apache.geode.distributed.internal.locks.DLockRequestProcessor;
+import org.apache.geode.distributed.internal.locks.DLockService;
+import org.apache.geode.distributed.internal.locks.DeposeGrantorProcessor;
+import org.apache.geode.distributed.internal.locks.ElderInitProcessor;
+import org.apache.geode.distributed.internal.locks.GrantorRequestProcessor;
+import org.apache.geode.distributed.internal.locks.NonGrantorDestroyedProcessor;
+import org.apache.geode.distributed.internal.locks.NonGrantorDestroyedProcessor.NonGrantorDestroyedReplyMessage;
+import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.distributed.internal.membership.gms.GMSMember;
+import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
+import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordinatorRequest;
+import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordinatorResponse;
+import org.apache.geode.distributed.internal.membership.gms.locator.GetViewRequest;
+import org.apache.geode.distributed.internal.membership.gms.locator.GetViewResponse;
+import org.apache.geode.distributed.internal.membership.gms.messages.FinalCheckPassedMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatRequestMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.InstallViewMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.JoinRequestMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.JoinResponseMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.LeaveRequestMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.NetworkPartitionMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.SuspectMembersMessage;
+import org.apache.geode.distributed.internal.membership.gms.messages.ViewAckMessage;
+import org.apache.geode.distributed.internal.streaming.StreamingOperation.StreamingReplyMessage;
+import org.apache.geode.internal.admin.ClientMembershipMessage;
+import org.apache.geode.internal.admin.remote.AddHealthListenerRequest;
+import org.apache.geode.internal.admin.remote.AddHealthListenerResponse;
+import org.apache.geode.internal.admin.remote.AddStatListenerRequest;
+import org.apache.geode.internal.admin.remote.AddStatListenerResponse;
+import org.apache.geode.internal.admin.remote.AdminConsoleDisconnectMessage;
+import org.apache.geode.internal.admin.remote.AdminConsoleMessage;
+import org.apache.geode.internal.admin.remote.AdminFailureResponse;
+import org.apache.geode.internal.admin.remote.AlertLevelChangeMessage;
+import org.apache.geode.internal.admin.remote.AlertListenerMessage;
+import org.apache.geode.internal.admin.remote.AlertsNotificationMessage;
+import org.apache.geode.internal.admin.remote.AppCacheSnapshotMessage;
+import org.apache.geode.internal.admin.remote.BridgeServerRequest;
+import org.apache.geode.internal.admin.remote.BridgeServerResponse;
+import org.apache.geode.internal.admin.remote.CacheConfigRequest;
+import org.apache.geode.internal.admin.remote.CacheConfigResponse;
+import org.apache.geode.internal.admin.remote.CacheInfoRequest;
+import org.apache.geode.internal.admin.remote.CacheInfoResponse;
+import org.apache.geode.internal.admin.remote.CancelStatListenerRequest;
+import org.apache.geode.internal.admin.remote.CancelStatListenerResponse;
+import org.apache.geode.internal.admin.remote.CancellationMessage;
+import org.apache.geode.internal.admin.remote.ChangeRefreshIntervalMessage;
+import org.apache.geode.internal.admin.remote.ClientHealthStats;
+import org.apache.geode.internal.admin.remote.CompactRequest;
+import org.apache.geode.internal.admin.remote.CompactResponse;
+import org.apache.geode.internal.admin.remote.DestroyEntryMessage;
+import org.apache.geode.internal.admin.remote.DestroyRegionMessage;
+import org.apache.geode.internal.admin.remote.DurableClientInfoRequest;
+import org.apache.geode.internal.admin.remote.DurableClientInfoResponse;
+import org.apache.geode.internal.admin.remote.FetchDistLockInfoRequest;
+import org.apache.geode.internal.admin.remote.FetchDistLockInfoResponse;
+import org.apache.geode.internal.admin.remote.FetchHealthDiagnosisRequest;
+import org.apache.geode.internal.admin.remote.FetchHealthDiagnosisResponse;
+import org.apache.geode.internal.admin.remote.FetchHostRequest;
+import org.apache.geode.internal.admin.remote.FetchHostResponse;
+import org.apache.geode.internal.admin.remote.FetchResourceAttributesRequest;
+import org.apache.geode.internal.admin.remote.FetchResourceAttributesResponse;
+import org.apache.geode.internal.admin.remote.FetchStatsRequest;
+import org.apache.geode.internal.admin.remote.FetchStatsResponse;
+import org.apache.geode.internal.admin.remote.FetchSysCfgRequest;
+import org.apache.geode.internal.admin.remote.FetchSysCfgResponse;
+import org.apache.geode.internal.admin.remote.FlushAppCacheSnapshotMessage;
+import org.apache.geode.internal.admin.remote.HealthListenerMessage;
+import org.apache.geode.internal.admin.remote.LicenseInfoRequest;
+import org.apache.geode.internal.admin.remote.LicenseInfoResponse;
+import org.apache.geode.internal.admin.remote.MissingPersistentIDsRequest;
+import org.apache.geode.internal.admin.remote.MissingPersistentIDsResponse;
+import org.apache.geode.internal.admin.remote.ObjectDetailsRequest;
+import org.apache.geode.internal.admin.remote.ObjectDetailsResponse;
+import org.apache.geode.internal.admin.remote.ObjectNamesRequest;
+import org.apache.geode.internal.admin.remote.ObjectNamesResponse;
+import org.apache.geode.internal.admin.remote.PrepareRevokePersistentIDRequest;
+import org.apache.geode.internal.admin.remote.RefreshMemberSnapshotRequest;
+import org.apache.geode.internal.admin.remote.RefreshMemberSnapshotResponse;
+import org.apache.geode.internal.admin.remote.RegionAttributesRequest;
+import org.apache.geode.internal.admin.remote.RegionAttributesResponse;
+import org.apache.geode.internal.admin.remote.RegionRequest;
+import org.apache.geode.internal.admin.remote.RegionResponse;
+import org.apache.geode.internal.admin.remote.RegionSizeRequest;
+import org.apache.geode.internal.admin.remote.RegionSizeResponse;
+import org.apache.geode.internal.admin.remote.RegionStatisticsRequest;
+import org.apache.geode.internal.admin.remote.RegionStatisticsResponse;
+import org.apache.geode.internal.admin.remote.RegionSubRegionSizeRequest;
+import org.apache.geode.internal.admin.remote.RegionSubRegionsSizeResponse;
+import org.apache.geode.internal.admin.remote.RemoveHealthListenerRequest;
+import org.apache.geode.internal.admin.remote.RemoveHealthListenerResponse;
+import org.apache.geode.internal.admin.remote.ResetHealthStatusRequest;
+import org.apache.geode.internal.admin.remote.ResetHealthStatusResponse;
+import org.apache.geode.internal.admin.remote.RevokePersistentIDRequest;
+import org.apache.geode.internal.admin.remote.RevokePersistentIDResponse;
+import org.apache.geode.internal.admin.remote.RootRegionRequest;
+import org.apache.geode.internal.admin.remote.RootRegionResponse;
+import org.apache.geode.internal.admin.remote.ShutdownAllGatewayHubsRequest;
+import org.apache.geode.internal.admin.remote.ShutdownAllRequest;
+import org.apache.geode.internal.admin.remote.ShutdownAllResponse;
+import org.apache.geode.internal.admin.remote.SnapshotResultMessage;
+import org.apache.geode.internal.admin.remote.StatAlertsManagerAssignMessage;
+import org.apache.geode.internal.admin.remote.StatListenerMessage;
+import org.apache.geode.internal.admin.remote.StoreSysCfgRequest;
+import org.apache.geode.internal.admin.remote.StoreSysCfgResponse;
+import org.apache.geode.internal.admin.remote.SubRegionRequest;
+import org.apache.geode.internal.admin.remote.SubRegionResponse;
+import org.apache.geode.internal.admin.remote.TailLogRequest;
+import org.apache.geode.internal.admin.remote.TailLogResponse;
+import org.apache.geode.internal.admin.remote.UpdateAlertDefinitionMessage;
+import org.apache.geode.internal.admin.remote.VersionInfoRequest;
+import org.apache.geode.internal.admin.remote.VersionInfoResponse;
+import org.apache.geode.internal.admin.statalerts.GaugeThresholdDecoratorImpl;
+import org.apache.geode.internal.admin.statalerts.NumberThresholdDecoratorImpl;
+import org.apache.geode.internal.cache.AddCacheServerProfileMessage;
+import org.apache.geode.internal.cache.BucketAdvisor;
+import org.apache.geode.internal.cache.CacheDistributionAdvisor;
+import org.apache.geode.internal.cache.CacheServerAdvisor.CacheServerProfile;
+import org.apache.geode.internal.cache.ClientRegionEventImpl;
+import org.apache.geode.internal.cache.CloseCacheMessage;
+import org.apache.geode.internal.cache.ControllerAdvisor.ControllerProfile;
+import org.apache.geode.internal.cache.CreateRegionProcessor;
+import org.apache.geode.internal.cache.DestroyOperation;
+import org.apache.geode.internal.cache.DestroyPartitionedRegionMessage;
+import org.apache.geode.internal.cache.DestroyRegionOperation;
+import org.apache.geode.internal.cache.DistTXCommitMessage;
+import org.apache.geode.internal.cache.DistTXPrecommitMessage;
+import org.apache.geode.internal.cache.DistTXPrecommitMessage.DistTxPrecommitResponse;
+import org.apache.geode.internal.cache.DistTXRollbackMessage;
+import org.apache.geode.internal.cache.DistributedClearOperation.ClearRegionMessage;
+import org.apache.geode.internal.cache.DistributedClearOperation.ClearRegionWithContextMessage;
+import org.apache.geode.internal.cache.DistributedPutAllOperation.EntryVersionsList;
+import org.apache.geode.internal.cache.DistributedPutAllOperation.PutAllMessage;
+import org.apache.geode.internal.cache.DistributedRegionFunctionStreamingMessage;
+import org.apache.geode.internal.cache.DistributedRemoveAllOperation.RemoveAllMessage;
+import org.apache.geode.internal.cache.DistributedTombstoneOperation.TombstoneMessage;
+import org.apache.geode.internal.cache.EntryEventImpl;
+import org.apache.geode.internal.cache.EventID;
+import org.apache.geode.internal.cache.ExpireDisconnectedClientTransactionsMessage;
+import org.apache.geode.internal.cache.FilterProfile;
+import org.apache.geode.internal.cache.FindDurableQueueProcessor.FindDurableQueueMessage;
+import org.apache.geode.internal.cache.FindDurableQueueProcessor.FindDurableQueueReply;
+import org.apache.geode.internal.cache.FindRemoteTXMessage;
+import org.apache.geode.internal.cache.FindRemoteTXMessage.FindRemoteTXMessageReply;
+import org.apache.geode.internal.cache.FindVersionTagOperation.FindVersionTagMessage;
+import org.apache.geode.internal.cache.FindVersionTagOperation.VersionTagReply;
+import org.apache.geode.internal.cache.FunctionStreamingOrderedReplyMessage;
+import org.apache.geode.internal.cache.FunctionStreamingReplyMessage;
+import org.apache.geode.internal.cache.HARegion;
+import org.apache.geode.internal.cache.InitialImageFlowControl.FlowControlPermitMessage;
+import org.apache.geode.internal.cache.InitialImageOperation;
+import org.apache.geode.internal.cache.InitialImageOperation.InitialImageVersionedEntryList;
+import org.apache.geode.internal.cache.InvalidateOperation;
+import org.apache.geode.internal.cache.InvalidatePartitionedRegionMessage;
+import org.apache.geode.internal.cache.InvalidateRegionOperation.InvalidateRegionMessage;
+import org.apache.geode.internal.cache.JtaAfterCompletionMessage;
+import org.apache.geode.internal.cache.JtaBeforeCompletionMessage;
+import org.apache.geode.internal.cache.LatestLastAccessTimeMessage;
+import org.apache.geode.internal.cache.MemberFunctionStreamingMessage;
+import org.apache.geode.internal.cache.Node;
+import org.apache.geode.internal.cache.PRQueryProcessor;
+import org.apache.geode.internal.cache.PartitionRegionConfig;
+import org.apache.geode.internal.cache.PreferBytesCachedDeserializable;
+import org.apache.geode.internal.cache.RegionEventImpl;
+import org.apache.geode.internal.cache.ReleaseClearLockMessage;
+import org.apache.geode.internal.cache.RemoveCacheServerProfileMessage;
+import org.apache.geode.internal.cache.RoleEventImpl;
+import org.apache.geode.internal.cache.SearchLoadAndWriteProcessor;
+import org.apache.geode.internal.cache.ServerPingMessage;
+import org.apache.geode.internal.cache.StateFlushOperation.StateMarkerMessage;
+import org.apache.geode.internal.cache.StateFlushOperation.StateStabilizationMessage;
+import org.apache.geode.internal.cache.StateFlushOperation.StateStabilizedMessage;
+import org.apache.geode.internal.cache.StoreAllCachedDeserializable;
+import org.apache.geode.internal.cache.TXCommitMessage;
+import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessForLockIdMessage;
+import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessForTXIdMessage;
+import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessQueryMessage;
+import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessQueryReplyMessage;
+import org.apache.geode.internal.cache.TXEntryState;
+import org.apache.geode.internal.cache.TXId;
+import org.apache.geode.internal.cache.TXRemoteCommitMessage;
+import org.apache.geode.internal.cache.TXRemoteCommitMessage.TXRemoteCommitReplyMessage;
+import org.apache.geode.internal.cache.TXRemoteRollbackMessage;
+import org.apache.geode.internal.cache.Token;
+import org.apache.geode.internal.cache.UpdateAttributesProcessor;
+import org.apache.geode.internal.cache.UpdateEntryVersionOperation.UpdateEntryVersionMessage;
+import org.apache.geode.internal.cache.UpdateOperation;
+import org.apache.geode.internal.cache.VMCachedDeserializable;
+import org.apache.geode.internal.cache.backup.AbortBackupRequest;
+import org.apache.geode.internal.cache.backup.BackupResponse;
+import org.apache.geode.internal.cache.backup.FinishBackupRequest;
+import org.apache.geode.internal.cache.backup.FlushToDiskRequest;
+import org.apache.geode.internal.cache.backup.FlushToDiskResponse;
+import org.apache.geode.internal.cache.backup.PrepareBackupRequest;
+import org.apache.geode.internal.cache.compression.SnappyCompressedCachedDeserializable;
+import org.apache.geode.internal.cache.control.ResourceAdvisor.ResourceManagerProfile;
+import org.apache.geode.internal.cache.control.ResourceAdvisor.ResourceProfileMessage;
+import org.apache.geode.internal.cache.ha.HARegionQueue.DispatchedAndCurrentEvents;
+import org.apache.geode.internal.cache.ha.QueueRemovalMessage;
+import org.apache.geode.internal.cache.locks.TXLockBatch;
+import org.apache.geode.internal.cache.locks.TXLockIdImpl;
+import org.apache.geode.internal.cache.locks.TXLockUpdateParticipantsMessage;
+import org.apache.geode.internal.cache.locks.TXLockUpdateParticipantsMessage.TXLockUpdateParticipantsReplyMessage;
+import org.apache.geode.internal.cache.locks.TXOriginatorRecoveryProcessor.TXOriginatorRecoveryMessage;
+import org.apache.geode.internal.cache.locks.TXOriginatorRecoveryProcessor.TXOriginatorRecoveryReplyMessage;
+import org.apache.geode.internal.cache.partitioned.AllBucketProfilesUpdateMessage;
+import org.apache.geode.internal.cache.partitioned.BecomePrimaryBucketMessage;
+import org.apache.geode.internal.cache.partitioned.BecomePrimaryBucketMessage.BecomePrimaryBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.BucketBackupMessage;
+import org.apache.geode.internal.cache.partitioned.BucketCountLoadProbe;
+import org.apache.geode.internal.cache.partitioned.BucketProfileUpdateMessage;
+import org.apache.geode.internal.cache.partitioned.BucketSizeMessage;
+import org.apache.geode.internal.cache.partitioned.BucketSizeMessage.BucketSizeReplyMessage;
+import org.apache.geode.internal.cache.partitioned.ContainsKeyValueMessage;
+import org.apache.geode.internal.cache.partitioned.ContainsKeyValueMessage.ContainsKeyValueReplyMessage;
+import org.apache.geode.internal.cache.partitioned.CreateBucketMessage;
+import org.apache.geode.internal.cache.partitioned.CreateBucketMessage.CreateBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.DeposePrimaryBucketMessage;
+import org.apache.geode.internal.cache.partitioned.DeposePrimaryBucketMessage.DeposePrimaryBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.DestroyMessage;
+import org.apache.geode.internal.cache.partitioned.DestroyRegionOnDataStoreMessage;
+import org.apache.geode.internal.cache.partitioned.DumpAllPRConfigMessage;
+import org.apache.geode.internal.cache.partitioned.DumpB2NRegion;
+import org.apache.geode.internal.cache.partitioned.DumpB2NRegion.DumpB2NReplyMessage;
+import org.apache.geode.internal.cache.partitioned.DumpBucketsMessage;
+import org.apache.geode.internal.cache.partitioned.EndBucketCreationMessage;
+import org.apache.geode.internal.cache.partitioned.FetchBulkEntriesMessage;
+import org.apache.geode.internal.cache.partitioned.FetchBulkEntriesMessage.FetchBulkEntriesReplyMessage;
+import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage;
+import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesReplyMessage;
+import org.apache.geode.internal.cache.partitioned.FetchEntryMessage;
+import org.apache.geode.internal.cache.partitioned.FetchEntryMessage.FetchEntryReplyMessage;
+import org.apache.geode.internal.cache.partitioned.FetchKeysMessage;
+import org.apache.geode.internal.cache.partitioned.FetchKeysMessage.FetchKeysReplyMessage;
+import org.apache.geode.internal.cache.partitioned.FetchPartitionDetailsMessage;
+import org.apache.geode.internal.cache.partitioned.FetchPartitionDetailsMessage.FetchPartitionDetailsReplyMessage;
+import org.apache.geode.internal.cache.partitioned.FlushMessage;
+import org.apache.geode.internal.cache.partitioned.GetMessage;
+import org.apache.geode.internal.cache.partitioned.GetMessage.GetReplyMessage;
+import org.apache.geode.internal.cache.partitioned.IdentityRequestMessage;
+import org.apache.geode.internal.cache.partitioned.IdentityRequestMessage.IdentityReplyMessage;
+import org.apache.geode.internal.cache.partitioned.IdentityUpdateMessage;
+import org.apache.geode.internal.cache.partitioned.IndexCreationMsg;
+import org.apache.geode.internal.cache.partitioned.IndexCreationMsg.IndexCreationReplyMsg;
+import org.apache.geode.internal.cache.partitioned.InterestEventMessage;
+import org.apache.geode.internal.cache.partitioned.InterestEventMessage.InterestEventReplyMessage;
+import org.apache.geode.internal.cache.partitioned.InvalidateMessage;
+import org.apache.geode.internal.cache.partitioned.ManageBackupBucketMessage;
+import org.apache.geode.internal.cache.partitioned.ManageBackupBucketMessage.ManageBackupBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.ManageBucketMessage;
+import org.apache.geode.internal.cache.partitioned.ManageBucketMessage.ManageBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.MoveBucketMessage;
+import org.apache.geode.internal.cache.partitioned.MoveBucketMessage.MoveBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.PRSanityCheckMessage;
+import org.apache.geode.internal.cache.partitioned.PRTombstoneMessage;
+import org.apache.geode.internal.cache.partitioned.PRUpdateEntryVersionMessage;
+import org.apache.geode.internal.cache.partitioned.PartitionedRegionFunctionStreamingMessage;
+import org.apache.geode.internal.cache.partitioned.PrimaryRequestMessage;
+import org.apache.geode.internal.cache.partitioned.PrimaryRequestMessage.PrimaryRequestReplyMessage;
+import org.apache.geode.internal.cache.partitioned.PutAllPRMessage;
+import org.apache.geode.internal.cache.partitioned.PutAllPRMessage.PutAllReplyMessage;
+import org.apache.geode.internal.cache.partitioned.PutMessage;
+import org.apache.geode.internal.cache.partitioned.PutMessage.PutReplyMessage;
+import org.apache.geode.internal.cache.partitioned.QueryMessage;
+import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
+import org.apache.geode.internal.cache.partitioned.RemoveAllPRMessage;
+import org.apache.geode.internal.cache.partitioned.RemoveBucketMessage;
+import org.apache.geode.internal.cache.partitioned.RemoveBucketMessage.RemoveBucketReplyMessage;
+import org.apache.geode.internal.cache.partitioned.RemoveIndexesMessage;
+import org.apache.geode.internal.cache.partitioned.RemoveIndexesMessage.RemoveIndexesReplyMessage;
+import org.apache.geode.internal.cache.partitioned.SizeMessage;
+import org.apache.geode.internal.cache.partitioned.SizeMessage.SizeReplyMessage;
+import org.apache.geode.internal.cache.partitioned.SizedBasedLoadProbe;
+import org.apache.geode.internal.cache.persistence.DiskStoreID;
+import org.apache.geode.internal.cache.persistence.MembershipFlushRequest;
+import org.apache.geode.internal.cache.persistence.MembershipViewRequest;
+import org.apache.geode.internal.cache.persistence.MembershipViewRequest.MembershipViewReplyMessage;
+import org.apache.geode.internal.cache.persistence.PersistentStateQueryMessage;
+import org.apache.geode.internal.cache.persistence.PersistentStateQueryMessage.PersistentStateQueryReplyMessage;
+import org.apache.geode.internal.cache.persistence.PrepareNewPersistentMemberMessage;
+import org.apache.geode.internal.cache.persistence.RemovePersistentMemberMessage;
+import org.apache.geode.internal.cache.snapshot.FlowController.FlowControlAbortMessage;
+import org.apache.geode.internal.cache.snapshot.FlowController.FlowControlAckMessage;
+import org.apache.geode.internal.cache.snapshot.SnapshotPacket;
+import org.apache.geode.internal.cache.snapshot.SnapshotPacket.SnapshotRecord;
+import org.apache.geode.internal.cache.tier.sockets.ClientDataSerializerMessage;
+import org.apache.geode.internal.cache.tier.sockets.ClientDenylistProcessor.ClientDenylistMessage;
+import org.apache.geode.internal.cache.tier.sockets.ClientInstantiatorMessage;
+import org.apache.geode.internal.cache.tier.sockets.ClientInterestMessageImpl;
+import org.apache.geode.internal.cache.tier.sockets.ClientMarkerMessageImpl;
+import org.apache.geode.internal.cache.tier.sockets.ClientPingMessageImpl;
+import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
+import org.apache.geode.internal.cache.tier.sockets.ClientTombstoneMessage;
+import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl;
+import org.apache.geode.internal.cache.tier.sockets.HAEventWrapper;
+import org.apache.geode.internal.cache.tier.sockets.InterestResultPolicyImpl;
+import org.apache.geode.internal.cache.tier.sockets.ObjectPartList;
+import org.apache.geode.internal.cache.tier.sockets.ObjectPartList651;
+import org.apache.geode.internal.cache.tier.sockets.RemoveClientFromDenylistMessage;
+import org.apache.geode.internal.cache.tier.sockets.SerializedObjectPartList;
+import org.apache.geode.internal.cache.tier.sockets.ServerInterestRegistrationMessage;
+import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
+import org.apache.geode.internal.cache.tx.DistTxEntryEvent;
+import org.apache.geode.internal.cache.tx.RemoteClearMessage;
+import org.apache.geode.internal.cache.tx.RemoteClearMessage.RemoteClearReplyMessage;
+import org.apache.geode.internal.cache.tx.RemoteContainsKeyValueMessage;
+import org.apache.geode.internal.cache.tx.RemoteDestroyMessage;
+import org.apache.geode.internal.cache.tx.RemoteFetchEntryMessage;
+import org.apache.geode.internal.cache.tx.RemoteFetchKeysMessage;
+import org.apache.geode.internal.cache.tx.RemoteFetchVersionMessage;
+import org.apache.geode.internal.cache.tx.RemoteGetMessage;
+import org.apache.geode.internal.cache.tx.RemoteInvalidateMessage;
+import org.apache.geode.internal.cache.tx.RemotePutAllMessage;
+import org.apache.geode.internal.cache.tx.RemotePutMessage;
+import org.apache.geode.internal.cache.tx.RemoteRemoveAllMessage;
+import org.apache.geode.internal.cache.tx.RemoteSizeMessage;
+import org.apache.geode.internal.cache.versions.DiskRegionVersionVector;
+import org.apache.geode.internal.cache.versions.DiskVersionTag;
+import org.apache.geode.internal.cache.versions.VMRegionVersionVector;
+import org.apache.geode.internal.cache.versions.VMVersionTag;
+import org.apache.geode.internal.cache.wan.GatewaySenderAdvisor;
+import org.apache.geode.internal.cache.wan.GatewaySenderEventCallbackArgument;
+import org.apache.geode.internal.cache.wan.GatewaySenderEventImpl;
+import org.apache.geode.internal.cache.wan.GatewaySenderQueueEntrySynchronizationOperation;
+import org.apache.geode.internal.cache.wan.parallel.ParallelQueueRemovalMessage;
+import org.apache.geode.internal.cache.wan.serial.BatchDestroyOperation;
+import org.apache.geode.internal.serialization.DSFIDSerializer;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
+import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfileMessage;
+import org.apache.geode.management.internal.JmxManagerLocatorRequest;
+import org.apache.geode.management.internal.JmxManagerLocatorResponse;
+import org.apache.geode.management.internal.ManagerStartupMessage;
+import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
+import org.apache.geode.management.internal.configuration.messages.ConfigurationResponse;
+import org.apache.geode.pdx.internal.CheckTypeRegistryState;
+import org.apache.geode.pdx.internal.EnumId;
+import org.apache.geode.pdx.internal.EnumInfo;
 
 /**
- * Factory for instances of DataSerializableFixedID instances.  Constructors must be registered
- * with this factory in order for it to deserialize anything.
+ * Factory for instances of DataSerializableFixedID instances. Note that this class implements
+ * DataSerializableFixedID to inherit constants but is not actually an instance of this interface.
+ *
+ * @since GemFire 5.7
  */
-public class DSFIDFactory {
-
-  @Immutable
-  private final Constructor<?>[] dsfidMap = new Constructor<?>[256];
-
-  @Immutable("This maybe should be wrapped in an unmodifiableMap?")
-  private final Int2ObjectOpenHashMap dsfidMap2 = new Int2ObjectOpenHashMap(800);
-
-
-  /** Register the constructor for a fixed ID class. */
-  public void registerDSFID(int dsfid, Class dsfidClass) {
-    try {
-      Constructor<?> cons = dsfidClass.getConstructor((Class[]) null);
-      cons.setAccessible(true);
-      if (!cons.isAccessible()) {
-        throw new InternalGemFireError(
-            "default constructor not accessible " + "for DSFID=" + dsfid + ": " + dsfidClass);
-      }
-      if (dsfid >= Byte.MIN_VALUE && dsfid <= Byte.MAX_VALUE) {
-        dsfidMap[dsfid + Byte.MAX_VALUE + 1] = cons;
-      } else {
-        dsfidMap2.put(dsfid, cons);
-      }
-    } catch (NoSuchMethodException nsme) {
-      throw new InternalGemFireError(nsme);
-    }
+public class DSFIDFactory implements DataSerializableFixedID {
+
+  private final DSFIDSerializer serializer;
+
+  DSFIDFactory(DSFIDSerializer serializer) {
+    this.serializer = serializer;
+  }
+
+  @Override
+  public int getDSFID() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void toData(DataOutput out) throws IOException {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public Version[] getSerializationVersions() {
+    throw new UnsupportedOperationException();
+  }
+
+  void registerDSFIDTypes() {
+    serializer.registerDSFID(FINAL_CHECK_PASSED_MESSAGE, FinalCheckPassedMessage.class);
+    serializer.registerDSFID(NETWORK_PARTITION_MESSAGE, NetworkPartitionMessage.class);
+    serializer.registerDSFID(REMOVE_MEMBER_REQUEST, RemoveMemberMessage.class);
+    serializer.registerDSFID(HEARTBEAT_REQUEST, HeartbeatRequestMessage.class);
+    serializer.registerDSFID(HEARTBEAT_RESPONSE, HeartbeatMessage.class);
+    serializer.registerDSFID(SUSPECT_MEMBERS_MESSAGE, SuspectMembersMessage.class);
+    serializer.registerDSFID(LEAVE_REQUEST_MESSAGE, LeaveRequestMessage.class);
+    serializer.registerDSFID(VIEW_ACK_MESSAGE, ViewAckMessage.class);
+    serializer.registerDSFID(INSTALL_VIEW_MESSAGE, InstallViewMessage.class);
+    serializer.registerDSFID(GMSMEMBER, GMSMember.class);
+    serializer.registerDSFID(NETVIEW, GMSMembershipView.class);
+    serializer.registerDSFID(GET_VIEW_REQ, GetViewRequest.class);
+    serializer.registerDSFID(GET_VIEW_RESP, GetViewResponse.class);
+    serializer.registerDSFID(FIND_COORDINATOR_REQ, FindCoordinatorRequest.class);
+    serializer.registerDSFID(FIND_COORDINATOR_RESP, FindCoordinatorResponse.class);
+    serializer.registerDSFID(JOIN_RESPONSE, JoinResponseMessage.class);
+    serializer.registerDSFID(JOIN_REQUEST, JoinRequestMessage.class);
+    serializer.registerDSFID(CLIENT_TOMBSTONE_MESSAGE, ClientTombstoneMessage.class);
+    serializer.registerDSFID(R_CLEAR_MSG, RemoteClearMessage.class);
+    serializer.registerDSFID(R_CLEAR_MSG_REPLY, RemoteClearReplyMessage.class);
+    serializer.registerDSFID(WAIT_FOR_VIEW_INSTALLATION, WaitForViewInstallation.class);
+    serializer.registerDSFID(DISPATCHED_AND_CURRENT_EVENTS, DispatchedAndCurrentEvents.class);
+    serializer.registerDSFID(DISTRIBUTED_MEMBER, InternalDistributedMember.class);
+    serializer.registerDSFID(UPDATE_MESSAGE, UpdateOperation.UpdateMessage.class);
+    serializer.registerDSFID(REPLY_MESSAGE, ReplyMessage.class);
+    serializer.registerDSFID(PR_DESTROY, DestroyMessage.class);
+    serializer.registerDSFID(CREATE_REGION_MESSAGE,
+        CreateRegionProcessor.CreateRegionMessage.class);
+    serializer.registerDSFID(CREATE_REGION_REPLY_MESSAGE,
+        CreateRegionProcessor.CreateRegionReplyMessage.class);
+    serializer.registerDSFID(REGION_STATE_MESSAGE, InitialImageOperation.RegionStateMessage.class);
+    serializer.registerDSFID(QUERY_MESSAGE, SearchLoadAndWriteProcessor.QueryMessage.class);
+    serializer.registerDSFID(RESPONSE_MESSAGE, SearchLoadAndWriteProcessor.ResponseMessage.class);
+    serializer.registerDSFID(NET_SEARCH_REQUEST_MESSAGE,
+        SearchLoadAndWriteProcessor.NetSearchRequestMessage.class);
+    serializer.registerDSFID(NET_SEARCH_REPLY_MESSAGE,
+        SearchLoadAndWriteProcessor.NetSearchReplyMessage.class);
+    serializer.registerDSFID(NET_LOAD_REQUEST_MESSAGE,
+        SearchLoadAndWriteProcessor.NetLoadRequestMessage.class);
+    serializer.registerDSFID(NET_LOAD_REPLY_MESSAGE,
+        SearchLoadAndWriteProcessor.NetLoadReplyMessage.class);
+    serializer.registerDSFID(NET_WRITE_REQUEST_MESSAGE,
+        SearchLoadAndWriteProcessor.NetWriteRequestMessage.class);
+    serializer.registerDSFID(NET_WRITE_REPLY_MESSAGE,
+        SearchLoadAndWriteProcessor.NetWriteReplyMessage.class);
+    serializer.registerDSFID(DLOCK_REQUEST_MESSAGE,
+        DLockRequestProcessor.DLockRequestMessage.class);
+    serializer.registerDSFID(DLOCK_RESPONSE_MESSAGE,
+        DLockRequestProcessor.DLockResponseMessage.class);
+    serializer.registerDSFID(DLOCK_RELEASE_MESSAGE,
+        DLockReleaseProcessor.DLockReleaseMessage.class);
+    serializer.registerDSFID(ADMIN_CACHE_EVENT_MESSAGE,
+        SystemMemberCacheEventProcessor.SystemMemberCacheMessage.class);
+    serializer.registerDSFID(CQ_ENTRY_EVENT, CqEntry.class);
+    serializer.registerDSFID(REQUEST_IMAGE_MESSAGE,
+        InitialImageOperation.RequestImageMessage.class);
+    serializer.registerDSFID(IMAGE_REPLY_MESSAGE, InitialImageOperation.ImageReplyMessage.class);
+    serializer.registerDSFID(IMAGE_ENTRY, InitialImageOperation.Entry.class);
+    serializer.registerDSFID(CLOSE_CACHE_MESSAGE, CloseCacheMessage.class);
+    serializer.registerDSFID(NON_GRANTOR_DESTROYED_MESSAGE,
+        NonGrantorDestroyedProcessor.NonGrantorDestroyedMessage.class);
+    serializer.registerDSFID(DLOCK_RELEASE_REPLY,
+        DLockReleaseProcessor.DLockReleaseReplyMessage.class);
+    serializer.registerDSFID(GRANTOR_REQUEST_MESSAGE,
+        GrantorRequestProcessor.GrantorRequestMessage.class);
+    serializer.registerDSFID(GRANTOR_INFO_REPLY_MESSAGE,
+        GrantorRequestProcessor.GrantorInfoReplyMessage.class);
+    serializer.registerDSFID(ELDER_INIT_MESSAGE, ElderInitProcessor.ElderInitMessage.class);
+    serializer.registerDSFID(ELDER_INIT_REPLY_MESSAGE,
+        ElderInitProcessor.ElderInitReplyMessage.class);
+    serializer.registerDSFID(DEPOSE_GRANTOR_MESSAGE,
+        DeposeGrantorProcessor.DeposeGrantorMessage.class);
+    serializer.registerDSFID(STARTUP_MESSAGE, StartupMessage.class);
+    serializer.registerDSFID(STARTUP_RESPONSE_MESSAGE, StartupResponseMessage.class);
+    serializer.registerDSFID(STARTUP_RESPONSE_WITHVERSION_MESSAGE,
+        StartupResponseWithVersionMessage.class);
+    serializer.registerDSFID(SHUTDOWN_MESSAGE, ShutdownMessage.class);
+    serializer.registerDSFID(DESTROY_REGION_MESSAGE,
+        DestroyRegionOperation.DestroyRegionMessage.class);
+    serializer.registerDSFID(PR_PUTALL_MESSAGE, PutAllPRMessage.class);
+    serializer.registerDSFID(PR_REMOVE_ALL_MESSAGE, RemoveAllPRMessage.class);
+    serializer.registerDSFID(PR_REMOVE_ALL_REPLY_MESSAGE,
+        RemoveAllPRMessage.RemoveAllReplyMessage.class);
+    serializer.registerDSFID(REMOTE_REMOVE_ALL_MESSAGE, RemoteRemoveAllMessage.class);
+    serializer.registerDSFID(REMOTE_REMOVE_ALL_REPLY_MESSAGE,
+        RemoteRemoveAllMessage.RemoveAllReplyMessage.class);
+    serializer.registerDSFID(DISTTX_ROLLBACK_MESSAGE, DistTXRollbackMessage.class);
+    serializer.registerDSFID(DISTTX_COMMIT_MESSAGE, DistTXCommitMessage.class);
+    serializer.registerDSFID(DISTTX_PRE_COMMIT_MESSAGE, DistTXPrecommitMessage.class);
+    serializer.registerDSFID(DISTTX_ROLLBACK_REPLY_MESSAGE,
+        DistTXRollbackMessage.DistTXRollbackReplyMessage.class);
+    serializer.registerDSFID(DISTTX_COMMIT_REPLY_MESSAGE,
+        DistTXCommitMessage.DistTXCommitReplyMessage.class);
+    serializer.registerDSFID(DISTTX_PRE_COMMIT_REPLY_MESSAGE,
+        DistTXPrecommitMessage.DistTXPrecommitReplyMessage.class);
+    serializer.registerDSFID(PR_PUT_MESSAGE, PutMessage.class);
+    serializer.registerDSFID(INVALIDATE_MESSAGE, InvalidateOperation.InvalidateMessage.class);
+    serializer.registerDSFID(DESTROY_MESSAGE, DestroyOperation.DestroyMessage.class);
+    serializer.registerDSFID(DA_PROFILE, DistributionAdvisor.Profile.class);
+    serializer.registerDSFID(CACHE_PROFILE, CacheDistributionAdvisor.CacheProfile.class);
+    serializer.registerDSFID(HA_PROFILE, HARegion.HARegionAdvisor.HAProfile.class);
+    serializer.registerDSFID(ENTRY_EVENT, EntryEventImpl.class);
+    serializer.registerDSFID(UPDATE_ATTRIBUTES_MESSAGE,
+        UpdateAttributesProcessor.UpdateAttributesMessage.class);
+    serializer.registerDSFID(PROFILE_REPLY_MESSAGE,
+        UpdateAttributesProcessor.ProfileReplyMessage.class);
+    serializer.registerDSFID(PROFILES_REPLY_MESSAGE,
+        UpdateAttributesProcessor.ProfilesReplyMessage.class);
+    serializer.registerDSFID(REGION_EVENT, RegionEventImpl.class);
+    serializer.registerDSFID(TX_COMMIT_MESSAGE, TXCommitMessage.class);
+    serializer.registerDSFID(COMMIT_PROCESS_FOR_LOCKID_MESSAGE,
+        CommitProcessForLockIdMessage.class);
+    serializer.registerDSFID(COMMIT_PROCESS_FOR_TXID_MESSAGE, CommitProcessForTXIdMessage.class);
+    serializer.registerDSFID(FILTER_PROFILE, FilterProfile.class);
+    serializer.registerDSFID(REMOTE_PUTALL_REPLY_MESSAGE,
+        RemotePutAllMessage.PutAllReplyMessage.class);
+    serializer.registerDSFID(REMOTE_PUTALL_MESSAGE, RemotePutAllMessage.class);
+    serializer.registerDSFID(VERSION_TAG, VMVersionTag.class);
+    serializer.registerDSFID(ADD_CACHESERVER_PROFILE_UPDATE, AddCacheServerProfileMessage.class);
+    serializer.registerDSFID(REMOVE_CACHESERVER_PROFILE_UPDATE,
+        RemoveCacheServerProfileMessage.class);
+    serializer.registerDSFID(SERVER_INTEREST_REGISTRATION_MESSAGE,
+        ServerInterestRegistrationMessage.class);
+    serializer.registerDSFID(FILTER_PROFILE_UPDATE, FilterProfile.OperationMessage.class);
+    serializer.registerDSFID(PR_GET_MESSAGE, GetMessage.class);
+    serializer.registerDSFID(R_FETCH_ENTRY_MESSAGE, RemoteFetchEntryMessage.class);
+    serializer.registerDSFID(R_FETCH_ENTRY_REPLY_MESSAGE,
+        RemoteFetchEntryMessage.FetchEntryReplyMessage.class);
+    serializer.registerDSFID(R_CONTAINS_MESSAGE, RemoteContainsKeyValueMessage.class);
+    serializer.registerDSFID(R_CONTAINS_REPLY_MESSAGE,
+        RemoteContainsKeyValueMessage.RemoteContainsKeyValueReplyMessage.class);
+    serializer.registerDSFID(R_DESTROY_MESSAGE, RemoteDestroyMessage.class);
+    serializer.registerDSFID(R_DESTROY_REPLY_MESSAGE,
+        RemoteDestroyMessage.DestroyReplyMessage.class);
+    serializer.registerDSFID(R_INVALIDATE_MESSAGE, RemoteInvalidateMessage.class);
+    serializer.registerDSFID(R_INVALIDATE_REPLY_MESSAGE,
+        RemoteInvalidateMessage.InvalidateReplyMessage.class);
+    serializer.registerDSFID(R_GET_MESSAGE, RemoteGetMessage.class);
+    serializer.registerDSFID(R_GET_REPLY_MESSAGE, RemoteGetMessage.GetReplyMessage.class);
+    serializer.registerDSFID(R_PUT_MESSAGE, RemotePutMessage.class);
+    serializer.registerDSFID(R_PUT_REPLY_MESSAGE, RemotePutMessage.PutReplyMessage.class);
+    serializer.registerDSFID(R_SIZE_MESSAGE, RemoteSizeMessage.class);
+    serializer.registerDSFID(R_SIZE_REPLY_MESSAGE, RemoteSizeMessage.SizeReplyMessage.class);
+    serializer.registerDSFID(PR_DESTROY_REPLY_MESSAGE, DestroyMessage.DestroyReplyMessage.class);
+    serializer.registerDSFID(CLI_FUNCTION_RESULT, CliFunctionResult.class);
+    serializer.registerDSFID(R_FETCH_KEYS_MESSAGE, RemoteFetchKeysMessage.class);
+    serializer.registerDSFID(R_FETCH_KEYS_REPLY,
+        RemoteFetchKeysMessage.RemoteFetchKeysReplyMessage.class);
+    serializer.registerDSFID(R_REMOTE_COMMIT_REPLY_MESSAGE, TXRemoteCommitReplyMessage.class);
+    serializer.registerDSFID(TRANSACTION_LOCK_ID, TXLockIdImpl.class);
+    serializer.registerDSFID(PR_GET_REPLY_MESSAGE, GetReplyMessage.class);
+    serializer.registerDSFID(PR_NODE, Node.class);
+    serializer.registerDSFID(UPDATE_WITH_CONTEXT_MESSAGE,
+        UpdateOperation.UpdateWithContextMessage.class);
+    serializer.registerDSFID(DESTROY_WITH_CONTEXT_MESSAGE,
+        DestroyOperation.DestroyWithContextMessage.class);
+    serializer.registerDSFID(INVALIDATE_WITH_CONTEXT_MESSAGE,
+        InvalidateOperation.InvalidateWithContextMessage.class);
+    serializer.registerDSFID(REGION_VERSION_VECTOR, VMRegionVersionVector.class);
+    serializer.registerDSFID(CLIENT_PROXY_MEMBERSHIPID, ClientProxyMembershipID.class);
+    serializer.registerDSFID(EVENT_ID, EventID.class);
+    serializer.registerDSFID(CLIENT_UPDATE_MESSAGE, ClientUpdateMessageImpl.class);
+    serializer.registerDSFID(CLEAR_REGION_MESSAGE_WITH_CONTEXT,
+        ClearRegionWithContextMessage.class);
+    serializer.registerDSFID(CLIENT_INSTANTIATOR_MESSAGE, ClientInstantiatorMessage.class);
+    serializer.registerDSFID(CLIENT_DATASERIALIZER_MESSAGE, ClientDataSerializerMessage.class);
+    serializer.registerDSFID(REGISTRATION_MESSAGE, InternalInstantiator.RegistrationMessage.class);
+    serializer.registerDSFID(REGISTRATION_CONTEXT_MESSAGE,
+        InternalInstantiator.RegistrationContextMessage.class);
+    serializer.registerDSFID(RESULTS_COLLECTION_WRAPPER, ResultsCollectionWrapper.class);
+    serializer.registerDSFID(RESULTS_SET, ResultsSet.class);
+    serializer.registerDSFID(SORTED_RESULT_SET, SortedResultSet.class);
+    serializer.registerDSFID(SORTED_STRUCT_SET, SortedStructSet.class);
+    serializer.registerDSFID(NWAY_MERGE_RESULTS, NWayMergeResults.class);
+    serializer.registerDSFID(CUMULATIVE_RESULTS, CumulativeNonDistinctResults.class);
+    serializer.registerDSFID(UNDEFINED, Undefined.class);
+    serializer.registerDSFID(STRUCT_IMPL, StructImpl.class);
+    serializer.registerDSFID(STRUCT_SET, StructSet.class);
+    serializer.registerDSFID(END_OF_BUCKET, PRQueryProcessor.EndOfBucket.class);
+    serializer.registerDSFID(STRUCT_BAG, StructBag.class);
+    serializer.registerDSFID(LINKED_RESULTSET, LinkedResultSet.class);
+    serializer.registerDSFID(LINKED_STRUCTSET, LinkedStructSet.class);
+    serializer.registerDSFID(PR_BUCKET_BACKUP_MESSAGE, BucketBackupMessage.class);
+    serializer.registerDSFID(PR_BUCKET_PROFILE_UPDATE_MESSAGE, BucketProfileUpdateMessage.class);
+    serializer.registerDSFID(PR_ALL_BUCKET_PROFILES_UPDATE_MESSAGE,
+        AllBucketProfilesUpdateMessage.class);
+    serializer.registerDSFID(PR_BUCKET_SIZE_MESSAGE, BucketSizeMessage.class);
+    serializer.registerDSFID(PR_CONTAINS_KEY_VALUE_MESSAGE, ContainsKeyValueMessage.class);
+    serializer.registerDSFID(PR_DUMP_ALL_PR_CONFIG_MESSAGE, DumpAllPRConfigMessage.class);
+    serializer.registerDSFID(PR_DUMP_BUCKETS_MESSAGE, DumpBucketsMessage.class);
+    serializer.registerDSFID(PR_FETCH_ENTRIES_MESSAGE, FetchEntriesMessage.class);
+    serializer.registerDSFID(PR_FETCH_ENTRY_MESSAGE, FetchEntryMessage.class);
+    serializer.registerDSFID(PR_FETCH_KEYS_MESSAGE, FetchKeysMessage.class);
+    serializer.registerDSFID(PR_FLUSH_MESSAGE, FlushMessage.class);
+    serializer.registerDSFID(PR_IDENTITY_REQUEST_MESSAGE, IdentityRequestMessage.class);
+    serializer.registerDSFID(PR_IDENTITY_UPDATE_MESSAGE, IdentityUpdateMessage.class);
+    serializer.registerDSFID(PR_INDEX_CREATION_MSG, IndexCreationMsg.class);
+    serializer.registerDSFID(PR_MANAGE_BUCKET_MESSAGE, ManageBucketMessage.class);
+    serializer.registerDSFID(PR_PRIMARY_REQUEST_MESSAGE, PrimaryRequestMessage.class);
+    serializer.registerDSFID(PR_PRIMARY_REQUEST_REPLY_MESSAGE, PrimaryRequestReplyMessage.class);
+    serializer.registerDSFID(PR_SANITY_CHECK_MESSAGE, PRSanityCheckMessage.class);
+    serializer.registerDSFID(PR_PUTALL_REPLY_MESSAGE, PutAllReplyMessage.class);
+    serializer.registerDSFID(PR_PUT_REPLY_MESSAGE, PutReplyMessage.class);
+    serializer.registerDSFID(PR_QUERY_MESSAGE, QueryMessage.class);
+    serializer.registerDSFID(PR_REMOVE_INDEXES_MESSAGE, RemoveIndexesMessage.class);
+    serializer.registerDSFID(PR_REMOVE_INDEXES_REPLY_MESSAGE, RemoveIndexesReplyMessage.class);
+    serializer.registerDSFID(PR_SIZE_MESSAGE, SizeMessage.class);
+    serializer.registerDSFID(PR_SIZE_REPLY_MESSAGE, SizeReplyMessage.class);
+    serializer.registerDSFID(PR_BUCKET_SIZE_REPLY_MESSAGE, BucketSizeReplyMessage.class);
+    serializer.registerDSFID(PR_CONTAINS_KEY_VALUE_REPLY_MESSAGE,
+        ContainsKeyValueReplyMessage.class);
+    serializer.registerDSFID(PR_FETCH_ENTRIES_REPLY_MESSAGE, FetchEntriesReplyMessage.class);
+    serializer.registerDSFID(PR_FETCH_ENTRY_REPLY_MESSAGE, FetchEntryReplyMessage.class);
+    serializer.registerDSFID(PR_IDENTITY_REPLY_MESSAGE, IdentityReplyMessage.class);
+    serializer.registerDSFID(PR_INDEX_CREATION_REPLY_MSG, IndexCreationReplyMsg.class);
+    serializer.registerDSFID(PR_MANAGE_BUCKET_REPLY_MESSAGE, ManageBucketReplyMessage.class);
+    serializer.registerDSFID(PR_FETCH_KEYS_REPLY_MESSAGE, FetchKeysReplyMessage.class);
+    serializer.registerDSFID(PR_DUMP_B2N_REGION_MSG, DumpB2NRegion.class);
+    serializer.registerDSFID(PR_DUMP_B2N_REPLY_MESSAGE, DumpB2NReplyMessage.class);
+    serializer.registerDSFID(DESTROY_PARTITIONED_REGION_MESSAGE,
+        DestroyPartitionedRegionMessage.class);
+    serializer.registerDSFID(INVALIDATE_PARTITIONED_REGION_MESSAGE,
+        InvalidatePartitionedRegionMessage.class);
+    serializer.registerDSFID(COMMIT_PROCESS_QUERY_MESSAGE, CommitProcessQueryMessage.class);
+    serializer.registerDSFID(COMMIT_PROCESS_QUERY_REPLY_MESSAGE,
+        CommitProcessQueryReplyMessage.class);
+    serializer.registerDSFID(DESTROY_REGION_WITH_CONTEXT_MESSAGE,
+        DestroyRegionOperation.DestroyRegionWithContextMessage.class);
+    serializer.registerDSFID(PUT_ALL_MESSAGE, PutAllMessage.class);
+    serializer.registerDSFID(REMOVE_ALL_MESSAGE, RemoveAllMessage.class);
+    serializer.registerDSFID(CLEAR_REGION_MESSAGE, ClearRegionMessage.class);
+    serializer.registerDSFID(TOMBSTONE_MESSAGE, TombstoneMessage.class);
+    serializer.registerDSFID(INVALIDATE_REGION_MESSAGE, InvalidateRegionMessage.class);
+    serializer.registerDSFID(STATE_MARKER_MESSAGE, StateMarkerMessage.class);
+    serializer.registerDSFID(STATE_STABILIZATION_MESSAGE, StateStabilizationMessage.class);
+    serializer.registerDSFID(STATE_STABILIZED_MESSAGE, StateStabilizedMessage.class);
+    serializer.registerDSFID(CLIENT_MARKER_MESSAGE_IMPL, ClientMarkerMessageImpl.class);
+    serializer.registerDSFID(TX_LOCK_UPDATE_PARTICIPANTS_MESSAGE,
+        TXLockUpdateParticipantsMessage.class);
+    serializer.registerDSFID(TX_ORIGINATOR_RECOVERY_MESSAGE, TXOriginatorRecoveryMessage.class);
+    serializer.registerDSFID(TX_ORIGINATOR_RECOVERY_REPLY_MESSAGE,
+        TXOriginatorRecoveryReplyMessage.class);
+    serializer.registerDSFID(TX_REMOTE_COMMIT_MESSAGE, TXRemoteCommitMessage.class);
+    serializer.registerDSFID(TX_REMOTE_ROLLBACK_MESSAGE, TXRemoteRollbackMessage.class);
+    serializer.registerDSFID(JTA_BEFORE_COMPLETION_MESSAGE, JtaBeforeCompletionMessage.class);
+    serializer.registerDSFID(JTA_AFTER_COMPLETION_MESSAGE, JtaAfterCompletionMessage.class);
+    serializer.registerDSFID(QUEUE_REMOVAL_MESSAGE, QueueRemovalMessage.class);
+    serializer.registerDSFID(DLOCK_RECOVER_GRANTOR_MESSAGE, DLockRecoverGrantorMessage.class);
+    serializer.registerDSFID(DLOCK_RECOVER_GRANTOR_REPLY_MESSAGE,
+        DLockRecoverGrantorReplyMessage.class);
+    serializer.registerDSFID(NON_GRANTOR_DESTROYED_REPLY_MESSAGE,
+        NonGrantorDestroyedReplyMessage.class);
+    serializer.registerDSFID(IDS_REGISTRATION_MESSAGE,
+        InternalDataSerializer.RegistrationMessage.class);
+    serializer.registerDSFID(PR_FETCH_PARTITION_DETAILS_MESSAGE,
+        FetchPartitionDetailsMessage.class);
+    serializer.registerDSFID(PR_FETCH_PARTITION_DETAILS_REPLY,
+        FetchPartitionDetailsReplyMessage.class);
+    serializer.registerDSFID(PR_DEPOSE_PRIMARY_BUCKET_MESSAGE, DeposePrimaryBucketMessage.class);
+    serializer.registerDSFID(PR_DEPOSE_PRIMARY_BUCKET_REPLY, DeposePrimaryBucketReplyMessage.class);
+    serializer.registerDSFID(PR_BECOME_PRIMARY_BUCKET_MESSAGE, BecomePrimaryBucketMessage.class);
+    serializer.registerDSFID(PR_BECOME_PRIMARY_BUCKET_REPLY, BecomePrimaryBucketReplyMessage.class);
+    serializer.registerDSFID(PR_REMOVE_BUCKET_MESSAGE, RemoveBucketMessage.class);
+    serializer.registerDSFID(EXPIRE_CLIENT_TRANSACTIONS,
+        ExpireDisconnectedClientTransactionsMessage.class);
+    serializer.registerDSFID(PR_REMOVE_BUCKET_REPLY, RemoveBucketReplyMessage.class);
+    serializer.registerDSFID(PR_MOVE_BUCKET_MESSAGE, MoveBucketMessage.class);
+    serializer.registerDSFID(PR_MOVE_BUCKET_REPLY, MoveBucketReplyMessage.class);
+    serializer.registerDSFID(ADD_HEALTH_LISTENER_REQUEST, AddHealthListenerRequest.class);
+    serializer.registerDSFID(ADD_HEALTH_LISTENER_RESPONSE, AddHealthListenerResponse.class);
+    serializer.registerDSFID(ADD_STAT_LISTENER_REQUEST, AddStatListenerRequest.class);
+    serializer.registerDSFID(ADD_STAT_LISTENER_RESPONSE, AddStatListenerResponse.class);
+    serializer.registerDSFID(ADMIN_CONSOLE_DISCONNECT_MESSAGE, AdminConsoleDisconnectMessage.class);
+    serializer.registerDSFID(ADMIN_CONSOLE_MESSAGE, AdminConsoleMessage.class);
+    serializer.registerDSFID(MANAGER_STARTUP_MESSAGE, ManagerStartupMessage.class);
+    serializer.registerDSFID(JMX_MANAGER_LOCATOR_REQUEST, JmxManagerLocatorRequest.class);
+    serializer.registerDSFID(JMX_MANAGER_LOCATOR_RESPONSE, JmxManagerLocatorResponse.class);
+    serializer.registerDSFID(ADMIN_FAILURE_RESPONSE, AdminFailureResponse.class);
+    serializer.registerDSFID(ALERT_LEVEL_CHANGE_MESSAGE, AlertLevelChangeMessage.class);
+    serializer.registerDSFID(ALERT_LISTENER_MESSAGE, AlertListenerMessage.class);
+    serializer.registerDSFID(APP_CACHE_SNAPSHOT_MESSAGE, AppCacheSnapshotMessage.class);
+    serializer.registerDSFID(BRIDGE_SERVER_REQUEST, BridgeServerRequest.class);
+    serializer.registerDSFID(BRIDGE_SERVER_RESPONSE, BridgeServerResponse.class);
+    serializer.registerDSFID(CACHE_CONFIG_REQUEST, CacheConfigRequest.class);
+    serializer.registerDSFID(CACHE_CONFIG_RESPONSE, CacheConfigResponse.class);
+    serializer.registerDSFID(CACHE_INFO_REQUEST, CacheInfoRequest.class);
+    serializer.registerDSFID(CACHE_INFO_RESPONSE, CacheInfoResponse.class);
+    serializer.registerDSFID(CANCELLATION_MESSAGE, CancellationMessage.class);
+    serializer.registerDSFID(CANCEL_STAT_LISTENER_REQUEST, CancelStatListenerRequest.class);
+    serializer.registerDSFID(CANCEL_STAT_LISTENER_RESPONSE, CancelStatListenerResponse.class);
+    serializer.registerDSFID(DESTROY_ENTRY_MESSAGE, DestroyEntryMessage.class);
+    serializer.registerDSFID(ADMIN_DESTROY_REGION_MESSAGE, DestroyRegionMessage.class);
+    serializer.registerDSFID(FETCH_DIST_LOCK_INFO_REQUEST, FetchDistLockInfoRequest.class);
+    serializer.registerDSFID(FETCH_DIST_LOCK_INFO_RESPONSE, FetchDistLockInfoResponse.class);
+    serializer.registerDSFID(FETCH_HEALTH_DIAGNOSIS_REQUEST, FetchHealthDiagnosisRequest.class);
+    serializer.registerDSFID(FETCH_HEALTH_DIAGNOSIS_RESPONSE, FetchHealthDiagnosisResponse.class);
+    serializer.registerDSFID(FETCH_HOST_REQUEST, FetchHostRequest.class);
+    serializer.registerDSFID(FETCH_HOST_RESPONSE, FetchHostResponse.class);
+    serializer.registerDSFID(FETCH_RESOURCE_ATTRIBUTES_REQUEST,
+        FetchResourceAttributesRequest.class);
+    serializer.registerDSFID(FETCH_RESOURCE_ATTRIBUTES_RESPONSE,
+        FetchResourceAttributesResponse.class);
+    serializer.registerDSFID(FETCH_STATS_REQUEST, FetchStatsRequest.class);
+    serializer.registerDSFID(FETCH_STATS_RESPONSE, FetchStatsResponse.class);
+    serializer.registerDSFID(FETCH_SYS_CFG_REQUEST, FetchSysCfgRequest.class);
+    serializer.registerDSFID(FETCH_SYS_CFG_RESPONSE, FetchSysCfgResponse.class);
+    serializer.registerDSFID(FLUSH_APP_CACHE_SNAPSHOT_MESSAGE, FlushAppCacheSnapshotMessage.class);
+    serializer.registerDSFID(HEALTH_LISTENER_MESSAGE, HealthListenerMessage.class);
+    serializer.registerDSFID(OBJECT_DETAILS_REQUEST, ObjectDetailsRequest.class);
+    serializer.registerDSFID(OBJECT_DETAILS_RESPONSE, ObjectDetailsResponse.class);
+    serializer.registerDSFID(OBJECT_NAMES_REQUEST, ObjectNamesRequest.class);
+    serializer.registerDSFID(LICENSE_INFO_REQUEST, LicenseInfoRequest.class);
+    serializer.registerDSFID(LICENSE_INFO_RESPONSE, LicenseInfoResponse.class);
+    serializer.registerDSFID(OBJECT_NAMES_RESPONSE, ObjectNamesResponse.class);
+    serializer.registerDSFID(REGION_ATTRIBUTES_REQUEST, RegionAttributesRequest.class);
+    serializer.registerDSFID(REGION_ATTRIBUTES_RESPONSE, RegionAttributesResponse.class);
+    serializer.registerDSFID(REGION_REQUEST, RegionRequest.class);
+    serializer.registerDSFID(REGION_RESPONSE, RegionResponse.class);
+    serializer.registerDSFID(REGION_SIZE_REQUEST, RegionSizeRequest.class);
+    serializer.registerDSFID(REGION_SIZE_RESPONSE, RegionSizeResponse.class);
+    serializer.registerDSFID(REGION_STATISTICS_REQUEST, RegionStatisticsRequest.class);
+    serializer.registerDSFID(REGION_STATISTICS_RESPONSE, RegionStatisticsResponse.class);
+    serializer.registerDSFID(REMOVE_HEALTH_LISTENER_REQUEST, RemoveHealthListenerRequest.class);
+    serializer.registerDSFID(REMOVE_HEALTH_LISTENER_RESPONSE, RemoveHealthListenerResponse.class);
+    serializer.registerDSFID(RESET_HEALTH_STATUS_REQUEST, ResetHealthStatusRequest.class);
+    serializer.registerDSFID(RESET_HEALTH_STATUS_RESPONSE, ResetHealthStatusResponse.class);
+    serializer.registerDSFID(ROOT_REGION_REQUEST, RootRegionRequest.class);
+    serializer.registerDSFID(ROOT_REGION_RESPONSE, RootRegionResponse.class);
+    serializer.registerDSFID(SNAPSHOT_RESULT_MESSAGE, SnapshotResultMessage.class);
+    serializer.registerDSFID(STAT_LISTENER_MESSAGE, StatListenerMessage.class);
+    serializer.registerDSFID(STORE_SYS_CFG_REQUEST, StoreSysCfgRequest.class);
+    serializer.registerDSFID(STORE_SYS_CFG_RESPONSE, StoreSysCfgResponse.class);
+    serializer.registerDSFID(SUB_REGION_REQUEST, SubRegionRequest.class);
+    serializer.registerDSFID(SUB_REGION_RESPONSE, SubRegionResponse.class);
+    serializer.registerDSFID(TAIL_LOG_REQUEST, TailLogRequest.class);
+    serializer.registerDSFID(TAIL_LOG_RESPONSE, TailLogResponse.class);
+    serializer.registerDSFID(VERSION_INFO_REQUEST, VersionInfoRequest.class);
+    serializer.registerDSFID(VERSION_INFO_RESPONSE, VersionInfoResponse.class);
+    serializer.registerDSFID(HIGH_PRIORITY_ACKED_MESSAGE, HighPriorityAckedMessage.class);
+    serializer.registerDSFID(SERIAL_ACKED_MESSAGE, SerialAckedMessage.class);
+    serializer.registerDSFID(BUCKET_PROFILE, BucketAdvisor.BucketProfile.class);
+    serializer.registerDSFID(SERVER_BUCKET_PROFILE, BucketAdvisor.ServerBucketProfile.class);
+    serializer.registerDSFID(PARTITION_PROFILE, RegionAdvisor.PartitionProfile.class);
+    serializer.registerDSFID(GATEWAY_SENDER_PROFILE,
+        GatewaySenderAdvisor.GatewaySenderProfile.class);
+    serializer.registerDSFID(ROLE_EVENT, RoleEventImpl.class);
+    serializer.registerDSFID(CLIENT_REGION_EVENT, ClientRegionEventImpl.class);
+    serializer.registerDSFID(PR_INVALIDATE_MESSAGE, InvalidateMessage.class);
+    serializer.registerDSFID(PR_INVALIDATE_REPLY_MESSAGE,
+        InvalidateMessage.InvalidateReplyMessage.class);
+    serializer.registerDSFID(TX_LOCK_UPDATE_PARTICIPANTS_REPLY_MESSAGE,
+        TXLockUpdateParticipantsReplyMessage.class);
+    serializer.registerDSFID(STREAMING_REPLY_MESSAGE, StreamingReplyMessage.class);
+    serializer.registerDSFID(PARTITION_REGION_CONFIG, PartitionRegionConfig.class);
+    serializer.registerDSFID(PREFER_BYTES_CACHED_DESERIALIZABLE,
+        PreferBytesCachedDeserializable.class);
+    serializer.registerDSFID(VM_CACHED_DESERIALIZABLE, VMCachedDeserializable.class);
+    serializer.registerDSFID(GATEWAY_SENDER_EVENT_IMPL, GatewaySenderEventImpl.class);
+    serializer.registerDSFID(SUSPEND_LOCKING_TOKEN, DLockService.SuspendLockingToken.class);
+    serializer.registerDSFID(OBJECT_TYPE_IMPL, ObjectTypeImpl.class);
+    serializer.registerDSFID(STRUCT_TYPE_IMPL, StructTypeImpl.class);
+    serializer.registerDSFID(COLLECTION_TYPE_IMPL, CollectionTypeImpl.class);
+    serializer.registerDSFID(TX_LOCK_BATCH, TXLockBatch.class);
+    serializer.registerDSFID(GATEWAY_SENDER_EVENT_CALLBACK_ARGUMENT,
+        GatewaySenderEventCallbackArgument.class);
+    serializer.registerDSFID(MAP_TYPE_IMPL, MapTypeImpl.class);
+    serializer.registerDSFID(STORE_ALL_CACHED_DESERIALIZABLE, StoreAllCachedDeserializable.class);
+    serializer.registerDSFID(INTEREST_EVENT_MESSAGE, InterestEventMessage.class);
+    serializer.registerDSFID(INTEREST_EVENT_REPLY_MESSAGE, InterestEventReplyMessage.class);
+    serializer.registerDSFID(HA_EVENT_WRAPPER, HAEventWrapper.class);
+    serializer.registerDSFID(STAT_ALERTS_MGR_ASSIGN_MESSAGE, StatAlertsManagerAssignMessage.class);
+    serializer.registerDSFID(UPDATE_ALERTS_DEFN_MESSAGE, UpdateAlertDefinitionMessage.class);
+    serializer.registerDSFID(REFRESH_MEMBER_SNAP_REQUEST, RefreshMemberSnapshotRequest.class);
+    serializer.registerDSFID(REFRESH_MEMBER_SNAP_RESPONSE, RefreshMemberSnapshotResponse.class);
+    serializer.registerDSFID(REGION_SUB_SIZE_REQUEST, RegionSubRegionSizeRequest.class);
+    serializer.registerDSFID(REGION_SUB_SIZE_RESPONSE, RegionSubRegionsSizeResponse.class);
+    serializer.registerDSFID(CHANGE_REFRESH_INT_MESSAGE, ChangeRefreshIntervalMessage.class);
+    serializer.registerDSFID(ALERTS_NOTIF_MESSAGE, AlertsNotificationMessage.class);
+    serializer.registerDSFID(FIND_DURABLE_QUEUE, FindDurableQueueMessage.class);
+    serializer.registerDSFID(FIND_DURABLE_QUEUE_REPLY, FindDurableQueueReply.class);
+    serializer.registerDSFID(CACHE_SERVER_LOAD_MESSAGE, CacheServerLoadMessage.class);
+    serializer.registerDSFID(CACHE_SERVER_PROFILE, CacheServerProfile.class);
+    serializer.registerDSFID(CONTROLLER_PROFILE, ControllerProfile.class);
+    serializer.registerDSFID(DLOCK_QUERY_MESSAGE, DLockQueryProcessor.DLockQueryMessage.class);
+    serializer.registerDSFID(DLOCK_QUERY_REPLY, DLockQueryProcessor.DLockQueryReplyMessage.class);
+    serializer.registerDSFID(LOCATOR_LIST_REQUEST, LocatorListRequest.class);
+    serializer.registerDSFID(LOCATOR_LIST_RESPONSE, LocatorListResponse.class);
+    serializer.registerDSFID(CLIENT_CONNECTION_REQUEST, ClientConnectionRequest.class);
+    serializer.registerDSFID(CLIENT_CONNECTION_RESPONSE, ClientConnectionResponse.class);
+    serializer.registerDSFID(QUEUE_CONNECTION_REQUEST, QueueConnectionRequest.class);
+    serializer.registerDSFID(QUEUE_CONNECTION_RESPONSE, QueueConnectionResponse.class);
+    serializer.registerDSFID(CLIENT_REPLACEMENT_REQUEST, ClientReplacementRequest.class);
+    serializer.registerDSFID(OBJECT_PART_LIST, ObjectPartList.class);
+    serializer.registerDSFID(VERSIONED_OBJECT_LIST, VersionedObjectList.class);
+    serializer.registerDSFID(OBJECT_PART_LIST66, ObjectPartList651.class);
+    serializer.registerDSFID(PUTALL_VERSIONS_LIST, EntryVersionsList.class);
+    serializer.registerDSFID(INITIAL_IMAGE_VERSIONED_OBJECT_LIST,
+        InitialImageVersionedEntryList.class);
+    serializer.registerDSFID(FIND_VERSION_TAG, FindVersionTagMessage.class);
+    serializer.registerDSFID(VERSION_TAG_REPLY, VersionTagReply.class);
+    serializer.registerDSFID(DURABLE_CLIENT_INFO_REQUEST, DurableClientInfoRequest.class);
+    serializer.registerDSFID(DURABLE_CLIENT_INFO_RESPONSE, DurableClientInfoResponse.class);
+    serializer.registerDSFID(CLIENT_INTEREST_MESSAGE, ClientInterestMessageImpl.class);
+    serializer.registerDSFID(LATEST_LAST_ACCESS_TIME_MESSAGE, LatestLastAccessTimeMessage.class);
+    serializer.registerDSFID(STAT_ALERT_DEFN_NUM_THRESHOLD, NumberThresholdDecoratorImpl.class);
+    serializer.registerDSFID(STAT_ALERT_DEFN_GAUGE_THRESHOLD, GaugeThresholdDecoratorImpl.class);
+    serializer.registerDSFID(CLIENT_HEALTH_STATS, ClientHealthStats.class);
+    serializer.registerDSFID(STAT_ALERT_NOTIFICATION, StatAlertNotification.class);
+    serializer.registerDSFID(FILTER_INFO_MESSAGE, InitialImageOperation.FilterInfoMessage.class);
+    serializer.registerDSFID(SIZED_BASED_LOAD_PROBE, SizedBasedLoadProbe.class);
+    serializer.registerDSFID(PR_MANAGE_BACKUP_BUCKET_MESSAGE, ManageBackupBucketMessage.class);
+    serializer.registerDSFID(PR_MANAGE_BACKUP_BUCKET_REPLY_MESSAGE,
+        ManageBackupBucketReplyMessage.class);
+    serializer.registerDSFID(PR_CREATE_BUCKET_MESSAGE, CreateBucketMessage.class);
+    serializer.registerDSFID(PR_CREATE_BUCKET_REPLY_MESSAGE, CreateBucketReplyMessage.class);
+    serializer.registerDSFID(RESOURCE_MANAGER_PROFILE, ResourceManagerProfile.class);
+    serializer.registerDSFID(RESOURCE_PROFILE_MESSAGE, ResourceProfileMessage.class);
+    serializer.registerDSFID(JMX_MANAGER_PROFILE, JmxManagerProfile.class);
+    serializer.registerDSFID(JMX_MANAGER_PROFILE_MESSAGE, JmxManagerProfileMessage.class);
+    serializer.registerDSFID(CLIENT_DENYLIST_MESSAGE, ClientDenylistMessage.class);
+    serializer.registerDSFID(REMOVE_CLIENT_FROM_DENYLIST_MESSAGE,
+        RemoveClientFromDenylistMessage.class);
+    serializer.registerDSFID(PR_FUNCTION_STREAMING_MESSAGE,
+        PartitionedRegionFunctionStreamingMessage.class);
+    serializer.registerDSFID(MEMBER_FUNCTION_STREAMING_MESSAGE,
+        MemberFunctionStreamingMessage.class);
+    serializer.registerDSFID(DR_FUNCTION_STREAMING_MESSAGE,
+        DistributedRegionFunctionStreamingMessage.class);
+    serializer.registerDSFID(FUNCTION_STREAMING_REPLY_MESSAGE, FunctionStreamingReplyMessage.class);
+    serializer.registerDSFID(GET_ALL_SERVERS_REQUEST, GetAllServersRequest.class);
+    serializer.registerDSFID(GET_ALL_SERVRES_RESPONSE, GetAllServersResponse.class);
+    serializer.registerDSFID(PERSISTENT_MEMBERSHIP_VIEW_REQUEST, MembershipViewRequest.class);
+    serializer.registerDSFID(PERSISTENT_MEMBERSHIP_VIEW_REPLY, MembershipViewReplyMessage.class);
+    serializer.registerDSFID(PERSISTENT_STATE_QUERY_REQUEST, PersistentStateQueryMessage.class);
+    serializer.registerDSFID(PERSISTENT_STATE_QUERY_REPLY, PersistentStateQueryReplyMessage.class);
+    serializer.registerDSFID(PREPARE_NEW_PERSISTENT_MEMBER_REQUEST,
+        PrepareNewPersistentMemberMessage.class);
+    serializer.registerDSFID(MISSING_PERSISTENT_IDS_REQUEST, MissingPersistentIDsRequest.class);
+    serializer.registerDSFID(MISSING_PERSISTENT_IDS_RESPONSE, MissingPersistentIDsResponse.class);
+    serializer.registerDSFID(REVOKE_PERSISTENT_ID_REQUEST, RevokePersistentIDRequest.class);
+    serializer.registerDSFID(REVOKE_PERSISTENT_ID_RESPONSE, RevokePersistentIDResponse.class);
+    serializer.registerDSFID(REMOVE_PERSISTENT_MEMBER_REQUEST, RemovePersistentMemberMessage.class);
+    serializer.registerDSFID(FUNCTION_STREAMING_ORDERED_REPLY_MESSAGE,
+        FunctionStreamingOrderedReplyMessage.class);
+    serializer.registerDSFID(REQUEST_SYNC_MESSAGE, InitialImageOperation.RequestSyncMessage.class);
+    serializer.registerDSFID(PERSISTENT_MEMBERSHIP_FLUSH_REQUEST, MembershipFlushRequest.class);
+    serializer.registerDSFID(SHUTDOWN_ALL_REQUEST, ShutdownAllRequest.class);
+    serializer.registerDSFID(SHUTDOWN_ALL_RESPONSE, ShutdownAllResponse.class);
+    serializer.registerDSFID(CLIENT_MEMBERSHIP_MESSAGE, ClientMembershipMessage.class);
+    serializer.registerDSFID(END_BUCKET_CREATION_MESSAGE, EndBucketCreationMessage.class);
+    serializer.registerDSFID(PREPARE_BACKUP_REQUEST, PrepareBackupRequest.class);
+    serializer.registerDSFID(BACKUP_RESPONSE, BackupResponse.class); // in older versions this was
+    // FinishBackupResponse which is
+    // compatible
+    serializer.registerDSFID(FINISH_BACKUP_REQUEST, FinishBackupRequest.class);
+    serializer.registerDSFID(FINISH_BACKUP_RESPONSE, BackupResponse.class); // for backwards
+                                                                            // compatibility map
+    // FINISH_BACKUP_RESPONSE to
+    // BackupResponse
+    serializer.registerDSFID(COMPACT_REQUEST, CompactRequest.class);
+    serializer.registerDSFID(COMPACT_RESPONSE, CompactResponse.class);
+    serializer.registerDSFID(FLOW_CONTROL_PERMIT_MESSAGE, FlowControlPermitMessage.class);
+    serializer.registerDSFID(REQUEST_FILTERINFO_MESSAGE,
+        InitialImageOperation.RequestFilterInfoMessage.class);
+    serializer.registerDSFID(PARALLEL_QUEUE_REMOVAL_MESSAGE, ParallelQueueRemovalMessage.class);
+    serializer.registerDSFID(BATCH_DESTROY_MESSAGE, BatchDestroyOperation.DestroyMessage.class);
+    serializer.registerDSFID(FIND_REMOTE_TX_MESSAGE, FindRemoteTXMessage.class);
+    serializer.registerDSFID(FIND_REMOTE_TX_REPLY, FindRemoteTXMessageReply.class);
+    serializer.registerDSFID(SERIALIZED_OBJECT_PART_LIST, SerializedObjectPartList.class);
+    serializer.registerDSFID(FLUSH_TO_DISK_REQUEST, FlushToDiskRequest.class);
+    serializer.registerDSFID(FLUSH_TO_DISK_RESPONSE, FlushToDiskResponse.class);
+    serializer.registerDSFID(ENUM_ID, EnumId.class);
+    serializer.registerDSFID(ENUM_INFO, EnumInfo.class);
+    serializer.registerDSFID(CHECK_TYPE_REGISTRY_STATE, CheckTypeRegistryState.class);
+    serializer.registerDSFID(PREPARE_REVOKE_PERSISTENT_ID_REQUEST,
+        PrepareRevokePersistentIDRequest.class);
+    serializer.registerDSFID(PERSISTENT_RVV, DiskRegionVersionVector.class);
+    serializer.registerDSFID(PERSISTENT_VERSION_TAG, DiskVersionTag.class);
+    serializer.registerDSFID(DISK_STORE_ID, DiskStoreID.class);
+    serializer.registerDSFID(CLIENT_PING_MESSAGE_IMPL, ClientPingMessageImpl.class);
+    serializer.registerDSFID(SNAPSHOT_PACKET, SnapshotPacket.class);
+    serializer.registerDSFID(SNAPSHOT_RECORD, SnapshotRecord.class);
+    serializer.registerDSFID(FLOW_CONTROL_ACK, FlowControlAckMessage.class);
+    serializer.registerDSFID(FLOW_CONTROL_ABORT, FlowControlAbortMessage.class);
+    serializer.registerDSFID(MGMT_COMPACT_REQUEST,
+        org.apache.geode.management.internal.messages.CompactRequest.class);
+    serializer.registerDSFID(MGMT_COMPACT_RESPONSE,
+        org.apache.geode.management.internal.messages.CompactResponse.class);
+    serializer.registerDSFID(MGMT_FEDERATION_COMPONENT,
+        org.apache.geode.management.internal.FederationComponent.class);
+    serializer.registerDSFID(LOCATOR_STATUS_REQUEST, LocatorStatusRequest.class);
+    serializer.registerDSFID(LOCATOR_STATUS_RESPONSE, LocatorStatusResponse.class);
+    serializer.registerDSFID(R_FETCH_VERSION_MESSAGE, RemoteFetchVersionMessage.class);
+    serializer.registerDSFID(R_FETCH_VERSION_REPLY,
+        RemoteFetchVersionMessage.FetchVersionReplyMessage.class);
+    serializer.registerDSFID(RELEASE_CLEAR_LOCK_MESSAGE, ReleaseClearLockMessage.class);
+    serializer.registerDSFID(PR_TOMBSTONE_MESSAGE, PRTombstoneMessage.class);
+    serializer.registerDSFID(REQUEST_RVV_MESSAGE, InitialImageOperation.RequestRVVMessage.class);
+    serializer.registerDSFID(RVV_REPLY_MESSAGE, InitialImageOperation.RVVReplyMessage.class);
+    serializer.registerDSFID(SNAPPY_COMPRESSED_CACHED_DESERIALIZABLE,
+        SnappyCompressedCachedDeserializable.class);
+    serializer.registerDSFID(UPDATE_ENTRY_VERSION_MESSAGE, UpdateEntryVersionMessage.class);
+    serializer.registerDSFID(PR_UPDATE_ENTRY_VERSION_MESSAGE, PRUpdateEntryVersionMessage.class);
+    serializer.registerDSFID(PR_FETCH_BULK_ENTRIES_MESSAGE, FetchBulkEntriesMessage.class);
+    serializer.registerDSFID(PR_FETCH_BULK_ENTRIES_REPLY_MESSAGE,
+        FetchBulkEntriesReplyMessage.class);
+    serializer.registerDSFID(PR_QUERY_TRACE_INFO, PRQueryTraceInfo.class);
+    serializer.registerDSFID(INDEX_CREATION_DATA, IndexCreationData.class);
+    serializer.registerDSFID(DIST_TX_OP, DistTxEntryEvent.class);
+    serializer.registerDSFID(DIST_TX_PRE_COMMIT_RESPONSE, DistTxPrecommitResponse.class);
+    serializer.registerDSFID(DIST_TX_THIN_ENTRY_STATE, TXEntryState.DistTxThinEntryState.class);
+    serializer.registerDSFID(SERVER_PING_MESSAGE, ServerPingMessage.class);
+    serializer.registerDSFID(PR_DESTROY_ON_DATA_STORE_MESSAGE,
+        DestroyRegionOnDataStoreMessage.class);
+    serializer.registerDSFID(SHUTDOWN_ALL_GATEWAYHUBS_REQUEST, ShutdownAllGatewayHubsRequest.class);
+    serializer.registerDSFID(BUCKET_COUNT_LOAD_PROBE, BucketCountLoadProbe.class);
+    serializer.registerDSFID(GATEWAY_SENDER_QUEUE_ENTRY_SYNCHRONIZATION_MESSAGE,
+        GatewaySenderQueueEntrySynchronizationOperation.GatewaySenderQueueEntrySynchronizationMessage.class);
+    serializer.registerDSFID(GATEWAY_SENDER_QUEUE_ENTRY_SYNCHRONIZATION_ENTRY,
+        GatewaySenderQueueEntrySynchronizationOperation.GatewaySenderQueueEntrySynchronizationEntry.class);
+    serializer.registerDSFID(ABORT_BACKUP_REQUEST, AbortBackupRequest.class);
   }
 
   /**
@@ -62,42 +974,102 @@ public class DSFIDFactory {
    * data input.
    */
   public Object create(int dsfid, DataInput in) throws IOException, ClassNotFoundException {
-    final Constructor<?> cons;
-    if (dsfid >= Byte.MIN_VALUE && dsfid <= Byte.MAX_VALUE) {
-      cons = dsfidMap[dsfid + Byte.MAX_VALUE + 1];
-    } else {
-      cons = (Constructor<?>) dsfidMap2.get(dsfid);
-    }
-    if (cons != null) {
-      try {
-        Object ds = cons.newInstance((Object[]) null);
-        InternalDataSerializer.invokeFromData(ds, in);
-        return ds;
-      } catch (InstantiationException ie) {
-        throw new IOException(ie.getMessage(), ie);
-      } catch (IllegalAccessException iae) {
-        throw new IOException(iae.getMessage(), iae);
-      } catch (InvocationTargetException ite) {
-        Throwable targetEx = ite.getTargetException();
-        if (targetEx instanceof IOException) {
-          throw (IOException) targetEx;
-        } else if (targetEx instanceof ClassNotFoundException) {
-          throw (ClassNotFoundException) targetEx;
-        } else {
-          throw new IOException(ite.getMessage(), targetEx);
-        }
-      }
+    switch (dsfid) {
+      case REGION:
+        return (DataSerializableFixedID) DataSerializer.readRegion(in);
+      case END_OF_STREAM_TOKEN:
+        return Token.END_OF_STREAM;
+      case DLOCK_REMOTE_TOKEN:
+        return DLockRemoteToken.createFromDataInput(in);
+      case TRANSACTION_ID:
+        return TXId.createFromData(in);
+      case INTEREST_RESULT_POLICY:
+        return readInterestResultPolicy(in);
+      case UNDEFINED:
+        return readUndefined(in);
+      case RESULTS_BAG:
+        return readResultsBag(in);
+      case TOKEN_INVALID:
+        return Token.INVALID;
+      case TOKEN_LOCAL_INVALID:
+        return Token.LOCAL_INVALID;
+      case TOKEN_DESTROYED:
+        return Token.DESTROYED;
+      case TOKEN_REMOVED:
+        return Token.REMOVED_PHASE1;
+      case TOKEN_REMOVED2:
+        return Token.REMOVED_PHASE2;
+      case TOKEN_TOMBSTONE:
+        return Token.TOMBSTONE;
+      case NULL_TOKEN:
+        return readNullToken(in);
+      case CONFIGURATION_RESPONSE:
+        return readConfigurationResponse(in);
+      case PR_DESTROY_ON_DATA_STORE_MESSAGE:
+        return readDestroyOnDataStore(in);
+      default:
+        return serializer.create(dsfid, in);
     }
-    throw new DSFIDNotFoundException("Unknown DataSerializableFixedID: " + dsfid, dsfid);
   }
 
 
-  public Constructor<?>[] getDsfidmap() {
-    return dsfidMap;
+  ////////////////// Reading Internal Objects /////////////////
+  /**
+   * Reads an instance of <code>IpAddress</code> from a <code>DataInput</code>.
+   *
+   * @throws IOException A problem occurs while reading from <code>in</code>
+   */
+  public static InternalDistributedMember readInternalDistributedMember(DataInput in)
+      throws IOException, ClassNotFoundException {
+
+    InternalDistributedMember o = new InternalDistributedMember();
+    InternalDataSerializer.invokeFromData(o, in);
+    return o;
+  }
+
+  private static ResultsBag readResultsBag(DataInput in)
+      throws IOException, ClassNotFoundException {
+    ResultsBag o = new ResultsBag(true);
+    InternalDataSerializer.invokeFromData(o, in);
+    return o;
+  }
+
+  private static Undefined readUndefined(DataInput in) throws IOException, ClassNotFoundException {
+    Undefined o = (Undefined) QueryService.UNDEFINED;
+    InternalDataSerializer.invokeFromData(o, in);
+    return o;
+  }
+
+  /**
+   * Reads an instance of <code>InterestResultPolicy</code> from a <code>DataInput</code>.
+   *
+   * @throws IOException A problem occurs while reading from <code>in</code>
+   */
+  private static InterestResultPolicyImpl readInterestResultPolicy(DataInput in)
+      throws IOException, ClassNotFoundException {
+    byte ordinal = in.readByte();
+    return (InterestResultPolicyImpl) InterestResultPolicy.fromOrdinal(ordinal);
+  }
+
+  private static DataSerializableFixedID readDestroyOnDataStore(DataInput in)
+      throws IOException, ClassNotFoundException {
+    DataSerializableFixedID serializable = new DestroyRegionOnDataStoreMessage();
+    serializable.fromData(in);
+    return serializable;
+  }
+
+  private static DataSerializableFixedID readNullToken(DataInput in)
+      throws IOException, ClassNotFoundException {
+    DataSerializableFixedID serializable = (NullToken) IndexManager.NULL;
+    serializable.fromData(in);
+    return serializable;
   }
 
-  public Int2ObjectOpenHashMap getDsfidmap2() {
-    return dsfidMap2;
+  private static DataSerializableFixedID readConfigurationResponse(DataInput in)
+      throws IOException, ClassNotFoundException {
+    DataSerializableFixedID serializable = new ConfigurationResponse();
+    serializable.fromData(in);
+    return serializable;
   }
 
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/ExternalizableDSFID.java b/geode-core/src/main/java/org/apache/geode/internal/ExternalizableDSFID.java
index d11c044..692a213 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/ExternalizableDSFID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/ExternalizableDSFID.java
@@ -21,6 +21,8 @@ import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+
 /**
  * Abstract class for subclasses that want to be Externalizable in addition to being
  * DataSerializableFixedID.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java b/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
index 09c117d..7f16e5c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
@@ -12,29 +12,18 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.serialization;
+package org.apache.geode.internal;
 
 import java.io.DataOutput;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.UTFDataFormatException;
 import java.nio.BufferOverflowException;
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.ByteBufferWriter;
-import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
-import org.apache.geode.internal.logging.LogService;
-import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
+import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
 /**
  * HeapDataOutputStream is an OutputStream that also implements DataOutput and stores all data
@@ -53,28 +42,9 @@ import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
  *
  * @since GemFire 5.0.2
  */
-public class HeapDataOutputStream extends OutputStream
-    implements ObjToByteArraySerializer, VersionedDataStream, ByteBufferWriter {
-  private static final Logger logger = LogService.getLogger();
-
-  ByteBuffer buffer;
-  protected LinkedList<ByteBuffer> chunks = null;
-  protected int size = 0;
-  /**
-   * True if this stream is currently setup for writing. Once it switches to reading then it must be
-   * reset before it can be written again.
-   */
-  private boolean writeMode = true;
-  private boolean ignoreWrites = false; // added for bug 39569
-  private final int MIN_CHUNK_SIZE;
-  private boolean disallowExpansion = false;
-  private Error expansionException = null;
-  private int memoPosition;
-  private Version version;
-  private boolean doNotCopy;
-
-  static final int SMALLEST_CHUNK_SIZE = 32;
-  private static final int INITIAL_CAPACITY = 1024;
+public class HeapDataOutputStream extends
+    org.apache.geode.internal.serialization.BufferDataOutputStream
+    implements ObjToByteArraySerializer, ByteBufferWriter {
 
   public HeapDataOutputStream(Version version) {
     this(INITIAL_CAPACITY, version);
@@ -85,16 +55,7 @@ public class HeapDataOutputStream extends OutputStream
    * be written to this stream encoded as utf.
    */
   public HeapDataOutputStream(String s) {
-    int maxStrBytes;
-    if (ASCII_STRINGS) {
-      maxStrBytes = s.length();
-    } else {
-      maxStrBytes = s.length() * 3;
-    }
-    this.MIN_CHUNK_SIZE = INITIAL_CAPACITY;
-    this.buffer = ByteBuffer.allocate(maxStrBytes);
-    this.doNotCopy = false;
-    writeUTFNoLength(s);
+    super(s);
   }
 
   public HeapDataOutputStream(int allocSize, Version version) {
@@ -106,14 +67,7 @@ public class HeapDataOutputStream extends OutputStream
    *        instead referenced.
    */
   public HeapDataOutputStream(int allocSize, Version version, boolean doNotCopy) {
-    if (allocSize < SMALLEST_CHUNK_SIZE) {
-      this.MIN_CHUNK_SIZE = SMALLEST_CHUNK_SIZE;
-    } else {
-      this.MIN_CHUNK_SIZE = allocSize;
-    }
-    this.buffer = ByteBuffer.allocate(allocSize);
-    this.version = version;
-    this.doNotCopy = doNotCopy;
+    super(allocSize, version == null ? Version.CURRENT_ORDINAL : version.ordinal(), doNotCopy);
   }
 
   /**
@@ -121,18 +75,7 @@ public class HeapDataOutputStream extends OutputStream
    *        instead referenced.
    */
   public HeapDataOutputStream(ByteBuffer initialBuffer, Version version, boolean doNotCopy) {
-    if (initialBuffer.position() != 0) {
-      initialBuffer = initialBuffer.slice();
-    }
-    int allocSize = initialBuffer.capacity();
-    if (allocSize < 32) {
-      this.MIN_CHUNK_SIZE = 32;
-    } else {
-      this.MIN_CHUNK_SIZE = allocSize;
-    }
-    this.buffer = initialBuffer;
-    this.version = version;
-    this.doNotCopy = doNotCopy;
+    super(initialBuffer, version == null ? Version.CURRENT_ORDINAL : version.ordinal(), doNotCopy);
   }
 
   /**
@@ -141,201 +84,7 @@ public class HeapDataOutputStream extends OutputStream
    *
    */
   public HeapDataOutputStream(byte[] bytes) {
-    int len = bytes.length;
-    if (len <= 0) {
-      throw new IllegalArgumentException("The byte array must not be empty");
-    }
-    if (len > 32) {
-      this.MIN_CHUNK_SIZE = len;
-    } else {
-      this.MIN_CHUNK_SIZE = 32;
-    }
-    this.buffer = ByteBuffer.wrap(bytes);
-    this.doNotCopy = false;
-  }
-
-  /**
-   * Returns true if this HDOS currently does not copy byte arrays/buffers written to it. Instead of
-   * copying a reference is kept to the original array/buffer.
-   */
-  public boolean setDoNotCopy(boolean v) {
-    boolean result = this.doNotCopy;
-    if (result != v) {
-      this.doNotCopy = v;
-    }
-    return result;
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public Version getVersion() {
-    return this.version;
-  }
-
-  /*
-   * throw an exception instead of allocating a new buffer. The exception is a
-   * BufferOverflowException thrown from expand, and will restore the position to the point at which
-   * the flag was set with the disallowExpansion method.
-   *
-   * @param ee the exception to throw if expansion is needed
-   */
-  public void disallowExpansion(Error ee) {
-    this.disallowExpansion = true;
-    this.expansionException = ee;
-    this.memoPosition = this.buffer.position();
-  }
-
-  /**
-   * If this HeapDataOutputStream detects that it needs to
-   * grow then it will throw an IllegalStateException.
-   */
-  public void disallowExpansion() {
-    this.disallowExpansion = true;
-  }
-
-  /** write the low-order 8 bits of the given int */
-  @Override
-  public void write(int b) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(1);
-    buffer.put((byte) (b & 0xff));
-  }
-
-  private void ensureCapacity(int amount) {
-    int remainingSpace = this.buffer.capacity() - this.buffer.position();
-    if (amount > remainingSpace) {
-      expand(amount);
-    }
-  }
-
-  private void expand(int amount) {
-    if (this.disallowExpansion) {
-      if (this.expansionException != null) {
-        this.ignoreWrites = true;
-        this.buffer.position(this.memoPosition);
-        throw this.expansionException;
-      } else {
-        throw new IllegalStateException("initial buffer size was exceeded");
-      }
-    }
-
-    final ByteBuffer oldBuffer = this.buffer;
-    if (this.chunks == null) {
-      this.chunks = new LinkedList<ByteBuffer>();
-    }
-    oldBuffer.flip(); // now ready for reading
-    this.size += oldBuffer.remaining();
-    this.chunks.add(oldBuffer);
-    if (amount < MIN_CHUNK_SIZE) {
-      amount = MIN_CHUNK_SIZE;
-    }
-    this.buffer = ByteBuffer.allocate(amount);
-  }
-
-  private void checkIfWritable() {
-    if (!this.writeMode) {
-      throw new IllegalStateException(
-          "not in write mode");
-    }
-  }
-
-  /** override OutputStream's write() */
-  @Override
-  public void write(byte[] source, int offset, int len) {
-    if (len == 0)
-      return;
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    if (this.doNotCopy && len > MIN_TO_COPY) {
-      moveBufferToChunks();
-      addToChunks(source, offset, len);
-    } else {
-      int remainingSpace = this.buffer.capacity() - this.buffer.position();
-      if (remainingSpace < len) {
-        this.buffer.put(source, offset, remainingSpace);
-        offset += remainingSpace;
-        len -= remainingSpace;
-        ensureCapacity(len);
-      }
-      this.buffer.put(source, offset, len);
-    }
-  }
-
-  private void addToChunks(byte[] source, int offset, int len) {
-    ByteBuffer bb = ByteBuffer.wrap(source, offset, len).slice();
-    bb = bb.slice();
-    this.size += bb.remaining();
-    this.chunks.add(bb);
-  }
-
-  private void addToChunks(ByteBuffer bb) {
-    int remaining = bb.remaining();
-    if (remaining > 0) {
-      this.size += remaining;
-      if (bb.position() != 0) {
-        bb = bb.slice();
-      }
-      this.chunks.add(bb);
-    }
-  }
-
-  public int getByteBufferCount() {
-    int result = 0;
-    if (this.chunks != null) {
-      result += this.chunks.size();
-    }
-    if (this.buffer.remaining() > 0) {
-      result++;
-    }
-    return result;
-  }
-
-  public void fillByteBufferArray(ByteBuffer[] bbArray, int offset) {
-    if (this.chunks != null) {
-      for (ByteBuffer bb : this.chunks) {
-        bbArray[offset++] = bb;
-      }
-    }
-    if (this.buffer.remaining() > 0) {
-      bbArray[offset] = this.buffer;
-    }
-  }
-
-  private void moveBufferToChunks() {
-    final ByteBuffer oldBuffer = this.buffer;
-    if (this.chunks == null) {
-      this.chunks = new LinkedList<ByteBuffer>();
-    }
-    if (oldBuffer.position() == 0) {
-      // if position is zero then nothing has been written (yet) to buffer so no need to move it to
-      // chunks
-      return;
-    }
-    oldBuffer.flip();
-    this.size += oldBuffer.remaining();
-    ByteBuffer bufToAdd = oldBuffer.slice();
-    this.chunks.add(bufToAdd);
-    int newPos = oldBuffer.limit();
-    if ((oldBuffer.capacity() - newPos) <= 0) {
-      this.buffer = ByteBuffer.allocate(MIN_CHUNK_SIZE);
-    } else {
-      oldBuffer.limit(oldBuffer.capacity());
-      oldBuffer.position(newPos);
-      this.buffer = oldBuffer.slice();
-    }
-  }
-
-  public int size() {
-    if (this.writeMode) {
-      return this.size + this.buffer.position();
-    } else {
-      return this.size;
-    }
+    super(bytes);
   }
 
   /**
@@ -352,147 +101,6 @@ public class HeapDataOutputStream extends OutputStream
     }
   }
 
-  private void consolidateChunks() {
-    if (this.chunks != null) {
-      final int size = size();
-      ByteBuffer newBuffer = ByteBuffer.allocate(size);
-      for (ByteBuffer bb : this.chunks) {
-        newBuffer.put(bb);
-      }
-      this.chunks = null;
-      newBuffer.put(this.buffer);
-      this.buffer = newBuffer;
-      this.buffer.flip(); // now ready for reading
-    }
-  }
-
-  private void consolidateChunks(int startPosition) {
-    assert startPosition < SMALLEST_CHUNK_SIZE;
-    final int size = size() - startPosition;
-    ByteBuffer newBuffer = ByteBuffer.allocate(size);
-    if (this.chunks != null) {
-      this.chunks.getFirst().position(startPosition);
-      for (ByteBuffer bb : this.chunks) {
-        newBuffer.put(bb);
-      }
-      this.chunks = null;
-    } else {
-      this.buffer.position(startPosition);
-    }
-    newBuffer.put(this.buffer);
-    newBuffer.flip(); // now ready for reading
-    this.buffer = newBuffer;
-  }
-
-  /**
-   * Prepare the contents for sending again
-   */
-  public void rewind() {
-    finishWriting();
-    this.size = 0;
-    if (this.chunks != null) {
-      for (ByteBuffer bb : this.chunks) {
-        bb.rewind();
-        size += bb.remaining();
-      }
-    }
-    this.buffer.rewind();
-    size += this.buffer.remaining();
-  }
-
-  public void reset() {
-    this.size = 0;
-    if (this.chunks != null) {
-      this.chunks.clear();
-      this.chunks = null;
-    }
-    this.buffer.clear();
-    this.writeMode = true;
-    this.ignoreWrites = false;
-    this.disallowExpansion = false;
-    this.expansionException = null;
-  }
-
-  @Override
-  public void flush() {
-    // noop
-  }
-
-  public void finishWriting() {
-    if (this.writeMode) {
-      this.ignoreWrites = false;
-      this.writeMode = false;
-      this.buffer.flip();
-      this.size += this.buffer.remaining();
-    }
-  }
-
-  /**
-   * Returns a ByteBuffer of the unused buffer; returns null if the buffer was completely used.
-   */
-  public ByteBuffer finishWritingAndReturnUnusedBuffer() {
-    finishWriting();
-    ByteBuffer result = this.buffer.duplicate();
-    if (result.remaining() == 0) {
-      // buffer was never used.
-      result.limit(result.capacity());
-      return result;
-    }
-    int newPos = result.limit();
-    if ((result.capacity() - newPos) > 0) {
-      result.limit(result.capacity());
-      result.position(newPos);
-      return result.slice();
-    } else {
-      return null;
-    }
-  }
-
-  @Override
-  public void close() {
-    reset();
-  }
-
-  /**
-   * gets the contents of this stream as a ByteBuffer, ready for reading. The stream should not be
-   * written to past this point until it has been reset.
-   */
-  public ByteBuffer toByteBuffer() {
-    finishWriting();
-    consolidateChunks();
-    return this.buffer;
-  }
-
-  /**
-   * gets the contents of this stream as a ByteBuffer, ready for reading. The stream should not be
-   * written to past this point until it has been reset.
-   *
-   * @param startPosition the position of the first byte to copy into the returned buffer.
-   */
-  public ByteBuffer toByteBuffer(int startPosition) {
-    finishWriting();
-    consolidateChunks(startPosition);
-    return this.buffer;
-  }
-
-  /**
-   * gets the contents of this stream as a byte[]. The stream should not be written to past this
-   * point until it has been reset.
-   */
-  public byte[] toByteArray() {
-    ByteBuffer bb = toByteBuffer();
-    if (bb.hasArray() && bb.arrayOffset() == 0 && bb.limit() == bb.capacity()) {
-      return bb.array();
-    } else {
-      // create a new buffer of just the right size and copy the old buffer into it
-      ByteBuffer tmp = ByteBuffer.allocate(bb.remaining());
-      tmp.put(bb);
-      tmp.flip();
-      this.buffer = tmp;
-      return this.buffer.array();
-    }
-  }
-
 
   /**
    * Writes this stream to the wrapper object of BytesAndBitsForCompactor type. The byte array
@@ -597,16 +205,6 @@ public class HeapDataOutputStream extends OutputStream
     this.size -= bytesSent;
   }
 
-  private void flushBuffer(SocketChannel sc, ByteBuffer out) throws IOException {
-    if (out.position() == 0)
-      return;
-    out.flip();
-    while (out.remaining() > 0) {
-      sc.write(out);
-    }
-    out.clear();
-  }
-
   /**
    * Write the contents of this stream to the byte buffer.
    *
@@ -685,15 +283,6 @@ public class HeapDataOutputStream extends OutputStream
     return bytesToWrite;
   }
 
-  public static void flushStream(OutputStream out, ByteBuffer outBuf) throws IOException {
-    if (outBuf.position() == 0)
-      return;
-    assert outBuf.hasArray();
-    outBuf.flip();
-    out.write(outBuf.array(), outBuf.arrayOffset(), outBuf.remaining());
-    outBuf.clear();
-  }
-
   /**
    * Write the contents of this stream to the specified stream.
    */
@@ -716,129 +305,6 @@ public class HeapDataOutputStream extends OutputStream
   }
 
   /**
-   * Returns an input stream that can be used to read the contents that where written to this output
-   * stream.
-   */
-  public InputStream getInputStream() {
-    return new HDInputStream();
-  }
-
-  private class HDInputStream extends InputStream {
-    private Iterator<ByteBuffer> chunkIt;
-    private ByteBuffer bb;
-
-    public HDInputStream() {
-      finishWriting();
-      if (HeapDataOutputStream.this.chunks != null) {
-        this.chunkIt = HeapDataOutputStream.this.chunks.iterator();
-        nextChunk();
-      } else {
-        this.chunkIt = null;
-        this.bb = HeapDataOutputStream.this.buffer;
-      }
-    }
-
-    private void nextChunk() {
-      if (this.chunkIt != null) {
-        if (this.chunkIt.hasNext()) {
-          this.bb = this.chunkIt.next();
-        } else {
-          this.chunkIt = null;
-          this.bb = HeapDataOutputStream.this.buffer;
-        }
-      } else {
-        this.bb = null; // EOF
-      }
-    }
-
-    @Override
-    public int available() {
-      return size();
-    }
-
-    @Override
-    public int read() {
-      if (available() <= 0) {
-        return -1;
-      } else {
-        int remaining = this.bb.limit() - this.bb.position();
-        while (remaining == 0) {
-          nextChunk();
-          remaining = this.bb.limit() - this.bb.position();
-        }
-        consume(1);
-        return this.bb.get() & 0xFF; // fix for bug 37068
-      }
-    }
-
-    @Override
-    public int read(byte[] dst, int off, int len) {
-      if (available() <= 0) {
-        return -1;
-      } else {
-        int readCount = 0;
-        while (len > 0 && this.bb != null) {
-          if (this.bb.limit() == this.bb.position()) {
-            nextChunk();
-          } else {
-            int remaining = this.bb.limit() - this.bb.position();
-            int bytesToRead = len;
-            if (len > remaining) {
-              bytesToRead = remaining;
-            }
-            this.bb.get(dst, off, bytesToRead);
-            off += bytesToRead;
-            len -= bytesToRead;
-            readCount += bytesToRead;
-          }
-        }
-        consume(readCount);
-        return readCount;
-      }
-    }
-
-    @Override
-    public long skip(long n) {
-      int remaining = size();
-      if (remaining <= n) {
-        // just skip over bytes remaining
-        this.chunkIt = null;
-        this.bb = null;
-        consume(remaining);
-        return remaining;
-      } else {
-        long skipped = 0;
-        do {
-          long skipsRemaining = n - skipped;
-          skipped += chunkSkip(skipsRemaining);
-        } while (skipped != n);
-        return n;
-      }
-    }
-
-    private long chunkSkip(long n) {
-      int remaining = this.bb.limit() - this.bb.position();
-      if (remaining <= n) {
-        // skip this whole chunk
-        this.bb.position(this.bb.limit());
-        nextChunk();
-        consume(remaining);
-        return remaining;
-      } else {
-        // skip over just a part of this chunk
-        this.bb.position(this.bb.position() + (int) n);
-        consume((int) n);
-        return n;
-      }
-    }
-
-    private void consume(int c) {
-      HeapDataOutputStream.this.size -= c;
-    }
-
-  }
-
-  /**
    * Write the contents of this stream to the specified stream.
    * <p>
    * Note this implementation is exactly the same as writeTo(OutputStream) but they do not both
@@ -880,445 +346,6 @@ public class HeapDataOutputStream extends OutputStream
   }
 
   // DataOutput methods
-  /**
-   * Writes a <code>boolean</code> value to this output stream. If the argument <code>v</code> is
-   * <code>true</code>, the value <code>(byte)1</code> is written; if <code>v</code> is
-   * <code>false</code>, the value <code>(byte)0</code> is written. The byte written by this method
-   * may be read by the <code>readBoolean</code> method of interface <code>DataInput</code>, which
-   * will then return a <code>boolean</code> equal to <code>v</code>.
-   *
-   * @param v the boolean to be written.
-   */
-  @Override
-  public void writeBoolean(boolean v) {
-    write(v ? 1 : 0);
-  }
-
-  /**
-   * Writes to the output stream the eight low- order bits of the argument <code>v</code>. The 24
-   * high-order bits of <code>v</code> are ignored. (This means that <code>writeByte</code> does
-   * exactly the same thing as <code>write</code> for an integer argument.) The byte written by this
-   * method may be read by the <code>readByte</code> method of interface <code>DataInput</code>,
-   * which will then return a <code>byte</code> equal to <code>(byte)v</code>.
-   *
-   * @param v the byte value to be written.
-   */
-  @Override
-  public void writeByte(int v) {
-    write(v);
-  }
-
-  /**
-   * Writes two bytes to the output stream to represent the value of the argument. The byte values
-   * to be written, in the order shown, are:
-   * <p>
-   *
-   * <pre>
-   * <code>
-   * (byte)(0xff &amp; (v &gt;&gt; 8))
-   * (byte)(0xff &amp; v)
-   * </code>
-   * </pre>
-   * <p>
-   * The bytes written by this method may be read by the <code>readShort</code> method of interface
-   * <code>DataInput</code> , which will then return a <code>short</code> equal to
-   * <code>(short)v</code>.
-   *
-   * @param v the <code>short</code> value to be written.
-   */
-  @Override
-  public void writeShort(int v) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(2);
-    buffer.putShort((short) (v & 0xffff));
-  }
-
-  /**
-   * Writes a <code>char</code> value, wich is comprised of two bytes, to the output stream. The
-   * byte values to be written, in the order shown, are:
-   * <p>
-   *
-   * <pre>
-   * <code>
-   * (byte)(0xff &amp; (v &gt;&gt; 8))
-   * (byte)(0xff &amp; v)
-   * </code>
-   * </pre>
-   * <p>
-   * The bytes written by this method may be read by the <code>readChar</code> method of interface
-   * <code>DataInput</code> , which will then return a <code>char</code> equal to
-   * <code>(char)v</code>.
-   *
-   * @param v the <code>char</code> value to be written.
-   */
-  @Override
-  public void writeChar(int v) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(2);
-    buffer.putChar((char) v);
-  }
-
-  /**
-   * Writes an <code>int</code> value, which is comprised of four bytes, to the output stream. The
-   * byte values to be written, in the order shown, are:
-   * <p>
-   *
-   * <pre>
-   * <code>
-   * (byte)(0xff &amp; (v &gt;&gt; 24))
-   * (byte)(0xff &amp; (v &gt;&gt; 16))
-   * (byte)(0xff &amp; (v &gt;&gt; &#32; &#32;8))
-   * (byte)(0xff &amp; v)
-   * </code>
-   * </pre>
-   * <p>
-   * The bytes written by this method may be read by the <code>readInt</code> method of interface
-   * <code>DataInput</code> , which will then return an <code>int</code> equal to <code>v</code>.
-   *
-   * @param v the <code>int</code> value to be written.
-   */
-  @Override
-  public void writeInt(int v) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(4);
-    buffer.putInt(v);
-  }
-
-  /**
-   * Writes a <code>long</code> value, which is comprised of eight bytes, to the output stream. The
-   * byte values to be written, in the order shown, are:
-   * <p>
-   *
-   * <pre>
-   * <code>
-   * (byte)(0xff &amp; (v &gt;&gt; 56))
-   * (byte)(0xff &amp; (v &gt;&gt; 48))
-   * (byte)(0xff &amp; (v &gt;&gt; 40))
-   * (byte)(0xff &amp; (v &gt;&gt; 32))
-   * (byte)(0xff &amp; (v &gt;&gt; 24))
-   * (byte)(0xff &amp; (v &gt;&gt; 16))
-   * (byte)(0xff &amp; (v &gt;&gt;  8))
-   * (byte)(0xff &amp; v)
-   * </code>
-   * </pre>
-   * <p>
-   * The bytes written by this method may be read by the <code>readLong</code> method of interface
-   * <code>DataInput</code> , which will then return a <code>long</code> equal to <code>v</code>.
-   *
-   * @param v the <code>long</code> value to be written.
-   */
-  @Override
-  public void writeLong(long v) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(8);
-    buffer.putLong(v);
-  }
-
-  /**
-   * Reserves space in the output for a long and returns a LongUpdater than can be used to update
-   * this particular long.
-   *
-   * @return the LongUpdater that allows the long to be updated
-   */
-  public LongUpdater reserveLong() {
-    if (this.ignoreWrites)
-      return null;
-    checkIfWritable();
-    ensureCapacity(8);
-    LongUpdater result = new LongUpdater(this.buffer);
-    buffer.putLong(0L);
-    return result;
-  }
-
-  public static class LongUpdater {
-    private final ByteBuffer bb;
-    private final int pos;
-
-    public LongUpdater(ByteBuffer bb) {
-      this.bb = bb;
-      this.pos = bb.position();
-    }
-
-    public void update(long v) {
-      this.bb.putLong(this.pos, v);
-    }
-  }
-
-  /**
-   * Writes a <code>float</code> value, which is comprised of four bytes, to the output stream. It
-   * does this as if it first converts this <code>float</code> value to an <code>int</code> in
-   * exactly the manner of the <code>Float.floatToIntBits</code> method and then writes the
-   * <code>int</code> value in exactly the manner of the <code>writeInt</code> method. The bytes
-   * written by this method may be read by the <code>readFloat</code> method of interface
-   * <code>DataInput</code>, which will then return a <code>float</code> equal to <code>v</code>.
-   *
-   * @param v the <code>float</code> value to be written.
-   */
-  @Override
-  public void writeFloat(float v) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(4);
-    buffer.putFloat(v);
-  }
-
-  /**
-   * Writes a <code>double</code> value, which is comprised of eight bytes, to the output stream. It
-   * does this as if it first converts this <code>double</code> value to a <code>long</code> in
-   * exactly the manner of the <code>Double.doubleToLongBits</code> method and then writes the
-   * <code>long</code> value in exactly the manner of the <code>writeLong</code> method. The bytes
-   * written by this method may be read by the <code>readDouble</code> method of interface
-   * <code>DataInput</code>, which will then return a <code>double</code> equal to <code>v</code>.
-   *
-   * @param v the <code>double</code> value to be written.
-   */
-  @Override
-  public void writeDouble(double v) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    ensureCapacity(8);
-    buffer.putDouble(v);
-  }
-
-  /**
-   * Writes a string to the output stream. For every character in the string <code>s</code>, taken
-   * in order, one byte is written to the output stream. If <code>s</code> is <code>null</code>, a
-   * <code>NullPointerException</code> is thrown.
-   * <p>
-   * If <code>s.length</code> is zero, then no bytes are written. Otherwise, the character
-   * <code>s[0]</code> is written first, then <code>s[1]</code>, and so on; the last character
-   * written is <code>s[s.length-1]</code>. For each character, one byte is written, the low-order
-   * byte, in exactly the manner of the <code>writeByte</code> method . The high-order eight bits of
-   * each character in the string are ignored.
-   *
-   * @param str the string of bytes to be written.
-   */
-  @Override
-  public void writeBytes(String str) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    int strlen = str.length();
-    if (strlen > 0) {
-      ensureCapacity(strlen);
-      // I know this is a deprecated method but it is PERFECT for this impl.
-      if (this.buffer.hasArray()) {
-        // I know this is a deprecated method but it is PERFECT for this impl.
-        int pos = this.buffer.position();
-        str.getBytes(0, strlen, this.buffer.array(), this.buffer.arrayOffset() + pos);
-        this.buffer.position(pos + strlen);
-      } else {
-        byte[] bytes = new byte[strlen];
-        str.getBytes(0, strlen, bytes, 0);
-        this.buffer.put(bytes);
-      }
-      // for (int i = 0 ; i < len ; i++) {
-      // this.buffer.put((byte)s.charAt(i));
-      // }
-    }
-  }
-
-  /**
-   * Writes every character in the string <code>s</code>, to the output stream, in order, two bytes
-   * per character. If <code>s</code> is <code>null</code>, a <code>NullPointerException</code> is
-   * thrown. If <code>s.length</code> is zero, then no characters are written. Otherwise, the
-   * character <code>s[0]</code> is written first, then <code>s[1]</code>, and so on; the last
-   * character written is <code>s[s.length-1]</code>. For each character, two bytes are actually
-   * written, high-order byte first, in exactly the manner of the <code>writeChar</code> method.
-   *
-   * @param s the string value to be written.
-   */
-  @Override
-  public void writeChars(String s) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    int len = s.length();
-    if (len > 0) {
-      ensureCapacity(len * 2);
-      for (int i = 0; i < len; i++) {
-        this.buffer.putChar(s.charAt(i));
-      }
-    }
-  }
-
-  /**
-   * Use -Dgemfire.ASCII_STRINGS=true if all String instances contain ASCII characters. Setting this
-   * to true gives a performance improvement.
-   */
-  private static final boolean ASCII_STRINGS =
-      Boolean.getBoolean(DistributionConfig.GEMFIRE_PREFIX + "ASCII_STRINGS");
-
-  /**
-   * Writes two bytes of length information to the output stream, followed by the Java modified UTF
-   * representation of every character in the string <code>s</code>. If <code>s</code> is
-   * <code>null</code>, a <code>NullPointerException</code> is thrown. Each character in the string
-   * <code>s</code> is converted to a group of one, two, or three bytes, depending on the value of
-   * the character.
-   * <p>
-   * If a character <code>c</code> is in the range <code>&#92;u0001</code> through
-   * <code>&#92;u007f</code>, it is represented by one byte:
-   * <p>
-   *
-   * <pre>
-   * (byte) c
-   * </pre>
-   * <p>
-   * If a character <code>c</code> is <code>&#92;u0000</code> or is in the range
-   * <code>&#92;u0080</code> through <code>&#92;u07ff</code>, then it is represented by two bytes,
-   * to be written in the order shown:
-   * <p>
-   *
-   * <pre>
-   * <code>
-   * (byte)(0xc0 | (0x1f &amp; (c &gt;&gt; 6)))
-   * (byte)(0x80 | (0x3f &amp; c))
-   *  </code>
-   * </pre>
-   * <p>
-   * If a character <code>c</code> is in the range <code>&#92;u0800</code> through
-   * <code>uffff</code>, then it is represented by three bytes, to be written in the order shown:
-   * <p>
-   *
-   * <pre>
-   * <code>
-   * (byte)(0xe0 | (0x0f &amp; (c &gt;&gt; 12)))
-   * (byte)(0x80 | (0x3f &amp; (c &gt;&gt;  6)))
-   * (byte)(0x80 | (0x3f &amp; c))
-   *  </code>
-   * </pre>
-   * <p>
-   * First, the total number of bytes needed to represent all the characters of <code>s</code> is
-   * calculated. If this number is larger than <code>65535</code>, then a
-   * <code>UTFDataFormatException</code> is thrown. Otherwise, this length is written to the output
-   * stream in exactly the manner of the <code>writeShort</code> method; after this, the one-, two-,
-   * or three-byte representation of each character in the string <code>s</code> is written.
-   * <p>
-   * The bytes written by this method may be read by the <code>readUTF</code> method of interface
-   * <code>DataInput</code> , which will then return a <code>String</code> equal to <code>s</code>.
-   *
-   * @param str the string value to be written.
-   */
-  @Override
-  public void writeUTF(String str) throws UTFDataFormatException {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    if (ASCII_STRINGS) {
-      writeAsciiUTF(str, true);
-    } else {
-      writeFullUTF(str, true);
-    }
-  }
-
-  private void writeAsciiUTF(String str, boolean encodeLength) throws UTFDataFormatException {
-    int strlen = str.length();
-    if (encodeLength && strlen > 65535) {
-      throw new UTFDataFormatException();
-    }
-
-    int maxLen = strlen;
-    if (encodeLength) {
-      maxLen += 2;
-    }
-    ensureCapacity(maxLen);
-
-    if (encodeLength) {
-      this.buffer.putShort((short) strlen);
-    }
-    if (this.buffer.hasArray()) {
-      // I know this is a deprecated method but it is PERFECT for this impl.
-      int pos = this.buffer.position();
-      str.getBytes(0, strlen, this.buffer.array(), this.buffer.arrayOffset() + pos);
-      this.buffer.position(pos + strlen);
-    } else {
-      for (int i = 0; i < strlen; i++) {
-        this.buffer.put((byte) str.charAt(i));
-      }
-      // byte[] bytes = new byte[strlen];
-      // str.getBytes(0, strlen, bytes, 0);
-      // this.buffer.put(bytes);
-    }
-  }
-
-  /**
-   * The logic used here is based on java's DataOutputStream.writeUTF() from the version 1.6.0_10.
-   * The reader code should use the logic similar to DataOutputStream.readUTF() from the version
-   * 1.6.0_10 to decode this properly.
-   */
-  private void writeFullUTF(String str, boolean encodeLength) throws UTFDataFormatException {
-    int strlen = str.length();
-    if (encodeLength && strlen > 65535) {
-      throw new UTFDataFormatException();
-    }
-    // make room for worst case space 3 bytes for each char and 2 for len
-    {
-      int maxLen = (strlen * 3);
-      if (encodeLength) {
-        maxLen += 2;
-      }
-      ensureCapacity(maxLen);
-    }
-    int utfSizeIdx = this.buffer.position();
-    if (encodeLength) {
-      // skip bytes reserved for length
-      this.buffer.position(utfSizeIdx + 2);
-    }
-    for (int i = 0; i < strlen; i++) {
-      int c = str.charAt(i);
-      if ((c >= 0x0001) && (c <= 0x007F)) {
-        this.buffer.put((byte) c);
-      } else if (c > 0x07FF) {
-        this.buffer.put((byte) (0xE0 | ((c >> 12) & 0x0F)));
-        this.buffer.put((byte) (0x80 | ((c >> 6) & 0x3F)));
-        this.buffer.put((byte) (0x80 | ((c >> 0) & 0x3F)));
-      } else {
-        this.buffer.put((byte) (0xC0 | ((c >> 6) & 0x1F)));
-        this.buffer.put((byte) (0x80 | ((c >> 0) & 0x3F)));
-      }
-    }
-    int utflen = this.buffer.position() - utfSizeIdx;
-    if (encodeLength) {
-      utflen -= 2;
-      if (utflen > 65535) {
-        // act as if we wrote nothing to this buffer
-        this.buffer.position(utfSizeIdx);
-        throw new UTFDataFormatException();
-      }
-      this.buffer.putShort(utfSizeIdx, (short) utflen);
-    }
-  }
-
-  /**
-   * Same as {@link #writeUTF} but it does not encode the length in the first two bytes and allows
-   * strings longer than 65k to be encoded.
-   */
-  public void writeUTFNoLength(String str) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    try {
-      if (ASCII_STRINGS) {
-        writeAsciiUTF(str, false);
-      } else {
-        writeFullUTF(str, false);
-      }
-    } catch (UTFDataFormatException ex) {
-      // this shouldn't happen since we did not encode the length
-      throw new IllegalStateException(
-          String.format("unexpected %s", ex));
-    }
-  }
 
   /**
    * Writes the given object to this stream as a byte array. The byte array is produced by
@@ -1358,48 +385,11 @@ public class HeapDataOutputStream extends OutputStream
   }
 
   /**
-   * We set "doNotCopy" to prevent wasting time by copying bytes. But to do this we create either a
-   * HeapByteBuffer to DirectByteBuffer to reference the byte array or off-heap memory. The
-   * ByteBuffer instance itself uses up memory that needs to be initialized and eventually gc'd so
-   * for smaller sizes it is better to just copy it. Public for unit test access.
-   */
-  public static final int MIN_TO_COPY = 128;
-
-  /**
-   * Write a byte buffer to this HeapDataOutputStream,
-   *
-   * the contents of the buffer between the position and the limit are copied to the output stream.
-   */
-  @Override
-  public void write(ByteBuffer bb) {
-    if (this.ignoreWrites)
-      return;
-    checkIfWritable();
-    int remaining = bb.remaining();
-    if (remaining == 0)
-      return;
-    if (this.doNotCopy && remaining > MIN_TO_COPY) {
-      moveBufferToChunks();
-      addToChunks(bb);
-    } else {
-      int remainingSpace = this.buffer.remaining();
-      if (remainingSpace < remaining) {
-        int oldLimit = bb.limit();
-        bb.limit(bb.position() + remainingSpace);
-        this.buffer.put(bb);
-        bb.limit(oldLimit);
-        ensureCapacity(bb.remaining());
-      }
-      this.buffer.put(bb);
-    }
-  }
-
-  /**
    * Write a byte source to this HeapDataOutputStream,
    *
    * the contents of the buffer between the position and the limit are copied to the output stream.
    */
-  public void write(ByteSource source) {
+  public void write(ByteBufferInputStream.ByteSource source) {
     ByteBuffer bb = source.getBackingByteBuffer();
     if (bb != null) {
       write(bb);
@@ -1418,4 +408,6 @@ public class HeapDataOutputStream extends OutputStream
     }
     source.sendTo(this.buffer);
   }
+
+
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
index 3edfc8e..a6ec1a9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
@@ -108,7 +108,12 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.lang.ClassUtils;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
-import org.apache.geode.internal.util.DscodeHelper;
+import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.DSFIDSerializer;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DscodeHelper;
+import org.apache.geode.internal.serialization.SerializationVersions;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.pdx.NonPortableClassException;
 import org.apache.geode.pdx.PdxInstance;
@@ -287,6 +292,11 @@ public abstract class InternalDataSerializer extends DataSerializer {
    */
   @MakeNotStatic
   private static OldClientSupportService oldClientSupportService;
+
+  private static final DSFIDSerializer dsfidSerializer = new DSFIDSerializer();
+
+  private static DSFIDFactory dsfidFactory;
+
   /**
    * {@code RegistrationListener}s that receive callbacks when {@code DataSerializer}s and {@code
    * Instantiator}s are registered. Note: copy-on-write access used for this set
@@ -296,6 +306,8 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
   static {
     initializeWellKnownSerializers();
+    dsfidFactory = new DSFIDFactory(dsfidSerializer);
+    dsfidFactory.registerDSFIDTypes();
   }
 
   /**
@@ -339,7 +351,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
     if (out instanceof VersionedDataStream) {
       VersionedDataStream vout = (VersionedDataStream) out;
-      Version version = vout.getVersion();
+      Version version = Version.getVersionForDataStream(vout);
       if (null != version) {
         if (version.compareTo(Version.GEODE_1_9_0) < 0) {
           if (name.equals(POST_GEODE_190_SERVER_CQIMPL)) {
@@ -1471,28 +1483,12 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
   public static void writeDSFID(DataSerializableFixedID o, int dsfid, DataOutput out)
       throws IOException {
-    if (dsfidToClassMap != null
-        && logger.isTraceEnabled(LogMarker.SERIALIZER_WRITE_DSFID_VERBOSE)) {
-      logger.trace(LogMarker.SERIALIZER_WRITE_DSFID_VERBOSE, "writeDSFID {} class={}", dsfid,
-          o.getClass());
-      if (dsfid != DataSerializableFixedID.NO_FIXED_ID
-          && dsfid != DataSerializableFixedID.ILLEGAL) {
-        // consistency check to make sure that the same DSFID is not used
-        // for two different classes
-        String newClassName = o.getClass().getName();
-        String existingClassName = dsfidToClassMap.putIfAbsent(dsfid, newClassName);
-        if (existingClassName != null && !existingClassName.equals(newClassName)) {
-          logger.trace(LogMarker.SERIALIZER_WRITE_DSFID_VERBOSE,
-              "dsfid={} is used for class {} and class {}", dsfid, existingClassName, newClassName);
-        }
-      }
-    }
-    if (dsfid == DataSerializableFixedID.NO_FIXED_ID) {
-      out.writeByte(DSCODE.DS_NO_FIXED_ID.toByte());
-      DataSerializer.writeClass(o.getClass(), out);
-    } else {
-      writeDSFIDHeader(dsfid, out);
+    if (dsfid != DataSerializableFixedID.NO_FIXED_ID) {
+      dsfidSerializer.writeDSFID(o, dsfid, out);
+      return;
     }
+    out.writeByte(DSCODE.DS_NO_FIXED_ID.toByte());
+    DataSerializer.writeClass(o.getClass(), out);
     try {
       invokeToData(o, out);
     } catch (IOException | CancelException | ToDataException | GemFireRethrowable io) {
@@ -2069,7 +2065,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
     } else if (o instanceof DataSerializableFixedID) {
       checkPdxCompatible(o, ensurePdxCompatibility);
       DataSerializableFixedID dsfid = (DataSerializableFixedID) o;
-      writeDSFID(dsfid, out);
+      dsfidSerializer.writeDSFID(dsfid, out);
     } else if (autoSerialized(o, out)) {
       // all done
     } else if (o instanceof DataSerializable.Replaceable) {
@@ -2246,7 +2242,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
       try {
         ObjectOutput oos = new ObjectOutputStream(stream);
         if (stream instanceof VersionedDataStream) {
-          Version v = ((VersionedDataStream) stream).getVersion();
+          Version v = Version.getVersionForDataStream((VersionedDataStream) stream);
           if (v != null && v != Version.CURRENT) {
             oos = new VersionedObjectOutput(oos, v);
           }
@@ -2274,6 +2270,10 @@ public abstract class InternalDataSerializer extends DataSerializer {
    */
   public static void invokeToData(Object ds, DataOutput out) throws IOException {
     boolean isDSFID = ds instanceof DataSerializableFixedID;
+    if (isDSFID) {
+      dsfidSerializer.invokeToData(ds, out);
+      return;
+    }
     try {
       boolean invoked = false;
       Version v = InternalDataSerializer.getVersionForDataStreamOrNull(out);
@@ -2301,22 +2301,10 @@ public abstract class InternalDataSerializer extends DataSerializer {
       }
 
       if (!invoked) {
-        if (isDSFID) {
-          ((DataSerializableFixedID) ds).toData(out);
-        } else {
-          ((DataSerializable) ds).toData(out);
-        }
+        ((DataSerializable) ds).toData(out);
       }
     } catch (IOException io) {
-      // DSFID serialization expects an IOException but otherwise
-      // we want to catch it and transform into a ToDataException
-      // since it might be in user code and we want to report it
-      // as a problem with the plugin code
-      if (isDSFID) {
-        throw io;
-      } else {
-        throw new ToDataException("toData failed on DataSerializable " + ds.getClass(), io);
-      }
+      throw new ToDataException("toData failed on DataSerializable " + ds.getClass(), io);
     } catch (CancelException | ToDataException | GemFireRethrowable ex) {
       // Serializing a PDX can result in a cache closed exception. Just rethrow
       throw ex;
@@ -2348,6 +2336,10 @@ public abstract class InternalDataSerializer extends DataSerializer {
    */
   public static void invokeFromData(Object ds, DataInput in)
       throws IOException, ClassNotFoundException {
+    if (ds instanceof DataSerializableFixedID) {
+      dsfidSerializer.invokeFromData(ds, in);
+      return;
+    }
     try {
       boolean invoked = false;
       Version v = InternalDataSerializer.getVersionForDataStreamOrNull(in);
@@ -2373,11 +2365,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
         }
       }
       if (!invoked) {
-        if (ds instanceof DataSerializableFixedID) {
-          ((DataSerializableFixedID) ds).fromData(in);
-        } else {
-          ((DataSerializable) ds).fromData(in);
-        }
+        ((DataSerializable) ds).fromData(in);
 
         if (logger.isTraceEnabled(LogMarker.SERIALIZER_VERBOSE)) {
           logger.trace(LogMarker.SERIALIZER_VERBOSE, "Read {} {}",
@@ -2426,7 +2414,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
   public static Version getVersionForDataStream(DataInput in) {
     // check if this is a versioned data input
     if (in instanceof VersionedDataStream) {
-      final Version v = ((VersionedDataStream) in).getVersion();
+      final Version v = Version.getVersionForDataStream((VersionedDataStream) in);
       return v != null ? v : Version.CURRENT;
     } else {
       // assume latest version
@@ -2441,7 +2429,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
   public static Version getVersionForDataStreamOrNull(DataInput in) {
     // check if this is a versioned data input
     if (in instanceof VersionedDataStream) {
-      return ((VersionedDataStream) in).getVersion();
+      return Version.getVersionForDataStream((VersionedDataStream) in);
     } else {
       // assume latest version
       return null;
@@ -2454,7 +2442,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
   public static Version getVersionForDataStream(DataOutput out) {
     // check if this is a versioned data output
     if (out instanceof VersionedDataStream) {
-      final Version v = ((VersionedDataStream) out).getVersion();
+      final Version v = Version.getVersionForDataStream((VersionedDataStream) out);
       return v != null ? v : Version.CURRENT;
     } else {
       // assume latest version
@@ -2469,7 +2457,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
   public static Version getVersionForDataStreamOrNull(DataOutput out) {
     // check if this is a versioned data output
     if (out instanceof VersionedDataStream) {
-      return ((VersionedDataStream) out).getVersion();
+      return Version.getVersionForDataStream((VersionedDataStream) out);
     } else {
       // assume latest version
       return null;
@@ -2516,13 +2504,13 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
     switch (dscode) {
       case DS_FIXED_ID_BYTE:
-        return DSFIDFactory.create(in.readByte(), in);
+        return dsfidFactory.create(in.readByte(), in);
       case DS_FIXED_ID_SHORT:
-        return DSFIDFactory.create(in.readShort(), in);
+        return dsfidFactory.create(in.readShort(), in);
       case DS_NO_FIXED_ID:
         return readDataSerializable(in);
       case DS_FIXED_ID_INT:
-        return DSFIDFactory.create(in.readInt(), in);
+        return dsfidFactory.create(in.readInt(), in);
       default:
         throw new IllegalStateException("unexpected byte: " + dscode + " while reading dsfid");
     }
@@ -2533,22 +2521,8 @@ public abstract class InternalDataSerializer extends DataSerializer {
     return readDSFID(in, DscodeHelper.toDSCODE(in.readByte()));
   }
 
-  private static int readDSFIDHeader(final DataInput in, DSCODE dscode) throws IOException {
-    switch (dscode) {
-      case DS_FIXED_ID_BYTE:
-        return in.readByte();
-      case DS_FIXED_ID_SHORT:
-        return in.readShort();
-      case DS_FIXED_ID_INT:
-        return in.readInt();
-      default:
-        throw new IllegalStateException("unexpected byte: " + dscode + " while reading dsfid");
-    }
-  }
-
   public static int readDSFIDHeader(final DataInput in) throws IOException {
-    checkIn(in);
-    return readDSFIDHeader(in, DscodeHelper.toDSCODE(in.readByte()));
+    return dsfidSerializer.readDSFIDHeader(in);
   }
 
   /**
@@ -2668,11 +2642,11 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
     switch (headerDSCode) {
       case DS_FIXED_ID_BYTE:
-        return DSFIDFactory.create(in.readByte(), in);
+        return dsfidFactory.create(in.readByte(), in);
       case DS_FIXED_ID_SHORT:
-        return DSFIDFactory.create(in.readShort(), in);
+        return dsfidFactory.create(in.readShort(), in);
       case DS_FIXED_ID_INT:
-        return DSFIDFactory.create(in.readInt(), in);
+        return dsfidFactory.create(in.readInt(), in);
       case DS_NO_FIXED_ID:
       case DATA_SERIALIZABLE:
         return readDataSerializable(in);
@@ -2842,7 +2816,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
       ObjectInput ois = new DSObjectInputStream(stream);
       serializationFilter.setFilterOn((ObjectInputStream) ois);
       if (stream instanceof VersionedDataStream) {
-        Version v = ((VersionedDataStream) stream).getVersion();
+        Version v = Version.getVersionForDataStream((VersionedDataStream) stream);
         if (Version.CURRENT != v && v != null) {
           ois = new VersionedObjectInput(ois, v);
         }
@@ -3306,6 +3280,14 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
   }
 
+  public static DSFIDSerializer getDSFIDSerializer() {
+    return dsfidSerializer;
+  }
+
+  public static DSFIDFactory getDSFIDFactory() {
+    return dsfidFactory;
+  }
+
   /**
    * Any time new serialization format is added then a new enum needs to be added here.
    *
diff --git a/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java b/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java
index f70b3ad..66034b6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/SystemAdmin.java
@@ -1279,12 +1279,7 @@ public class SystemAdmin {
     }
   }
 
-  public SystemAdmin() {
-    // register DSFID types first; invoked explicitly so that all message type
-    // initializations do not happen in first deserialization on a possibly
-    // "precious" thread
-    DSFIDFactory.registerTypes();
-  }
+  public SystemAdmin() {}
 
   private static final String[] helpTopics =
       new String[] {"all", "overview", "commands", "options", "usage", "configuration"};
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/Version.java b/geode-core/src/main/java/org/apache/geode/internal/Version.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/internal/serialization/Version.java
rename to geode-core/src/main/java/org/apache/geode/internal/Version.java
index cc4b1d2..fdee60d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/Version.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/Version.java
@@ -26,6 +26,7 @@ import java.util.stream.Collectors;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.internal.cache.tier.sockets.CommandInitializer;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
  * Enumerated type for client / server and p2p version.
@@ -614,4 +615,16 @@ public class Version implements Comparable<Version> {
     return Arrays.asList(VALUES).stream().filter(x -> x != null && x != TEST_VERSION)
         .collect(Collectors.toList());
   }
+
+  public static Version getVersionForDataStream(VersionedDataStream input) {
+    try {
+      short ordinal = input.getVersionOrdinal();
+      if (ordinal <= 0) {
+        return null;
+      }
+      return fromOrdinal(ordinal, false);
+    } catch (UnsupportedVersionException e) {
+      return null;
+    }
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataSerializable.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedDataSerializable.java
index dce8a3b..422371d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataSerializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedDataSerializable.java
@@ -15,6 +15,7 @@
 package org.apache.geode.internal;
 
 import org.apache.geode.DataSerializable;
+import org.apache.geode.internal.serialization.SerializationVersions;
 
 /**
  * An extension of DataSerializable that can support multiple serialized forms for backward
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectInput.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
similarity index 95%
rename from geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectInput.java
rename to geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
index 46f7156..73b79d7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectInput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectInput;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
  * An extension to {@link ObjectInput} that implements {@link VersionedDataStream} wrapping given
@@ -46,8 +46,11 @@ public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
-    return this.version;
+  public short getVersionOrdinal() {
+    if (version == null) {
+      return Version.CURRENT_ORDINAL;
+    }
+    return this.version.ordinal();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectOutput.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
similarity index 94%
rename from geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectOutput.java
rename to geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
index a1f8ce3..e8d44ff 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectOutput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectOutput;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
  * An extension to {@link ObjectOutput} that implements {@link VersionedDataStream} wrapping given
@@ -49,8 +49,11 @@ public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
-    return this.version;
+  public short getVersionOrdinal() {
+    if (version == null) {
+      return Version.CURRENT_ORDINAL;
+    }
+    return this.version.ordinal();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/ClientMembershipMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/ClientMembershipMessage.java
index 3e8243b..9f4a71c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/ClientMembershipMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/ClientMembershipMessage.java
@@ -23,6 +23,7 @@ import org.apache.geode.admin.internal.AdminDistributedSystemImpl;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A PooledDistributionMessage for notifying admin members about changes in Client Membership
@@ -85,7 +86,7 @@ public class ClientMembershipMessage extends PooledDistributionMessage {
 
   /**
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+   * @see DataSerializableFixedID#getDSFID()
    */
   @Override
   public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java
index 6f2337d..8e36bc4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ClientHealthStats.java
@@ -25,8 +25,8 @@ import java.util.Map.Entry;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Bean class act as container for client stats
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java
index c5f9f0a..9d1fd7f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoRequest.java
@@ -86,7 +86,7 @@ public class DurableClientInfoRequest extends AdminRequest {
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+   * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
    */
   @Override
   public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java
index ad598dc..8c4f798 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java
@@ -20,10 +20,10 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.StatisticsFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.StatAlert;
 import org.apache.geode.internal.admin.StatAlertDefinition;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as data range
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java
index b1b2ff0..da8b2ec 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/statalerts/NumberThresholdDecoratorImpl.java
@@ -20,10 +20,10 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.StatisticsFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.StatAlert;
 import org.apache.geode.internal.admin.StatAlertDefinition;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as number
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegion.java
index 9e3141a..ee7dfd2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegion.java
@@ -88,13 +88,13 @@ import org.apache.geode.distributed.internal.DistributionAdvisor;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.cache.LocalRegion.InitializationLevel;
 import org.apache.geode.internal.cache.extension.Extensible;
 import org.apache.geode.internal.cache.extension.ExtensionPoint;
 import org.apache.geode.internal.cache.extension.SimpleExtensionPoint;
 import org.apache.geode.internal.cache.snapshot.RegionSnapshotServiceImpl;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.pdx.internal.PeerTypeRegistration;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheDistributionAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheDistributionAdvisor.java
index 21ac9eb..95ab059 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheDistributionAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheDistributionAdvisor.java
@@ -43,7 +43,6 @@ import org.apache.geode.distributed.internal.DistributionAdvisor;
 import org.apache.geode.distributed.internal.MembershipListener;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.LocalRegion.InitializationLevel;
 import org.apache.geode.internal.cache.partitioned.PRLocallyDestroyedException;
@@ -51,6 +50,7 @@ import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DSCODE;
 
 /**
  * Adds bookkeeping info and cache-specific behavior to DistributionAdvisor. Adds bit-encoded flags
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CachedDeserializableFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CachedDeserializableFactory.java
index 9490fe8..6a07f05 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CachedDeserializableFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CachedDeserializableFactory.java
@@ -21,9 +21,9 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.cache.util.ObjectSizer;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.NullDataOutputStream;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.pdx.PdxInstance;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java
index 59ec991..38b4ba6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXPrecommitMessage.java
@@ -44,13 +44,13 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.ReplySender;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.TXEntryState.DistTxThinEntryState;
 import org.apache.geode.internal.cache.locks.TXLockService;
 import org.apache.geode.internal.cache.tx.DistTxEntryEvent;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class DistTXPrecommitMessage extends TXMessage {
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java
index 8d24700..6e9554e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPutAllOperation.java
@@ -42,8 +42,6 @@ import org.apache.geode.cache.query.internal.cq.CqService;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DirectReplyProcessor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
@@ -60,6 +58,8 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Handles distribution of a Region.putall operation.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRemoveAllOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRemoveAllOperation.java
index 0d94271..acca29a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRemoveAllOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRemoveAllOperation.java
@@ -35,7 +35,6 @@ import org.apache.geode.cache.persistence.PersistentReplicatesOfflineException;
 import org.apache.geode.cache.query.internal.cq.CqService;
 import org.apache.geode.distributed.internal.DirectReplyProcessor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DistributedPutAllOperation.EntryVersionsList;
@@ -55,6 +54,7 @@ import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Handles distribution of a Region.removeAll operation.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java
index 3973601..9c847f2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedTombstoneOperation.java
@@ -30,11 +30,11 @@ import org.apache.geode.cache.Operation;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.SerializationVersions;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.cache.versions.VersionSource;
+import org.apache.geode.internal.serialization.SerializationVersions;
 
 public class DistributedTombstoneOperation extends DistributedCacheOperation {
   private enum TOperation {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java
index 0dfa798..0b94d4a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/EntryEventImpl.java
@@ -50,9 +50,7 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Sendable;
@@ -79,6 +77,8 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.internal.util.BlobHelper;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java
index 04d1343..5d26919 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/EventID.java
@@ -37,8 +37,6 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
@@ -46,6 +44,8 @@ import org.apache.geode.internal.cache.ha.HARegionQueue;
 import org.apache.geode.internal.cache.ha.ThreadIdentifier;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.Breadcrumbs;
 
 /**
@@ -314,7 +314,8 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
       // read if the stream's version is 1.0.0-incubating
       disVersion = Version.GFE_90;
     }
-    ByteArrayDataInput dis = new ByteArrayDataInput(membershipID, disVersion);
+    ByteArrayDataInput dis =
+        new ByteArrayDataInput(membershipID, disVersion == null ? 0 : disVersion.ordinal());
     InternalDistributedMember result = null;
     try {
       result = InternalDistributedMember.readEssentialData(dis);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java
index b0d8b45..29d2da1 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterProfile.java
@@ -62,7 +62,6 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.ClassLoadUtil;
 import org.apache.geode.internal.CopyOnWriteHashSet;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CacheDistributionAdvisor.CacheProfile;
@@ -77,6 +76,7 @@ import org.apache.geode.internal.cache.tier.sockets.UnregisterAllInterest;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 
 /**
@@ -1977,7 +1977,7 @@ public class FilterProfile implements DataSerializableFixedID {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+     * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
      */
     @Override
     public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java
index 7d9e7ef..9a33a06 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FilterRoutingInfo.java
@@ -29,12 +29,12 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.VersionedDataSerializable;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * This class is used to hold the information about the servers and their Filters (CQs and Interest
@@ -485,7 +485,8 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
      */
     private void deserialize() {
       try {
-        ByteArrayDataInput dis = new ByteArrayDataInput(myData, myDataVersion);
+        ByteArrayDataInput dis =
+            new ByteArrayDataInput(myData, myDataVersion == null ? 0 : myDataVersion.ordinal());
         boolean hasCQs = dis.readBoolean();
         if (hasCQs) {
           int numEntries = InternalDataSerializer.readArrayLength(dis);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index fed201f..7e5ab5c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -176,7 +176,6 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.i18n.LogWriterI18n;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.SystemTimer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.LocalRegion.InitializationLevel;
@@ -231,6 +230,7 @@ import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.security.SecurityServiceFactory;
 import org.apache.geode.internal.sequencelog.SequenceLoggerImpl;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.shared.StringPrintWriter;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsClockFactory;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageFlowControl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageFlowControl.java
index 3684ba6..f8c1ab6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageFlowControl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageFlowControl.java
@@ -32,8 +32,8 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.MembershipListener;
 import org.apache.geode.distributed.internal.ProcessorKeeper21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This class keeps track of how many InitialImageMessages are in flight between the initial image
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
index 61add26..fc126bd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
@@ -67,8 +67,6 @@ import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.NullDataOutputStream;
 import org.apache.geode.internal.Version;
@@ -96,6 +94,8 @@ import org.apache.geode.internal.logging.LoggingThread;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.sequencelog.RegionLogger;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 
 /**
@@ -2516,7 +2516,7 @@ public class InitialImageOperation {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+     * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
      */
     @Override
     public int getDSFID() {
@@ -3518,7 +3518,7 @@ public class InitialImageOperation {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+     * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
      */
     @Override
     public int getDSFID() {
@@ -4075,7 +4075,7 @@ public class InitialImageOperation {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+     * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
      */
     @Override
     public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java
index 3e4d3cf..06a4c3f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidatePartitionedRegionMessage.java
@@ -79,7 +79,7 @@ public class InvalidatePartitionedRegionMessage extends PartitionMessage {
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+   * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
    */
   @Override
   public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
index bc8603f..e144ba7 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
@@ -29,13 +29,13 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.InitialImageOperation.Entry;
 import org.apache.geode.internal.cache.eviction.EvictionList;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 public class NonLocalRegionEntry implements RegionEntry, VersionStamp {
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
index e22703e..0675ecc 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
@@ -72,7 +72,6 @@ import org.apache.geode.distributed.OplogCancelledException;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
@@ -108,6 +107,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.sequencelog.EntryLogger;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.shared.NativeCalls;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.pdx.internal.PdxWriterImpl;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
index 4182a38..0812b07 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
@@ -51,11 +51,11 @@ import org.apache.geode.cache.query.internal.QueryMonitor;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.execute.BucketMovedException;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.LoggingExecutors;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This class takes the responsibility of executing the query on a data store for the buckets
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
index da840a6..225c76a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
@@ -21,9 +21,9 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This cache deserializable always keeps its byte[] in serialized form. You can ask it for its
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
index 8f051bc..6a441f4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
@@ -31,7 +31,6 @@ import org.apache.geode.cache.TimeoutException;
 import org.apache.geode.cache.TransactionId;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.InitialImageOperation.Entry;
@@ -44,6 +43,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Released;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.util.concurrent.ConcurrentMapWithReusableEntries;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
index c3ab74c..50bf27b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
@@ -22,7 +22,6 @@ import org.apache.geode.cache.EntryEvent;
 import org.apache.geode.cache.EntryNotFoundException;
 import org.apache.geode.cache.TimeoutException;
 import org.apache.geode.distributed.internal.DistributionManager;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.InitialImageOperation.Entry;
@@ -34,6 +33,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Internal interface for a region entry. Note that a region is implemented with a ConcurrentHashMap
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
index fc339cd..94dbf51 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
@@ -27,12 +27,12 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.versions.VersionTag;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Implementation of a region event
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
index 98893c3..4bcf82f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
@@ -21,9 +21,9 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This cache deserializable always keeps its byte[] in serialized form and the object form.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
index 67b0768..0f7dac9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
@@ -42,7 +42,6 @@ import org.apache.geode.cache.TimeoutException;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.lang.StringUtils;
@@ -53,6 +52,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.pdx.PdxSerializationException;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
index 80b5918..33ea6d1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
@@ -22,9 +22,9 @@ import java.io.Serializable;
 import java.nio.ByteBuffer;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DSCODE;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Internal tokens used as region values. These tokens are never seen from the public API.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
index 5413602..9da40ed 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
@@ -22,10 +22,10 @@ import java.io.IOException;
 import org.apache.geode.CopyHelper;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.eviction.EvictableEntry;
 import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.pdx.PdxInstance;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
index 6d02593..699cb62 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
@@ -25,7 +25,6 @@ import org.apache.geode.cache.EntryEvent;
 import org.apache.geode.cache.EntryNotFoundException;
 import org.apache.geode.cache.TimeoutException;
 import org.apache.geode.distributed.internal.DistributionManager;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DistributedRegion.DiskPosition;
@@ -39,6 +38,7 @@ import org.apache.geode.internal.cache.persistence.DiskRegionView;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * A disk region that is created when doing offline validation.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/compression/CompressedCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/compression/CompressedCachedDeserializable.java
index 6c5031c..f1a019c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/compression/CompressedCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/compression/CompressedCachedDeserializable.java
@@ -22,13 +22,13 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Region;
 import org.apache.geode.compression.Compressor;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.CachedDeserializableFactory;
 import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.RegionEntry;
 import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.size.Sizeable;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
index 9d2ee11..ee77fbf 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
@@ -17,7 +17,6 @@ package org.apache.geode.internal.cache.entries;
 import org.apache.geode.cache.EntryEvent;
 import org.apache.geode.cache.EntryNotFoundException;
 import org.apache.geode.distributed.internal.DistributionManager;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DiskId;
 import org.apache.geode.internal.cache.DistributedRegion;
@@ -30,6 +29,7 @@ import org.apache.geode.internal.cache.RegionEntryContext;
 import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Retained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Abstract implementation class of RegionEntry interface. This is adds Disk support behavior
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
index b044fc3..c676a0f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
@@ -39,7 +39,6 @@ import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
 import org.apache.geode.internal.Version;
@@ -81,6 +80,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.Versionable;
 import org.apache.geode.internal.util.concurrent.CustomEntryConcurrentHashMap;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
index 5a0d4fa..ae4bdce 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
@@ -24,7 +24,6 @@ import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.cache.DiskAccessException;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.AbstractDiskRegion;
@@ -61,6 +60,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
index 97fe7fe..46fc472 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
@@ -79,7 +79,6 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.CachedDeserializable;
@@ -100,6 +99,7 @@ import org.apache.geode.internal.cache.tier.sockets.Handshake;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.LoggingThread;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.concurrent.StoppableCondition;
@@ -3305,7 +3305,8 @@ public class HARegionQueue implements RegionQueue {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#fromData(java.io.DataInput)
+     * @see
+     * org.apache.geode.internal.serialization.DataSerializableFixedID#fromData(java.io.DataInput)
      */
     @Override
     public void fromData(DataInput in) throws IOException, ClassNotFoundException {
@@ -3318,7 +3319,7 @@ public class HARegionQueue implements RegionQueue {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+     * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
      */
     @Override
     public int getDSFID() {
@@ -3328,7 +3329,8 @@ public class HARegionQueue implements RegionQueue {
     /*
      * (non-Javadoc)
      *
-     * @see org.apache.geode.internal.DataSerializableFixedID#toData(java.io.DataOutput)
+     * @see
+     * org.apache.geode.internal.serialization.DataSerializableFixedID#toData(java.io.DataOutput)
      */
     @Override
     public void toData(DataOutput out) throws IOException {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/ThreadIdentifier.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/ThreadIdentifier.java
index ed7af75..377d6bf 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/ThreadIdentifier.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/ThreadIdentifier.java
@@ -22,8 +22,8 @@ import java.util.Arrays;
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.cache.EventID;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Class identifying a Thread uniquely across the distributed system. It is composed of two fields
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
index bac2381..5b224cb 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
@@ -26,11 +26,11 @@ import org.apache.geode.distributed.internal.locks.DLockBatch;
 import org.apache.geode.distributed.internal.locks.DLockBatchId;
 import org.apache.geode.distributed.internal.locks.LockGrantorId;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.IdentityArrayList;
 import org.apache.geode.internal.cache.TXRegionLockRequestImpl;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Adapts multiple TXRegionLockRequests to one DLockBatch for DLock to use.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
index 06bde3e..762631f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
@@ -22,8 +22,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.distributed.internal.locks.LockGrantorId;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Identifies a group of transaction locks.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
index 5c5d99d..4c652b7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
@@ -18,11 +18,11 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.BucketAdvisor;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A load probe which calculates the load of a pr using the just the number of buckets on a member.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
index f34fd90..cc2ed46 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
@@ -32,7 +32,6 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.SerializationVersions;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.BucketRegion;
 import org.apache.geode.internal.cache.EventID;
@@ -45,6 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientTombstoneMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessage;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationVersions;
 
 /**
  * This message class sends tombstone GC information to other PR holders
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRUpdateEntryVersionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRUpdateEntryVersionMessage.java
index d37b488..c1e1f31 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRUpdateEntryVersionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRUpdateEntryVersionMessage.java
@@ -89,7 +89,7 @@ public class PRUpdateEntryVersionMessage extends PartitionMessageWithDirectReply
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+   * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
    */
   @Override
   public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PutAllPRMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PutAllPRMessage.java
index e6db258..6c572a1 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PutAllPRMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PutAllPRMessage.java
@@ -44,7 +44,6 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.ReplySender;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.Version;
@@ -71,6 +70,7 @@ import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * A Partitioned Region update message. Meant to be sent only to a bucket's primary owner. In
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/RemoveAllPRMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/RemoveAllPRMessage.java
index 2e6e196..f377683 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/RemoveAllPRMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/RemoveAllPRMessage.java
@@ -44,7 +44,6 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.ReplySender;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.Version;
@@ -71,6 +70,7 @@ import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * PR removeAll
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
index 85371b9..ae66d0a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
@@ -19,11 +19,11 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.BucketAdvisor;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A load probe which calculates the load of a pr using the size of the buckets in bytes.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java
index b565da2..3f8bff7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/RegionSnapshotServiceImpl.java
@@ -48,7 +48,6 @@ import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.cache.snapshot.SnapshotOptions.SnapshotFormat;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.InternalEntity;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.CachedDeserializableFactory;
@@ -60,6 +59,7 @@ import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.snapshot.GFSnapshot.GFSnapshotImporter;
 import org.apache.geode.internal.cache.snapshot.GFSnapshot.SnapshotWriter;
 import org.apache.geode.internal.cache.snapshot.SnapshotPacket.SnapshotRecord;
+import org.apache.geode.internal.serialization.DSCODE;
 
 /**
  * Provides an implementation for region snapshots.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
index bf8809f..6ab1db3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
@@ -23,7 +23,6 @@ import java.util.UUID;
 
 import org.apache.geode.cache.EntryDestroyedException;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CachedDeserializable;
@@ -32,6 +31,7 @@ import org.apache.geode.internal.cache.NonTXEntry;
 import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.offheap.annotations.Released;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AuthIds.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AuthIds.java
index 9bf4b3e..f1647d7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AuthIds.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AuthIds.java
@@ -17,7 +17,7 @@
 package org.apache.geode.internal.cache.tier.sockets;
 
 
-import org.apache.geode.internal.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 public class AuthIds {
   private long connectionId;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
index cb235bf..5e7d4f3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
@@ -68,7 +68,6 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.SystemTimer;
 import org.apache.geode.internal.SystemTimer.SystemTimerTask;
 import org.apache.geode.internal.Version;
@@ -100,6 +99,7 @@ import org.apache.geode.internal.logging.LoggingThread;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.security.AccessControl;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
index c335e88..aa454e1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
@@ -63,7 +63,6 @@ import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.MemberAttributes;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
 import org.apache.geode.internal.Version;
@@ -87,6 +86,7 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.sequencelog.EntryLogger;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
index f9fa525..64cf9d0 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
@@ -23,11 +23,11 @@ import java.io.ObjectOutput;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.DistributedSystem;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.InterestType;
 import org.apache.geode.internal.cache.tier.MessageType;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Class <code>ClientInterestMessageImpl</code> represents an update to the a client's interest
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMessage.java
index 5bef40b..962d154 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMessage.java
@@ -17,8 +17,8 @@ package org.apache.geode.internal.cache.tier.sockets;
 
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.cache.Conflatable;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Interface <code>ClientMessage</code> is a message representing a cache operation that is sent
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
index bf242b7..671442a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
@@ -36,11 +36,11 @@ import org.apache.geode.distributed.DurableClientAttributes;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * This class represents a ConnectionProxy of the CacheClient
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
index 3c83905..2a6e073 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
@@ -26,11 +26,11 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 
 class ClientRegistrationMetadata {
   private static final Logger logger = LogService.getLogger();
@@ -57,9 +57,10 @@ class ClientRegistrationMetadata {
     if (getAndValidateClientVersion(socket, unversionedDataInputStream,
         unversionedDataOutputStream)) {
       if (oldClientRequiresVersionedStreams(clientVersion)) {
-        dataInputStream = new VersionedDataInputStream(unversionedDataInputStream, clientVersion);
+        dataInputStream =
+            new VersionedDataInputStream(unversionedDataInputStream, clientVersion.ordinal());
         dataOutputStream =
-            new VersionedDataOutputStream(unversionedDataOutputStream, clientVersion);
+            new VersionedDataOutputStream(unversionedDataOutputStream, clientVersion.ordinal());
       } else {
         dataInputStream = unversionedDataInputStream;
         dataOutputStream = unversionedDataOutputStream;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
index b6dbac0..3ac4f74 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
@@ -32,8 +32,6 @@ import org.apache.geode.GemFireIOException;
 import org.apache.geode.InternalGemFireError;
 import org.apache.geode.cache.query.internal.cq.InternalCqQuery;
 import org.apache.geode.cache.util.ObjectSizer;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Sendable;
 import org.apache.geode.internal.Version;
@@ -47,6 +45,8 @@ import org.apache.geode.internal.cache.ha.HAContainerRegion;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.size.Sizeable;
 
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
index abe74fa..e66d977 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
@@ -65,11 +65,11 @@ import org.apache.geode.LogWriter;
 import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.logging.InternalLogWriter;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.GemFireSecurityException;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
index e1f55ba..4e21a3f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
@@ -24,8 +24,6 @@ import java.util.concurrent.atomic.AtomicLongFieldUpdater;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DSCODE;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.Conflatable;
@@ -36,6 +34,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl.CqNa
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl.CqNameToOpHashMap;
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl.CqNameToOpSingleEntry;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.size.Sizeable;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
index fea3be2..7e2c51a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
@@ -21,8 +21,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.cache.InterestResultPolicy;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Used to make InterestResultPolicy implement DataSerializableFixedID
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
index 5fd245a..d73da80 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
@@ -25,12 +25,12 @@ import java.util.List;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.offheap.Releasable;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Encapsulates list containing objects, serialized objects, raw byte arrays, or exceptions. It can
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList651.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList651.java
index 649ac88..e27b84c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList651.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList651.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Adds one more object type which indicates that the key is not present at the server.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
index 67035a9..4cebf66 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
@@ -25,11 +25,11 @@ import java.util.concurrent.ConcurrentHashMap;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.offheap.AddressableMemoryManager;
 import org.apache.geode.internal.offheap.StoredObject;
+import org.apache.geode.internal.serialization.DSCODE;
 
 /**
  * Represents one unit of information (essentially a <code>byte</code> array) in the wire protocol.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SerializedObjectPartList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SerializedObjectPartList.java
index af51aa2..8f6afc5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SerializedObjectPartList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SerializedObjectPartList.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A variant of the ObjectPartList which deserializes the values as byte arrays of serialized
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
index 11e9adc..93e6bb5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
@@ -53,7 +53,6 @@ import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.cache.client.internal.Connection;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.EventID;
@@ -71,6 +70,7 @@ import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
index c92a2eb..c4a06b9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
@@ -31,13 +31,13 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
-import org.apache.geode.internal.VersionedDataStream;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 import org.apache.geode.pdx.internal.PeerTypeRegistration;
 import org.apache.geode.security.AuthenticationRequiredException;
 
@@ -87,8 +87,9 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
         this.clientReadTimeout = dataInputStream.readInt();
         if (clientVersion.compareTo(Version.CURRENT) < 0) {
           // versioned streams allow object serialization code to deal with older clients
-          dataInputStream = new VersionedDataInputStream(dataInputStream, clientVersion);
-          dataOutputStream = new VersionedDataOutputStream(dataOutputStream, clientVersion);
+          dataInputStream = new VersionedDataInputStream(dataInputStream, clientVersion.ordinal());
+          dataOutputStream =
+              new VersionedDataOutputStream(dataOutputStream, clientVersion.ordinal());
         }
         this.id = ClientProxyMembershipID.readCanonicalized(dataInputStream);
         // Note: credentials should always be the last piece in handshake for
@@ -133,8 +134,8 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     DataOutputStream dos = new DataOutputStream(out);
     DataInputStream dis;
     if (clientVersion.compareTo(Version.CURRENT) < 0) {
-      dis = new VersionedDataInputStream(in, clientVersion);
-      dos = new VersionedDataOutputStream(dos, clientVersion);
+      dis = new VersionedDataInputStream(in, clientVersion.ordinal());
+      dos = new VersionedDataOutputStream(dos, clientVersion.ordinal());
     } else {
       dis = new DataInputStream(in);
     }
@@ -159,7 +160,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
 
     Version v = Version.CURRENT;
     if (dos instanceof VersionedDataStream) {
-      v = ((VersionedDataStream) dos).getVersion();
+      v = Version.getVersionForDataStream((VersionedDataStream) dos);
     }
     HeapDataOutputStream hdos = new HeapDataOutputStream(v);
     DataSerializer.writeObject(member, hdos);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
index a63d3a0..e5d3930 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
@@ -39,7 +39,6 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.versions.DiskVersionTag;
@@ -47,6 +46,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A refinement of ObjectPartList that adds per-entry versionTags and has its own serialized form to
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
index eb8e46a..1ddcb45 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Operation;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DistributedPutAllOperation;
@@ -33,6 +32,7 @@ import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Retained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 public class DistTxEntryEvent extends EntryEventImpl {
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
index e628559..bb17891 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
@@ -43,7 +43,6 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.ReplySender;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.Version;
@@ -63,6 +62,7 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * A Replicate Region putAll message. Meant to be sent only to the peer who hosts transactional
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
index 9806d20..500204d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
@@ -44,7 +44,6 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.ReplySender;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.NanoTimer;
 import org.apache.geode.internal.Version;
@@ -64,6 +63,7 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * A Replicate Region removeAll message. Meant to be sent only to the peer who hosts transactional
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
index aa6c453..ab1e98a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
@@ -18,9 +18,9 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * The version tag class for version tags for persistent regions. The VersionSource held in these
@@ -51,7 +51,7 @@ public class DiskVersionTag extends VersionTag<DiskStoreID> {
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#getDSFID()
+   * @see org.apache.geode.internal.serialization.DataSerializableFixedID#getDSFID()
    */
   @Override
   public int getDSFID() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
index b645f55..679fd19 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
@@ -42,13 +42,13 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.MembershipListener;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * RegionVersionVector tracks the highest region-level version number of operations applied to a
@@ -1184,7 +1184,7 @@ public abstract class RegionVersionVector<T extends VersionSource<?>>
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#toData(java.io.DataOutput)
+   * @see org.apache.geode.internal.serialization.DataSerializableFixedID#toData(java.io.DataOutput)
    */
   @Override
   public void toData(DataOutput out) throws IOException {
@@ -1215,7 +1215,8 @@ public abstract class RegionVersionVector<T extends VersionSource<?>>
   /*
    * (non-Javadoc)
    *
-   * @see org.apache.geode.internal.DataSerializableFixedID#fromData(java.io.DataInput)
+   * @see
+   * org.apache.geode.internal.serialization.DataSerializableFixedID#fromData(java.io.DataInput)
    */
   @Override
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionSource.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionSource.java
index 7d349d9..f0d15f4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionSource.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionSource.java
@@ -17,7 +17,7 @@ package org.apache.geode.internal.cache.versions;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * The member that originated an update that is stored in the version information of a region entry,
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
index 2329cd6..50b7ed3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
@@ -22,11 +22,11 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.distributed.internal.DistributionManager;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.size.ReflectionSingleObjectSizer;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
index 2d4fcfa..62306f5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
@@ -24,9 +24,9 @@ import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.wan.GatewaySender;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.WrappedCallbackArgument;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Class <code>GatewayEventCallbackArgument</code> is a wrapper on a callback arg plus the id of the
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
index 21bac12..d32fd50 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
@@ -30,10 +30,8 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.asyncqueue.AsyncEvent;
 import org.apache.geode.cache.util.ObjectSizer;
 import org.apache.geode.cache.wan.EventSequenceID;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
 import org.apache.geode.internal.VersionedDataSerializable;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.CachedDeserializableFactory;
@@ -54,6 +52,8 @@ import org.apache.geode.internal.offheap.annotations.OffHeapIdentifier;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.size.Sizeable;
 
 /**
@@ -735,7 +735,7 @@ public class GatewaySenderEventImpl
     // this._id = in.readUTF();
     if (version < 0x11 && (in instanceof InputStream)
         && InternalDataSerializer.getVersionForDataStream(in) == Version.CURRENT) {
-      in = new VersionedDataInputStream((InputStream) in, Version.GFE_701);
+      in = new VersionedDataInputStream((InputStream) in, Version.GFE_701.ordinal());
     }
     this.id = (EventID) DataSerializer.readObject(in);
     // TODO:Asif ; Check if this violates Barry's logic of not assiging VM
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
index 1f4c2a2..e3b3e2d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
@@ -39,7 +39,6 @@ import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InitialImageOperation;
@@ -47,6 +46,7 @@ import org.apache.geode.internal.cache.InternalRegion;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class GatewaySenderQueueEntrySynchronizationOperation {
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/offheap/AbstractStoredObject.java b/geode-core/src/main/java/org/apache/geode/internal/offheap/AbstractStoredObject.java
index 028e431..038c6d0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/offheap/AbstractStoredObject.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/offheap/AbstractStoredObject.java
@@ -19,11 +19,11 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.DSCODE;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.RegionEntry;
 import org.apache.geode.internal.lang.StringUtils;
+import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public abstract class AbstractStoredObject implements StoredObject {
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/offheap/DataType.java b/geode-core/src/main/java/org/apache/geode/internal/offheap/DataType.java
index e4c495f..5c1239e 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/offheap/DataType.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/offheap/DataType.java
@@ -19,11 +19,10 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DSCODE;
-import org.apache.geode.internal.DSFIDFactory;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DSCODE;
 
 /**
  * Determines the data type of the bytes in an off-heap MemoryBlock. This is used by the tests for
@@ -43,19 +42,22 @@ public class DataType {
     }
     try {
       if (header == DSCODE.DS_FIXED_ID_BYTE.toByte()) {
-        return "org.apache.geode.internal.DataSerializableFixedID:"
-            + DSFIDFactory.create(in.readByte(), in).getClass().getName();
+        return "org.apache.geode.internal.serialization.DataSerializableFixedID:"
+            + InternalDataSerializer.getDSFIDFactory().create(in.readByte(), in).getClass()
+                .getName();
       }
       if (header == DSCODE.DS_FIXED_ID_SHORT.toByte()) {
-        return "org.apache.geode.internal.DataSerializableFixedID:"
-            + DSFIDFactory.create(in.readShort(), in).getClass().getName();
+        return "org.apache.geode.internal.serialization.DataSerializableFixedID:"
+            + InternalDataSerializer.getDSFIDFactory().create(in.readShort(), in).getClass()
+                .getName();
       }
       if (header == DSCODE.DS_FIXED_ID_INT.toByte()) {
-        return "org.apache.geode.internal.DataSerializableFixedID:"
-            + DSFIDFactory.create(in.readInt(), in).getClass().getName();
+        return "org.apache.geode.internal.serialization.DataSerializableFixedID:"
+            + InternalDataSerializer.getDSFIDFactory().create(in.readInt(), in).getClass()
+                .getName();
       }
       if (header == DSCODE.DS_NO_FIXED_ID.toByte()) {
-        return "org.apache.geode.internal.DataSerializableFixedID:"
+        return "org.apache.geode.internal.serialization.DataSerializableFixedID:"
             + DataSerializer.readClass(in).getName();
       }
       if (header == DSCODE.NULL.toByte()) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelper.java b/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelper.java
index 765117b..0d10311 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelper.java
@@ -15,7 +15,6 @@
 package org.apache.geode.internal.offheap;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.cache.CachedDeserializableFactory;
 import org.apache.geode.internal.cache.DiskId;
 import org.apache.geode.internal.cache.EntryEventImpl;
@@ -26,6 +25,7 @@ import org.apache.geode.internal.cache.entries.OffHeapRegionEntry;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.DSCODE;
 
 /**
  * The class just has static methods that operate on instances of {@link OffHeapRegionEntry}. It
diff --git a/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapStoredObject.java b/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapStoredObject.java
index 88ff7e9..b7b1af0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapStoredObject.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/offheap/OffHeapStoredObject.java
@@ -19,7 +19,6 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 
 import org.apache.geode.cache.Region;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
@@ -28,6 +27,7 @@ import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.RegionEntry;
 import org.apache.geode.internal.cache.RegionEntryContext;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.DSCODE;
 
 /**
  * A class that stores a Java object in off-heap memory. See {@link AddressableMemoryManager} for
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java
index 4bfef78..20f336b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java
@@ -14,5 +14,1032 @@
  */
 package org.apache.geode.internal.serialization;
 
-public class BufferDataOutputStream {
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UTFDataFormatException;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+public class BufferDataOutputStream extends OutputStream implements VersionedDataStream {
+  /**
+   * We set "doNotCopy" to prevent wasting time by copying bytes. But to do this we create either a
+   * HeapByteBuffer to DirectByteBuffer to reference the byte array or off-heap memory. The
+   * ByteBuffer instance itself uses up memory that needs to be initialized and eventually gc'd so
+   * for smaller sizes it is better to just copy it. Public for unit test access.
+   */
+  public static final int MIN_TO_COPY = 128;
+  protected static final int INITIAL_CAPACITY = 1024;
+  /**
+   * Use -Dgemfire.ASCII_STRINGS=true if all String instances contain ASCII characters. Setting this
+   * to true gives a performance improvement.
+   */
+  protected static final boolean ASCII_STRINGS =
+      Boolean.getBoolean("gemfire.ASCII_STRINGS");
+  public static final int SMALLEST_CHUNK_SIZE = 32;
+  protected int MIN_CHUNK_SIZE;
+  protected LinkedList<ByteBuffer> chunks = null;
+  protected int size = 0;
+  protected boolean ignoreWrites = false; // added for bug 39569
+  protected short version;
+  protected boolean doNotCopy;
+  protected ByteBuffer buffer;
+  /**
+   * True if this stream is currently setup for writing. Once it switches to reading then it must be
+   * reset before it can be written again.
+   */
+  private boolean writeMode = true;
+  private boolean disallowExpansion = false;
+  private Error expansionException = null;
+  private int memoPosition;
+
+  public BufferDataOutputStream(int allocSize, short version) {
+    this(allocSize, version, false);
+  }
+
+  /**
+   * Create a BufferDataOutputStream optimized to contain just the specified string. The string will
+   * be written to this stream encoded as utf.
+   */
+  public BufferDataOutputStream(String s) {
+    int maxStrBytes;
+    if (ASCII_STRINGS) {
+      maxStrBytes = s.length();
+    } else {
+      maxStrBytes = s.length() * 3;
+    }
+    this.MIN_CHUNK_SIZE = INITIAL_CAPACITY;
+    this.buffer = ByteBuffer.allocate(maxStrBytes);
+    this.doNotCopy = false;
+    writeUTFNoLength(s);
+  }
+
+  /**
+   * @param doNotCopy if true then byte arrays/buffers/sources will not be copied to this hdos but
+   *        instead referenced.
+   */
+  public BufferDataOutputStream(int allocSize, short version, boolean doNotCopy) {
+    if (allocSize < SMALLEST_CHUNK_SIZE) {
+      this.MIN_CHUNK_SIZE = SMALLEST_CHUNK_SIZE;
+    } else {
+      this.MIN_CHUNK_SIZE = allocSize;
+    }
+    this.buffer = ByteBuffer.allocate(allocSize);
+    this.version = version;
+    this.doNotCopy = doNotCopy;
+  }
+
+  public BufferDataOutputStream(ByteBuffer initialBuffer, short version, boolean doNotCopy) {
+    if (initialBuffer.position() != 0) {
+      initialBuffer = initialBuffer.slice();
+    }
+    int allocSize = initialBuffer.capacity();
+    if (allocSize < 32) {
+      this.MIN_CHUNK_SIZE = 32;
+    } else {
+      this.MIN_CHUNK_SIZE = allocSize;
+    }
+    this.buffer = initialBuffer;
+    this.version = version;
+    this.doNotCopy = doNotCopy;
+  }
+
+  /**
+   * Construct a BufferDataOutputStream which uses the byte array provided as its underlying
+   * ByteBuffer
+   *
+   */
+  public BufferDataOutputStream(byte[] bytes) {
+    int len = bytes.length;
+    if (len <= 0) {
+      throw new IllegalArgumentException("The byte array must not be empty");
+    }
+    if (len > 32) {
+      this.MIN_CHUNK_SIZE = len;
+    } else {
+      this.MIN_CHUNK_SIZE = 32;
+    }
+    this.buffer = ByteBuffer.wrap(bytes);
+    this.doNotCopy = false;
+  }
+
+
+  public static void flushStream(OutputStream out, ByteBuffer outBuf) throws IOException {
+    if (outBuf.position() == 0)
+      return;
+    assert outBuf.hasArray();
+    outBuf.flip();
+    out.write(outBuf.array(), outBuf.arrayOffset(), outBuf.remaining());
+    outBuf.clear();
+  }
+
+  /**
+   * Returns true if this HDOS currently does not copy byte arrays/buffers written to it. Instead of
+   * copying a reference is kept to the original array/buffer.
+   */
+  public boolean setDoNotCopy(boolean v) {
+    boolean result = this.doNotCopy;
+    if (result != v) {
+      this.doNotCopy = v;
+    }
+    return result;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public short getVersionOrdinal() {
+    return version;
+  }
+
+  /*
+   * throw an exception instead of allocating a new buffer. The exception is a
+   * BufferOverflowException thrown from expand, and will restore the position to the point at which
+   * the flag was set with the disallowExpansion method.
+   *
+   * @param ee the exception to throw if expansion is needed
+   */
+  public void disallowExpansion(Error ee) {
+    this.disallowExpansion = true;
+    this.expansionException = ee;
+    this.memoPosition = this.buffer.position();
+  }
+
+  /**
+   * If this BufferDataOutputStream detects that it needs to
+   * grow then it will throw an IllegalStateException.
+   */
+  public void disallowExpansion() {
+    this.disallowExpansion = true;
+  }
+
+  /** write the low-order 8 bits of the given int */
+  @Override
+  public void write(int b) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(1);
+    buffer.put((byte) (b & 0xff));
+  }
+
+  protected void ensureCapacity(int amount) {
+    int remainingSpace = this.buffer.capacity() - this.buffer.position();
+    if (amount > remainingSpace) {
+      expand(amount);
+    }
+  }
+
+  private void expand(int amount) {
+    if (this.disallowExpansion) {
+      if (this.expansionException != null) {
+        this.ignoreWrites = true;
+        this.buffer.position(this.memoPosition);
+        throw this.expansionException;
+      } else {
+        throw new IllegalStateException("initial buffer size was exceeded");
+      }
+    }
+
+    final ByteBuffer oldBuffer = this.buffer;
+    if (this.chunks == null) {
+      this.chunks = new LinkedList<ByteBuffer>();
+    }
+    oldBuffer.flip(); // now ready for reading
+    this.size += oldBuffer.remaining();
+    this.chunks.add(oldBuffer);
+    if (amount < MIN_CHUNK_SIZE) {
+      amount = MIN_CHUNK_SIZE;
+    }
+    this.buffer = ByteBuffer.allocate(amount);
+  }
+
+  protected void checkIfWritable() {
+    if (!this.writeMode) {
+      throw new IllegalStateException(
+          "not in write mode");
+    }
+  }
+
+  /** override OutputStream's write() */
+  @Override
+  public void write(byte[] source, int offset, int len) {
+    if (len == 0)
+      return;
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    if (this.doNotCopy && len > MIN_TO_COPY) {
+      moveBufferToChunks();
+      addToChunks(source, offset, len);
+    } else {
+      int remainingSpace = this.buffer.capacity() - this.buffer.position();
+      if (remainingSpace < len) {
+        this.buffer.put(source, offset, remainingSpace);
+        offset += remainingSpace;
+        len -= remainingSpace;
+        ensureCapacity(len);
+      }
+      this.buffer.put(source, offset, len);
+    }
+  }
+
+  private void addToChunks(byte[] source, int offset, int len) {
+    ByteBuffer bb = ByteBuffer.wrap(source, offset, len).slice();
+    bb = bb.slice();
+    this.size += bb.remaining();
+    this.chunks.add(bb);
+  }
+
+  private void addToChunks(ByteBuffer bb) {
+    int remaining = bb.remaining();
+    if (remaining > 0) {
+      this.size += remaining;
+      if (bb.position() != 0) {
+        bb = bb.slice();
+      }
+      this.chunks.add(bb);
+    }
+  }
+
+  public int getByteBufferCount() {
+    int result = 0;
+    if (this.chunks != null) {
+      result += this.chunks.size();
+    }
+    if (this.buffer.remaining() > 0) {
+      result++;
+    }
+    return result;
+  }
+
+  public void fillByteBufferArray(ByteBuffer[] bbArray, int offset) {
+    if (this.chunks != null) {
+      for (ByteBuffer bb : this.chunks) {
+        bbArray[offset++] = bb;
+      }
+    }
+    if (this.buffer.remaining() > 0) {
+      bbArray[offset] = this.buffer;
+    }
+  }
+
+  private void moveBufferToChunks() {
+    final ByteBuffer oldBuffer = this.buffer;
+    if (this.chunks == null) {
+      this.chunks = new LinkedList<ByteBuffer>();
+    }
+    if (oldBuffer.position() == 0) {
+      // if position is zero then nothing has been written (yet) to buffer so no need to move it to
+      // chunks
+      return;
+    }
+    oldBuffer.flip();
+    this.size += oldBuffer.remaining();
+    ByteBuffer bufToAdd = oldBuffer.slice();
+    this.chunks.add(bufToAdd);
+    int newPos = oldBuffer.limit();
+    if ((oldBuffer.capacity() - newPos) <= 0) {
+      this.buffer = ByteBuffer.allocate(MIN_CHUNK_SIZE);
+    } else {
+      oldBuffer.limit(oldBuffer.capacity());
+      oldBuffer.position(newPos);
+      this.buffer = oldBuffer.slice();
+    }
+  }
+
+  public int size() {
+    if (this.writeMode) {
+      return this.size + this.buffer.position();
+    } else {
+      return this.size;
+    }
+  }
+
+  private void consolidateChunks() {
+    if (this.chunks != null) {
+      final int size = size();
+      ByteBuffer newBuffer = ByteBuffer.allocate(size);
+      for (ByteBuffer bb : this.chunks) {
+        newBuffer.put(bb);
+      }
+      this.chunks = null;
+      newBuffer.put(this.buffer);
+      this.buffer = newBuffer;
+      this.buffer.flip(); // now ready for reading
+    }
+  }
+
+  private void consolidateChunks(int startPosition) {
+    assert startPosition < SMALLEST_CHUNK_SIZE;
+    final int size = size() - startPosition;
+    ByteBuffer newBuffer = ByteBuffer.allocate(size);
+    if (this.chunks != null) {
+      this.chunks.getFirst().position(startPosition);
+      for (ByteBuffer bb : this.chunks) {
+        newBuffer.put(bb);
+      }
+      this.chunks = null;
+    } else {
+      this.buffer.position(startPosition);
+    }
+    newBuffer.put(this.buffer);
+    newBuffer.flip(); // now ready for reading
+    this.buffer = newBuffer;
+  }
+
+  /**
+   * Prepare the contents for sending again
+   */
+  public void rewind() {
+    finishWriting();
+    this.size = 0;
+    if (this.chunks != null) {
+      for (ByteBuffer bb : this.chunks) {
+        bb.rewind();
+        size += bb.remaining();
+      }
+    }
+    this.buffer.rewind();
+    size += this.buffer.remaining();
+  }
+
+  public void reset() {
+    this.size = 0;
+    if (this.chunks != null) {
+      this.chunks.clear();
+      this.chunks = null;
+    }
+    this.buffer.clear();
+    this.writeMode = true;
+    this.ignoreWrites = false;
+    this.disallowExpansion = false;
+    this.expansionException = null;
+  }
+
+  @Override
+  public void flush() {
+    // noop
+  }
+
+  public void finishWriting() {
+    if (this.writeMode) {
+      this.ignoreWrites = false;
+      this.writeMode = false;
+      this.buffer.flip();
+      this.size += this.buffer.remaining();
+    }
+  }
+
+  /**
+   * Returns a ByteBuffer of the unused buffer; returns null if the buffer was completely used.
+   */
+  public ByteBuffer finishWritingAndReturnUnusedBuffer() {
+    finishWriting();
+    ByteBuffer result = this.buffer.duplicate();
+    if (result.remaining() == 0) {
+      // buffer was never used.
+      result.limit(result.capacity());
+      return result;
+    }
+    int newPos = result.limit();
+    if ((result.capacity() - newPos) > 0) {
+      result.limit(result.capacity());
+      result.position(newPos);
+      return result.slice();
+    } else {
+      return null;
+    }
+  }
+
+  @Override
+  public void close() {
+    reset();
+  }
+
+  /**
+   * gets the contents of this stream as a ByteBuffer, ready for reading. The stream should not be
+   * written to past this point until it has been reset.
+   */
+  public ByteBuffer toByteBuffer() {
+    finishWriting();
+    consolidateChunks();
+    return this.buffer;
+  }
+
+  /**
+   * gets the contents of this stream as a ByteBuffer, ready for reading. The stream should not be
+   * written to past this point until it has been reset.
+   *
+   * @param startPosition the position of the first byte to copy into the returned buffer.
+   */
+  public ByteBuffer toByteBuffer(int startPosition) {
+    finishWriting();
+    consolidateChunks(startPosition);
+    return this.buffer;
+  }
+
+  /**
+   * gets the contents of this stream as a byte[]. The stream should not be written to past this
+   * point until it has been reset.
+   */
+  public byte[] toByteArray() {
+    ByteBuffer bb = toByteBuffer();
+    if (bb.hasArray() && bb.arrayOffset() == 0 && bb.limit() == bb.capacity()) {
+      return bb.array();
+    } else {
+      // create a new buffer of just the right size and copy the old buffer into it
+      ByteBuffer tmp = ByteBuffer.allocate(bb.remaining());
+      tmp.put(bb);
+      tmp.flip();
+      this.buffer = tmp;
+      return this.buffer.array();
+    }
+  }
+
+  protected void flushBuffer(SocketChannel sc, ByteBuffer out) throws IOException {
+    if (out.position() == 0)
+      return;
+    out.flip();
+    while (out.remaining() > 0) {
+      sc.write(out);
+    }
+    out.clear();
+  }
+
+  /**
+   * Returns an input stream that can be used to read the contents that where written to this output
+   * stream.
+   */
+  public InputStream getInputStream() {
+    return new HDInputStream();
+  }
+
+  /**
+   * Writes a <code>boolean</code> value to this output stream. If the argument <code>v</code> is
+   * <code>true</code>, the value <code>(byte)1</code> is written; if <code>v</code> is
+   * <code>false</code>, the value <code>(byte)0</code> is written. The byte written by this method
+   * may be read by the <code>readBoolean</code> method of interface <code>DataInput</code>, which
+   * will then return a <code>boolean</code> equal to <code>v</code>.
+   *
+   * @param v the boolean to be written.
+   */
+  public void writeBoolean(boolean v) {
+    write(v ? 1 : 0);
+  }
+
+  /**
+   * Writes to the output stream the eight low- order bits of the argument <code>v</code>. The 24
+   * high-order bits of <code>v</code> are ignored. (This means that <code>writeByte</code> does
+   * exactly the same thing as <code>write</code> for an integer argument.) The byte written by this
+   * method may be read by the <code>readByte</code> method of interface <code>DataInput</code>,
+   * which will then return a <code>byte</code> equal to <code>(byte)v</code>.
+   *
+   * @param v the byte value to be written.
+   */
+  public void writeByte(int v) {
+    write(v);
+  }
+
+  /**
+   * Writes two bytes to the output stream to represent the value of the argument. The byte values
+   * to be written, in the order shown, are:
+   * <p>
+   *
+   * <pre>
+   * <code>
+   * (byte)(0xff &amp; (v &gt;&gt; 8))
+   * (byte)(0xff &amp; v)
+   * </code>
+   * </pre>
+   * <p>
+   * The bytes written by this method may be read by the <code>readShort</code> method of interface
+   * <code>DataInput</code> , which will then return a <code>short</code> equal to
+   * <code>(short)v</code>.
+   *
+   * @param v the <code>short</code> value to be written.
+   */
+  public void writeShort(int v) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(2);
+    buffer.putShort((short) (v & 0xffff));
+  }
+
+  /**
+   * Writes a <code>char</code> value, wich is comprised of two bytes, to the output stream. The
+   * byte values to be written, in the order shown, are:
+   * <p>
+   *
+   * <pre>
+   * <code>
+   * (byte)(0xff &amp; (v &gt;&gt; 8))
+   * (byte)(0xff &amp; v)
+   * </code>
+   * </pre>
+   * <p>
+   * The bytes written by this method may be read by the <code>readChar</code> method of interface
+   * <code>DataInput</code> , which will then return a <code>char</code> equal to
+   * <code>(char)v</code>.
+   *
+   * @param v the <code>char</code> value to be written.
+   */
+  public void writeChar(int v) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(2);
+    buffer.putChar((char) v);
+  }
+
+  /**
+   * Writes an <code>int</code> value, which is comprised of four bytes, to the output stream. The
+   * byte values to be written, in the order shown, are:
+   * <p>
+   *
+   * <pre>
+   * <code>
+   * (byte)(0xff &amp; (v &gt;&gt; 24))
+   * (byte)(0xff &amp; (v &gt;&gt; 16))
+   * (byte)(0xff &amp; (v &gt;&gt; &#32; &#32;8))
+   * (byte)(0xff &amp; v)
+   * </code>
+   * </pre>
+   * <p>
+   * The bytes written by this method may be read by the <code>readInt</code> method of interface
+   * <code>DataInput</code> , which will then return an <code>int</code> equal to <code>v</code>.
+   *
+   * @param v the <code>int</code> value to be written.
+   */
+  public void writeInt(int v) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(4);
+    buffer.putInt(v);
+  }
+
+  /**
+   * Writes a <code>long</code> value, which is comprised of eight bytes, to the output stream. The
+   * byte values to be written, in the order shown, are:
+   * <p>
+   *
+   * <pre>
+   * <code>
+   * (byte)(0xff &amp; (v &gt;&gt; 56))
+   * (byte)(0xff &amp; (v &gt;&gt; 48))
+   * (byte)(0xff &amp; (v &gt;&gt; 40))
+   * (byte)(0xff &amp; (v &gt;&gt; 32))
+   * (byte)(0xff &amp; (v &gt;&gt; 24))
+   * (byte)(0xff &amp; (v &gt;&gt; 16))
+   * (byte)(0xff &amp; (v &gt;&gt;  8))
+   * (byte)(0xff &amp; v)
+   * </code>
+   * </pre>
+   * <p>
+   * The bytes written by this method may be read by the <code>readLong</code> method of interface
+   * <code>DataInput</code> , which will then return a <code>long</code> equal to <code>v</code>.
+   *
+   * @param v the <code>long</code> value to be written.
+   */
+  public void writeLong(long v) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(8);
+    buffer.putLong(v);
+  }
+
+  /**
+   * Reserves space in the output for a long and returns a LongUpdater than can be used to update
+   * this particular long.
+   *
+   * @return the LongUpdater that allows the long to be updated
+   */
+  public LongUpdater reserveLong() {
+    if (this.ignoreWrites)
+      return null;
+    checkIfWritable();
+    ensureCapacity(8);
+    LongUpdater result = new LongUpdater(this.buffer);
+    buffer.putLong(0L);
+    return result;
+  }
+
+  /**
+   * Writes a <code>float</code> value, which is comprised of four bytes, to the output stream. It
+   * does this as if it first converts this <code>float</code> value to an <code>int</code> in
+   * exactly the manner of the <code>Float.floatToIntBits</code> method and then writes the
+   * <code>int</code> value in exactly the manner of the <code>writeInt</code> method. The bytes
+   * written by this method may be read by the <code>readFloat</code> method of interface
+   * <code>DataInput</code>, which will then return a <code>float</code> equal to <code>v</code>.
+   *
+   * @param v the <code>float</code> value to be written.
+   */
+  public void writeFloat(float v) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(4);
+    buffer.putFloat(v);
+  }
+
+  /**
+   * Writes a <code>double</code> value, which is comprised of eight bytes, to the output stream. It
+   * does this as if it first converts this <code>double</code> value to a <code>long</code> in
+   * exactly the manner of the <code>Double.doubleToLongBits</code> method and then writes the
+   * <code>long</code> value in exactly the manner of the <code>writeLong</code> method. The bytes
+   * written by this method may be read by the <code>readDouble</code> method of interface
+   * <code>DataInput</code>, which will then return a <code>double</code> equal to <code>v</code>.
+   *
+   * @param v the <code>double</code> value to be written.
+   */
+  public void writeDouble(double v) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    ensureCapacity(8);
+    buffer.putDouble(v);
+  }
+
+  /**
+   * Writes a string to the output stream. For every character in the string <code>s</code>, taken
+   * in order, one byte is written to the output stream. If <code>s</code> is <code>null</code>, a
+   * <code>NullPointerException</code> is thrown.
+   * <p>
+   * If <code>s.length</code> is zero, then no bytes are written. Otherwise, the character
+   * <code>s[0]</code> is written first, then <code>s[1]</code>, and so on; the last character
+   * written is <code>s[s.length-1]</code>. For each character, one byte is written, the low-order
+   * byte, in exactly the manner of the <code>writeByte</code> method . The high-order eight bits of
+   * each character in the string are ignored.
+   *
+   * @param str the string of bytes to be written.
+   */
+  public void writeBytes(String str) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    int strlen = str.length();
+    if (strlen > 0) {
+      ensureCapacity(strlen);
+      // I know this is a deprecated method but it is PERFECT for this impl.
+      if (this.buffer.hasArray()) {
+        // I know this is a deprecated method but it is PERFECT for this impl.
+        int pos = this.buffer.position();
+        str.getBytes(0, strlen, this.buffer.array(), this.buffer.arrayOffset() + pos);
+        this.buffer.position(pos + strlen);
+      } else {
+        byte[] bytes = new byte[strlen];
+        str.getBytes(0, strlen, bytes, 0);
+        this.buffer.put(bytes);
+      }
+      // for (int i = 0 ; i < len ; i++) {
+      // this.buffer.put((byte)s.charAt(i));
+      // }
+    }
+  }
+
+  /**
+   * Writes every character in the string <code>s</code>, to the output stream, in order, two bytes
+   * per character. If <code>s</code> is <code>null</code>, a <code>NullPointerException</code> is
+   * thrown. If <code>s.length</code> is zero, then no characters are written. Otherwise, the
+   * character <code>s[0]</code> is written first, then <code>s[1]</code>, and so on; the last
+   * character written is <code>s[s.length-1]</code>. For each character, two bytes are actually
+   * written, high-order byte first, in exactly the manner of the <code>writeChar</code> method.
+   *
+   * @param s the string value to be written.
+   */
+  public void writeChars(String s) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    int len = s.length();
+    if (len > 0) {
+      ensureCapacity(len * 2);
+      for (int i = 0; i < len; i++) {
+        this.buffer.putChar(s.charAt(i));
+      }
+    }
+  }
+
+  /**
+   * Writes two bytes of length information to the output stream, followed by the Java modified UTF
+   * representation of every character in the string <code>s</code>. If <code>s</code> is
+   * <code>null</code>, a <code>NullPointerException</code> is thrown. Each character in the string
+   * <code>s</code> is converted to a group of one, two, or three bytes, depending on the value of
+   * the character.
+   * <p>
+   * If a character <code>c</code> is in the range <code>&#92;u0001</code> through
+   * <code>&#92;u007f</code>, it is represented by one byte:
+   * <p>
+   *
+   * <pre>
+   * (byte) c
+   * </pre>
+   * <p>
+   * If a character <code>c</code> is <code>&#92;u0000</code> or is in the range
+   * <code>&#92;u0080</code> through <code>&#92;u07ff</code>, then it is represented by two bytes,
+   * to be written in the order shown:
+   * <p>
+   *
+   * <pre>
+   * <code>
+   * (byte)(0xc0 | (0x1f &amp; (c &gt;&gt; 6)))
+   * (byte)(0x80 | (0x3f &amp; c))
+   *  </code>
+   * </pre>
+   * <p>
+   * If a character <code>c</code> is in the range <code>&#92;u0800</code> through
+   * <code>uffff</code>, then it is represented by three bytes, to be written in the order shown:
+   * <p>
+   *
+   * <pre>
+   * <code>
+   * (byte)(0xe0 | (0x0f &amp; (c &gt;&gt; 12)))
+   * (byte)(0x80 | (0x3f &amp; (c &gt;&gt;  6)))
+   * (byte)(0x80 | (0x3f &amp; c))
+   *  </code>
+   * </pre>
+   * <p>
+   * First, the total number of bytes needed to represent all the characters of <code>s</code> is
+   * calculated. If this number is larger than <code>65535</code>, then a
+   * <code>UTFDataFormatException</code> is thrown. Otherwise, this length is written to the output
+   * stream in exactly the manner of the <code>writeShort</code> method; after this, the one-, two-,
+   * or three-byte representation of each character in the string <code>s</code> is written.
+   * <p>
+   * The bytes written by this method may be read by the <code>readUTF</code> method of interface
+   * <code>DataInput</code> , which will then return a <code>String</code> equal to <code>s</code>.
+   *
+   * @param str the string value to be written.
+   */
+  public void writeUTF(String str) throws UTFDataFormatException {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    if (ASCII_STRINGS) {
+      writeAsciiUTF(str, true);
+    } else {
+      writeFullUTF(str, true);
+    }
+  }
+
+  private void writeAsciiUTF(String str, boolean encodeLength) throws UTFDataFormatException {
+    int strlen = str.length();
+    if (encodeLength && strlen > 65535) {
+      throw new UTFDataFormatException();
+    }
+
+    int maxLen = strlen;
+    if (encodeLength) {
+      maxLen += 2;
+    }
+    ensureCapacity(maxLen);
+
+    if (encodeLength) {
+      this.buffer.putShort((short) strlen);
+    }
+    if (this.buffer.hasArray()) {
+      // I know this is a deprecated method but it is PERFECT for this impl.
+      int pos = this.buffer.position();
+      str.getBytes(0, strlen, this.buffer.array(), this.buffer.arrayOffset() + pos);
+      this.buffer.position(pos + strlen);
+    } else {
+      for (int i = 0; i < strlen; i++) {
+        this.buffer.put((byte) str.charAt(i));
+      }
+      // byte[] bytes = new byte[strlen];
+      // str.getBytes(0, strlen, bytes, 0);
+      // this.buffer.put(bytes);
+    }
+  }
+
+  /**
+   * The logic used here is based on java's DataOutputStream.writeUTF() from the version 1.6.0_10.
+   * The reader code should use the logic similar to DataOutputStream.readUTF() from the version
+   * 1.6.0_10 to decode this properly.
+   */
+  private void writeFullUTF(String str, boolean encodeLength) throws UTFDataFormatException {
+    int strlen = str.length();
+    if (encodeLength && strlen > 65535) {
+      throw new UTFDataFormatException();
+    }
+    // make room for worst case space 3 bytes for each char and 2 for len
+    {
+      int maxLen = (strlen * 3);
+      if (encodeLength) {
+        maxLen += 2;
+      }
+      ensureCapacity(maxLen);
+    }
+    int utfSizeIdx = this.buffer.position();
+    if (encodeLength) {
+      // skip bytes reserved for length
+      this.buffer.position(utfSizeIdx + 2);
+    }
+    for (int i = 0; i < strlen; i++) {
+      int c = str.charAt(i);
+      if ((c >= 0x0001) && (c <= 0x007F)) {
+        this.buffer.put((byte) c);
+      } else if (c > 0x07FF) {
+        this.buffer.put((byte) (0xE0 | ((c >> 12) & 0x0F)));
+        this.buffer.put((byte) (0x80 | ((c >> 6) & 0x3F)));
+        this.buffer.put((byte) (0x80 | ((c >> 0) & 0x3F)));
+      } else {
+        this.buffer.put((byte) (0xC0 | ((c >> 6) & 0x1F)));
+        this.buffer.put((byte) (0x80 | ((c >> 0) & 0x3F)));
+      }
+    }
+    int utflen = this.buffer.position() - utfSizeIdx;
+    if (encodeLength) {
+      utflen -= 2;
+      if (utflen > 65535) {
+        // act as if we wrote nothing to this buffer
+        this.buffer.position(utfSizeIdx);
+        throw new UTFDataFormatException();
+      }
+      this.buffer.putShort(utfSizeIdx, (short) utflen);
+    }
+  }
+
+  /**
+   * Same as {@link #writeUTF} but it does not encode the length in the first two bytes and allows
+   * strings longer than 65k to be encoded.
+   */
+  public void writeUTFNoLength(String str) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    try {
+      if (ASCII_STRINGS) {
+        writeAsciiUTF(str, false);
+      } else {
+        writeFullUTF(str, false);
+      }
+    } catch (UTFDataFormatException ex) {
+      // this shouldn't happen since we did not encode the length
+      throw new IllegalStateException(
+          String.format("unexpected %s", ex));
+    }
+  }
+
+  /**
+   * Write a byte buffer to this BufferDataOutputStream,
+   *
+   * the contents of the buffer between the position and the limit are copied to the output stream.
+   */
+  public void write(ByteBuffer bb) {
+    if (this.ignoreWrites)
+      return;
+    checkIfWritable();
+    int remaining = bb.remaining();
+    if (remaining == 0)
+      return;
+    if (this.doNotCopy && remaining > MIN_TO_COPY) {
+      moveBufferToChunks();
+      addToChunks(bb);
+    } else {
+      int remainingSpace = this.buffer.remaining();
+      if (remainingSpace < remaining) {
+        int oldLimit = bb.limit();
+        bb.limit(bb.position() + remainingSpace);
+        this.buffer.put(bb);
+        bb.limit(oldLimit);
+        ensureCapacity(bb.remaining());
+      }
+      this.buffer.put(bb);
+    }
+  }
+
+  public static class LongUpdater {
+    private final ByteBuffer bb;
+    private final int pos;
+
+    public LongUpdater(ByteBuffer bb) {
+      this.bb = bb;
+      this.pos = bb.position();
+    }
+
+    public void update(long v) {
+      this.bb.putLong(this.pos, v);
+    }
+  }
+
+  private class HDInputStream extends InputStream {
+    private Iterator<ByteBuffer> chunkIt;
+    private ByteBuffer bb;
+
+    public HDInputStream() {
+      finishWriting();
+      if (BufferDataOutputStream.this.chunks != null) {
+        this.chunkIt = BufferDataOutputStream.this.chunks.iterator();
+        nextChunk();
+      } else {
+        this.chunkIt = null;
+        this.bb = BufferDataOutputStream.this.buffer;
+      }
+    }
+
+    private void nextChunk() {
+      if (this.chunkIt != null) {
+        if (this.chunkIt.hasNext()) {
+          this.bb = this.chunkIt.next();
+        } else {
+          this.chunkIt = null;
+          this.bb = BufferDataOutputStream.this.buffer;
+        }
+      } else {
+        this.bb = null; // EOF
+      }
+    }
+
+    @Override
+    public int available() {
+      return size();
+    }
+
+    @Override
+    public int read() {
+      if (available() <= 0) {
+        return -1;
+      } else {
+        int remaining = this.bb.limit() - this.bb.position();
+        while (remaining == 0) {
+          nextChunk();
+          remaining = this.bb.limit() - this.bb.position();
+        }
+        consume(1);
+        return this.bb.get() & 0xFF; // fix for bug 37068
+      }
+    }
+
+    @Override
+    public int read(byte[] dst, int off, int len) {
+      if (available() <= 0) {
+        return -1;
+      } else {
+        int readCount = 0;
+        while (len > 0 && this.bb != null) {
+          if (this.bb.limit() == this.bb.position()) {
+            nextChunk();
+          } else {
+            int remaining = this.bb.limit() - this.bb.position();
+            int bytesToRead = len;
+            if (len > remaining) {
+              bytesToRead = remaining;
+            }
+            this.bb.get(dst, off, bytesToRead);
+            off += bytesToRead;
+            len -= bytesToRead;
+            readCount += bytesToRead;
+          }
+        }
+        consume(readCount);
+        return readCount;
+      }
+    }
+
+    @Override
+    public long skip(long n) {
+      int remaining = size();
+      if (remaining <= n) {
+        // just skip over bytes remaining
+        this.chunkIt = null;
+        this.bb = null;
+        consume(remaining);
+        return remaining;
+      } else {
+        long skipped = 0;
+        do {
+          long skipsRemaining = n - skipped;
+          skipped += chunkSkip(skipsRemaining);
+        } while (skipped != n);
+        return n;
+      }
+    }
+
+    private long chunkSkip(long n) {
+      int remaining = this.bb.limit() - this.bb.position();
+      if (remaining <= n) {
+        // skip this whole chunk
+        this.bb.position(this.bb.limit());
+        nextChunk();
+        consume(remaining);
+        return remaining;
+      } else {
+        // skip over just a part of this chunk
+        this.bb.position(this.bb.position() + (int) n);
+        consume((int) n);
+        return n;
+      }
+    }
+
+    private void consume(int c) {
+      BufferDataOutputStream.this.size -= c;
+    }
+
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/ByteArrayDataInput.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/ByteArrayDataInput.java
similarity index 95%
rename from geode-core/src/main/java/org/apache/geode/internal/ByteArrayDataInput.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/ByteArrayDataInput.java
index f132673..20d5f2f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/ByteArrayDataInput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/ByteArrayDataInput.java
@@ -13,7 +13,7 @@
  * the License.
  */
 
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataInput;
 import java.io.EOFException;
@@ -23,8 +23,8 @@ import java.io.UTFDataFormatException;
 
 /**
  * A reusable {@link DataInput} implementation that wraps a given byte array. It also implements
- * {@link org.apache.geode.internal.VersionedDataStream} for a stream coming from a different
- * product version.
+ * {@link org.apache.geode.internal.serialization.VersionedDataStream} for a stream coming from a
+ * different product version.
  *
  * @since GemFire 7.1
  */
@@ -35,7 +35,7 @@ public class ByteArrayDataInput extends InputStream implements DataInput, Versio
   private int pos;
   /** reusable buffer for readUTF */
   private char[] charBuf;
-  private Version version;
+  private short version;
 
   /**
    * Create a {@link DataInput} whose contents are empty.
@@ -43,10 +43,10 @@ public class ByteArrayDataInput extends InputStream implements DataInput, Versio
   public ByteArrayDataInput() {}
 
   public ByteArrayDataInput(byte[] bytes) {
-    initialize(bytes, null);
+    initialize(bytes, (short) 0);
   }
 
-  public ByteArrayDataInput(byte[] bytes, Version version) {
+  public ByteArrayDataInput(byte[] bytes, short version) {
     initialize(bytes, version);
   }
 
@@ -57,19 +57,19 @@ public class ByteArrayDataInput extends InputStream implements DataInput, Versio
    *        (a copy is not made) so it should not be changed externally.
    * @param version the product version that serialized the object on given bytes
    */
-  public void initialize(byte[] bytes, Version version) {
+  public void initialize(byte[] bytes, int version) {
     this.bytes = bytes;
     this.nBytes = bytes.length;
     this.pos = 0;
-    this.version = version;
+    this.version = (short) version;
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
-    return this.version;
+  public short getVersionOrdinal() {
+    return version;
   }
 
   private int skipOver(long n) {
@@ -463,7 +463,7 @@ public class ByteArrayDataInput extends InputStream implements DataInput, Versio
     this.bytes = null;
     this.nBytes = 0;
     this.pos = 0;
-    this.version = null;
+    this.version = 0;
   }
 
   /**
@@ -471,7 +471,7 @@ public class ByteArrayDataInput extends InputStream implements DataInput, Versio
    */
   @Override
   public String toString() {
-    return this.version == null ? super.toString() : (super.toString() + " (" + this.version + ')');
+    return this.version == 0 ? super.toString() : (super.toString() + " (v" + this.version + ')');
   }
 
   private void throwUTFEncodingError(int index, int char1, int char2, Integer char3, int enc)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java
index 3a534f5..2da672f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java
@@ -12,10 +12,9 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * An enumeration that contains a bunch of pre-defined values for use in the implementation of
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDNotFoundException.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDNotFoundException.java
index 3b3643a..cefc237 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDNotFoundException.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDNotFoundException.java
@@ -13,10 +13,12 @@
  * the License.
  */
 
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.NotSerializableException;
 
+import org.apache.geode.internal.Version;
+
 /**
  * Exception to indicate that a specified DSFID type could not be found (e.g. due to class being
  * absent in lower product versions).
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java
index afae242..37cd5a7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java
@@ -28,7 +28,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.CancelException;
-import org.apache.geode.DataSerializable;
 import org.apache.geode.GemFireRethrowable;
 import org.apache.geode.InternalGemFireError;
 import org.apache.geode.SerializationException;
@@ -37,10 +36,11 @@ import org.apache.geode.ToDataException;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 
-public class BasicDSFIDSerializer {
+public class DSFIDSerializer {
   private static final Logger logger = LogService.getLogger();
 
   @Immutable
@@ -77,7 +77,9 @@ public class BasicDSFIDSerializer {
   public void writeDSFID(DataSerializableFixedID o, int dsfid, DataOutput out)
       throws IOException {
     if (dsfid == NO_FIXED_ID) {
-      throw new IllegalArgumentException("NO_FIXED_ID is not supported by BasicDSFIDSerializer - use InternalDataSerializer instead: " + o.getClass().getName());
+      throw new IllegalArgumentException(
+          "NO_FIXED_ID is not supported by BasicDSFIDSerializer - use InternalDataSerializer instead: "
+              + o.getClass().getName());
     }
     writeDSFIDHeader(dsfid, out);
     try {
@@ -117,7 +119,8 @@ public class BasicDSFIDSerializer {
   public void invokeToData(Object ds, DataOutput out) throws IOException {
     boolean isDSFID = ds instanceof DataSerializableFixedID;
     if (!isDSFID) {
-      throw new IllegalArgumentException("Expected a DataSerializableFixedID but found " + ds.getClass().getName());
+      throw new IllegalArgumentException(
+          "Expected a DataSerializableFixedID but found " + ds.getClass().getName());
     }
     try {
       boolean invoked = false;
@@ -125,11 +128,8 @@ public class BasicDSFIDSerializer {
 
       if (Version.CURRENT != v && v != null) {
         // get versions where DataOutput was upgraded
-        Version[] versions = null;
-        if (ds instanceof SerializationVersions) {
-          SerializationVersions sv = (SerializationVersions) ds;
-          versions = sv.getSerializationVersions();
-        }
+        SerializationVersions sv = (SerializationVersions) ds;
+        Version[] versions = sv.getSerializationVersions();
         // check if the version of the peer or diskstore is different and
         // there has been a change in the message
         if (versions != null) {
@@ -170,21 +170,24 @@ public class BasicDSFIDSerializer {
       // is still usable:
       SystemFailure.checkFailure();
       throw new ToDataException(
-          "toData failed on DataSerializableFixedID " + null == ds ? "null" : ds.getClass().toString(), t);
+          "toData failed on DataSerializableFixedID " + null == ds ? "null"
+              : ds.getClass().toString(),
+          t);
     }
   }
 
   /**
-   * Get the {@link Version} of the peer or disk store that created this {@link DataOutput}. Returns
-   * null if the version is same as this member's.
+   * Get the {@link Version} ordinal of the peer or disk store that created this {@link DataOutput}.
+   * Returns
+   * zero if the version is same as this member's.
    */
-  public Version getVersionForDataStreamOrNull(DataOutput out) {
+  public short getVersionForDataStreamOrZero(DataOutput out) {
     // check if this is a versioned data output
     if (out instanceof VersionedDataStream) {
-      return ((VersionedDataStream) out).getVersion();
+      return ((VersionedDataStream) out).getVersionOrdinal();
     } else {
       // assume latest version
-      return null;
+      return 0;
     }
   }
 
@@ -200,7 +203,8 @@ public class BasicDSFIDSerializer {
       case DS_FIXED_ID_SHORT:
         return create(in.readShort(), in);
       case DS_NO_FIXED_ID:
-        throw new IllegalStateException("DS_NO_FIXED_ID is not supported in readDSFID - use InternalDataSerializer instead");
+        throw new IllegalStateException(
+            "DS_NO_FIXED_ID is not supported in readDSFID - use InternalDataSerializer instead");
       case DS_FIXED_ID_INT:
         return create(in.readInt(), in);
       default:
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
index 8536013..8f2b2bd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
@@ -12,14 +12,13 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.DataSerializer;
-import org.apache.geode.Instantiator;
+import org.apache.geode.internal.Version;
 
 /**
  * An interface that implements data serialization for internal GemFire product classes that have a
@@ -30,8 +29,7 @@ import org.apache.geode.Instantiator;
  * Implementors MUST have a public zero-arg constructor.
  *
  * <p>
- * Note that this class is for internal use only. Customer classes that want to do something
- * similar should implement a subclass of {@link DataSerializer} or {@link Instantiator}.
+ * Note that this class is for internal use only.
  *
  * <p>
  * To add a new DataSerializableFixedID do this following:
@@ -42,19 +40,12 @@ import org.apache.geode.Instantiator;
  * should use {@link #NO_FIXED_ID}. In this case you can skip steps 3 and 4.
  * <li>Define a method in the class that implements <code>DataSerializableFixedID</code> named
  * {@link #getDSFID} that returns the constant from step 1.
- * <li>Define a private static method in {@link DSFIDFactory} that returns an instance of the class
- * from step 2 usually be calling its zero-arg constructor and then calling fromData(in). See the
- * end of {@link DSFIDFactory} for examples.
- * <li>Add a case statement in {@link DSFIDFactory#create} for the constant from step 1 that calls
- * the method from step 3.
+ * <li>Add registration of your class to DSFIDFactory's registration method.
  * <li>Implement {@link #toData} and {@link #fromData} just like you would on a
- * <code>DataSerializer</code>. Make sure you follow the javadocs for these methods to add support
+ * DataSerializable class. Make sure you follow the javadocs for these methods to add support
  * for rolling upgrades.
  * </ol>
  *
- * @see DataSerializer
- *
- * @since GemFire 5.7
  */
 public interface DataSerializableFixedID extends SerializationVersions {
 
@@ -845,10 +836,11 @@ public interface DataSerializableFixedID extends SerializationVersions {
    * Writes the state of this object as primitive data to the given <code>DataOutput</code>.<br>
    * <br>
    * Note: For rolling upgrades, if there is a change in the object format from previous version,
-   * add a new toDataPre_GFE_X_X_X_X() method and add an entry for the current {@link Version} in
-   * the getSerializationVersions array of the implementing class. e.g. if msg format changed in
-   * version 80, create toDataPre_GFE_8_0_0_0, add Version.GFE_80 to the getSerializationVersions
-   * array and copy previous toData contents to this newly created toDataPre_GFE_X_X_X_X() method.
+   * add a new toDataPre_GFE_X_X_X_X() method and add an entry for the current {@link
+   * Version} in the getSerializationVersions array of the
+   * implementing class. e.g. if msg format changed in version 80, create toDataPre_GFE_8_0_0_0, add
+   * Version.GFE_80 to the getSerializationVersions array and copy previous toData contents to this
+   * newly created toDataPre_GFE_X_X_X_X() method.
    *
    * @throws IOException A problem occurs while writing to <code>out</code>
    */
@@ -858,16 +850,14 @@ public interface DataSerializableFixedID extends SerializationVersions {
    * Reads the state of this object as primitive data from the given <code>DataInput</code>. <br>
    * <br>
    * Note: For rolling upgrades, if there is a change in the object format from previous version,
-   * add a new fromDataPre_GFE_X_X_X_X() method and add an entry for the current {@link Version} in
-   * the getSerializationVersions array of the implementing class. e.g. if msg format changed in
-   * version 80, create fromDataPre_GFE_8_0_0_0, add Version.GFE_80 to the getSerializationVersions
-   * array and copy previous fromData contents to this newly created fromDataPre_GFE_X_X_X_X()
-   * method.
+   * add a new fromDataPre_GFE_X_X_X_X() method and add an entry for the current {@link
+   * Version} in the getSerializationVersions array of the
+   * implementing class. e.g. if msg format changed in version 80, create fromDataPre_GFE_8_0_0_0,
+   * add Version.GFE_80 to the getSerializationVersions array and copy previous fromData contents to
+   * this newly created fromDataPre_GFE_X_X_X_X() method.
    *
    * @throws IOException A problem occurs while reading from <code>in</code>
    * @throws ClassNotFoundException A class could not be loaded while reading from <code>in</code>
    */
   void fromData(DataInput in) throws IOException, ClassNotFoundException;
-
-
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java
index dd592e8..6d2db1a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java
@@ -12,13 +12,12 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.util;
+package org.apache.geode.internal.serialization;
 
 import java.io.IOException;
 import java.util.Arrays;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.serialization.DSCODE;
 
 public class DscodeHelper {
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java
index 4a3f898..1d9d2d3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java
@@ -12,9 +12,9 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.Version;
 
 /**
  * This interface is extended by DataSerializableFixedID and VersionedDataSerializable in order to
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java
index a9a5c9d..ff0fc2f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java
@@ -13,12 +13,11 @@
  * the License.
  */
 
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataInputStream;
 import java.io.InputStream;
 
-import org.apache.geode.internal.serialization.Version;
 
 
 /**
@@ -29,7 +28,7 @@ import org.apache.geode.internal.serialization.Version;
  */
 public class VersionedDataInputStream extends DataInputStream implements VersionedDataStream {
 
-  private final Version version;
+  private final short version;
 
   /**
    * Creates a VersionedDataInputStream that uses the specified underlying InputStream.
@@ -37,7 +36,7 @@ public class VersionedDataInputStream extends DataInputStream implements Version
    * @param in the specified input stream
    * @param version the product version that serialized object on the given input stream
    */
-  public VersionedDataInputStream(InputStream in, Version version) {
+  public VersionedDataInputStream(InputStream in, short version) {
     super(in);
     this.version = version;
   }
@@ -46,7 +45,7 @@ public class VersionedDataInputStream extends DataInputStream implements Version
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public short getVersionOrdinal() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java
index 1c1f185..ddbba6e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java
@@ -13,12 +13,11 @@
  * the License.
  */
 
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataOutputStream;
 import java.io.OutputStream;
 
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * An extension of {@link DataOutputStream} that implements {@link VersionedDataStream}.
@@ -27,7 +26,7 @@ import org.apache.geode.internal.serialization.Version;
  */
 public class VersionedDataOutputStream extends DataOutputStream implements VersionedDataStream {
 
-  private final Version version;
+  private final short version;
 
   /**
    * Creates a VersionedDataOutputStream that wraps the specified underlying OutputStream.
@@ -35,7 +34,7 @@ public class VersionedDataOutputStream extends DataOutputStream implements Versi
    * @param out the underlying output stream
    * @param version the product version that serialized object on the given {@link OutputStream}
    */
-  public VersionedDataOutputStream(OutputStream out, Version version) {
+  public VersionedDataOutputStream(OutputStream out, short version) {
     super(out);
     this.version = version;
   }
@@ -44,7 +43,7 @@ public class VersionedDataOutputStream extends DataOutputStream implements Versi
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public short getVersionOrdinal() {
     return this.version;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java
index d68bc84..d7f7b7a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java
@@ -13,14 +13,14 @@
  * the License.
  */
 
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataInput;
 import java.io.DataOutput;
 
 import org.apache.geode.DataSerializable;
-import org.apache.geode.internal.serialization.DataSerializableFixedID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.Version;
 
 /**
  * An extension to {@link DataOutput}, {@link DataInput} used internally in product to indicate that
@@ -37,9 +37,10 @@ public interface VersionedDataStream {
 
   /**
    * If the remote peer to which this input/output is connected has a lower version that this
-   * member, then this returns the {@link Version} of the peer else null. If the peer has a higher
+   * member, then this returns the {@link Version} ordinal of the peer else 0. If the peer has a
+   * higher
    * {@link Version}, then this member cannot do any adjustment to serialization and its the remote
    * peer's responsibility to adjust the serialization/deserialization according to this peer.
    */
-  Version getVersion();
+  short getVersionOrdinal();
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
index 2a1db17..814ce1f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
@@ -30,7 +30,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 /**
  * <p>
@@ -239,7 +239,8 @@ public class MsgDestreamer {
           ReplyProcessor21.initMessageRPId();
           final Version v = version;
           DataInputStream dis =
-              v == null ? new DataInputStream(this.is) : new VersionedDataInputStream(this.is, v);
+              v == null ? new DataInputStream(this.is)
+                  : new VersionedDataInputStream(this.is, v.ordinal());
           long startSer = this.stats.startMsgDeserialization();
           setResult((DistributionMessage) InternalDataSerializer.readDSFID(dis));
           this.stats.endMsgDeserialization(startSer);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
index 6a5a196..0945afe 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal.tcp;
 import java.nio.ByteBuffer;
 
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataStream;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
  * An extension to {@link ByteBufferInputStream} that implements {@link VersionedDataStream} for a
@@ -57,8 +57,11 @@ public class VersionedByteBufferInputStream extends ByteBufferInputStream
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
-    return this.version;
+  public short getVersionOrdinal() {
+    if (version == null) {
+      return Version.CURRENT_ORDINAL;
+    }
+    return this.version.ordinal();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
index 72b68f1..9eed78c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
@@ -20,8 +20,8 @@ import java.util.List;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataStream;
 import org.apache.geode.internal.net.BufferPool;
+import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
  * An extension of {@link MsgStreamer} that implements {@link VersionedDataStream}.
@@ -42,8 +42,11 @@ class VersionedMsgStreamer extends MsgStreamer implements VersionedDataStream {
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
-    return this.version;
+  public short getVersionOrdinal() {
+    if (version == null) {
+      return Version.CURRENT_ORDINAL;
+    }
+    return this.version.ordinal();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java b/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
index 8f7ae40..f045151 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
@@ -19,12 +19,12 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.internal.ByteArrayDataInput;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.pdx.internal.PdxInputStream;
 
 /**
@@ -95,7 +95,7 @@ public class BlobHelper {
       if (in == null) {
         in = new ByteArrayDataInput();
       }
-      in.initialize(blob, version);
+      in.initialize(blob, version == null ? 0 : version.ordinal());
       result = DataSerializer.readObject(in);
     }
     endDeserialization(start, blob.length);
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java b/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
index e49491e..32baef8 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
@@ -27,9 +27,9 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Central component for federation It consists of an Object State as well as some meta data for the
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
index cf8e502..d7ef63e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
@@ -24,12 +24,12 @@ import java.util.Properties;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.distributed.internal.tcpserver.LocatorCancelException;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.net.SSLConfigurationFactory;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Sent to a locator to request it to find (and possibly start) a jmx manager for us. It returns a
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
index ebb8d9a..1e35b8a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
@@ -21,8 +21,8 @@ import java.net.InetAddress;
 import java.net.UnknownHostException;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Sent to a locator to request it to find (and possibly start) a jmx manager for us. It returns a
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
index a2ac1d5..c84e0fb 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConnectCommand.java
@@ -38,7 +38,6 @@ import org.springframework.shell.core.annotation.CliCommand;
 import org.springframework.shell.core.annotation.CliOption;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DSFIDFactory;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.net.SSLConfigurationFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
@@ -391,11 +390,6 @@ public class ConnectCommand extends OfflineGfshCommand {
 
   public static ConnectToLocatorResult connectToLocator(String host, int port, int timeout,
       Properties props) throws IOException, ClassNotFoundException {
-    // register DSFID types first; invoked explicitly so that all message type
-    // initializations do not happen in first deserialization on a possibly
-    // "precious" thread
-    DSFIDFactory.registerTypes();
-
     JmxManagerLocatorResponse locatorResponse =
         JmxManagerLocatorRequest.send(host, port, timeout, props);
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
index 424ffc4..a41f490 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
@@ -24,8 +24,8 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 
 public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSerializableFixedID {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
index 1ea801e..5bc0b76 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
@@ -33,8 +33,8 @@ import org.xml.sax.SAXException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.InternalGemFireError;
 import org.apache.geode.distributed.DistributedMember;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/FieldType.java b/geode-core/src/main/java/org/apache/geode/pdx/FieldType.java
index 5c56c86..98fb53c 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/FieldType.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/FieldType.java
@@ -17,8 +17,8 @@ package org.apache.geode.pdx;
 import java.nio.ByteBuffer;
 import java.util.Date;
 
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.pdx.internal.DataSize;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
index 62cd2e2..190299e 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
@@ -18,8 +18,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class EnumId implements DataSerializableFixedID {
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
index b75d005..bb4fde7 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
@@ -25,10 +25,10 @@ import java.util.List;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.pdx.WritablePdxInstance;
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
index d166539..8c269e5 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
@@ -22,10 +22,10 @@ import java.util.List;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.pdx.WritablePdxInstance;
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceImpl.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceImpl.java
index 2a76272..24f07c7 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceImpl.java
@@ -34,10 +34,10 @@ import org.apache.geode.InternalGemFireException;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.internal.ClassPathLoader;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxReaderImpl.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxReaderImpl.java
index 5ee2fa3..b4b7196 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxReaderImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxReaderImpl.java
@@ -22,10 +22,10 @@ import java.util.Date;
 
 import org.apache.geode.InternalGemFireException;
 import org.apache.geode.annotations.internal.MutableForTesting;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.pdx.FieldType;
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxString.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxString.java
index 9f3a636..d9baacd 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxString.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxString.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.Sendable;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
 /**
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java
index ea74414..1b36e6b 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java
@@ -21,10 +21,10 @@ import java.util.Date;
 
 import org.apache.geode.InternalGemFireException;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.pdx.FieldType;
 import org.apache.geode.pdx.PdxFieldAlreadyExistsException;
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
index 9ad21a8..54f5c71 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
@@ -30,6 +30,7 @@ import com.fasterxml.jackson.core.JsonGenerator.Feature;
 
 import org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.internal.HeapDataOutputStream;
+import org.apache.geode.internal.Version;
 import org.apache.geode.pdx.JSONFormatter;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.EnumInfo;
@@ -51,7 +52,7 @@ public class PdxToJSON {
 
   public String getJSON() {
     JsonFactory jf = new JsonFactory();
-    HeapDataOutputStream hdos = new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
     try {
       JsonGenerator jg = jf.createJsonGenerator(hdos, JsonEncoding.UTF8);
       enableDisableJSONGeneratorFeature(jg);
@@ -67,7 +68,7 @@ public class PdxToJSON {
 
   public byte[] getJSONByteArray() {
     JsonFactory jf = new JsonFactory();
-    HeapDataOutputStream hdos = new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
     try {
       JsonGenerator jg = jf.createJsonGenerator(hdos, JsonEncoding.UTF8);
       enableDisableJSONGeneratorFeature(jg);
diff --git a/geode-core/src/test/java/org/apache/geode/DataSerializerTest.java b/geode-core/src/test/java/org/apache/geode/DataSerializerTest.java
index eaa085d..823ee30 100644
--- a/geode-core/src/test/java/org/apache/geode/DataSerializerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/DataSerializerTest.java
@@ -25,9 +25,9 @@ import java.io.IOException;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
@@ -57,9 +57,9 @@ public class DataSerializerTest {
   public void readStringShouldReturnCanonicalEmptyString() throws IOException {
     byte[] serializedEmptyStringBytes = BlobHelper.serializeToBlob("");
     ByteArrayDataInput dataInput1 = new ByteArrayDataInput();
-    dataInput1.initialize(serializedEmptyStringBytes, null);
+    dataInput1.initialize(serializedEmptyStringBytes, 0);
     ByteArrayDataInput dataInput2 = new ByteArrayDataInput();
-    dataInput2.initialize(serializedEmptyStringBytes, null);
+    dataInput2.initialize(serializedEmptyStringBytes, 0);
 
     String firstRead = DataSerializer.readString(dataInput1);
     String secondRead = DataSerializer.readString(dataInput2);
diff --git a/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
index f792a6b..734c9e9 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
 
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 public class FunctionAdapterJUnitTest {
 
@@ -76,7 +76,8 @@ public class FunctionAdapterJUnitTest {
             createTempFileFromResource(getClass(), getClass().getSimpleName() + "."
                 + "serializedFunctionAdapterWithDifferentSerialVersionUID.ser").getAbsolutePath());
 
-    DataInputStream dis = new VersionedDataInputStream(new DataInputStream(fis), Version.GFE_82);
+    DataInputStream dis =
+        new VersionedDataInputStream(new DataInputStream(fis), Version.GFE_82.ordinal());
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof FunctionAdapter);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
index 28f636c..c7bdd8a 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipDependenciesJUnitTest.java
@@ -42,12 +42,10 @@ import org.apache.geode.distributed.internal.OverflowQueueWithDMStats;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.ConnectionWatcher;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.OSProcess;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
 import org.apache.geode.internal.VersionedObjectInput;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
@@ -59,6 +57,8 @@ import org.apache.geode.internal.logging.LoggingThread;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.tcp.ConnectExceptions;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.internal.util.JavaWorkarounds;
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberJUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberJUnitTest.java
index b22d90d..29f7dac 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberJUnitTest.java
@@ -36,7 +36,7 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.test.junit.categories.SecurityTest;
 
 @Category({SecurityTest.class})
@@ -202,7 +202,7 @@ public class GMSMemberJUnitTest {
     dataOutput = new HeapDataOutputStream(Version.GFE_90);
     member.writeEssentialData(dataOutput);
     bais = new ByteArrayInputStream(baos.toByteArray());
-    dataInput = new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_90);
+    dataInput = new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_90.ordinal());
     newMember = new GMSMember();
     newMember.readEssentialData(dataInput);
     assertEquals(0, newMember.getVmKind());
diff --git a/geode-core/src/test/java/org/apache/geode/internal/ByteArrayDataInputTest.java b/geode-core/src/test/java/org/apache/geode/internal/ByteArrayDataInputTest.java
index 8e8c56b..015f949 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/ByteArrayDataInputTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/ByteArrayDataInputTest.java
@@ -23,6 +23,8 @@ import java.io.IOException;
 
 import org.junit.Test;
 
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+
 public class ByteArrayDataInputTest {
   @Test
   public void readFullyThatReadsPastEndOfDataThrowsEOFException() throws IOException {
@@ -237,7 +239,7 @@ public class ByteArrayDataInputTest {
       return new java.io.DataInputStream(new java.io.ByteArrayInputStream(inputBytes));
     } else {
       ByteArrayDataInput input = new ByteArrayDataInput();
-      input.initialize(inputBytes, null);
+      input.initialize(inputBytes, 0);
       return input;
     }
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
index 0df787e..bb53fe4 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
@@ -68,6 +68,8 @@ import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
 import org.apache.geode.SystemFailure;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.statistics.StatArchiveWriter;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 import org.apache.geode.test.junit.categories.SerializationTest;
@@ -1162,13 +1164,14 @@ public class DataSerializableJUnitTest implements Serializable {
   public void testVersionedDataSerializable() throws Exception {
     VersionedDataSerializableImpl ds = new VersionedDataSerializableImpl(getRandom());
 
-    VersionedDataOutputStream v = new VersionedDataOutputStream(this.baos, Version.GFE_70);
+    VersionedDataOutputStream v =
+        new VersionedDataOutputStream(this.baos, Version.GFE_70.ordinal());
     DataSerializer.writeObject(ds, v);
     v.flush();
 
     ByteBuffer bb = ByteBuffer.wrap(this.baos.toByteArray());
     ByteBufferInputStream bbis = new ByteBufferInputStream(bb);
-    VersionedDataInputStream vin = new VersionedDataInputStream(bbis, Version.GFE_70);
+    VersionedDataInputStream vin = new VersionedDataInputStream(bbis, Version.GFE_70.ordinal());
     VersionedDataSerializableImpl ds2 =
         (VersionedDataSerializableImpl) DataSerializer.readObject(vin);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
index 74ce53a..ce4e05a 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.serialization;
+package org.apache.geode.internal;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -28,8 +28,7 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.UnitTestValueHolder;
-import org.apache.geode.internal.serialization.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.BufferDataOutputStream;
 import org.apache.geode.pdx.internal.TypeRegistry;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
@@ -112,7 +111,7 @@ public class HeapDataOutputStreamJUnitTest {
 
     out.write(0);
 
-    byte[] bytes = new byte[HeapDataOutputStream.MIN_TO_COPY + 1];
+    byte[] bytes = new byte[BufferDataOutputStream.MIN_TO_COPY + 1];
     for (int i = 0; i < bytes.length; i++) {
       bytes[i] = (byte) ((i + 1) % 128);
     }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java
index 86f5604..fa3e96e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java
@@ -12,14 +12,15 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal.serialization;
+package org.apache.geode.internal;
 
-import static org.apache.geode.internal.serialization.HeapDataOutputStream.SMALLEST_CHUNK_SIZE;
+import static org.apache.geode.internal.HeapDataOutputStream.SMALLEST_CHUNK_SIZE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.ByteBuffer;
 
 import org.junit.Test;
@@ -33,9 +34,9 @@ public class HeapDataOutputStreamTest {
   @Test
   public void shouldBeMockable() throws Exception {
     HeapDataOutputStream mockHeapDataOutputStream = mock(HeapDataOutputStream.class);
-    Version mockVersion = mock(Version.class);
-    when(mockHeapDataOutputStream.getVersion()).thenReturn(mockVersion);
-    assertThat(mockHeapDataOutputStream.getVersion()).isEqualTo(mockVersion);
+    InputStream mockInputStream = mock(InputStream.class);
+    when(mockHeapDataOutputStream.getInputStream()).thenReturn(mockInputStream);
+    assertThat(mockHeapDataOutputStream.getInputStream()).isEqualTo(mockInputStream);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java
index f787141..f9a48d1 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerJUnitTest.java
@@ -38,6 +38,7 @@ import org.apache.geode.InternalGemFireException;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.examples.security.ExampleSecurityManager;
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
 /**
diff --git a/geode-core/src/test/java/org/apache/geode/internal/alerting/AlertListenerMessageFactoryTest.java b/geode-core/src/test/java/org/apache/geode/internal/alerting/AlertListenerMessageFactoryTest.java
index 92c2353..4c875b4 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/alerting/AlertListenerMessageFactoryTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/alerting/AlertListenerMessageFactoryTest.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.internal.alerting;
 
-import static org.apache.geode.internal.DataSerializableFixedID.ALERT_LISTENER_MESSAGE;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.ALERT_LISTENER_MESSAGE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.catchThrowable;
 import static org.mockito.Mockito.mock;
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
index 40ad820..014f94d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
@@ -23,10 +23,10 @@ import java.util.Set;
 
 import org.junit.Test;
 
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Unit test for FilterRoutingInfo.FilterInfo
@@ -52,7 +52,7 @@ public class FilterInfoTest {
     byte[] outputBytes = dataOut.toByteArray();
     FilterInfo deserialized = new FilterInfo();
     ByteArrayDataInput dataInput = new ByteArrayDataInput();
-    dataInput.initialize(outputBytes, Version.CURRENT);
+    dataInput.initialize(outputBytes, Version.CURRENT_ORDINAL);
     deserialized.fromData(dataInput);
     assertThat(deserialized.getCQs()).isEqualTo(cqs);
     assertThat(deserialized.getInterestedClients()).isEqualTo(clients);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
index e04feab..d185e9d 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
@@ -26,9 +26,9 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.EventID;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 /**
@@ -180,14 +180,15 @@ public class EventIdOptimizationJUnitTest {
 
 
     HeapDataOutputStream hdos90 = new HeapDataOutputStream(256, Version.GFE_90);
-    VersionedDataOutputStream dop = new VersionedDataOutputStream(hdos90, Version.GFE_90);
+    VersionedDataOutputStream dop = new VersionedDataOutputStream(hdos90, Version.GFE_90.ordinal());
 
     eventID.toData(dop);
 
     ByteArrayInputStream bais = new ByteArrayInputStream(hdos90.toByteArray());
 
 
-    VersionedDataInputStream dataInputStream = new VersionedDataInputStream(bais, Version.GFE_90);
+    VersionedDataInputStream dataInputStream =
+        new VersionedDataInputStream(bais, Version.GFE_90.ordinal());
 
     EventID eventID2 = new EventID();
     eventID2.fromData(dataInputStream);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/AbstractStoredObjectTestBase.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/AbstractStoredObjectTestBase.java
index 6a867bc..bb50a92 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/AbstractStoredObjectTestBase.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/AbstractStoredObjectTestBase.java
@@ -25,7 +25,7 @@ import java.io.IOException;
 
 import org.junit.Test;
 
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public abstract class AbstractStoredObjectTestBase {
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
index b0ee6be..ea9ef3c 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
@@ -14,7 +14,6 @@
  */
 package org.apache.geode.internal.offheap;
 
-import static org.apache.geode.internal.DSFIDFactory.registerDSFID;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -57,15 +56,14 @@ import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
 import org.apache.geode.distributed.internal.ReplyMessage;
-import org.apache.geode.internal.DSCODE;
-import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.DataSerializableJUnitTest.DataSerializableImpl;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.ShutdownAllResponse;
 import org.apache.geode.internal.cache.execute.data.CustId;
+import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Tests the DataType support for off-heap MemoryInspector.
@@ -95,7 +93,9 @@ public class DataTypeJUnitTest {
     byte[] bytes = baos.toByteArray();
     String type = DataType.getDataType(bytes);
     assertEquals(
-        "org.apache.geode.internal.DataSerializableFixedID:" + ReplyMessage.class.getName(), type);
+        "org.apache.geode.internal.serialization.DataSerializableFixedID:"
+            + ReplyMessage.class.getName(),
+        type);
   }
 
   @Test
@@ -107,19 +107,23 @@ public class DataTypeJUnitTest {
     byte[] bytes = baos.toByteArray();
     String type = DataType.getDataType(bytes);
     assertEquals(
-        "org.apache.geode.internal.DataSerializableFixedID:" + ShutdownAllResponse.class
-            .getName(),
+        "org.apache.geode.internal.serialization.DataSerializableFixedID:"
+            + ShutdownAllResponse.class
+                .getName(),
         type);
   }
 
   @Test
   public void testDataSerializableFixedIDInt() throws IOException, ClassNotFoundException {
     assertFalse(
-        DSFIDFactory.getDsfidmap2().containsKey(DummyIntDataSerializableFixedID.INT_SIZE_id));
-    registerDSFID(DummyIntDataSerializableFixedID.INT_SIZE_id,
+        InternalDataSerializer.getDSFIDSerializer().getDsfidmap2()
+            .containsKey(DummyIntDataSerializableFixedID.INT_SIZE_id));
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DummyIntDataSerializableFixedID.INT_SIZE_id,
         DummyIntDataSerializableFixedID.class);
     assertTrue(
-        DSFIDFactory.getDsfidmap2().containsKey(DummyIntDataSerializableFixedID.INT_SIZE_id));
+        InternalDataSerializer.getDSFIDSerializer().getDsfidmap2()
+            .containsKey(DummyIntDataSerializableFixedID.INT_SIZE_id));
 
     try {
       DummyIntDataSerializableFixedID dummyObj = new DummyIntDataSerializableFixedID();
@@ -130,13 +134,15 @@ public class DataTypeJUnitTest {
       byte[] bytes = baos.toByteArray();
 
       String type = DataType.getDataType(bytes);
-      assertEquals("org.apache.geode.internal.DataSerializableFixedID:"
+      assertEquals("org.apache.geode.internal.serialization.DataSerializableFixedID:"
           + DummyIntDataSerializableFixedID.class.getName(),
           type);
     } finally {
-      DSFIDFactory.getDsfidmap2().remove(DummyIntDataSerializableFixedID.INT_SIZE_id);
+      InternalDataSerializer.getDSFIDSerializer().getDsfidmap2()
+          .remove(DummyIntDataSerializableFixedID.INT_SIZE_id);
       assertFalse(
-          DSFIDFactory.getDsfidmap2().containsKey(DummyIntDataSerializableFixedID.INT_SIZE_id));
+          InternalDataSerializer.getDSFIDSerializer().getDsfidmap2()
+              .containsKey(DummyIntDataSerializableFixedID.INT_SIZE_id));
     }
   }
 
@@ -148,7 +154,8 @@ public class DataTypeJUnitTest {
     DataSerializer.writeClass(Integer.class, out);
     byte[] bytes = baos.toByteArray();
     String type = DataType.getDataType(bytes);
-    assertEquals("org.apache.geode.internal.DataSerializableFixedID:" + Integer.class.getName(),
+    assertEquals("org.apache.geode.internal.serialization.DataSerializableFixedID:"
+        + Integer.class.getName(),
         type);
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/MemoryBlockNodeJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/MemoryBlockNodeJUnitTest.java
index 7b8c460..5d54d96 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/MemoryBlockNodeJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/MemoryBlockNodeJUnitTest.java
@@ -36,9 +36,9 @@ import org.junit.rules.ExpectedException;
 
 import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.distributed.internal.DistributionConfig;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.offheap.MemoryBlock.State;
+import org.apache.geode.internal.serialization.DSCODE;
 
 public class MemoryBlockNodeJUnitTest {
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
index b210e82..3c219ff 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapRegionEntryHelperJUnitTest.java
@@ -35,7 +35,6 @@ import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
 import org.apache.geode.compression.Compressor;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.cache.DiskId;
 import org.apache.geode.internal.cache.EntryEventImpl;
@@ -45,6 +44,7 @@ import org.apache.geode.internal.cache.VMCachedDeserializable;
 import org.apache.geode.internal.cache.entries.DiskEntry;
 import org.apache.geode.internal.cache.entries.OffHeapRegionEntry;
 import org.apache.geode.internal.cache.entries.VersionedStatsDiskRegionEntryOffHeap;
+import org.apache.geode.internal.serialization.DSCODE;
 
 @RunWith(PowerMockRunner.class)
 @PowerMockIgnore("*.UnitTest")
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
index 87b5f1f..cdd25f3 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
@@ -37,7 +37,6 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import org.apache.geode.compression.Compressor;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
@@ -45,6 +44,7 @@ import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.RegionEntryContext;
 import org.apache.geode.internal.offheap.MemoryBlock.State;
+import org.apache.geode.internal.serialization.DSCODE;
 
 public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/TinyStoredObjectJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/TinyStoredObjectJUnitTest.java
index d4f311c..8a9632f 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/TinyStoredObjectJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/TinyStoredObjectJUnitTest.java
@@ -29,11 +29,11 @@ import java.nio.ByteBuffer;
 import org.junit.Test;
 
 import org.apache.geode.compression.Compressor;
-import org.apache.geode.internal.DSCODE;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
 import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.RegionEntryContext;
+import org.apache.geode.internal.serialization.DSCODE;
 
 public class TinyStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java b/geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java
index 7100470..1721875 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java
@@ -27,7 +27,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.util.DscodeHelper;
+import org.apache.geode.internal.serialization.DscodeHelper;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
 @Category({SerializationTest.class})
diff --git a/geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
index 83494bd..529f1bf 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
@@ -21,7 +21,6 @@ import org.junit.Test;
 
 import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.internal.cache.tier.sockets.CommandInitializer;
-import org.apache.geode.internal.serialization.Version;
 
 public class VersionJUnitTest {
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java b/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
index b2f9030..c3d1710 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
@@ -31,10 +31,10 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.offheap.StoredObject;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 /**
  * Unit Tests for {@link BlobHelper}.
diff --git a/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumIdTest.java b/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumIdTest.java
index 681ebcd..640923a 100644
--- a/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumIdTest.java
+++ b/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumIdTest.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.pdx.internal;
 
-import static org.apache.geode.internal.DataSerializableFixedID.ENUM_ID;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.ENUM_ID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
diff --git a/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumInfoTest.java b/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumInfoTest.java
index 805c4ab..ffaaeec 100644
--- a/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumInfoTest.java
+++ b/geode-core/src/test/java/org/apache/geode/pdx/internal/EnumInfoTest.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.pdx.internal;
 
-import static org.apache.geode.internal.DataSerializableFixedID.ENUM_INFO;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.ENUM_INFO;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotEquals;
diff --git a/geode-junit/src/main/java/org/apache/geode/codeAnalysis/decode/CompiledClass.java b/geode-junit/src/main/java/org/apache/geode/codeAnalysis/decode/CompiledClass.java
index 00b9cb6..af55f1d 100644
--- a/geode-junit/src/main/java/org/apache/geode/codeAnalysis/decode/CompiledClass.java
+++ b/geode-junit/src/main/java/org/apache/geode/codeAnalysis/decode/CompiledClass.java
@@ -29,9 +29,9 @@ import org.apache.geode.codeAnalysis.decode.cp.Cp;
 import org.apache.geode.codeAnalysis.decode.cp.CpClass;
 import org.apache.geode.codeAnalysis.decode.cp.CpDouble;
 import org.apache.geode.codeAnalysis.decode.cp.CpLong;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.ExitCode;
 import org.apache.geode.internal.logging.PureLogWriter;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 
 /**
diff --git a/geode-junit/src/main/java/org/apache/geode/internal/cache/eviction/LRUTestEntry.java b/geode-junit/src/main/java/org/apache/geode/internal/cache/eviction/LRUTestEntry.java
index 1abb9be..5f0fabe 100644
--- a/geode-junit/src/main/java/org/apache/geode/internal/cache/eviction/LRUTestEntry.java
+++ b/geode-junit/src/main/java/org/apache/geode/internal/cache/eviction/LRUTestEntry.java
@@ -19,7 +19,6 @@ import org.apache.geode.cache.EntryEvent;
 import org.apache.geode.cache.EntryNotFoundException;
 import org.apache.geode.cache.TimeoutException;
 import org.apache.geode.distributed.internal.DistributionManager;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.InternalStatisticsDisabledException;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DistributedRegion;
@@ -33,6 +32,7 @@ import org.apache.geode.internal.cache.persistence.DiskRecoveryStore;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 
 class LRUTestEntry implements EvictableEntry {
 
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneResultStructImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneResultStructImpl.java
index 25a6a78..825bbc9 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneResultStructImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneResultStructImpl.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.lucene.LuceneResultStruct;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class LuceneResultStructImpl<K, V>
     implements LuceneResultStruct<K, V>, DataSerializableFixedID {
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
index 6c07361..f7a1941 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/LuceneServiceImpl.java
@@ -15,7 +15,7 @@
 
 package org.apache.geode.cache.lucene.internal;
 
-import static org.apache.geode.internal.DataSerializableFixedID.CREATE_REGION_MESSAGE_LUCENE;
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.CREATE_REGION_MESSAGE_LUCENE;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -69,8 +69,7 @@ import org.apache.geode.cache.lucene.internal.results.PageResults;
 import org.apache.geode.cache.lucene.internal.xml.LuceneServiceXmlGenerator;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.BucketNotFoundException;
 import org.apache.geode.internal.cache.BucketRegion;
@@ -82,6 +81,7 @@ import org.apache.geode.internal.cache.RegionListener;
 import org.apache.geode.internal.cache.extension.Extensible;
 import org.apache.geode.internal.cache.xmlcache.XmlGenerator;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
 
 /**
@@ -601,37 +601,49 @@ public class LuceneServiceImpl implements InternalLuceneService {
 
   /** Public for test purposes */
   public static void registerDataSerializables() {
-    DSFIDFactory.registerDSFID(CREATE_REGION_MESSAGE_LUCENE,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(CREATE_REGION_MESSAGE_LUCENE,
         CreateRegionProcessorForLucene.CreateRegionMessage.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_CHUNK_KEY, ChunkKey.class);
+    InternalDataSerializer.getDSFIDSerializer()
+        .registerDSFID(DataSerializableFixedID.LUCENE_CHUNK_KEY, ChunkKey.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_FILE, File.class);
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(DataSerializableFixedID.LUCENE_FILE,
+        File.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_FUNCTION_CONTEXT,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.LUCENE_FUNCTION_CONTEXT,
         LuceneFunctionContext.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_STRING_QUERY_PROVIDER,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.LUCENE_STRING_QUERY_PROVIDER,
         StringQueryProvider.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_TOP_ENTRIES_COLLECTOR_MANAGER,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.LUCENE_TOP_ENTRIES_COLLECTOR_MANAGER,
         TopEntriesCollectorManager.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_ENTRY_SCORE, EntryScore.class);
+    InternalDataSerializer.getDSFIDSerializer()
+        .registerDSFID(DataSerializableFixedID.LUCENE_ENTRY_SCORE, EntryScore.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_TOP_ENTRIES, TopEntries.class);
+    InternalDataSerializer.getDSFIDSerializer()
+        .registerDSFID(DataSerializableFixedID.LUCENE_TOP_ENTRIES, TopEntries.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_TOP_ENTRIES_COLLECTOR,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.LUCENE_TOP_ENTRIES_COLLECTOR,
         TopEntriesCollector.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.WAIT_UNTIL_FLUSHED_FUNCTION_CONTEXT,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.WAIT_UNTIL_FLUSHED_FUNCTION_CONTEXT,
         WaitUntilFlushedFunctionContext.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.DESTROY_LUCENE_INDEX_MESSAGE,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.DESTROY_LUCENE_INDEX_MESSAGE,
         DestroyLuceneIndexMessage.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_PAGE_RESULTS, PageResults.class);
+    InternalDataSerializer.getDSFIDSerializer()
+        .registerDSFID(DataSerializableFixedID.LUCENE_PAGE_RESULTS, PageResults.class);
 
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_RESULT_STRUCT,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.LUCENE_RESULT_STRUCT,
         LuceneResultStructImpl.class);
   }
 
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
index 830c5ad..568fc8a 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/StringQueryProvider.java
@@ -28,9 +28,9 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.lucene.LuceneIndex;
 import org.apache.geode.cache.lucene.LuceneQueryException;
 import org.apache.geode.cache.lucene.LuceneQueryProvider;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Constructs a Lucene Query object by parsing a search string. The class uses
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/EntryScore.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/EntryScore.java
index 788e101..9c004f4 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/EntryScore.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/EntryScore.java
@@ -20,8 +20,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Holds one entry matching search query and its metadata
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneFunctionContext.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneFunctionContext.java
index e28378c..94e0a66 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneFunctionContext.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/LuceneFunctionContext.java
@@ -24,8 +24,8 @@ import org.apache.geode.cache.lucene.LuceneQueryFactory;
 import org.apache.geode.cache.lucene.LuceneQueryProvider;
 import org.apache.geode.cache.lucene.internal.repository.IndexRepository;
 import org.apache.geode.cache.lucene.internal.repository.IndexResultCollector;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Contains function arguments for text / lucene search
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntries.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntries.java
index 88417c3..79c2ed7 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntries.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntries.java
@@ -24,8 +24,8 @@ import java.util.List;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.lucene.LuceneQueryFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Holds a ordered collection of entries matching a search query.
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollector.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollector.java
index d9904da..44fd680 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollector.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollector.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.lucene.LuceneQueryFactory;
 import org.apache.geode.cache.lucene.internal.repository.IndexResultCollector;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * An implementation of {@link IndexResultCollector} to collect {@link EntryScore}. It is expected
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollectorManager.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
index 325e586..cb65f80 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/TopEntriesCollectorManager.java
@@ -30,9 +30,9 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.lucene.LuceneQueryFactory;
 import org.apache.geode.cache.lucene.internal.distributed.TopEntries.EntryScoreComparator;
 import org.apache.geode.cache.lucene.internal.repository.IndexResultCollector;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * An implementation of {@link CollectorManager} for managing {@link TopEntriesCollector}. This is
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunctionContext.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunctionContext.java
index 74fa1fe..6d568a3 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunctionContext.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/distributed/WaitUntilFlushedFunctionContext.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Contains function arguments for WaitUntilFlushed
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/ChunkKey.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/ChunkKey.java
index b96f3cf..36a31e1 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/ChunkKey.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/ChunkKey.java
@@ -20,8 +20,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.UUID;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * The key for a single chunk on a file stored within a region.
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/File.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/File.java
index df86f7c..ef406a0 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/File.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/filesystem/File.java
@@ -24,8 +24,8 @@ import java.util.UUID;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.InternalGemFireError;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A file that is stored in a Apache Geode region.
diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/PageResults.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/PageResults.java
index b6885ea..b8604bf 100644
--- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/PageResults.java
+++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/results/PageResults.java
@@ -19,8 +19,8 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.ArrayList;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class PageResults extends ArrayList<PageEntry> implements DataSerializableFixedID {
 
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunctionContextJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunctionContextJUnitTest.java
index 872812a..38fc379 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunctionContextJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/distributed/LuceneQueryFunctionContextJUnitTest.java
@@ -27,7 +27,7 @@ import org.apache.geode.cache.lucene.LuceneQueryProvider;
 import org.apache.geode.cache.lucene.internal.LuceneServiceImpl;
 import org.apache.geode.cache.lucene.internal.StringQueryProvider;
 import org.apache.geode.cache.lucene.internal.repository.IndexResultCollector;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.test.junit.categories.LuceneTest;
 
 @Category({LuceneTest.class})
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageEntryJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageEntryJUnitTest.java
index f2e5ae6..88f9e4e 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageEntryJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageEntryJUnitTest.java
@@ -24,11 +24,11 @@ import java.util.Arrays;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.PreferBytesCachedDeserializable;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.test.junit.categories.LuceneTest;
 
 @Category({LuceneTest.class})
@@ -84,7 +84,7 @@ public class PageEntryJUnitTest {
     entry.toData(out);
     final byte[] bytes = out.toByteArray();
     ByteArrayDataInput in = new ByteArrayDataInput();
-    in.initialize(bytes, null);
+    in.initialize(bytes, (short) 0);
     PageEntry newEntry = new PageEntry();
     newEntry.fromData(in);
     return newEntry;
diff --git a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageResultsJUnitTest.java b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageResultsJUnitTest.java
index 393b2e7..2c1289b 100644
--- a/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageResultsJUnitTest.java
+++ b/geode-lucene/src/test/java/org/apache/geode/cache/lucene/internal/results/PageResultsJUnitTest.java
@@ -21,8 +21,8 @@ import java.io.IOException;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.test.junit.categories.LuceneTest;
 
@@ -31,7 +31,9 @@ public class PageResultsJUnitTest {
 
   @Test
   public void serializationShouldNotChangeObject() throws IOException, ClassNotFoundException {
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LUCENE_PAGE_RESULTS, PageResults.class);
+    InternalDataSerializer
+        .getDSFIDSerializer()
+        .registerDSFID(DataSerializableFixedID.LUCENE_PAGE_RESULTS, PageResults.class);
     PageResults results = new PageResults();
     results.add(new PageEntry("key1", "value1"));
     results.add(new PageEntry("key2", "value2"));
diff --git a/geode-old-client-support/src/distributedTest/java/org/apache/geode/OldClientSupportDUnitTest.java b/geode-old-client-support/src/distributedTest/java/org/apache/geode/OldClientSupportDUnitTest.java
index 2fbf452..4d21631 100644
--- a/geode-old-client-support/src/distributedTest/java/org/apache/geode/OldClientSupportDUnitTest.java
+++ b/geode-old-client-support/src/distributedTest/java/org/apache/geode/OldClientSupportDUnitTest.java
@@ -34,14 +34,14 @@ import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.internal.DistributedSystemService;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
-import org.apache.geode.internal.ByteArrayDataInput;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataInputStream;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.sockets.OldClientSupportService;
+import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
@@ -109,7 +109,7 @@ public class OldClientSupportDUnitTest extends JUnit4CacheTestCase {
 
     Version oldClientVersion = Version.GFE_82;
     VersionedDataOutputStream dout = new VersionedDataOutputStream(
-        new HeapDataOutputStream(10, oldClientVersion), oldClientVersion);
+        new HeapDataOutputStream(10, oldClientVersion), oldClientVersion.ordinal());
 
     for (String geodeClassName : newArrayClassNames) {
       String newName = oldClientSupport.processOutgoingClassName(geodeClassName, dout);
@@ -122,7 +122,7 @@ public class OldClientSupportDUnitTest extends JUnit4CacheTestCase {
     }
 
     VersionedDataInputStream din = new VersionedDataInputStream(
-        new DataInputStream(new ByteArrayInputStream(new byte[10])), oldClientVersion);
+        new DataInputStream(new ByteArrayInputStream(new byte[10])), oldClientVersion.ordinal());
 
     for (String oldClassName : oldArrayClassNames) {
       String newName = oldClientSupport.processIncomingClassName(oldClassName, din);
@@ -198,7 +198,7 @@ public class OldClientSupportDUnitTest extends JUnit4CacheTestCase {
     byte[] serializedForm = byteStream.toByteArray();
 
     ByteArrayDataInput byteDataInput = new ByteArrayDataInput();
-    byteDataInput.initialize(serializedForm, Version.GFE_82);
+    byteDataInput.initialize(serializedForm, Version.GFE_82.ordinal());
     ClientSerializableObject result = DataSerializer.readObject(byteDataInput);
     Assert.assertEquals("Expected an org.apache.geode exception but found " + result,
         result.getClass().getName().substring(0, "org.apache.geode".length()), "org.apache.geode");
@@ -225,7 +225,7 @@ public class OldClientSupportDUnitTest extends JUnit4CacheTestCase {
     byte[] serializedForm = byteStream.toByteArray();
 
     ByteArrayDataInput byteDataInput = new ByteArrayDataInput();
-    byteDataInput.initialize(serializedForm, Version.GFE_82);
+    byteDataInput.initialize(serializedForm, Version.GFE_82.ordinal());
     Object result = DataSerializer.readObject(byteDataInput);
     Assert.assertEquals("Expected an org.apache.geode object but found " + result,
         result.getClass().getName().substring(0, "org.apache.geode".length()), "org.apache.geode");
@@ -249,7 +249,7 @@ public class OldClientSupportDUnitTest extends JUnit4CacheTestCase {
     byte[] serializedForm = byteStream.toByteArray();
 
     ByteArrayDataInput byteDataInput = new ByteArrayDataInput();
-    byteDataInput.initialize(serializedForm, Version.GFE_82);
+    byteDataInput.initialize(serializedForm, Version.GFE_82.ordinal());
     Object result = DataSerializer.readObject(byteDataInput);
     Assert.assertEquals("Expected an org.apache.geode object but found " + result,
         result.getClass().getName().substring(0, "org.apache.geode".length()), "org.apache.geode");
diff --git a/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java b/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java
index 1b3a9d2..d6878e4 100644
--- a/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java
+++ b/geode-old-client-support/src/main/java/com/gemstone/gemfire/OldClientSupportProvider.java
@@ -23,10 +23,10 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedDataOutputStream;
 import org.apache.geode.internal.cache.CacheService;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.sockets.OldClientSupportService;
+import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.management.internal.beans.CacheServiceMBeanBase;
 
 import com.gemstone.gemfire.cache.execute.EmtpyRegionFunctionException;
@@ -106,7 +106,7 @@ public class OldClientSupportProvider implements OldClientSupportService {
     // if the client is old then it needs com.gemstone.gemfire package names
     if (out instanceof VersionedDataOutputStream) {
       VersionedDataOutputStream vout = (VersionedDataOutputStream) out;
-      Version version = vout.getVersion();
+      Version version = Version.getVersionForDataStream(vout);
       if (version != null && version.compareTo(Version.GFE_90) < 0) {
         return processClassName(name, GEODE, GEMFIRE, newClassNamesToOld);
       }
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorJoinMessage.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorJoinMessage.java
index 68462aa..9cf87c8 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorJoinMessage.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/LocatorJoinMessage.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.client.internal.locator.ServerLocationRequest;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class LocatorJoinMessage extends ServerLocationRequest {
 
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java
index 1be44ed..07666af 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java
@@ -19,9 +19,9 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * Requests remote locators of a remote WAN site
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java
index bcc7832..c57d897 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java
@@ -23,9 +23,9 @@ import java.util.Set;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.CopyOnWriteHashSet;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.DistributionLocatorId;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * List of remote locators as a response
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java
index 939ff3b..a5d49aa 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java
@@ -18,8 +18,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class RemoteLocatorPingRequest implements DataSerializableFixedID {
 
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java
index 7e735f5..64c58f3 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java
@@ -18,8 +18,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class RemoteLocatorPingResponse implements DataSerializableFixedID {
 
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorRequest.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorRequest.java
index dc6fa8c..9f60127 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorRequest.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorRequest.java
@@ -18,8 +18,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class RemoteLocatorRequest implements DataSerializableFixedID {
   private int distributedSystemId;
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorResponse.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorResponse.java
index 434a5fb..113d00c 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorResponse.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/RemoteLocatorResponse.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 import java.util.Set;
 
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.DataSerializableFixedID;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class RemoteLocatorResponse implements DataSerializableFixedID {
 
diff --git a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/WANFactoryImpl.java b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/WANFactoryImpl.java
index 1687c5d..e026569 100644
--- a/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/WANFactoryImpl.java
+++ b/geode-wan/src/main/java/org/apache/geode/cache/client/internal/locator/wan/WANFactoryImpl.java
@@ -17,30 +17,37 @@ package org.apache.geode.cache.client.internal.locator.wan;
 import org.apache.geode.cache.wan.GatewayReceiverFactory;
 import org.apache.geode.cache.wan.GatewaySenderFactory;
 import org.apache.geode.distributed.internal.WanLocatorDiscoverer;
-import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.DataSerializableFixedID;
+import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.wan.GatewayReceiverFactoryImpl;
 import org.apache.geode.internal.cache.wan.GatewaySenderFactoryImpl;
 import org.apache.geode.internal.cache.wan.spi.WANFactory;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 public class WANFactoryImpl implements WANFactory {
 
   @Override
   public void initialize() {
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.REMOTE_LOCATOR_JOIN_REQUEST,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.REMOTE_LOCATOR_JOIN_REQUEST,
         RemoteLocatorJoinRequest.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.REMOTE_LOCATOR_JOIN_RESPONSE,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.REMOTE_LOCATOR_JOIN_RESPONSE,
         RemoteLocatorJoinResponse.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.REMOTE_LOCATOR_REQUEST,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.REMOTE_LOCATOR_REQUEST,
         RemoteLocatorRequest.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.LOCATOR_JOIN_MESSAGE,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.LOCATOR_JOIN_MESSAGE,
         LocatorJoinMessage.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.REMOTE_LOCATOR_PING_REQUEST,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.REMOTE_LOCATOR_PING_REQUEST,
         RemoteLocatorPingRequest.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.REMOTE_LOCATOR_PING_RESPONSE,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.REMOTE_LOCATOR_PING_RESPONSE,
         RemoteLocatorPingResponse.class);
-    DSFIDFactory.registerDSFID(DataSerializableFixedID.REMOTE_LOCATOR_RESPONSE,
+    InternalDataSerializer.getDSFIDSerializer().registerDSFID(
+        DataSerializableFixedID.REMOTE_LOCATOR_RESPONSE,
         RemoteLocatorResponse.class);
   }
 
diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/util/JSONUtils.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/util/JSONUtils.java
index 7a1c2e4..690f785 100644
--- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/util/JSONUtils.java
+++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/util/JSONUtils.java
@@ -30,6 +30,7 @@ import org.springframework.util.Assert;
 
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.HeapDataOutputStream;
+import org.apache.geode.internal.Version;
 
 /**
  * The JSONUtils class is a utility class for getting JSON equivalent from Java types.
@@ -59,7 +60,7 @@ public abstract class JSONUtils {
 
   public static String formulateJsonForListFunctionsCall(Set<String> functionIds) {
     HeapDataOutputStream outputStream =
-        new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+        new HeapDataOutputStream(Version.CURRENT);
     try {
       JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory()
           .createGenerator((OutputStream) outputStream, JsonEncoding.UTF8));
@@ -78,7 +79,7 @@ public abstract class JSONUtils {
 
   public static String formulateJsonForListKeys(Object[] keys, String fieldName) {
     HeapDataOutputStream outputStream =
-        new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+        new HeapDataOutputStream(Version.CURRENT);
 
     try {
       JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory()
@@ -98,7 +99,7 @@ public abstract class JSONUtils {
 
   public static String formulateJsonForListRegions(Set<Region<?, ?>> regions, String fieldName) {
     HeapDataOutputStream outputStream =
-        new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+        new HeapDataOutputStream(Version.CURRENT);
 
     try {
       JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory()
@@ -119,7 +120,7 @@ public abstract class JSONUtils {
 
   public static String formulateJsonForListQueriesCall(Region<String, String> queryRegion) {
     HeapDataOutputStream outputStream =
-        new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+        new HeapDataOutputStream(Version.CURRENT);
     try {
       JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory()
           .createGenerator((OutputStream) outputStream, JsonEncoding.UTF8));
@@ -135,7 +136,7 @@ public abstract class JSONUtils {
 
   public static String formulateJsonForExistingQuery(String queryId, String oql) {
     HeapDataOutputStream outputStream =
-        new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+        new HeapDataOutputStream(Version.CURRENT);
 
     try {
       JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory()
@@ -152,7 +153,7 @@ public abstract class JSONUtils {
 
   public static String convertCollectionToJson(Collection<Object> collection) {
     HeapDataOutputStream outputStream =
-        new HeapDataOutputStream(org.apache.geode.internal.Version.CURRENT);
+        new HeapDataOutputStream(Version.CURRENT);
 
     try {
       JsonGenerator generator = enableDisableJSONGeneratorFeature(getObjectMapper().getFactory()


[geode] 01/02: Proof of concept: Isolation of DataSerializableFixedID for use in membership

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch dsfid_separation_wip
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 2e9adb3ed71a5441b21062e3c3cd5d03fe4a841e
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Tue Aug 20 08:58:38 2019 -0700

    Proof of concept: Isolation of DataSerializableFixedID for use in
    membership
    
    InternalDataSerializer holds a DSFIDFactory instance and a
    DSFIDSerializer instance (which is also a DSFIDFactory).
    
    InternalDataSerializer registers Geode DSFID classes with the factory.
    InternalDataSerializer defers DSFID serialization/deserialization to
    DSFIDSerializer.
    
    Need to move registration of membership DSFID classes to that package
    and change GMS initialization to create a DSFIDSerializer if one isn't
    provided.  How do we pass in Geode's DSFIDSerializer?
    
    Just started figuring out how to provide a writeObject() method to the
    toData methods in DSFID classes and elsewhere.
    
    Need to enhance DSFID toData/fromData to provide serialization context.
    
    Exceptions still not isolated.
    
    Version still references classes outside of the serialization package.
---
 .../org/apache/geode/internal/DSFIDFactory.java    | 1054 +-------------------
 .../geode/internal/HeapDataOutputStream.java       |    5 +-
 .../BufferDataOutputStream.java}                   |   15 +-
 .../{ => serialization}/ByteBufferWriter.java      |    0
 .../geode/internal/{ => serialization}/DSCODE.java |    1 +
 .../DSFIDNotFoundException.java                    |    0
 .../internal/serialization/DSFIDSerializer.java    |  363 +++++++
 .../DataSerializableFixedID.java                   |    0
 .../{util => serialization}/DscodeHelper.java      |    2 +-
 .../ObjectSerializer.java}                         |   15 +-
 .../{ => serialization}/SerializationVersions.java |    2 +
 .../internal/{ => serialization}/Version.java      |    0
 .../VersionedDataInputStream.java                  |    2 +
 .../VersionedDataOutputStream.java                 |    2 +
 .../{ => serialization}/VersionedDataStream.java   |    2 +
 .../{ => serialization}/VersionedObjectInput.java  |    2 +
 .../{ => serialization}/VersionedObjectOutput.java |    2 +
 .../internal/HeapDataOutputStreamJUnitTest.java    |    4 +-
 .../geode/internal/HeapDataOutputStreamTest.java   |    4 +-
 .../internal/{ => serialization}/DSCODETest.java   |    1 +
 .../{ => serialization}/VersionJUnitTest.java      |    1 +
 21 files changed, 427 insertions(+), 1050 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java b/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
index 1f0b447..2cb5ea1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/DSFIDFactory.java
@@ -12,454 +12,34 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataInput;
-import java.io.DataOutput;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 
 import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.InternalGemFireError;
-import org.apache.geode.admin.internal.SystemMemberCacheEventProcessor;
-import org.apache.geode.admin.jmx.internal.StatAlertNotification;
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.cache.InterestResultPolicy;
-import org.apache.geode.cache.client.internal.CacheServerLoadMessage;
-import org.apache.geode.cache.client.internal.locator.ClientConnectionRequest;
-import org.apache.geode.cache.client.internal.locator.ClientConnectionResponse;
-import org.apache.geode.cache.client.internal.locator.ClientReplacementRequest;
-import org.apache.geode.cache.client.internal.locator.GetAllServersRequest;
-import org.apache.geode.cache.client.internal.locator.GetAllServersResponse;
-import org.apache.geode.cache.client.internal.locator.LocatorListRequest;
-import org.apache.geode.cache.client.internal.locator.LocatorListResponse;
-import org.apache.geode.cache.client.internal.locator.LocatorStatusRequest;
-import org.apache.geode.cache.client.internal.locator.LocatorStatusResponse;
-import org.apache.geode.cache.client.internal.locator.QueueConnectionRequest;
-import org.apache.geode.cache.client.internal.locator.QueueConnectionResponse;
-import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.cache.query.internal.CqEntry;
-import org.apache.geode.cache.query.internal.CumulativeNonDistinctResults;
-import org.apache.geode.cache.query.internal.LinkedResultSet;
-import org.apache.geode.cache.query.internal.LinkedStructSet;
-import org.apache.geode.cache.query.internal.NWayMergeResults;
-import org.apache.geode.cache.query.internal.NullToken;
-import org.apache.geode.cache.query.internal.PRQueryTraceInfo;
-import org.apache.geode.cache.query.internal.ResultsBag;
-import org.apache.geode.cache.query.internal.ResultsCollectionWrapper;
-import org.apache.geode.cache.query.internal.ResultsSet;
-import org.apache.geode.cache.query.internal.SortedResultSet;
-import org.apache.geode.cache.query.internal.SortedStructSet;
-import org.apache.geode.cache.query.internal.StructBag;
-import org.apache.geode.cache.query.internal.StructImpl;
-import org.apache.geode.cache.query.internal.StructSet;
-import org.apache.geode.cache.query.internal.Undefined;
-import org.apache.geode.cache.query.internal.index.IndexCreationData;
-import org.apache.geode.cache.query.internal.index.IndexManager;
-import org.apache.geode.cache.query.internal.types.CollectionTypeImpl;
-import org.apache.geode.cache.query.internal.types.MapTypeImpl;
-import org.apache.geode.cache.query.internal.types.ObjectTypeImpl;
-import org.apache.geode.cache.query.internal.types.StructTypeImpl;
-import org.apache.geode.distributed.internal.DistributionAdvisor;
-import org.apache.geode.distributed.internal.HighPriorityAckedMessage;
-import org.apache.geode.distributed.internal.ReplyMessage;
-import org.apache.geode.distributed.internal.SerialAckedMessage;
-import org.apache.geode.distributed.internal.ShutdownMessage;
-import org.apache.geode.distributed.internal.StartupMessage;
-import org.apache.geode.distributed.internal.StartupResponseMessage;
-import org.apache.geode.distributed.internal.StartupResponseWithVersionMessage;
-import org.apache.geode.distributed.internal.WaitForViewInstallation;
-import org.apache.geode.distributed.internal.locks.DLockQueryProcessor;
-import org.apache.geode.distributed.internal.locks.DLockRecoverGrantorProcessor.DLockRecoverGrantorMessage;
-import org.apache.geode.distributed.internal.locks.DLockRecoverGrantorProcessor.DLockRecoverGrantorReplyMessage;
-import org.apache.geode.distributed.internal.locks.DLockReleaseProcessor;
-import org.apache.geode.distributed.internal.locks.DLockRemoteToken;
-import org.apache.geode.distributed.internal.locks.DLockRequestProcessor;
-import org.apache.geode.distributed.internal.locks.DLockService;
-import org.apache.geode.distributed.internal.locks.DeposeGrantorProcessor;
-import org.apache.geode.distributed.internal.locks.ElderInitProcessor;
-import org.apache.geode.distributed.internal.locks.GrantorRequestProcessor;
-import org.apache.geode.distributed.internal.locks.NonGrantorDestroyedProcessor;
-import org.apache.geode.distributed.internal.locks.NonGrantorDestroyedProcessor.NonGrantorDestroyedReplyMessage;
-import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.distributed.internal.membership.gms.GMSMember;
-import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordinatorRequest;
-import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordinatorResponse;
-import org.apache.geode.distributed.internal.membership.gms.locator.GetViewRequest;
-import org.apache.geode.distributed.internal.membership.gms.locator.GetViewResponse;
-import org.apache.geode.distributed.internal.membership.gms.messages.FinalCheckPassedMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatRequestMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.InstallViewMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.JoinRequestMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.JoinResponseMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.LeaveRequestMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.NetworkPartitionMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.SuspectMembersMessage;
-import org.apache.geode.distributed.internal.membership.gms.messages.ViewAckMessage;
-import org.apache.geode.distributed.internal.streaming.StreamingOperation.StreamingReplyMessage;
-import org.apache.geode.internal.admin.ClientMembershipMessage;
-import org.apache.geode.internal.admin.remote.AddHealthListenerRequest;
-import org.apache.geode.internal.admin.remote.AddHealthListenerResponse;
-import org.apache.geode.internal.admin.remote.AddStatListenerRequest;
-import org.apache.geode.internal.admin.remote.AddStatListenerResponse;
-import org.apache.geode.internal.admin.remote.AdminConsoleDisconnectMessage;
-import org.apache.geode.internal.admin.remote.AdminConsoleMessage;
-import org.apache.geode.internal.admin.remote.AdminFailureResponse;
-import org.apache.geode.internal.admin.remote.AlertLevelChangeMessage;
-import org.apache.geode.internal.admin.remote.AlertListenerMessage;
-import org.apache.geode.internal.admin.remote.AlertsNotificationMessage;
-import org.apache.geode.internal.admin.remote.AppCacheSnapshotMessage;
-import org.apache.geode.internal.admin.remote.BridgeServerRequest;
-import org.apache.geode.internal.admin.remote.BridgeServerResponse;
-import org.apache.geode.internal.admin.remote.CacheConfigRequest;
-import org.apache.geode.internal.admin.remote.CacheConfigResponse;
-import org.apache.geode.internal.admin.remote.CacheInfoRequest;
-import org.apache.geode.internal.admin.remote.CacheInfoResponse;
-import org.apache.geode.internal.admin.remote.CancelStatListenerRequest;
-import org.apache.geode.internal.admin.remote.CancelStatListenerResponse;
-import org.apache.geode.internal.admin.remote.CancellationMessage;
-import org.apache.geode.internal.admin.remote.ChangeRefreshIntervalMessage;
-import org.apache.geode.internal.admin.remote.ClientHealthStats;
-import org.apache.geode.internal.admin.remote.CompactRequest;
-import org.apache.geode.internal.admin.remote.CompactResponse;
-import org.apache.geode.internal.admin.remote.DestroyEntryMessage;
-import org.apache.geode.internal.admin.remote.DestroyRegionMessage;
-import org.apache.geode.internal.admin.remote.DurableClientInfoRequest;
-import org.apache.geode.internal.admin.remote.DurableClientInfoResponse;
-import org.apache.geode.internal.admin.remote.FetchDistLockInfoRequest;
-import org.apache.geode.internal.admin.remote.FetchDistLockInfoResponse;
-import org.apache.geode.internal.admin.remote.FetchHealthDiagnosisRequest;
-import org.apache.geode.internal.admin.remote.FetchHealthDiagnosisResponse;
-import org.apache.geode.internal.admin.remote.FetchHostRequest;
-import org.apache.geode.internal.admin.remote.FetchHostResponse;
-import org.apache.geode.internal.admin.remote.FetchResourceAttributesRequest;
-import org.apache.geode.internal.admin.remote.FetchResourceAttributesResponse;
-import org.apache.geode.internal.admin.remote.FetchStatsRequest;
-import org.apache.geode.internal.admin.remote.FetchStatsResponse;
-import org.apache.geode.internal.admin.remote.FetchSysCfgRequest;
-import org.apache.geode.internal.admin.remote.FetchSysCfgResponse;
-import org.apache.geode.internal.admin.remote.FlushAppCacheSnapshotMessage;
-import org.apache.geode.internal.admin.remote.HealthListenerMessage;
-import org.apache.geode.internal.admin.remote.LicenseInfoRequest;
-import org.apache.geode.internal.admin.remote.LicenseInfoResponse;
-import org.apache.geode.internal.admin.remote.MissingPersistentIDsRequest;
-import org.apache.geode.internal.admin.remote.MissingPersistentIDsResponse;
-import org.apache.geode.internal.admin.remote.ObjectDetailsRequest;
-import org.apache.geode.internal.admin.remote.ObjectDetailsResponse;
-import org.apache.geode.internal.admin.remote.ObjectNamesRequest;
-import org.apache.geode.internal.admin.remote.ObjectNamesResponse;
-import org.apache.geode.internal.admin.remote.PrepareRevokePersistentIDRequest;
-import org.apache.geode.internal.admin.remote.RefreshMemberSnapshotRequest;
-import org.apache.geode.internal.admin.remote.RefreshMemberSnapshotResponse;
-import org.apache.geode.internal.admin.remote.RegionAttributesRequest;
-import org.apache.geode.internal.admin.remote.RegionAttributesResponse;
-import org.apache.geode.internal.admin.remote.RegionRequest;
-import org.apache.geode.internal.admin.remote.RegionResponse;
-import org.apache.geode.internal.admin.remote.RegionSizeRequest;
-import org.apache.geode.internal.admin.remote.RegionSizeResponse;
-import org.apache.geode.internal.admin.remote.RegionStatisticsRequest;
-import org.apache.geode.internal.admin.remote.RegionStatisticsResponse;
-import org.apache.geode.internal.admin.remote.RegionSubRegionSizeRequest;
-import org.apache.geode.internal.admin.remote.RegionSubRegionsSizeResponse;
-import org.apache.geode.internal.admin.remote.RemoveHealthListenerRequest;
-import org.apache.geode.internal.admin.remote.RemoveHealthListenerResponse;
-import org.apache.geode.internal.admin.remote.ResetHealthStatusRequest;
-import org.apache.geode.internal.admin.remote.ResetHealthStatusResponse;
-import org.apache.geode.internal.admin.remote.RevokePersistentIDRequest;
-import org.apache.geode.internal.admin.remote.RevokePersistentIDResponse;
-import org.apache.geode.internal.admin.remote.RootRegionRequest;
-import org.apache.geode.internal.admin.remote.RootRegionResponse;
-import org.apache.geode.internal.admin.remote.ShutdownAllGatewayHubsRequest;
-import org.apache.geode.internal.admin.remote.ShutdownAllRequest;
-import org.apache.geode.internal.admin.remote.ShutdownAllResponse;
-import org.apache.geode.internal.admin.remote.SnapshotResultMessage;
-import org.apache.geode.internal.admin.remote.StatAlertsManagerAssignMessage;
-import org.apache.geode.internal.admin.remote.StatListenerMessage;
-import org.apache.geode.internal.admin.remote.StoreSysCfgRequest;
-import org.apache.geode.internal.admin.remote.StoreSysCfgResponse;
-import org.apache.geode.internal.admin.remote.SubRegionRequest;
-import org.apache.geode.internal.admin.remote.SubRegionResponse;
-import org.apache.geode.internal.admin.remote.TailLogRequest;
-import org.apache.geode.internal.admin.remote.TailLogResponse;
-import org.apache.geode.internal.admin.remote.UpdateAlertDefinitionMessage;
-import org.apache.geode.internal.admin.remote.VersionInfoRequest;
-import org.apache.geode.internal.admin.remote.VersionInfoResponse;
-import org.apache.geode.internal.admin.statalerts.GaugeThresholdDecoratorImpl;
-import org.apache.geode.internal.admin.statalerts.NumberThresholdDecoratorImpl;
-import org.apache.geode.internal.cache.AddCacheServerProfileMessage;
-import org.apache.geode.internal.cache.BucketAdvisor;
-import org.apache.geode.internal.cache.CacheDistributionAdvisor;
-import org.apache.geode.internal.cache.CacheServerAdvisor.CacheServerProfile;
-import org.apache.geode.internal.cache.ClientRegionEventImpl;
-import org.apache.geode.internal.cache.CloseCacheMessage;
-import org.apache.geode.internal.cache.ControllerAdvisor.ControllerProfile;
-import org.apache.geode.internal.cache.CreateRegionProcessor;
-import org.apache.geode.internal.cache.DestroyOperation;
-import org.apache.geode.internal.cache.DestroyPartitionedRegionMessage;
-import org.apache.geode.internal.cache.DestroyRegionOperation;
-import org.apache.geode.internal.cache.DistTXCommitMessage;
-import org.apache.geode.internal.cache.DistTXPrecommitMessage;
-import org.apache.geode.internal.cache.DistTXPrecommitMessage.DistTxPrecommitResponse;
-import org.apache.geode.internal.cache.DistTXRollbackMessage;
-import org.apache.geode.internal.cache.DistributedClearOperation.ClearRegionMessage;
-import org.apache.geode.internal.cache.DistributedClearOperation.ClearRegionWithContextMessage;
-import org.apache.geode.internal.cache.DistributedPutAllOperation.EntryVersionsList;
-import org.apache.geode.internal.cache.DistributedPutAllOperation.PutAllMessage;
-import org.apache.geode.internal.cache.DistributedRegionFunctionStreamingMessage;
-import org.apache.geode.internal.cache.DistributedRemoveAllOperation.RemoveAllMessage;
-import org.apache.geode.internal.cache.DistributedTombstoneOperation.TombstoneMessage;
-import org.apache.geode.internal.cache.EntryEventImpl;
-import org.apache.geode.internal.cache.EventID;
-import org.apache.geode.internal.cache.ExpireDisconnectedClientTransactionsMessage;
-import org.apache.geode.internal.cache.FilterProfile;
-import org.apache.geode.internal.cache.FindDurableQueueProcessor.FindDurableQueueMessage;
-import org.apache.geode.internal.cache.FindDurableQueueProcessor.FindDurableQueueReply;
-import org.apache.geode.internal.cache.FindRemoteTXMessage;
-import org.apache.geode.internal.cache.FindRemoteTXMessage.FindRemoteTXMessageReply;
-import org.apache.geode.internal.cache.FindVersionTagOperation.FindVersionTagMessage;
-import org.apache.geode.internal.cache.FindVersionTagOperation.VersionTagReply;
-import org.apache.geode.internal.cache.FunctionStreamingOrderedReplyMessage;
-import org.apache.geode.internal.cache.FunctionStreamingReplyMessage;
-import org.apache.geode.internal.cache.HARegion;
-import org.apache.geode.internal.cache.InitialImageFlowControl.FlowControlPermitMessage;
-import org.apache.geode.internal.cache.InitialImageOperation;
-import org.apache.geode.internal.cache.InitialImageOperation.InitialImageVersionedEntryList;
-import org.apache.geode.internal.cache.InvalidateOperation;
-import org.apache.geode.internal.cache.InvalidatePartitionedRegionMessage;
-import org.apache.geode.internal.cache.InvalidateRegionOperation.InvalidateRegionMessage;
-import org.apache.geode.internal.cache.JtaAfterCompletionMessage;
-import org.apache.geode.internal.cache.JtaBeforeCompletionMessage;
-import org.apache.geode.internal.cache.LatestLastAccessTimeMessage;
-import org.apache.geode.internal.cache.MemberFunctionStreamingMessage;
-import org.apache.geode.internal.cache.Node;
-import org.apache.geode.internal.cache.PRQueryProcessor;
-import org.apache.geode.internal.cache.PartitionRegionConfig;
-import org.apache.geode.internal.cache.PreferBytesCachedDeserializable;
-import org.apache.geode.internal.cache.RegionEventImpl;
-import org.apache.geode.internal.cache.ReleaseClearLockMessage;
-import org.apache.geode.internal.cache.RemoveCacheServerProfileMessage;
-import org.apache.geode.internal.cache.RoleEventImpl;
-import org.apache.geode.internal.cache.SearchLoadAndWriteProcessor;
-import org.apache.geode.internal.cache.ServerPingMessage;
-import org.apache.geode.internal.cache.StateFlushOperation.StateMarkerMessage;
-import org.apache.geode.internal.cache.StateFlushOperation.StateStabilizationMessage;
-import org.apache.geode.internal.cache.StateFlushOperation.StateStabilizedMessage;
-import org.apache.geode.internal.cache.StoreAllCachedDeserializable;
-import org.apache.geode.internal.cache.TXCommitMessage;
-import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessForLockIdMessage;
-import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessForTXIdMessage;
-import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessQueryMessage;
-import org.apache.geode.internal.cache.TXCommitMessage.CommitProcessQueryReplyMessage;
-import org.apache.geode.internal.cache.TXEntryState;
-import org.apache.geode.internal.cache.TXId;
-import org.apache.geode.internal.cache.TXRemoteCommitMessage;
-import org.apache.geode.internal.cache.TXRemoteCommitMessage.TXRemoteCommitReplyMessage;
-import org.apache.geode.internal.cache.TXRemoteRollbackMessage;
-import org.apache.geode.internal.cache.Token;
-import org.apache.geode.internal.cache.UpdateAttributesProcessor;
-import org.apache.geode.internal.cache.UpdateEntryVersionOperation.UpdateEntryVersionMessage;
-import org.apache.geode.internal.cache.UpdateOperation;
-import org.apache.geode.internal.cache.VMCachedDeserializable;
-import org.apache.geode.internal.cache.backup.AbortBackupRequest;
-import org.apache.geode.internal.cache.backup.BackupResponse;
-import org.apache.geode.internal.cache.backup.FinishBackupRequest;
-import org.apache.geode.internal.cache.backup.FlushToDiskRequest;
-import org.apache.geode.internal.cache.backup.FlushToDiskResponse;
-import org.apache.geode.internal.cache.backup.PrepareBackupRequest;
-import org.apache.geode.internal.cache.compression.SnappyCompressedCachedDeserializable;
-import org.apache.geode.internal.cache.control.ResourceAdvisor.ResourceManagerProfile;
-import org.apache.geode.internal.cache.control.ResourceAdvisor.ResourceProfileMessage;
-import org.apache.geode.internal.cache.ha.HARegionQueue.DispatchedAndCurrentEvents;
-import org.apache.geode.internal.cache.ha.QueueRemovalMessage;
-import org.apache.geode.internal.cache.locks.TXLockBatch;
-import org.apache.geode.internal.cache.locks.TXLockIdImpl;
-import org.apache.geode.internal.cache.locks.TXLockUpdateParticipantsMessage;
-import org.apache.geode.internal.cache.locks.TXLockUpdateParticipantsMessage.TXLockUpdateParticipantsReplyMessage;
-import org.apache.geode.internal.cache.locks.TXOriginatorRecoveryProcessor.TXOriginatorRecoveryMessage;
-import org.apache.geode.internal.cache.locks.TXOriginatorRecoveryProcessor.TXOriginatorRecoveryReplyMessage;
-import org.apache.geode.internal.cache.partitioned.AllBucketProfilesUpdateMessage;
-import org.apache.geode.internal.cache.partitioned.BecomePrimaryBucketMessage;
-import org.apache.geode.internal.cache.partitioned.BecomePrimaryBucketMessage.BecomePrimaryBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.BucketBackupMessage;
-import org.apache.geode.internal.cache.partitioned.BucketCountLoadProbe;
-import org.apache.geode.internal.cache.partitioned.BucketProfileUpdateMessage;
-import org.apache.geode.internal.cache.partitioned.BucketSizeMessage;
-import org.apache.geode.internal.cache.partitioned.BucketSizeMessage.BucketSizeReplyMessage;
-import org.apache.geode.internal.cache.partitioned.ContainsKeyValueMessage;
-import org.apache.geode.internal.cache.partitioned.ContainsKeyValueMessage.ContainsKeyValueReplyMessage;
-import org.apache.geode.internal.cache.partitioned.CreateBucketMessage;
-import org.apache.geode.internal.cache.partitioned.CreateBucketMessage.CreateBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.DeposePrimaryBucketMessage;
-import org.apache.geode.internal.cache.partitioned.DeposePrimaryBucketMessage.DeposePrimaryBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.DestroyMessage;
-import org.apache.geode.internal.cache.partitioned.DestroyRegionOnDataStoreMessage;
-import org.apache.geode.internal.cache.partitioned.DumpAllPRConfigMessage;
-import org.apache.geode.internal.cache.partitioned.DumpB2NRegion;
-import org.apache.geode.internal.cache.partitioned.DumpB2NRegion.DumpB2NReplyMessage;
-import org.apache.geode.internal.cache.partitioned.DumpBucketsMessage;
-import org.apache.geode.internal.cache.partitioned.EndBucketCreationMessage;
-import org.apache.geode.internal.cache.partitioned.FetchBulkEntriesMessage;
-import org.apache.geode.internal.cache.partitioned.FetchBulkEntriesMessage.FetchBulkEntriesReplyMessage;
-import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage;
-import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesReplyMessage;
-import org.apache.geode.internal.cache.partitioned.FetchEntryMessage;
-import org.apache.geode.internal.cache.partitioned.FetchEntryMessage.FetchEntryReplyMessage;
-import org.apache.geode.internal.cache.partitioned.FetchKeysMessage;
-import org.apache.geode.internal.cache.partitioned.FetchKeysMessage.FetchKeysReplyMessage;
-import org.apache.geode.internal.cache.partitioned.FetchPartitionDetailsMessage;
-import org.apache.geode.internal.cache.partitioned.FetchPartitionDetailsMessage.FetchPartitionDetailsReplyMessage;
-import org.apache.geode.internal.cache.partitioned.FlushMessage;
-import org.apache.geode.internal.cache.partitioned.GetMessage;
-import org.apache.geode.internal.cache.partitioned.GetMessage.GetReplyMessage;
-import org.apache.geode.internal.cache.partitioned.IdentityRequestMessage;
-import org.apache.geode.internal.cache.partitioned.IdentityRequestMessage.IdentityReplyMessage;
-import org.apache.geode.internal.cache.partitioned.IdentityUpdateMessage;
-import org.apache.geode.internal.cache.partitioned.IndexCreationMsg;
-import org.apache.geode.internal.cache.partitioned.IndexCreationMsg.IndexCreationReplyMsg;
-import org.apache.geode.internal.cache.partitioned.InterestEventMessage;
-import org.apache.geode.internal.cache.partitioned.InterestEventMessage.InterestEventReplyMessage;
-import org.apache.geode.internal.cache.partitioned.InvalidateMessage;
-import org.apache.geode.internal.cache.partitioned.ManageBackupBucketMessage;
-import org.apache.geode.internal.cache.partitioned.ManageBackupBucketMessage.ManageBackupBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.ManageBucketMessage;
-import org.apache.geode.internal.cache.partitioned.ManageBucketMessage.ManageBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.MoveBucketMessage;
-import org.apache.geode.internal.cache.partitioned.MoveBucketMessage.MoveBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.PRSanityCheckMessage;
-import org.apache.geode.internal.cache.partitioned.PRTombstoneMessage;
-import org.apache.geode.internal.cache.partitioned.PRUpdateEntryVersionMessage;
-import org.apache.geode.internal.cache.partitioned.PartitionedRegionFunctionStreamingMessage;
-import org.apache.geode.internal.cache.partitioned.PrimaryRequestMessage;
-import org.apache.geode.internal.cache.partitioned.PrimaryRequestMessage.PrimaryRequestReplyMessage;
-import org.apache.geode.internal.cache.partitioned.PutAllPRMessage;
-import org.apache.geode.internal.cache.partitioned.PutAllPRMessage.PutAllReplyMessage;
-import org.apache.geode.internal.cache.partitioned.PutMessage;
-import org.apache.geode.internal.cache.partitioned.PutMessage.PutReplyMessage;
-import org.apache.geode.internal.cache.partitioned.QueryMessage;
-import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
-import org.apache.geode.internal.cache.partitioned.RemoveAllPRMessage;
-import org.apache.geode.internal.cache.partitioned.RemoveBucketMessage;
-import org.apache.geode.internal.cache.partitioned.RemoveBucketMessage.RemoveBucketReplyMessage;
-import org.apache.geode.internal.cache.partitioned.RemoveIndexesMessage;
-import org.apache.geode.internal.cache.partitioned.RemoveIndexesMessage.RemoveIndexesReplyMessage;
-import org.apache.geode.internal.cache.partitioned.SizeMessage;
-import org.apache.geode.internal.cache.partitioned.SizeMessage.SizeReplyMessage;
-import org.apache.geode.internal.cache.partitioned.SizedBasedLoadProbe;
-import org.apache.geode.internal.cache.persistence.DiskStoreID;
-import org.apache.geode.internal.cache.persistence.MembershipFlushRequest;
-import org.apache.geode.internal.cache.persistence.MembershipViewRequest;
-import org.apache.geode.internal.cache.persistence.MembershipViewRequest.MembershipViewReplyMessage;
-import org.apache.geode.internal.cache.persistence.PersistentStateQueryMessage;
-import org.apache.geode.internal.cache.persistence.PersistentStateQueryMessage.PersistentStateQueryReplyMessage;
-import org.apache.geode.internal.cache.persistence.PrepareNewPersistentMemberMessage;
-import org.apache.geode.internal.cache.persistence.RemovePersistentMemberMessage;
-import org.apache.geode.internal.cache.snapshot.FlowController.FlowControlAbortMessage;
-import org.apache.geode.internal.cache.snapshot.FlowController.FlowControlAckMessage;
-import org.apache.geode.internal.cache.snapshot.SnapshotPacket;
-import org.apache.geode.internal.cache.snapshot.SnapshotPacket.SnapshotRecord;
-import org.apache.geode.internal.cache.tier.sockets.ClientDataSerializerMessage;
-import org.apache.geode.internal.cache.tier.sockets.ClientDenylistProcessor.ClientDenylistMessage;
-import org.apache.geode.internal.cache.tier.sockets.ClientInstantiatorMessage;
-import org.apache.geode.internal.cache.tier.sockets.ClientInterestMessageImpl;
-import org.apache.geode.internal.cache.tier.sockets.ClientMarkerMessageImpl;
-import org.apache.geode.internal.cache.tier.sockets.ClientPingMessageImpl;
-import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
-import org.apache.geode.internal.cache.tier.sockets.ClientTombstoneMessage;
-import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl;
-import org.apache.geode.internal.cache.tier.sockets.HAEventWrapper;
-import org.apache.geode.internal.cache.tier.sockets.InterestResultPolicyImpl;
-import org.apache.geode.internal.cache.tier.sockets.ObjectPartList;
-import org.apache.geode.internal.cache.tier.sockets.ObjectPartList651;
-import org.apache.geode.internal.cache.tier.sockets.RemoveClientFromDenylistMessage;
-import org.apache.geode.internal.cache.tier.sockets.SerializedObjectPartList;
-import org.apache.geode.internal.cache.tier.sockets.ServerInterestRegistrationMessage;
-import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.cache.tx.DistTxEntryEvent;
-import org.apache.geode.internal.cache.tx.RemoteClearMessage;
-import org.apache.geode.internal.cache.tx.RemoteClearMessage.RemoteClearReplyMessage;
-import org.apache.geode.internal.cache.tx.RemoteContainsKeyValueMessage;
-import org.apache.geode.internal.cache.tx.RemoteDestroyMessage;
-import org.apache.geode.internal.cache.tx.RemoteFetchEntryMessage;
-import org.apache.geode.internal.cache.tx.RemoteFetchKeysMessage;
-import org.apache.geode.internal.cache.tx.RemoteFetchVersionMessage;
-import org.apache.geode.internal.cache.tx.RemoteGetMessage;
-import org.apache.geode.internal.cache.tx.RemoteInvalidateMessage;
-import org.apache.geode.internal.cache.tx.RemotePutAllMessage;
-import org.apache.geode.internal.cache.tx.RemotePutMessage;
-import org.apache.geode.internal.cache.tx.RemoteRemoveAllMessage;
-import org.apache.geode.internal.cache.tx.RemoteSizeMessage;
-import org.apache.geode.internal.cache.versions.DiskRegionVersionVector;
-import org.apache.geode.internal.cache.versions.DiskVersionTag;
-import org.apache.geode.internal.cache.versions.VMRegionVersionVector;
-import org.apache.geode.internal.cache.versions.VMVersionTag;
-import org.apache.geode.internal.cache.wan.GatewaySenderAdvisor;
-import org.apache.geode.internal.cache.wan.GatewaySenderEventCallbackArgument;
-import org.apache.geode.internal.cache.wan.GatewaySenderEventImpl;
-import org.apache.geode.internal.cache.wan.GatewaySenderQueueEntrySynchronizationOperation;
-import org.apache.geode.internal.cache.wan.parallel.ParallelQueueRemovalMessage;
-import org.apache.geode.internal.cache.wan.serial.BatchDestroyOperation;
-import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
-import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfileMessage;
-import org.apache.geode.management.internal.JmxManagerLocatorRequest;
-import org.apache.geode.management.internal.JmxManagerLocatorResponse;
-import org.apache.geode.management.internal.ManagerStartupMessage;
-import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
-import org.apache.geode.management.internal.configuration.messages.ConfigurationResponse;
-import org.apache.geode.pdx.internal.CheckTypeRegistryState;
-import org.apache.geode.pdx.internal.EnumId;
-import org.apache.geode.pdx.internal.EnumInfo;
+import org.apache.geode.internal.InternalDataSerializer;
 
 /**
- * Factory for instances of DataSerializableFixedID instances. Note that this class implements
- * DataSerializableFixedID to inherit constants but is not actually an instance of this interface.
- *
- * @since GemFire 5.7
+ * Factory for instances of DataSerializableFixedID instances.  Constructors must be registered
+ * with this factory in order for it to deserialize anything.
  */
-public class DSFIDFactory implements DataSerializableFixedID {
-
-  private DSFIDFactory() {
-    // no instances allowed
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public int getDSFID() {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public void toData(DataOutput out) throws IOException {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public Version[] getSerializationVersions() {
-    throw new UnsupportedOperationException();
-  }
+public class DSFIDFactory {
 
   @Immutable
-  private static final Constructor<?>[] dsfidMap = new Constructor<?>[256];
+  private final Constructor<?>[] dsfidMap = new Constructor<?>[256];
 
   @Immutable("This maybe should be wrapped in an unmodifiableMap?")
-  private static final Int2ObjectOpenHashMap dsfidMap2 = new Int2ObjectOpenHashMap(800);
+  private final Int2ObjectOpenHashMap dsfidMap2 = new Int2ObjectOpenHashMap(800);
 
-  static {
-    registerDSFIDTypes();
-  }
 
   /** Register the constructor for a fixed ID class. */
-  public static void registerDSFID(int dsfid, Class dsfidClass) {
+  public void registerDSFID(int dsfid, Class dsfidClass) {
     try {
       Constructor<?> cons = dsfidClass.getConstructor((Class[]) null);
       cons.setAccessible(true);
@@ -477,610 +57,46 @@ public class DSFIDFactory implements DataSerializableFixedID {
     }
   }
 
-  public static void registerTypes() {
-    // nothing to do; static initializer will take care of the type registration
-  }
-
-  private static void registerDSFIDTypes() {
-    registerDSFID(FINAL_CHECK_PASSED_MESSAGE, FinalCheckPassedMessage.class);
-    registerDSFID(NETWORK_PARTITION_MESSAGE, NetworkPartitionMessage.class);
-    registerDSFID(REMOVE_MEMBER_REQUEST, RemoveMemberMessage.class);
-    registerDSFID(HEARTBEAT_REQUEST, HeartbeatRequestMessage.class);
-    registerDSFID(HEARTBEAT_RESPONSE, HeartbeatMessage.class);
-    registerDSFID(SUSPECT_MEMBERS_MESSAGE, SuspectMembersMessage.class);
-    registerDSFID(LEAVE_REQUEST_MESSAGE, LeaveRequestMessage.class);
-    registerDSFID(VIEW_ACK_MESSAGE, ViewAckMessage.class);
-    registerDSFID(INSTALL_VIEW_MESSAGE, InstallViewMessage.class);
-    registerDSFID(GMSMEMBER, GMSMember.class);
-    registerDSFID(NETVIEW, GMSMembershipView.class);
-    registerDSFID(GET_VIEW_REQ, GetViewRequest.class);
-    registerDSFID(GET_VIEW_RESP, GetViewResponse.class);
-    registerDSFID(FIND_COORDINATOR_REQ, FindCoordinatorRequest.class);
-    registerDSFID(FIND_COORDINATOR_RESP, FindCoordinatorResponse.class);
-    registerDSFID(JOIN_RESPONSE, JoinResponseMessage.class);
-    registerDSFID(JOIN_REQUEST, JoinRequestMessage.class);
-    registerDSFID(CLIENT_TOMBSTONE_MESSAGE, ClientTombstoneMessage.class);
-    registerDSFID(R_CLEAR_MSG, RemoteClearMessage.class);
-    registerDSFID(R_CLEAR_MSG_REPLY, RemoteClearReplyMessage.class);
-    registerDSFID(WAIT_FOR_VIEW_INSTALLATION, WaitForViewInstallation.class);
-    registerDSFID(DISPATCHED_AND_CURRENT_EVENTS, DispatchedAndCurrentEvents.class);
-    registerDSFID(DISTRIBUTED_MEMBER, InternalDistributedMember.class);
-    registerDSFID(UPDATE_MESSAGE, UpdateOperation.UpdateMessage.class);
-    registerDSFID(REPLY_MESSAGE, ReplyMessage.class);
-    registerDSFID(PR_DESTROY, DestroyMessage.class);
-    registerDSFID(CREATE_REGION_MESSAGE, CreateRegionProcessor.CreateRegionMessage.class);
-    registerDSFID(CREATE_REGION_REPLY_MESSAGE,
-        CreateRegionProcessor.CreateRegionReplyMessage.class);
-    registerDSFID(REGION_STATE_MESSAGE, InitialImageOperation.RegionStateMessage.class);
-    registerDSFID(QUERY_MESSAGE, SearchLoadAndWriteProcessor.QueryMessage.class);
-    registerDSFID(RESPONSE_MESSAGE, SearchLoadAndWriteProcessor.ResponseMessage.class);
-    registerDSFID(NET_SEARCH_REQUEST_MESSAGE,
-        SearchLoadAndWriteProcessor.NetSearchRequestMessage.class);
-    registerDSFID(NET_SEARCH_REPLY_MESSAGE,
-        SearchLoadAndWriteProcessor.NetSearchReplyMessage.class);
-    registerDSFID(NET_LOAD_REQUEST_MESSAGE,
-        SearchLoadAndWriteProcessor.NetLoadRequestMessage.class);
-    registerDSFID(NET_LOAD_REPLY_MESSAGE, SearchLoadAndWriteProcessor.NetLoadReplyMessage.class);
-    registerDSFID(NET_WRITE_REQUEST_MESSAGE,
-        SearchLoadAndWriteProcessor.NetWriteRequestMessage.class);
-    registerDSFID(NET_WRITE_REPLY_MESSAGE, SearchLoadAndWriteProcessor.NetWriteReplyMessage.class);
-    registerDSFID(DLOCK_REQUEST_MESSAGE, DLockRequestProcessor.DLockRequestMessage.class);
-    registerDSFID(DLOCK_RESPONSE_MESSAGE, DLockRequestProcessor.DLockResponseMessage.class);
-    registerDSFID(DLOCK_RELEASE_MESSAGE, DLockReleaseProcessor.DLockReleaseMessage.class);
-    registerDSFID(ADMIN_CACHE_EVENT_MESSAGE,
-        SystemMemberCacheEventProcessor.SystemMemberCacheMessage.class);
-    registerDSFID(CQ_ENTRY_EVENT, CqEntry.class);
-    registerDSFID(REQUEST_IMAGE_MESSAGE, InitialImageOperation.RequestImageMessage.class);
-    registerDSFID(IMAGE_REPLY_MESSAGE, InitialImageOperation.ImageReplyMessage.class);
-    registerDSFID(IMAGE_ENTRY, InitialImageOperation.Entry.class);
-    registerDSFID(CLOSE_CACHE_MESSAGE, CloseCacheMessage.class);
-    registerDSFID(NON_GRANTOR_DESTROYED_MESSAGE,
-        NonGrantorDestroyedProcessor.NonGrantorDestroyedMessage.class);
-    registerDSFID(DLOCK_RELEASE_REPLY, DLockReleaseProcessor.DLockReleaseReplyMessage.class);
-    registerDSFID(GRANTOR_REQUEST_MESSAGE, GrantorRequestProcessor.GrantorRequestMessage.class);
-    registerDSFID(GRANTOR_INFO_REPLY_MESSAGE,
-        GrantorRequestProcessor.GrantorInfoReplyMessage.class);
-    registerDSFID(ELDER_INIT_MESSAGE, ElderInitProcessor.ElderInitMessage.class);
-    registerDSFID(ELDER_INIT_REPLY_MESSAGE, ElderInitProcessor.ElderInitReplyMessage.class);
-    registerDSFID(DEPOSE_GRANTOR_MESSAGE, DeposeGrantorProcessor.DeposeGrantorMessage.class);
-    registerDSFID(STARTUP_MESSAGE, StartupMessage.class);
-    registerDSFID(STARTUP_RESPONSE_MESSAGE, StartupResponseMessage.class);
-    registerDSFID(STARTUP_RESPONSE_WITHVERSION_MESSAGE, StartupResponseWithVersionMessage.class);
-    registerDSFID(SHUTDOWN_MESSAGE, ShutdownMessage.class);
-    registerDSFID(DESTROY_REGION_MESSAGE, DestroyRegionOperation.DestroyRegionMessage.class);
-    registerDSFID(PR_PUTALL_MESSAGE, PutAllPRMessage.class);
-    registerDSFID(PR_REMOVE_ALL_MESSAGE, RemoveAllPRMessage.class);
-    registerDSFID(PR_REMOVE_ALL_REPLY_MESSAGE, RemoveAllPRMessage.RemoveAllReplyMessage.class);
-    registerDSFID(REMOTE_REMOVE_ALL_MESSAGE, RemoteRemoveAllMessage.class);
-    registerDSFID(REMOTE_REMOVE_ALL_REPLY_MESSAGE,
-        RemoteRemoveAllMessage.RemoveAllReplyMessage.class);
-    registerDSFID(DISTTX_ROLLBACK_MESSAGE, DistTXRollbackMessage.class);
-    registerDSFID(DISTTX_COMMIT_MESSAGE, DistTXCommitMessage.class);
-    registerDSFID(DISTTX_PRE_COMMIT_MESSAGE, DistTXPrecommitMessage.class);
-    registerDSFID(DISTTX_ROLLBACK_REPLY_MESSAGE,
-        DistTXRollbackMessage.DistTXRollbackReplyMessage.class);
-    registerDSFID(DISTTX_COMMIT_REPLY_MESSAGE, DistTXCommitMessage.DistTXCommitReplyMessage.class);
-    registerDSFID(DISTTX_PRE_COMMIT_REPLY_MESSAGE,
-        DistTXPrecommitMessage.DistTXPrecommitReplyMessage.class);
-    registerDSFID(PR_PUT_MESSAGE, PutMessage.class);
-    registerDSFID(INVALIDATE_MESSAGE, InvalidateOperation.InvalidateMessage.class);
-    registerDSFID(DESTROY_MESSAGE, DestroyOperation.DestroyMessage.class);
-    registerDSFID(DA_PROFILE, DistributionAdvisor.Profile.class);
-    registerDSFID(CACHE_PROFILE, CacheDistributionAdvisor.CacheProfile.class);
-    registerDSFID(HA_PROFILE, HARegion.HARegionAdvisor.HAProfile.class);
-    registerDSFID(ENTRY_EVENT, EntryEventImpl.class);
-    registerDSFID(UPDATE_ATTRIBUTES_MESSAGE,
-        UpdateAttributesProcessor.UpdateAttributesMessage.class);
-    registerDSFID(PROFILE_REPLY_MESSAGE, UpdateAttributesProcessor.ProfileReplyMessage.class);
-    registerDSFID(PROFILES_REPLY_MESSAGE, UpdateAttributesProcessor.ProfilesReplyMessage.class);
-    registerDSFID(REGION_EVENT, RegionEventImpl.class);
-    registerDSFID(TX_COMMIT_MESSAGE, TXCommitMessage.class);
-    registerDSFID(COMMIT_PROCESS_FOR_LOCKID_MESSAGE, CommitProcessForLockIdMessage.class);
-    registerDSFID(COMMIT_PROCESS_FOR_TXID_MESSAGE, CommitProcessForTXIdMessage.class);
-    registerDSFID(FILTER_PROFILE, FilterProfile.class);
-    registerDSFID(REMOTE_PUTALL_REPLY_MESSAGE, RemotePutAllMessage.PutAllReplyMessage.class);
-    registerDSFID(REMOTE_PUTALL_MESSAGE, RemotePutAllMessage.class);
-    registerDSFID(VERSION_TAG, VMVersionTag.class);
-    registerDSFID(ADD_CACHESERVER_PROFILE_UPDATE, AddCacheServerProfileMessage.class);
-    registerDSFID(REMOVE_CACHESERVER_PROFILE_UPDATE, RemoveCacheServerProfileMessage.class);
-    registerDSFID(SERVER_INTEREST_REGISTRATION_MESSAGE, ServerInterestRegistrationMessage.class);
-    registerDSFID(FILTER_PROFILE_UPDATE, FilterProfile.OperationMessage.class);
-    registerDSFID(PR_GET_MESSAGE, GetMessage.class);
-    registerDSFID(R_FETCH_ENTRY_MESSAGE, RemoteFetchEntryMessage.class);
-    registerDSFID(R_FETCH_ENTRY_REPLY_MESSAGE,
-        RemoteFetchEntryMessage.FetchEntryReplyMessage.class);
-    registerDSFID(R_CONTAINS_MESSAGE, RemoteContainsKeyValueMessage.class);
-    registerDSFID(R_CONTAINS_REPLY_MESSAGE,
-        RemoteContainsKeyValueMessage.RemoteContainsKeyValueReplyMessage.class);
-    registerDSFID(R_DESTROY_MESSAGE, RemoteDestroyMessage.class);
-    registerDSFID(R_DESTROY_REPLY_MESSAGE, RemoteDestroyMessage.DestroyReplyMessage.class);
-    registerDSFID(R_INVALIDATE_MESSAGE, RemoteInvalidateMessage.class);
-    registerDSFID(R_INVALIDATE_REPLY_MESSAGE, RemoteInvalidateMessage.InvalidateReplyMessage.class);
-    registerDSFID(R_GET_MESSAGE, RemoteGetMessage.class);
-    registerDSFID(R_GET_REPLY_MESSAGE, RemoteGetMessage.GetReplyMessage.class);
-    registerDSFID(R_PUT_MESSAGE, RemotePutMessage.class);
-    registerDSFID(R_PUT_REPLY_MESSAGE, RemotePutMessage.PutReplyMessage.class);
-    registerDSFID(R_SIZE_MESSAGE, RemoteSizeMessage.class);
-    registerDSFID(R_SIZE_REPLY_MESSAGE, RemoteSizeMessage.SizeReplyMessage.class);
-    registerDSFID(PR_DESTROY_REPLY_MESSAGE, DestroyMessage.DestroyReplyMessage.class);
-    registerDSFID(CLI_FUNCTION_RESULT, CliFunctionResult.class);
-    registerDSFID(R_FETCH_KEYS_MESSAGE, RemoteFetchKeysMessage.class);
-    registerDSFID(R_FETCH_KEYS_REPLY, RemoteFetchKeysMessage.RemoteFetchKeysReplyMessage.class);
-    registerDSFID(R_REMOTE_COMMIT_REPLY_MESSAGE, TXRemoteCommitReplyMessage.class);
-    registerDSFID(TRANSACTION_LOCK_ID, TXLockIdImpl.class);
-    registerDSFID(PR_GET_REPLY_MESSAGE, GetReplyMessage.class);
-    registerDSFID(PR_NODE, Node.class);
-    registerDSFID(UPDATE_WITH_CONTEXT_MESSAGE, UpdateOperation.UpdateWithContextMessage.class);
-    registerDSFID(DESTROY_WITH_CONTEXT_MESSAGE, DestroyOperation.DestroyWithContextMessage.class);
-    registerDSFID(INVALIDATE_WITH_CONTEXT_MESSAGE,
-        InvalidateOperation.InvalidateWithContextMessage.class);
-    registerDSFID(REGION_VERSION_VECTOR, VMRegionVersionVector.class);
-    registerDSFID(CLIENT_PROXY_MEMBERSHIPID, ClientProxyMembershipID.class);
-    registerDSFID(EVENT_ID, EventID.class);
-    registerDSFID(CLIENT_UPDATE_MESSAGE, ClientUpdateMessageImpl.class);
-    registerDSFID(CLEAR_REGION_MESSAGE_WITH_CONTEXT, ClearRegionWithContextMessage.class);
-    registerDSFID(CLIENT_INSTANTIATOR_MESSAGE, ClientInstantiatorMessage.class);
-    registerDSFID(CLIENT_DATASERIALIZER_MESSAGE, ClientDataSerializerMessage.class);
-    registerDSFID(REGISTRATION_MESSAGE, InternalInstantiator.RegistrationMessage.class);
-    registerDSFID(REGISTRATION_CONTEXT_MESSAGE,
-        InternalInstantiator.RegistrationContextMessage.class);
-    registerDSFID(RESULTS_COLLECTION_WRAPPER, ResultsCollectionWrapper.class);
-    registerDSFID(RESULTS_SET, ResultsSet.class);
-    registerDSFID(SORTED_RESULT_SET, SortedResultSet.class);
-    registerDSFID(SORTED_STRUCT_SET, SortedStructSet.class);
-    registerDSFID(NWAY_MERGE_RESULTS, NWayMergeResults.class);
-    registerDSFID(CUMULATIVE_RESULTS, CumulativeNonDistinctResults.class);
-    registerDSFID(UNDEFINED, Undefined.class);
-    registerDSFID(STRUCT_IMPL, StructImpl.class);
-    registerDSFID(STRUCT_SET, StructSet.class);
-    registerDSFID(END_OF_BUCKET, PRQueryProcessor.EndOfBucket.class);
-    registerDSFID(STRUCT_BAG, StructBag.class);
-    registerDSFID(LINKED_RESULTSET, LinkedResultSet.class);
-    registerDSFID(LINKED_STRUCTSET, LinkedStructSet.class);
-    registerDSFID(PR_BUCKET_BACKUP_MESSAGE, BucketBackupMessage.class);
-    registerDSFID(PR_BUCKET_PROFILE_UPDATE_MESSAGE, BucketProfileUpdateMessage.class);
-    registerDSFID(PR_ALL_BUCKET_PROFILES_UPDATE_MESSAGE, AllBucketProfilesUpdateMessage.class);
-    registerDSFID(PR_BUCKET_SIZE_MESSAGE, BucketSizeMessage.class);
-    registerDSFID(PR_CONTAINS_KEY_VALUE_MESSAGE, ContainsKeyValueMessage.class);
-    registerDSFID(PR_DUMP_ALL_PR_CONFIG_MESSAGE, DumpAllPRConfigMessage.class);
-    registerDSFID(PR_DUMP_BUCKETS_MESSAGE, DumpBucketsMessage.class);
-    registerDSFID(PR_FETCH_ENTRIES_MESSAGE, FetchEntriesMessage.class);
-    registerDSFID(PR_FETCH_ENTRY_MESSAGE, FetchEntryMessage.class);
-    registerDSFID(PR_FETCH_KEYS_MESSAGE, FetchKeysMessage.class);
-    registerDSFID(PR_FLUSH_MESSAGE, FlushMessage.class);
-    registerDSFID(PR_IDENTITY_REQUEST_MESSAGE, IdentityRequestMessage.class);
-    registerDSFID(PR_IDENTITY_UPDATE_MESSAGE, IdentityUpdateMessage.class);
-    registerDSFID(PR_INDEX_CREATION_MSG, IndexCreationMsg.class);
-    registerDSFID(PR_MANAGE_BUCKET_MESSAGE, ManageBucketMessage.class);
-    registerDSFID(PR_PRIMARY_REQUEST_MESSAGE, PrimaryRequestMessage.class);
-    registerDSFID(PR_PRIMARY_REQUEST_REPLY_MESSAGE, PrimaryRequestReplyMessage.class);
-    registerDSFID(PR_SANITY_CHECK_MESSAGE, PRSanityCheckMessage.class);
-    registerDSFID(PR_PUTALL_REPLY_MESSAGE, PutAllReplyMessage.class);
-    registerDSFID(PR_PUT_REPLY_MESSAGE, PutReplyMessage.class);
-    registerDSFID(PR_QUERY_MESSAGE, QueryMessage.class);
-    registerDSFID(PR_REMOVE_INDEXES_MESSAGE, RemoveIndexesMessage.class);
-    registerDSFID(PR_REMOVE_INDEXES_REPLY_MESSAGE, RemoveIndexesReplyMessage.class);
-    registerDSFID(PR_SIZE_MESSAGE, SizeMessage.class);
-    registerDSFID(PR_SIZE_REPLY_MESSAGE, SizeReplyMessage.class);
-    registerDSFID(PR_BUCKET_SIZE_REPLY_MESSAGE, BucketSizeReplyMessage.class);
-    registerDSFID(PR_CONTAINS_KEY_VALUE_REPLY_MESSAGE, ContainsKeyValueReplyMessage.class);
-    registerDSFID(PR_FETCH_ENTRIES_REPLY_MESSAGE, FetchEntriesReplyMessage.class);
-    registerDSFID(PR_FETCH_ENTRY_REPLY_MESSAGE, FetchEntryReplyMessage.class);
-    registerDSFID(PR_IDENTITY_REPLY_MESSAGE, IdentityReplyMessage.class);
-    registerDSFID(PR_INDEX_CREATION_REPLY_MSG, IndexCreationReplyMsg.class);
-    registerDSFID(PR_MANAGE_BUCKET_REPLY_MESSAGE, ManageBucketReplyMessage.class);
-    registerDSFID(PR_FETCH_KEYS_REPLY_MESSAGE, FetchKeysReplyMessage.class);
-    registerDSFID(PR_DUMP_B2N_REGION_MSG, DumpB2NRegion.class);
-    registerDSFID(PR_DUMP_B2N_REPLY_MESSAGE, DumpB2NReplyMessage.class);
-    registerDSFID(DESTROY_PARTITIONED_REGION_MESSAGE, DestroyPartitionedRegionMessage.class);
-    registerDSFID(INVALIDATE_PARTITIONED_REGION_MESSAGE, InvalidatePartitionedRegionMessage.class);
-    registerDSFID(COMMIT_PROCESS_QUERY_MESSAGE, CommitProcessQueryMessage.class);
-    registerDSFID(COMMIT_PROCESS_QUERY_REPLY_MESSAGE, CommitProcessQueryReplyMessage.class);
-    registerDSFID(DESTROY_REGION_WITH_CONTEXT_MESSAGE,
-        DestroyRegionOperation.DestroyRegionWithContextMessage.class);
-    registerDSFID(PUT_ALL_MESSAGE, PutAllMessage.class);
-    registerDSFID(REMOVE_ALL_MESSAGE, RemoveAllMessage.class);
-    registerDSFID(CLEAR_REGION_MESSAGE, ClearRegionMessage.class);
-    registerDSFID(TOMBSTONE_MESSAGE, TombstoneMessage.class);
-    registerDSFID(INVALIDATE_REGION_MESSAGE, InvalidateRegionMessage.class);
-    registerDSFID(STATE_MARKER_MESSAGE, StateMarkerMessage.class);
-    registerDSFID(STATE_STABILIZATION_MESSAGE, StateStabilizationMessage.class);
-    registerDSFID(STATE_STABILIZED_MESSAGE, StateStabilizedMessage.class);
-    registerDSFID(CLIENT_MARKER_MESSAGE_IMPL, ClientMarkerMessageImpl.class);
-    registerDSFID(TX_LOCK_UPDATE_PARTICIPANTS_MESSAGE, TXLockUpdateParticipantsMessage.class);
-    registerDSFID(TX_ORIGINATOR_RECOVERY_MESSAGE, TXOriginatorRecoveryMessage.class);
-    registerDSFID(TX_ORIGINATOR_RECOVERY_REPLY_MESSAGE, TXOriginatorRecoveryReplyMessage.class);
-    registerDSFID(TX_REMOTE_COMMIT_MESSAGE, TXRemoteCommitMessage.class);
-    registerDSFID(TX_REMOTE_ROLLBACK_MESSAGE, TXRemoteRollbackMessage.class);
-    registerDSFID(JTA_BEFORE_COMPLETION_MESSAGE, JtaBeforeCompletionMessage.class);
-    registerDSFID(JTA_AFTER_COMPLETION_MESSAGE, JtaAfterCompletionMessage.class);
-    registerDSFID(QUEUE_REMOVAL_MESSAGE, QueueRemovalMessage.class);
-    registerDSFID(DLOCK_RECOVER_GRANTOR_MESSAGE, DLockRecoverGrantorMessage.class);
-    registerDSFID(DLOCK_RECOVER_GRANTOR_REPLY_MESSAGE, DLockRecoverGrantorReplyMessage.class);
-    registerDSFID(NON_GRANTOR_DESTROYED_REPLY_MESSAGE, NonGrantorDestroyedReplyMessage.class);
-    registerDSFID(IDS_REGISTRATION_MESSAGE, InternalDataSerializer.RegistrationMessage.class);
-    registerDSFID(PR_FETCH_PARTITION_DETAILS_MESSAGE, FetchPartitionDetailsMessage.class);
-    registerDSFID(PR_FETCH_PARTITION_DETAILS_REPLY, FetchPartitionDetailsReplyMessage.class);
-    registerDSFID(PR_DEPOSE_PRIMARY_BUCKET_MESSAGE, DeposePrimaryBucketMessage.class);
-    registerDSFID(PR_DEPOSE_PRIMARY_BUCKET_REPLY, DeposePrimaryBucketReplyMessage.class);
-    registerDSFID(PR_BECOME_PRIMARY_BUCKET_MESSAGE, BecomePrimaryBucketMessage.class);
-    registerDSFID(PR_BECOME_PRIMARY_BUCKET_REPLY, BecomePrimaryBucketReplyMessage.class);
-    registerDSFID(PR_REMOVE_BUCKET_MESSAGE, RemoveBucketMessage.class);
-    registerDSFID(EXPIRE_CLIENT_TRANSACTIONS, ExpireDisconnectedClientTransactionsMessage.class);
-    registerDSFID(PR_REMOVE_BUCKET_REPLY, RemoveBucketReplyMessage.class);
-    registerDSFID(PR_MOVE_BUCKET_MESSAGE, MoveBucketMessage.class);
-    registerDSFID(PR_MOVE_BUCKET_REPLY, MoveBucketReplyMessage.class);
-    registerDSFID(ADD_HEALTH_LISTENER_REQUEST, AddHealthListenerRequest.class);
-    registerDSFID(ADD_HEALTH_LISTENER_RESPONSE, AddHealthListenerResponse.class);
-    registerDSFID(ADD_STAT_LISTENER_REQUEST, AddStatListenerRequest.class);
-    registerDSFID(ADD_STAT_LISTENER_RESPONSE, AddStatListenerResponse.class);
-    registerDSFID(ADMIN_CONSOLE_DISCONNECT_MESSAGE, AdminConsoleDisconnectMessage.class);
-    registerDSFID(ADMIN_CONSOLE_MESSAGE, AdminConsoleMessage.class);
-    registerDSFID(MANAGER_STARTUP_MESSAGE, ManagerStartupMessage.class);
-    registerDSFID(JMX_MANAGER_LOCATOR_REQUEST, JmxManagerLocatorRequest.class);
-    registerDSFID(JMX_MANAGER_LOCATOR_RESPONSE, JmxManagerLocatorResponse.class);
-    registerDSFID(ADMIN_FAILURE_RESPONSE, AdminFailureResponse.class);
-    registerDSFID(ALERT_LEVEL_CHANGE_MESSAGE, AlertLevelChangeMessage.class);
-    registerDSFID(ALERT_LISTENER_MESSAGE, AlertListenerMessage.class);
-    registerDSFID(APP_CACHE_SNAPSHOT_MESSAGE, AppCacheSnapshotMessage.class);
-    registerDSFID(BRIDGE_SERVER_REQUEST, BridgeServerRequest.class);
-    registerDSFID(BRIDGE_SERVER_RESPONSE, BridgeServerResponse.class);
-    registerDSFID(CACHE_CONFIG_REQUEST, CacheConfigRequest.class);
-    registerDSFID(CACHE_CONFIG_RESPONSE, CacheConfigResponse.class);
-    registerDSFID(CACHE_INFO_REQUEST, CacheInfoRequest.class);
-    registerDSFID(CACHE_INFO_RESPONSE, CacheInfoResponse.class);
-    registerDSFID(CANCELLATION_MESSAGE, CancellationMessage.class);
-    registerDSFID(CANCEL_STAT_LISTENER_REQUEST, CancelStatListenerRequest.class);
-    registerDSFID(CANCEL_STAT_LISTENER_RESPONSE, CancelStatListenerResponse.class);
-    registerDSFID(DESTROY_ENTRY_MESSAGE, DestroyEntryMessage.class);
-    registerDSFID(ADMIN_DESTROY_REGION_MESSAGE, DestroyRegionMessage.class);
-    registerDSFID(FETCH_DIST_LOCK_INFO_REQUEST, FetchDistLockInfoRequest.class);
-    registerDSFID(FETCH_DIST_LOCK_INFO_RESPONSE, FetchDistLockInfoResponse.class);
-    registerDSFID(FETCH_HEALTH_DIAGNOSIS_REQUEST, FetchHealthDiagnosisRequest.class);
-    registerDSFID(FETCH_HEALTH_DIAGNOSIS_RESPONSE, FetchHealthDiagnosisResponse.class);
-    registerDSFID(FETCH_HOST_REQUEST, FetchHostRequest.class);
-    registerDSFID(FETCH_HOST_RESPONSE, FetchHostResponse.class);
-    registerDSFID(FETCH_RESOURCE_ATTRIBUTES_REQUEST, FetchResourceAttributesRequest.class);
-    registerDSFID(FETCH_RESOURCE_ATTRIBUTES_RESPONSE, FetchResourceAttributesResponse.class);
-    registerDSFID(FETCH_STATS_REQUEST, FetchStatsRequest.class);
-    registerDSFID(FETCH_STATS_RESPONSE, FetchStatsResponse.class);
-    registerDSFID(FETCH_SYS_CFG_REQUEST, FetchSysCfgRequest.class);
-    registerDSFID(FETCH_SYS_CFG_RESPONSE, FetchSysCfgResponse.class);
-    registerDSFID(FLUSH_APP_CACHE_SNAPSHOT_MESSAGE, FlushAppCacheSnapshotMessage.class);
-    registerDSFID(HEALTH_LISTENER_MESSAGE, HealthListenerMessage.class);
-    registerDSFID(OBJECT_DETAILS_REQUEST, ObjectDetailsRequest.class);
-    registerDSFID(OBJECT_DETAILS_RESPONSE, ObjectDetailsResponse.class);
-    registerDSFID(OBJECT_NAMES_REQUEST, ObjectNamesRequest.class);
-    registerDSFID(LICENSE_INFO_REQUEST, LicenseInfoRequest.class);
-    registerDSFID(LICENSE_INFO_RESPONSE, LicenseInfoResponse.class);
-    registerDSFID(OBJECT_NAMES_RESPONSE, ObjectNamesResponse.class);
-    registerDSFID(REGION_ATTRIBUTES_REQUEST, RegionAttributesRequest.class);
-    registerDSFID(REGION_ATTRIBUTES_RESPONSE, RegionAttributesResponse.class);
-    registerDSFID(REGION_REQUEST, RegionRequest.class);
-    registerDSFID(REGION_RESPONSE, RegionResponse.class);
-    registerDSFID(REGION_SIZE_REQUEST, RegionSizeRequest.class);
-    registerDSFID(REGION_SIZE_RESPONSE, RegionSizeResponse.class);
-    registerDSFID(REGION_STATISTICS_REQUEST, RegionStatisticsRequest.class);
-    registerDSFID(REGION_STATISTICS_RESPONSE, RegionStatisticsResponse.class);
-    registerDSFID(REMOVE_HEALTH_LISTENER_REQUEST, RemoveHealthListenerRequest.class);
-    registerDSFID(REMOVE_HEALTH_LISTENER_RESPONSE, RemoveHealthListenerResponse.class);
-    registerDSFID(RESET_HEALTH_STATUS_REQUEST, ResetHealthStatusRequest.class);
-    registerDSFID(RESET_HEALTH_STATUS_RESPONSE, ResetHealthStatusResponse.class);
-    registerDSFID(ROOT_REGION_REQUEST, RootRegionRequest.class);
-    registerDSFID(ROOT_REGION_RESPONSE, RootRegionResponse.class);
-    registerDSFID(SNAPSHOT_RESULT_MESSAGE, SnapshotResultMessage.class);
-    registerDSFID(STAT_LISTENER_MESSAGE, StatListenerMessage.class);
-    registerDSFID(STORE_SYS_CFG_REQUEST, StoreSysCfgRequest.class);
-    registerDSFID(STORE_SYS_CFG_RESPONSE, StoreSysCfgResponse.class);
-    registerDSFID(SUB_REGION_REQUEST, SubRegionRequest.class);
-    registerDSFID(SUB_REGION_RESPONSE, SubRegionResponse.class);
-    registerDSFID(TAIL_LOG_REQUEST, TailLogRequest.class);
-    registerDSFID(TAIL_LOG_RESPONSE, TailLogResponse.class);
-    registerDSFID(VERSION_INFO_REQUEST, VersionInfoRequest.class);
-    registerDSFID(VERSION_INFO_RESPONSE, VersionInfoResponse.class);
-    registerDSFID(HIGH_PRIORITY_ACKED_MESSAGE, HighPriorityAckedMessage.class);
-    registerDSFID(SERIAL_ACKED_MESSAGE, SerialAckedMessage.class);
-    registerDSFID(BUCKET_PROFILE, BucketAdvisor.BucketProfile.class);
-    registerDSFID(SERVER_BUCKET_PROFILE, BucketAdvisor.ServerBucketProfile.class);
-    registerDSFID(PARTITION_PROFILE, RegionAdvisor.PartitionProfile.class);
-    registerDSFID(GATEWAY_SENDER_PROFILE, GatewaySenderAdvisor.GatewaySenderProfile.class);
-    registerDSFID(ROLE_EVENT, RoleEventImpl.class);
-    registerDSFID(CLIENT_REGION_EVENT, ClientRegionEventImpl.class);
-    registerDSFID(PR_INVALIDATE_MESSAGE, InvalidateMessage.class);
-    registerDSFID(PR_INVALIDATE_REPLY_MESSAGE, InvalidateMessage.InvalidateReplyMessage.class);
-    registerDSFID(TX_LOCK_UPDATE_PARTICIPANTS_REPLY_MESSAGE,
-        TXLockUpdateParticipantsReplyMessage.class);
-    registerDSFID(STREAMING_REPLY_MESSAGE, StreamingReplyMessage.class);
-    registerDSFID(PARTITION_REGION_CONFIG, PartitionRegionConfig.class);
-    registerDSFID(PREFER_BYTES_CACHED_DESERIALIZABLE, PreferBytesCachedDeserializable.class);
-    registerDSFID(VM_CACHED_DESERIALIZABLE, VMCachedDeserializable.class);
-    registerDSFID(GATEWAY_SENDER_EVENT_IMPL, GatewaySenderEventImpl.class);
-    registerDSFID(SUSPEND_LOCKING_TOKEN, DLockService.SuspendLockingToken.class);
-    registerDSFID(OBJECT_TYPE_IMPL, ObjectTypeImpl.class);
-    registerDSFID(STRUCT_TYPE_IMPL, StructTypeImpl.class);
-    registerDSFID(COLLECTION_TYPE_IMPL, CollectionTypeImpl.class);
-    registerDSFID(TX_LOCK_BATCH, TXLockBatch.class);
-    registerDSFID(GATEWAY_SENDER_EVENT_CALLBACK_ARGUMENT, GatewaySenderEventCallbackArgument.class);
-    registerDSFID(MAP_TYPE_IMPL, MapTypeImpl.class);
-    registerDSFID(STORE_ALL_CACHED_DESERIALIZABLE, StoreAllCachedDeserializable.class);
-    registerDSFID(INTEREST_EVENT_MESSAGE, InterestEventMessage.class);
-    registerDSFID(INTEREST_EVENT_REPLY_MESSAGE, InterestEventReplyMessage.class);
-    registerDSFID(HA_EVENT_WRAPPER, HAEventWrapper.class);
-    registerDSFID(STAT_ALERTS_MGR_ASSIGN_MESSAGE, StatAlertsManagerAssignMessage.class);
-    registerDSFID(UPDATE_ALERTS_DEFN_MESSAGE, UpdateAlertDefinitionMessage.class);
-    registerDSFID(REFRESH_MEMBER_SNAP_REQUEST, RefreshMemberSnapshotRequest.class);
-    registerDSFID(REFRESH_MEMBER_SNAP_RESPONSE, RefreshMemberSnapshotResponse.class);
-    registerDSFID(REGION_SUB_SIZE_REQUEST, RegionSubRegionSizeRequest.class);
-    registerDSFID(REGION_SUB_SIZE_RESPONSE, RegionSubRegionsSizeResponse.class);
-    registerDSFID(CHANGE_REFRESH_INT_MESSAGE, ChangeRefreshIntervalMessage.class);
-    registerDSFID(ALERTS_NOTIF_MESSAGE, AlertsNotificationMessage.class);
-    registerDSFID(FIND_DURABLE_QUEUE, FindDurableQueueMessage.class);
-    registerDSFID(FIND_DURABLE_QUEUE_REPLY, FindDurableQueueReply.class);
-    registerDSFID(CACHE_SERVER_LOAD_MESSAGE, CacheServerLoadMessage.class);
-    registerDSFID(CACHE_SERVER_PROFILE, CacheServerProfile.class);
-    registerDSFID(CONTROLLER_PROFILE, ControllerProfile.class);
-    registerDSFID(DLOCK_QUERY_MESSAGE, DLockQueryProcessor.DLockQueryMessage.class);
-    registerDSFID(DLOCK_QUERY_REPLY, DLockQueryProcessor.DLockQueryReplyMessage.class);
-    registerDSFID(LOCATOR_LIST_REQUEST, LocatorListRequest.class);
-    registerDSFID(LOCATOR_LIST_RESPONSE, LocatorListResponse.class);
-    registerDSFID(CLIENT_CONNECTION_REQUEST, ClientConnectionRequest.class);
-    registerDSFID(CLIENT_CONNECTION_RESPONSE, ClientConnectionResponse.class);
-    registerDSFID(QUEUE_CONNECTION_REQUEST, QueueConnectionRequest.class);
-    registerDSFID(QUEUE_CONNECTION_RESPONSE, QueueConnectionResponse.class);
-    registerDSFID(CLIENT_REPLACEMENT_REQUEST, ClientReplacementRequest.class);
-    registerDSFID(OBJECT_PART_LIST, ObjectPartList.class);
-    registerDSFID(VERSIONED_OBJECT_LIST, VersionedObjectList.class);
-    registerDSFID(OBJECT_PART_LIST66, ObjectPartList651.class);
-    registerDSFID(PUTALL_VERSIONS_LIST, EntryVersionsList.class);
-    registerDSFID(INITIAL_IMAGE_VERSIONED_OBJECT_LIST, InitialImageVersionedEntryList.class);
-    registerDSFID(FIND_VERSION_TAG, FindVersionTagMessage.class);
-    registerDSFID(VERSION_TAG_REPLY, VersionTagReply.class);
-    registerDSFID(DURABLE_CLIENT_INFO_REQUEST, DurableClientInfoRequest.class);
-    registerDSFID(DURABLE_CLIENT_INFO_RESPONSE, DurableClientInfoResponse.class);
-    registerDSFID(CLIENT_INTEREST_MESSAGE, ClientInterestMessageImpl.class);
-    registerDSFID(LATEST_LAST_ACCESS_TIME_MESSAGE, LatestLastAccessTimeMessage.class);
-    registerDSFID(STAT_ALERT_DEFN_NUM_THRESHOLD, NumberThresholdDecoratorImpl.class);
-    registerDSFID(STAT_ALERT_DEFN_GAUGE_THRESHOLD, GaugeThresholdDecoratorImpl.class);
-    registerDSFID(CLIENT_HEALTH_STATS, ClientHealthStats.class);
-    registerDSFID(STAT_ALERT_NOTIFICATION, StatAlertNotification.class);
-    registerDSFID(FILTER_INFO_MESSAGE, InitialImageOperation.FilterInfoMessage.class);
-    registerDSFID(SIZED_BASED_LOAD_PROBE, SizedBasedLoadProbe.class);
-    registerDSFID(PR_MANAGE_BACKUP_BUCKET_MESSAGE, ManageBackupBucketMessage.class);
-    registerDSFID(PR_MANAGE_BACKUP_BUCKET_REPLY_MESSAGE, ManageBackupBucketReplyMessage.class);
-    registerDSFID(PR_CREATE_BUCKET_MESSAGE, CreateBucketMessage.class);
-    registerDSFID(PR_CREATE_BUCKET_REPLY_MESSAGE, CreateBucketReplyMessage.class);
-    registerDSFID(RESOURCE_MANAGER_PROFILE, ResourceManagerProfile.class);
-    registerDSFID(RESOURCE_PROFILE_MESSAGE, ResourceProfileMessage.class);
-    registerDSFID(JMX_MANAGER_PROFILE, JmxManagerProfile.class);
-    registerDSFID(JMX_MANAGER_PROFILE_MESSAGE, JmxManagerProfileMessage.class);
-    registerDSFID(CLIENT_DENYLIST_MESSAGE, ClientDenylistMessage.class);
-    registerDSFID(REMOVE_CLIENT_FROM_DENYLIST_MESSAGE, RemoveClientFromDenylistMessage.class);
-    registerDSFID(PR_FUNCTION_STREAMING_MESSAGE, PartitionedRegionFunctionStreamingMessage.class);
-    registerDSFID(MEMBER_FUNCTION_STREAMING_MESSAGE, MemberFunctionStreamingMessage.class);
-    registerDSFID(DR_FUNCTION_STREAMING_MESSAGE, DistributedRegionFunctionStreamingMessage.class);
-    registerDSFID(FUNCTION_STREAMING_REPLY_MESSAGE, FunctionStreamingReplyMessage.class);
-    registerDSFID(GET_ALL_SERVERS_REQUEST, GetAllServersRequest.class);
-    registerDSFID(GET_ALL_SERVRES_RESPONSE, GetAllServersResponse.class);
-    registerDSFID(PERSISTENT_MEMBERSHIP_VIEW_REQUEST, MembershipViewRequest.class);
-    registerDSFID(PERSISTENT_MEMBERSHIP_VIEW_REPLY, MembershipViewReplyMessage.class);
-    registerDSFID(PERSISTENT_STATE_QUERY_REQUEST, PersistentStateQueryMessage.class);
-    registerDSFID(PERSISTENT_STATE_QUERY_REPLY, PersistentStateQueryReplyMessage.class);
-    registerDSFID(PREPARE_NEW_PERSISTENT_MEMBER_REQUEST, PrepareNewPersistentMemberMessage.class);
-    registerDSFID(MISSING_PERSISTENT_IDS_REQUEST, MissingPersistentIDsRequest.class);
-    registerDSFID(MISSING_PERSISTENT_IDS_RESPONSE, MissingPersistentIDsResponse.class);
-    registerDSFID(REVOKE_PERSISTENT_ID_REQUEST, RevokePersistentIDRequest.class);
-    registerDSFID(REVOKE_PERSISTENT_ID_RESPONSE, RevokePersistentIDResponse.class);
-    registerDSFID(REMOVE_PERSISTENT_MEMBER_REQUEST, RemovePersistentMemberMessage.class);
-    registerDSFID(FUNCTION_STREAMING_ORDERED_REPLY_MESSAGE,
-        FunctionStreamingOrderedReplyMessage.class);
-    registerDSFID(REQUEST_SYNC_MESSAGE, InitialImageOperation.RequestSyncMessage.class);
-    registerDSFID(PERSISTENT_MEMBERSHIP_FLUSH_REQUEST, MembershipFlushRequest.class);
-    registerDSFID(SHUTDOWN_ALL_REQUEST, ShutdownAllRequest.class);
-    registerDSFID(SHUTDOWN_ALL_RESPONSE, ShutdownAllResponse.class);
-    registerDSFID(CLIENT_MEMBERSHIP_MESSAGE, ClientMembershipMessage.class);
-    registerDSFID(END_BUCKET_CREATION_MESSAGE, EndBucketCreationMessage.class);
-    registerDSFID(PREPARE_BACKUP_REQUEST, PrepareBackupRequest.class);
-    registerDSFID(BACKUP_RESPONSE, BackupResponse.class); // in older versions this was
-                                                          // FinishBackupResponse which is
-                                                          // compatible
-    registerDSFID(FINISH_BACKUP_REQUEST, FinishBackupRequest.class);
-    registerDSFID(FINISH_BACKUP_RESPONSE, BackupResponse.class); // for backwards compatibility map
-                                                                 // FINISH_BACKUP_RESPONSE to
-                                                                 // BackupResponse
-    registerDSFID(COMPACT_REQUEST, CompactRequest.class);
-    registerDSFID(COMPACT_RESPONSE, CompactResponse.class);
-    registerDSFID(FLOW_CONTROL_PERMIT_MESSAGE, FlowControlPermitMessage.class);
-    registerDSFID(REQUEST_FILTERINFO_MESSAGE, InitialImageOperation.RequestFilterInfoMessage.class);
-    registerDSFID(PARALLEL_QUEUE_REMOVAL_MESSAGE, ParallelQueueRemovalMessage.class);
-    registerDSFID(BATCH_DESTROY_MESSAGE, BatchDestroyOperation.DestroyMessage.class);
-    registerDSFID(FIND_REMOTE_TX_MESSAGE, FindRemoteTXMessage.class);
-    registerDSFID(FIND_REMOTE_TX_REPLY, FindRemoteTXMessageReply.class);
-    registerDSFID(SERIALIZED_OBJECT_PART_LIST, SerializedObjectPartList.class);
-    registerDSFID(FLUSH_TO_DISK_REQUEST, FlushToDiskRequest.class);
-    registerDSFID(FLUSH_TO_DISK_RESPONSE, FlushToDiskResponse.class);
-    registerDSFID(ENUM_ID, EnumId.class);
-    registerDSFID(ENUM_INFO, EnumInfo.class);
-    registerDSFID(CHECK_TYPE_REGISTRY_STATE, CheckTypeRegistryState.class);
-    registerDSFID(PREPARE_REVOKE_PERSISTENT_ID_REQUEST, PrepareRevokePersistentIDRequest.class);
-    registerDSFID(PERSISTENT_RVV, DiskRegionVersionVector.class);
-    registerDSFID(PERSISTENT_VERSION_TAG, DiskVersionTag.class);
-    registerDSFID(DISK_STORE_ID, DiskStoreID.class);
-    registerDSFID(CLIENT_PING_MESSAGE_IMPL, ClientPingMessageImpl.class);
-    registerDSFID(SNAPSHOT_PACKET, SnapshotPacket.class);
-    registerDSFID(SNAPSHOT_RECORD, SnapshotRecord.class);
-    registerDSFID(FLOW_CONTROL_ACK, FlowControlAckMessage.class);
-    registerDSFID(FLOW_CONTROL_ABORT, FlowControlAbortMessage.class);
-    registerDSFID(MGMT_COMPACT_REQUEST,
-        org.apache.geode.management.internal.messages.CompactRequest.class);
-    registerDSFID(MGMT_COMPACT_RESPONSE,
-        org.apache.geode.management.internal.messages.CompactResponse.class);
-    registerDSFID(MGMT_FEDERATION_COMPONENT,
-        org.apache.geode.management.internal.FederationComponent.class);
-    registerDSFID(LOCATOR_STATUS_REQUEST, LocatorStatusRequest.class);
-    registerDSFID(LOCATOR_STATUS_RESPONSE, LocatorStatusResponse.class);
-    registerDSFID(R_FETCH_VERSION_MESSAGE, RemoteFetchVersionMessage.class);
-    registerDSFID(R_FETCH_VERSION_REPLY, RemoteFetchVersionMessage.FetchVersionReplyMessage.class);
-    registerDSFID(RELEASE_CLEAR_LOCK_MESSAGE, ReleaseClearLockMessage.class);
-    registerDSFID(PR_TOMBSTONE_MESSAGE, PRTombstoneMessage.class);
-    registerDSFID(REQUEST_RVV_MESSAGE, InitialImageOperation.RequestRVVMessage.class);
-    registerDSFID(RVV_REPLY_MESSAGE, InitialImageOperation.RVVReplyMessage.class);
-    registerDSFID(SNAPPY_COMPRESSED_CACHED_DESERIALIZABLE,
-        SnappyCompressedCachedDeserializable.class);
-    registerDSFID(UPDATE_ENTRY_VERSION_MESSAGE, UpdateEntryVersionMessage.class);
-    registerDSFID(PR_UPDATE_ENTRY_VERSION_MESSAGE, PRUpdateEntryVersionMessage.class);
-    registerDSFID(PR_FETCH_BULK_ENTRIES_MESSAGE, FetchBulkEntriesMessage.class);
-    registerDSFID(PR_FETCH_BULK_ENTRIES_REPLY_MESSAGE, FetchBulkEntriesReplyMessage.class);
-    registerDSFID(PR_QUERY_TRACE_INFO, PRQueryTraceInfo.class);
-    registerDSFID(INDEX_CREATION_DATA, IndexCreationData.class);
-    registerDSFID(DIST_TX_OP, DistTxEntryEvent.class);
-    registerDSFID(DIST_TX_PRE_COMMIT_RESPONSE, DistTxPrecommitResponse.class);
-    registerDSFID(DIST_TX_THIN_ENTRY_STATE, TXEntryState.DistTxThinEntryState.class);
-    registerDSFID(SERVER_PING_MESSAGE, ServerPingMessage.class);
-    registerDSFID(PR_DESTROY_ON_DATA_STORE_MESSAGE, DestroyRegionOnDataStoreMessage.class);
-    registerDSFID(SHUTDOWN_ALL_GATEWAYHUBS_REQUEST, ShutdownAllGatewayHubsRequest.class);
-    registerDSFID(BUCKET_COUNT_LOAD_PROBE, BucketCountLoadProbe.class);
-    registerDSFID(GATEWAY_SENDER_QUEUE_ENTRY_SYNCHRONIZATION_MESSAGE,
-        GatewaySenderQueueEntrySynchronizationOperation.GatewaySenderQueueEntrySynchronizationMessage.class);
-    registerDSFID(GATEWAY_SENDER_QUEUE_ENTRY_SYNCHRONIZATION_ENTRY,
-        GatewaySenderQueueEntrySynchronizationOperation.GatewaySenderQueueEntrySynchronizationEntry.class);
-    registerDSFID(ABORT_BACKUP_REQUEST, AbortBackupRequest.class);
-  }
-
   /**
    * Creates a DataSerializableFixedID or StreamableFixedID instance by deserializing it from the
    * data input.
    */
-  public static Object create(int dsfid, DataInput in) throws IOException, ClassNotFoundException {
-    switch (dsfid) {
-      case REGION:
-        return (DataSerializableFixedID) DataSerializer.readRegion(in);
-      case END_OF_STREAM_TOKEN:
-        return Token.END_OF_STREAM;
-      case DLOCK_REMOTE_TOKEN:
-        return DLockRemoteToken.createFromDataInput(in);
-      case TRANSACTION_ID:
-        return TXId.createFromData(in);
-      case INTEREST_RESULT_POLICY:
-        return readInterestResultPolicy(in);
-      case UNDEFINED:
-        return readUndefined(in);
-      case RESULTS_BAG:
-        return readResultsBag(in);
-      case TOKEN_INVALID:
-        return Token.INVALID;
-      case TOKEN_LOCAL_INVALID:
-        return Token.LOCAL_INVALID;
-      case TOKEN_DESTROYED:
-        return Token.DESTROYED;
-      case TOKEN_REMOVED:
-        return Token.REMOVED_PHASE1;
-      case TOKEN_REMOVED2:
-        return Token.REMOVED_PHASE2;
-      case TOKEN_TOMBSTONE:
-        return Token.TOMBSTONE;
-      case NULL_TOKEN:
-        return readNullToken(in);
-      case CONFIGURATION_RESPONSE:
-        return readConfigurationResponse(in);
-      case PR_DESTROY_ON_DATA_STORE_MESSAGE:
-        return readDestroyOnDataStore(in);
-      default:
-        final Constructor<?> cons;
-        if (dsfid >= Byte.MIN_VALUE && dsfid <= Byte.MAX_VALUE) {
-          cons = dsfidMap[dsfid + Byte.MAX_VALUE + 1];
+  public Object create(int dsfid, DataInput in) throws IOException, ClassNotFoundException {
+    final Constructor<?> cons;
+    if (dsfid >= Byte.MIN_VALUE && dsfid <= Byte.MAX_VALUE) {
+      cons = dsfidMap[dsfid + Byte.MAX_VALUE + 1];
+    } else {
+      cons = (Constructor<?>) dsfidMap2.get(dsfid);
+    }
+    if (cons != null) {
+      try {
+        Object ds = cons.newInstance((Object[]) null);
+        InternalDataSerializer.invokeFromData(ds, in);
+        return ds;
+      } catch (InstantiationException ie) {
+        throw new IOException(ie.getMessage(), ie);
+      } catch (IllegalAccessException iae) {
+        throw new IOException(iae.getMessage(), iae);
+      } catch (InvocationTargetException ite) {
+        Throwable targetEx = ite.getTargetException();
+        if (targetEx instanceof IOException) {
+          throw (IOException) targetEx;
+        } else if (targetEx instanceof ClassNotFoundException) {
+          throw (ClassNotFoundException) targetEx;
         } else {
-          cons = (Constructor<?>) dsfidMap2.get(dsfid);
-        }
-        if (cons != null) {
-          try {
-            Object ds = cons.newInstance((Object[]) null);
-            InternalDataSerializer.invokeFromData(ds, in);
-            return ds;
-          } catch (InstantiationException ie) {
-            throw new IOException(ie.getMessage(), ie);
-          } catch (IllegalAccessException iae) {
-            throw new IOException(iae.getMessage(), iae);
-          } catch (InvocationTargetException ite) {
-            Throwable targetEx = ite.getTargetException();
-            if (targetEx instanceof IOException) {
-              throw (IOException) targetEx;
-            } else if (targetEx instanceof ClassNotFoundException) {
-              throw (ClassNotFoundException) targetEx;
-            } else {
-              throw new IOException(ite.getMessage(), targetEx);
-            }
-          }
+          throw new IOException(ite.getMessage(), targetEx);
         }
-        throw new DSFIDNotFoundException("Unknown DataSerializableFixedID: " + dsfid, dsfid);
-
+      }
     }
+    throw new DSFIDNotFoundException("Unknown DataSerializableFixedID: " + dsfid, dsfid);
   }
 
 
-  ////////////////// Reading Internal Objects /////////////////
-  /**
-   * Reads an instance of <code>IpAddress</code> from a <code>DataInput</code>.
-   *
-   * @throws IOException A problem occurs while reading from <code>in</code>
-   */
-  public static InternalDistributedMember readInternalDistributedMember(DataInput in)
-      throws IOException, ClassNotFoundException {
-
-    InternalDistributedMember o = new InternalDistributedMember();
-    InternalDataSerializer.invokeFromData(o, in);
-    return o;
-  }
-
-  private static ResultsBag readResultsBag(DataInput in)
-      throws IOException, ClassNotFoundException {
-    ResultsBag o = new ResultsBag(true);
-    InternalDataSerializer.invokeFromData(o, in);
-    return o;
-  }
-
-  private static Undefined readUndefined(DataInput in) throws IOException, ClassNotFoundException {
-    Undefined o = (Undefined) QueryService.UNDEFINED;
-    InternalDataSerializer.invokeFromData(o, in);
-    return o;
-  }
-
-  /**
-   * Reads an instance of <code>InterestResultPolicy</code> from a <code>DataInput</code>.
-   *
-   * @throws IOException A problem occurs while reading from <code>in</code>
-   */
-  private static InterestResultPolicyImpl readInterestResultPolicy(DataInput in)
-      throws IOException, ClassNotFoundException {
-    byte ordinal = in.readByte();
-    return (InterestResultPolicyImpl) InterestResultPolicy.fromOrdinal(ordinal);
-  }
-
-  private static DataSerializableFixedID readDestroyOnDataStore(DataInput in)
-      throws IOException, ClassNotFoundException {
-    DataSerializableFixedID serializable = new DestroyRegionOnDataStoreMessage();
-    serializable.fromData(in);
-    return serializable;
-  }
-
-  private static DataSerializableFixedID readNullToken(DataInput in)
-      throws IOException, ClassNotFoundException {
-    DataSerializableFixedID serializable = (NullToken) IndexManager.NULL;
-    serializable.fromData(in);
-    return serializable;
-  }
-
-  private static DataSerializableFixedID readConfigurationResponse(DataInput in)
-      throws IOException, ClassNotFoundException {
-    DataSerializableFixedID serializable = new ConfigurationResponse();
-    serializable.fromData(in);
-    return serializable;
-  }
-
-  public static Constructor<?>[] getDsfidmap() {
+  public Constructor<?>[] getDsfidmap() {
     return dsfidMap;
   }
 
-  public static Int2ObjectOpenHashMap getDsfidmap2() {
+  public Int2ObjectOpenHashMap getDsfidmap2() {
     return dsfidMap2;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java b/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
index 8f021bf..09c117d 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/HeapDataOutputStream.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import java.io.DataOutput;
 import java.io.IOException;
@@ -29,6 +29,9 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.internal.ByteBufferWriter;
+import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java
similarity index 62%
copy from geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
copy to geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java
index 5de7511..4bfef78 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/BufferDataOutputStream.java
@@ -12,18 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
-import java.nio.ByteBuffer;
-
-/**
- * Used by a couple of our classes to say they can have a ByteBuffer written to them.
- */
-public interface ByteBufferWriter {
-  /**
-   * Writes bb.position()..bb.limit() bytes to this writer. Note that some implementations of this
-   * interface will keep a reference to bb so callers should expect to give up ownership of bb and
-   * should not modify it after calling this method.
-   */
-  void write(ByteBuffer bb);
+public class BufferDataOutputStream {
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/ByteBufferWriter.java
similarity index 100%
copy from geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
copy to geode-core/src/main/java/org/apache/geode/internal/serialization/ByteBufferWriter.java
diff --git a/geode-core/src/main/java/org/apache/geode/internal/DSCODE.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java
similarity index 99%
rename from geode-core/src/main/java/org/apache/geode/internal/DSCODE.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java
index e4762d3..3a534f5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/DSCODE.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSCODE.java
@@ -15,6 +15,7 @@
 package org.apache.geode.internal;
 
 import org.apache.geode.DataSerializer;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * An enumeration that contains a bunch of pre-defined values for use in the implementation of
diff --git a/geode-core/src/main/java/org/apache/geode/internal/DSFIDNotFoundException.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDNotFoundException.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/internal/DSFIDNotFoundException.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDNotFoundException.java
diff --git a/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java
new file mode 100644
index 0000000..afae242
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DSFIDSerializer.java
@@ -0,0 +1,363 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.internal.serialization;
+
+import static org.apache.geode.internal.serialization.DataSerializableFixedID.NO_FIXED_ID;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.EOFException;
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.net.SocketException;
+
+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
+import org.apache.logging.log4j.Logger;
+
+import org.apache.geode.CancelException;
+import org.apache.geode.DataSerializable;
+import org.apache.geode.GemFireRethrowable;
+import org.apache.geode.InternalGemFireError;
+import org.apache.geode.SerializationException;
+import org.apache.geode.SystemFailure;
+import org.apache.geode.ToDataException;
+import org.apache.geode.annotations.Immutable;
+import org.apache.geode.cache.CacheClosedException;
+import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.logging.log4j.LogMarker;
+
+public class BasicDSFIDSerializer {
+  private static final Logger logger = LogService.getLogger();
+
+  @Immutable
+  private final Constructor<?>[] dsfidMap = new Constructor<?>[256];
+
+  @Immutable("This maybe should be wrapped in an unmodifiableMap?")
+  private final Int2ObjectOpenHashMap dsfidMap2 = new Int2ObjectOpenHashMap(800);
+
+
+  // Writes just the header of a DataSerializableFixedID to out.
+  public void writeDSFIDHeader(int dsfid, DataOutput out) throws IOException {
+    if (dsfid == DataSerializableFixedID.ILLEGAL) {
+      throw new IllegalStateException(
+          "attempted to serialize ILLEGAL dsfid");
+    }
+    if (dsfid <= Byte.MAX_VALUE && dsfid >= Byte.MIN_VALUE) {
+      out.writeByte(DSCODE.DS_FIXED_ID_BYTE.toByte());
+      out.writeByte(dsfid);
+    } else if (dsfid <= Short.MAX_VALUE && dsfid >= Short.MIN_VALUE) {
+      out.writeByte(DSCODE.DS_FIXED_ID_SHORT.toByte());
+      out.writeShort(dsfid);
+    } else {
+      out.writeByte(DSCODE.DS_FIXED_ID_INT.toByte());
+      out.writeInt(dsfid);
+    }
+  }
+
+
+  public void writeDSFID(DataSerializableFixedID o, DataOutput out) throws IOException {
+    int dsfid = o.getDSFID();
+    writeDSFID(o, dsfid, out);
+  }
+
+  public void writeDSFID(DataSerializableFixedID o, int dsfid, DataOutput out)
+      throws IOException {
+    if (dsfid == NO_FIXED_ID) {
+      throw new IllegalArgumentException("NO_FIXED_ID is not supported by BasicDSFIDSerializer - use InternalDataSerializer instead: " + o.getClass().getName());
+    }
+    writeDSFIDHeader(dsfid, out);
+    try {
+      invokeToData(o, out);
+    } catch (IOException | CancelException | ToDataException | GemFireRethrowable io) {
+      // Note: this is not a user code toData but one from our
+      // internal code since only GemFire product code implements DSFID
+
+      // Serializing a PDX can result in a cache closed exception. Just rethrow
+
+      throw io;
+    } catch (VirtualMachineError err) {
+      SystemFailure.initiateFailure(err);
+      // If this ever returns, rethrow the error. We're poisoned
+      // now, so don't let this thread continue.
+      throw err;
+    } catch (Throwable t) {
+      // Whenever you catch Error or Throwable, you must also
+      // catch VirtualMachineError (see above). However, there is
+      // _still_ a possibility that you are dealing with a cascading
+      // error condition, so you also need to check to see if the JVM
+      // is still usable:
+      SystemFailure.checkFailure();
+      throw new ToDataException("toData failed on dsfid=" + dsfid + " msg:" + t.getMessage(), t);
+    }
+  }
+
+  /**
+   * For backward compatibility this method should be used to invoke toData on a DSFID.
+   * It will invoke the correct toData method based on the class's version
+   * information. This method does not write information about the class of the object. When
+   * deserializing use the method invokeFromData to read the contents of the object.
+   *
+   * @param ds the object to write
+   * @param out the output stream.
+   */
+  public void invokeToData(Object ds, DataOutput out) throws IOException {
+    boolean isDSFID = ds instanceof DataSerializableFixedID;
+    if (!isDSFID) {
+      throw new IllegalArgumentException("Expected a DataSerializableFixedID but found " + ds.getClass().getName());
+    }
+    try {
+      boolean invoked = false;
+      Version v = InternalDataSerializer.getVersionForDataStreamOrNull(out);
+
+      if (Version.CURRENT != v && v != null) {
+        // get versions where DataOutput was upgraded
+        Version[] versions = null;
+        if (ds instanceof SerializationVersions) {
+          SerializationVersions sv = (SerializationVersions) ds;
+          versions = sv.getSerializationVersions();
+        }
+        // check if the version of the peer or diskstore is different and
+        // there has been a change in the message
+        if (versions != null) {
+          for (Version version : versions) {
+            // if peer version is less than the greatest upgraded version
+            if (v.compareTo(version) < 0) {
+              ds.getClass().getMethod("toDataPre_" + version.getMethodSuffix(),
+                  new Class[] {DataOutput.class}).invoke(ds, out);
+              invoked = true;
+              break;
+            }
+          }
+        }
+      }
+
+      if (!invoked) {
+        ((DataSerializableFixedID) ds).toData(out);
+      }
+    } catch (IOException io) {
+      // DSFID serialization expects an IOException but otherwise
+      // we want to catch it and transform into a ToDataException
+      // since it might be in user code and we want to report it
+      // as a problem with the plugin code
+      throw io;
+    } catch (CancelException | ToDataException | GemFireRethrowable ex) {
+      // Serializing a PDX can result in a cache closed exception. Just rethrow
+      throw ex;
+    } catch (VirtualMachineError err) {
+      SystemFailure.initiateFailure(err);
+      // If this ever returns, rethrow the error. We're poisoned
+      // now, so don't let this thread continue.
+      throw err;
+    } catch (Throwable t) {
+      // Whenever you catch Error or Throwable, you must also
+      // catch VirtualMachineError (see above). However, there is
+      // _still_ a possibility that you are dealing with a cascading
+      // error condition, so you also need to check to see if the JVM
+      // is still usable:
+      SystemFailure.checkFailure();
+      throw new ToDataException(
+          "toData failed on DataSerializableFixedID " + null == ds ? "null" : ds.getClass().toString(), t);
+    }
+  }
+
+  /**
+   * Get the {@link Version} of the peer or disk store that created this {@link DataOutput}. Returns
+   * null if the version is same as this member's.
+   */
+  public Version getVersionForDataStreamOrNull(DataOutput out) {
+    // check if this is a versioned data output
+    if (out instanceof VersionedDataStream) {
+      return ((VersionedDataStream) out).getVersion();
+    } else {
+      // assume latest version
+      return null;
+    }
+  }
+
+
+  public Object readDSFID(final DataInput in, DSCODE dscode)
+      throws IOException, ClassNotFoundException {
+    if (logger.isTraceEnabled(LogMarker.SERIALIZER_VERBOSE)) {
+      logger.trace(LogMarker.SERIALIZER_VERBOSE, "readDSFID: header={}", dscode);
+    }
+    switch (dscode) {
+      case DS_FIXED_ID_BYTE:
+        return create(in.readByte(), in);
+      case DS_FIXED_ID_SHORT:
+        return create(in.readShort(), in);
+      case DS_NO_FIXED_ID:
+        throw new IllegalStateException("DS_NO_FIXED_ID is not supported in readDSFID - use InternalDataSerializer instead");
+      case DS_FIXED_ID_INT:
+        return create(in.readInt(), in);
+      default:
+        throw new IllegalStateException("unexpected byte: " + dscode + " while reading dsfid");
+    }
+  }
+
+  public Object readDSFID(final DataInput in) throws IOException, ClassNotFoundException {
+    checkIn(in);
+    return readDSFID(in, DscodeHelper.toDSCODE(in.readByte()));
+  }
+
+  public int readDSFIDHeader(final DataInput in, DSCODE dscode) throws IOException {
+    switch (dscode) {
+      case DS_FIXED_ID_BYTE:
+        return in.readByte();
+      case DS_FIXED_ID_SHORT:
+        return in.readShort();
+      case DS_FIXED_ID_INT:
+        return in.readInt();
+      default:
+        throw new IllegalStateException("unexpected byte: " + dscode + " while reading dsfid");
+    }
+  }
+
+  public int readDSFIDHeader(final DataInput in) throws IOException {
+    checkIn(in);
+    return readDSFIDHeader(in, DscodeHelper.toDSCODE(in.readByte()));
+  }
+
+  /**
+   * Checks to make sure a {@code DataInput} is not {@code null}.
+   *
+   * @throws NullPointerException If {@code in} is {@code null}
+   */
+  public static void checkIn(DataInput in) {
+    if (in == null) {
+      throw new NullPointerException("Null DataInput");
+    }
+  }
+
+  /**
+   * For backward compatibility this method should be used to invoke fromData on a DSFID or
+   * DataSerializable. It will invoke the correct fromData method based on the class's version
+   * information. This method does not read information about the class of the object. When
+   * serializing use the method invokeToData to write the contents of the object.
+   *
+   * @param ds the object to write
+   * @param in the input stream.
+   */
+  public void invokeFromData(Object ds, DataInput in)
+      throws IOException, ClassNotFoundException {
+    try {
+      boolean invoked = false;
+      Version v = InternalDataSerializer.getVersionForDataStreamOrNull(in);
+      if (Version.CURRENT != v && v != null) {
+        // get versions where DataOutput was upgraded
+        Version[] versions = null;
+        SerializationVersions vds = (SerializationVersions) ds;
+        versions = vds.getSerializationVersions();
+        // check if the version of the peer or diskstore is different and
+        // there has been a change in the message
+        if (versions != null) {
+          for (Version version : versions) {
+            // if peer version is less than the greatest upgraded version
+            if (v.compareTo(version) < 0) {
+              ds.getClass().getMethod("fromDataPre" + '_' + version.getMethodSuffix(),
+                  new Class[] {DataInput.class}).invoke(ds, in);
+              invoked = true;
+              break;
+            }
+          }
+        }
+      }
+      if (!invoked) {
+        ((DataSerializableFixedID) ds).fromData(in);
+
+        if (logger.isTraceEnabled(LogMarker.SERIALIZER_VERBOSE)) {
+          logger.trace(LogMarker.SERIALIZER_VERBOSE, "Read DataSerializableFixedId {}",
+              ds);
+        }
+      }
+    } catch (EOFException | ClassNotFoundException | CacheClosedException | SocketException ex) {
+      // client went away - ignore
+      throw ex;
+    } catch (Exception ex) {
+      throw new SerializationException(
+          String.format("Could not create an instance of %s .",
+              ds.getClass().getName()),
+          ex);
+    }
+  }
+
+
+
+  /** Register the constructor for a fixed ID class. */
+  public void registerDSFID(int dsfid, Class dsfidClass) {
+    try {
+      Constructor<?> cons = dsfidClass.getConstructor((Class[]) null);
+      cons.setAccessible(true);
+      if (!cons.isAccessible()) {
+        throw new InternalGemFireError(
+            "default constructor not accessible " + "for DSFID=" + dsfid + ": " + dsfidClass);
+      }
+      if (dsfid >= Byte.MIN_VALUE && dsfid <= Byte.MAX_VALUE) {
+        dsfidMap[dsfid + Byte.MAX_VALUE + 1] = cons;
+      } else {
+        dsfidMap2.put(dsfid, cons);
+      }
+    } catch (NoSuchMethodException nsme) {
+      throw new InternalGemFireError(nsme);
+    }
+  }
+
+  /**
+   * Creates a DataSerializableFixedID or StreamableFixedID instance by deserializing it from the
+   * data input.
+   */
+  public Object create(int dsfid, DataInput in) throws IOException, ClassNotFoundException {
+    final Constructor<?> cons;
+    if (dsfid >= Byte.MIN_VALUE && dsfid <= Byte.MAX_VALUE) {
+      cons = dsfidMap[dsfid + Byte.MAX_VALUE + 1];
+    } else {
+      cons = (Constructor<?>) dsfidMap2.get(dsfid);
+    }
+    if (cons != null) {
+      try {
+        Object ds = cons.newInstance((Object[]) null);
+        invokeFromData(ds, in);
+        return ds;
+      } catch (InstantiationException ie) {
+        throw new IOException(ie.getMessage(), ie);
+      } catch (IllegalAccessException iae) {
+        throw new IOException(iae.getMessage(), iae);
+      } catch (InvocationTargetException ite) {
+        Throwable targetEx = ite.getTargetException();
+        if (targetEx instanceof IOException) {
+          throw (IOException) targetEx;
+        } else if (targetEx instanceof ClassNotFoundException) {
+          throw (ClassNotFoundException) targetEx;
+        } else {
+          throw new IOException(ite.getMessage(), targetEx);
+        }
+      }
+    }
+    throw new DSFIDNotFoundException("Unknown DataSerializableFixedID: " + dsfid, dsfid);
+  }
+
+
+  public Constructor<?>[] getDsfidmap() {
+    return dsfidMap;
+  }
+
+  public Int2ObjectOpenHashMap getDsfidmap2() {
+    return dsfidMap2;
+  }
+
+
+
+}
diff --git a/geode-core/src/main/java/org/apache/geode/internal/DataSerializableFixedID.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/internal/DataSerializableFixedID.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/DataSerializableFixedID.java
diff --git a/geode-core/src/main/java/org/apache/geode/internal/util/DscodeHelper.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java
similarity index 96%
rename from geode-core/src/main/java/org/apache/geode/internal/util/DscodeHelper.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java
index 4b48683..dd592e8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/util/DscodeHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/DscodeHelper.java
@@ -18,7 +18,7 @@ import java.io.IOException;
 import java.util.Arrays;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.DSCODE;
+import org.apache.geode.internal.serialization.DSCODE;
 
 public class DscodeHelper {
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/ObjectSerializer.java
similarity index 62%
rename from geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/ObjectSerializer.java
index 5de7511..a2ed2b6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/ByteBufferWriter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/ObjectSerializer.java
@@ -12,18 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
-import java.nio.ByteBuffer;
-
-/**
- * Used by a couple of our classes to say they can have a ByteBuffer written to them.
- */
-public interface ByteBufferWriter {
-  /**
-   * Writes bb.position()..bb.limit() bytes to this writer. Note that some implementations of this
-   * interface will keep a reference to bb so callers should expect to give up ownership of bb and
-   * should not modify it after calling this method.
-   */
-  void write(ByteBuffer bb);
+public interface ObjectSerializer {
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/SerializationVersions.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java
similarity index 96%
rename from geode-core/src/main/java/org/apache/geode/internal/SerializationVersions.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java
index 8bcdd9b..4a3f898 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/SerializationVersions.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/SerializationVersions.java
@@ -14,6 +14,8 @@
  */
 package org.apache.geode.internal;
 
+import org.apache.geode.internal.serialization.Version;
+
 /**
  * This interface is extended by DataSerializableFixedID and VersionedDataSerializable in order to
  * furnish version information to the serialization infrastructure for backward compatibility
diff --git a/geode-core/src/main/java/org/apache/geode/internal/Version.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/Version.java
similarity index 100%
rename from geode-core/src/main/java/org/apache/geode/internal/Version.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/Version.java
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataInputStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java
similarity index 96%
rename from geode-core/src/main/java/org/apache/geode/internal/VersionedDataInputStream.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java
index 70b0bc5..a9a5c9d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataInputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataInputStream.java
@@ -18,6 +18,8 @@ package org.apache.geode.internal;
 import java.io.DataInputStream;
 import java.io.InputStream;
 
+import org.apache.geode.internal.serialization.Version;
+
 
 /**
  * An extension to {@link DataInputStream} that implements {@link VersionedDataStream} for a stream
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataOutputStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java
similarity index 96%
rename from geode-core/src/main/java/org/apache/geode/internal/VersionedDataOutputStream.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java
index 91809df..1c1f185 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataOutputStream.java
@@ -18,6 +18,8 @@ package org.apache.geode.internal;
 import java.io.DataOutputStream;
 import java.io.OutputStream;
 
+import org.apache.geode.internal.serialization.Version;
+
 /**
  * An extension of {@link DataOutputStream} that implements {@link VersionedDataStream}.
  *
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataStream.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java
similarity index 93%
rename from geode-core/src/main/java/org/apache/geode/internal/VersionedDataStream.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java
index 12536c6..d68bc84 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedDataStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedDataStream.java
@@ -19,6 +19,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 
 import org.apache.geode.DataSerializable;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.Version;
 
 /**
  * An extension to {@link DataOutput}, {@link DataInput} used internally in product to indicate that
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectInput.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectInput.java
index 3ab5255..46f7156 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectInput.java
@@ -18,6 +18,8 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectInput;
 
+import org.apache.geode.internal.serialization.Version;
+
 /**
  * An extension to {@link ObjectInput} that implements {@link VersionedDataStream} wrapping given
  * {@link ObjectInput} for a stream coming from a different product version.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectOutput.java
similarity index 98%
rename from geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
rename to geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectOutput.java
index afc9136..a1f8ce3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/serialization/VersionedObjectOutput.java
@@ -18,6 +18,8 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectOutput;
 
+import org.apache.geode.internal.serialization.Version;
+
 /**
  * An extension to {@link ObjectOutput} that implements {@link VersionedDataStream} wrapping given
  * {@link ObjectOutput} for a stream directed to a different product version.
diff --git a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
index b2c327b..74ce53a 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
@@ -12,7 +12,7 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -28,6 +28,8 @@ import org.junit.experimental.categories.Category;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.UnitTestValueHolder;
+import org.apache.geode.internal.serialization.HeapDataOutputStream;
+import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.internal.TypeRegistry;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java
index 8ef60b1..86f5604 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamTest.java
@@ -12,9 +12,9 @@
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
-package org.apache.geode.internal;
+package org.apache.geode.internal.serialization;
 
-import static org.apache.geode.internal.HeapDataOutputStream.SMALLEST_CHUNK_SIZE;
+import static org.apache.geode.internal.serialization.HeapDataOutputStream.SMALLEST_CHUNK_SIZE;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
diff --git a/geode-core/src/test/java/org/apache/geode/internal/DSCODETest.java b/geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java
similarity index 97%
rename from geode-core/src/test/java/org/apache/geode/internal/DSCODETest.java
rename to geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java
index 7240825..7100470 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/DSCODETest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/serialization/DSCODETest.java
@@ -26,6 +26,7 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.util.DscodeHelper;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/VersionJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
similarity index 98%
rename from geode-core/src/test/java/org/apache/geode/internal/VersionJUnitTest.java
rename to geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
index 529f1bf..83494bd 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/VersionJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/serialization/VersionJUnitTest.java
@@ -21,6 +21,7 @@ import org.junit.Test;
 
 import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.internal.cache.tier.sockets.CommandInitializer;
+import org.apache.geode.internal.serialization.Version;
 
 public class VersionJUnitTest {
   @Test