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:54 UTC

[geode] 04/05: implemented new SerializationContext for DataSerializableFixedID toData/fromData

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 715536739025a7f1f4969dbf5e77bca1217e781b
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Aug 26 15:55:10 2019 -0700

    implemented new SerializationContext for DataSerializableFixedID toData/fromData
    
    new dependency test for the serialization package ensures it doesn't
    refer to any other packages.
    
    membership classes no longer depend on Geode serialization classes
    (DataSerializer, InternalDataSerializer, Version, HeapDataOutputStream,
    etc).
    
    rolling upgrade tests pass
---
 .../geode/ClusterCommunicationsDUnitTest.java      |  11 +-
 .../geode/distributed/internal/DateMessage.java    |  11 +-
 ...ackwardCompatibilitySerializationDUnitTest.java |  51 ++-
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |  10 +-
 .../internal/SystemMemberCacheEventProcessor.java  |  11 +-
 .../admin/jmx/internal/StatAlertNotification.java  |  10 +-
 .../client/internal/CacheServerLoadMessage.java    |  11 +-
 .../internal/locator/ClientConnectionRequest.java  |  11 +-
 .../internal/locator/ClientConnectionResponse.java |   7 +-
 .../internal/locator/ClientReplacementRequest.java |  11 +-
 .../internal/locator/GetAllServersRequest.java     |  11 +-
 .../internal/locator/GetAllServersResponse.java    |   7 +-
 .../internal/locator/LocatorListResponse.java      |   7 +-
 .../internal/locator/LocatorStatusResponse.java    |   7 +-
 .../internal/locator/QueueConnectionRequest.java   |  11 +-
 .../internal/locator/QueueConnectionResponse.java  |   7 +-
 .../internal/locator/ServerLocationRequest.java    |   7 +-
 .../apache/geode/cache/query/internal/CqEntry.java |   7 +-
 .../internal/CumulativeNonDistinctResults.java     |   7 +-
 .../cache/query/internal/LinkedResultSet.java      |   7 +-
 .../cache/query/internal/LinkedStructSet.java      |   7 +-
 .../cache/query/internal/NWayMergeResults.java     |   7 +-
 .../geode/cache/query/internal/NullToken.java      |   7 +-
 .../cache/query/internal/PRQueryTraceInfo.java     |   7 +-
 .../geode/cache/query/internal/ResultsBag.java     |   7 +-
 .../query/internal/ResultsCollectionWrapper.java   |   7 +-
 .../geode/cache/query/internal/ResultsSet.java     |   7 +-
 .../cache/query/internal/SortedResultSet.java      |   7 +-
 .../cache/query/internal/SortedStructSet.java      |   7 +-
 .../geode/cache/query/internal/StructBag.java      |  11 +-
 .../geode/cache/query/internal/StructImpl.java     |   7 +-
 .../geode/cache/query/internal/StructSet.java      |   7 +-
 .../geode/cache/query/internal/Undefined.java      |   7 +-
 .../query/internal/index/IndexCreationData.java    |   7 +-
 .../query/internal/types/CollectionTypeImpl.java   |  11 +-
 .../cache/query/internal/types/MapTypeImpl.java    |  11 +-
 .../cache/query/internal/types/ObjectTypeImpl.java |  15 +-
 .../cache/query/internal/types/StructTypeImpl.java |  11 +-
 .../distributed/internal/DistributionAdvisor.java  |   7 +-
 .../distributed/internal/DistributionMessage.java  |   7 +-
 .../internal/HighPriorityAckedMessage.java         |  11 +-
 .../geode/distributed/internal/ReplyMessage.java   |  11 +-
 .../distributed/internal/SerialAckedMessage.java   |  11 +-
 .../distributed/internal/ShutdownMessage.java      |  11 +-
 .../geode/distributed/internal/StartupMessage.java |  13 +-
 .../internal/StartupResponseMessage.java           |  11 +-
 .../StartupResponseWithVersionMessage.java         |  11 +-
 .../internal/WaitForViewInstallation.java          |  11 +-
 .../internal/locks/DLockQueryProcessor.java        |  21 +-
 .../locks/DLockRecoverGrantorProcessor.java        |  21 +-
 .../internal/locks/DLockReleaseProcessor.java      |  21 +-
 .../internal/locks/DLockRemoteToken.java           |   7 +-
 .../internal/locks/DLockRequestProcessor.java      |  21 +-
 .../distributed/internal/locks/DLockService.java   |   7 +-
 .../internal/locks/DeposeGrantorProcessor.java     |  11 +-
 .../internal/locks/ElderInitProcessor.java         |  21 +-
 .../internal/locks/GrantorRequestProcessor.java    |  21 +-
 .../locks/NonGrantorDestroyedProcessor.java        |  21 +-
 .../membership/InternalDistributedMember.java      |  23 +-
 .../membership/adapter/GMSMemberFactory.java       |   4 +-
 .../membership/adapter/LocalViewMessage.java       |   7 +-
 .../internal/membership/gms/GMSMember.java         |  83 +++--
 .../internal/membership/gms/GMSMembershipView.java |  60 ++--
 .../internal/membership/gms/GMSUtil.java           |  70 ++--
 .../internal/membership/gms/Services.java          |  11 +-
 .../membership/gms/fd/GMSHealthMonitor.java        |   6 +-
 .../gms/locator/FindCoordinatorRequest.java        |  29 +-
 .../gms/locator/FindCoordinatorResponse.java       |  38 ++-
 .../membership/gms/locator/GMSLocator.java         |  40 ++-
 .../membership/gms/locator/GetViewRequest.java     |  11 +-
 .../membership/gms/locator/GetViewResponse.java    |  16 +-
 .../membership/gms/membership/GMSJoinLeave.java    |   5 +-
 .../gms/messages/FinalCheckPassedMessage.java      |  15 +-
 .../membership/gms/messages/HeartbeatMessage.java  |  11 +-
 .../gms/messages/HeartbeatRequestMessage.java      |  15 +-
 .../gms/messages/InstallViewMessage.java           |  20 +-
 .../gms/messages/JoinRequestMessage.java           |  24 +-
 .../gms/messages/JoinResponseMessage.java          |  33 +-
 .../gms/messages/LeaveRequestMessage.java          |  21 +-
 .../gms/messages/NetworkPartitionMessage.java      |  11 +-
 .../gms/messages/RemoveMemberMessage.java          |  21 +-
 .../gms/messages/SuspectMembersMessage.java        |  19 +-
 .../membership/gms/messages/ViewAckMessage.java    |  16 +-
 .../membership/gms/messenger/GMSPingPonger.java    |   8 +-
 .../membership/gms/messenger/JGroupsMessenger.java |  68 ++--
 .../internal/streaming/StreamingOperation.java     |  21 +-
 .../org/apache/geode/internal/DSFIDFactory.java    |  13 +-
 .../apache/geode/internal/ExternalizableDSFID.java |  11 +-
 .../geode/internal/HeapDataOutputStream.java       |   3 +-
 .../geode/internal/InternalDataSerializer.java     | 136 ++++----
 .../geode/internal/InternalInstantiator.java       |  25 +-
 .../java/org/apache/geode/internal/Version.java    |   5 +
 .../internal/admin/ClientMembershipMessage.java    |  11 +-
 .../admin/remote/AddHealthListenerRequest.java     |  11 +-
 .../admin/remote/AddHealthListenerResponse.java    |  11 +-
 .../admin/remote/AddStatListenerRequest.java       |  11 +-
 .../admin/remote/AddStatListenerResponse.java      |  11 +-
 .../remote/AdminConsoleDisconnectMessage.java      |  11 +-
 .../internal/admin/remote/AdminConsoleMessage.java |  11 +-
 .../admin/remote/AdminFailureResponse.java         |  11 +-
 .../geode/internal/admin/remote/AdminRequest.java  |  11 +-
 .../geode/internal/admin/remote/AdminResponse.java |  11 +-
 .../admin/remote/AlertLevelChangeMessage.java      |  11 +-
 .../admin/remote/AlertListenerMessage.java         |  11 +-
 .../admin/remote/AlertsNotificationMessage.java    |  11 +-
 .../admin/remote/AppCacheSnapshotMessage.java      |  11 +-
 .../internal/admin/remote/BridgeServerRequest.java |  11 +-
 .../admin/remote/BridgeServerResponse.java         |  11 +-
 .../internal/admin/remote/CacheConfigRequest.java  |  11 +-
 .../internal/admin/remote/CacheConfigResponse.java |  11 +-
 .../internal/admin/remote/CacheInfoRequest.java    |  11 +-
 .../internal/admin/remote/CacheInfoResponse.java   |  11 +-
 .../admin/remote/CancelStatListenerRequest.java    |  11 +-
 .../admin/remote/CancelStatListenerResponse.java   |  11 +-
 .../internal/admin/remote/CancellationMessage.java |  11 +-
 .../admin/remote/ChangeRefreshIntervalMessage.java |  11 +-
 .../internal/admin/remote/ClientHealthStats.java   |  23 +-
 .../internal/admin/remote/CompactRequest.java      |  11 +-
 .../internal/admin/remote/CompactResponse.java     |  11 +-
 .../internal/admin/remote/DestroyEntryMessage.java |  11 +-
 .../admin/remote/DestroyRegionMessage.java         |  11 +-
 .../admin/remote/DurableClientInfoRequest.java     |  11 +-
 .../admin/remote/DurableClientInfoResponse.java    |  11 +-
 .../admin/remote/FetchDistLockInfoRequest.java     |  11 +-
 .../admin/remote/FetchDistLockInfoResponse.java    |  11 +-
 .../admin/remote/FetchHealthDiagnosisRequest.java  |  11 +-
 .../admin/remote/FetchHealthDiagnosisResponse.java |  11 +-
 .../internal/admin/remote/FetchHostRequest.java    |  11 +-
 .../internal/admin/remote/FetchHostResponse.java   |  11 +-
 .../remote/FetchResourceAttributesRequest.java     |  11 +-
 .../remote/FetchResourceAttributesResponse.java    |  11 +-
 .../internal/admin/remote/FetchStatsRequest.java   |  11 +-
 .../internal/admin/remote/FetchStatsResponse.java  |  11 +-
 .../internal/admin/remote/FetchSysCfgRequest.java  |  11 +-
 .../internal/admin/remote/FetchSysCfgResponse.java |  11 +-
 .../admin/remote/FlushAppCacheSnapshotMessage.java |  11 +-
 .../admin/remote/HealthListenerMessage.java        |  11 +-
 .../internal/admin/remote/LicenseInfoRequest.java  |  11 +-
 .../internal/admin/remote/LicenseInfoResponse.java |  11 +-
 .../admin/remote/MissingPersistentIDsRequest.java  |   6 +-
 .../admin/remote/MissingPersistentIDsResponse.java |  11 +-
 .../admin/remote/ObjectDetailsRequest.java         |  11 +-
 .../admin/remote/ObjectDetailsResponse.java        |  11 +-
 .../internal/admin/remote/ObjectNamesRequest.java  |  11 +-
 .../internal/admin/remote/ObjectNamesResponse.java |  11 +-
 .../remote/PrepareRevokePersistentIDRequest.java   |  11 +-
 .../admin/remote/RefreshMemberSnapshotRequest.java |  11 +-
 .../remote/RefreshMemberSnapshotResponse.java      |  11 +-
 .../internal/admin/remote/RegionAdminMessage.java  |  11 +-
 .../internal/admin/remote/RegionAdminRequest.java  |  11 +-
 .../admin/remote/RegionAttributesRequest.java      |  11 +-
 .../admin/remote/RegionAttributesResponse.java     |  11 +-
 .../geode/internal/admin/remote/RegionRequest.java |  11 +-
 .../internal/admin/remote/RegionResponse.java      |  11 +-
 .../internal/admin/remote/RegionSizeRequest.java   |  11 +-
 .../internal/admin/remote/RegionSizeResponse.java  |  11 +-
 .../admin/remote/RegionStatisticsRequest.java      |  11 +-
 .../admin/remote/RegionStatisticsResponse.java     |  11 +-
 .../admin/remote/RegionSubRegionSizeRequest.java   |  11 +-
 .../admin/remote/RegionSubRegionsSizeResponse.java |  11 +-
 .../admin/remote/RemoveHealthListenerRequest.java  |  11 +-
 .../admin/remote/RemoveHealthListenerResponse.java |  11 +-
 .../admin/remote/ResetHealthStatusRequest.java     |  11 +-
 .../admin/remote/ResetHealthStatusResponse.java    |  11 +-
 .../admin/remote/RevokePersistentIDRequest.java    |  11 +-
 .../internal/admin/remote/RootRegionRequest.java   |  11 +-
 .../internal/admin/remote/RootRegionResponse.java  |  11 +-
 .../remote/ShutdownAllGatewayHubsRequest.java      |  11 +-
 .../internal/admin/remote/ShutdownAllRequest.java  |  11 +-
 .../internal/admin/remote/ShutdownAllResponse.java |  11 +-
 .../admin/remote/SnapshotResultMessage.java        |  11 +-
 .../remote/StatAlertsManagerAssignMessage.java     |  11 +-
 .../internal/admin/remote/StatListenerMessage.java |  11 +-
 .../internal/admin/remote/StoreSysCfgRequest.java  |  11 +-
 .../internal/admin/remote/StoreSysCfgResponse.java |  11 +-
 .../internal/admin/remote/SubRegionRequest.java    |  11 +-
 .../internal/admin/remote/SubRegionResponse.java   |  11 +-
 .../internal/admin/remote/TailLogRequest.java      |  11 +-
 .../internal/admin/remote/TailLogResponse.java     |  11 +-
 .../admin/remote/UpdateAlertDefinitionMessage.java |  11 +-
 .../internal/admin/remote/VersionInfoRequest.java  |  11 +-
 .../internal/admin/remote/VersionInfoResponse.java |  11 +-
 .../statalerts/GaugeThresholdDecoratorImpl.java    |   7 +-
 .../statalerts/NumberThresholdDecoratorImpl.java   |   7 +-
 .../geode/internal/cache/AbstractRegion.java       |   7 +-
 .../internal/cache/AbstractUpdateOperation.java    |  11 +-
 .../cache/AddCacheServerProfileMessage.java        |  11 +-
 .../apache/geode/internal/cache/BucketAdvisor.java |  21 +-
 .../internal/cache/CacheDistributionAdvisor.java   |  11 +-
 .../geode/internal/cache/CacheServerAdvisor.java   |  11 +-
 .../internal/cache/ClientRegionEventImpl.java      |  11 +-
 .../geode/internal/cache/CloseCacheMessage.java    |  11 +-
 .../geode/internal/cache/ControllerAdvisor.java    |  11 +-
 .../internal/cache/CreateRegionProcessor.java      |  21 +-
 .../geode/internal/cache/DestroyOperation.java     |  21 +-
 .../cache/DestroyPartitionedRegionMessage.java     |  21 +-
 .../internal/cache/DestroyRegionOperation.java     |  21 +-
 .../geode/internal/cache/DistTXCommitMessage.java  |  23 +-
 .../internal/cache/DistTXPrecommitMessage.java     |  29 +-
 .../internal/cache/DistTXRollbackMessage.java      |  23 +-
 .../internal/cache/DistributedCacheOperation.java  |   7 +-
 .../internal/cache/DistributedClearOperation.java  |  21 +-
 .../internal/cache/DistributedPutAllOperation.java |  27 +-
 .../DistributedRegionFunctionStreamingMessage.java |  11 +-
 .../cache/DistributedRemoveAllOperation.java       |  20 +-
 .../cache/DistributedTombstoneOperation.java       |  11 +-
 .../geode/internal/cache/EntryEventImpl.java       |   7 +-
 .../org/apache/geode/internal/cache/EventID.java   |  13 +-
 .../geode/internal/cache/EventStateHelper.java     |  15 +-
 ...xpireDisconnectedClientTransactionsMessage.java |   7 +-
 .../apache/geode/internal/cache/FilterProfile.java |  17 +-
 .../geode/internal/cache/FilterRoutingInfo.java    |   3 +-
 .../internal/cache/FindDurableQueueProcessor.java  |  21 +-
 .../geode/internal/cache/FindRemoteTXMessage.java  |  21 +-
 .../internal/cache/FindVersionTagOperation.java    |  21 +-
 .../cache/FunctionStreamingReplyMessage.java       |  11 +-
 .../apache/geode/internal/cache/GridAdvisor.java   |  11 +-
 .../org/apache/geode/internal/cache/HARegion.java  |  11 +-
 .../internal/cache/InitialImageFlowControl.java    |  11 +-
 .../internal/cache/InitialImageOperation.java      | 101 +++---
 .../geode/internal/cache/InvalidateOperation.java  |  21 +-
 .../cache/InvalidatePartitionedRegionMessage.java  |  27 +-
 .../internal/cache/InvalidateRegionOperation.java  |  11 +-
 .../internal/cache/JtaAfterCompletionMessage.java  |  11 +-
 .../cache/LatestLastAccessTimeMessage.java         |  11 +-
 .../cache/MemberFunctionStreamingMessage.java      |  13 +-
 .../java/org/apache/geode/internal/cache/Node.java |   9 +-
 .../geode/internal/cache/PRQueryProcessor.java     |   7 +-
 .../internal/cache/PartitionRegionConfig.java      |   7 +-
 .../cache/PreferBytesCachedDeserializable.java     |   9 +-
 .../geode/internal/cache/RegionEventImpl.java      |   7 +-
 .../internal/cache/ReleaseClearLockMessage.java    |  11 +-
 .../cache/RemoveCacheServerProfileMessage.java     |  11 +-
 .../apache/geode/internal/cache/RoleEventImpl.java |  14 +-
 .../cache/SearchLoadAndWriteProcessor.java         |  81 +++--
 .../geode/internal/cache/ServerPingMessage.java    |  11 +-
 .../geode/internal/cache/StateFlushOperation.java  |  31 +-
 .../cache/StoreAllCachedDeserializable.java        |   9 +-
 .../geode/internal/cache/TXCommitMessage.java      |  35 +-
 .../apache/geode/internal/cache/TXEntryState.java  |   7 +-
 .../java/org/apache/geode/internal/cache/TXId.java |   7 +-
 .../org/apache/geode/internal/cache/TXMessage.java |  11 +-
 .../internal/cache/TXRemoteCommitMessage.java      |  13 +-
 .../org/apache/geode/internal/cache/Token.java     |  37 +-
 .../internal/cache/UpdateAttributesProcessor.java  |  31 +-
 .../cache/UpdateEntryVersionOperation.java         |  11 +-
 .../geode/internal/cache/UpdateOperation.java      |  21 +-
 .../internal/cache/VMCachedDeserializable.java     |   9 +-
 .../internal/cache/backup/BackupResponse.java      |  11 +-
 .../cache/backup/PrepareBackupRequest.java         |  11 +-
 .../CompressedCachedDeserializable.java            |  13 +-
 .../internal/cache/control/ResourceAdvisor.java    |  21 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |   7 +-
 .../internal/cache/ha/QueueRemovalMessage.java     |  11 +-
 .../geode/internal/cache/locks/TXLockBatch.java    |   7 +-
 .../geode/internal/cache/locks/TXLockIdImpl.java   |  17 +-
 .../locks/TXLockUpdateParticipantsMessage.java     |  21 +-
 .../cache/locks/TXOriginatorRecoveryProcessor.java |  21 +-
 .../AllBucketProfilesUpdateMessage.java            |  11 +-
 .../partitioned/BecomePrimaryBucketMessage.java    |  25 +-
 .../cache/partitioned/BucketBackupMessage.java     |  11 +-
 .../cache/partitioned/BucketCountLoadProbe.java    |   7 +-
 .../partitioned/BucketProfileUpdateMessage.java    |  11 +-
 .../cache/partitioned/BucketSizeMessage.java       |  21 +-
 .../cache/partitioned/ContainsKeyValueMessage.java |  21 +-
 .../cache/partitioned/CreateBucketMessage.java     |  25 +-
 .../partitioned/DeposePrimaryBucketMessage.java    |  25 +-
 .../internal/cache/partitioned/DestroyMessage.java |  21 +-
 .../DestroyRegionOnDataStoreMessage.java           |  11 +-
 .../internal/cache/partitioned/DumpB2NRegion.java  |  21 +-
 .../cache/partitioned/DumpBucketsMessage.java      |  11 +-
 .../partitioned/EndBucketCreationMessage.java      |  13 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |  21 +-
 .../cache/partitioned/FetchEntriesMessage.java     |  21 +-
 .../cache/partitioned/FetchEntryMessage.java       |  25 +-
 .../cache/partitioned/FetchKeysMessage.java        |  21 +-
 .../partitioned/FetchPartitionDetailsMessage.java  |  25 +-
 .../internal/cache/partitioned/FlushMessage.java   |  11 +-
 .../internal/cache/partitioned/GetMessage.java     |  21 +-
 .../cache/partitioned/IdentityRequestMessage.java  |  21 +-
 .../cache/partitioned/IdentityUpdateMessage.java   |  11 +-
 .../cache/partitioned/IndexCreationMsg.java        |  21 +-
 .../cache/partitioned/InterestEventMessage.java    |  21 +-
 .../cache/partitioned/InvalidateMessage.java       |  11 +-
 .../internal/cache/partitioned/LoadProbe.java      |   3 +-
 .../partitioned/ManageBackupBucketMessage.java     |  25 +-
 .../cache/partitioned/ManageBucketMessage.java     |  25 +-
 .../cache/partitioned/MoveBucketMessage.java       |  25 +-
 .../cache/partitioned/PRSanityCheckMessage.java    |  11 +-
 .../cache/partitioned/PRTombstoneMessage.java      |  11 +-
 .../partitioned/PRUpdateEntryVersionMessage.java   |  11 +-
 .../cache/partitioned/PartitionMessage.java        |  16 +-
 .../PartitionedRegionFunctionStreamingMessage.java |  13 +-
 .../cache/partitioned/PrimaryRequestMessage.java   |  21 +-
 .../cache/partitioned/PutAllPRMessage.java         |  21 +-
 .../internal/cache/partitioned/PutMessage.java     |  21 +-
 .../internal/cache/partitioned/QueryMessage.java   |  11 +-
 .../internal/cache/partitioned/RegionAdvisor.java  |  11 +-
 .../cache/partitioned/RemoveAllPRMessage.java      |  21 +-
 .../cache/partitioned/RemoveBucketMessage.java     |  25 +-
 .../cache/partitioned/RemoveIndexesMessage.java    |  21 +-
 .../internal/cache/partitioned/SizeMessage.java    |  21 +-
 .../cache/partitioned/SizedBasedLoadProbe.java     |   7 +-
 .../internal/cache/persistence/DiskStoreID.java    |   7 +-
 .../cache/persistence/MembershipFlushRequest.java  |  11 +-
 .../cache/persistence/MembershipViewRequest.java   |  21 +-
 .../persistence/PersistentStateQueryMessage.java   |  21 +-
 .../PrepareNewPersistentMemberMessage.java         |  11 +-
 .../persistence/RemovePersistentMemberMessage.java |  11 +-
 .../internal/cache/snapshot/FlowController.java    |  21 +-
 .../internal/cache/snapshot/SnapshotPacket.java    |  13 +-
 .../tier/sockets/ClientDataSerializerMessage.java  |  11 +-
 .../tier/sockets/ClientDenylistProcessor.java      |  11 +-
 .../tier/sockets/ClientInstantiatorMessage.java    |  11 +-
 .../tier/sockets/ClientInterestMessageImpl.java    |  11 +-
 .../tier/sockets/ClientMarkerMessageImpl.java      |   7 +-
 .../cache/tier/sockets/ClientPingMessageImpl.java  |   7 +-
 .../tier/sockets/ClientProxyMembershipID.java      |   7 +-
 .../cache/tier/sockets/ClientTombstoneMessage.java |   7 +-
 .../tier/sockets/ClientUpdateMessageImpl.java      |   7 +-
 .../cache/tier/sockets/HAEventWrapper.java         |   7 +-
 .../tier/sockets/InterestResultPolicyImpl.java     |   7 +-
 .../cache/tier/sockets/ObjectPartList.java         |   7 +-
 .../cache/tier/sockets/ObjectPartList651.java      |   7 +-
 .../sockets/RemoveClientFromDenylistMessage.java   |  11 +-
 .../tier/sockets/SerializedObjectPartList.java     |   7 +-
 .../sockets/ServerInterestRegistrationMessage.java |  11 +-
 .../cache/tier/sockets/VersionedObjectList.java    |  35 +-
 .../geode/internal/cache/tx/DistTxEntryEvent.java  |   7 +-
 .../internal/cache/tx/RemoteClearMessage.java      |  21 +-
 .../cache/tx/RemoteContainsKeyValueMessage.java    |  21 +-
 .../internal/cache/tx/RemoteDestroyMessage.java    |  21 +-
 .../internal/cache/tx/RemoteFetchEntryMessage.java |  21 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |  21 +-
 .../cache/tx/RemoteFetchVersionMessage.java        |  21 +-
 .../geode/internal/cache/tx/RemoteGetMessage.java  |  21 +-
 .../internal/cache/tx/RemoteInvalidateMessage.java |  11 +-
 .../internal/cache/tx/RemoteOperationMessage.java  |  16 +-
 .../internal/cache/tx/RemotePutAllMessage.java     |  21 +-
 .../geode/internal/cache/tx/RemotePutMessage.java  |  21 +-
 .../internal/cache/tx/RemoteRemoveAllMessage.java  |  21 +-
 .../geode/internal/cache/tx/RemoteSizeMessage.java |  25 +-
 .../cache/versions/RegionVersionVector.java        |   7 +-
 .../geode/internal/cache/versions/VersionTag.java  |   7 +-
 .../internal/cache/wan/GatewaySenderAdvisor.java   |  21 +-
 .../wan/GatewaySenderEventCallbackArgument.java    |   7 +-
 .../internal/cache/wan/GatewaySenderEventImpl.java |  21 +-
 ...aySenderQueueEntrySynchronizationOperation.java |  17 +-
 .../wan/parallel/ParallelQueueRemovalMessage.java  |  11 +-
 .../cache/wan/serial/BatchDestroyOperation.java    |  11 +-
 .../AbstractSerializationContext.java              |  49 +++
 .../serialization/BufferDataOutputStream.java      |  12 +-
 .../serialization/DSFIDNotFoundException.java      |   4 +-
 .../internal/serialization/DSFIDSerializer.java    | 160 +++++----
 .../serialization/DataSerializableFixedID.java     |  16 +-
 ...alizer.java => DeserializationContextImpl.java} |  22 +-
 ...ctSerializer.java => SerializationContext.java} |  14 +-
 ...rializer.java => SerializationContextImpl.java} |  23 +-
 .../serialization/SerializationVersion.java        |  37 +-
 ...ObjectSerializer.java => SerializerPlugin.java} |  17 +-
 .../serialization/StaticSerialization.java         | 377 +++++++++++++++++++++
 .../ThreadLocalByteArrayCache.java                 |   2 +-
 .../apache/geode/internal/tcp/MsgOutputStream.java |   4 +-
 .../org/apache/geode/internal/tcp/MsgStreamer.java |   3 +-
 .../management/internal/FederationComponent.java   |  10 +-
 .../management/internal/JmxManagerAdvisor.java     |  21 +-
 .../internal/JmxManagerLocatorRequest.java         |   7 +-
 .../internal/JmxManagerLocatorResponse.java        |   7 +-
 .../management/internal/ManagerStartupMessage.java |  11 +-
 .../internal/cli/functions/CliFunctionResult.java  |  23 +-
 .../messages/ConfigurationResponse.java            |   7 +-
 .../internal/messages/CompactRequest.java          |  11 +-
 .../internal/messages/CompactResponse.java         |  11 +-
 .../main/java/org/apache/geode/pdx/FieldType.java  |  24 +-
 .../geode/pdx/internal/CheckTypeRegistryState.java |  11 +-
 .../java/org/apache/geode/pdx/internal/EnumId.java |   7 +-
 .../org/apache/geode/pdx/internal/EnumInfo.java    |   7 +-
 .../locator/LocatorStatusResponseJUnitTest.java    |   4 +-
 .../ResultsBagLimitBehaviourJUnitTest.java         |   4 +-
 .../MembershipDependenciesJUnitTest.java           |  30 +-
 .../membership/gms/GMSMemberJUnitTest.java         |  12 +-
 .../internal/ThreadLocalByteArrayCacheTest.java    |   2 +
 .../cache/ha/EventIdOptimizationJUnitTest.java     |   4 +-
 .../partitioned/PutPutReplyMessageJUnitTest.java   |   4 +-
 .../partitioned/RemotePutMessageJUnitTest.java     |   2 +-
 .../internal/cache/tx/RemotePutAllMessageTest.java |   4 +-
 .../cache/tx/RemotePutReplyMessageJUnitTest.java   |   4 +-
 .../cache/tx/RemoteRemoveAllMessageTest.java       |   4 +-
 .../geode/internal/offheap/DataTypeJUnitTest.java  |   7 +-
 .../SerializationDependenciesJUnitTest.java        |  45 +++
 .../org/apache/geode/pdx/internal/EnumIdTest.java  |   4 +-
 .../apache/geode/pdx/internal/EnumInfoTest.java    |   4 +-
 .../lucene/internal/DestroyLuceneIndexMessage.java |  11 +-
 .../lucene/internal/LuceneResultStructImpl.java    |   7 +-
 .../cache/lucene/internal/StringQueryProvider.java |   7 +-
 .../lucene/internal/distributed/EntryScore.java    |   7 +-
 .../distributed/LuceneFunctionContext.java         |   7 +-
 .../lucene/internal/distributed/TopEntries.java    |   7 +-
 .../internal/distributed/TopEntriesCollector.java  |   7 +-
 .../distributed/TopEntriesCollectorManager.java    |   7 +-
 .../WaitUntilFlushedFunctionContext.java           |   7 +-
 .../cache/lucene/internal/filesystem/ChunkKey.java |   7 +-
 .../cache/lucene/internal/filesystem/File.java     |   7 +-
 .../cache/lucene/internal/results/PageResults.java |   7 +-
 .../internal/locator/wan/LocatorJoinMessage.java   |  11 +-
 .../locator/wan/RemoteLocatorJoinRequest.java      |   7 +-
 .../locator/wan/RemoteLocatorJoinResponse.java     |   7 +-
 .../locator/wan/RemoteLocatorPingRequest.java      |   7 +-
 .../locator/wan/RemoteLocatorPingResponse.java     |   7 +-
 .../internal/locator/wan/RemoteLocatorRequest.java |   7 +-
 .../locator/wan/RemoteLocatorResponse.java         |   7 +-
 411 files changed, 4185 insertions(+), 2241 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 a3afd62..461fcf4 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/ClusterCommunicationsDUnitTest.java
