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/26 23:04:52 UTC

[geode] 02/05: redoing lost work

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 4c4e727647a04317756cdfe11f48e5721bba2fe7
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 74da825..75f6a59 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.
@@ -620,4 +621,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 9bf2d76..c5a77b1 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
@@ -177,7 +177,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;
@@ -232,6 +231,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 731c952..719d4ff 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
@@ -33,8 +33,6 @@ import org.apache.geode.InternalGemFireError;
 import org.apache.geode.annotations.VisibleForTesting;
 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;
@@ -49,6 +47,8 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.concurrent.ConcurrentHashSet;
 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()