@@ -79,6 +79,7 @@ import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLe
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.DirectReplyMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.test.dunit.DistributedTestUtils;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.VM;
@@ -395,14 +396,16 @@ public class ClusterCommunicationsDUnitTest implements Serializable {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(processorId);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       processorId = in.readInt();
     }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java
index 7296baa..4d23163 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/DateMessage.java
@@ -24,6 +24,7 @@ import java.util.Date;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This message simply contains a date
@@ -78,15 +79,17 @@ public class DateMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.date, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
-    super.fromData(in);
+    super.fromData(in, context);
     this.date = (Date) DataSerializer.readObject(in);
   }
 
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 b6a774c..f89822c 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
@@ -32,9 +32,11 @@ import java.util.ArrayList;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
+import org.apache.geode.DataSerializable;
 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.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersion;
 import org.apache.geode.internal.serialization.SerializationVersions;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
@@ -199,14 +201,29 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     }
     if (versions != null && versions.length > 0) {
       for (int i = 0; i < versions.length; i++) {
-        try {
-          ds.getClass().getMethod("toDataPre_" + versions[i].getMethodSuffix(),
-              new Class[] {DataOutput.class});
-
-          ds.getClass().getMethod("fromDataPre_" + versions[i].getMethodSuffix(),
-              new Class[] {DataInput.class});
-        } catch (NoSuchMethodException e) {
-          fail("toDataPreXXX or fromDataPreXXX for previous versions not found " + e.getMessage());
+        if (ds instanceof DataSerializableFixedID) {
+          try {
+            ds.getClass().getMethod("toDataPre_" + versions[i].getMethodSuffix(),
+                new Class[] {DataOutput.class, SerializationContext.class});
+
+            ds.getClass().getMethod("fromDataPre_" + versions[i].getMethodSuffix(),
+                new Class[] {DataInput.class, SerializationContext.class});
+          } catch (NoSuchMethodException e) {
+            fail(
+                "toDataPreXXX or fromDataPreXXX for previous versions not found " + e.getMessage());
+          }
+        }
+        if (ds instanceof DataSerializable) {
+          try {
+            ds.getClass().getMethod("toDataPre_" + versions[i].getMethodSuffix(),
+                new Class[] {DataOutput.class});
+
+            ds.getClass().getMethod("fromDataPre_" + versions[i].getMethodSuffix(),
+                new Class[] {DataInput.class});
+          } catch (NoSuchMethodException e) {
+            fail(
+                "toDataPreXXX or fromDataPreXXX for previous versions not found " + e.getMessage());
+          }
         }
       }
     } else {
@@ -246,28 +263,34 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       toDataCalled = true;
     }
 
-    public void toDataPre_GFE_6_6_0_0(DataOutput out) throws IOException {
+    public void toDataPre_GFE_6_6_0_0(DataOutput out, SerializationContext context)
+        throws IOException {
       toDataPre66Called = true;
     }
 
-    public void toDataPre_GFE_7_0_0_0(DataOutput out) throws IOException {
+    public void toDataPre_GFE_7_0_0_0(DataOutput out, SerializationContext context)
+        throws IOException {
       toDataPre70called = true;
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException {
       fromDataCalled = true;
     }
 
-    public void fromDataPre_GFE_6_6_0_0(DataInput out) throws IOException {
+    public void fromDataPre_GFE_6_6_0_0(DataInput out, SerializationContext context)
+        throws IOException {
       fromDataPre66Called = true;
     }
 
-    public void fromDataPre_GFE_7_0_0_0(DataInput out) throws IOException {
+    public void fromDataPre_GFE_7_0_0_0(DataInput out, SerializationContext context)
+        throws IOException {
       fromDataPre70Called = true;
     }
 
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 87e56bb..5454209 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
@@ -254,10 +254,10 @@ public class JGroupsMessengerJUnitTest {
     HeapDataOutputStream out = new HeapDataOutputStream(500, Version.CURRENT);
     GMSMember mbr = createAddress(8888);
     mbr.setMemberWeight((byte) 40);
-    mbr.toData(out);
+    mbr.toData(out, null);
     DataInputStream in = new DataInputStream(new ByteArrayInputStream(out.toByteArray()));
     mbr = new GMSMember();
-    mbr.fromData(in);
+    mbr.fromData(in, null);
     assertEquals(40, mbr.getMemberWeight());
   }
 
@@ -276,7 +276,7 @@ public class JGroupsMessengerJUnitTest {
       // for code coverage we need to test with both a SerializationException and
       // an IOException. The former is wrapped in a GemfireIOException while the
       // latter is not
-      doThrow(new SerializationException("")).when(msg).toData(any(DataOutput.class));
+      doThrow(new SerializationException("")).when(msg).toData(any(DataOutput.class), null);
       try {
         messenger.send(msg);
         fail("expected a failure");
@@ -286,7 +286,7 @@ public class JGroupsMessengerJUnitTest {
       if (enableMcast) {
         verify(msg, atLeastOnce()).registerProcessor();
       }
-      doThrow(new IOException()).when(msg).toData(any(DataOutput.class));
+      doThrow(new IOException()).when(msg).toData(any(DataOutput.class), null);
       try {
         messenger.send(msg);
         fail("expected a failure");
@@ -421,7 +421,7 @@ public class JGroupsMessengerJUnitTest {
       if (enableMcast) {
         verify(msg, atLeastOnce()).registerProcessor();
       }
-      verify(msg).toData(isA(DataOutput.class));
+      verify(msg).toData(isA(DataOutput.class), null);
       assertTrue("expected 1 message but found " + interceptor.collectedMessages,
           interceptor.collectedMessages.size() == 1);
       assertTrue(interceptor.collectedMessages.get(0).isFlagSet(Message.Flag.NO_RELIABILITY));
diff --git a/geode-core/src/main/java/org/apache/geode/admin/internal/SystemMemberCacheEventProcessor.java b/geode-core/src/main/java/org/apache/geode/admin/internal/SystemMemberCacheEventProcessor.java
index c7b8171..66d629e 100644
--- a/geode-core/src/main/java/org/apache/geode/admin/internal/SystemMemberCacheEventProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/admin/internal/SystemMemberCacheEventProcessor.java
@@ -34,6 +34,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This class processes the message to be delivered to admin node. [This needs to be redesigned and
@@ -118,15 +119,17 @@ public class SystemMemberCacheEventProcessor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.regionPath = DataSerializer.readString(in);
       this.op = Operation.fromOrdinal(in.readByte());
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.regionPath, out);
       out.writeByte(this.op.ordinal);
     }
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 a8f333d..31d0903 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
@@ -19,12 +19,12 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.io.Serializable;
 
-import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Notification to be sent to clients (e.g GFMon2.0 ). It incorporates
@@ -35,7 +35,7 @@ import org.apache.geode.internal.serialization.DataSerializableFixedID;
  * @since GemFire 5.7
  */
 public class StatAlertNotification extends StatAlert
-    implements Serializable, DataSerializable, DataSerializableFixedID {
+    implements Serializable, DataSerializableFixedID {
   private static final long serialVersionUID = -1634729103430107871L;
   private String memberId;
 
@@ -125,7 +125,8 @@ public class StatAlertNotification extends StatAlert
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // Do not modify StatAlert to allow 57 cacheservers to function with 57+ agent
     // However, update of a new StatAlertDefn on 57 server from 57+ agent not covered with this
     DataSerializer.writePrimitiveInt(this.getDefinitionId(), out);
@@ -136,7 +137,8 @@ public class StatAlertNotification extends StatAlert
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     // Do not modify StatAlert to allow 57 cacheservers to function with 57+ agent
     // However, update of a new StatAlertDefn on 57 server from 57+ agent not covered with this
     this.setDefinitionId(DataSerializer.readPrimitiveInt(in));
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/CacheServerLoadMessage.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/CacheServerLoadMessage.java
index d271e40..25bcbda 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/CacheServerLoadMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/CacheServerLoadMessage.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.SerialDistributionMessage;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.ServerLocator;
 import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message from a server to a locator to update the locator with new load information from the
@@ -78,8 +79,9 @@ public class CacheServerLoadMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     load = new ServerLoad();
     InternalDataSerializer.invokeFromData(load, in);
     location = new ServerLocation();
@@ -88,8 +90,9 @@ public class CacheServerLoadMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     InternalDataSerializer.invokeToData(load, out);
     InternalDataSerializer.invokeToData(location, out);
     DataSerializer.writeArrayList(this.clientIds, out);
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 9be89d9..b3e3b2a 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
@@ -22,6 +22,7 @@ import java.util.Set;
 
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A request from a client to the locator asking for a server to connect to for client to server
@@ -41,14 +42,16 @@ public class ClientConnectionRequest extends ServerLocationRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.excludedServers = SerializationHelper.readServerLocationSet(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     SerializationHelper.writeServerLocationSet(this.excludedServers, out);
   }
 
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 d9c36bb..5f305d7 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
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A response from a locator to a client Indicating which server to connect to for client to server
@@ -46,7 +47,8 @@ public class ClientConnectionResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.serverFound = DataSerializer.readPrimitiveBoolean(in);
     if (this.serverFound) {
       server = new ServerLocation();
@@ -55,7 +57,8 @@ public class ClientConnectionResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     boolean serverFound = server != null;
     DataSerializer.writePrimitiveBoolean(serverFound, out);
     if (serverFound) {
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 c032ba9..7c3a8ef 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
@@ -22,6 +22,7 @@ import java.util.Set;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A request from a client to the locator asking for a server to connect to for client to server
@@ -42,15 +43,17 @@ public class ClientReplacementRequest extends ClientConnectionRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.currentServer = new ServerLocation();
     InternalDataSerializer.invokeFromData(this.currentServer, in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     InternalDataSerializer.invokeToData(this.currentServer, out);
   }
 
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 ce28361..a718040 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
@@ -19,6 +19,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class GetAllServersRequest extends ServerLocationRequest {
 
@@ -31,13 +32,15 @@ public class GetAllServersRequest extends ServerLocationRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
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 2433195..4b5299f 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
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class GetAllServersResponse extends ServerLocationResponse {
 
@@ -41,7 +42,8 @@ public class GetAllServersResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.servers = SerializationHelper.readServerLocationList(in);
     if (this.servers != null && !this.servers.isEmpty()) {
       this.serversFound = true;
@@ -49,7 +51,8 @@ public class GetAllServersResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     SerializationHelper.writeServerLocationList(servers, out);
   }
 
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 7764ee1..51f6c8d 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
@@ -21,6 +21,7 @@ import java.util.List;
 
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class LocatorListResponse extends ServerLocationResponse {
   /** ArrayList of ServerLocations for controllers */
@@ -40,7 +41,8 @@ public class LocatorListResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.controllers = SerializationHelper.readServerLocationList(in);
     this.isBalanced = in.readBoolean();
     if (this.controllers != null && !this.controllers.isEmpty()) {
@@ -49,7 +51,8 @@ public class LocatorListResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     SerializationHelper.writeServerLocationList(this.controllers, out);
     out.writeBoolean(isBalanced);
   }
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 9d09864..17b6e69 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
@@ -30,6 +30,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.util.ArgumentRedactor;
 
 /**
@@ -138,7 +139,8 @@ public class LocatorStatusResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void fromData(final DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(final DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     readPid(in);
     readUptime(in);
     readWorkingDirectory(in);
@@ -204,7 +206,8 @@ public class LocatorStatusResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void toData(final DataOutput out) throws IOException {
+  public void toData(final DataOutput out,
+      SerializationContext context) throws IOException {
     writePid(out);
     writeUptime(out);
     writeWorkingDirectory(out);
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 4caf01c..2e60b10 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
@@ -22,6 +22,7 @@ import java.util.Set;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A request from a client to locator asking for a server to host a queue. If the durable client Id
@@ -48,8 +49,9 @@ public class QueueConnectionRequest extends ServerLocationRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
 
     proxyId = ClientProxyMembershipID.readCanonicalized(in);
     redundantCopies = DataSerializer.readPrimitiveInt(in);
@@ -58,8 +60,9 @@ public class QueueConnectionRequest extends ServerLocationRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(proxyId, out);
     DataSerializer.writePrimitiveInt(redundantCopies, out);
     SerializationHelper.writeServerLocationSet(this.excludedServers, out);
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 022453a..b130cda 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
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A response from locator to client indicating the servers to use to host the clients queue. The
@@ -45,7 +46,8 @@ public class QueueConnectionResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     durableQueueFound = DataSerializer.readPrimitiveBoolean(in);
     servers = SerializationHelper.readServerLocationList(in);
     if (this.servers != null && !this.servers.isEmpty()) {
@@ -54,7 +56,8 @@ public class QueueConnectionResponse extends ServerLocationResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writePrimitiveBoolean(durableQueueFound, out);
     SerializationHelper.writeServerLocationList(servers, out);
   }
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 0b8a63c..81e28ef 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
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public abstract class ServerLocationRequest implements DataSerializableFixedID {
 
@@ -37,12 +38,14 @@ public abstract class ServerLocationRequest implements DataSerializableFixedID {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     serverGroup = DataSerializer.readString(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeString(serverGroup, out);
   }
 
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 53b11e1..3cc57f3 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
@@ -22,6 +22,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -90,7 +91,8 @@ public class CqEntry implements DataSerializableFixedID {
   /* DataSerializableFixedID methods ---------------------------------------- */
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.key = DataSerializer.readObject(in);
     this.value = DataSerializer.readObject(in);
   }
@@ -102,7 +104,8 @@ public class CqEntry implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeObject(this.key, out);
     DataSerializer.writeObject(this.value, out);
   }
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 5382e71..700e7e1 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
@@ -38,6 +38,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This is used as a wrapper over all the results of PR which are of non distinct type
@@ -277,7 +278,8 @@ public class CumulativeNonDistinctResults<E> implements SelectResults<E>, DataSe
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     ObjectType elementType = (ObjectType) DataSerializer.readObject(in);
     this.collectionType = new CollectionTypeImpl(CumulativeNonDistinctResults.class, elementType);
     boolean isStruct = elementType.isStructType();
@@ -306,7 +308,8 @@ public class CumulativeNonDistinctResults<E> implements SelectResults<E>, DataSe
   // instead
   // of struct
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     boolean isStruct = this.collectionType.getElementType().isStructType();
     DataSerializer.writeObject(this.collectionType.getElementType(), out);
 
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 f01a6e3..8ecca59 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
@@ -34,6 +34,7 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class LinkedResultSet extends java.util.LinkedHashSet
     implements Ordered, SelectResults, DataSerializableFixedID {
@@ -111,7 +112,8 @@ public class LinkedResultSet extends java.util.LinkedHashSet
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     int size = in.readInt();
     this.elementType = (ObjectType) DataSerializer.readObject(in);
     for (int j = size; j > 0; j--) {
@@ -120,7 +122,8 @@ public class LinkedResultSet extends java.util.LinkedHashSet
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // how do we serialize the comparator?
     out.writeInt(this.size());
     DataSerializer.writeObject(this.elementType, out);
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 3df19d4..57d00a7 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
@@ -33,6 +33,7 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class LinkedStructSet extends LinkedHashSet<Struct>
     implements SelectResults<Struct>, Ordered, DataSerializableFixedID {
@@ -169,7 +170,8 @@ public class LinkedStructSet extends LinkedHashSet<Struct>
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.modifiable = in.readBoolean();
     int size = in.readInt();
     this.structType = (StructTypeImpl) DataSerializer.readObject(in);
@@ -185,7 +187,8 @@ public class LinkedStructSet extends LinkedHashSet<Struct>
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // how do we serialize the comparator?
     out.writeBoolean(this.modifiable);
     out.writeInt(this.size());
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 e388351..330f003 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
@@ -39,6 +39,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * The n - way merge results returns a sorted results on the cumulative sorted results for
@@ -436,7 +437,8 @@ public class NWayMergeResults<E> implements SelectResults<E>, Ordered, DataSeria
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     ObjectType elementType = (ObjectType) DataSerializer.readObject(in);
     this.collectionType = new CollectionTypeImpl(NWayMergeResults.class, elementType);
     boolean isStruct = elementType.isStructType();
@@ -465,7 +467,8 @@ public class NWayMergeResults<E> implements SelectResults<E>, Ordered, DataSeria
   // instead
   // of struct
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     boolean isStruct = this.collectionType.getElementType().isStructType();
     DataSerializer.writeObject(this.collectionType.getElementType(), out);
     DataSerializer.writePrimitiveBoolean(this.isDistinct, out);
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 75106c8..0a6efcb 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
@@ -22,6 +22,7 @@ import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.query.internal.index.IndexManager;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A Token representing null.
@@ -64,12 +65,14 @@ public class NullToken implements DataSerializableFixedID, Comparable {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
 
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {}
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {}
 
   @Override
   public Version[] getSerializationVersions() {
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 cc798d1..912a794 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
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 public class PRQueryTraceInfo implements DataSerializableFixedID {
@@ -38,14 +39,16 @@ public class PRQueryTraceInfo implements DataSerializableFixedID {
   public PRQueryTraceInfo() {}
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeFloat(timeInMillis);
     out.writeInt(numResults);
     DataSerializer.writeString(indexesUsed, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     timeInMillis = in.readFloat();
     numResults = in.readInt();
     indexesUsed = DataSerializer.readString(in);
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 8f7f8c0..e9bcd29 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
@@ -27,6 +27,7 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class ResultsBag extends Bag implements DataSerializableFixedID {
 
@@ -135,7 +136,8 @@ public class ResultsBag extends Bag implements DataSerializableFixedID {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.elementType = (ObjectType) DataSerializer.readObject(in);
     this.size = in.readInt();
     assert this.size >= 0 : this.size;
@@ -159,7 +161,8 @@ public class ResultsBag extends Bag implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeObject(this.elementType, out);
     out.writeInt(this.size());
     this.writeNumNulls(out);
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 6c65ebf..fc5a3b0 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
@@ -40,6 +40,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of SelectResults that wraps an existing java.util.Collection and optionally adds a
@@ -540,7 +541,8 @@ public class ResultsCollectionWrapper implements SelectResults, DataSerializable
    * @throws IOException A problem occurs while writing to <code>out</code>
    */
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // special case when wrapping a ResultsBag.SetView
     boolean isBagSetView = this.base instanceof Bag.SetView;
     out.writeBoolean(isBagSetView);
@@ -560,7 +562,8 @@ public class ResultsCollectionWrapper implements SelectResults, DataSerializable
    * @throws ClassNotFoundException A class could not be loaded while reading from <code>in</code>
    */
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     boolean isBagSetView = in.readBoolean();
     if (isBagSetView) {
       this.base = (Set) InternalDataSerializer.readSet(in);
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 adabcc0..c27b79c 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
@@ -36,6 +36,7 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 // @todo probably should assert element type when elements added
 /**
@@ -140,7 +141,8 @@ public class ResultsSet extends HashSet implements SelectResults, DataSerializab
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     int size = in.readInt();
     ObjectTypeImpl clt = new ObjectTypeImpl();
     InternalDataSerializer.invokeFromData(clt, in);
@@ -151,7 +153,8 @@ public class ResultsSet extends HashSet implements SelectResults, DataSerializab
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeInt(size());
     ObjectTypeImpl ctImpl = (ObjectTypeImpl) this.getCollectionType().getElementType();
     Assert.assertTrue(ctImpl != null, "ctImpl can not be null");
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 d46e284..0210298 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
@@ -34,6 +34,7 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of SelectResults that extends TreeSet This is the sorted version of ResultSet used
@@ -125,7 +126,8 @@ public class SortedResultSet extends TreeSet
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     int size = in.readInt();
     this.elementType = (ObjectType) DataSerializer.readObject(in);
     for (int j = size; j > 0; j--) {
@@ -134,7 +136,8 @@ public class SortedResultSet extends TreeSet
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // how do we serialize the comparator?
     out.writeInt(this.size());
     DataSerializer.writeObject(this.elementType, out);
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 ccb2392..690be08 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
@@ -34,6 +34,7 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A TreeSet constrained to contain Structs of all the same type. To conserve on objects, we store
@@ -368,7 +369,8 @@ public class SortedStructSet extends TreeSet
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.modifiable = in.readBoolean();
     int size = in.readInt();
     this.structType = (StructTypeImpl) DataSerializer.readObject(in);
@@ -379,7 +381,8 @@ public class SortedStructSet extends TreeSet
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // how do we serialize the comparator?
     out.writeBoolean(this.modifiable);
     out.writeInt(this.size());
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructBag.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructBag.java
index 417bbc7..d066981 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructBag.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/StructBag.java
@@ -31,6 +31,7 @@ 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.cache.CachePerfStats;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A Bag constrained to contain Structs of all the same type. To conserve on objects, we store the
@@ -450,14 +451,16 @@ public class StructBag extends ResultsBag implements StructFields {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.modifiable = in.readBoolean();
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeBoolean(this.modifiable);
   }
 
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 618e63f..30a87eb 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
@@ -28,6 +28,7 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.PdxString;
 
@@ -167,7 +168,8 @@ public class StructImpl implements Struct, DataSerializableFixedID, Serializable
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.type = (StructTypeImpl) DataSerializer.readObject(in);
     this.values = DataSerializer.readObjectArray(in);
     if (this.values != null) {
@@ -181,7 +183,8 @@ public class StructImpl implements Struct, DataSerializableFixedID, Serializable
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeObject(this.type, out);
     DataSerializer.writeObjectArray(this.values, out);
   }
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 baa6dc5..2680e4c 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
@@ -38,6 +38,7 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A Set constrained to contain Structs of all the same type. To conserve on objects, we store the
@@ -455,7 +456,8 @@ public class StructSet /* extends ObjectOpenCustomHashSet */ implements Set, Sel
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.contents = new ObjectOpenCustomHashSet(new ObjectArrayHashingStrategy());
     int size = in.readInt();
     this.structType = (StructTypeImpl) DataSerializer.readObject(in);
@@ -465,7 +467,8 @@ public class StructSet /* extends ObjectOpenCustomHashSet */ implements Set, Sel
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeInt(this.size());
     DataSerializer.writeObject(this.structType, out);
     for (Iterator i = this.iterator(); i.hasNext();) {
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 363c691..6d64b25 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
@@ -23,6 +23,7 @@ import java.io.Serializable;
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * An UNDEFINED value is the result of accessing an attribute of a null-valued attribute. If you
@@ -57,13 +58,15 @@ public class Undefined implements DataSerializableFixedID, Comparable, Serializa
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     // Serialized simply as a one-byte class id, as a class well known to
     // DataSerializer
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {}
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {}
 
   @Override
   public int compareTo(Object o) {
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 f180b1d..4d90792 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
@@ -26,6 +26,7 @@ import java.io.IOException;
 import org.apache.geode.cache.query.IndexType;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  *
@@ -113,7 +114,8 @@ public class IndexCreationData implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeUTF(this.name);
     out.writeUTF(this.expression);
     out.writeUTF(this.fromClause);
@@ -137,7 +139,8 @@ public class IndexCreationData implements DataSerializableFixedID {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.name = in.readUTF();
     this.expression = in.readUTF();
     this.fromClause = in.readUTF();
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/CollectionTypeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/CollectionTypeImpl.java
index 9710f05..4f53d13f 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/CollectionTypeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/CollectionTypeImpl.java
@@ -35,6 +35,7 @@ import org.apache.geode.cache.query.internal.SortedStructSet;
 import org.apache.geode.cache.query.internal.StructSet;
 import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of CollectionType
@@ -121,14 +122,16 @@ public class CollectionTypeImpl extends ObjectTypeImpl implements CollectionType
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.elementType = (ObjectType) DataSerializer.readObject(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.elementType, out);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/MapTypeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/MapTypeImpl.java
index 7fff4f2..af2503a 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/MapTypeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/MapTypeImpl.java
@@ -23,6 +23,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.query.types.MapType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -90,14 +91,16 @@ public class MapTypeImpl extends CollectionTypeImpl implements MapType {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.keyType = (ObjectType) DataSerializer.readObject(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.keyType, out);
   }
 }
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 ccabae1..4f44212 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
@@ -24,6 +24,7 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of ObjectType
@@ -98,12 +99,24 @@ public class ObjectTypeImpl implements ObjectType, DataSerializableFixedID {
   }
 
   @Override
+  public void toData(DataOutput out) throws IOException {
+    toData(out, null);
+  }
+
+  @Override
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    fromData(in, null);
+  }
+
+  @Override
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.clazz = DataSerializer.readClass(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeClass(this.clazz, out);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/StructTypeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/StructTypeImpl.java
index c873c8c..62ba177 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/StructTypeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/types/StructTypeImpl.java
@@ -25,6 +25,7 @@ import org.apache.geode.cache.query.Struct;
 import org.apache.geode.cache.query.internal.StructImpl;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of StructType
@@ -156,15 +157,17 @@ public class StructTypeImpl extends ObjectTypeImpl implements StructType {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.fieldNames = DataSerializer.readStringArray(in);
     this.fieldTypes = (ObjectType[]) DataSerializer.readObjectArray(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeStringArray(this.fieldNames, out);
     DataSerializer.writeObjectArray(fieldTypes, out);
   }
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 ad81f30..610af9c 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
@@ -49,6 +49,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.util.ArrayUtils;
 
 /**
@@ -1468,14 +1469,16 @@ public class DistributionAdvisor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       InternalDataSerializer.invokeToData(peerMemberId, out);
       out.writeInt(version);
       out.writeInt(serialNumber);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       peerMemberId = new InternalDistributedMember();
       InternalDataSerializer.invokeFromData(peerMemberId, in);
       version = in.readInt();
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 9ebba6b..bc9e04a 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
@@ -38,6 +38,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.tcp.Connection;
 import org.apache.geode.internal.util.Breadcrumbs;
 
@@ -555,7 +556,8 @@ public abstract class DistributionMessage implements DataSerializableFixedID, Cl
    * (<code>super.toData()</code>).
    */
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // DataSerializer.writeObject(this.recipients, out); // no need to serialize; filled in later
     // ((IpAddress)this.sender).toData(out); // no need to serialize; filled in later
     // out.writeLong(this.timeStamp);
@@ -567,7 +569,8 @@ public abstract class DistributionMessage implements DataSerializableFixedID, Cl
    * (<code>super.fromData()</code>).
    */
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
     // this.recipients = (Set)DataSerializer.readObject(in); // no to deserialize; filled in later
     // this.sender = DataSerializer.readIpAddress(in); // no to deserialize; filled in later
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/HighPriorityAckedMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/HighPriorityAckedMessage.java
index b97ccc0..2a08627 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/HighPriorityAckedMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/HighPriorityAckedMessage.java
@@ -30,6 +30,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.OSProcess;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a given collection of managers and then awaits replies. It is used by
@@ -203,8 +204,9 @@ public class HighPriorityAckedMessage extends HighPriorityDistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(processorId);
     out.writeInt(this.op.ordinal());
     out.writeBoolean(this.useNative);
@@ -212,9 +214,10 @@ public class HighPriorityAckedMessage extends HighPriorityDistributionMessage
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
-    super.fromData(in);
+    super.fromData(in, context);
     processorId = in.readInt();
     this.op = operationType.values()[in.readInt()];
     this.useNative = in.readBoolean();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyMessage.java
index f0ad614..d75c1d4 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ReplyMessage.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that acknowledges that an operation completed successfully, or threw a CacheException.
@@ -266,8 +267,9 @@ public class ReplyMessage extends HighPriorityDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
 
     byte status = 0;
     if (this.ignored) {
@@ -297,8 +299,9 @@ public class ReplyMessage extends HighPriorityDistributionMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     byte status = in.readByte();
     this.ignored = testFlag(status, IGNORED_FLAG);
     this.closed = testFlag(status, CLOSED_FLAG);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/SerialAckedMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/SerialAckedMessage.java
index e3bc872..5142ee0 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/SerialAckedMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/SerialAckedMessage.java
@@ -28,6 +28,7 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a given collection of managers and then awaits replies. It is used by
@@ -133,16 +134,18 @@ public class SerialAckedMessage extends SerialDistributionMessage implements Mes
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(processorId);
     DataSerializer.writeObject(this.id, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
-    super.fromData(in);
+    super.fromData(in, context);
     processorId = in.readInt();
     this.id = (InternalDistributedMember) DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ShutdownMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ShutdownMessage.java
index 8f890aa..4b9e74c 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ShutdownMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ShutdownMessage.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Assert;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to all other distribution manager when a distribution manager shuts down.
@@ -98,16 +99,18 @@ public class ShutdownMessage extends HighPriorityDistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(processorId);
     DataSerializer.writeObject(this.id, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
-    super.fromData(in);
+    super.fromData(in, context);
     processorId = in.readInt();
     this.id = (InternalDistributedMember) DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
index f7bed1b..888ffad 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupMessage.java
@@ -36,6 +36,7 @@ import org.apache.geode.internal.InternalInstantiator.InstantiatorAttributesHold
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to all other distribution manager when a distribution manager starts up.
@@ -320,8 +321,9 @@ public class StartupMessage extends DistributionMessage implements AdminMessageT
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
 
     DataSerializer.writeString(this.version, out);
     out.writeInt(this.replyProcessorId);
@@ -371,7 +373,7 @@ public class StartupMessage extends DistributionMessage implements AdminMessageT
   }
 
   /**
-   * Notes a problem that occurs while invoking {@link #fromData}.
+   * Notes a problem that occurs while invoking {@link DataSerializableFixedID#fromData}.
    */
   private void recordFromDataProblem(String s) {
     if (this.fromDataProblems == null) {
@@ -383,8 +385,9 @@ public class StartupMessage extends DistributionMessage implements AdminMessageT
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
 
     this.version = DataSerializer.readString(in);
     this.replyProcessorId = in.readInt();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
index 757dd97..409a90d 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseMessage.java
@@ -31,6 +31,7 @@ import org.apache.geode.internal.InternalInstantiator.InstantiatorAttributesHold
 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.SerializationContext;
 
 /**
  * A message that is sent to all other distribution manager when a distribution manager starts up.
@@ -206,9 +207,10 @@ public class StartupResponseMessage extends DistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
 
-    super.toData(out);
+    super.toData(out, context);
 
     out.writeInt(processorId);
     DataSerializer.writeString(this.rejectionMessage, out);
@@ -235,9 +237,10 @@ public class StartupResponseMessage extends DistributionMessage
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
-    super.fromData(in);
+    super.fromData(in, context);
 
     this.processorId = in.readInt();
     this.rejectionMessage = DataSerializer.readString(in);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java
index 7b9b777..91fd7b3 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/StartupResponseWithVersionMessage.java
@@ -26,6 +26,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * @since GemFire 6.6.2
@@ -82,8 +83,9 @@ public class StartupResponseWithVersionMessage extends StartupResponseMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.version, out);
     StartupMessageData data = new StartupMessageData();
     data.writeHostedLocators(this.hostedLocators);
@@ -92,8 +94,9 @@ public class StartupResponseWithVersionMessage extends StartupResponseMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.version = DataSerializer.readString(in);
     StartupMessageData data = new StartupMessageData();
     data.readFrom(in);
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 c26e055..2627a38 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
@@ -22,6 +22,7 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.CancelException;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class WaitForViewInstallation extends HighPriorityDistributionMessage
     implements MessageWithReply {
@@ -86,15 +87,17 @@ public class WaitForViewInstallation extends HighPriorityDistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeLong(this.viewId);
     out.writeInt(this.processorId);
   }
 
   @Override
-  public void fromData(DataInput in) throws ClassNotFoundException, IOException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws ClassNotFoundException, IOException {
+    super.fromData(in, context);
     this.viewId = in.readLong();
     this.processorId = in.readInt();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockQueryProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockQueryProcessor.java
index c8fc7cc..b95fd70 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockQueryProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockQueryProcessor.java
@@ -37,6 +37,7 @@ import org.apache.geode.distributed.internal.locks.DLockGrantor.DLockGrantToken;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Queries the grantor for current leasing information of a lock.
@@ -319,8 +320,9 @@ public class DLockQueryProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.serviceName, out);
       DataSerializer.writeObject(this.objectName, out);
       out.writeBoolean(this.lockBatch);
@@ -328,8 +330,9 @@ public class DLockQueryProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.serviceName = DataSerializer.readString(in);
       this.objectName = DataSerializer.readObject(in);
       this.lockBatch = in.readBoolean();
@@ -434,8 +437,9 @@ public class DLockQueryProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.replyCode = in.readInt();
       if (this.replyCode == OK) {
         InternalDistributedMember lessee =
@@ -449,8 +453,9 @@ public class DLockQueryProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.replyCode);
       if (this.replyCode == OK) {
         if (this.lesseeThread == null) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRecoverGrantorProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRecoverGrantorProcessor.java
index a6c5d4d..18707cc 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRecoverGrantorProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRecoverGrantorProcessor.java
@@ -38,6 +38,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Handles messaging to all members of a lock service for the purposes of recoverying from the loss
@@ -276,8 +277,9 @@ public class DLockRecoverGrantorProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.serviceName = DataSerializer.readString(in);
       this.processorId = in.readInt();
       this.grantorSerialNumber = in.readInt();
@@ -286,8 +288,9 @@ public class DLockRecoverGrantorProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.serviceName, out);
       out.writeInt(this.processorId);
       out.writeInt(this.grantorSerialNumber);
@@ -353,15 +356,17 @@ public class DLockRecoverGrantorProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.replyCode = in.readByte();
       this.heldLocks = (DLockRemoteToken[]) DataSerializer.readObjectArray(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeByte(this.replyCode);
       DataSerializer.writeObjectArray(this.heldLocks, out);
     }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockReleaseProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockReleaseProcessor.java
index 5b722aa..9edbfb1 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockReleaseProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockReleaseProcessor.java
@@ -36,6 +36,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Synchronously releases a lock.
@@ -341,8 +342,9 @@ public class DLockReleaseProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.serviceName, out);
       DataSerializer.writeObject(this.objectName, out);
       out.writeBoolean(this.lockBatch);
@@ -351,8 +353,9 @@ public class DLockReleaseProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.serviceName = DataSerializer.readString(in);
       this.objectName = DataSerializer.readObject(in);
       this.lockBatch = in.readBoolean();
@@ -389,15 +392,17 @@ public class DLockReleaseProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.serviceName = DataSerializer.readString(in);
       this.replyCode = in.readInt();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.serviceName, out);
       out.writeInt(this.replyCode);
     }
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 22b8ca7..910cd36 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
@@ -24,6 +24,7 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Represents a held lock in a member for use when initializing a new grantor. All currently held
@@ -195,7 +196,8 @@ public class DLockRemoteToken implements DataSerializableFixedID {
    * Writes the contents of this object to the given output.
    */
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeObject(this.name, out);
     DataSerializer.writeObject(this.lesseeThread.getDistributedMember(), out);
     out.writeInt(this.lesseeThread.getThreadId());
@@ -207,7 +209,8 @@ public class DLockRemoteToken implements DataSerializableFixedID {
    * Unsupported. Use {@link DLockRemoteToken#createFromDataInput(DataInput)} instead.
    */
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     throw new UnsupportedOperationException(
         "Use DLockRemoteToken#createFromDataInput(DataInput) instead.");
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRequestProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRequestProcessor.java
index 9c43f5a..8c6a1cf 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRequestProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DLockRequestProcessor.java
@@ -41,6 +41,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Provides handling of remote and local lock requests. <br>
@@ -921,8 +922,9 @@ public class DLockRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeUTF(this.serviceName);
       DataSerializer.writeObject(this.objectName, out);
       out.writeLong(this.startTime);
@@ -939,8 +941,9 @@ public class DLockRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.serviceName = in.readUTF();
       this.objectName = DataSerializer.readObject(in);
       this.startTime = in.readLong();
@@ -1166,8 +1169,9 @@ public class DLockRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeByte(this.responseCode);
       out.writeUTF(this.serviceName);
       DataSerializer.writeObject(this.objectName, out);
@@ -1178,8 +1182,9 @@ public class DLockRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.responseCode = in.readByte();
       this.serviceName = in.readUTF();
       this.objectName = DataSerializer.readObject(in);
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 54813c3..da4d100 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
@@ -59,6 +59,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.util.StopWatch;
 import org.apache.geode.internal.util.concurrent.FutureResult;
 
@@ -2983,10 +2984,12 @@ public class DLockService extends DistributedLockService {
     }
 
     @Override
-    public void fromData(DataInput in) {}
+    public void fromData(DataInput in,
+        SerializationContext context) {}
 
     @Override
-    public void toData(DataOutput out) {}
+    public void toData(DataOutput out,
+        SerializationContext context) {}
 
     @Override
     public Version[] getSerializationVersions() {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DeposeGrantorProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DeposeGrantorProcessor.java
index d1a3a34..0974e23 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DeposeGrantorProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/DeposeGrantorProcessor.java
@@ -32,6 +32,7 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A processor for telling the old grantor that it is deposed by a new grantor. Processor waits for
@@ -152,8 +153,9 @@ public class DeposeGrantorProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
       this.serviceName = DataSerializer.readString(in);
       this.newGrantor = (InternalDistributedMember) DataSerializer.readObject(in);
@@ -162,8 +164,9 @@ public class DeposeGrantorProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
       DataSerializer.writeString(this.serviceName, out);
       DataSerializer.writeObject(this.newGrantor, out);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/ElderInitProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/ElderInitProcessor.java
index 8c56e2f..b015118 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/ElderInitProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/ElderInitProcessor.java
@@ -39,6 +39,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A processor for initializing the ElderState. This may involve sending a message to every existing
@@ -199,14 +200,16 @@ public class ElderInitProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
     }
 
@@ -258,8 +261,9 @@ public class ElderInitProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.grantors = DataSerializer.readArrayList(in);
       this.grantorVersions = DataSerializer.readArrayList(in);
       this.grantorSerialNumbers = DataSerializer.readArrayList(in);
@@ -267,8 +271,9 @@ public class ElderInitProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeArrayList(this.grantors, out);
       DataSerializer.writeArrayList(this.grantorVersions, out);
       DataSerializer.writeArrayList(this.grantorSerialNumbers, out);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/GrantorRequestProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/GrantorRequestProcessor.java
index 0edf338..0b046a5 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/GrantorRequestProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/GrantorRequestProcessor.java
@@ -38,6 +38,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.util.concurrent.StoppableCondition;
 import org.apache.geode.internal.util.concurrent.StoppableReentrantLock;
 
@@ -536,8 +537,9 @@ public class GrantorRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.grantorVersion = in.readLong();
       this.dlsSerialNumber = in.readInt();
       this.serviceName = DataSerializer.readString(in);
@@ -549,8 +551,9 @@ public class GrantorRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeLong(this.grantorVersion);
       out.writeInt(this.dlsSerialNumber);
       DataSerializer.writeString(this.serviceName, out);
@@ -627,8 +630,9 @@ public class GrantorRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.grantor = (InternalDistributedMember) DataSerializer.readObject(in);
       this.elderVersionId = in.readLong();
       this.grantorSerialNumber = in.readInt();
@@ -636,8 +640,9 @@ public class GrantorRequestProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.grantor, out);
       out.writeLong(this.elderVersionId);
       out.writeInt(this.grantorSerialNumber);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/NonGrantorDestroyedProcessor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/NonGrantorDestroyedProcessor.java
index 68d21d2..9be4f27 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/NonGrantorDestroyedProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/locks/NonGrantorDestroyedProcessor.java
@@ -35,6 +35,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A processor for telling the grantor that a lock service participant has shutdown. The grantor
@@ -195,15 +196,17 @@ public class NonGrantorDestroyedProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
       this.serviceName = DataSerializer.readString(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
       DataSerializer.writeString(this.serviceName, out);
     }
@@ -264,14 +267,16 @@ public class NonGrantorDestroyedProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.replyCode = in.readByte();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeByte(this.replyCode);
     }
 
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 df93ba7..f8d6a95 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
@@ -50,6 +50,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersion;
 
 /**
@@ -860,15 +861,17 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    toDataPre_GFE_9_0_0_0(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    toDataPre_GFE_9_0_0_0(out, context);
     if (netMbr.getVersionOrdinal() >= Version.GFE_90.ordinal()) {
       getNetMember().writeAdditionalData(out);
     }
   }
 
 
-  public void toDataPre_GFE_9_0_0_0(DataOutput out) throws IOException {
+  public void toDataPre_GFE_9_0_0_0(DataOutput out, SerializationContext context)
+      throws IOException {
     // Assert.assertTrue(vmKind > 0);
     // NOTE: If you change the serialized format of this class
     // then bump Connection.HANDSHAKE_VERSION since an
@@ -913,7 +916,8 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
     SerializationVersion.writeOrdinal(out, version, true);
   }
 
-  public void toDataPre_GFE_7_1_0_0(DataOutput out) throws IOException {
+  public void toDataPre_GFE_7_1_0_0(DataOutput out, SerializationContext context)
+      throws IOException {
     Assert.assertTrue(netMbr.getVmKind() > 0);
     // disabled to allow post-connect setting of the port for loner systems
     // Assert.assertTrue(getPort() > 0);
@@ -960,8 +964,9 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
 
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    fromDataPre_GFE_9_0_0_0(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    fromDataPre_GFE_9_0_0_0(in, context);
     // just in case this is just a non-versioned read
     // from a file we ought to check the version
     if (getNetMember().getVersionOrdinal() >= Version.GFE_90.ordinal()) {
@@ -973,7 +978,8 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
     }
   }
 
-  public void fromDataPre_GFE_9_0_0_0(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromDataPre_GFE_9_0_0_0(DataInput in, SerializationContext context)
+      throws IOException, ClassNotFoundException {
     InetAddress inetAddr = DataSerializer.readInetAddress(in);
     int port = in.readInt();
 
@@ -1019,7 +1025,8 @@ public class InternalDistributedMember implements DistributedMember, Externaliza
     // Assert.assertTrue(getPort() > 0);
   }
 
-  public void fromDataPre_GFE_7_1_0_0(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromDataPre_GFE_7_1_0_0(DataInput in, SerializationContext context)
+      throws IOException, ClassNotFoundException {
     InetAddress inetAddr = DataSerializer.readInetAddress(in);
     int port = in.readInt();
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberFactory.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberFactory.java
index 993b71b..eb28925 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/GMSMemberFactory.java
@@ -34,6 +34,7 @@ import org.apache.geode.distributed.internal.membership.NetMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Authenticator;
+import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.net.SocketCreator;
@@ -117,7 +118,8 @@ public class GMSMemberFactory implements MemberServices {
       final DistributionConfig config) throws DistributionException {
     GMSMembershipManager gmsMembershipManager = new GMSMembershipManager(listener);
     Services services =
-        new Services(gmsMembershipManager.getGMSManager(), transport, stats, authenticator, config);
+        new Services(gmsMembershipManager.getGMSManager(), transport, stats, authenticator, config,
+            InternalDataSerializer.getDSFIDSerializer());
     try {
       services.init();
       services.start();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/LocalViewMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/LocalViewMessage.java
index 3d482bf..83ca4b8 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/LocalViewMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/adapter/LocalViewMessage.java
@@ -22,6 +22,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.SerialDistributionMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.MembershipView;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -66,12 +67,14 @@ public class LocalViewMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     throw new UnsupportedOperationException();
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     throw new UnsupportedOperationException();
   }
 }
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 0b8b996..4df41a5 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
@@ -22,13 +22,12 @@ import java.net.InetAddress;
 
 import org.jgroups.util.UUID;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.VisibleForTesting;
-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;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 /**
  * GMSMember is the membership identifier class for Group Membership Services.
@@ -59,7 +58,7 @@ public class GMSMember implements DataSerializableFixedID {
   private int directPort;
   private String name;
   private String[] groups;
-  private short versionOrdinal = Version.CURRENT_ORDINAL;
+  private short versionOrdinal = SerializationVersion.currentVersion.ordinal();
   private long uuidLSBs;
   private long uuidMSBs;
   private String durableId;
@@ -75,7 +74,7 @@ public class GMSMember implements DataSerializableFixedID {
   public GMSMember() {}
 
   @VisibleForTesting
-  public GMSMember(String localhost, int udpPort, Version version) {
+  public GMSMember(String localhost, int udpPort, SerializationVersion version) {
     this.hostName = localhost;
     this.inetAddr = SocketCreator.toInetAddress(localhost);
     this.udpPort = udpPort;
@@ -97,7 +96,7 @@ public class GMSMember implements DataSerializableFixedID {
    */
   @VisibleForTesting
   public GMSMember(String i, int p) {
-    this(i, p, Version.CURRENT);
+    this(i, p, SerializationVersion.currentVersion);
   }
 
   /**
@@ -432,7 +431,7 @@ public class GMSMember implements DataSerializableFixedID {
   }
 
 
-  public void setVersion(Version v) {
+  public void setVersion(SerializationVersion v) {
     this.versionOrdinal = v.ordinal();
   }
 
@@ -473,7 +472,7 @@ public class GMSMember implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -489,11 +488,12 @@ public class GMSMember implements DataSerializableFixedID {
   static final int LONER_VM_TYPE = 13; // from ClusterDistributionManager
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    DataSerializer.writeInetAddress(getInetAddress(), out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    StaticSerialization.writeInetAddress(getInetAddress(), out);
     out.writeInt(getPort());
 
-    DataSerializer.writeString(hostName, out);
+    StaticSerialization.writeString(hostName, out);
 
     int flags = 0;
     if (isNetworkPartitionDetectionEnabled())
@@ -510,26 +510,27 @@ public class GMSMember implements DataSerializableFixedID {
     out.writeInt(getProcessId());
     int vmKind = getVmKind();
     out.writeByte(vmKind);
-    DataSerializer.writeStringArray(getGroups(), out);
+    StaticSerialization.writeStringArray(getGroups(), out);
 
-    DataSerializer.writeString(getName(), out);
+    StaticSerialization.writeString(getName(), out);
     if (vmKind == LONER_VM_TYPE) {
-      DataSerializer.writeString("", out);
+      StaticSerialization.writeString("", out);
     } else { // added in 6.5 for unique identifiers in P2P
-      DataSerializer.writeString(String.valueOf(getVmViewId()), out);
+      StaticSerialization.writeString(String.valueOf(getVmViewId()), out);
     }
-    DataSerializer
+    StaticSerialization
         .writeString(durableId == null ? "" : durableId, out);
-    DataSerializer.writeInteger(durableId == null ? 300 : durableTimeout, out);
+    out.writeInt(durableId == null ? 300 : durableTimeout);
 
     SerializationVersion.writeOrdinal(out, versionOrdinal, true);
 
-    if (versionOrdinal >= Version.GFE_90.ordinal()) {
+    if (versionOrdinal >= SerializationVersion.GFE_90_ORDINAL) {
       writeAdditionalData(out);
     }
   }
 
-  public void writeEssentialData(DataOutput out) throws IOException {
+  public void writeEssentialData(DataOutput out,
+      SerializationContext context) throws IOException {
     SerializationVersion.writeOrdinal(out, this.versionOrdinal, true);
 
     int flags = 0;
@@ -539,23 +540,23 @@ public class GMSMember implements DataSerializableFixedID {
       flags |= PREFERRED_FOR_COORD_BIT;
     out.writeShort(flags);
 
-    DataSerializer.writeInetAddress(inetAddr, out);
+    StaticSerialization.writeInetAddress(inetAddr, out);
     out.writeInt(udpPort);
     out.writeInt(vmViewId);
     out.writeLong(uuidMSBs);
     out.writeLong(uuidLSBs);
-    if (InternalDataSerializer.getVersionForDataStream(out).compareTo(
-        Version.GEODE_1_2_0) >= 0) {
+    if (context.getSerializationVersion().ordinal() >= SerializationVersion.GEODE_1_2_0_ORDINAL) {
       out.writeByte(vmKind);
     }
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    inetAddr = DataSerializer.readInetAddress(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    inetAddr = StaticSerialization.readInetAddress(in);
     udpPort = in.readInt();
 
-    this.hostName = DataSerializer.readString(in);
+    this.hostName = StaticSerialization.readString(in);
 
     int flags = in.readUnsignedByte();
     preferredForCoordinator = (flags & PREFERRED_FOR_COORD_BIT) != 0;
@@ -564,39 +565,37 @@ public class GMSMember implements DataSerializableFixedID {
     directPort = in.readInt();
     processId = in.readInt();
     vmKind = (byte) in.readUnsignedByte();
-    groups = DataSerializer.readStringArray(in);
+    groups = StaticSerialization.readStringArray(in);
     vmViewId = -1;
 
-    name = DataSerializer.readString(in);
+    name = StaticSerialization.readString(in);
     if (vmKind == LONER_DM_TYPE) {
-      DataSerializer.readString(in);
+      StaticSerialization.readString(in);
     } else {
-      String str = DataSerializer.readString(in);
+      String str = StaticSerialization.readString(in);
       if (str != null) { // backward compatibility from earlier than 6.5
         vmViewId = Integer.parseInt(str);
       }
     }
 
-    durableId = DataSerializer.readString(in);
+    durableId = StaticSerialization.readString(in);
     durableTimeout = in.readInt();
 
-    versionOrdinal = readVersion(flags, in);
+    versionOrdinal = readVersion(flags, in, context);
 
-    if (versionOrdinal >= Version.GFE_90.ordinal()) {
+    if (versionOrdinal >= SerializationVersion.GFE_90_ORDINAL) {
       readAdditionalData(in);
     }
   }
 
-  private short readVersion(int flags, DataInput in) throws IOException {
+  private short readVersion(int flags, DataInput in,
+      SerializationContext context) throws IOException {
     if ((flags & VERSION_BIT) != 0) {
       return SerializationVersion.readOrdinal(in);
     } else {
       // prior to 7.1 member IDs did not serialize their version information
-      Version v = InternalDataSerializer.getVersionForDataStreamOrNull(in);
-      if (v != null) {
-        return v.ordinal();
-      }
-      return Version.CURRENT_ORDINAL;
+      SerializationVersion v = context.getSerializationVersion();
+      return v.ordinal();
     }
   }
 
@@ -608,14 +607,15 @@ public class GMSMember implements DataSerializableFixedID {
     this.hostName = hostName;
   }
 
-  public void readEssentialData(DataInput in) throws IOException, ClassNotFoundException {
+  public void readEssentialData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.versionOrdinal = SerializationVersion.readOrdinal(in);
 
     int flags = in.readShort();
     this.networkPartitionDetectionEnabled = (flags & NPD_ENABLED_BIT) != 0;
     this.preferredForCoordinator = (flags & PREFERRED_FOR_COORD_BIT) != 0;
 
-    this.inetAddr = DataSerializer.readInetAddress(in);
+    this.inetAddr = StaticSerialization.readInetAddress(in);
     if (this.inetAddr != null) {
       this.hostName =
           SocketCreator.resolve_dns ? SocketCreator.getHostName(inetAddr)
@@ -625,8 +625,7 @@ public class GMSMember implements DataSerializableFixedID {
     this.vmViewId = in.readInt();
     this.uuidMSBs = in.readLong();
     this.uuidLSBs = in.readLong();
-    if (InternalDataSerializer.getVersionForDataStream(in).compareTo(
-        Version.GEODE_1_2_0) >= 0) {
+    if (context.getSerializationVersion().ordinal() >= SerializationVersion.GEODE_1_2_0_ORDINAL) {
       this.vmKind = in.readByte();
     }
     this.isPartial = true;
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 a44d6e5..132e094 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
@@ -32,12 +32,12 @@ import java.util.stream.Collectors;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
-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;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 /**
  * The GMSMembershipView class represents a membership view. Note that this class is not
@@ -598,66 +598,54 @@ public class GMSMembershipView implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(creator, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(creator, out, context);
     out.writeInt(viewId);
-    writeAsArrayList(members, out);
-    GMSUtil.writeSetOfMemberIDs(shutdownMembers, out);
-    GMSUtil.writeSetOfMemberIDs(crashedMembers, out);
-    DataSerializer.writeIntArray(failureDetectionPorts, out);
+    writeAsArrayList(members, out, context);
+    GMSUtil.writeSetOfMemberIDs(shutdownMembers, out, context);
+    GMSUtil.writeSetOfMemberIDs(crashedMembers, out, context);
+    StaticSerialization.writeIntArray(failureDetectionPorts, out);
     // TODO expensive serialization
-    DataSerializer.writeHashMap(publicKeys, out);
+    StaticSerialization.writeHashMap(publicKeys, out, context);
   }
 
 
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    creator = GMSUtil.readMemberID(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    creator = GMSUtil.readMemberID(in, context);
     viewId = in.readInt();
-    members = GMSUtil.readArrayOfIDs(in);
+    members = GMSUtil.readArrayOfIDs(in, context);
     assert members != null;
     this.hashedMembers = new HashSet<>(members);
-    shutdownMembers = GMSUtil.readHashSetOfMemberIDs(in);
-    crashedMembers = GMSUtil.readHashSetOfMemberIDs(in);
-    failureDetectionPorts = DataSerializer.readIntArray(in);
-    Map pubkeys = DataSerializer.readHashMap(in);
+    shutdownMembers = GMSUtil.readHashSetOfMemberIDs(in, context);
+    crashedMembers = GMSUtil.readHashSetOfMemberIDs(in, context);
+    failureDetectionPorts = StaticSerialization.readIntArray(in);
+    Map pubkeys = StaticSerialization.readHashMap(in, context);
     if (pubkeys != null) {
       publicKeys.putAll(pubkeys);
     }
   }
 
   /** this will deserialize as an ArrayList */
-  private void writeAsArrayList(List<GMSMember> list, DataOutput out) throws IOException {
+  private void writeAsArrayList(List<GMSMember> list, DataOutput out,
+      SerializationContext context) throws IOException {
     int size;
     if (list == null) {
       size = -1;
     } else {
       size = list.size();
     }
-    InternalDataSerializer.writeArrayLength(size, out);
+    StaticSerialization.writeArrayLength(size, out);
     if (size > 0) {
       for (int i = 0; i < size; i++) {
-        GMSUtil.writeMemberID(list.get(i), out);
-      }
-    }
-  }
-
-  private void writeAsSet(Set<GMSMember> set, DataOutput out) throws IOException {
-    int size;
-    if (set == null) {
-      size = -1;
-    } else {
-      size = set.size();
-    }
-    InternalDataSerializer.writeArrayLength(size, out);
-    if (size > 0) {
-      for (GMSMember member : set) {
-        GMSUtil.writeMemberID(member, out);
+        GMSUtil.writeMemberID(list.get(i), out, context);
       }
     }
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
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 ce09a5c..554cd00 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
@@ -30,14 +30,14 @@ import java.util.StringTokenizer;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.GemFireConfigException;
 import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
-import org.apache.geode.internal.DSFIDFactory;
-import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 public class GMSUtil {
   private static final Logger logger = LogService.getLogger();
@@ -64,8 +64,9 @@ public class GMSUtil {
     return parseLocators(locatorsString, addr);
   }
 
-  public static GMSMember readMemberID(DataInput in) throws IOException, ClassNotFoundException {
-    Object id = DataSerializer.readObject(in);
+  public static GMSMember readMemberID(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    Object id = context.getDSFIDSerializer().getDataSerializer().readObject(in);
     if (id == null || id instanceof GMSMember) {
       return (GMSMember) id;
     }
@@ -80,15 +81,16 @@ public class GMSUtil {
     }
   }
 
-  public static Set<GMSMember> readHashSetOfMemberIDs(DataInput in)
+  public static Set<GMSMember> readHashSetOfMemberIDs(DataInput in,
+      SerializationContext context)
       throws IOException, ClassNotFoundException {
-    int size = InternalDataSerializer.readArrayLength(in);
+    int size = StaticSerialization.readArrayLength(in);
     if (size == -1) {
       return null;
     }
     Set<GMSMember> result = new HashSet<>();
     for (int i = 0; i < size; i++) {
-      result.add(readMemberID(in));
+      result.add(readMemberID(in, context));
     }
     return result;
   }
@@ -195,65 +197,53 @@ public class GMSUtil {
     return sb.toString();
   }
 
-  public static List<GMSMember> readArrayOfIDs(DataInput in)
+  public static List<GMSMember> readArrayOfIDs(DataInput in,
+      SerializationContext context)
       throws IOException, ClassNotFoundException {
-    int size = InternalDataSerializer.readArrayLength(in);
+    int size = StaticSerialization.readArrayLength(in);
     if (size == -1) {
       return null;
     }
     List<GMSMember> result = new ArrayList<>(size);
     for (int i = 0; i < size; i++) {
-      result.add(readMemberID(in));
+      result.add(readMemberID(in, context));
     }
     return result;
   }
 
-  private static void writeAsInternalDistributedMember(GMSMember suspect, DataOutput out)
+  private static void writeAsInternalDistributedMember(GMSMember suspect, DataOutput out,
+      SerializationContext context)
       throws IOException {
-    InternalDataSerializer.writeDSFID(suspect, DSFIDFactory.DISTRIBUTED_MEMBER, out);
-    // DataSerializer.writeObject(new InternalDistributedMember(new GMSMemberAdapter(suspect)),
-    // out);
+    context.getDSFIDSerializer().writeDSFID(suspect, DataSerializableFixedID.DISTRIBUTED_MEMBER,
+        out);
   }
 
-  public static void writeMemberID(GMSMember id, DataOutput out) throws IOException {
+  public static void writeMemberID(GMSMember id, DataOutput out,
+      SerializationContext context) throws IOException {
     if (id == null) {
-      DataSerializer.writeObject(id, out);
+      context.getDSFIDSerializer().getDataSerializer().writeObject(id, out);
       return;
     }
-    short ordinal = InternalDataSerializer.getVersionForDataStream(out).ordinal();
-    if (ordinal < Version.GEODE_1_10_0.ordinal()) {
-      writeAsInternalDistributedMember(id, out);
+    short ordinal = context.getSerializationVersion().ordinal();
+    if (ordinal <= SerializationVersion.GEODE_1_10_0_ORDINAL) {
+      writeAsInternalDistributedMember(id, out, context);
     } else {
-      DataSerializer.writeObject(id, out);
+      context.getDSFIDSerializer().writeDSFID(id, out);
     }
   }
 
-  public static Set<GMSMember> readSetOfMemberIDs(DataInput in)
-      throws IOException, ClassNotFoundException {
-    int size = InternalDataSerializer.readArrayLength(in);
-    if (size == -1) {
-      return null;
-    }
-    Set<GMSMember> result = new HashSet<>(size);
-    for (int i = 0; i < size; i++) {
-      result.add(readMemberID(in));
-    }
-    return result;
-
-
-  }
-
-  public static void writeSetOfMemberIDs(Set<GMSMember> set, DataOutput out) throws IOException {
+  public static void writeSetOfMemberIDs(Set<GMSMember> set, DataOutput out,
+      SerializationContext context) throws IOException {
     int size;
     if (set == null) {
       size = -1;
     } else {
       size = set.size();
     }
-    InternalDataSerializer.writeArrayLength(size, out);
+    StaticSerialization.writeArrayLength(size, out);
     if (size > 0) {
       for (GMSMember member : set) {
-        GMSUtil.writeMemberID(member, out);
+        GMSUtil.writeMemberID(member, out, context);
       }
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
index 447057f..4c24b16 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
@@ -34,6 +34,7 @@ import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLe
 import org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.DSFIDSerializer;
 
 @SuppressWarnings("ConstantConditions")
 public class Services {
@@ -48,6 +49,7 @@ public class Services {
   private final ServiceConfig config;
   private final DMStats stats;
   private final Stopper cancelCriterion;
+  private final DSFIDSerializer serializer;
 
   private volatile boolean stopping;
   private volatile boolean stopped;
@@ -87,11 +89,13 @@ public class Services {
     this.healthMon = null;
     this.messenger = null;
     this.auth = null;
+    this.serializer = null;
   }
 
   public Services(Manager membershipManager,
       RemoteTransportConfig transport, DMStats stats,
-      final Authenticator authenticator, DistributionConfig config) {
+      final Authenticator authenticator, DistributionConfig config,
+      DSFIDSerializer serializer) {
     this.cancelCriterion = new Stopper();
     this.stats = stats;
     this.config = new ServiceConfig(transport, config);
@@ -100,6 +104,7 @@ public class Services {
     this.healthMon = new GMSHealthMonitor();
     this.messenger = new JGroupsMessenger();
     this.auth = authenticator;
+    this.serializer = serializer;
   }
 
   /**
@@ -301,6 +306,10 @@ public class Services {
     return !getConfig().getDistributionConfig().getDisableAutoReconnect();
   }
 
+  public DSFIDSerializer getSerializer() {
+    return this.serializer;
+  }
+
   public class Stopper extends CancelCriterion {
     volatile String reasonForStopping = null;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index b169f9e..8d41565 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -68,10 +68,10 @@ import org.apache.geode.distributed.internal.membership.gms.messages.HeartbeatRe
 import org.apache.geode.distributed.internal.membership.gms.messages.SuspectMembersMessage;
 import org.apache.geode.distributed.internal.membership.gms.messages.SuspectRequest;
 import org.apache.geode.internal.ConnectionWatcher;
-import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LoggingExecutors;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 /**
  * Failure Detection
@@ -636,7 +636,7 @@ public class GMSHealthMonitor implements HealthMonitor {
   }
 
   void writeMemberToStream(GMSMember gmbr, DataOutputStream out) throws IOException {
-    out.writeShort(Version.CURRENT_ORDINAL);
+    out.writeShort(localAddress.getVersionOrdinal());
     out.writeInt(gmbr.getVmViewId());
     out.writeLong(gmbr.getUuidLSBs());
     out.writeLong(gmbr.getUuidMSBs());
@@ -1387,7 +1387,7 @@ public class GMSHealthMonitor implements HealthMonitor {
 
       if (!failed) {
         if (!isStopping && !initiator.equals(localAddress)
-            && initiator.getVersionOrdinal() >= Version.GEODE_1_4_0.ordinal()) {
+            && initiator.getVersionOrdinal() >= SerializationVersion.GEODE_1_4_0_ORDINAL) {
           // let the sender know that it's okay to monitor this member again
           FinalCheckPassedMessage message = new FinalCheckPassedMessage(initiator, mbr);
           services.getMessenger().send(message);
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorRequest.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorRequest.java
index 740d600..e63a0ec 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/FindCoordinatorRequest.java
@@ -23,8 +23,9 @@ import java.util.Collection;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
 import org.apache.geode.distributed.internal.membership.gms.messages.AbstractGMSMessage;
-import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 public class FindCoordinatorRequest extends AbstractGMSMessage
     implements PeerLocatorRequest {
@@ -87,7 +88,7 @@ public class FindCoordinatorRequest extends AbstractGMSMessage
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -103,34 +104,36 @@ public class FindCoordinatorRequest extends AbstractGMSMessage
   // TODO serialization not backward compatible with 1.9 - may need InternalDistributedMember, not
   // GMSMember
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(memberID, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(memberID, out, context);
     if (this.rejectedCoordinators != null) {
       out.writeInt(this.rejectedCoordinators.size());
       for (GMSMember mbr : this.rejectedCoordinators) {
-        GMSUtil.writeMemberID(mbr, out);
+        GMSUtil.writeMemberID(mbr, out, context);
       }
     } else {
       out.writeInt(0);
     }
     out.writeInt(lastViewId);
     out.writeInt(requestId);
-    InternalDataSerializer.writeString(dhalgo, out);
-    InternalDataSerializer.writeByteArray(this.myPublicKey, out);
+    StaticSerialization.writeString(dhalgo, out);
+    StaticSerialization.writeByteArray(this.myPublicKey, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    this.memberID = GMSUtil.readMemberID(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    this.memberID = GMSUtil.readMemberID(in, context);
     int size = in.readInt();
     this.rejectedCoordinators = new ArrayList<GMSMember>(size);
     for (int i = 0; i < size; i++) {
-      this.rejectedCoordinators.add(GMSUtil.readMemberID(in));
+      this.rejectedCoordinators.add(GMSUtil.readMemberID(in, context));
     }
     this.lastViewId = in.readInt();
     this.requestId = in.readInt();
-    this.dhalgo = InternalDataSerializer.readString(in);
-    this.myPublicKey = InternalDataSerializer.readByteArray(in);
+    this.dhalgo = StaticSerialization.readString(in);
+    this.myPublicKey = StaticSerialization.readByteArray(in);
   }
 
   @Override
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 0caf10c..a35f963 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
@@ -22,14 +22,14 @@ import java.util.HashSet;
 import java.util.Objects;
 import java.util.Set;
 
-import org.apache.geode.DataSerializer;
 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.InternalDataSerializer;
-import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 public class FindCoordinatorResponse extends AbstractGMSMessage
     implements DataSerializableFixedID {
@@ -140,7 +140,7 @@ public class FindCoordinatorResponse extends AbstractGMSMessage
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -152,32 +152,34 @@ public class FindCoordinatorResponse extends AbstractGMSMessage
   // TODO serialization not backward compatible with 1.9 - may need InternalDistributedMember, not
   // GMSMember
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(coordinator, out);
-    GMSUtil.writeMemberID(senderId, out);
-    InternalDataSerializer.writeByteArray(coordinatorPublicKey, out);
-    InternalDataSerializer.writeString(rejectionMessage, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(coordinator, out, context);
+    GMSUtil.writeMemberID(senderId, out, context);
+    StaticSerialization.writeByteArray(coordinatorPublicKey, out);
+    StaticSerialization.writeString(rejectionMessage, out);
     out.writeBoolean(isShortForm);
     out.writeBoolean(fromView);
     out.writeBoolean(networkPartitionDetectionEnabled);
     out.writeBoolean(usePreferredCoordinators);
-    DataSerializer.writeObject(view, out);
-    GMSUtil.writeSetOfMemberIDs(registrants, out);
+    context.getDSFIDSerializer().writeDSFID(view, out);
+    GMSUtil.writeSetOfMemberIDs(registrants, out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    coordinator = GMSUtil.readMemberID(in);
-    senderId = GMSUtil.readMemberID(in);
-    coordinatorPublicKey = InternalDataSerializer.readByteArray(in);
-    rejectionMessage = InternalDataSerializer.readString(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    coordinator = GMSUtil.readMemberID(in, context);
+    senderId = GMSUtil.readMemberID(in, context);
+    coordinatorPublicKey = StaticSerialization.readByteArray(in);
+    rejectionMessage = StaticSerialization.readString(in);
     isShortForm = in.readBoolean();
     if (!isShortForm) {
       fromView = in.readBoolean();
       networkPartitionDetectionEnabled = in.readBoolean();
       usePreferredCoordinators = in.readBoolean();
-      view = DataSerializer.readObject(in);
-      registrants = GMSUtil.readHashSetOfMemberIDs(in);
+      view = (GMSMembershipView) context.getDSFIDSerializer().readDSFID(in);
+      registrants = GMSUtil.readHashSetOfMemberIDs(in, context);
     }
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
index 131482d..ee0a16a 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
@@ -14,11 +14,11 @@
  */
 package org.apache.geode.distributed.internal.membership.gms.locator;
 
+import java.io.DataInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.ObjectInput;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.net.InetAddress;
@@ -36,7 +36,6 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.InternalGemFireException;
 import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.distributed.internal.LocatorStats;
@@ -47,9 +46,11 @@ import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Locator;
 import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
+import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.Version;
-import org.apache.geode.internal.VersionedObjectInput;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 public class GMSLocator implements Locator {
 
@@ -334,8 +335,8 @@ public class GMSLocator implements Locator {
     }
     try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(viewFile))) {
       oos.writeInt(LOCATOR_FILE_STAMP);
-      oos.writeInt(Version.CURRENT_ORDINAL);
-      DataSerializer.writeObject(view, oos);
+      oos.writeInt(SerializationVersion.getCurrentVersion().ordinal());
+      services.getSerializer().writeDSFID(view, oos);
     } catch (Exception e) {
       logger.warn(
           "Peer locator encountered an error writing current membership to disk.  Disabling persistence.  Care should be taken when bouncing this locator as it will not be able to recover knowledge of the running distributed system",
@@ -413,23 +414,30 @@ public class GMSLocator implements Locator {
     }
 
     logger.info("Peer locator recovering from {}", file.getAbsolutePath());
-    try (ObjectInput ois = new ObjectInputStream(new FileInputStream(file))) {
-      if (ois.readInt() != LOCATOR_FILE_STAMP) {
+    try (FileInputStream fileInputStream = new FileInputStream(file);
+        ObjectInputStream ois = new ObjectInputStream(fileInputStream)) {
+      int stamp = ois.readInt();
+      if (stamp != LOCATOR_FILE_STAMP) {
         return false;
       }
 
-      ObjectInput input = ois;
-      int version = input.readInt();
-      if (version != Version.CURRENT_ORDINAL) {
-        Version geodeVersion = Version.fromOrdinalNoThrow((short) version, false);
-        logger.info("Peer locator found that persistent view was written with {}", geodeVersion);
-        if (version > Version.CURRENT_ORDINAL) {
+      int version = ois.readInt();
+      int currentVersion = SerializationVersion.getCurrentVersion().ordinal();
+      DataInputStream input = new DataInputStream(fileInputStream);
+      if (version != currentVersion) {
+        SerializationVersion geodeVersion = Version.fromOrdinalNoThrow((short) version, false);
+        logger.info("Peer locator found that persistent view was written with version ",
+            geodeVersion);
+        if (version > currentVersion) {
           return false;
         }
-        input = new VersionedObjectInput(input, geodeVersion);
+        input = new VersionedDataInputStream(ois, geodeVersion);
       }
 
-      recoveredView = DataSerializer.readObject(input);
+      // TBD - services isn't available when we recover from disk so this will throw an NPE
+      // recoveredView = (GMSMembershipView) services.getSerializer().readDSFID(input);
+      recoveredView = (GMSMembershipView) InternalDataSerializer.readObject(input);
+
       // this is not a valid view so it shouldn't have a usable Id
       recoveredView.setViewId(-1);
       List<GMSMember> members = new ArrayList<>(recoveredView.getMembers());
@@ -444,7 +452,7 @@ public class GMSLocator implements Locator {
       logger.info("Peer locator recovered membership is {}", recoveredView);
       return true;
 
-    } catch (Exception e) {
+    } catch (Throwable e) {
       String message =
           String.format("Unable to recover previous membership view from %s", file.toString());
       logger.warn(message, e);
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 528a1a1..a0b536c 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,15 +18,16 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class GetViewRequest implements DataSerializableFixedID, PeerLocatorRequest {
 
   public GetViewRequest() {}
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -36,9 +37,11 @@ public class GetViewRequest implements DataSerializableFixedID, PeerLocatorReque
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {}
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {}
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {}
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {}
 
 }
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 136618c..be5a98d 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
@@ -18,10 +18,10 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class GetViewResponse implements DataSerializableFixedID {
 
@@ -40,7 +40,7 @@ public class GetViewResponse implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -50,13 +50,15 @@ public class GetViewResponse implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    DataSerializer.writeObject(view, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    context.getDSFIDSerializer().writeDSFID(view, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    view = DataSerializer.readObject(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    view = (GMSMembershipView) context.getDSFIDSerializer().readDSFID(in);
   }
 
 }
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 4de93ae..341bbcf 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
@@ -68,9 +68,9 @@ import org.apache.geode.distributed.internal.membership.gms.messages.NetworkPart
 import org.apache.geode.distributed.internal.membership.gms.messages.RemoveMemberMessage;
 import org.apache.geode.distributed.internal.membership.gms.messages.ViewAckMessage;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
-import org.apache.geode.internal.Version;
 import org.apache.geode.internal.logging.LoggingExecutors;
 import org.apache.geode.internal.logging.LoggingThread;
+import org.apache.geode.internal.serialization.SerializationVersion;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.security.GemFireSecurityException;
 
@@ -541,7 +541,8 @@ public class GMSJoinLeave implements JoinLeave {
     logger.info("Received a join request from {}", incomingRequest.getMemberID());
 
     if (!ALLOW_OLD_VERSION_FOR_TESTING
-        && incomingRequest.getMemberID().getVersionOrdinal() < Version.CURRENT.ordinal()) {
+        && incomingRequest.getMemberID().getVersionOrdinal() < SerializationVersion
+            .getCurrentVersion().ordinal()) {
       logger.warn("detected an attempt to start a peer using an older version of the product {}",
           incomingRequest.getMemberID());
       JoinResponseMessage m =
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java
index 1e5fecb..247ffb5 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/FinalCheckPassedMessage.java
@@ -20,7 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class FinalCheckPassedMessage extends AbstractGMSMessage {
 
@@ -46,18 +47,20 @@ public class FinalCheckPassedMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(suspect, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(suspect, out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    suspect = GMSUtil.readMemberID(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    suspect = GMSUtil.readMemberID(in, context);
   }
 
   public GMSMember getSuspect() {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatMessage.java
index 420ddb1..2f3199b 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatMessage.java
@@ -18,7 +18,8 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class HeartbeatMessage extends AbstractGMSMessage {
   /**
@@ -49,17 +50,19 @@ public class HeartbeatMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeInt(requestId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     requestId = in.readInt();
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatRequestMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatRequestMessage.java
index bcd617e..3382823 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatRequestMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/HeartbeatRequestMessage.java
@@ -20,7 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class HeartbeatRequestMessage extends AbstractGMSMessage {
 
@@ -60,19 +61,21 @@ public class HeartbeatRequestMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeInt(requestId);
-    GMSUtil.writeMemberID(target, out);
+    GMSUtil.writeMemberID(target, out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     requestId = in.readInt();
-    target = GMSUtil.readMemberID(in);
+    target = GMSUtil.readMemberID(in, context);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/InstallViewMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/InstallViewMessage.java
index b32e538..75a15d8 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/InstallViewMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/InstallViewMessage.java
@@ -19,9 +19,9 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.Objects;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class InstallViewMessage extends AbstractGMSMessage {
 
@@ -69,7 +69,7 @@ public class InstallViewMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -79,19 +79,21 @@ public class InstallViewMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeInt(previousViewId);
     out.writeInt(kind.ordinal());
-    DataSerializer.writeObject(this.view, out);
-    DataSerializer.writeObject(this.credentials, out);
+    context.getDSFIDSerializer().writeDSFID(this.view, out);
+    context.getDSFIDSerializer().getDataSerializer().writeObject(this.credentials, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.previousViewId = in.readInt();
     this.kind = messageType.values()[in.readInt()];
-    this.view = DataSerializer.readObject(in);
-    this.credentials = DataSerializer.readObject(in);
+    this.view = (GMSMembershipView) context.getDSFIDSerializer().readDSFID(in);
+    this.credentials = context.getDSFIDSerializer().getDataSerializer().readObject(in);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinRequestMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinRequestMessage.java
index 0ae0839..dcbd143 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinRequestMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinRequestMessage.java
@@ -19,10 +19,10 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.Objects;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class JoinRequestMessage extends AbstractGMSMessage {
   private GMSMember memberID;
@@ -82,15 +82,16 @@ public class JoinRequestMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(memberID, out);
-    DataSerializer.writeObject(credentials, out);
-    DataSerializer.writePrimitiveInt(failureDetectionPort, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(memberID, out, context);
+    context.getDSFIDSerializer().getDataSerializer().writeObject(credentials, out);
+    out.writeInt(failureDetectionPort);
     // preserve the multicast setting so the receiver can tell
     // if this is a mcast join request
     out.writeBoolean(false);
@@ -98,10 +99,11 @@ public class JoinRequestMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    memberID = GMSUtil.readMemberID(in);
-    credentials = DataSerializer.readObject(in);
-    failureDetectionPort = DataSerializer.readPrimitiveInt(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    memberID = GMSUtil.readMemberID(in, context);
+    credentials = context.getDSFIDSerializer().getDataSerializer().readObject(in);
+    failureDetectionPort = in.readInt();
     // setMulticast(in.readBoolean());
     in.readBoolean();
     requestId = in.readInt();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinResponseMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinResponseMessage.java
index ccac9d4..b5161d5 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinResponseMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/JoinResponseMessage.java
@@ -20,11 +20,12 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Objects;
 
-import org.apache.geode.DataSerializer;
 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.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 // TODO this class has been made unintelligible with different combinations of response values.
 // It needs to have an enum that indicates what type of response is in the message or it
@@ -101,7 +102,7 @@ public class JoinResponseMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
@@ -111,21 +112,23 @@ public class JoinResponseMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    DataSerializer.writeObject(currentView, out);
-    GMSUtil.writeMemberID(memberID, out);
-    DataSerializer.writeString(rejectionMessage, out);
-    DataSerializer.writeByteArray(messengerData, out);
-    DataSerializer.writeByteArray(secretPk, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    context.getDSFIDSerializer().writeDSFID(currentView, out);
+    GMSUtil.writeMemberID(memberID, out, context);
+    StaticSerialization.writeString(rejectionMessage, out);
+    StaticSerialization.writeByteArray(messengerData, out);
+    StaticSerialization.writeByteArray(secretPk, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    currentView = DataSerializer.readObject(in);
-    memberID = GMSUtil.readMemberID(in);
-    rejectionMessage = DataSerializer.readString(in);
-    messengerData = DataSerializer.readByteArray(in);
-    secretPk = DataSerializer.readByteArray(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    currentView = (GMSMembershipView) context.getDSFIDSerializer().readDSFID(in);
+    memberID = GMSUtil.readMemberID(in, context);
+    rejectionMessage = StaticSerialization.readString(in);
+    messengerData = StaticSerialization.readByteArray(in);
+    secretPk = StaticSerialization.readByteArray(in);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/LeaveRequestMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/LeaveRequestMessage.java
index 2199001..bd65ecb 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/LeaveRequestMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/LeaveRequestMessage.java
@@ -19,10 +19,11 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 public class LeaveRequestMessage extends AbstractGMSMessage implements HasMemberID {
   private GMSMember memberID;
@@ -63,20 +64,22 @@ public class LeaveRequestMessage extends AbstractGMSMessage implements HasMember
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(memberID, out);
-    DataSerializer.writeString(reason, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(memberID, out, context);
+    StaticSerialization.writeString(reason, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    memberID = GMSUtil.readMemberID(in);
-    reason = DataSerializer.readString(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    memberID = GMSUtil.readMemberID(in, context);
+    reason = StaticSerialization.readString(in);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/NetworkPartitionMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/NetworkPartitionMessage.java
index 88dcfd3..30c5a34 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/NetworkPartitionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/NetworkPartitionMessage.java
@@ -20,7 +20,8 @@ import java.io.IOException;
 import java.util.List;
 
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class NetworkPartitionMessage extends AbstractGMSMessage {
 
@@ -36,17 +37,19 @@ public class NetworkPartitionMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
 
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
 
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/RemoveMemberMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/RemoveMemberMessage.java
index a526a3d..1431760 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/RemoveMemberMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/RemoveMemberMessage.java
@@ -19,10 +19,11 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 public class RemoveMemberMessage extends AbstractGMSMessage implements HasMemberID {
   private GMSMember memberID;
@@ -69,20 +70,22 @@ public class RemoveMemberMessage extends AbstractGMSMessage implements HasMember
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    GMSUtil.writeMemberID(memberID, out);
-    DataSerializer.writeString(reason, out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    GMSUtil.writeMemberID(memberID, out, context);
+    StaticSerialization.writeString(reason, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    memberID = GMSUtil.readMemberID(in);
-    reason = DataSerializer.readString(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    memberID = GMSUtil.readMemberID(in, context);
+    reason = StaticSerialization.readString(in);
   }
 
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/SuspectMembersMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/SuspectMembersMessage.java
index a26dd1c..5ed5da9 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/SuspectMembersMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/SuspectMembersMessage.java
@@ -20,10 +20,11 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 public class SuspectMembersMessage extends AbstractGMSMessage {
   final List<SuspectRequest> suspectRequests;
@@ -54,17 +55,18 @@ public class SuspectMembersMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     if (suspectRequests != null) {
       out.writeInt(suspectRequests.size());
       for (SuspectRequest sr : suspectRequests) {
-        GMSUtil.writeMemberID(sr.getSuspectMember(), out);
-        DataSerializer.writeString(sr.getReason(), out);
+        GMSUtil.writeMemberID(sr.getSuspectMember(), out, context);
+        StaticSerialization.writeString(sr.getReason(), out);
       }
     } else {
       out.writeInt(0);
@@ -72,11 +74,12 @@ public class SuspectMembersMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     int size = in.readInt();
     for (int i = 0; i < size; i++) {
       SuspectRequest sr = new SuspectRequest(
-          GMSUtil.readMemberID(in), DataSerializer.readString(in));
+          GMSUtil.readMemberID(in, context), StaticSerialization.readString(in));
       suspectRequests.add(sr);
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/ViewAckMessage.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/ViewAckMessage.java
index 0309785..d05edc4 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/ViewAckMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messages/ViewAckMessage.java
@@ -18,10 +18,10 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.gms.GMSMember;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class ViewAckMessage extends AbstractGMSMessage {
 
@@ -66,17 +66,19 @@ public class ViewAckMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     out.writeInt(this.viewId);
     out.writeBoolean(this.preparing);
-    DataSerializer.writeObject(this.alternateView, out);
+    context.getDSFIDSerializer().writeDSFID(this.alternateView, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.viewId = in.readInt();
     this.preparing = in.readBoolean();
-    this.alternateView = DataSerializer.readObject(in);
+    this.alternateView = (GMSMembershipView) context.getDSFIDSerializer().readDSFID(in);
   }
 
   @Override
@@ -87,7 +89,7 @@ public class ViewAckMessage extends AbstractGMSMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public SerializationVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSPingPonger.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSPingPonger.java
index 58c01b4..5dc615f 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSPingPonger.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSPingPonger.java
@@ -18,7 +18,7 @@ import org.jgroups.Address;
 import org.jgroups.JChannel;
 import org.jgroups.Message;
 
-import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationVersion;
 
 public class GMSPingPonger {
   private byte[] pingInBytes = new byte[] {'p', 'i', 'n', 'g'};
@@ -39,11 +39,13 @@ public class GMSPingPonger {
   }
 
   public Message createPongMessage(Address src, Address dest) {
-    return createJGMessage(pongInBytes, src, dest, Version.CURRENT_ORDINAL);
+    return createJGMessage(pongInBytes, src, dest,
+        SerializationVersion.getCurrentVersion().ordinal());
   }
 
   public Message createPingMessage(Address src, Address dest) {
-    return createJGMessage(pingInBytes, src, dest, Version.CURRENT_ORDINAL);
+    return createJGMessage(pingInBytes, src, dest,
+        SerializationVersion.getCurrentVersion().ordinal());
   }
 
   public void sendPingMessage(JChannel channel, Address src, JGAddress dest) throws Exception {
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 305a857..fe6a433 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
@@ -65,7 +65,6 @@ import org.jgroups.stack.IpAddress;
 import org.jgroups.util.Digest;
 import org.jgroups.util.UUID;
 
-import org.apache.geode.DataSerializer;
 import org.apache.geode.ForcedDisconnectException;
 import org.apache.geode.GemFireConfigException;
 import org.apache.geode.GemFireIOException;
@@ -89,15 +88,14 @@ import org.apache.geode.distributed.internal.membership.gms.locator.FindCoordina
 import org.apache.geode.distributed.internal.membership.gms.messages.JoinRequestMessage;
 import org.apache.geode.distributed.internal.membership.gms.messages.JoinResponseMessage;
 import org.apache.geode.internal.ClassPathLoader;
-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.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.BufferDataOutputStream;
 import org.apache.geode.internal.serialization.SerializationVersion;
+import org.apache.geode.internal.serialization.StaticSerialization;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.tcp.MemberShunnedException;
 
@@ -545,7 +543,8 @@ public class JGroupsMessenger implements Messenger {
         -1 /* directport */, -1 /* viewID */, config.getName(),
         GMSUtil.parseGroups(config.getRoles(), config.getGroups()), config.getDurableClientId(),
         config.getDurableClientTimeout(),
-        config.getEnableNetworkPartitionDetection(), isLocator, Version.CURRENT_ORDINAL,
+        config.getEnableNetworkPartitionDetection(), isLocator,
+        SerializationVersion.getCurrentVersion().ordinal(),
         jgAddress.getUUIDMsbs(), jgAddress.getUUIDLsbs());
     gmsMember.setMemberWeight((byte) (services.getConfig().getMemberWeight() & 0xff));
     gmsMember.setNetworkPartitionDetectionEnabled(
@@ -696,7 +695,8 @@ public class JGroupsMessenger implements Messenger {
     if (useMcast) {
 
       long startSer = theStats.startMsgSerialization();
-      Message jmsg = createJGMessage(msg, local, null, Version.CURRENT_ORDINAL);
+      Message jmsg =
+          createJGMessage(msg, local, null, SerializationVersion.getCurrentVersion().ordinal());
       theStats.endMsgSerialization(startSer);
 
       Exception problem;
@@ -851,9 +851,11 @@ public class JGroupsMessenger implements Messenger {
     setMessageFlags(gfmsg, msg);
     try {
       long start = services.getStatistics().startMsgSerialization();
-      HeapDataOutputStream out_stream =
-          new HeapDataOutputStream(Version.fromOrdinalOrCurrent(version));
-      Version.CURRENT.writeOrdinal(out_stream, true);
+      BufferDataOutputStream out_stream =
+          new BufferDataOutputStream(
+              services.getSerializer().getDataSerializer().getVersionForOrdinalOrCurrent(version));
+      SerializationVersion.writeOrdinal(out_stream,
+          SerializationVersion.getCurrentVersion().ordinal(), true);
       if (encrypt != null) {
         out_stream.writeBoolean(true);
         writeEncryptedMessage(gfmsg, dst, version, out_stream);
@@ -883,11 +885,11 @@ public class JGroupsMessenger implements Messenger {
   }
 
   void writeEncryptedMessage(GMSMessage gfmsg, GMSMember recipient, short version,
-      HeapDataOutputStream out)
+      BufferDataOutputStream out)
       throws Exception {
     long start = services.getStatistics().startUDPMsgEncryption();
     try {
-      InternalDataSerializer.writeDSFIDHeader(gfmsg.getDSFID(), out);
+      services.getSerializer().writeDSFIDHeader(gfmsg.getDSFID(), out);
       byte[] pk = null;
       int requestId = 0;
       GMSMember pkMbr = null;
@@ -912,11 +914,12 @@ public class JGroupsMessenger implements Messenger {
       }
       out.writeInt(requestId);
       if (pk != null) {
-        InternalDataSerializer.writeByteArray(pk, out);
+        StaticSerialization.writeByteArray(pk, out);
       }
 
-      HeapDataOutputStream out_stream =
-          new HeapDataOutputStream(Version.fromOrdinalOrCurrent(version));
+      BufferDataOutputStream out_stream =
+          new BufferDataOutputStream(
+              services.getSerializer().getDataSerializer().getVersionForOrdinalOrCurrent(version));
       byte[] messageBytes = serializeMessage(gfmsg, out_stream);
 
       if (pkMbr != null) {
@@ -926,7 +929,7 @@ public class JGroupsMessenger implements Messenger {
         // using cluster secret key
         messageBytes = encrypt.encryptData(messageBytes);
       }
-      InternalDataSerializer.writeByteArray(messageBytes, out);
+      StaticSerialization.writeByteArray(messageBytes, out);
     } finally {
       services.getStatistics().endUDPMsgEncryption(start);
     }
@@ -951,11 +954,13 @@ public class JGroupsMessenger implements Messenger {
     return requestId;
   }
 
-  byte[] serializeMessage(GMSMessage gfmsg, HeapDataOutputStream out_stream)
+  byte[] serializeMessage(GMSMessage gfmsg, BufferDataOutputStream out_stream)
       throws IOException {
     GMSMember m = this.localAddress;
-    m.writeEssentialData(out_stream);
-    DataSerializer.writeObject(services.getManager().unwrapMessage(gfmsg), out_stream);
+    m.writeEssentialData(out_stream,
+        services.getSerializer().createSerializationContext(out_stream));
+    services.getSerializer().getDataSerializer()
+        .writeObject(services.getManager().unwrapMessage(gfmsg), out_stream);
 
     return out_stream.toByteArray();
   }
@@ -1005,8 +1010,9 @@ public class JGroupsMessenger implements Messenger {
 
       short ordinal = SerializationVersion.readOrdinal(dis);
 
-      if (ordinal < Version.CURRENT_ORDINAL) {
-        dis = new VersionedDataInputStream(dis, Version.fromOrdinalNoThrow(ordinal, true));
+      if (ordinal < SerializationVersion.getCurrentVersion().ordinal()) {
+        dis = new VersionedDataInputStream(dis,
+            services.getSerializer().getDataSerializer().getVersionForOrdinalOrCurrent(ordinal));
       }
 
       // read
@@ -1055,7 +1061,7 @@ public class JGroupsMessenger implements Messenger {
   @SuppressWarnings("resource")
   GMSMessage readEncryptedMessage(DataInputStream dis, short ordinal,
       GMSEncrypt encryptLocal) throws Exception {
-    int dfsid = InternalDataSerializer.readDSFIDHeader(dis);
+    int dfsid = services.getSerializer().readDSFIDHeader(dis);
     int requestId = dis.readInt();
     long start = services.getStatistics().startUDPMsgDecryption();
     try {
@@ -1082,12 +1088,12 @@ public class JGroupsMessenger implements Messenger {
       byte[] pk = null;
 
       if (readPK) {
-        pk = InternalDataSerializer.readByteArray(dis);
-        data = InternalDataSerializer.readByteArray(dis);
+        pk = StaticSerialization.readByteArray(dis);
+        data = StaticSerialization.readByteArray(dis);
         // using prefixed pk from sender
         data = encryptLocal.decryptData(data, pk);
       } else {
-        data = InternalDataSerializer.readByteArray(dis);
+        data = StaticSerialization.readByteArray(dis);
         // from cluster key
         if (pkMbr != null) {
           // using member public key
@@ -1101,8 +1107,9 @@ 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));
+        if (ordinal < SerializationVersion.getCurrentVersion().ordinal()) {
+          in = new VersionedDataInputStream(in,
+              services.getSerializer().getDataSerializer().getVersionForOrdinalOrCurrent(ordinal));
         }
 
         GMSMessage result = deserializeMessage(in, ordinal);
@@ -1125,8 +1132,8 @@ public class JGroupsMessenger implements Messenger {
   GMSMessage deserializeMessage(DataInputStream in, short ordinal)
       throws ClassNotFoundException, IOException {
     GMSMember m = new GMSMember();
-    m.readEssentialData(in);
-    GMSMessage result = services.getManager().wrapMessage(DataSerializer.readObject(in));
+    m.readEssentialData(in, services.getSerializer().createSerializationContext(in));
+    GMSMessage result = services.getManager().wrapMessage(services.getSerializer().readDSFID(in));
 
     setSender(result, m, ordinal);
 
@@ -1144,7 +1151,10 @@ public class JGroupsMessenger implements Messenger {
           // get the multicast message digest and pass it with the join response
           Digest digest = (Digest) this.myChannel.getProtocolStack().getTopProtocol()
               .down(Event.GET_DIGEST_EVT);
-          HeapDataOutputStream hdos = new HeapDataOutputStream(500, Version.CURRENT);
+          BufferDataOutputStream hdos = new BufferDataOutputStream(500,
+              services.getSerializer().getDataSerializer()
+                  .getVersionForOrdinalOrCurrent(
+                      SerializationVersion.getCurrentVersion().ordinal()));
           try {
             digest.writeTo(hdos);
           } catch (Exception e) {
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
index de0a549..c217dc8 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/streaming/StreamingOperation.java
@@ -59,6 +59,7 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PartitionedRegionQueryEvaluator;
 import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
@@ -399,14 +400,16 @@ public abstract class StreamingOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
     }
 
@@ -500,9 +503,10 @@ public abstract class StreamingOperation {
 
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       int n;
-      super.fromData(in);
+      super.fromData(in, context);
       n = in.readInt();
       this.msgNum = in.readInt();
       this.lastMsg = in.readBoolean();
@@ -583,8 +587,9 @@ public abstract class StreamingOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       if (this.chunkStream == null) {
         out.writeInt(-1);
       } else {
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 7aeecfe..8085c3d 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
@@ -400,6 +400,7 @@ 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.internal.serialization.SerializationContext;
 import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
 import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfileMessage;
 import org.apache.geode.management.internal.JmxManagerLocatorRequest;
@@ -431,12 +432,14 @@ public class DSFIDFactory implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     throw new UnsupportedOperationException();
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     throw new UnsupportedOperationException();
   }
 
@@ -1054,21 +1057,21 @@ public class DSFIDFactory implements DataSerializableFixedID {
   private static DataSerializableFixedID readDestroyOnDataStore(DataInput in)
       throws IOException, ClassNotFoundException {
     DataSerializableFixedID serializable = new DestroyRegionOnDataStoreMessage();
-    serializable.fromData(in);
+    serializable.fromData(in, null);
     return serializable;
   }
 
   private static DataSerializableFixedID readNullToken(DataInput in)
       throws IOException, ClassNotFoundException {
     DataSerializableFixedID serializable = (NullToken) IndexManager.NULL;
-    serializable.fromData(in);
+    serializable.fromData(in, null);
     return serializable;
   }
 
   private static DataSerializableFixedID readConfigurationResponse(DataInput in)
       throws IOException, ClassNotFoundException {
     DataSerializableFixedID serializable = new ConfigurationResponse();
-    serializable.fromData(in);
+    serializable.fromData(in, null);
     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 692a213..91e7b3f 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
@@ -22,6 +22,7 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Abstract class for subclasses that want to be Externalizable in addition to being
@@ -36,18 +37,20 @@ public abstract class ExternalizableDSFID implements DataSerializableFixedID, Ex
   public abstract int getDSFID();
 
   @Override
-  public abstract void toData(DataOutput out) throws IOException;
+  public abstract void toData(DataOutput out,
+      SerializationContext context) throws IOException;
 
   @Override
-  public abstract void fromData(DataInput in) throws IOException, ClassNotFoundException;
+  public abstract void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException;
 
   @Override
   public void writeExternal(ObjectOutput out) throws IOException {
-    toData(out);
+    toData(out, null);
   }
 
   @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-    fromData(in);
+    fromData(in, null);
   }
 }
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 f99f371..3bdb8bc 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
@@ -23,6 +23,7 @@ import java.nio.channels.SocketChannel;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
+import org.apache.geode.internal.serialization.StaticSerialization;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
 /**
@@ -379,7 +380,7 @@ public class HeapDataOutputStream extends
       final int preArraySize = size();
       DataSerializer.writeObject(v, this);
       int arraySize = size() - preArraySize;
-      sizeBuf.put(sizePos, InternalDataSerializer.INT_ARRAY_LEN);
+      sizeBuf.put(sizePos, StaticSerialization.INT_ARRAY_LEN);
       sizeBuf.putInt(sizePos + 1, arraySize);
     }
   }
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 af742fe..a1990f9 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
@@ -112,8 +112,11 @@ 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.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersion;
 import org.apache.geode.internal.serialization.SerializationVersions;
+import org.apache.geode.internal.serialization.SerializerPlugin;
+import org.apache.geode.internal.serialization.StaticSerialization;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.pdx.NonPortableClassException;
@@ -140,14 +143,6 @@ import org.apache.geode.pdx.internal.TypeRegistry;
  * @since GemFire 3.5
  */
 public abstract class InternalDataSerializer extends DataSerializer {
-  // array is null
-  public static final byte NULL_ARRAY = -1;
-  /**
-   * array len encoded as int in next 4 bytes
-   *
-   * @since GemFire 5.7
-   */
-  public static final byte INT_ARRAY_LEN = -3;
   public static final boolean LOAD_CLASS_EACH_TIME =
       Boolean.getBoolean(DistributionConfig.GEMFIRE_PREFIX + "loadClassOnEveryDeserialization");
   private static final Logger logger = LogService.getLogger();
@@ -246,27 +241,11 @@ public abstract class InternalDataSerializer extends DataSerializer {
   private static final ConcurrentHashMap<String, SerializerAttributesHolder> supportedClassesToHolders =
       new ConcurrentHashMap<>();
   private static final Object listenersSync = new Object();
-  private static final byte TIME_UNIT_NANOSECONDS = -1;
-  private static final byte TIME_UNIT_MICROSECONDS = -2;
-  private static final byte TIME_UNIT_MILLISECONDS = -3;
-  private static final byte TIME_UNIT_SECONDS = -4;
   @MakeNotStatic
   private static final ConcurrentMap<Integer, String> dsfidToClassMap =
       logger.isTraceEnabled(LogMarker.SERIALIZER_WRITE_DSFID_VERBOSE) ? new ConcurrentHashMap<>()
           : null;
-  /**
-   * array len encoded as unsigned short in next 2 bytes
-   *
-   * @since GemFire 5.7
-   */
-  private static final byte SHORT_ARRAY_LEN = -2;
-  private static final int MAX_BYTE_ARRAY_LEN = (byte) -4 & 0xFF;
   private static final ThreadLocal<Boolean> pdxSerializationInProgress = new ThreadLocal<>();
-  // Variable Length long encoded as int in next 4 bytes
-  private static final byte INT_VL = 126;
-  // Variable Length long encoded as long in next 8 bytes
-  private static final byte LONG_VL = 127;
-  private static final int MAX_BYTE_VL = 125;
   @MakeNotStatic
   private static final CopyOnWriteHashMap<String, WeakReference<Class<?>>> classCache =
       LOAD_CLASS_EACH_TIME ? null : new CopyOnWriteHashMap<>();
@@ -294,7 +273,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
   @MakeNotStatic
   private static OldClientSupportService oldClientSupportService;
 
-  private static final DSFIDSerializer dsfidSerializer = new DSFIDSerializer();
+  private static final DSFIDSerializer dsfidSerializer;
 
   private static DSFIDFactory dsfidFactory;
 
@@ -306,6 +285,22 @@ public abstract class InternalDataSerializer extends DataSerializer {
   private static volatile Set<RegistrationListener> listeners = new HashSet<>();
 
   static {
+    dsfidSerializer = new DSFIDSerializer(new SerializerPlugin() {
+      @Override
+      public void writeObject(Object obj, DataOutput output) throws IOException {
+        InternalDataSerializer.writeObject(obj, output);
+      }
+
+      @Override
+      public Object readObject(DataInput input) throws IOException, ClassNotFoundException {
+        return InternalDataSerializer.readObject(input);
+      }
+
+      @Override
+      public SerializationVersion getVersionForOrdinalOrCurrent(int ordinal) {
+        return Version.fromOrdinalOrCurrent((short) ordinal);
+      }
+    });
     initializeWellKnownSerializers();
     dsfidFactory = new DSFIDFactory(dsfidSerializer);
     dsfidFactory.registerDSFIDTypes();
@@ -676,22 +671,22 @@ public abstract class InternalDataSerializer extends DataSerializer {
         switch (timeUnit) {
           case NANOSECONDS: {
             out.writeByte(DSCODE.TIME_UNIT.toByte());
-            out.writeByte(TIME_UNIT_NANOSECONDS);
+            out.writeByte(StaticSerialization.TIME_UNIT_NANOSECONDS);
             break;
           }
           case MICROSECONDS: {
             out.writeByte(DSCODE.TIME_UNIT.toByte());
-            out.writeByte(TIME_UNIT_MICROSECONDS);
+            out.writeByte(StaticSerialization.TIME_UNIT_MICROSECONDS);
             break;
           }
           case MILLISECONDS: {
             out.writeByte(DSCODE.TIME_UNIT.toByte());
-            out.writeByte(TIME_UNIT_MILLISECONDS);
+            out.writeByte(StaticSerialization.TIME_UNIT_MILLISECONDS);
             break;
           }
           case SECONDS: {
             out.writeByte(DSCODE.TIME_UNIT.toByte());
-            out.writeByte(TIME_UNIT_SECONDS);
+            out.writeByte(StaticSerialization.TIME_UNIT_SECONDS);
             break;
           }
           // handles all other timeunits
@@ -1484,13 +1479,13 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
   public static void writeDSFID(DataSerializableFixedID o, int dsfid, DataOutput out)
       throws IOException {
-    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 {
+      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);
       invokeToData(o, out);
     } catch (IOException | CancelException | ToDataException | GemFireRethrowable io) {
       // Note: this is not a user code toData but one from our
@@ -1905,16 +1900,16 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
     TimeUnit unit;
     switch (type) {
-      case TIME_UNIT_NANOSECONDS:
+      case StaticSerialization.TIME_UNIT_NANOSECONDS:
         unit = TimeUnit.NANOSECONDS;
         break;
-      case TIME_UNIT_MICROSECONDS:
+      case StaticSerialization.TIME_UNIT_MICROSECONDS:
         unit = TimeUnit.MICROSECONDS;
         break;
-      case TIME_UNIT_MILLISECONDS:
+      case StaticSerialization.TIME_UNIT_MILLISECONDS:
         unit = TimeUnit.MILLISECONDS;
         break;
-      case TIME_UNIT_SECONDS:
+      case StaticSerialization.TIME_UNIT_SECONDS:
         unit = TimeUnit.SECONDS;
         break;
       default:
@@ -2270,12 +2265,12 @@ public abstract class InternalDataSerializer extends DataSerializer {
    * @param out the output stream.
    */
   public static void invokeToData(Object ds, DataOutput out) throws IOException {
-    boolean isDSFID = ds instanceof DataSerializableFixedID;
-    if (isDSFID) {
-      dsfidSerializer.invokeToData(ds, out);
-      return;
-    }
     try {
+      boolean isDSFID = ds instanceof DataSerializableFixedID;
+      if (isDSFID) {
+        dsfidSerializer.invokeToData(ds, out);
+        return;
+      }
       boolean invoked = false;
       Version v = InternalDataSerializer.getVersionForDataStreamOrNull(out);
 
@@ -2471,28 +2466,28 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
   public static void writeArrayLength(int len, DataOutput out) throws IOException {
     if (len == -1) {
-      out.writeByte(NULL_ARRAY);
-    } else if (len <= MAX_BYTE_ARRAY_LEN) {
+      out.writeByte(StaticSerialization.NULL_ARRAY);
+    } else if (len <= StaticSerialization.MAX_BYTE_ARRAY_LEN) {
       out.writeByte(len);
     } else if (len <= 0xFFFF) {
-      out.writeByte(SHORT_ARRAY_LEN);
+      out.writeByte(StaticSerialization.SHORT_ARRAY_LEN);
       out.writeShort(len);
     } else {
-      out.writeByte(INT_ARRAY_LEN);
+      out.writeByte(StaticSerialization.INT_ARRAY_LEN);
       out.writeInt(len);
     }
   }
 
   public static int readArrayLength(DataInput in) throws IOException {
     byte code = in.readByte();
-    if (code == NULL_ARRAY) {
+    if (code == StaticSerialization.NULL_ARRAY) {
       return -1;
     } else {
       int result = ubyteToInt(code);
-      if (result > MAX_BYTE_ARRAY_LEN) {
-        if (code == SHORT_ARRAY_LEN) {
+      if (result > StaticSerialization.MAX_BYTE_ARRAY_LEN) {
+        if (code == StaticSerialization.SHORT_ARRAY_LEN) {
           return in.readUnsignedShort();
-        } else if (code == INT_ARRAY_LEN) {
+        } else if (code == StaticSerialization.INT_ARRAY_LEN) {
           return in.readInt();
         } else {
           throw new IllegalStateException("unexpected array length code=" + code);
@@ -2577,21 +2572,6 @@ public abstract class InternalDataSerializer extends DataSerializer {
     return in.readUTF();
   }
 
-  @MakeNotStatic("not tied to the cache lifecycle")
-  private static final ThreadLocalByteArrayCache threadLocalByteArrayCache =
-      new ThreadLocalByteArrayCache(65535);
-
-  /**
-   * Returns a byte array for use by the calling thread.
-   * The returned byte array may be longer than minimumLength.
-   * The byte array belongs to the calling thread but callers must
-   * be careful to not call other methods that may also use this
-   * byte array.
-   */
-  public static byte[] getThreadLocalByteArray(int minimumLength) {
-    return threadLocalByteArrayCache.get(minimumLength);
-  }
-
   private static String readStringBytesFromDataInput(DataInput dataInput, int len)
       throws IOException {
     if (logger.isTraceEnabled(LogMarker.SERIALIZER_VERBOSE)) {
@@ -2600,7 +2580,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
     if (len == 0) {
       return "";
     }
-    byte[] buf = getThreadLocalByteArray(len);
+    byte[] buf = StaticSerialization.getThreadLocalByteArray(len);
     dataInput.readFully(buf, 0, len);
     return new String(buf, 0, 0, len); // intentionally using deprecated constructor
   }
@@ -3100,17 +3080,17 @@ public abstract class InternalDataSerializer extends DataSerializer {
     if (data < 0) {
       Assert.fail("Data expected to be >=0 is " + data);
     }
-    if (data <= MAX_BYTE_VL) {
+    if (data <= StaticSerialization.MAX_BYTE_VL) {
       out.writeByte((byte) data);
     } else if (data <= 0x7FFF) {
       // set the sign bit to indicate a short
       out.write(((int) data >>> 8 | 0x80) & 0xFF);
       out.write((int) data & 0xFF);
     } else if (data <= Integer.MAX_VALUE) {
-      out.writeByte(INT_VL);
+      out.writeByte(StaticSerialization.INT_VL);
       out.writeInt((int) data);
     } else {
-      out.writeByte(LONG_VL);
+      out.writeByte(StaticSerialization.LONG_VL);
       out.writeLong(data);
     }
   }
@@ -3127,9 +3107,9 @@ public abstract class InternalDataSerializer extends DataSerializer {
       result = code & 0x7F;
       result <<= 8;
       result |= in.readByte() & 0xFF;
-    } else if (code <= MAX_BYTE_VL) {
+    } else if (code <= StaticSerialization.MAX_BYTE_VL) {
       result = code;
-    } else if (code == INT_VL) {
+    } else if (code == StaticSerialization.INT_VL) {
       result = in.readInt();
     } else {
       result = in.readLong();
@@ -3602,16 +3582,18 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeNonPrimitiveClassName(this.className, out);
       out.writeInt(this.id);
       DataSerializer.writeObject(this.eventId, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       InternalDataSerializer.checkIn(in);
       this.className = DataSerializer.readNonPrimitiveClassName(in);
       this.id = in.readInt();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java b/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java
index dcdabab..f544f54 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/InternalInstantiator.java
@@ -45,6 +45,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientInstantiatorMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Contains the implementation of {@link org.apache.geode.Instantiator} registration and
@@ -807,8 +808,9 @@ public class InternalInstantiator {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeNonPrimitiveClassName(instantiatorClass.getName(), out);
       DataSerializer.writeNonPrimitiveClassName(instantiatedClass.getName(), out);
       out.writeInt(id);
@@ -825,9 +827,10 @@ public class InternalInstantiator {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
 
-      super.fromData(in);
+      super.fromData(in, context);
       instantiatorClassName = DataSerializer.readNonPrimitiveClassName(in);
       instantiatedClassName = DataSerializer.readNonPrimitiveClassName(in);
       if (CacheClientNotifier.getInstance() != null) {
@@ -917,15 +920,17 @@ public class InternalInstantiator {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
-      context = ClientProxyMembershipID.readCanonicalized(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
+      this.context = ClientProxyMembershipID.readCanonicalized(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
-      DataSerializer.writeObject(context, out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
+      DataSerializer.writeObject(this.context, out);
     }
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/Version.java b/geode-core/src/main/java/org/apache/geode/internal/Version.java
index 71243ea..b92d660 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/Version.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/Version.java
@@ -295,6 +295,11 @@ public class Version extends SerializationVersion {
   public static final Version TEST_VERSION = new Version("TEST", "VERSION", (byte) 0, (byte) 0,
       (byte) 0, (byte) 0, validOrdinalForTesting);
 
+  static {
+    /* establish the serialization version for DSFID serialization */
+    SerializationVersion.setCurrentVersion(CURRENT);
+  }
+
   /** Creates a new instance of <code>Version</code> */
   private Version(String product, String name, byte major, byte minor, byte release, byte patch,
       byte 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 9f4a71c..a82d8d8 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
@@ -24,6 +24,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A PooledDistributionMessage for notifying admin members about changes in Client Membership
@@ -94,16 +95,18 @@ public class ClientMembershipMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.clientId, out);
     DataSerializer.writeString(this.clientHost, out);
     out.writeInt(this.eventType);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
 
     this.clientId = DataSerializer.readString(in);
     this.clientHost = DataSerializer.readString(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java
index 5414cf8..5e0a9af 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerRequest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.admin.GemFireHealthConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to add a health listener.
@@ -68,14 +69,16 @@ public class AddHealthListenerRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.cfg, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.cfg = (GemFireHealthConfig) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java
index c6c0d22..c33f331 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddHealthListenerResponse.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.admin.GemFireHealthConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * The response to adding a health listener.
@@ -57,14 +58,16 @@ public class AddHealthListenerResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.listenerId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.listenerId = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java
index 15adf6a..a919635 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerRequest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.admin.Stat;
 import org.apache.geode.internal.admin.StatResource;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to add a statistic listener.
@@ -62,15 +63,17 @@ public class AddStatListenerRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeLong(this.resourceId);
     out.writeUTF(this.statName);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.resourceId = in.readLong();
     this.statName = in.readUTF();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java
index 0eed539..54fb91c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AddStatListenerResponse.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.statistics.GemFireStatSampler;
 
 /**
@@ -59,14 +60,16 @@ public class AddStatListenerResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.listenerId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.listenerId = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleDisconnectMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleDisconnectMessage.java
index e37c109..903d855 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleDisconnectMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleDisconnectMessage.java
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.statistics.GemFireStatSampler;
 
 /**
@@ -95,16 +96,18 @@ public class AdminConsoleDisconnectMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeBoolean(alertListenerExpected);
     out.writeBoolean(crashed);
     DataSerializer.writeString(reason, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     alertListenerExpected = in.readBoolean();
     crashed = in.readBoolean();
     reason = DataSerializer.readString(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleMessage.java
index 6b46835..1d3ff84 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminConsoleMessage.java
@@ -22,6 +22,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.admin.Alert;
 import org.apache.geode.internal.alerting.AlertLevel;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to let it know that the sender is an
@@ -55,14 +56,16 @@ public class AdminConsoleMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(level);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     level = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java
index b709cf5..9f548a0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminFailureResponse.java
@@ -20,6 +20,7 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A response to a failed request.
@@ -49,14 +50,16 @@ public class AdminFailureResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.cause, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.cause = DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java
index badaee9..d68f760 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminRequest.java
@@ -30,6 +30,7 @@ import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to make an administration request.
@@ -150,15 +151,17 @@ public abstract class AdminRequest extends PooledDistributionMessage {
   protected abstract AdminResponse createResponse(DistributionManager dm);
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.msgId);
     DataSerializer.writeString(this.modifiedClasspath, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.msgId = in.readInt();
     this.modifiedClasspath = DataSerializer.readString(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminResponse.java
index 8ea78dd..51e53bb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AdminResponse.java
@@ -24,6 +24,7 @@ import org.apache.geode.distributed.internal.AdminMessageType;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent as a reply to a {@link AdminRequest}.
@@ -59,16 +60,18 @@ public abstract class AdminResponse extends HighPriorityDistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     // System.out.println("BEGIN AdminResponse toData");
-    super.toData(out);
+    super.toData(out, context);
     out.writeInt(this.msgId);
     // System.out.println("END AdminResponse toData");
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.msgId = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertLevelChangeMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertLevelChangeMessage.java
index 5a7414d..f551ad3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertLevelChangeMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertLevelChangeMessage.java
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.internal.SerialDistributionMessage;
 import org.apache.geode.internal.alerting.AlertLevel;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to make members of the distributed system aware that a manager agent wants
@@ -66,14 +67,16 @@ public class AlertLevelChangeMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(newLevel);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     newLevel = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertListenerMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertListenerMessage.java
index e471fff..23a6688 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertListenerMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertListenerMessage.java
@@ -31,6 +31,7 @@ import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.distributed.internal.ResourceEvent;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.Alert;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.management.internal.AlertDetails;
 
 /**
@@ -129,8 +130,9 @@ public class AlertListenerMessage extends PooledDistributionMessage implements A
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(alertLevel);
     DataSerializer.writeObject(date, out);
     DataSerializer.writeString(connectionName, out);
@@ -141,8 +143,9 @@ public class AlertListenerMessage extends PooledDistributionMessage implements A
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     alertLevel = in.readInt();
     date = DataSerializer.readObject(in);
     connectionName = DataSerializer.readString(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertsNotificationMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertsNotificationMessage.java
index 69068b5..2eaf366 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertsNotificationMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AlertsNotificationMessage.java
@@ -24,6 +24,7 @@ import org.apache.geode.admin.jmx.internal.StatAlertsAggregator;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.admin.StatAlert;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Distribution message to be sent to alert aggregator {@link StatAlertsAggregator} It wraps alert
@@ -38,14 +39,16 @@ public class AlertsNotificationMessage extends PooledDistributionMessage {
   public AlertsNotificationMessage() {}
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObjectArray(this._alerts, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this._alerts = (StatAlert[]) DataSerializer.readObjectArray(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AppCacheSnapshotMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AppCacheSnapshotMessage.java
index 2a62534..ed8e1ad 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AppCacheSnapshotMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/AppCacheSnapshotMessage.java
@@ -24,6 +24,7 @@ import org.apache.geode.GemFireCacheException;
 import org.apache.geode.cache.CacheException;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class AppCacheSnapshotMessage extends RegionAdminMessage {
   // private int numResults;
@@ -107,15 +108,17 @@ public class AppCacheSnapshotMessage extends RegionAdminMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     // out.writeInt(numResults);
     out.writeInt(snapshotId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     // this.numResults = in.readInt();
     this.snapshotId = in.readInt();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java
index 7041fd7..f04af02 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerRequest.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.admin.CacheInfo;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a VM that hosts a cache to perform an administrative operation on one
@@ -170,8 +171,9 @@ public class BridgeServerRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.cacheId);
     out.writeInt(this.operation);
     DataSerializer.writeObject(this.bridgeInfo, out);
@@ -179,8 +181,9 @@ public class BridgeServerRequest extends AdminRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.cacheId = in.readInt();
     this.operation = in.readInt();
     this.bridgeInfo = (RemoteBridgeServer) DataSerializer.readObject(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java
index 5aaeb9a..02007a4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/BridgeServerResponse.java
@@ -26,6 +26,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent in response to a {@link BridgeServerResponse}. It perform an operation on
@@ -148,15 +149,17 @@ public class BridgeServerResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.bridgeInfo, out);
     DataSerializer.writeObject(this.exception, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.bridgeInfo = DataSerializer.readObject(in);
     this.exception = DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java
index c1a140b..da1a00a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigRequest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.admin.CacheInfo;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get information on its current
@@ -64,16 +65,18 @@ public class CacheConfigRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeByte(this.attributeCode);
     out.writeInt(this.newValue);
     out.writeInt(this.cacheId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.attributeCode = in.readByte();
     this.newValue = in.readInt();
     this.cacheId = in.readInt();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java
index 0aae5ff..5a81f4b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheConfigResponse.java
@@ -25,6 +25,7 @@ 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.cache.InternalCache;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent in response to a {@link CacheConfigRequest}.
@@ -96,15 +97,17 @@ public class CacheConfigResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.info, out);
     DataSerializer.writeObject(this.exception, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.info = DataSerializer.readObject(in);
     this.exception = DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java
index cfc095d..c7fac94 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get information on its current
@@ -56,13 +57,15 @@ public class CacheInfoRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java
index f6191c5..3011d47 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CacheInfoResponse.java
@@ -24,6 +24,7 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent in response to a {@link CacheInfoRequest}.
@@ -60,14 +61,16 @@ public class CacheInfoResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.info, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.info = (RemoteCacheInfo) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java
index 14489df..80d72dd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get rid of a previously added
@@ -57,14 +58,16 @@ public class CancelStatListenerRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.listenerId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.listenerId = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java
index ec4d260..ab8de06 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancelStatListenerResponse.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.statistics.GemFireStatSampler;
 
 /**
@@ -54,13 +55,15 @@ public class CancelStatListenerResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancellationMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancellationMessage.java
index 8a9ecb8..d599edf 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancellationMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CancellationMessage.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 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.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to cancel an admin request
@@ -48,14 +49,16 @@ public class CancellationMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(msgToCancel);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     msgToCancel = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ChangeRefreshIntervalMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ChangeRefreshIntervalMessage.java
index 725a0ab..d0e81b2 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ChangeRefreshIntervalMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ChangeRefreshIntervalMessage.java
@@ -22,6 +22,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.admin.StatAlertsManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Distribution message, sets refresh time interval in member's alerts manager
@@ -47,14 +48,16 @@ public class ChangeRefreshIntervalMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeLong(_refreshInterval);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     _refreshInterval = in.readLong();
   }
 
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 8e36bc4..077841a 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
@@ -27,6 +27,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Bean class act as container for client stats
@@ -223,7 +224,8 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writePrimitiveLong(numOfGets, out);
     DataSerializer.writePrimitiveLong(numOfPuts, out);
     DataSerializer.writePrimitiveLong(numOfMisses, out);
@@ -235,7 +237,8 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
     DataSerializer.writeHashMap((poolStats), out);
   }
 
-  public void toDataPre_GFE_8_0_0_0(DataOutput out) throws IOException {
+  public void toDataPre_GFE_8_0_0_0(DataOutput out, SerializationContext context)
+      throws IOException {
     DataSerializer.writePrimitiveInt((int) numOfGets, out);
     DataSerializer.writePrimitiveInt((int) numOfPuts, out);
     DataSerializer.writePrimitiveInt((int) numOfMisses, out);
@@ -246,13 +249,15 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
     DataSerializer.writeDate(updateTime, out);
   }
 
-  public void toDataPre_GEODE_1_9_0_0(DataOutput out) throws IOException {
-    toDataPre_GFE_8_0_0_0(out);
+  public void toDataPre_GEODE_1_9_0_0(DataOutput out, SerializationContext context)
+      throws IOException {
+    toDataPre_GFE_8_0_0_0(out, context);
     DataSerializer.writeHashMap((poolStats), out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.numOfGets = DataSerializer.readPrimitiveLong(in);
     this.numOfPuts = DataSerializer.readPrimitiveLong(in);
     this.numOfMisses = DataSerializer.readPrimitiveLong(in);
@@ -264,7 +269,8 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
     this.poolStats = DataSerializer.readHashMap(in);
   }
 
-  public void fromDataPre_GFE_8_0_0_0(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromDataPre_GFE_8_0_0_0(DataInput in, SerializationContext context)
+      throws IOException, ClassNotFoundException {
     this.numOfGets = DataSerializer.readPrimitiveInt(in);
     this.numOfPuts = DataSerializer.readPrimitiveInt(in);
     this.numOfMisses = DataSerializer.readPrimitiveInt(in);
@@ -275,8 +281,9 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
     this.updateTime = DataSerializer.readDate(in);
   }
 
-  public void fromDataPre_GEODE_1_9_0_0(DataInput in) throws IOException, ClassNotFoundException {
-    fromDataPre_GFE_8_0_0_0(in);
+  public void fromDataPre_GEODE_1_9_0_0(DataInput in, SerializationContext context)
+      throws IOException, ClassNotFoundException {
+    fromDataPre_GFE_8_0_0_0(in, context);
     this.poolStats = DataSerializer.readHashMap(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java
index 1e71609..8f7e5ed 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactRequest.java
@@ -37,6 +37,7 @@ import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.internal.cache.DiskStoreImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.util.ArrayUtils;
 
 /**
@@ -100,13 +101,15 @@ public class CompactRequest extends CliLegacyMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactResponse.java
index ec6b8ae..c068621 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/CompactResponse.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.persistence.PersistentID;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class CompactResponse extends AdminResponse {
   private HashSet<PersistentID> persistentIds;
@@ -38,14 +39,16 @@ public class CompactResponse extends AdminResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     persistentIds = DataSerializer.readHashSet(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeHashSet(persistentIds, out);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyEntryMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyEntryMessage.java
index 0d521bd..e913b19 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyEntryMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyEntryMessage.java
@@ -26,6 +26,7 @@ import org.apache.geode.cache.ExpirationAction;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to let it know that the sender is an
@@ -72,15 +73,17 @@ public class DestroyEntryMessage extends RegionAdminMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.action, out);
     DataSerializer.writeObject(this.key, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.action = (ExpirationAction) DataSerializer.readObject(in);
     this.key = DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyRegionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyRegionMessage.java
index 44180d2..151a9a7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyRegionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DestroyRegionMessage.java
@@ -26,6 +26,7 @@ import org.apache.geode.cache.ExpirationAction;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to let it know that the sender is an
@@ -70,14 +71,16 @@ public class DestroyRegionMessage extends RegionAdminMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.action, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.action = (ExpirationAction) DataSerializer.readObject(in);
   }
 
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 9d1fd7f..a4733e1 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
@@ -21,6 +21,7 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get information about a durable
@@ -65,15 +66,17 @@ public class DurableClientInfoRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.durableId, out);
     out.writeInt(this.action);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.durableId = DataSerializer.readString(in);
     this.action = in.readInt();
     setFriendlyName(this);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java
index 98837c5..55eca3e 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DurableClientInfoResponse.java
@@ -24,6 +24,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.CacheServerImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent in response to a {@link DurableClientInfoRequest}.
@@ -73,14 +74,16 @@ public class DurableClientInfoResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeBoolean(this.returnVal);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.returnVal = in.readBoolean();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java
index fea0cd2..6c99057 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class FetchDistLockInfoRequest extends AdminRequest {
   /**
@@ -51,13 +52,15 @@ public class FetchDistLockInfoRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java
index 093cf62..a4a99c8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchDistLockInfoResponse.java
@@ -31,6 +31,7 @@ import org.apache.geode.distributed.internal.locks.DLockService;
 import org.apache.geode.distributed.internal.locks.DLockToken;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.DLockInfo;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class FetchDistLockInfoResponse extends AdminResponse {
   // instance variables
@@ -76,14 +77,16 @@ public class FetchDistLockInfoResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.lockInfos, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.lockInfos = (DLockInfo[]) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java
index 0de607c..fc08707 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisRequest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.admin.GemFireHealth;
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to fetch its health diagnosis
@@ -62,15 +63,17 @@ public class FetchHealthDiagnosisRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.id);
     DataSerializer.writeObject(this.healthCode, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     int i = in.readInt();
     GemFireHealth.Health oHC = (GemFireHealth.Health) DataSerializer.readObject(in);
     init_(i, oHC);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java
index 73158a1..7c84611 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHealthDiagnosisResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.admin.GemFireHealth;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.HealthMonitor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * The response to fetching the health diagnosis.
@@ -63,14 +64,16 @@ public class FetchHealthDiagnosisResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeStringArray(this.diagnosis, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.diagnosis = DataSerializer.readStringArray(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java
index fa89953..b72774a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current information
@@ -52,13 +53,15 @@ public class FetchHostRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java
index 533972e..2602959 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchHostResponse.java
@@ -33,6 +33,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.net.SocketCreator;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -143,8 +144,9 @@ public class FetchHostResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.name, out);
     DataSerializer.writeObject(this.host, out);
     DataSerializer.writeObject(this.geodeHomeDir, out);
@@ -154,8 +156,9 @@ public class FetchHostResponse extends AdminResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.name = DataSerializer.readString(in);
     this.host = (InetAddress) DataSerializer.readObject(in);
     this.geodeHomeDir = (File) DataSerializer.readObject(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java
index 09b0422..943719b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class FetchResourceAttributesRequest extends AdminRequest {
 
@@ -48,14 +49,16 @@ public class FetchResourceAttributesRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeLong(resourceUniqueId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     resourceUniqueId = in.readLong();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java
index 0124753..4398b8e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchResourceAttributesResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.StatisticsType;
 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.serialization.SerializationContext;
 
 public class FetchResourceAttributesResponse extends AdminResponse {
 
@@ -68,14 +69,16 @@ public class FetchResourceAttributesResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(stats, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     stats = (RemoteStat[]) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java
index e2db098..e2c89ae 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsRequest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class FetchStatsRequest extends AdminRequest {
 
@@ -52,14 +53,16 @@ public class FetchStatsRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.statisticsTypeName, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.statisticsTypeName = DataSerializer.readString(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java
index 4cfbd76..547bb45 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchStatsResponse.java
@@ -24,6 +24,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.Statistics;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Provides a response of remote statistic resources for a {@code FetchStatsRequest}
@@ -69,14 +70,16 @@ public class FetchStatsResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(stats, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     stats = (RemoteStatResource[]) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java
index 04a03b9..b03b6a7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current
@@ -59,13 +60,15 @@ public class FetchSysCfgRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java
index c70a8c5..fb492fd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FetchSysCfgResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.RuntimeDistributionConfigImpl;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Config;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current {@link Config}.
@@ -59,14 +60,16 @@ public class FetchSysCfgResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.sc, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.sc = (Config) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FlushAppCacheSnapshotMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FlushAppCacheSnapshotMessage.java
index 6bd075d..1432c21 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FlushAppCacheSnapshotMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/FlushAppCacheSnapshotMessage.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -53,13 +54,15 @@ public class FlushAppCacheSnapshotMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/HealthListenerMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/HealthListenerMessage.java
index 184366d..470cebf 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/HealthListenerMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/HealthListenerMessage.java
@@ -25,6 +25,7 @@ import org.apache.geode.admin.GemFireHealth;
 import org.apache.geode.distributed.internal.AdminMessageType;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular agent who was registered a health listener on a GemFireVM.
@@ -66,15 +67,17 @@ public class HealthListenerMessage extends PooledDistributionMessage implements
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.listenerId);
     DataSerializer.writeObject(this.status, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.listenerId = in.readInt();
     this.status = (GemFireHealth.Health) DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java
index bb9f6dd..188bacd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current license info.
@@ -54,13 +55,15 @@ public class LicenseInfoRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java
index ed2dee6..e61d9b3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/LicenseInfoResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent in response to a {@link LicenseInfoRequest}.
@@ -56,14 +57,16 @@ public class LicenseInfoResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.p, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.p = (Properties) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java
index 1f4ab36..9bff7c1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsRequest.java
@@ -37,6 +37,7 @@ import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A request to all members for any persistent members that they are waiting for. TODO prpersist -
@@ -102,8 +103,9 @@ public class MissingPersistentIDsRequest extends CliLegacyMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsResponse.java
index 869835f..5afe088 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/MissingPersistentIDsResponse.java
@@ -25,6 +25,7 @@ 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.cache.persistence.PersistentMemberPattern;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * The MissingPersistentIdResonse we return 662 peers. This response includes this list of ids that
@@ -56,8 +57,9 @@ public class MissingPersistentIDsResponse extends AdminResponse {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     int size = in.readInt();
     missingIds = new HashSet<PersistentID>(size);
     for (int i = 0; i < size; i++) {
@@ -75,8 +77,9 @@ public class MissingPersistentIDsResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(missingIds.size());
     for (PersistentID pattern : missingIds) {
       InternalDataSerializer.invokeToData(pattern, out);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java
index a6e9b19..4de7561 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsRequest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm to request the value, stats, and attributes of a
@@ -81,15 +82,17 @@ public class ObjectDetailsRequest extends RegionAdminRequest implements Cancella
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.objName, out);
     out.writeInt(inspectionType);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.objName = DataSerializer.readObject(in);
     this.inspectionType = in.readInt();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java
index ccae14e..571b9f8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectDetailsResponse.java
@@ -31,6 +31,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.StatisticsDisabledException;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link ObjectDetailsRequest}.
@@ -106,16 +107,18 @@ public class ObjectDetailsResponse extends AdminResponse implements Cancellable
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.objectValue, out);
     DataSerializer.writeObject(this.userAttribute, out);
     DataSerializer.writeObject(this.stats, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.objectValue = DataSerializer.readObject(in);
     this.userAttribute = DataSerializer.readObject(in);
     this.stats = (RemoteCacheStatistics) DataSerializer.readObject(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java
index 64ed452..16806e1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm to request all the subregions of a given parent
@@ -76,13 +77,15 @@ public class ObjectNamesRequest extends RegionAdminRequest implements Cancellabl
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java
index 33e4648..12ed1cb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ObjectNamesResponse.java
@@ -27,6 +27,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link ObjectNamesResponse}.
@@ -86,14 +87,16 @@ public class ObjectNamesResponse extends AdminResponse implements Cancellable {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.objectNames, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.objectNames = (HashSet) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java
index 8efc34b..c328a34 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/PrepareRevokePersistentIDRequest.java
@@ -31,6 +31,7 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * An instruction to all members that they should forget about the persistent member described by
@@ -114,16 +115,18 @@ public class PrepareRevokePersistentIDRequest extends CliLegacyMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.pattern = new PersistentMemberPattern();
     InternalDataSerializer.invokeFromData(this.pattern, in);
     this.cancel = in.readBoolean();
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     InternalDataSerializer.invokeToData(this.pattern, out);
     out.writeBoolean(this.cancel);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java
index fd44f15..7c28a0a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotRequest.java
@@ -20,6 +20,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current
@@ -48,13 +49,15 @@ public class RefreshMemberSnapshotRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java
index 9e973f9..32ba18e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RefreshMemberSnapshotResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current
@@ -61,14 +62,16 @@ public class RefreshMemberSnapshotResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.snapshot, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.snapshot = DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminMessage.java
index 3989b34..e9fc1a4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminMessage.java
@@ -26,6 +26,7 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm on a distribution manager to make an administration
@@ -52,14 +53,16 @@ public abstract class RegionAdminMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.regionName, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.regionName = DataSerializer.readString(in);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminRequest.java
index 5e140c6..652a1ed 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAdminRequest.java
@@ -26,6 +26,7 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm on a distribution manager to make an administration
@@ -58,14 +59,16 @@ public abstract class RegionAdminRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.regionName, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.regionName = DataSerializer.readString(in);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java
index b3119ab..a280d45 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm to request the region statistics of a given region.
@@ -56,13 +57,15 @@ public class RegionAttributesRequest extends RegionAdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java
index 69dcfa4..128c599 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionAttributesResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link RegionAttributesResponse}.
@@ -56,14 +57,16 @@ public class RegionAttributesResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.attributes, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.attributes = (RemoteRegionAttributes) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java
index 9c104ad..0192795 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionRequest.java
@@ -24,6 +24,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.RegionAttributes;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.admin.CacheInfo;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular application to get the region for the specified path.
@@ -126,8 +127,9 @@ public class RegionRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.action);
     out.writeInt(this.cacheId);
     DataSerializer.writeString(this.path, out);
@@ -136,8 +138,9 @@ public class RegionRequest extends AdminRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.action = in.readInt();
     this.cacheId = in.readInt();
     this.path = DataSerializer.readString(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java
index 6f16aa3..7831030 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionResponse.java
@@ -29,6 +29,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.GemFireVM;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link RegionResponse}.
@@ -127,16 +128,18 @@ public class RegionResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.name, out);
     DataSerializer.writeString(this.userAttribute, out);
     DataSerializer.writeObject(this.exception, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.name = DataSerializer.readString(in);
     this.userAttribute = DataSerializer.readString(in);
     this.exception = (Exception) DataSerializer.readObject(in);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java
index 993bc85..a2ab91e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeRequest.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.Assert;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm to request all the subregions of a given parent
@@ -77,13 +78,15 @@ public class RegionSizeRequest extends RegionAdminRequest implements Cancellable
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java
index 2ed38fd..a64f5cc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSizeResponse.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link RegionSizeRequest}.
@@ -81,15 +82,17 @@ public class RegionSizeResponse extends AdminResponse implements Cancellable {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(entryCount);
     out.writeInt(subregionCount);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.entryCount = in.readInt();
     this.subregionCount = in.readInt();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java
index 6c4697c..70a6eea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm to request the region statistics of a given region.
@@ -55,13 +56,15 @@ public class RegionStatisticsRequest extends RegionAdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java
index 9e913af..9873648 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionStatisticsResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.cache.CacheStatistics;
 import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link RegionStatisticsResponse}.
@@ -56,14 +57,16 @@ public class RegionStatisticsResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.regionStatistics, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.regionStatistics = (RemoteCacheStatistics) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java
index 3eb9126..5ca25b5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionSizeRequest.java
@@ -19,6 +19,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Admin request to transfer region info for a member
@@ -61,13 +62,15 @@ public class RegionSubRegionSizeRequest extends AdminRequest implements Cancella
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java
index 5e24f63..e7d46eb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RegionSubRegionsSizeResponse.java
@@ -30,6 +30,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Admin response carrying region info for a member
@@ -127,15 +128,17 @@ public class RegionSubRegionsSizeResponse extends AdminResponse implements Cance
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeBoolean(this.cancelled);
     DataSerializer.writeObject(this.snapshot, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.cancelled = in.readBoolean();
     this.snapshot = DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java
index cba2a8b..42323fe 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to remove a health listener.
@@ -59,14 +60,16 @@ public class RemoveHealthListenerRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.id);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.id = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java
index d16992c..2357900 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoveHealthListenerResponse.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * The response to adding a health listener.
@@ -50,13 +51,15 @@ public class RemoveHealthListenerResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java
index c358a7d..6015560 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to reset its current health status.
@@ -60,14 +61,16 @@ public class ResetHealthStatusRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.id);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.id = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java
index 2cce4df..5cc513c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ResetHealthStatusResponse.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.HealthMonitor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * The response to reseting the health status.
@@ -56,13 +57,15 @@ public class ResetHealthStatusResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java
index 69fefca..76b51cb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RevokePersistentIDRequest.java
@@ -30,6 +30,7 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * An instruction to all members that they should forget about the persistent member described by
@@ -89,15 +90,17 @@ public class RevokePersistentIDRequest extends CliLegacyMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.pattern = new PersistentMemberPattern();
     InternalDataSerializer.invokeFromData(this.pattern, in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     InternalDataSerializer.invokeToData(this.pattern, out);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java
index c67804a..f328b75 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular application to get its root region(s). All it really needs
@@ -57,13 +58,15 @@ public class RootRegionRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java
index 3dad8f7..5cab6f6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RootRegionResponse.java
@@ -30,6 +30,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.GemFireVM;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link RootRegionResponse}.
@@ -94,15 +95,17 @@ public class RootRegionResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.regions, out);
     DataSerializer.writeObject(this.userAttrs, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.regions = DataSerializer.readObject(in);
     this.userAttrs = DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllGatewayHubsRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllGatewayHubsRequest.java
index 022845e..f3ac703 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllGatewayHubsRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllGatewayHubsRequest.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.ReplyMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  *
@@ -54,14 +55,16 @@ public class ShutdownAllGatewayHubsRequest extends DistributionMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.rpid = in.readInt();
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.rpid);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java
index 3d73509..120d207 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllRequest.java
@@ -42,6 +42,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.LoggingThread;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.tcp.ConnectionTable;
 
 /**
@@ -221,13 +222,15 @@ public class ShutdownAllRequest extends AdminRequest {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllResponse.java
index 2bd033c..52681d0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/ShutdownAllResponse.java
@@ -19,6 +19,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class ShutdownAllResponse extends AdminResponse {
   private transient boolean isToShutDown = true;
@@ -51,14 +52,16 @@ public class ShutdownAllResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeBoolean(isToShutDown);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.isToShutDown = in.readBoolean();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SnapshotResultMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SnapshotResultMessage.java
index b7799f1..02b4119 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SnapshotResultMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SnapshotResultMessage.java
@@ -27,6 +27,7 @@ import org.apache.geode.distributed.internal.AdminMessageType;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.admin.CacheSnapshot;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class SnapshotResultMessage extends PooledDistributionMessage implements AdminMessageType {
   private CacheSnapshot results;
@@ -68,15 +69,17 @@ public class SnapshotResultMessage extends PooledDistributionMessage implements
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.results, out);
     out.writeInt(this.snapshotId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.results = (CacheSnapshot) DataSerializer.readObject(in);
     this.snapshotId = in.readInt();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatAlertsManagerAssignMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatAlertsManagerAssignMessage.java
index 98b7006..7e62941 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatAlertsManagerAssignMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatAlertsManagerAssignMessage.java
@@ -23,6 +23,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.admin.StatAlertDefinition;
 import org.apache.geode.internal.admin.StatAlertsManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This class represents a request object to set an alert manager for the newly joined member.
@@ -98,8 +99,9 @@ public class StatAlertsManagerAssignMessage extends PooledDistributionMessage {
    * @param out DataOutput stream to write to
    */
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeLong(refreshInterval);
     DataSerializer.writeObjectArray(alertDefs, out);
   }
@@ -110,8 +112,9 @@ public class StatAlertsManagerAssignMessage extends PooledDistributionMessage {
    * @param in DataInput stream to read from
    */
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     refreshInterval = in.readLong();
     alertDefs = (StatAlertDefinition[]) DataSerializer.readObjectArray(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatListenerMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatListenerMessage.java
index 06c1a2f..ab56cac 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatListenerMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StatListenerMessage.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.distributed.internal.AdminMessageType;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular console distribution manager when changes have been
@@ -84,8 +85,9 @@ public class StatListenerMessage extends PooledDistributionMessage implements Ad
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeLong(this.timestamp);
     out.writeInt(this.changeCount);
     for (int i = 0; i < this.changeCount; i++) {
@@ -95,8 +97,9 @@ public class StatListenerMessage extends PooledDistributionMessage implements Ad
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.timestamp = in.readLong();
     this.changeCount = in.readInt();
     this.listenerIds = new int[this.changeCount];
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java
index f4a5220..5c3dc89 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgRequest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.internal.Config;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to modify its current
@@ -61,14 +62,16 @@ public class StoreSysCfgRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.sc, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.sc = (Config) DataSerializer.readObject(in);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java
index 9c098a7..f3c02bc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/StoreSysCfgResponse.java
@@ -25,6 +25,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Config;
 import org.apache.geode.internal.ConfigSource;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to modify its current
@@ -63,13 +64,15 @@ public class StoreSysCfgResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java
index 6b9dbb2..08144dd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular app vm to request all the subregions of a given parent
@@ -56,13 +57,15 @@ public class SubRegionRequest extends RegionAdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java
index 4d12ecd..27c3ce6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/SubRegionResponse.java
@@ -30,6 +30,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.admin.GemFireVM;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Responds to {@link SubRegionResponse}.
@@ -83,15 +84,17 @@ public class SubRegionResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.subRegionNames, out);
     DataSerializer.writeObject(this.userAttributes, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.subRegionNames = (String[]) DataSerializer.readObject(in);
     this.userAttributes = (String[]) DataSerializer.readObject(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java
index 8f716ce..05a2867 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class TailLogRequest extends AdminRequest {
   public static TailLogRequest create() {
@@ -43,13 +44,15 @@ public class TailLogRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java
index c22c383..8191c5e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/TailLogResponse.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogFile;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class TailLogResponse extends AdminResponse {
   private static final Logger logger = LogService.getLogger();
@@ -71,15 +72,17 @@ public class TailLogResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(tail, out);
     DataSerializer.writeString(childTail, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     tail = DataSerializer.readString(in);
     childTail = DataSerializer.readString(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/UpdateAlertDefinitionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/UpdateAlertDefinitionMessage.java
index 5bdfd97..e534ec9 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/UpdateAlertDefinitionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/UpdateAlertDefinitionMessage.java
@@ -24,6 +24,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.PooledDistributionMessage;
 import org.apache.geode.internal.admin.StatAlertDefinition;
 import org.apache.geode.internal.admin.StatAlertsManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * distribution message to register alert's definition {@link StatAlertDefinition} to member's alert
@@ -66,15 +67,17 @@ public class UpdateAlertDefinitionMessage extends PooledDistributionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeByte(_actionCode);
     DataSerializer.writeObjectArray(this._alertDefinitions, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this._actionCode = in.readByte();
     this._alertDefinitions = (StatAlertDefinition[]) DataSerializer.readObjectArray(in);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java
index e02c615..ee0bcfc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoRequest.java
@@ -21,6 +21,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.geode.distributed.internal.DistributionManager;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent to a particular distribution manager to get its current version info.
@@ -56,13 +57,15 @@ public class VersionInfoRequest extends AdminRequest {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java
index 76c74dd..9584f08 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/VersionInfoResponse.java
@@ -24,6 +24,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.GemFireVersion;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A message that is sent in response to a {@link VersionInfoRequest}.
@@ -56,14 +57,16 @@ public class VersionInfoResponse extends AdminResponse {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeString(this.verInfo, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.verInfo = DataSerializer.readString(in);
   }
 
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 8c4f798..71cba4c 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
@@ -24,6 +24,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as data range
@@ -123,14 +124,16 @@ public class GaugeThresholdDecoratorImpl extends BaseDecoratorImpl
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     super.toData(out);
     DataSerializer.writeObject(this.lowerLimit, out);
     DataSerializer.writeObject(this.upperLimit, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     super.fromData(in);
     this.lowerLimit = (Number) DataSerializer.readObject(in);
     this.upperLimit = (Number) DataSerializer.readObject(in);
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 da8b2ec..77af2e6 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
@@ -24,6 +24,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as number
@@ -123,14 +124,16 @@ public class NumberThresholdDecoratorImpl extends BaseDecoratorImpl
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     super.toData(out);
     DataSerializer.writeObject(this.threshold, out);
     DataSerializer.writePrimitiveBoolean(this.evalForGtThan, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     super.fromData(in);
     this.threshold = (Number) DataSerializer.readObject(in);
     this.evalForGtThan = DataSerializer.readPrimitiveBoolean(in);
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 ee7dfd2..4fe2f25 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
@@ -95,6 +95,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.pdx.internal.PeerTypeRegistration;
@@ -1805,12 +1806,14 @@ public abstract class AbstractRegion implements InternalRegion, AttributesMutato
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeRegion(this, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     // should never be called since the special DataSerializer.readRegion is used.
     throw new UnsupportedOperationException("fromData is not implemented");
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
index fa1b83f..8baf14f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AbstractUpdateOperation.java
@@ -40,6 +40,7 @@ import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Common code for both UpdateOperation and DistributedPutAllOperation.
@@ -297,14 +298,16 @@ public abstract class AbstractUpdateOperation extends DistributedCacheOperation
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.lastModified = in.readLong();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeLong(this.lastModified);
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/AddCacheServerProfileMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/AddCacheServerProfileMessage.java
index 763cf00..588b251 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/AddCacheServerProfileMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/AddCacheServerProfileMessage.java
@@ -31,6 +31,7 @@ import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.SerialDistributionMessage;
 import org.apache.geode.internal.cache.LocalRegion.InitializationLevel;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * OperationMessage synchronously propagates a change in the profile to another member. It is a
@@ -145,14 +146,16 @@ public class AddCacheServerProfileMessage extends SerialDistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.processorId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.processorId = in.readInt();
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
index 578dbfa..c1c75f3 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
@@ -68,6 +68,7 @@ import org.apache.geode.internal.cache.partitioned.DeposePrimaryBucketMessage.De
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.util.StopWatch;
 
 /**
@@ -2251,16 +2252,18 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       isPrimary = in.readBoolean();
       isHosting = in.readBoolean();
       isInitializing = in.readBoolean();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeBoolean(isPrimary);
       out.writeBoolean(isHosting);
       out.writeBoolean(isInitializing);
@@ -2304,15 +2307,17 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       bucketServerLocations = SerializationHelper.readBucketServerLocationSet(in);
       bucketId = DataSerializer.readPrimitiveInt(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       SerializationHelper.writeBucketServerLocationSet(bucketServerLocations, out);
       DataSerializer.writePrimitiveInt(bucketId, out);
     }
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 95ab059..1f41e0f 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
@@ -51,6 +51,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Adds bookkeeping info and cache-specific behavior to DistributionAdvisor. Adds bit-encoded flags
@@ -779,8 +780,9 @@ public class CacheDistributionAdvisor extends DistributionAdvisor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(getIntInfo());
       if (persistentID != null) {
         InternalDataSerializer.invokeToData(persistentID, out);
@@ -804,8 +806,9 @@ public class CacheDistributionAdvisor extends DistributionAdvisor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       int bits = in.readInt();
       setIntInfo(bits);
       if (hasPersistentID(bits)) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerAdvisor.java
index d48375b..831ed9c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CacheServerAdvisor.java
@@ -27,6 +27,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DistributionAdvisee;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.InternalDataSerializer;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -132,8 +133,9 @@ public class CacheServerAdvisor extends GridAdvisor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeStringArray(this.groups, out);
       out.writeInt(maxConnections);
       InternalDataSerializer.invokeToData(initialLoad, out);
@@ -141,8 +143,9 @@ public class CacheServerAdvisor extends GridAdvisor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.groups = DataSerializer.readStringArray(in);
       this.maxConnections = in.readInt();
       this.initialLoad = new ServerLoad();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ClientRegionEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ClientRegionEventImpl.java
index cd82557..32fc5ea 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ClientRegionEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ClientRegionEventImpl.java
@@ -23,6 +23,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.Operation;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -92,14 +93,16 @@ public class ClientRegionEventImpl extends RegionEventImpl {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(getContext(), out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     setContext(ClientProxyMembershipID.readCanonicalized(in));
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CloseCacheMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CloseCacheMessage.java
index 66cf168..c7ff0aa 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CloseCacheMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CloseCacheMessage.java
@@ -27,6 +27,7 @@ import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
 import org.apache.geode.distributed.internal.MessageWithReply;
 import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /** Creates a new instance of CloseCacheMessage */
@@ -93,14 +94,16 @@ public class CloseCacheMessage extends HighPriorityDistributionMessage implement
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.processorId = in.readInt();
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.processorId);
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ControllerAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ControllerAdvisor.java
index eb2ae12..ee6fbc2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ControllerAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ControllerAdvisor.java
@@ -24,6 +24,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DistributionAdvisee;
 import org.apache.geode.distributed.internal.ServerLocator;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 
 /**
@@ -118,13 +119,15 @@ public class ControllerAdvisor extends GridAdvisor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/CreateRegionProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/CreateRegionProcessor.java
index c959e6a..8aef0bd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/CreateRegionProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/CreateRegionProcessor.java
@@ -59,6 +59,7 @@ import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor.PartitionProfile;
 import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This message processor handles creation and initial exchange of
@@ -745,8 +746,9 @@ public class CreateRegionProcessor implements ProfileExchangeProcessor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.regionPath = DataSerializer.readString(in);
       this.profile = (CacheProfile) DataSerializer.readObject(in);
       this.processorId = in.readInt();
@@ -759,8 +761,9 @@ public class CreateRegionProcessor implements ProfileExchangeProcessor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.regionPath, out);
       DataSerializer.writeObject(this.profile, out);
       out.writeInt(this.processorId);
@@ -806,8 +809,9 @@ public class CreateRegionProcessor implements ProfileExchangeProcessor {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       if (in.readBoolean()) {
         this.profile = (CacheProfile) DataSerializer.readObject(in);
       }
@@ -834,8 +838,9 @@ public class CreateRegionProcessor implements ProfileExchangeProcessor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeBoolean(this.profile != null);
       if (this.profile != null) {
         DataSerializer.writeObject(this.profile, out);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyOperation.java
index 4d9bbae..46f7d04 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyOperation.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.DirectReplyProcessor;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.offheap.annotations.Retained;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Handles distribution messaging for destroying an entry in a region.
@@ -154,8 +155,9 @@ public class DestroyOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.eventId = (EventID) DataSerializer.readObject(in);
       this.key = DataSerializer.readObject(in);
       Boolean hasTailKey = DataSerializer.readBoolean(in);
@@ -165,8 +167,9 @@ public class DestroyOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.eventId, out);
       DataSerializer.writeObject(this.key, out);
 
@@ -244,14 +247,16 @@ public class DestroyOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.context = ClientProxyMembershipID.readCanonicalized(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.context, out);
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java
index 070fb6b..d0307e1 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyPartitionedRegionMessage.java
@@ -39,6 +39,7 @@ import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor.PartitionProfile;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This message is sent for two purposes <br>
@@ -221,14 +222,16 @@ public class DestroyPartitionedRegionMessage extends PartitionMessage {
 
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    fromDataPre_GEODE_1_9_0_0(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    fromDataPre_GEODE_1_9_0_0(in, context);
     this.eventID = DataSerializer.readObject(in);
 
   }
 
-  public void fromDataPre_GEODE_1_9_0_0(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromDataPre_GEODE_1_9_0_0(DataInput in, SerializationContext context)
+      throws IOException, ClassNotFoundException {
+    super.fromData(in, null);
     this.cbArg = DataSerializer.readObject(in);
     this.op = Operation.fromOrdinal(in.readByte());
     this.prSerial = in.readInt();
@@ -240,13 +243,15 @@ public class DestroyPartitionedRegionMessage extends PartitionMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    toDataPre_GEODE_1_9_0_0(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    toDataPre_GEODE_1_9_0_0(out, context);
     DataSerializer.writeObject(this.eventID, out);
   }
 
-  public void toDataPre_GEODE_1_9_0_0(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toDataPre_GEODE_1_9_0_0(DataOutput out, SerializationContext context)
+      throws IOException {
+    super.toData(out, null);
     DataSerializer.writeObject(this.cbArg, out);
     out.writeByte(this.op.ordinal);
     out.writeInt(this.prSerial);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyRegionOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyRegionOperation.java
index c7a8563..dfe1d03 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyRegionOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DestroyRegionOperation.java
@@ -46,6 +46,7 @@ import org.apache.geode.internal.cache.LocalRegion.InitializationLevel;
 import org.apache.geode.internal.cache.partitioned.PRLocallyDestroyedException;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class DestroyRegionOperation extends DistributedCacheOperation {
 
@@ -439,8 +440,9 @@ public class DestroyRegionOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.eventID = (EventID) DataSerializer.readObject(in);
       this.serialNum = DataSerializer.readPrimitiveInt(in);
       this.notifyOfRegionDeparture = DataSerializer.readPrimitiveBoolean(in);
@@ -448,8 +450,9 @@ public class DestroyRegionOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.eventID, out);
       DataSerializer.writePrimitiveInt(this.serialNum, out);
       DataSerializer.writePrimitiveBoolean(this.notifyOfRegionDeparture, out);
@@ -479,14 +482,16 @@ public class DestroyRegionOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.context = DataSerializer.readObject(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.context, out);
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXCommitMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXCommitMessage.java
index b7d9ef9..6e73b9f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXCommitMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXCommitMessage.java
@@ -46,6 +46,7 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.TXEntryState.DistTxThinEntryState;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class DistTXCommitMessage extends TXMessage {
 
@@ -140,14 +141,16 @@ public class DistTXCommitMessage extends TXMessage {
 
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.entryStateList = DataSerializer.readArrayList(in);
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeArrayList(entryStateList, out);
   }
 
@@ -179,7 +182,7 @@ public class DistTXCommitMessage extends TXMessage {
     public DistTXCommitReplyMessage() {}
 
     public DistTXCommitReplyMessage(DataInput in) throws IOException, ClassNotFoundException {
-      fromData(in);
+      fromData(in, null);
     }
 
     private DistTXCommitReplyMessage(int processorId, TXCommitMessage val) {
@@ -241,14 +244,16 @@ public class DistTXCommitMessage extends TXMessage {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(commitMessage, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.commitMessage = (TXCommitMessage) DataSerializer.readObject(in);
     }
 
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 38b4ba6..89363e3 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
@@ -51,6 +51,7 @@ 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;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class DistTXPrecommitMessage extends TXMessage {
 
@@ -141,14 +142,16 @@ public class DistTXPrecommitMessage extends TXMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeArrayList((ArrayList<?>) secondaryTransactionalOperations, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.secondaryTransactionalOperations = DataSerializer.readArrayList(in);
   }
 
@@ -183,7 +186,7 @@ public class DistTXPrecommitMessage extends TXMessage {
     public DistTXPrecommitReplyMessage() {}
 
     public DistTXPrecommitReplyMessage(DataInput in) throws IOException, ClassNotFoundException {
-      fromData(in);
+      fromData(in, null);
     }
 
     private DistTXPrecommitReplyMessage(int processorId, DistTxPrecommitResponse val) {
@@ -245,14 +248,16 @@ public class DistTXPrecommitMessage extends TXMessage {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(commitResponse, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.commitResponse = (DistTxPrecommitResponse) DataSerializer.readObject(in);
     }
 
@@ -486,13 +491,15 @@ public class DistTXPrecommitMessage extends TXMessage {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       DataSerializer.writeBoolean(commitState, out);
       DataSerializer.writeArrayList(distTxEventList, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       this.commitState = DataSerializer.readBoolean(in);
       this.distTxEventList = DataSerializer.readArrayList(in);
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXRollbackMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXRollbackMessage.java
index 3770e79..48d920b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXRollbackMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistTXRollbackMessage.java
@@ -47,6 +47,7 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.tx.RemoteOperationMessage.RemoteOperationResponse;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class DistTXRollbackMessage extends TXMessage {
 
@@ -105,14 +106,16 @@ public class DistTXRollbackMessage extends TXMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     // more data
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     // more data
   }
 
@@ -138,7 +141,7 @@ public class DistTXRollbackMessage extends TXMessage {
     public DistTXRollbackReplyMessage() {}
 
     public DistTXRollbackReplyMessage(DataInput in) throws IOException, ClassNotFoundException {
-      fromData(in);
+      fromData(in, null);
     }
 
     private DistTXRollbackReplyMessage(int processorId, Boolean val) {
@@ -199,14 +202,16 @@ public class DistTXRollbackMessage extends TXMessage {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeBoolean(this.rollbackState, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.rollbackState = DataSerializer.readBoolean(in);
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java
index b2d34ef..d63e638 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedCacheOperation.java
@@ -82,6 +82,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.sequencelog.EntryLogger;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.util.DelayedAction;
 
 public abstract class DistributedCacheOperation {
@@ -1361,7 +1362,8 @@ public abstract class DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       short bits = in.readShort();
       short extBits = in.readShort();
       this.flags = bits;
@@ -1404,7 +1406,8 @@ public abstract class DistributedCacheOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       short bits = 0;
       short extendedBits = 0;
       bits = computeCompressedShort(bits);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedClearOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedClearOperation.java
index 78f3ae0..2a1fc32 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedClearOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedClearOperation.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.cache.versions.VersionTag;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class DistributedClearOperation extends DistributedCacheOperation {
   public static enum OperationType {
@@ -229,8 +230,9 @@ public class DistributedClearOperation extends DistributedCacheOperation {
 
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.clearOp = OperationType.values()[in.readByte()];
       this.eventID = (EventID) DataSerializer.readObject(in);
       this.rvv = (RegionVersionVector) DataSerializer.readObject(in);
@@ -238,8 +240,9 @@ public class DistributedClearOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeByte(this.clearOp.ordinal());
       DataSerializer.writeObject(this.eventID, out);
       DataSerializer.writeObject(this.rvv, out);
@@ -282,14 +285,16 @@ public class DistributedClearOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.context = DataSerializer.readObject(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.context, out);
     }
   }
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 6e9554e..4211519 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
@@ -60,6 +60,7 @@ 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.serialization.SerializationContext;
 
 /**
  * Handles distribution of a Region.putall operation.
@@ -397,9 +398,9 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
      * that the callers to this method are backwards compatible by creating toDataPreXX methods for
      * them even if they are not changed. <br>
      * Callers for this method are: <br>
-     * {@link PutAllMessage#toData(DataOutput)} <br>
-     * {@link PutAllPRMessage#toData(DataOutput)} <br>
-     * {@link RemotePutAllMessage#toData(DataOutput)} <br>
+     * {@link DataSerializableFixedID#toData(DataOutput, SerializationContext)} <br>
+     * {@link DataSerializableFixedID#toData(DataOutput, SerializationContext)} <br>
+     * {@link DataSerializableFixedID#toData(DataOutput, SerializationContext)} <br>
      */
     public void toData(final DataOutput out) throws IOException {
       Object key = this.key;
@@ -664,7 +665,8 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
     static final byte FLAG_TAG_WITH_NUMBER_ID = 3;
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       int flags = 0;
       boolean hasTags = false;
 
@@ -720,7 +722,8 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       int flags = in.readByte();
       boolean hasTags = (flags & 0x04) == 0x04;
       boolean persistent = (flags & 0x20) == 0x20;
@@ -764,12 +767,12 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
 
     @Override
     public void writeExternal(ObjectOutput out) throws IOException {
-      toData(out);
+      toData(out, null);
     }
 
     @Override
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-      fromData(in);
+      fromData(in, null);
     }
 
     @Override
@@ -1196,9 +1199,10 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
 
-      super.fromData(in);
+      super.fromData(in, context);
       this.eventId = (EventID) DataSerializer.readObject(in);
       this.putAllDataSize = (int) InternalDataSerializer.readUnsignedVL(in);
       this.putAllData = new PutAllEntryData[this.putAllDataSize];
@@ -1225,8 +1229,9 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.eventId, out);
       InternalDataSerializer.writeUnsignedVL(this.putAllDataSize, out);
       if (this.putAllDataSize > 0) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegionFunctionStreamingMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegionFunctionStreamingMessage.java
index 2def2d5..b554ecc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegionFunctionStreamingMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedRegionFunctionStreamingMessage.java
@@ -43,6 +43,7 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class DistributedRegionFunctionStreamingMessage extends DistributionMessage
     implements TransactionMessage {
@@ -309,8 +310,9 @@ public class DistributedRegionFunctionStreamingMessage extends DistributionMessa
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
 
     short flags = in.readShort();
     if ((flags & HAS_PROCESSOR_ID) != 0) {
@@ -341,8 +343,9 @@ public class DistributedRegionFunctionStreamingMessage extends DistributionMessa
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
 
     short flags = 0;
     if (this.processorId != 0)
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 acca29a..42e26fb 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
@@ -40,11 +40,9 @@ import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.DistributedPutAllOperation.EntryVersionsList;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
 import org.apache.geode.internal.cache.ha.ThreadIdentifier;
-import org.apache.geode.internal.cache.partitioned.PutAllPRMessage;
 import org.apache.geode.internal.cache.partitioned.RemoveAllPRMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.cache.tx.RemotePutAllMessage;
 import org.apache.geode.internal.cache.tx.RemoteRemoveAllMessage;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.cache.versions.DiskVersionTag;
@@ -55,6 +53,8 @@ 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.serialization.SerializationContext;
 
 /**
  * Handles distribution of a Region.removeAll operation.
@@ -370,9 +370,9 @@ public class DistributedRemoveAllOperation extends AbstractUpdateOperation {
      * that the callers to this method are backwards compatible by creating toDataPreXX methods for
      * them even if they are not changed. <br>
      * Callers for this method are: <br>
-     * {@link RemoveAllMessage#toData(DataOutput)} <br>
-     * {@link PutAllPRMessage#toData(DataOutput)} <br>
-     * {@link RemotePutAllMessage#toData(DataOutput)} <br>
+     * {@link DataSerializableFixedID#toData(DataOutput, SerializationContext)} <br>
+     * {@link DataSerializableFixedID#toData(DataOutput, SerializationContext)} <br>
+     * {@link DataSerializableFixedID#toData(DataOutput, SerializationContext)} <br>
      */
     public void toData(final DataOutput out) throws IOException {
       Object key = this.key;
@@ -979,9 +979,10 @@ public class DistributedRemoveAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
 
-      super.fromData(in);
+      super.fromData(in, context);
       this.eventId = (EventID) DataSerializer.readObject(in);
       this.removeAllDataSize = (int) InternalDataSerializer.readUnsignedVL(in);
       this.removeAllData = new RemoveAllEntryData[this.removeAllDataSize];
@@ -1008,9 +1009,10 @@ public class DistributedRemoveAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
 
-      super.toData(out);
+      super.toData(out, context);
       DataSerializer.writeObject(this.eventId, out);
       InternalDataSerializer.writeUnsignedVL(this.removeAllDataSize, out);
       if (this.removeAllDataSize > 0) {
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 9c847f2..de35308 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
@@ -34,6 +34,7 @@ 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.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
 
 public class DistributedTombstoneOperation extends DistributedCacheOperation {
@@ -181,8 +182,9 @@ public class DistributedTombstoneOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.op = TOperation.values()[in.readByte()];
       // this.regionVersion = in.readLong();
       int count = in.readInt();
@@ -203,8 +205,9 @@ public class DistributedTombstoneOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeByte(this.op.ordinal());
       // out.writeLong(this.regionVersion);
       out.writeInt(this.regionGCVersions.size());
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 0b94d4a..67637f7 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
@@ -79,6 +79,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.internal.util.BlobHelper;
@@ -192,7 +193,8 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
    * Reads the contents of this message from the given input.
    */
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.eventID = (EventID) DataSerializer.readObject(in);
     Object key = DataSerializer.readObject(in);
     Object value = DataSerializer.readObject(in);
@@ -2228,7 +2230,8 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeObject(this.eventID, out);
     DataSerializer.writeObject(this.getKey(), out);
     DataSerializer.writeObject(this.keyInfo.getValue(), out);
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 5e08365..31e9e61 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
@@ -46,6 +46,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.util.Breadcrumbs;
 
 /**
@@ -347,7 +348,8 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
   }
 
   @Override
-  public void toData(DataOutput dop) throws IOException {
+  public void toData(DataOutput dop,
+      SerializationContext context) throws IOException {
     Version version = InternalDataSerializer.getVersionForDataStream(dop);
     // if we are sending to old clients we need to reserialize the ID
     // using the client's version to ensure it gets the proper on-wire form
@@ -369,14 +371,16 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
     dop.writeByte(this.breadcrumbCounter);
   }
 
-  public void toDataPre_GFE_8_0_0_0(DataOutput dop) throws IOException {
+  public void toDataPre_GFE_8_0_0_0(DataOutput dop, SerializationContext context)
+      throws IOException {
     DataSerializer.writeByteArray(this.membershipID, dop);
     DataSerializer.writeByteArray(getOptimizedByteArrayForEventID(this.threadID, this.sequenceID),
         dop);
   }
 
   @Override
-  public void fromData(DataInput di) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput di,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.membershipID = DataSerializer.readByteArray(di);
     ByteBuffer eventIdParts = ByteBuffer.wrap(DataSerializer.readByteArray(di));
     this.threadID = readEventIdPartsFromOptmizedByteArray(eventIdParts);
@@ -385,7 +389,8 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
     this.breadcrumbCounter = di.readByte();
   }
 
-  public void fromDataPre_GFE_8_0_0_0(DataInput di) throws IOException, ClassNotFoundException {
+  public void fromDataPre_GFE_8_0_0_0(DataInput di, SerializationContext context)
+      throws IOException, ClassNotFoundException {
     this.membershipID = DataSerializer.readByteArray(di);
     ByteBuffer eventIdParts = ByteBuffer.wrap(DataSerializer.readByteArray(di));
     this.threadID = readEventIdPartsFromOptmizedByteArray(eventIdParts);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/EventStateHelper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/EventStateHelper.java
index cd45b65..4d52aad 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/EventStateHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/EventStateHelper.java
@@ -26,11 +26,10 @@ import java.util.Map;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.cache.CreateRegionProcessor.CreateRegionReplyMessage;
-import org.apache.geode.internal.cache.InitialImageOperation.RegionStateMessage;
 import org.apache.geode.internal.cache.event.EventSequenceNumberHolder;
 import org.apache.geode.internal.cache.ha.HARegionQueue.DispatchedAndCurrentEvents;
 import org.apache.geode.internal.cache.ha.ThreadIdentifier;
+import org.apache.geode.internal.serialization.DataSerializableFixedID;
 
 /**
  * A helper class for serializing the event state map.
@@ -45,8 +44,10 @@ public class EventStateHelper {
    * creating toDataPreXX methods. Also make sure that the callers to this method are backwards
    * compatible by creating toDataPreXX methods for them even if they are not changed. <br>
    * Callers for this method are: <br>
-   * {@link CreateRegionReplyMessage#toData(DataOutput)} <br>
-   * {@link RegionStateMessage#toData(DataOutput)} <br>
+   * {@link DataSerializableFixedID#toData(DataOutput, org.apache.geode.internal.serialization.SerializationContext)}
+   * <br>
+   * {@link DataSerializableFixedID#toData(DataOutput, org.apache.geode.internal.serialization.SerializationContext)}
+   * <br>
    *
    * @param myId the memberId that is serializing
    */
@@ -102,8 +103,10 @@ public class EventStateHelper {
    * creating fromDataPreXX methods. Also make sure that the callers to this method are backwards
    * compatible by creating fromDataPreXX methods for them even if they are not changed. <br>
    * Callers for this method are: <br>
-   * {@link CreateRegionReplyMessage#fromData(DataInput)} <br>
-   * {@link RegionStateMessage#fromData(DataInput)} <br>
+   * {@link DataSerializableFixedID#fromData(DataInput, org.apache.geode.internal.serialization.SerializationContext)}
+   * <br>
+   * {@link DataSerializableFixedID#fromData(DataInput, org.apache.geode.internal.serialization.SerializationContext)}
+   * <br>
    */
   public static Map deDataSerialize(DataInput dip, boolean isHARegion)
       throws IOException, ClassNotFoundException {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
index 5ac5858..5c7c079 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessage.java
@@ -26,6 +26,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.HighPriorityDistributionMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.Version;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class ExpireDisconnectedClientTransactionsMessage
     extends HighPriorityDistributionMessage {
@@ -54,12 +55,14 @@ public class ExpireDisconnectedClientTransactionsMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     DataSerializer.writeHashSet((HashSet<TXId>) this.txIds, out);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     this.txIds = DataSerializer.readHashSet(in);
   }
 
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 29d2da1..b6940c9 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
@@ -77,6 +77,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 
 /**
@@ -1484,7 +1485,8 @@ public class FilterProfile implements DataSerializableFixedID {
 
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
     InternalDistributedMember id = new InternalDistributedMember();
     InternalDataSerializer.invokeFromData(id, in);
     this.memberID = id;
@@ -1523,7 +1525,8 @@ public class FilterProfile implements DataSerializableFixedID {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
     InternalDataSerializer.invokeToData(memberID, out);
     InternalDataSerializer.writeSetOfLongs(this.allKeyClients.getSnapshot(),
         this.clientMap.hasLongID, out);
@@ -1985,8 +1988,9 @@ public class FilterProfile implements DataSerializableFixedID {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
       out.writeUTF(this.regionName);
       out.writeShort(this.opType.ordinal());
@@ -2008,8 +2012,9 @@ public class FilterProfile implements DataSerializableFixedID {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
       this.regionName = in.readUTF();
       this.opType = operationType.values()[in.readShort()];
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 f227aba..8fcf163 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
@@ -35,6 +35,7 @@ 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;
+import org.apache.geode.internal.serialization.StaticSerialization;
 
 /**
  * This class is used to hold the information about the servers and their Filters (CQs and Interest
@@ -380,7 +381,7 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
       size += interestedClients == null ? 4 : interestedClients.size() * 8 + 5;
       size += interestedClientsInv == null ? 4 : interestedClientsInv.size() * 8 + 5;
       size += cqs == null ? 0 : cqs.size() * 12;
-      byte[] myData = InternalDataSerializer.getThreadLocalByteArray(size);
+      byte[] myData = StaticSerialization.getThreadLocalByteArray(size);
       hdos = new HeapDataOutputStream(myData);
       hdos.disallowExpansion();
       if (this.cqs == null) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FindDurableQueueProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FindDurableQueueProcessor.java
index 2f95748..51aae3a 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FindDurableQueueProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FindDurableQueueProcessor.java
@@ -38,6 +38,7 @@ import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.ServerLocator;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * A processor for helping a locator find the durable queues for a given durable client id. Asks
@@ -169,15 +170,17 @@ public class FindDurableQueueProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
       this.proxyId = ClientProxyMembershipID.readCanonicalized(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
       DataSerializer.writeObject(this.proxyId, out);
     }
@@ -204,14 +207,16 @@ public class FindDurableQueueProcessor extends ReplyProcessor21 {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.matches = DataSerializer.readArrayList(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeArrayList(matches, out);
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FindRemoteTXMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FindRemoteTXMessage.java
index 4c8cd34..cc9c64c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FindRemoteTXMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FindRemoteTXMessage.java
@@ -40,6 +40,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.partitioned.PartitionMessage;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Message to all the peers to ask which member hosts the transaction for the given transaction id
@@ -161,15 +162,17 @@ public class FindRemoteTXMessage extends HighPriorityDistributionMessage
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     DataSerializer.writeObject(this.txId, out);
     out.writeInt(this.processorId);
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.txId = DataSerializer.readObject(in);
     this.processorId = in.readInt();
   }
@@ -254,8 +257,9 @@ public class FindRemoteTXMessage extends HighPriorityDistributionMessage
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeBoolean(this.isHostingTx);
       boolean sendTXCommitMessage = this.txCommitMessage != null;
       out.writeBoolean(sendTXCommitMessage);
@@ -268,8 +272,9 @@ public class FindRemoteTXMessage extends HighPriorityDistributionMessage
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.isHostingTx = in.readBoolean();
       if (in.readBoolean()) {
         this.isPartialCommitMessage = in.readBoolean();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FindVersionTagOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FindVersionTagOperation.java
index ea440d0..c16aa8e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FindVersionTagOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FindVersionTagOperation.java
@@ -34,6 +34,7 @@ import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class FindVersionTagOperation {
   private static final Logger logger = LogService.getLogger();
@@ -173,8 +174,9 @@ public class FindVersionTagOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(this.processorId);
       out.writeUTF(this.regionName);
       InternalDataSerializer.invokeToData(this.eventId, out);
@@ -182,8 +184,9 @@ public class FindVersionTagOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.processorId = in.readInt();
       this.regionName = in.readUTF();
       this.eventId = new EventID();
@@ -214,14 +217,16 @@ public class FindVersionTagOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.versionTag, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.versionTag = (VersionTag) DataSerializer.readObject(in);
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/FunctionStreamingReplyMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/FunctionStreamingReplyMessage.java
index e6dcde6..7a127e7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/FunctionStreamingReplyMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/FunctionStreamingReplyMessage.java
@@ -29,6 +29,7 @@ import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class FunctionStreamingReplyMessage extends ReplyMessage {
   private static final Logger logger = LogService.getLogger();
@@ -81,8 +82,9 @@ public class FunctionStreamingReplyMessage extends ReplyMessage {
   }
 
   @Override
-  public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-    super.fromData(in);
+  public void fromData(DataInput in,
+      SerializationContext context) throws IOException, ClassNotFoundException {
+    super.fromData(in, context);
     this.msgNum = in.readInt();
     this.lastMsg = in.readBoolean();
     this.processorId = in.readInt();
@@ -98,8 +100,9 @@ public class FunctionStreamingReplyMessage extends ReplyMessage {
   }
 
   @Override
-  public void toData(DataOutput out) throws IOException {
-    super.toData(out);
+  public void toData(DataOutput out,
+      SerializationContext context) throws IOException {
+    super.toData(out, context);
     out.writeInt(this.msgNum);
     out.writeBoolean(this.lastMsg);
     out.writeInt(this.processorId);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GridAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GridAdvisor.java
index 83d041b..db7c184 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GridAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GridAdvisor.java
@@ -30,6 +30,7 @@ import org.apache.geode.distributed.internal.DistributionAdvisee;
 import org.apache.geode.distributed.internal.DistributionAdvisor;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Used to share code with BridgeServerAdvisor and ControllerAdvisor
@@ -356,15 +357,17 @@ public abstract class GridAdvisor extends DistributionAdvisor {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.host, out);
       DataSerializer.writePrimitiveInt(this.port, out);
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.host = DataSerializer.readString(in);
       this.port = DataSerializer.readPrimitiveInt(in);
       finishInit();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/HARegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/HARegion.java
index 9f2e989..2f75681 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/HARegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/HARegion.java
@@ -46,6 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.HAEventWrapper;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.offheap.annotations.Released;
+import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.statistics.StatisticsClock;
 
 /**
@@ -547,8 +548,9 @@ public class HARegion extends DistributedRegion {
        * DataInput)
        */
       @Override
-      public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-        super.fromData(in);
+      public void fromData(DataInput in,
+          SerializationContext context) throws IOException, ClassNotFoundException {
+        super.fromData(in, context);
         int flags = in.readByte();
         hasRegisteredInterest = (flags & HAS_REGISTERED_INTEREST_BIT) != 0;
         isPrimary = (flags & IS_PRIMARY_BIT) != 0;
@@ -561,8 +563,9 @@ public class HARegion extends DistributedRegion {
        * DataOutput)
        */
       @Override
-      public void toData(DataOutput out) throws IOException {
-        super.toData(out);
+      public void toData(DataOutput out,
+          SerializationContext context) throws IOException {
+        super.toData(out, context);
         int flags = 0;
         if (hasRegisteredInterest) {
           flags |= HAS_REGISTERED_INTEREST_BIT;
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 f8c1ab6..45bde2e 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
@@ -34,6 +34,7 @@ import org.apache.geode.distributed.internal.ProcessorKeeper21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * This class keeps track of how many InitialImageMessages are in flight between the initial image
@@ -237,14 +238,16 @@ public class InitialImageFlowControl implements MembershipListener {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       keeperId = in.readInt();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       out.writeInt(keeperId);
     }
 
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 fc126bd..03c429b 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
@@ -96,6 +96,7 @@ 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.serialization.SerializationContext;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 
 /**
@@ -2122,8 +2123,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.regionPath = DataSerializer.readString(in);
       this.processorId = in.readInt();
       this.keysOnly = in.readBoolean();
@@ -2136,8 +2138,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.regionPath, out);
       out.writeInt(this.processorId);
       out.writeBoolean(this.keysOnly);
@@ -2350,15 +2353,17 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.regionPath = DataSerializer.readString(in);
       this.processorId = in.readInt();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.regionPath, out);
       out.writeInt(this.processorId);
     }
@@ -2482,12 +2487,13 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput dop) throws IOException {
-      super.toData(dop);
+    public void toData(DataOutput dop,
+        SerializationContext context) throws IOException {
+      super.toData(dop, context);
       if (versionVector != null) {
         dop.writeBoolean(true);
         dop.writeBoolean(versionVector instanceof DiskRegionVersionVector);
-        versionVector.toData(dop);
+        versionVector.toData(dop, null);
       } else {
         dop.writeBoolean(false);
       }
@@ -2504,8 +2510,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput dip) throws IOException, ClassNotFoundException {
-      super.fromData(dip);
+    public void fromData(DataInput dip,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(dip, context);
       boolean has = dip.readBoolean();
       if (has) {
         boolean persistent = dip.readBoolean();
@@ -2621,16 +2628,18 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.regionPath = DataSerializer.readString(in);
       this.processorId = in.readInt();
       this.targetReinitialized = in.readBoolean();
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.regionPath, out);
       out.writeInt(this.processorId);
       out.writeBoolean(this.targetReinitialized);
@@ -2713,8 +2722,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeString(this.regionPath, out);
       out.writeBoolean(this.lostVersionSources[0] instanceof DiskStoreID);
       out.writeInt(this.lostVersionSources.length);
@@ -2724,8 +2734,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.regionPath = DataSerializer.readString(in);
       boolean persistentIDs = in.readBoolean();
       int len = in.readInt();
@@ -2862,8 +2873,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       ArrayList list = DataSerializer.readArrayList(in);
       Object listData = null;
       if (list != null /* fix bug 46874 */ && list.size() > 0) {
@@ -2898,8 +2910,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       if (this.entries instanceof InitialImageVersionedEntryList) {
         ArrayList list = new ArrayList(1);
         list.add(this.entries);
@@ -3064,7 +3077,8 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       out.writeByte(this.entryBits);
       byte flags = (this.versionTag != null) ? HAS_VERSION : 0;
       flags |= (this.versionTag instanceof DiskVersionTag) ? PERSISTENT_VERSION : 0;
@@ -3083,7 +3097,8 @@ public class InitialImageOperation {
     static final byte PERSISTENT_VERSION = 0x02;
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       this.entryBits = in.readByte();
       byte flags = in.readByte();
       this.key = DataSerializer.readObject(in);
@@ -3103,7 +3118,7 @@ public class InitialImageOperation {
     public int calcSerializedSize() {
       NullDataOutputStream dos = new NullDataOutputStream();
       try {
-        toData(dos);
+        toData(dos, null);
         return dos.size();
       } catch (IOException ex) {
         RuntimeException ex2 = new IllegalArgumentException(
@@ -3271,7 +3286,8 @@ public class InitialImageOperation {
     static final byte FLAG_TAG_WITH_NUMBER_ID = 3;
 
     @Override
-    public void toData(DataOutput out) throws IOException {
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
       int flags = 0;
       boolean hasEntries = false;
       boolean hasTags = false;
@@ -3341,7 +3357,8 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
       final boolean isGiiVersionEntryDebugEnabled =
           logger.isTraceEnabled(LogMarker.INITIAL_IMAGE_VERSIONED_VERBOSE);
 
@@ -3402,12 +3419,12 @@ public class InitialImageOperation {
 
     @Override
     public void writeExternal(ObjectOutput out) throws IOException {
-      toData(out);
+      toData(out, null);
     }
 
     @Override
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-      fromData(in);
+      fromData(in, null);
     }
 
     @Override
@@ -3468,8 +3485,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput dop) throws IOException {
-      super.toData(dop);
+    public void toData(DataOutput dop,
+        SerializationContext context) throws IOException {
+      super.toData(dop, context);
       dop.writeBoolean(isHARegion);
       if (eventState != null) {
         dop.writeBoolean(true);
@@ -3501,8 +3519,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput dip) throws IOException, ClassNotFoundException {
-      super.fromData(dip);
+    public void fromData(DataInput dip,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(dip, context);
       isHARegion = dip.readBoolean();
       boolean has = dip.readBoolean();
       if (has) {
@@ -4015,8 +4034,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void toData(DataOutput dop) throws IOException {
-      super.toData(dop);
+    public void toData(DataOutput dop,
+        SerializationContext context) throws IOException {
+      super.toData(dop, context);
       // DataSerializer.writeString(this.haRegion.getName(), dop);
       DataSerializer.writeHashMap((HashMap) this.emptyRegionMap, dop);
       // Write interest info.
@@ -4045,8 +4065,9 @@ public class InitialImageOperation {
     }
 
     @Override
-    public void fromData(DataInput dip) throws IOException, ClassNotFoundException {
-      super.fromData(dip);
+    public void fromData(DataInput dip,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(dip, context);
       // String regionName = DataSerializer.readString(dip);
       this.emptyRegionMap = DataSerializer.readHashMap(dip);
       // Read interest info.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidateOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidateOperation.java
index f1b6942..5ae7ca6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidateOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InvalidateOperation.java
@@ -31,6 +31,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.offheap.annotations.Retained;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 /**
  * Handles distribution messaging for invalidating an entry in a region.
@@ -126,15 +127,17 @@ public class InvalidateOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.eventId = (EventID) DataSerializer.readObject(in);
       this.key = DataSerializer.readObject(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.eventId, out);
       DataSerializer.writeObject(this.key, out);
     }
@@ -182,14 +185,16 @@ public class InvalidateOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public void fromData(DataInput in) throws IOException, ClassNotFoundException {
-      super.fromData(in);
+    public void fromData(DataInput in,
+        SerializationContext context) throws IOException, ClassNotFoundException {
+      super.fromData(in, context);
       this.context = ClientProxyMembershipID.readCanonicalized(in);
     }
 
     @Override
-    public void toData(DataOutput out) throws IOException {
-      super.toData(out);
+    public void toData(DataOutput out,
+        SerializationContext context) throws IOException {
+      super.toData(out, context);
       DataSerializer.writeObject(this.context, out);
     }
 
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 06a4c3f..ff415da 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
@@ -27,6 +27,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.Version;
 import org.apache.geode.internal.cache.partitioned.PartitionMessage;
+import org.apache.geode.internal.serialization.SerializationContext;
 
 public class InvalidatePartitionedRegionMessage extends PartitionMessage {
 
@@ -86,9 +87,10 @@ public class InvalidatePartitionedRegionMessage extends PartitionMessage {
     return INVALIDATE_PARTITIONED_REGION_MESSAGE;
... 8860 lines suppressed ...