You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bu...@apache.org on 2020/07/18 00:05:33 UTC

[geode] 01/02: GEODE-8337: git mv Version.java->KnownVersion.java

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

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

commit 17d6679125942f5f33ded4670dc9e0ca643e03da
Author: Bill Burcham <bi...@gmail.com>
AuthorDate: Wed Jul 8 13:07:43 2020 -0700

    GEODE-8337: git mv Version.java->KnownVersion.java
---
 .../geode/distributed/internal/DateMessage.java    |   6 +-
 ...ackwardCompatibilitySerializationDUnitTest.java |  17 +-
 .../internal/cache/DeltaPropagationDUnitTest.java  |   6 +-
 .../geode/internal/cache/GIIDeltaDUnitTest.java    |   6 +-
 .../geode/pdx/PDXAsyncEventQueueDUnitTest.java     |   4 +-
 .../geode/pdx/PdxAttributesDistributedTest.java    |   6 +-
 .../apache/geode/pdx/PdxClientServerDUnitTest.java |   8 +-
 .../cache/client/ClientCacheFactoryJUnitTest.java  |  24 +--
 .../cache/CompactOfflineDiskStoreJUnitTest.java    |   4 +-
 .../cache/FilterProfileConcurrencyTest.java        |   4 +-
 ...FOEvictionAlgoMemoryEnabledRegionJUnitTest.java |   4 +-
 .../cache/ha/HARegionQueueIntegrationTest.java     |   4 +-
 .../cache/tier/sockets/CacheClientProxyTest.java   |   4 +-
 .../sockets/ServerConnectionIntegrationTest.java   |   6 +-
 .../offheap/OffHeapValidationJUnitTest.java        |   4 +-
 .../geode/pdx/AutoSerializableJUnitTest.java       |  52 +++---
 .../org/apache/geode/pdx/ByteSourceJUnitTest.java  |   6 +-
 .../geode/pdx/PdxInstanceFactoryJUnitTest.java     |   4 +-
 .../org/apache/geode/pdx/PdxInstanceJUnitTest.java |   4 +-
 .../apache/geode/pdx/PdxSerializableJUnitTest.java |  54 +++---
 .../internal/InternalDataSerializerBenchmark.java  |   6 +-
 .../src/main/java/org/apache/geode/CopyHelper.java |   4 +-
 .../main/java/org/apache/geode/DataSerializer.java |   6 +-
 .../admin/jmx/internal/StatAlertNotification.java  |   4 +-
 .../geode/cache/client/internal/AbstractOp.java    |   8 +-
 .../cache/client/internal/AuthenticateUserOp.java  |   8 +-
 .../client/internal/ClientSideHandshakeImpl.java   |  35 ++--
 .../client/internal/ExecuteFunctionNoAckOp.java    |   4 +-
 .../cache/client/internal/ExecuteFunctionOp.java   |   4 +-
 .../internal/ExecuteRegionFunctionNoAckOp.java     |   4 +-
 .../client/internal/ExecuteRegionFunctionOp.java   |   4 +-
 .../internal/ExecuteRegionFunctionSingleHopOp.java |   4 +-
 .../geode/cache/client/internal/GetAllOp.java      |   4 +-
 .../geode/cache/client/internal/KeySetOp.java      |   4 +-
 .../cache/client/internal/ProxyCacheCloseOp.java   |   4 +-
 .../geode/cache/client/internal/PutAllOp.java      |   4 +-
 .../geode/cache/client/internal/QueryOp.java       |   4 +-
 .../cache/client/internal/RegisterInterestOp.java  |   4 +-
 .../geode/cache/client/internal/RemoveAllOp.java   |   4 +-
 .../internal/locator/ServerLocationRequest.java    |   4 +-
 .../internal/locator/ServerLocationResponse.java   |   4 +-
 .../apache/geode/cache/query/internal/CqEntry.java |   4 +-
 .../internal/CumulativeNonDistinctResults.java     |   4 +-
 .../cache/query/internal/LinkedResultSet.java      |   4 +-
 .../cache/query/internal/LinkedStructSet.java      |   4 +-
 .../cache/query/internal/NWayMergeResults.java     |   4 +-
 .../geode/cache/query/internal/NullToken.java      |   4 +-
 .../cache/query/internal/PRQueryTraceInfo.java     |   4 +-
 .../geode/cache/query/internal/ResultsBag.java     |   4 +-
 .../query/internal/ResultsCollectionWrapper.java   |   4 +-
 .../geode/cache/query/internal/ResultsSet.java     |   4 +-
 .../cache/query/internal/SortedResultSet.java      |   4 +-
 .../cache/query/internal/SortedStructSet.java      |   4 +-
 .../geode/cache/query/internal/StructImpl.java     |   4 +-
 .../geode/cache/query/internal/StructSet.java      |   4 +-
 .../geode/cache/query/internal/Undefined.java      |   4 +-
 .../query/internal/index/IndexCreationData.java    |   4 +-
 .../cache/query/internal/types/ObjectTypeImpl.java |   4 +-
 .../internal/ClusterDistributionManager.java       |   6 +-
 .../distributed/internal/DistributionAdvisor.java  |   4 +-
 .../distributed/internal/DistributionImpl.java     |   4 +-
 .../distributed/internal/DistributionManager.java  |   6 +-
 .../distributed/internal/DistributionMessage.java  |   4 +-
 .../internal/LonerDistributionManager.java         |   6 +-
 .../geode/distributed/internal/StartupMessage.java |   4 +-
 .../internal/StartupResponseMessage.java           |   4 +-
 .../StartupResponseWithVersionMessage.java         |   4 +-
 .../internal/locks/DLockRemoteToken.java           |   4 +-
 .../distributed/internal/locks/DLockService.java   |   4 +-
 .../membership/InternalDistributedMember.java      |   6 +-
 .../internal/streaming/StreamingOperation.java     |   9 +-
 .../org/apache/geode/internal/DSFIDFactory.java    |   4 +-
 .../geode/internal/HeapDataOutputStream.java       |  10 +-
 .../geode/internal/InternalDataSerializer.java     |  36 ++--
 .../geode/internal/VersionedObjectInput.java       |   8 +-
 .../geode/internal/VersionedObjectOutput.java      |  12 +-
 .../internal/admin/remote/ClientHealthStats.java   |   8 +-
 .../statalerts/GaugeThresholdDecoratorImpl.java    |   4 +-
 .../statalerts/NumberThresholdDecoratorImpl.java   |   4 +-
 .../internal/cache/AbstractUpdateOperation.java    |   4 +-
 .../apache/geode/internal/cache/BucketRegion.java  |   4 +-
 .../cache/DestroyPartitionedRegionMessage.java     |   6 +-
 .../apache/geode/internal/cache/DiskInitFile.java  |  37 +++--
 .../apache/geode/internal/cache/DiskStoreImpl.java |  15 +-
 .../internal/cache/DistTXPrecommitMessage.java     |   4 +-
 .../internal/cache/DistributedPingMessage.java     |   4 +-
 .../internal/cache/DistributedPutAllOperation.java |   6 +-
 .../cache/DistributedTombstoneOperation.java       |   6 +-
 .../geode/internal/cache/EntryEventImpl.java       |  10 +-
 .../org/apache/geode/internal/cache/EventID.java   |  26 +--
 ...xpireDisconnectedClientTransactionsMessage.java |   6 +-
 .../apache/geode/internal/cache/FilterProfile.java |   4 +-
 .../geode/internal/cache/FilterRoutingInfo.java    |  14 +-
 .../geode/internal/cache/GemFireCacheImpl.java     |   5 +-
 .../internal/cache/InitialImageOperation.java      |  34 ++--
 .../cache/InvalidatePartitionedRegionMessage.java  |   6 +-
 .../cache/LatestLastAccessTimeOperation.java       |   4 +-
 .../apache/geode/internal/cache/LocalRegion.java   |   6 +-
 .../java/org/apache/geode/internal/cache/Node.java |   4 +-
 .../geode/internal/cache/NonLocalRegionEntry.java  |   4 +-
 .../org/apache/geode/internal/cache/Oplog.java     |  81 ++++-----
 .../geode/internal/cache/PRQueryProcessor.java     |   4 +-
 .../internal/cache/PartitionRegionConfig.java      |   4 +-
 .../geode/internal/cache/PartitionedRegion.java    |   8 +-
 .../cache/PartitionedRegionQueryEvaluator.java     |   4 +-
 .../cache/PreferBytesCachedDeserializable.java     |   4 +-
 .../geode/internal/cache/ProxyRegionMap.java       |   4 +-
 .../apache/geode/internal/cache/RegionEntry.java   |   4 +-
 .../geode/internal/cache/RegionEventImpl.java      |   4 +-
 .../geode/internal/cache/ServerPingMessage.java    |   4 +-
 .../cache/StoreAllCachedDeserializable.java        |   4 +-
 .../geode/internal/cache/TXCommitMessage.java      |  17 +-
 .../apache/geode/internal/cache/TXEntryState.java  |   4 +-
 .../java/org/apache/geode/internal/cache/TXId.java |   4 +-
 .../internal/cache/TXRegionLockRequestImpl.java    |   8 +-
 .../org/apache/geode/internal/cache/Token.java     |  14 +-
 .../internal/cache/VMCachedDeserializable.java     |   4 +-
 .../geode/internal/cache/ValidatingDiskRegion.java |   4 +-
 .../internal/cache/ValueComparisonHelper.java      |   4 +-
 .../SnappyCompressedCachedDeserializable.java      |   4 +-
 .../SerializableRegionRedundancyStatusImpl.java    |   4 +-
 .../SerializableRestoreRedundancyResultsImpl.java  |   4 +-
 .../entries/AbstractOplogDiskRegionEntry.java      |   4 +-
 .../cache/entries/AbstractRegionEntry.java         |   4 +-
 .../geode/internal/cache/entries/DiskEntry.java    |   9 +-
 .../cache/execute/FunctionRemoteContext.java       |   7 +-
 .../PartitionedRegionFunctionResultSender.java     |   4 +-
 .../geode/internal/cache/ha/HARegionQueue.java     |   6 +-
 .../geode/internal/cache/locks/TXLockBatch.java    |   4 +-
 .../geode/internal/cache/locks/TXLockIdImpl.java   |   4 +-
 .../cache/partitioned/BucketCountLoadProbe.java    |   4 +-
 .../cache/partitioned/FetchBulkEntriesMessage.java |   8 +-
 .../cache/partitioned/FetchEntriesMessage.java     |   8 +-
 .../cache/partitioned/FetchKeysMessage.java        |   8 +-
 .../internal/cache/partitioned/GetMessage.java     |   4 +-
 .../cache/partitioned/IndexCreationMsg.java        |   6 +-
 .../cache/partitioned/PRTombstoneMessage.java      |   6 +-
 .../cache/partitioned/PartitionMessage.java        |   6 +-
 .../internal/cache/partitioned/QueryMessage.java   |   8 +-
 .../cache/partitioned/SizedBasedLoadProbe.java     |   4 +-
 .../partitioned/StreamingPartitionOperation.java   |   4 +-
 .../internal/cache/persistence/BytesAndBits.java   |   8 +-
 .../cache/persistence/DiskInitFileInterpreter.java |   4 +-
 .../cache/persistence/DiskInitFileParser.java      |  10 +-
 .../internal/cache/persistence/DiskStoreID.java    |   4 +-
 .../internal/cache/snapshot/SnapshotPacket.java    |   6 +-
 .../geode/internal/cache/tier/ConnectionProxy.java |   4 +-
 .../internal/cache/tier/ServerSideHandshake.java   |   4 +-
 .../internal/cache/tier/sockets/AcceptorImpl.java  |   6 +-
 .../internal/cache/tier/sockets/BaseCommand.java   |   8 +-
 .../cache/tier/sockets/BaseCommandQuery.java       |   8 +-
 .../cache/tier/sockets/CacheClientNotifier.java    |  12 +-
 .../cache/tier/sockets/CacheClientProxy.java       |  18 +-
 .../tier/sockets/CacheClientProxyFactory.java      |   6 +-
 .../cache/tier/sockets/CacheClientUpdater.java     |   4 +-
 .../cache/tier/sockets/CacheServerHelper.java      |   4 +-
 .../cache/tier/sockets/ChunkedMessage.java         |   6 +-
 .../tier/sockets/ClientDataSerializerMessage.java  |  10 +-
 .../cache/tier/sockets/ClientHealthMonitor.java    |   9 +-
 .../tier/sockets/ClientInstantiatorMessage.java    |   8 +-
 .../tier/sockets/ClientInterestMessageImpl.java    |  10 +-
 .../tier/sockets/ClientMarkerMessageImpl.java      |  10 +-
 .../cache/tier/sockets/ClientPingMessageImpl.java  |  10 +-
 .../tier/sockets/ClientProxyMembershipID.java      |  14 +-
 .../tier/sockets/ClientRegistrationMetadata.java   |  18 +-
 .../cache/tier/sockets/ClientTombstoneMessage.java |   6 +-
 .../tier/sockets/ClientUpdateMessageImpl.java      |  26 +--
 .../cache/tier/sockets/CommandInitializer.java     | 116 ++++++-------
 .../internal/cache/tier/sockets/EncryptorImpl.java |   6 +-
 .../cache/tier/sockets/HAEventWrapper.java         |   4 +-
 .../internal/cache/tier/sockets/Handshake.java     |   6 +-
 .../tier/sockets/InterestResultPolicyImpl.java     |   4 +-
 .../geode/internal/cache/tier/sockets/Message.java |  16 +-
 .../cache/tier/sockets/MessageDispatcher.java      |   4 +-
 .../cache/tier/sockets/ObjectPartList.java         |   4 +-
 .../tier/sockets/OldClientSupportService.java      |   4 +-
 .../geode/internal/cache/tier/sockets/Part.java    |   6 +-
 .../cache/tier/sockets/ServerConnection.java       |  33 ++--
 .../tier/sockets/ServerSideHandshakeFactory.java   |  14 +-
 .../tier/sockets/ServerSideHandshakeImpl.java      |  35 ++--
 .../cache/tier/sockets/SocketMessageWriter.java    |  15 +-
 .../cache/tier/sockets/VersionedObjectList.java    |   9 +-
 .../tier/sockets/command/CloseConnection.java      |   5 +-
 .../tier/sockets/command/ExecuteFunction66.java    |   4 +-
 .../sockets/command/ExecuteRegionFunction66.java   |   6 +-
 .../command/ExecuteRegionFunctionSingleHop.java    |   4 +-
 .../sockets/command/GatewayReceiverCommand.java    |   4 +-
 .../cache/tier/sockets/command/GetAll70.java       |   4 +-
 .../internal/cache/tier/sockets/command/Put65.java |  16 +-
 .../cache/tier/sockets/command/PutAll70.java       |   5 +-
 .../tier/sockets/command/RegisterInterest61.java   |   4 +-
 .../sockets/command/RegisterInterestList66.java    |   4 +-
 .../geode/internal/cache/tx/DistTxEntryEvent.java  |   8 +-
 .../internal/cache/tx/RemoteFetchKeysMessage.java  |   4 +-
 .../geode/internal/cache/tx/RemoteGetMessage.java  |   4 +-
 .../internal/cache/tx/RemotePutAllMessage.java     |   4 +-
 .../internal/cache/tx/RemoteRemoveAllMessage.java  |   4 +-
 .../internal/cache/versions/DiskVersionTag.java    |   4 +-
 .../internal/cache/versions/RVVException.java      |   4 +-
 .../cache/versions/RegionVersionVector.java        |   4 +-
 .../internal/cache/versions/VMVersionTag.java      |   4 +-
 .../geode/internal/cache/versions/VersionTag.java  |   4 +-
 .../internal/cache/wan/GatewaySenderAdvisor.java   |  11 +-
 .../wan/GatewaySenderEventCallbackArgument.java    |   4 +-
 .../internal/cache/wan/GatewaySenderEventImpl.java |  16 +-
 ...aySenderQueueEntrySynchronizationOperation.java |   4 +-
 .../org/apache/geode/internal/logging/Banner.java  |   4 +-
 .../geode/internal/sequencelog/io/GraphReader.java |   4 +-
 .../org/apache/geode/internal/tcp/Connection.java  |  18 +-
 .../apache/geode/internal/tcp/MsgDestreamer.java   |   8 +-
 .../org/apache/geode/internal/tcp/MsgReader.java   |   4 +-
 .../org/apache/geode/internal/tcp/MsgStreamer.java |  14 +-
 .../tcp/VersionedByteBufferInputStream.java        |  14 +-
 .../geode/internal/tcp/VersionedMsgStreamer.java   |   8 +-
 .../org/apache/geode/internal/util/BlobHelper.java |   6 +-
 .../management/internal/FederationComponent.java   |   4 +-
 .../internal/JmxManagerLocatorRequest.java         |   4 +-
 .../internal/JmxManagerLocatorResponse.java        |   4 +-
 .../internal/beans/CacheServerBridge.java          |   6 +-
 .../internal/beans/MemberMBeanBridge.java          |   4 +-
 .../configuration/domain/Configuration.java        |   6 +-
 .../internal/configuration/domain/XmlEntity.java   |   6 +-
 .../messages/ConfigurationResponse.java            |   4 +-
 .../internal/functions/CliFunctionResult.java      |   6 +-
 .../operation/RestoreRedundancyPerformer.java      |   4 +-
 .../management/internal/util/ManagementUtils.java  |   4 +-
 .../java/org/apache/geode/pdx/internal/EnumId.java |   4 +-
 .../org/apache/geode/pdx/internal/EnumInfo.java    |   6 +-
 .../org/apache/geode/pdx/internal/PdxField.java    |   6 +-
 .../apache/geode/pdx/internal/PdxInstanceEnum.java |   4 +-
 .../apache/geode/pdx/internal/PdxOutputStream.java |   6 +-
 .../org/apache/geode/pdx/internal/PdxType.java     |   6 +-
 .../apache/geode/pdx/internal/json/PdxToJSON.java  |   6 +-
 .../cache/execute/FunctionAdapterJUnitTest.java    |   4 +-
 .../cache/query/internal/ResultsBagJUnitTest.java  |   4 +-
 .../geode/internal/DataSerializableJUnitTest.java  |  12 +-
 .../internal/HeapDataOutputStreamJUnitTest.java    |  10 +-
 ...lDataSerializerSerializationAcceptlistTest.java |   4 +-
 .../internal/cache/AbstractRegionMapTest.java      |   6 +-
 .../apache/geode/internal/cache/EventIDTest.java   |   8 +-
 ...eDisconnectedClientTransactionsMessageTest.java |   8 +-
 .../geode/internal/cache/FilterInfoTest.java       |   6 +-
 .../cache/ha/EventIdOptimizationJUnitTest.java     |  12 +-
 .../cache/ha/ThreadIdentifierJUnitTest.java        |   4 +-
 .../partitioned/FetchEntriesMessageJUnitTest.java  |   5 +-
 .../tier/sockets/CacheClientProxyFactoryTest.java  |  10 +-
 .../tier/sockets/CommandInitializerJUnitTest.java  |   4 +-
 .../cache/tier/sockets/MessageJUnitTest.java       |   4 +-
 .../cache/tier/sockets/ServerConnectionTest.java   |  10 +-
 .../tier/sockets/command/ContainsKey66Test.java    |   4 +-
 .../tier/sockets/command/CreateRegionTest.java     |   4 +-
 .../cache/tier/sockets/command/Destroy65Test.java  |   4 +-
 .../tier/sockets/command/DestroyRegionTest.java    |   4 +-
 .../cache/tier/sockets/command/DestroyTest.java    |   4 +-
 .../cache/tier/sockets/command/Get70Test.java      |   4 +-
 .../cache/tier/sockets/command/InvalidateTest.java |   4 +-
 .../cache/tier/sockets/command/Put61Test.java      |   4 +-
 .../cache/tier/sockets/command/Put65Test.java      |   4 +-
 .../cache/tier/sockets/command/PutTest.java        |   4 +-
 .../sockets/command/RegisterInterest61Test.java    |   4 +-
 .../command/RegisterInterestList61Test.java        |   4 +-
 .../command/RegisterInterestList66Test.java        |   4 +-
 .../sockets/command/RegisterInterestListTest.java  |   4 +-
 .../cache/tier/sockets/command/RequestTest.java    |   4 +-
 .../sockets/command/UnregisterInterestTest.java    |   4 +-
 .../cache/versions/AbstractVersionTagTestBase.java |   4 +-
 .../cache/versions/RegionVersionVectorTest.java    |   4 +-
 .../geode/internal/offheap/DataTypeJUnitTest.java  |   4 +-
 .../offheap/OffHeapStoredObjectJUnitTest.java      |   6 +-
 .../geode/internal/size/ObjectTraverserPerf.java   |   4 +-
 .../apache/geode/internal/tcp/MsgStreamerTest.java |   8 +-
 .../apache/geode/internal/util/BlobHelperTest.java |   6 +-
 .../operation/RestoreRedundancyPerformerTest.java  |   6 +-
 .../rollingupgrade/RollingUpgradeDUnitTest.java    |   4 +-
 .../geode/security/FilterPostAuthorization.java    |   4 +-
 .../geode/security/FilterPreAuthorization.java     |   4 +-
 .../query/cq/internal/CqServiceFactoryImpl.java    |  18 +-
 .../cache/query/cq/internal/ops/CreateCQOp.java    |   4 +-
 .../query/cq/internal/ops/GetDurableCQsOp.java     |   4 +-
 .../geode/cache30/MultiVMRegionTestCase.java       |   4 +-
 .../apache/geode/management/cli/GfshCommand.java   |   4 +-
 .../cli/commands/CreateGatewaySenderCommand.java   |   4 +-
 .../internal/cli/commands/RedundancyCommand.java   |   4 +-
 .../geode/management/internal/cli/shell/Gfsh.java  |   4 +-
 .../commands/CreateGatewaySenderCommandTest.java   |   6 +-
 .../AnalyzeDataSerializablesJUnitTestBase.java     |   4 +-
 .../AnalyzeSerializablesJUnitTestBase.java         |   4 +-
 .../geode/codeAnalysis/CompiledClassUtils.java     |   4 +-
 .../internal/cache/eviction/LRUTestEntry.java      |   4 +-
 .../org/apache/geode/pdx/NonDelegatingLoader.java  |   4 +-
 .../apache/geode/test/version/VersionManager.java  |   2 +-
 .../internal/LuceneIndexCreationProfile.java       |   6 +-
 .../lucene/internal/LuceneResultStructImpl.java    |   4 +-
 .../cache/lucene/internal/LuceneServiceImpl.java   |   6 +-
 .../cache/lucene/internal/StringQueryProvider.java |   4 +-
 .../internal/cli/LuceneDestroyIndexCommand.java    |   6 +-
 .../lucene/internal/distributed/EntryScore.java    |   4 +-
 .../distributed/LuceneFunctionContext.java         |   4 +-
 .../internal/distributed/LuceneQueryFunction.java  |   6 +-
 .../lucene/internal/distributed/TopEntries.java    |   4 +-
 .../internal/distributed/TopEntriesCollector.java  |   4 +-
 .../distributed/TopEntriesCollectorManager.java    |   4 +-
 .../WaitUntilFlushedFunctionContext.java           |   4 +-
 .../cache/lucene/internal/filesystem/ChunkKey.java |   4 +-
 .../cache/lucene/internal/filesystem/File.java     |   4 +-
 .../cache/lucene/internal/results/PageResults.java |   6 +-
 .../LuceneIndexCreationProfileJUnitTest.java       |   4 +-
 .../internal/cli/LuceneIndexCommandsJUnitTest.java |   6 +-
 .../internal/results/PageEntryJUnitTest.java       |   4 +-
 .../LuceneSearchWithRollingUpgradeTestBase.java    |   6 +-
 ...ccessfulWhenAllServersRollToCurrentVersion.java |   4 +-
 .../api/MemberIdentifierFactoryImplTest.java       |   6 +-
 .../membership/gms/GMSMemberDataJUnitTest.java     |   6 +-
 .../gms/GMSMemberDataVersionJUnitTest.java         |   4 +-
 .../membership/gms/MemberDataBuilderImplTest.java  |   6 +-
 .../internal/membership/gms/TestMessage.java       |   4 +-
 .../gms/fd/GMSHealthMonitorJUnitTest.java          |  35 ++--
 .../gms/locator/GMSLocatorIntegrationTest.java     |   4 +-
 .../locator/GMSLocatorRecoveryIntegrationTest.java |  14 +-
 .../gms/membership/GMSJoinLeaveJUnitTest.java      |   8 +-
 .../gms/messenger/JGroupsMessengerJUnitTest.java   |  38 ++---
 .../membership/gms/util/MemberIdentifierUtil.java  |   6 +-
 .../internal/membership/api/MemberData.java        |   3 +-
 .../internal/membership/api/MemberIdentifier.java  |   4 +-
 .../internal/membership/gms/GMSMemberData.java     |  12 +-
 .../internal/membership/gms/GMSMembership.java     |   6 +-
 .../internal/membership/gms/GMSMembershipView.java |   8 +-
 .../membership/gms/MemberDataBuilderImpl.java      |   4 +-
 .../membership/gms/MemberIdentifierImpl.java       |  32 ++--
 .../membership/gms/fd/GMSHealthMonitor.java        |   6 +-
 .../gms/locator/FindCoordinatorRequest.java        |   4 +-
 .../gms/locator/FindCoordinatorResponse.java       |   4 +-
 .../membership/gms/locator/GMSLocator.java         |  12 +-
 .../membership/gms/locator/GetViewRequest.java     |   4 +-
 .../membership/gms/locator/GetViewResponse.java    |   4 +-
 .../membership/gms/membership/GMSJoinLeave.java    |   4 +-
 .../gms/messages/FinalCheckPassedMessage.java      |   4 +-
 .../membership/gms/messages/HeartbeatMessage.java  |   4 +-
 .../gms/messages/HeartbeatRequestMessage.java      |   4 +-
 .../gms/messages/InstallViewMessage.java           |   4 +-
 .../gms/messages/JoinRequestMessage.java           |   4 +-
 .../gms/messages/JoinResponseMessage.java          |   4 +-
 .../gms/messages/LeaveRequestMessage.java          |   4 +-
 .../gms/messages/NetworkPartitionMessage.java      |   4 +-
 .../gms/messages/RemoveMemberMessage.java          |   4 +-
 .../gms/messages/SuspectMembersMessage.java        |   4 +-
 .../membership/gms/messages/ViewAckMessage.java    |   4 +-
 .../membership/gms/messenger/GMSPingPonger.java    |   6 +-
 .../membership/gms/messenger/JGroupsMessenger.java |  30 ++--
 .../apache/geode/OldClientSupportDUnitTest.java    |  12 +-
 .../gemstone/gemfire/OldClientSupportProvider.java |  10 +-
 .../redis/internal/data/ByteArrayWrapper.java      |   4 +-
 .../serialization/BufferDataOutputStream.java      |  12 +-
 .../internal/serialization/ByteArrayDataInput.java |   8 +-
 .../serialization/DSFIDNotFoundException.java      |   2 +-
 .../serialization/DataSerializableFixedID.java     |   4 +-
 .../serialization/DeserializationContext.java      |   2 +-
 .../{Version.java => KnownVersion.java}            | 181 +++++++++++----------
 .../serialization/SerializationContext.java        |   2 +-
 .../serialization/SerializationVersions.java       |   2 +-
 .../serialization/StaticSerialization.java         |  28 ++--
 .../serialization/VersionedDataInputStream.java    |   6 +-
 .../serialization/VersionedDataOutputStream.java   |   6 +-
 .../serialization/VersionedDataStream.java         |   8 +-
 .../geode/internal/serialization/Versioning.java   |  12 +-
 .../geode/internal/serialization/VersioningIO.java |  14 +-
 .../internal/AbstractSerializationContext.java     |  10 +-
 .../internal/DSFIDSerializerImpl.java              |  18 +-
 .../internal/DeserializationContextImpl.java       |   4 +-
 .../internal/SerializationContextImpl.java         |   4 +-
 .../BufferDataOutputStreamJUnitTest.java           |   6 +-
 .../serialization/ByteArrayDataInputTest.java      |   8 +-
 .../internal/serialization/VersionJUnitTest.java   |  70 ++++----
 .../serialization/VersioningJUnitTest.java         |  20 +--
 .../internal/tcpserver/HostAndPort.java            |   4 +-
 .../distributed/internal/tcpserver/TcpClient.java  |  20 +--
 .../distributed/internal/tcpserver/TcpServer.java  |  18 +-
 .../internal/tcpserver/VersionRequest.java         |   4 +-
 .../internal/tcpserver/VersionResponse.java        |   4 +-
 .../internal/tcpserver/HostAndPortTest.java        |   8 +-
 .../locator/wan/RemoteLocatorJoinRequest.java      |   4 +-
 .../locator/wan/RemoteLocatorJoinResponse.java     |   4 +-
 .../locator/wan/RemoteLocatorPingRequest.java      |   4 +-
 .../locator/wan/RemoteLocatorPingResponse.java     |   4 +-
 .../internal/locator/wan/RemoteLocatorRequest.java |   4 +-
 .../locator/wan/RemoteLocatorResponse.java         |   4 +-
 .../RemoteParallelGatewaySenderEventProcessor.java |   4 +-
 ...ateGatewaySenderMixedSiteOneCurrentSiteTwo.java |   4 +-
 .../geode/rest/internal/web/util/JSONUtils.java    |  14 +-
 .../web/controllers/ShellCommandsController.java   |   4 +-
 390 files changed, 1615 insertions(+), 1561 deletions(-)

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 3f4cb5e..be23543 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,8 +24,8 @@ import java.util.Date;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This message simply contains a date
@@ -38,7 +38,7 @@ public class DateMessage extends SerialDistributionMessage {
   /** The date being distributed */
   private Date date;
   /** The versions in which this message was modified */
-  private static final Version[] dsfidVersions = new Version[] {};
+  private static final KnownVersion[] dsfidVersions = new KnownVersion[] {};
 
   ///////////////////// Instance Methods /////////////////////
 
@@ -99,7 +99,7 @@ public class DateMessage extends SerialDistributionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return dsfidVersions;
   }
 
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 012d976..05f4e4f 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
@@ -37,9 +37,9 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl;
@@ -98,7 +98,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   @Test
   public void testToDataFromHigherVersionToLower() throws Exception {
     DataOutputStream dos =
-        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_56);
+        new VersionedDataOutputStream(new DataOutputStream(baos), KnownVersion.GFE_56);
     InternalDataSerializer.writeDSFID(msg, dos);
     assertTrue(toDataPre66Called);
     assertFalse(toDataCalled);
@@ -112,7 +112,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   @Test
   public void testToDataFromLowerVersionToHigher() throws Exception {
     DataOutputStream dos =
-        new VersionedDataOutputStream(new DataOutputStream(baos), Version.GFE_701);
+        new VersionedDataOutputStream(new DataOutputStream(baos), KnownVersion.GFE_701);
     InternalDataSerializer.writeDSFID(msg, dos);
     assertTrue(toDataCalled);
   }
@@ -128,7 +128,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     this.bais = new ByteArrayInputStream(baos.toByteArray());
 
     DataInputStream dis =
-        new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_701);
+        new VersionedDataInputStream(new DataInputStream(bais), KnownVersion.GFE_701);
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof TestMessage);
     assertTrue(fromDataCalled);
@@ -145,7 +145,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
     this.bais = new ByteArrayInputStream(baos.toByteArray());
 
     DataInputStream dis =
-        new VersionedDataInputStream(new DataInputStream(bais), Version.GFE_56);
+        new VersionedDataInputStream(new DataInputStream(bais), KnownVersion.GFE_56);
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof TestMessage);
     assertTrue(fromDataPre66Called);
@@ -199,7 +199,7 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
   }
 
   private void checkSupportForRollingUpgrade(Object ds) {
-    Version[] versions = null;
+    KnownVersion[] versions = null;
     if (ds instanceof SerializationVersions) {
       versions = ((SerializationVersions) ds).getSerializationVersions();
     }
@@ -257,12 +257,13 @@ public class BackwardCompatibilitySerializationDUnitTest extends JUnit4CacheTest
 
   public static class TestMessage implements DataSerializableFixedID {
     /** The versions in which this message was modified */
-    private static final Version[] dsfidVersions = new Version[] {Version.GFE_66, Version.GFE_70};
+    private static final KnownVersion[] dsfidVersions =
+        new KnownVersion[] {KnownVersion.GFE_66, KnownVersion.GFE_70};
 
     public TestMessage() {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java
index 1b0efdb..5d5a44d 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/DeltaPropagationDUnitTest.java
@@ -97,7 +97,7 @@ import org.apache.geode.internal.cache.tier.sockets.CacheClientProxyFactory.Inte
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.MessageDispatcher;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.tcp.ConnectionTable;
 import org.apache.geode.test.dunit.VM;
@@ -1593,7 +1593,7 @@ public class DeltaPropagationDUnitTest implements Serializable {
     @Override
     public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       return new CustomCacheClientProxy(notifier, socket, proxyId, isPrimary, clientConflation,
@@ -1606,7 +1606,7 @@ public class DeltaPropagationDUnitTest implements Serializable {
 
     private CustomCacheClientProxy(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       super(notifier.getCache(), notifier, socket, proxyId, isPrimary, clientConflation,
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java
index 26a979c..1324364 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/cache/GIIDeltaDUnitTest.java
@@ -60,7 +60,7 @@ import org.apache.geode.internal.cache.entries.DiskEntry;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.awaitility.GeodeAwaitility;
 import org.apache.geode.test.dunit.Assert;
 import org.apache.geode.test.dunit.AsyncInvocation;
@@ -2527,7 +2527,7 @@ public class GIIDeltaDUnitTest extends JUnit4CacheTestCase {
         LocalRegion region = (LocalRegion) cache.getRegion(regionName);
         RegionVersionVector rvv = region.getVersionVector();
         rvv = rvv.getCloneForTransmission();
-        HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
 
         // Using gemfire serialization because
         // RegionVersionVector is not java serializable
@@ -2554,7 +2554,7 @@ public class GIIDeltaDUnitTest extends JUnit4CacheTestCase {
         LocalRegion region = (LocalRegion) cache.getRegion(REGION_NAME);
         RegionVersionVector rvv = region.getDiskRegion().getRegionVersionVector();
         rvv = rvv.getCloneForTransmission();
-        HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
 
         // Using gemfire serialization because
         // RegionVersionVector is not java serializable
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java
index 1809cbf..8bc2db9 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PDXAsyncEventQueueDUnitTest.java
@@ -30,7 +30,7 @@ import org.apache.geode.cache.asyncqueue.AsyncEvent;
 import org.apache.geode.cache.asyncqueue.AsyncEventListener;
 import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.SerializableCallable;
 import org.apache.geode.test.dunit.VM;
@@ -150,7 +150,7 @@ public class PDXAsyncEventQueueDUnitTest extends JUnit4CacheTestCase {
         // Make sure the cache exists
         getCache();
         DataSerializer.writeObject(new SimpleClass(value, (byte) value),
-            new HeapDataOutputStream(Version.CURRENT));
+            new HeapDataOutputStream(KnownVersion.CURRENT));
         return null;
       }
     };
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java
index bd0ab5c..0828285 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxAttributesDistributedTest.java
@@ -46,7 +46,7 @@ import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.SimpleClass.SimpleEnum;
 import org.apache.geode.pdx.internal.EnumId;
 import org.apache.geode.pdx.internal.EnumInfo;
@@ -396,13 +396,13 @@ public class PdxAttributesDistributedTest extends JUnit4CacheTestCase {
 
   private void defineAType() throws IOException {
     SimpleClass sc = new SimpleClass(1, (byte) 2);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(sc, out);
   }
 
   private void defineATypeNoEnum() throws /* IO */ Exception {
     SimpleClass sc = new SimpleClass(1, (byte) 2, null);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(sc, out);
   }
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java
index 78ad24c..e8c4615 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/PdxClientServerDUnitTest.java
@@ -48,7 +48,7 @@ import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.internal.AvailablePortHelper;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.PdxSerializerObject;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.AutoSerializableManager;
 import org.apache.geode.test.dunit.Host;
 import org.apache.geode.test.dunit.Invoke;
@@ -390,7 +390,7 @@ public class PdxClientServerDUnitTest extends JUnit4CacheTestCase {
     // Serialize an object and put it in both regions, sending
     // the event to each pool
     vm2.invoke(() -> {
-      HeapDataOutputStream bytes = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream bytes = new HeapDataOutputStream(KnownVersion.CURRENT);
       Region r1 = getRootRegion("region1");
       r1.put(1, new SimpleClass(57, (byte) 3));
       Region r2 = getRootRegion("region2");
@@ -422,7 +422,7 @@ public class PdxClientServerDUnitTest extends JUnit4CacheTestCase {
     createClientRegion(vm2, port);
 
     vm1.invoke(() -> {
-      HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
       DataSerializer.writeObject(new SimpleClass(57, (byte) 3), out);
       byte[] bytes = out.toByteArray();
       Region r = getRootRegion("testSimplePdx");
@@ -515,7 +515,7 @@ public class PdxClientServerDUnitTest extends JUnit4CacheTestCase {
         props.setProperty(LOCATORS, "");
         getSystem(props);
         Cache cache = getCache();
-        HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
         DataSerializer.writeObject(new SimpleClass(57, (byte) 3), out);
 
         PoolFactory pf = PoolManager.createFactory();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
index 77ccabb..d102474 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/ClientCacheFactoryJUnitTest.java
@@ -63,7 +63,7 @@ import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
 import org.apache.geode.internal.cache.xmlcache.ClientCacheCreation;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.pdx.ReflectionBasedAutoSerializer;
 import org.apache.geode.test.junit.categories.ClientServerTest;
@@ -354,37 +354,37 @@ public class ClientCacheFactoryJUnitTest {
     InternalDistributedMember memberID =
         (InternalDistributedMember) clientCache.getDistributedSystem().getDistributedMember();
     MemberIdentifier gmsID = memberID;
-    memberID.setVersionObjectForTest(Version.GFE_82);
-    assertThat(memberID.getVersionOrdinalObject()).isEqualTo(Version.GFE_82);
+    memberID.setVersionObjectForTest(KnownVersion.GFE_82);
+    assertThat(memberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.GFE_82);
 
     ClientProxyMembershipID clientID = ClientProxyMembershipID.getClientId(memberID);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.GFE_82);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.GFE_82);
     DataSerializer.writeObject(clientID, out);
 
     DataInputStream in =
         new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()),
-            Version.CURRENT);
+            KnownVersion.CURRENT);
     ClientProxyMembershipID newID = DataSerializer.readObject(in);
     InternalDistributedMember newMemberID =
         (InternalDistributedMember) newID.getDistributedMember();
-    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(Version.GFE_82);
-    assertThat(newID.getClientVersion()).isEqualTo(Version.GFE_82);
+    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.GFE_82);
+    assertThat(newID.getClientVersion()).isEqualTo(KnownVersion.GFE_82);
 
     assertThat(newMemberID.getUuidLeastSignificantBits()).isEqualTo(0);
     assertThat(newMemberID.getUuidMostSignificantBits()).isEqualTo(0);
 
     gmsID.setUUID(new UUID(1234L, 5678L));
-    memberID.setVersionObjectForTest(Version.CURRENT);
+    memberID.setVersionObjectForTest(KnownVersion.CURRENT);
     clientID = ClientProxyMembershipID.getClientId(memberID);
-    out = new HeapDataOutputStream(Version.CURRENT);
+    out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(clientID, out);
 
     in = new VersionedDataInputStream(new ByteArrayInputStream(out.toByteArray()),
-        Version.CURRENT);
+        KnownVersion.CURRENT);
     newID = DataSerializer.readObject(in);
     newMemberID = (InternalDistributedMember) newID.getDistributedMember();
-    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(Version.CURRENT);
-    assertThat(newID.getClientVersion()).isEqualTo(Version.CURRENT);
+    assertThat(newMemberID.getVersionOrdinalObject()).isEqualTo(KnownVersion.CURRENT);
+    assertThat(newID.getClientVersion()).isEqualTo(KnownVersion.CURRENT);
 
     assertThat(newMemberID.getUuidLeastSignificantBits())
         .isEqualTo(gmsID.getUuidLeastSignificantBits());
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java
index 35574ad..a9a7826 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/CompactOfflineDiskStoreJUnitTest.java
@@ -41,7 +41,7 @@ import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Tests offline compaction
@@ -831,7 +831,7 @@ public class CompactOfflineDiskStoreJUnitTest {
     // 0: OPLOG_RVV. 1: drMap.size()==1, 2: disRegionId, 3: getRVVTrusted
     // 4: memberToVersion.size()==1, 5: memberid, 6-7: versionHolder 8: END_OF_RECORD_ID
     // but not every diskRegion has a member in RVV
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     RegionVersionHolder dummyHolder = new RegionVersionHolder(1);
     try {
       dummyHolder.toData(out);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java
index cdd5f48..17ddfed 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/FilterProfileConcurrencyTest.java
@@ -28,7 +28,7 @@ import org.junit.runner.RunWith;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.tier.InterestType;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.test.concurrency.ConcurrentTestRunner;
 import org.apache.geode.test.concurrency.ParallelExecutor;
@@ -57,7 +57,7 @@ public class FilterProfileConcurrencyTest {
   }
 
   private Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
-    return BlobHelper.deserializeBlob(bytes, Version.CURRENT, null);
+    return BlobHelper.deserializeBlob(bytes, KnownVersion.CURRENT, null);
   }
 
   private FilterProfile createFilterProfile() throws UnknownHostException {
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
index 6dead05..bfbce0f 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java
@@ -63,7 +63,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * This is a test verifies region is LIFO enabled by MEMORY verifies correct stats updating and
@@ -649,7 +649,7 @@ public class LIFOEvictionAlgoMemoryEnabledRegionJUnitTest {
     @Override
     public boolean fillInValue(final InternalRegion region, final Entry entry,
         final ByteArrayDataInput in, final DistributionManager distributionManager,
-        final Version version) {
+        final KnownVersion version) {
       return false;
     }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
index 293bfd9..14fc72b 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ha/HARegionQueueIntegrationTest.java
@@ -74,7 +74,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl;
 import org.apache.geode.internal.cache.tier.sockets.ConnectionListener;
 import org.apache.geode.internal.cache.tier.sockets.HAEventWrapper;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.concurrent.StoppableReentrantReadWriteLock;
@@ -509,7 +509,7 @@ public class HARegionQueueIntegrationTest {
   private InternalDistributedMember createMember() {
     // Create an InternalDistributedMember
     InternalDistributedMember member = mock(InternalDistributedMember.class);
-    when(member.getVersionOrdinalObject()).thenReturn(Version.CURRENT);
+    when(member.getVersionOrdinalObject()).thenReturn(KnownVersion.CURRENT);
     return member;
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java
index 4f65e38..0158946 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyTest.java
@@ -35,7 +35,7 @@ import org.junit.Test;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.net.SocketCloser;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.test.junit.rules.ExecutorServiceRule;
 import org.apache.geode.test.junit.rules.ServerStarterRule;
@@ -72,7 +72,7 @@ public class CacheClientProxyTest {
     when(proxyID.getDistributedMember()).thenReturn(member);
 
     CacheClientProxy proxy = new CacheClientProxy(ccn, socket, proxyID, true,
-        Handshake.CONFLATION_DEFAULT, Version.CURRENT, 1L, true,
+        Handshake.CONFLATION_DEFAULT, KnownVersion.CURRENT, 1L, true,
         null, null, mock(StatisticsClock.class));
 
     CompletableFuture<Void> result1 = executorServiceRule.runAsync(() -> proxy.close());
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
index 94e4de4..48ea5e7 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionIntegrationTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category(ClientServerTest.class)
@@ -102,7 +102,7 @@ public class ServerConnectionIntegrationTest {
     private volatile boolean signalled;
 
     TestMessage() {
-      super(3, Version.CURRENT);
+      super(3, KnownVersion.CURRENT);
       messageType = MessageType.REQUEST;
       securePart = new Part();
     }
@@ -155,7 +155,7 @@ public class ServerConnectionIntegrationTest {
       ServerSideHandshake handshake = mock(ServerSideHandshake.class);
       MessageIdExtractor extractor = mock(MessageIdExtractor.class);
 
-      when(handshake.getVersion()).thenReturn(Version.CURRENT);
+      when(handshake.getVersion()).thenReturn(KnownVersion.CURRENT);
       when(proxyID.getDistributedMember()).thenReturn(mock(InternalDistributedMember.class));
 
       setHandshake(handshake);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java
index dba0ab1..ea6a9f4 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/offheap/OffHeapValidationJUnitTest.java
@@ -60,7 +60,7 @@ import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.LocalRegion;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.OffHeapTest;
 
 /**
@@ -323,7 +323,7 @@ public class OffHeapValidationJUnitTest {
     String key = "keyString";
     String value = "this is a string";
     region.put(key, value);
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(value, hdos);
     byte[] uncompressedBytes = hdos.toByteArray();
     byte[] expectedValue = SnappyCompressor.getDefaultInstance().compress(uncompressedBytes);
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java
index cb8bfc2..7bde479 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/AutoSerializableJUnitTest.java
@@ -55,7 +55,7 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.PdxSerializerObject;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.AutoSerializableManager;
 import org.apache.geode.pdx.internal.PdxField;
 import org.apache.geode.pdx.internal.PdxInstanceImpl;
@@ -126,7 +126,7 @@ public class AutoSerializableJUnitTest {
     list.add("string four");
     objOut.set("string_list", list);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -178,7 +178,7 @@ public class AutoSerializableJUnitTest {
     m.put("k1", "v1");
     m.put("k2", "v2");
     m.put("k3", "v3");
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(m, out);
 
     Object dObj =
@@ -190,7 +190,7 @@ public class AutoSerializableJUnitTest {
   public void testMonth() throws Exception {
     setupSerializer(false, false, "org.apache.geode.pdx.AutoSerializableJUnitTest.MyMonth");
     MyMonth m = new MyMonth(1);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(m, out);
 
     Object dObj =
@@ -273,7 +273,7 @@ public class AutoSerializableJUnitTest {
   public void testExternalizable() throws Exception {
     setupSerializer("org.apache.geode.pdx.AutoSerializableJUnitTest.MyExternalizable");
     MyExternalizable o = new MyExternalizable(79);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
 
     Object dObj =
@@ -300,7 +300,7 @@ public class AutoSerializableJUnitTest {
   public void testWriteReplace() throws Exception {
     setupSerializer("org.apache.geode.pdx.AutoSerializableJUnitTest.MyWriteReplace");
     MyWriteReplace o = new MyWriteReplace("79");
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
 
     Object dObj =
@@ -324,7 +324,7 @@ public class AutoSerializableJUnitTest {
   public void testComparator() throws Exception {
     setupSerializer("org.apache.geode.pdx.AutoSerializableJUnitTest.MyComparator");
     TreeSet o = new TreeSet(new MyComparator());
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
 
     Object dObj =
@@ -501,7 +501,7 @@ public class AutoSerializableJUnitTest {
     BigInteger bi = new BigInteger("12345678901234567890");
     BigDecimal bd = new BigDecimal("1234567890.1234567890");
     BigHolder bih = new BigHolder(bi, bd);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       DataSerializer.writeObject(bih, out);
       throw new RuntimeException("expected NonPortableClassException");
@@ -524,7 +524,7 @@ public class AutoSerializableJUnitTest {
   public void testIsClassAutoSerialized() throws IOException, ClassNotFoundException {
     setupSerializer(new ExplicitClassNameAutoSerializer(false, ""), false);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     DomainObject objIn = (DomainObject) DataSerializer
@@ -549,7 +549,7 @@ public class AutoSerializableJUnitTest {
         new ExplicitIdentityAutoSerializer(false, "org.apache.geode.pdx.DomainObjectPdxAuto"),
         true);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
     DataSerializer.writeObject(objOut, out);
 
@@ -581,7 +581,7 @@ public class AutoSerializableJUnitTest {
         new ExplicitIncludedAutoSerializer(false, "org.apache.geode.pdx.DomainObjectPdxAuto"),
         true);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pi = (PdxInstance) DataSerializer
@@ -611,7 +611,7 @@ public class AutoSerializableJUnitTest {
         new ExplicitFieldNameAutoSerializer(false, "org.apache.geode.pdx.DomainObjectPdxAuto"),
         true);
     DomainObject objOut = new DomainObjectPdxAuto(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pi = (PdxInstance) DataSerializer
@@ -836,7 +836,7 @@ public class AutoSerializableJUnitTest {
     defaultHolder.l = 0L;
     defaultHolder.f = 0.0f;
     defaultHolder.d = 0.0;
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(nullHolder, out);
     PdxInstance pi =
         DataSerializer.readObject(new DataInputStream(new ByteArrayInputStream(out.toByteArray())));
@@ -846,7 +846,7 @@ public class AutoSerializableJUnitTest {
     assertFalse(nullHolder.equals(dObj));
     assertEquals(defaultHolder, dObj);
 
-    out = new HeapDataOutputStream(Version.CURRENT);
+    out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(defaultHolder, out);
     pi = DataSerializer
         .readObject(new DataInputStream(new ByteArrayInputStream(out.toByteArray())));
@@ -873,7 +873,7 @@ public class AutoSerializableJUnitTest {
     BigInteger bi = new BigInteger("12345678901234567890");
     BigDecimal bd = new BigDecimal("1234567890.1234567890");
     BigHolder bih = new BigHolder(bi, bd);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(bih, out);
     System.out.println(msg + " out.size=" + out.size());
     Object dObj =
@@ -964,7 +964,7 @@ public class AutoSerializableJUnitTest {
       chm.put("key" + i, new BigHolder(i));
     }
     CHMHolder h = new CHMHolder(chm);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(h, out);
     System.out.println(msg + " out.size=" + out.size());
     Object dObj =
@@ -985,7 +985,7 @@ public class AutoSerializableJUnitTest {
     DomainObject objOut = new DomainObjectPdxAuto(4);
     objOut.set("aString", "aString has a value");
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     // Now we want to read all fields.
@@ -1018,7 +1018,7 @@ public class AutoSerializableJUnitTest {
     DomainObjectPdxAuto objOut = new DomainObjectPdxAuto(4);
     objOut.anInteger = null;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     // Now we want to read all fields.
@@ -1039,7 +1039,7 @@ public class AutoSerializableJUnitTest {
   public void testNoZeroArgConstructor() throws Exception {
     setupSerializer(stdSerializableClasses);
     DomainObject objOut = new DomainObjectPdxAutoNoDefaultConstructor(4);
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       DataSerializer.writeObject(objOut, out);
     } catch (NotSerializableException ex) {
@@ -1057,7 +1057,7 @@ public class AutoSerializableJUnitTest {
   public void testException() throws Exception {
     setupSerializer(stdSerializableClasses);
     DomainObject objOut = new DomainObjectBad();
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     try {
       DataSerializer.writeObject(objOut, out);
@@ -1117,7 +1117,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1144,7 +1144,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1172,7 +1172,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1200,7 +1200,7 @@ public class AutoSerializableJUnitTest {
     objOut.set("string_0", "test string value");
     objOut.set("long_0", 99L);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(objOut, out);
 
     PdxInstance pdxIn =
@@ -1308,7 +1308,7 @@ public class AutoSerializableJUnitTest {
     obj1.set("string_0", "test string value");
     obj1.set("long_0", 99L);
 
-    HeapDataOutputStream out1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(obj1, out1);
 
     PdxInstance pdxIn = DataSerializer
@@ -1325,7 +1325,7 @@ public class AutoSerializableJUnitTest {
     // They are definitely not the same class
     assertFalse(obj1.getClass() == obj2.getClass());
 
-    HeapDataOutputStream out2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(obj2, out2);
 
     pdxIn = DataSerializer
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java
index 03f15f4..7c04d0b 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/ByteSourceJUnitTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.test.junit.categories.SerializationTest;
@@ -741,7 +741,7 @@ public class ByteSourceJUnitTest {
 
   @Test
   public void testSendToDataOutput() throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream((Version) null);
+    HeapDataOutputStream hdos = new HeapDataOutputStream((KnownVersion) null);
     ByteSource bs = createByteSource(new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0});
     bs.sendTo(hdos);
     assertEquals(0, bs.remaining());
@@ -751,7 +751,7 @@ public class ByteSourceJUnitTest {
 
     bs.position(1);
     bs.limit(9);
-    hdos = new HeapDataOutputStream((Version) null);
+    hdos = new HeapDataOutputStream((KnownVersion) null);
     bs.sendTo(hdos);
     assertEquals(0, bs.remaining());
     bb = hdos.toByteBuffer();
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java
index c1249f4..3c4bc40 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceFactoryJUnitTest.java
@@ -52,7 +52,7 @@ import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.pdx.internal.PdxField;
 import org.apache.geode.pdx.internal.PdxInstanceEnum;
@@ -1226,7 +1226,7 @@ public class PdxInstanceFactoryJUnitTest {
   }
 
   private Object serializeAndDeserialize(Object in) throws IOException, ClassNotFoundException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(in, hdos);
     byte[] bytes = hdos.toByteArray();
     // System.out.println("Serialized bytes = " + Arrays.toString(bytes));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java
index d3f13f0..22b2688 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxInstanceJUnitTest.java
@@ -39,7 +39,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.EnumInfo.PdxInstanceEnumInfo;
 import org.apache.geode.pdx.internal.PdxInstanceFactoryImpl;
 import org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase;
@@ -386,7 +386,7 @@ public class PdxInstanceJUnitTest extends JUnit4CacheTestCase {
   }
 
   private PdxInstance getPdx(PdxSerializable toData) throws IOException, ClassNotFoundException {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(toData, out);
     return DataSerializer
         .readObject(new DataInputStream(new ByteArrayInputStream(out.toByteArray())));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
index c2179ff..150f64c 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/pdx/PdxSerializableJUnitTest.java
@@ -60,7 +60,7 @@ import org.apache.geode.internal.PdxSerializerObject;
 import org.apache.geode.internal.SystemAdmin;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSourceFactory;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.pdx.internal.DataSize;
@@ -102,7 +102,7 @@ public class PdxSerializableJUnitTest {
     this.cache.close();
     this.cache = (GemFireCacheImpl) new CacheFactory().set(MCAST_PORT, "0").setPdxPersistent(true)
         .setPdxDiskStore("doesNotExist").create();
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable object = new SimpleClass(1, (byte) 5, null);
     try {
       DataSerializer.writeObject(object, out);
@@ -284,7 +284,7 @@ public class PdxSerializableJUnitTest {
 
   @Test
   public void testByteFormatForSimpleClass() throws Exception {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable object = new SimpleClass(1, (byte) 5, null);
     DataSerializer.writeObject(object, out);
     int typeId = getPdxTypeIdForClass(SimpleClass.class);
@@ -335,19 +335,19 @@ public class PdxSerializableJUnitTest {
     int myInt = 1420;
     float myFloat = 123.023f;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     SimpleClass1 pdx =
         new SimpleClass1(myFlag, myShort, myString1, myLong, myString2, myString3, myInt, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(SimpleClass1.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos2);
     byte[] str2Bytes = hdos2.toByteArray();
-    HeapDataOutputStream hdos3 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos3 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString3, hdos3);
     byte[] str3Bytes = hdos3.toByteArray();
 
@@ -562,19 +562,19 @@ public class PdxSerializableJUnitTest {
     int myInt = 1420;
     float myFloat = 123.023f;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     SimpleClass1 pdx =
         new SimpleClass1(myFlag, myShort, myString1, myLong, myString2, myString3, myInt, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(SimpleClass1.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos2);
     byte[] str2Bytes = hdos2.toByteArray();
-    HeapDataOutputStream hdos3 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos3 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString3, hdos3);
     byte[] str3Bytes = hdos3.toByteArray();
 
@@ -773,18 +773,18 @@ public class PdxSerializableJUnitTest {
       myHashMap.put("KEY_" + i, new SimpleClass(i, (byte) 5));
     }
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable pdx = new NestedPdx(myString1, myLong, myHashMap, myString2, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(NestedPdx.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
-    HeapDataOutputStream hdosForMap = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosForMap = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(myHashMap, hdosForMap);
     byte[] mapBytes = hdosForMap.toByteArray();
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos2);
     byte[] str2Bytes = hdos2.toByteArray();
 
@@ -866,22 +866,22 @@ public class PdxSerializableJUnitTest {
     String myString2 = "ComplexClass1_myString2";
     float myFloat = 123.023f;
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     PdxSerializable pdx = new DSInsidePdx(myString1, myLong, myDS, myString2, myFloat);
     DataSerializer.writeObject(pdx, out);
     int typeId = getPdxTypeIdForClass(DSInsidePdx.class);
 
-    HeapDataOutputStream hdos1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdos1);
     byte[] str1Bytes = hdos1.toByteArray();
     System.out.println("Length of string1: " + str1Bytes.length);
 
-    HeapDataOutputStream hdos2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(myDS, hdos2);
     byte[] dsBytes = hdos2.toByteArray();
     System.out.println("Length of DS: " + dsBytes.length);
 
-    HeapDataOutputStream hdos3 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos3 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdos3);
     byte[] str2Bytes = hdos3.toByteArray();
     System.out.println("Length of string2: " + str2Bytes.length);
@@ -978,27 +978,27 @@ public class PdxSerializableJUnitTest {
     }
     PdxSerializable myPDX = new NestedPdx(myString1, myLong, myHashMap, myString2, myFloat);
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializable ds = new PdxInsideDS(myString1, myLong, myPDX, myString2);
     DataSerializer.writeObject(ds, out);
 
-    HeapDataOutputStream hdosString1 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosString1 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString1, hdosString1);
     byte[] str1Bytes = hdosString1.toByteArray();
     System.out.println("Length of string1: " + str1Bytes.length);
 
-    HeapDataOutputStream hdosMyPDX = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosMyPDX = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(myPDX, hdosMyPDX);
     byte[] pdxBytes = hdosMyPDX.toByteArray();
     System.out.println("Length of myPDX: " + pdxBytes.length);
 
-    HeapDataOutputStream hdosString2 = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosString2 = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString(myString2, hdosString2);
     byte[] str2Bytes = hdosString2.toByteArray();
     System.out.println("Length of string2: " + str2Bytes.length);
 
     Class classInstance = ds.getClass();
-    HeapDataOutputStream hdosClass = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdosClass = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeClass(classInstance, hdosClass);
     byte[] dsInitBytes = hdosClass.toByteArray();
 
@@ -1239,7 +1239,7 @@ public class PdxSerializableJUnitTest {
   }
 
   private Object serializeAndDeserialize(Object in) throws IOException, ClassNotFoundException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(in, hdos);
     byte[] bytes = hdos.toByteArray();
     System.out.println("Serialized bytes = " + Arrays.toString(bytes));
@@ -1666,7 +1666,7 @@ public class PdxSerializableJUnitTest {
 
   @Test
   public void testVariableFields() throws Exception {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(new VariableFields(1), out);
     try {
       DataSerializer.writeObject(new VariableFields(2), out);
@@ -2041,7 +2041,7 @@ public class PdxSerializableJUnitTest {
   }
 
   private byte[] createBlob(Object o) throws IOException {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(o, out);
     return out.toByteArray();
   }
diff --git a/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java b/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
index 9f1476e..b6ab61e 100644
--- a/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
+++ b/geode-core/src/jmh/java/org/apache/geode/internal/InternalDataSerializerBenchmark.java
@@ -35,7 +35,7 @@ import org.openjdk.jmh.annotations.Warmup;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 
 /**
@@ -51,7 +51,7 @@ public class InternalDataSerializerBenchmark {
 
   @Setup(Level.Trial)
   public void setup() throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeString("12345678901234567890123456789012345", hdos);
     byte[] bytes = hdos.toByteArray();
     if (bytes[0] != DSCODE.STRING_BYTES.toByte()) {
@@ -67,7 +67,7 @@ public class InternalDataSerializerBenchmark {
   @BenchmarkMode(Mode.Throughput)
   @OutputTimeUnit(TimeUnit.MILLISECONDS)
   public String readStringBenchmark() throws IOException {
-    dataInput.initialize(serializedBytes, Version.CURRENT);
+    dataInput.initialize(serializedBytes, KnownVersion.CURRENT);
     String result = InternalDataSerializer.readString(dataInput, DSCODE.STRING_BYTES.toByte());
     return result;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/CopyHelper.java b/geode-core/src/main/java/org/apache/geode/CopyHelper.java
index cfd0b9b..c3af22a 100644
--- a/geode-core/src/main/java/org/apache/geode/CopyHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/CopyHelper.java
@@ -26,7 +26,7 @@ import java.util.UUID;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.Token;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.WritablePdxInstance;
 import org.apache.geode.pdx.internal.PdxUnreadData;
@@ -237,7 +237,7 @@ public final class CopyHelper {
   @SuppressWarnings("unchecked")
   private static <T> T doDeepCopy(T o) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       DataSerializer.writeObject(o, hdos);
       return (T) DataSerializer.readObject(new DataInputStream(hdos.getInputStream()));
     } catch (ClassNotFoundException ex) {
diff --git a/geode-core/src/main/java/org/apache/geode/DataSerializer.java b/geode-core/src/main/java/org/apache/geode/DataSerializer.java
index 84a9c72..64291ed 100644
--- a/geode-core/src/main/java/org/apache/geode/DataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/DataSerializer.java
@@ -62,8 +62,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.serialization.DSCODE;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.pdx.PdxInstance;
 
@@ -1235,9 +1235,9 @@ public abstract class DataSerializer {
       if (object instanceof HeapDataOutputStream) {
         hdos = (HeapDataOutputStream) object;
       } else {
-        Version v = StaticSerialization.getVersionForDataStreamOrNull(out);
+        KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(out);
         if (v == null) {
-          v = Version.CURRENT;
+          v = KnownVersion.CURRENT;
         }
         hdos = new HeapDataOutputStream(v);
         try {
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 7218a7e..b278520 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
@@ -24,8 +24,8 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Notification to be sent to clients (e.g GFMon2.0 ). It incorporates
@@ -150,7 +150,7 @@ public class StatAlertNotification extends StatAlert
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
index 1e97d82..e6985ba 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AbstractOp.java
@@ -32,7 +32,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -49,7 +49,7 @@ public abstract class AbstractOp implements Op {
   private boolean allowDuplicateMetadataRefresh;
 
   protected AbstractOp(int msgType, int msgParts) {
-    msg = new Message(msgParts, Version.CURRENT);
+    msg = new Message(msgParts, KnownVersion.CURRENT);
     getMessage().setMessageType(msgType);
   }
 
@@ -125,7 +125,7 @@ public abstract class AbstractOp implements Op {
         }
         userId = id;
       }
-      try (HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT)) {
+      try (HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
         hdos.writeLong(cnx.getConnectionID());
         hdos.writeLong(userId);
         getMessage().setSecurePart(((ConnectionImpl) cnx).encryptBytes(hdos.toByteArray()));
@@ -215,7 +215,7 @@ public abstract class AbstractOp implements Op {
    * By default just create a normal one part msg. Subclasses can override this.
    */
   protected Message createResponseMessage() {
-    return new Message(1, Version.CURRENT);
+    return new Message(1, KnownVersion.CURRENT);
   }
 
   protected Object processResponse(Message m, Connection con) throws Exception {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
index aa6e630..de0a8c9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AuthenticateUserOp.java
@@ -35,7 +35,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.command.PutUserCredentials;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.security.NotAuthorizedException;
@@ -107,7 +107,7 @@ public class AuthenticateUserOp {
           (InternalLogWriter) sys.getSecurityLogWriter());
 
       getMessage().setMessageHasSecurePartFlag();
-      try (HeapDataOutputStream heapdos = new HeapDataOutputStream(Version.CURRENT)) {
+      try (HeapDataOutputStream heapdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
         DataSerializer.writeProperties(credentials, heapdos);
         credentialBytes = ((ConnectionImpl) con).encryptBytes(heapdos.toByteArray());
       } catch (Exception e) {
@@ -131,7 +131,7 @@ public class AuthenticateUserOp {
 
     @Override
     protected void sendMessage(Connection cnx) throws Exception {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       byte[] secureBytes;
       hdos.writeLong(cnx.getConnectionID());
       if (securityProperties != null) {
@@ -144,7 +144,7 @@ public class AuthenticateUserOp {
             server, false, (InternalLogWriter) sys.getLogWriter(),
             (InternalLogWriter) sys.getSecurityLogWriter());
         byte[] credentialBytes;
-        try (HeapDataOutputStream heapdos = new HeapDataOutputStream(Version.CURRENT)) {
+        try (HeapDataOutputStream heapdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
           DataSerializer.writeProperties(credentials, heapdos);
           credentialBytes = ((ConnectionImpl) cnx).encryptBytes(heapdos.toByteArray());
         }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
index 08cd16a..2380db7 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ClientSideHandshakeImpl.java
@@ -61,8 +61,8 @@ import org.apache.geode.internal.cache.tier.sockets.Handshake;
 import org.apache.geode.internal.cache.tier.sockets.ServerQueueStatus;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.Versioning;
@@ -114,11 +114,12 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
   }
 
   public static void setVersionForTesting(short ver) {
-    if (ver > Version.CURRENT_ORDINAL) {
+    if (ver > KnownVersion.CURRENT_ORDINAL) {
       overrideClientVersion = ver;
     } else {
       currentClientVersion =
-          Versioning.getKnownVersionOrDefault(Versioning.getVersionOrdinal(ver), Version.CURRENT);
+          Versioning.getKnownVersionOrDefault(Versioning.getVersionOrdinal(ver),
+              KnownVersion.CURRENT);
       overrideClientVersion = -1;
     }
   }
@@ -131,7 +132,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
     // handshakes.
     // Client side handshake code uses this.currentClientVersion which can be
     // set via tests.
-    if (currentClientVersion.isNotOlderThan(Version.GFE_603)) {
+    if (currentClientVersion.isNotOlderThan(KnownVersion.GFE_603)) {
       this.overrides = new byte[] {this.clientConflation};
     }
   }
@@ -218,10 +219,10 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
         short wanSiteVersion = VersioningIO.readOrdinal(dis);
         conn.setWanSiteVersion(wanSiteVersion);
         // establish a versioned stream for the other site, if necessary
-        if (wanSiteVersion < Version.CURRENT_ORDINAL) {
+        if (wanSiteVersion < KnownVersion.CURRENT_ORDINAL) {
           dis = new VersionedDataInputStream(dis, Versioning
               .getKnownVersionOrDefault(Versioning.getVersionOrdinal(wanSiteVersion),
-                  Version.CURRENT));
+                  KnownVersion.CURRENT));
         }
       }
 
@@ -240,14 +241,15 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // Read delta-propagation property value from server.
       // [sumedh] Static variable below? Client can connect to different
       // DSes with different values of this. It shoule be a member variable.
-      if (!communicationMode.isWAN() && currentClientVersion.isNotOlderThan(Version.GFE_61)) {
+      if (!communicationMode.isWAN() && currentClientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
         ((InternalDistributedSystem) system).setDeltaEnabledOnServer(dis.readBoolean());
       }
 
       // validate that the remote side has a different distributed system id.
       if (communicationMode.isWAN()
-          && Version.GFE_66.compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
-          && currentClientVersion.isNotOlderThan(Version.GFE_66)) {
+          && KnownVersion.GFE_66
+              .compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
+          && currentClientVersion.isNotOlderThan(KnownVersion.GFE_66)) {
         int remoteDistributedSystemId = in.read();
         int localDistributedSystemId =
             ((InternalDistributedSystem) system).getDistributionManager().getDistributedSystemId();
@@ -260,8 +262,9 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       }
       // Read the PDX registry size from the remote size
       if (communicationMode.isWAN()
-          && Version.GFE_80.compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
-          && currentClientVersion.isNotOlderThan(Version.GFE_80)) {
+          && KnownVersion.GFE_80
+              .compareTo(Versioning.getVersionOrdinal(conn.getWanSiteVersion())) <= 0
+          && currentClientVersion.isNotOlderThan(KnownVersion.GFE_80)) {
         int remotePdxSize = dis.readInt();
         serverQStatus.setPdxSize(remotePdxSize);
       }
@@ -277,7 +280,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
   private InternalDistributedMember readServerMember(DataInputStream p_dis) throws IOException {
 
     byte[] memberBytes = DataSerializer.readByteArray(p_dis);
-    Version v = StaticSerialization.getVersionForDataStreamOrNull(p_dis);
+    KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(p_dis);
     ByteArrayDataInput dis = new ByteArrayDataInput(memberBytes, v);
     try {
       return DataSerializer.readObject(dis);
@@ -330,7 +333,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // [sumedh] nothing more to be done for older clients used in tests
       // there is a difference in serializer map registration for >= 6.5.1.6
       // clients but that is not used in tests
-      if (currentClientVersion.isOlderThan(Version.GFE_61)) {
+      if (currentClientVersion.isOlderThan(KnownVersion.GFE_61)) {
         return new ServerQueueStatus(endpointType, queueSize, member);
       }
       HashMap instantiatorMap = DataSerializer.readHashMap(dis);
@@ -374,7 +377,7 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
   private byte write(DataOutputStream dos, DataInputStream dis, CommunicationMode communicationMode,
       int replyCode, int readTimeout, List ports, Properties p_credentials,
       DistributedMember member, boolean isCallbackConnection) throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
     byte acceptanceCode = -1;
     try {
       hdos.writeByte(communicationMode.getModeNumber());
@@ -397,10 +400,10 @@ public class ClientSideHandshakeImpl extends Handshake implements ClientSideHand
       // we do not know the receiver's version at this point, but the on-wire
       // form of InternalDistributedMember changed in 9.0, so we must serialize
       // it using the previous version
-      DataOutput idOut = new VersionedDataOutputStream(hdos, Version.GFE_82);
+      DataOutput idOut = new VersionedDataOutputStream(hdos, KnownVersion.GFE_82);
       DataSerializer.writeObject(this.id, idOut);
 
-      if (currentClientVersion.isNotOlderThan(Version.GFE_603)) {
+      if (currentClientVersion.isNotOlderThan(KnownVersion.GFE_603)) {
         byte[] overrides = getOverrides();
         for (int bytes = 0; bytes < overrides.length; bytes++) {
           hdos.writeByte(overrides[bytes]);
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java
index 16401f3..b289588 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionNoAckOp.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.cache.execute.MemberMappedArgument;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -219,7 +219,7 @@ public class ExecuteFunctionNoAckOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new Message(1, Version.CURRENT);
+      return new Message(1, KnownVersion.CURRENT);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java
index 3baa857..77071b5 100755
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteFunctionOp.java
@@ -41,7 +41,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -426,7 +426,7 @@ public class ExecuteFunctionOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java
index 682efcf..fd641ae 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionNoAckOp.java
@@ -27,7 +27,7 @@ import org.apache.geode.internal.cache.execute.ServerRegionFunctionExecutor;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -210,7 +210,7 @@ public class ExecuteRegionFunctionNoAckOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new Message(1, Version.CURRENT);
+      return new Message(1, KnownVersion.CURRENT);
     }
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java
index c40df1c..043d9f3 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionOp.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -505,7 +505,7 @@ public class ExecuteRegionFunctionOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java
index 712d629..5fc6ebe 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -433,7 +433,7 @@ public class ExecuteRegionFunctionSingleHopOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
   }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java
index b15d8ba..8a97ba5 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/GetAllOp.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -181,7 +181,7 @@ public class GetAllOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java
index dee67b1..30af1c9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/KeySetOp.java
@@ -24,7 +24,7 @@ import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Does a region keySet on a server
@@ -59,7 +59,7 @@ public class KeySetOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java
index b86b517..99094ec 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ProxyCacheCloseOp.java
@@ -24,7 +24,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class ProxyCacheCloseOp {
 
@@ -53,7 +53,7 @@ public class ProxyCacheCloseOp {
 
     @Override
     protected void sendMessage(Connection cnx) throws Exception {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       byte[] secureBytes = null;
       hdos.writeLong(cnx.getConnectionID());
       Object userId = UserAttributes.userAttributes.get().getServerToId().get(cnx.getServer());
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java
index d67d27c..7f9435f 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PutAllOp.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -319,7 +319,7 @@ public class PutAllOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(2, Version.CURRENT);
+      return new ChunkedMessage(2, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java
index 2344acc..0a37be0 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueryOp.java
@@ -30,7 +30,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.ObjectPartList;
 import org.apache.geode.internal.cache.tier.sockets.Part;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Does a region query on a server
@@ -98,7 +98,7 @@ public class QueryOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(2, Version.CURRENT);
+      return new ChunkedMessage(2, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java
index 9352fe2..ac7d682 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RegisterInterestOp.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Does a region registerInterest on a server
@@ -149,7 +149,7 @@ public class RegisterInterestOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(1, Version.CURRENT);
+      return new ChunkedMessage(1, KnownVersion.CURRENT);
     }
 
     @Override
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java
index c653e1c..f66b944 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/RemoveAllOp.java
@@ -39,7 +39,7 @@ import org.apache.geode.internal.cache.tier.sockets.ChunkedMessage;
 import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -274,7 +274,7 @@ public class RemoveAllOp {
 
     @Override
     protected Message createResponseMessage() {
-      return new ChunkedMessage(2, Version.CURRENT);
+      return new ChunkedMessage(2, KnownVersion.CURRENT);
     }
 
     @Override
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 3686365..f9d8747 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,8 +21,8 @@ import java.io.IOException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public abstract class ServerLocationRequest implements DataSerializableFixedID {
 
@@ -55,7 +55,7 @@ public abstract class ServerLocationRequest implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
index 47bc3d7..a6d8361 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/locator/ServerLocationResponse.java
@@ -15,13 +15,13 @@
 package org.apache.geode.cache.client.internal.locator;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public abstract class ServerLocationResponse implements DataSerializableFixedID {
   public abstract boolean hasResult();
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
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 f728838..122c947 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
@@ -21,8 +21,8 @@ import java.io.IOException;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 
 /**
@@ -111,7 +111,7 @@ public class CqEntry implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 ad49dc1..ad3aa09 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,8 +38,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This is used as a wrapper over all the results of PR which are of non distinct type
@@ -273,7 +273,7 @@ public class CumulativeNonDistinctResults<E> implements SelectResults<E>, DataSe
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 1957709..e4a89e9 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
@@ -33,8 +33,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class LinkedResultSet extends java.util.LinkedHashSet
     implements Ordered, SelectResults, DataSerializableFixedID {
@@ -139,7 +139,7 @@ public class LinkedResultSet extends java.util.LinkedHashSet
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 1ab19e4..bb54527 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
@@ -32,8 +32,8 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class LinkedStructSet extends LinkedHashSet<Struct>
     implements SelectResults<Struct>, Ordered, DataSerializableFixedID {
@@ -199,7 +199,7 @@ public class LinkedStructSet extends LinkedHashSet<Struct>
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 8aa010a..bb146f5 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,8 +39,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.serialization.BufferDataOutputStream.LongUpdater;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * The n - way merge results returns a sorted results on the cumulative sorted results for
@@ -433,7 +433,7 @@ public class NWayMergeResults<E> implements SelectResults<E>, Ordered, DataSeria
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 a5bd171..fe007c1 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,8 +22,8 @@ import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.query.internal.index.IndexManager;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A Token representing null.
@@ -76,7 +76,7 @@ public class NullToken implements DataSerializableFixedID, Comparable {
       DeserializationContext context) throws IOException, ClassNotFoundException {}
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PRQueryTraceInfo.java
index 8e95219..fd7e501 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,8 +25,8 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 
 public class PRQueryTraceInfo implements DataSerializableFixedID {
@@ -57,7 +57,7 @@ public class PRQueryTraceInfo implements DataSerializableFixedID {
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
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 a529ec6..830091f 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
@@ -26,8 +26,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.cache.CachePerfStats;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ResultsBag extends Bag implements DataSerializableFixedID {
 
@@ -194,7 +194,7 @@ public class ResultsBag extends Bag implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 9dedff7..e910f06 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
@@ -39,8 +39,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.EntriesSet;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of SelectResults that wraps an existing java.util.Collection and optionally adds a
@@ -656,7 +656,7 @@ public class ResultsCollectionWrapper implements SelectResults, DataSerializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
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 f672a1f..cd4ba07 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
@@ -35,8 +35,8 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 // @todo probably should assert element type when elements added
 /**
@@ -165,7 +165,7 @@ public class ResultsSet extends HashSet implements SelectResults, DataSerializab
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return 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 a9445b7..14ef1fa 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
@@ -33,8 +33,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of SelectResults that extends TreeSet This is the sorted version of ResultSet used
@@ -147,7 +147,7 @@ public class SortedResultSet extends TreeSet
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 cf3005a..726bdbd 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,8 +34,8 @@ import org.apache.geode.cache.query.types.CollectionType;
 import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A TreeSet constrained to contain Structs of all the same type. To conserve on objects, we store
@@ -395,7 +395,7 @@ public class SortedStructSet extends TreeSet
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 b1919c0..ca70400 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,8 +28,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.PdxString;
 
@@ -191,7 +191,7 @@ public class StructImpl implements Struct, DataSerializableFixedID, Serializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
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 cdbe064..0ec66c4 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
@@ -37,8 +37,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.cache.query.types.StructType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A Set constrained to contain Structs of all the same type. To conserve on objects, we store the
@@ -477,7 +477,7 @@ public class StructSet /* extends ObjectOpenCustomHashSet */ implements Set, Sel
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 4f5e75b..26c2df5 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,8 +23,8 @@ import java.io.Serializable;
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * An UNDEFINED value is the result of accessing an attribute of a null-valued attribute. If you
@@ -92,7 +92,7 @@ public class Undefined implements DataSerializableFixedID, Comparable, Serializa
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 c3bf259..759b7f3 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,8 +26,8 @@ import java.io.IOException;
 import org.apache.geode.cache.query.IndexType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  *
@@ -105,7 +105,7 @@ public class IndexCreationData implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 3c0a308..9fd9ba0 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,8 +24,8 @@ import org.apache.geode.cache.query.types.ObjectType;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of ObjectType
@@ -122,7 +122,7 @@ public class ObjectTypeImpl implements ObjectType, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
index 9a52f60..6e79f0d 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
@@ -80,7 +80,7 @@ import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.internal.sequencelog.MembershipLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ConnectionTable;
 import org.apache.geode.internal.tcp.ReenteredConnectException;
 import org.apache.geode.logging.internal.OSProcess;
@@ -1542,13 +1542,13 @@ public class ClusterDistributionManager implements DistributionManager {
 
   @Override
   public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     members.removeIf(id -> id.getVersionOrdinalObject().compareTo(version) < 0);
   }
 
   @Override
   public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     members.removeIf(id -> id.getVersionOrdinalObject().compareTo(version) >= 0);
   }
 
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 c13abcc..c17505f 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
@@ -53,8 +53,8 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -1572,7 +1572,7 @@ public class DistributionAdvisor {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
index d63391c..c6713a3 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
@@ -69,8 +69,8 @@ import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
 import org.apache.geode.internal.net.SocketCreatorFactory;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.tcp.ConnectExceptions;
 import org.apache.geode.internal.tcp.ConnectionException;
 import org.apache.geode.internal.util.Breadcrumbs;
@@ -873,7 +873,7 @@ public class DistributionImpl implements Distribution {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java
index 2648796..f2ab9dd 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionManager.java
@@ -31,7 +31,7 @@ import org.apache.geode.distributed.internal.locks.ElderState;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * This interface defines the services provided by any class that is a distribution manager.
@@ -71,7 +71,7 @@ public interface DistributionManager extends ReplySender {
    * @since GemFire 8.0
    */
   void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version);
+      KnownVersion version);
 
   /**
    * removes members that have the given version or later from the given collection, typically a Set
@@ -80,7 +80,7 @@ public interface DistributionManager extends ReplySender {
    * @since GemFire 8.0
    */
   void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version);
+      KnownVersion version);
 
   /**
    * Returns an unmodifiable set containing the identities of all of the known distribution
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 0f11b6b..a6a5528 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,8 +38,8 @@ import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.sequencelog.MessageLogger;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.tcp.Connection;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -700,7 +700,7 @@ public abstract class DistributionMessage
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
index 114a0e1..5e8e3ed 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/LonerDistributionManager.java
@@ -52,7 +52,7 @@ import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.internal.monitoring.ThreadsMonitoringImpl;
 import org.apache.geode.internal.monitoring.ThreadsMonitoringImplDummy;
 import org.apache.geode.internal.net.SocketCreator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 
 /**
@@ -186,7 +186,7 @@ public class LonerDistributionManager implements DistributionManager {
 
   @Override // DM method
   public void retainMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext();) {
       InternalDistributedMember id = it.next();
       if (id.getVersionOrdinalObject().compareTo(version) < 0) {
@@ -197,7 +197,7 @@ public class LonerDistributionManager implements DistributionManager {
 
   @Override // DM method
   public void removeMembersWithSameOrNewerVersion(Collection<InternalDistributedMember> members,
-      Version version) {
+      KnownVersion version) {
     for (Iterator<InternalDistributedMember> it = members.iterator(); it.hasNext();) {
       InternalDistributedMember id = it.next();
       if (id.getVersionOrdinalObject().compareTo(version) >= 0) {
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 ee5fcb4..af86e5f 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
@@ -37,8 +37,8 @@ import org.apache.geode.internal.InternalInstantiator.InstantiatorAttributesHold
 import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -321,7 +321,7 @@ public class StartupMessage extends DistributionMessage implements AdminMessageT
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 6b6607f..cb97b2c 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
@@ -30,8 +30,8 @@ import org.apache.geode.internal.InternalInstantiator;
 import org.apache.geode.internal.InternalInstantiator.InstantiatorAttributesHolder;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -203,7 +203,7 @@ public class StartupResponseMessage extends DistributionMessage
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 72d28ff..bf2ce25 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
@@ -25,8 +25,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -79,7 +79,7 @@ public class StartupResponseWithVersionMessage extends StartupResponseMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 9bfa90a..11c4698 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,8 +24,8 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Represents a held lock in a member for use when initializing a new grantor. All currently held
@@ -217,7 +217,7 @@ public class DLockRemoteToken implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
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 724bb2b..6dde3a1 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
@@ -56,8 +56,8 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.StopWatch;
 import org.apache.geode.internal.util.concurrent.FutureResult;
 import org.apache.geode.logging.internal.OSProcess;
@@ -3003,7 +3003,7 @@ public class DLockService extends DistributedLockService {
         SerializationContext context) {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
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 4e7432d..30fb45e 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
@@ -47,8 +47,8 @@ import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionOrdinal;
 import org.apache.geode.logging.internal.OSProcess;
 
@@ -545,7 +545,7 @@ public class InternalDistributedMember
     return memberIdentifier.getUniqueId();
   }
 
-  public void setVersionObjectForTest(Version v) {
+  public void setVersionObjectForTest(KnownVersion v) {
     memberIdentifier.setVersionObjectForTest(v);
   }
 
@@ -555,7 +555,7 @@ public class InternalDistributedMember
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return memberIdentifier.getSerializationVersions();
   }
 
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 e6ac0ba..0ee9323 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
@@ -57,9 +57,9 @@ 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.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -297,7 +297,8 @@ public abstract class StreamingOperation {
       int chunkSize = socketBufferSize - MSG_OVERHEAD;
       HeapDataOutputStream outStream =
           new HeapDataOutputStream(chunkSize, Versioning
-              .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(),
+                  KnownVersion.CURRENT));
       boolean sentFinalMessage = false;
       boolean receiverCacheClosed = false;
       int msgNum = 0;
@@ -514,8 +515,8 @@ public abstract class StreamingOperation {
       this.msgNum = in.readInt();
       this.lastMsg = in.readBoolean();
       this.pdxReadSerialized = in.readBoolean();
-      Version senderVersion = StaticSerialization.getVersionForDataStream(in);
-      boolean isSenderAbove_8_1 = senderVersion.isNewerThan(Version.GFE_81);
+      KnownVersion senderVersion = StaticSerialization.getVersionForDataStream(in);
+      boolean isSenderAbove_8_1 = senderVersion.isNewerThan(KnownVersion.GFE_81);
       InternalCache cache = null;
       Boolean initialPdxReadSerialized = false;
       try {
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 6973dd6..bd613db 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
@@ -404,8 +404,8 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
 import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfileMessage;
 import org.apache.geode.management.internal.JmxManagerLocatorRequest;
@@ -451,7 +451,7 @@ public class DSFIDFactory implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     throw new UnsupportedOperationException();
   }
 
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 43e24ca..74e5b94 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,8 +23,8 @@ import java.nio.channels.SocketChannel;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.BytesAndBitsForCompactor;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
 /**
@@ -48,7 +48,7 @@ public class HeapDataOutputStream extends
     org.apache.geode.internal.serialization.BufferDataOutputStream
     implements ObjToByteArraySerializer, ByteBufferWriter {
 
-  public HeapDataOutputStream(Version version) {
+  public HeapDataOutputStream(KnownVersion version) {
     this(INITIAL_CAPACITY, version);
   }
 
@@ -60,7 +60,7 @@ public class HeapDataOutputStream extends
     super(s);
   }
 
-  public HeapDataOutputStream(int allocSize, Version version) {
+  public HeapDataOutputStream(int allocSize, KnownVersion version) {
     this(allocSize, version, false);
   }
 
@@ -72,7 +72,7 @@ public class HeapDataOutputStream extends
    * @param doNotCopy if true then byte arrays/buffers/sources will not be copied to this hdos but
    *        instead referenced.
    */
-  public HeapDataOutputStream(int allocSize, Version version, boolean doNotCopy) {
+  public HeapDataOutputStream(int allocSize, KnownVersion version, boolean doNotCopy) {
     super(allocSize, version, doNotCopy);
   }
 
@@ -80,7 +80,7 @@ public class HeapDataOutputStream extends
    * @param doNotCopy if true then byte arrays/buffers/sources will not be copied to this hdos but
    *        instead referenced.
    */
-  public HeapDataOutputStream(ByteBuffer initialBuffer, Version version, boolean doNotCopy) {
+  public HeapDataOutputStream(ByteBuffer initialBuffer, KnownVersion version, boolean doNotCopy) {
     super(initialBuffer, version, doNotCopy);
   }
 
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 733f72b..ce02e96 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
@@ -113,12 +113,12 @@ import org.apache.geode.internal.serialization.DSFIDSerializerFactory;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
 import org.apache.geode.internal.serialization.DscodeHelper;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.ObjectDeserializer;
 import org.apache.geode.internal.serialization.ObjectSerializer;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -352,9 +352,9 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
     if (out instanceof VersionedDataStream) {
       VersionedDataStream vout = (VersionedDataStream) out;
-      Version version = vout.getVersion();
+      KnownVersion version = vout.getVersion();
       if (null != version) {
-        if (version.isOlderThan(Version.GEODE_1_9_0)) {
+        if (version.isOlderThan(KnownVersion.GEODE_1_9_0)) {
           if (name.equals(POST_GEODE_190_SERVER_CQIMPL)) {
             return PRE_GEODE_190_SERVER_CQIMPL;
           }
@@ -2181,8 +2181,8 @@ public abstract class InternalDataSerializer extends DataSerializer {
       try {
         ObjectOutput oos = new ObjectOutputStream(stream);
         if (stream instanceof VersionedDataStream) {
-          Version v = ((VersionedDataStream) stream).getVersion();
-          if (v != null && v != Version.CURRENT) {
+          KnownVersion v = ((VersionedDataStream) stream).getVersion();
+          if (v != null && v != KnownVersion.CURRENT) {
             oos = new VersionedObjectOutput(oos, v);
           }
         }
@@ -2214,11 +2214,11 @@ public abstract class InternalDataSerializer extends DataSerializer {
         return;
       }
       boolean invoked = false;
-      Version v = StaticSerialization.getVersionForDataStreamOrNull(out);
+      KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(out);
 
-      if (Version.CURRENT != v && v != null) {
+      if (KnownVersion.CURRENT != v && v != null) {
         // get versions where DataOutput was upgraded
-        Version[] versions = null;
+        KnownVersion[] versions = null;
         if (serializableObject instanceof SerializationVersions) {
           SerializationVersions sv = (SerializationVersions) serializableObject;
           versions = sv.getSerializationVersions();
@@ -2226,7 +2226,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
         // check if the version of the peer or diskstore is different and
         // there has been a change in the message
         if (versions != null) {
-          for (Version version : versions) {
+          for (KnownVersion version : versions) {
             // if peer version is less than the greatest upgraded version
             if (v.compareTo(version) < 0) {
               serializableObject.getClass().getMethod("toDataPre_" + version.getMethodSuffix(),
@@ -2283,10 +2283,10 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
     try {
       boolean invoked = false;
-      Version v = StaticSerialization.getVersionForDataStreamOrNull(in);
-      if (Version.CURRENT != v && v != null) {
+      KnownVersion v = StaticSerialization.getVersionForDataStreamOrNull(in);
+      if (KnownVersion.CURRENT != v && v != null) {
         // get versions where DataOutput was upgraded
-        Version[] versions = null;
+        KnownVersion[] versions = null;
         if (deserializableObject instanceof SerializationVersions) {
           SerializationVersions vds = (SerializationVersions) deserializableObject;
           versions = vds.getSerializationVersions();
@@ -2294,7 +2294,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
         // check if the version of the peer or diskstore is different and
         // there has been a change in the message
         if (versions != null) {
-          for (Version version : versions) {
+          for (KnownVersion version : versions) {
             // if peer version is less than the greatest upgraded version
             if (v.compareTo(version) < 0) {
               deserializableObject.getClass()
@@ -2682,8 +2682,8 @@ public abstract class InternalDataSerializer extends DataSerializer {
       ObjectInput ois = new DSObjectInputStream(stream);
       serializationFilter.setFilterOn((ObjectInputStream) ois);
       if (stream instanceof VersionedDataStream) {
-        Version v = ((VersionedDataStream) stream).getVersion();
-        if (Version.CURRENT != v && v != null) {
+        KnownVersion v = ((VersionedDataStream) stream).getVersion();
+        if (KnownVersion.CURRENT != v && v != null) {
           ois = new VersionedObjectInput(ois, v);
         }
       }
@@ -3096,7 +3096,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
 
   /* test only method */
   public static int calculateBytesForTSandDSID(int dsid) {
-    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8, Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8, KnownVersion.CURRENT);
     long now = System.currentTimeMillis();
     try {
       writeUnsignedVL(now, out);
@@ -3383,7 +3383,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
      * The versions in which this message was modified
      */
     @Immutable
-    private static final Version[] dsfidVersions = new Version[] {};
+    private static final KnownVersion[] dsfidVersions = new KnownVersion[] {};
     /**
      * The eventId of the {@code DataSerializer} that was registered
      */
@@ -3506,7 +3506,7 @@ public abstract class InternalDataSerializer extends DataSerializer {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
index 0f8e1d1..2ceec56 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectInput.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectInput;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
 public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
 
   private final ObjectInput in;
-  private final Version version;
+  private final KnownVersion version;
 
   /**
    * Creates a VersionedObjectInput that wraps the specified underlying ObjectInput.
@@ -38,7 +38,7 @@ public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
    * @param in the specified {@link ObjectInput}
    * @param version the product version that serialized object on the given {@link ObjectInput}
    */
-  public VersionedObjectInput(ObjectInput in, Version version) {
+  public VersionedObjectInput(ObjectInput in, KnownVersion version) {
     this.in = in;
     this.version = version;
   }
@@ -47,7 +47,7 @@ public class VersionedObjectInput implements ObjectInput, VersionedDataStream {
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
index 6dccb75..67bae0a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/VersionedObjectOutput.java
@@ -18,7 +18,7 @@ package org.apache.geode.internal;
 import java.io.IOException;
 import java.io.ObjectOutput;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
 public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream {
 
   private final ObjectOutput out;
-  private final Version version;
+  private final KnownVersion version;
 
   /**
    * Creates a VersionedObjectOutput that wraps the specified underlying ObjectOutput.
@@ -38,9 +38,9 @@ public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream
    * @param out the underlying {@link ObjectOutput}
    * @param version the product version that serialized object on the given {@link ObjectOutput}
    */
-  public VersionedObjectOutput(ObjectOutput out, Version version) {
-    if (version.isNewerThan(Version.CURRENT)) {
-      Assert.fail("unexpected version: " + version + ", CURRENT: " + Version.CURRENT);
+  public VersionedObjectOutput(ObjectOutput out, KnownVersion version) {
+    if (version.isNewerThan(KnownVersion.CURRENT)) {
+      Assert.fail("unexpected version: " + version + ", CURRENT: " + KnownVersion.CURRENT);
     }
     this.out = out;
     this.version = version;
@@ -50,7 +50,7 @@ public class VersionedObjectOutput implements ObjectOutput, VersionedDataStream
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
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 fa8ca5f..edfef14 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,8 +27,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Bean class act as container for client stats
@@ -95,8 +95,8 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
 
   /** The versions in which this message was modified */
   @Immutable
-  private static final Version[] dsfidVersions =
-      new Version[] {Version.GFE_80, Version.GEODE_1_9_0};
+  private static final KnownVersion[] dsfidVersions =
+      new KnownVersion[] {KnownVersion.GFE_80, KnownVersion.GEODE_1_9_0};
 
   public ClientHealthStats() {}
 
@@ -319,7 +319,7 @@ public class ClientHealthStats implements DataSerializableFixedID, Serializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return dsfidVersions;
   }
 
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 7858c9d..bd2c853 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
@@ -23,8 +23,8 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as data range
@@ -142,7 +142,7 @@ public class GaugeThresholdDecoratorImpl extends BaseDecoratorImpl
   public static final String ID = "GaugeThreshold";
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
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 a849581..a22472e 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,8 +24,8 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of {@link StatAlertDefinition}, represents threshold as number
@@ -143,7 +143,7 @@ public class NumberThresholdDecoratorImpl extends BaseDecoratorImpl
   public static final String ID = "NumberThreshold";
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
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 972c652..03a0856 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
@@ -39,8 +39,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.versions.ConcurrentCacheModificationException;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -344,7 +344,7 @@ public abstract class AbstractUpdateOperation extends DistributedCacheOperation
 
         String msg =
             String.format("memberID cannot be null for persistent regions: %s", tag);
-        RuntimeException ex = (sender.getVersionOrdinalObject().isOlderThan(Version.GFE_80))
+        RuntimeException ex = (sender.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80))
             ? new InternalGemFireException(msg) : new InvalidVersionException(msg);
         throw ex;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
index d91786f..0136de6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketRegion.java
@@ -90,7 +90,7 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -1851,7 +1851,7 @@ public class BucketRegion extends DistributedRegion implements Bucket {
       if (instance instanceof org.apache.geode.Delta
           && ((org.apache.geode.Delta) instance).hasDelta()) {
         try {
-          HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
           long start = DistributionStats.getStatTime();
           ((org.apache.geode.Delta) instance).toDelta(hdos);
           event.setDeltaBytes(hdos.toByteArray());
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 da743f8..6d54475 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
@@ -38,8 +38,8 @@ import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor.PartitionProfile;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -217,8 +217,8 @@ public class DestroyPartitionedRegionMessage extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_9_0};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0};
   }
 
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java
index 42b1f71..a4d3756 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskInitFile.java
@@ -78,7 +78,7 @@ import org.apache.geode.internal.cache.versions.DiskRegionVersionVector;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
 import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.logging.log4j.LogMarker;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -357,7 +357,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
   private int ifTotalRecordCount = 0;
   private boolean compactInProgress;
   // the recovered version
-  private Version gfversion;
+  private KnownVersion gfversion;
 
 
   /**
@@ -416,7 +416,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
     return this.parent;
   }
 
-  public Version currentRecoveredGFVersion() {
+  public KnownVersion currentRecoveredGFVersion() {
     return this.gfversion;
   }
 
@@ -568,7 +568,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       // We don't want gateway queues to turn on versioning. Unfortunately, the only
       // way to indentify that a region is a gateway queue is by the region
       // name.
-      if (Version.GFE_80.compareTo(currentRecoveredGFVersion()) > 0
+      if (KnownVersion.GFE_80.compareTo(currentRecoveredGFVersion()) > 0
           && !dr.getName().contains("_SERIAL_GATEWAY_SENDER_QUEUE")
           && !dr.getName().contains("_PARALLEL__GATEWAY__SENDER__QUEUE")) {
         flags.add(DiskRegionFlag.IS_WITH_VERSIONING);
@@ -604,7 +604,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
   }
 
   @Override
-  public void cmnGemfireVersion(Version version) {
+  public void cmnGemfireVersion(KnownVersion version) {
     this.gfversion = version;
   }
 
@@ -673,7 +673,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
     DiskRegionView dr = getDiskRegionById(drId);
     if (dr != null) {
       if (this.parent.upgradeVersionOnly
-          && Version.GFE_70.compareTo(currentRecoveredGFVersion()) > 0) {
+          && KnownVersion.GFE_70.compareTo(currentRecoveredGFVersion()) > 0) {
         dr.addOnlineMember(pmid);
         if (dr.rmOfflineMember(pmid)) {
           this.ifLiveRecordCount--;
@@ -1002,7 +1002,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       if (hdosSize < 32) {
         hdosSize = 32;
       }
-      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, KnownVersion.CURRENT);
       hdos.write(b);
       writeDiskRegionID(hdos, dr.getId());
       hdos.writeUTF(s);
@@ -1026,7 +1026,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       if (hdosSize < 32) {
         hdosSize = 32;
       }
-      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, KnownVersion.CURRENT);
       hdos.write(b);
       writeDiskRegionID(hdos, regionId);
       hdos.writeUTF(fileName);
@@ -1053,7 +1053,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       if (hdosSize < 32) {
         hdosSize = 32;
       }
-      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(hdosSize, KnownVersion.CURRENT);
       hdos.write(b);
       writeDiskRegionID(hdos, regionId);
       hdos.writeUTF(fileName);
@@ -1365,7 +1365,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private void saveGemfireVersion() {
     if (this.gfversion == null) {
-      this.gfversion = Version.CURRENT;
+      this.gfversion = KnownVersion.CURRENT;
     }
     writeGemfireVersion(this.gfversion);
   }
@@ -1695,7 +1695,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private void writeRevokedMember(PersistentMemberPattern revoked) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
       hdos.write(IFREC_REVOKE_DISK_STORE_ID);
       InternalDataSerializer.invokeToData(revoked, hdos);
       hdos.write(END_OF_RECORD_ID);
@@ -1717,7 +1717,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       int comprLen = estimateByteSize(drv.getCompressorClassName());
       HeapDataOutputStream bb = new HeapDataOutputStream(
           1 + DR_ID_MAX_BYTES + 1 + 1 + 4 + 4 + 4 + 1 + 1 + 4 + len + 4 + 1 + 1 + 1,
-          Version.CURRENT);
+          KnownVersion.CURRENT);
       bb.write(IFREC_REGION_CONFIG_ID_90);
       writeDiskRegionID(bb, drv.getId());
       bb.write(drv.getLruAlgorithm());
@@ -1755,7 +1755,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
       colocatedWith = colocatedWith == null ? "" : colocatedWith;
       int colocatedLength = estimateByteSize(colocatedWith);
       HeapDataOutputStream hdos =
-          new HeapDataOutputStream(1 + nameLength + 4 + colocatedLength + 1, Version.CURRENT);
+          new HeapDataOutputStream(1 + nameLength + 4 + colocatedLength + 1, KnownVersion.CURRENT);
       hdos.write(IFREC_PR_CREATE);
       hdos.writeUTF(name);
       hdos.writeInt(config.getTotalNumBuckets());
@@ -1776,7 +1776,8 @@ public class DiskInitFile implements DiskInitFileInterpreter {
   private void writePRDestroy(String name) {
     try {
       int nameLength = estimateByteSize(name);
-      HeapDataOutputStream hdos = new HeapDataOutputStream(1 + nameLength + 4 + 1, Version.CURRENT);
+      HeapDataOutputStream hdos =
+          new HeapDataOutputStream(1 + nameLength + 4 + 1, KnownVersion.CURRENT);
       hdos.write(IFREC_PR_DESTROY);
       hdos.writeUTF(name);
       hdos.write(END_OF_RECORD_ID);
@@ -1794,7 +1795,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private void writeCanonicalId(int id, Object object) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
       hdos.write(IFREC_ADD_CANONICAL_MEMBER_ID);
       hdos.writeInt(id);
       DataSerializer.writeObject(object, hdos);
@@ -1851,7 +1852,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
 
   private byte[] pmidToBytes(PersistentMemberID id) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       InternalDataSerializer.invokeToData(id, hdos);
       return hdos.toByteArray();
     } catch (IOException ex) {
@@ -2000,7 +2001,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
    */
   private void writeClearRecord(DiskRegionView dr, RegionVersionVector rvv) {
     try {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
       hdos.write(IFREC_CLEAR_REGION_WITH_RVV_ID);
       writeDiskRegionID(hdos, dr.getId());
       // We only need the memberToVersionMap for clear purposes
@@ -2790,7 +2791,7 @@ public class DiskInitFile implements DiskInitFileInterpreter {
     return message;
   }
 
-  private void writeGemfireVersion(Version version) {
+  private void writeGemfireVersion(KnownVersion version) {
     lock(true);
     try {
       ByteBuffer bb = getIFWriteBuffer(1 + 3 + 1);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
index ec8bd6b..bb05e96 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
@@ -114,7 +114,7 @@ import org.apache.geode.internal.cache.versions.RegionVersionVector;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.executors.LoggingThread;
@@ -1914,7 +1914,7 @@ public class DiskStoreImpl implements DiskStore {
 
   private String getRecoveredGFVersionName() {
     String currentVersionStr = "GFE pre-7.0";
-    Version version = getRecoveredGFVersion();
+    KnownVersion version = getRecoveredGFVersion();
     if (version != null) {
       currentVersionStr = version.toString();
     }
@@ -1964,7 +1964,7 @@ public class DiskStoreImpl implements DiskStore {
         this.initFile =
             new DiskInitFile(partialFileName, this, ifRequired, persistentBackupFiles.keySet());
         if (this.upgradeVersionOnly) {
-          if (Version.CURRENT.compareTo(getRecoveredGFVersion()) <= 0) {
+          if (KnownVersion.CURRENT.compareTo(getRecoveredGFVersion()) <= 0) {
             if (getCache() != null) {
               getCache().close();
             }
@@ -1973,7 +1973,7 @@ public class DiskStoreImpl implements DiskStore {
                     getRecoveredGFVersionName()));
           }
         } else {
-          if (Version.GFE_70.compareTo(getRecoveredGFVersion()) > 0) {
+          if (KnownVersion.GFE_70.compareTo(getRecoveredGFVersion()) > 0) {
             // TODO: In each new version, need to modify the highest version
             // that needs converstion.
             if (getCache() != null) {
@@ -3644,7 +3644,8 @@ public class DiskStoreImpl implements DiskStore {
   public final boolean upgradeVersionOnly;
 
   boolean isUpgradeVersionOnly() {
-    return this.upgradeVersionOnly && Version.GFE_70.compareTo(this.getRecoveredGFVersion()) > 0;
+    return this.upgradeVersionOnly
+        && KnownVersion.GFE_70.compareTo(this.getRecoveredGFVersion()) > 0;
   }
 
   private final boolean offlineCompacting;
@@ -4695,11 +4696,11 @@ public class DiskStoreImpl implements DiskStore {
     oplogSet.updateDiskRegion(dr);
   }
 
-  public Version getRecoveredGFVersion() {
+  public KnownVersion getRecoveredGFVersion() {
     return getRecoveredGFVersion(this.initFile);
   }
 
-  Version getRecoveredGFVersion(DiskInitFile initFile) {
+  KnownVersion getRecoveredGFVersion(DiskInitFile initFile) {
     return initFile.currentRecoveredGFVersion();
   }
 
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 c029690..f2fd1af 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,8 +51,8 @@ import org.apache.geode.internal.cache.tx.DistTxEntryEvent;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class DistTXPrecommitMessage extends TXMessage {
@@ -481,7 +481,7 @@ public class DistTXPrecommitMessage extends TXMessage {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java
index b601730..d9fa0b4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DistributedPingMessage.java
@@ -26,8 +26,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.tier.sockets.ClientHealthMonitor;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class DistributedPingMessage extends HighPriorityDistributionMessage {
 
@@ -70,7 +70,7 @@ public class DistributedPingMessage extends HighPriorityDistributionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 8895e84..9a9737e 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
@@ -59,9 +59,9 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -779,7 +779,7 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -1210,7 +1210,7 @@ public class DistributedPutAllOperation extends AbstractUpdateOperation {
       this.putAllDataSize = (int) InternalDataSerializer.readUnsignedVL(in);
       this.putAllData = new PutAllEntryData[this.putAllDataSize];
       if (this.putAllDataSize > 0) {
-        final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+        final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
         final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
         for (int i = 0; i < this.putAllDataSize; i++) {
           this.putAllData[i] = new PutAllEntryData(in, context, eventId, i);
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 acaea24..9e59d6d 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
@@ -35,9 +35,9 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
-import org.apache.geode.internal.serialization.Version;
 
 public class DistributedTombstoneOperation extends DistributedCacheOperation {
   private enum TOperation {
@@ -129,7 +129,7 @@ public class DistributedTombstoneOperation extends DistributedCacheOperation {
     protected EventID eventID;
 
     @Immutable
-    private static final Version[] serializationVersions = null; // new Version[]{ };
+    private static final KnownVersion[] serializationVersions = null; // new Version[]{ };
 
     /**
      * for deserialization
@@ -179,7 +179,7 @@ public class DistributedTombstoneOperation extends DistributedCacheOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return serializationVersions;
     }
 
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 4168541..4e48bd6 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
@@ -77,8 +77,8 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.internal.util.ArrayUtils;
 import org.apache.geode.internal.util.BlobHelper;
@@ -2032,7 +2032,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
     return deserialize(bytes, null, null);
   }
 
-  public static Object deserialize(byte[] bytes, Version version, ByteArrayDataInput in) {
+  public static Object deserialize(byte[] bytes, KnownVersion version, ByteArrayDataInput in) {
     if (bytes == null)
       return null;
     try {
@@ -2084,7 +2084,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
    *
    * @throws IllegalArgumentException If <code>obj</code> should not be serialized
    */
-  public static byte[] serialize(Object obj, Version version) {
+  public static byte[] serialize(Object obj, KnownVersion version) {
     if (obj == null || obj == Token.NOT_AVAILABLE || Token.isInvalidOrRemoved(obj))
       throw new IllegalArgumentException(
           String.format("Must not serialize %s in this context.",
@@ -2117,7 +2117,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
     try {
       HeapDataOutputStream hdos = null;
       if (wrapper.getBytes().length < 32) {
-        hdos = new HeapDataOutputStream(Version.CURRENT);
+        hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       } else {
         hdos = new HeapDataOutputStream(wrapper.getBytes());
       }
@@ -2610,7 +2610,7 @@ public class EntryEventImpl implements InternalEntryEvent, InternalCacheEvent,
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
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 c6ccd12..8430baa 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
@@ -43,9 +43,9 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -87,7 +87,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
 
   /** The versions in which this message was modified */
   @Immutable
-  private static final Version[] dsfidVersions = new Version[] {Version.GFE_80};
+  private static final KnownVersion[] dsfidVersions = new KnownVersion[] {KnownVersion.GFE_80};
 
 
   private static final ThreadLocal threadIDLocal = new ThreadLocal() {
@@ -300,7 +300,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
    * @return the member that initiated this event
    */
   public InternalDistributedMember getDistributedMember() {
-    return getDistributedMember(Version.CURRENT);
+    return getDistributedMember(KnownVersion.CURRENT);
   }
 
   /**
@@ -309,12 +309,12 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
    * memberID bytes and use that version to deserialize the bytes. Clients prior to 1.1.0 need to
    * have UUID bytes in the memberID. Newer clients don't require this.
    */
-  public InternalDistributedMember getDistributedMember(Version targetVersion) {
-    Version disVersion = null;
-    if (targetVersion.isOlderThan(Version.GEODE_1_1_0)) {
+  public InternalDistributedMember getDistributedMember(KnownVersion targetVersion) {
+    KnownVersion disVersion = null;
+    if (targetVersion.isOlderThan(KnownVersion.GEODE_1_1_0)) {
       // GEODE-3153: clients expect to receive UUID bytes, which are only
       // read if the stream's version is 1.0.0-incubating
-      disVersion = Version.GFE_90;
+      disVersion = KnownVersion.GFE_90;
     }
     ByteArrayDataInput dis =
         new ByteArrayDataInput(membershipID, disVersion);
@@ -351,16 +351,16 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
   @Override
   public void toData(DataOutput dop,
       SerializationContext context) throws IOException {
-    Version version = StaticSerialization.getVersionForDataStream(dop);
+    KnownVersion version = StaticSerialization.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
     // of the identifier
     // See GEODE-3072
-    if (membershipID != null && version.isOlderThan(Version.GEODE_1_1_0)) {
-      InternalDistributedMember member = getDistributedMember(Version.GFE_90);
+    if (membershipID != null && version.isOlderThan(KnownVersion.GEODE_1_1_0)) {
+      InternalDistributedMember member = getDistributedMember(KnownVersion.GFE_90);
       // reserialize with the client's version so that we write the UUID
       // bytes
-      HeapDataOutputStream hdos = new HeapDataOutputStream(Version.GFE_90);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.GFE_90);
       member.writeEssentialData(hdos);
       DataSerializer.writeByteArray(hdos.toByteArray(), dop);
     } else {
@@ -573,7 +573,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
       // DS already exists... make sure it's for current DS connection
       EventID.systemMemberId = sys.getDistributedMember();
       try {
-        HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
         ((InternalDistributedMember) EventID.systemMemberId).writeEssentialData(hdos);
         client_side_event_identity = hdos.toByteArray();
       } catch (IOException ioe) {
@@ -836,7 +836,7 @@ public class EventID implements DataSerializableFixedID, Serializable, Externali
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return dsfidVersions;
   }
 }
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 3ffb3fa..955a4b2 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,8 +26,8 @@ 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.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ExpireDisconnectedClientTransactionsMessage
     extends HighPriorityDistributionMessage {
@@ -47,7 +47,7 @@ public class ExpireDisconnectedClientTransactionsMessage
     Set newVersionRecipients = new HashSet();
     for (InternalDistributedMember recipient : recipients) {
       // to geode 1.7.0 and later version servers
-      if (recipient.getVersionOrdinalObject().isNotOlderThan(Version.GEODE_1_7_0)) {
+      if (recipient.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
         newVersionRecipients.add(recipient);
       }
     }
@@ -78,7 +78,7 @@ public class ExpireDisconnectedClientTransactionsMessage
     InternalDistributedMember sender = getSender();
     if (cache != null) {
       TXManagerImpl mgr = cache.getTXMgr();
-      if (sender.getVersionOrdinalObject().isNotOlderThan(Version.GEODE_1_7_0)) {
+      if (sender.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GEODE_1_7_0)) {
         // schedule to expire disconnected client transaction.
         mgr.expireDisconnectedClientTransactions(this.txIds, false);
       } else {
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 8cd6e12..5ad4ab6 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
@@ -76,8 +76,8 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -2265,7 +2265,7 @@ public class FilterProfile implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
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 83e648e..c4be1b3 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
@@ -34,8 +34,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.VersionedDataSerializable;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This class is used to hold the information about the servers and their Filters (CQs and Interest
@@ -49,7 +49,8 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
       Boolean.getBoolean("optimized-cq-serialization");
 
   @Immutable
-  private static final Version[] serializationVersions = new Version[] {Version.GFE_71};
+  private static final KnownVersion[] serializationVersions =
+      new KnownVersion[] {KnownVersion.GFE_71};
 
   /** Set to true if any peer members has any filters. */
   private boolean memberWithFilterInfoExists = false;
@@ -248,7 +249,7 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
@@ -320,7 +321,7 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
     private transient byte[] myData;
 
     /** version of creator of myData, needed for deserialization */
-    private transient Version myDataVersion;
+    private transient KnownVersion myDataVersion;
 
     /** Clients that are interested in the event and want values */
     private Set interestedClients;
@@ -361,10 +362,11 @@ public class FilterRoutingInfo implements VersionedDataSerializable {
     }
 
     @Immutable
-    private static final Version[] serializationVersions = new Version[] {Version.GFE_80};
+    private static final KnownVersion[] serializationVersions =
+        new KnownVersion[] {KnownVersion.GFE_80};
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return serializationVersions;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index 40ecc50..3db5973 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -251,7 +251,7 @@ import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.security.SecurityServiceFactory;
 import org.apache.geode.internal.sequencelog.SequenceLoggerImpl;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.shared.StringPrintWriter;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsClockFactory;
@@ -4399,7 +4399,8 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
     // This block prevents sending a message to old members that do not know about
     // the RemoveCacheServerProfileMessage
     otherMembers
-        .removeIf(member -> Version.GEODE_1_5_0.compareTo(member.getVersionOrdinalObject()) > 0);
+        .removeIf(
+            member -> KnownVersion.GEODE_1_5_0.compareTo(member.getVersionOrdinalObject()) > 0);
 
     if (!otherMembers.isEmpty()) {
       if (logger.isDebugEnabled()) {
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 789a1ea..9eca817 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
@@ -95,9 +95,9 @@ 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.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.executors.LoggingThread;
@@ -339,14 +339,14 @@ public class InitialImageOperation {
       final ClusterDistributionManager dm =
           (ClusterDistributionManager) this.region.getDistributionManager();
       boolean allowDeltaGII = true;
-      if (FORCE_FULL_GII || recipient.getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+      if (FORCE_FULL_GII || recipient.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
         allowDeltaGII = false;
       }
       Set keysOfUnfinishedOps = null;
       RegionVersionVector received_rvv = null;
       RegionVersionVector remote_rvv = null;
       if (this.region.getConcurrencyChecksEnabled()
-          && recipient.getVersionOrdinalObject().isNotOlderThan(Version.GFE_80)) {
+          && recipient.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GFE_80)) {
         if (internalBeforeRequestRVV != null
             && internalBeforeRequestRVV.getRegionName().equals(this.region.getName())) {
           internalBeforeRequestRVV.run();
@@ -747,7 +747,7 @@ public class InitialImageOperation {
           Set recipients = this.region.getCacheDistributionAdvisor().adviseReplicates();
           for (Iterator it = recipients.iterator(); it.hasNext();) {
             InternalDistributedMember mbr = (InternalDistributedMember) it.next();
-            if (mbr.getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+            if (mbr.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
               it.remove();
             }
           }
@@ -1191,7 +1191,7 @@ public class InitialImageOperation {
         region.recordEventState(msg.getSender(), msg.eventState);
       }
       if (msg.versionVector != null
-          && msg.getSender().getVersionOrdinalObject().isOlderThan(Version.GFE_80)
+          && msg.getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)
           && region.getConcurrencyChecksEnabled()) {
         // for older version, save received rvv from RegionStateMessage
         logger.debug("Applying version vector to {}: {}", region.getName(), msg.versionVector);
@@ -1586,7 +1586,7 @@ public class InitialImageOperation {
 
     /** The versions in which this message was modified */
     @Immutable
-    private static final Version[] dsfidVersions = null;
+    private static final KnownVersion[] dsfidVersions = null;
 
     @Override
     public int getProcessorId() {
@@ -1600,7 +1600,7 @@ public class InitialImageOperation {
     }
 
     public boolean goWithFullGII(DistributedRegion rgn, RegionVersionVector requesterRVV) {
-      if (getSender().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+      if (getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
         // pre-8.0 could not handle a delta-GII
         return true;
       }
@@ -1745,7 +1745,7 @@ public class InitialImageOperation {
             if (eventState != null && eventState.size() > 0) {
               RegionStateMessage.send(dm, getSender(), this.processorId, eventState, true);
             }
-          } else if (getSender().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+          } else if (getSender().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
             // older versions of the product expect a RegionStateMessage at this point
             if (rgn.getConcurrencyChecksEnabled() && this.versionVector == null
                 && !recoveringForLostMember) {
@@ -1994,8 +1994,8 @@ public class InitialImageOperation {
           it = rgn.getBestIterator(includeValues);
         }
 
-        final Version knownVersion = Versioning
-            .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), Version.CURRENT);
+        final KnownVersion knownVersion = Versioning
+            .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), KnownVersion.CURRENT);
 
         do {
           flowControl.acquirePermit();
@@ -2167,7 +2167,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
 
@@ -2807,12 +2807,12 @@ public class InitialImageOperation {
      */
     private Map<VersionSource, Long> gcVersions;
 
-    /** the {@link Version} of the remote peer */
-    private transient Version remoteVersion;
+    /** the {@link KnownVersion} of the remote peer */
+    private transient KnownVersion remoteVersion;
 
     /** The versions in which this message was modified */
     @Immutable
-    private static final Version[] dsfidVersions = null;
+    private static final KnownVersion[] dsfidVersions = null;
 
     @Override
     public boolean getInlineProcess() {
@@ -2996,7 +2996,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
   }
@@ -3148,7 +3148,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
@@ -3442,7 +3442,7 @@ public class InitialImageOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
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 53035e3..1b16574 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
@@ -26,8 +26,8 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.cache.partitioned.PartitionMessage;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class InvalidatePartitionedRegionMessage extends PartitionMessage {
 
@@ -124,7 +124,7 @@ public class InvalidatePartitionedRegionMessage extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_9_0};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0};
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java
index 545d99c..983a241 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/LatestLastAccessTimeOperation.java
@@ -20,7 +20,7 @@ import org.apache.geode.CancelException;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.ReplyException;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Operation that determines the latest last access time for a given region and key
@@ -40,7 +40,7 @@ public class LatestLastAccessTimeOperation<K> {
     final Set<InternalDistributedMember> recipients =
         this.region.getCacheDistributionAdvisor().adviseNetSearch();
     final DistributionManager dm = this.region.getDistributionManager();
-    dm.retainMembersWithSameOrNewerVersion(recipients, Version.GEODE_1_4_0);
+    dm.retainMembersWithSameOrNewerVersion(recipients, KnownVersion.GEODE_1_4_0);
     final LatestLastAccessTimeReplyProcessor replyProcessor =
         new LatestLastAccessTimeReplyProcessor(dm, recipients);
     dm.putOutgoing(
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
index 73a67bf..6a72d30 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/LocalRegion.java
@@ -213,7 +213,7 @@ 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.sequencelog.EntryLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.concurrent.CopyOnWriteHashMap;
 import org.apache.geode.internal.util.concurrent.FutureResult;
@@ -1727,7 +1727,7 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory,
           extractDelta = true;
         }
         if (extractDelta && ((Delta) value).hasDelta()) {
-          HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
           long start = DistributionStats.getStatTime();
           try {
             ((Delta) value).toDelta(hdos);
@@ -10683,7 +10683,7 @@ public class LocalRegion extends AbstractRegion implements LoaderHelperFactory,
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java
index e2ee950..cf120f1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Node.java
@@ -25,8 +25,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.ExternalizableDSFID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Stores information about a PartitionedRegion singleton instance running inside a virtual machine.
@@ -172,7 +172,7 @@ public class Node extends ExternalizableDSFID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
index 0ab1182..0bc6970 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/NonLocalRegionEntry.java
@@ -35,7 +35,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class NonLocalRegionEntry implements RegionEntry, VersionStamp {
 
@@ -196,7 +196,7 @@ public class NonLocalRegionEntry implements RegionEntry, VersionStamp {
 
   @Override
   public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-      DistributionManager distributionManager, final Version version) {
+      DistributionManager distributionManager, final KnownVersion version) {
     throw new UnsupportedOperationException(
         "Not appropriate for PartitionedRegion.NonLocalRegionEntry");
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
index 0e5ad7e..e53b724 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
@@ -104,7 +104,7 @@ import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.internal.shared.NativeCalls;
@@ -152,14 +152,14 @@ public class Oplog implements CompactableOplog, Flushable {
   protected final long oplogId;
 
   /** recovered gemfire version * */
-  protected Version gfversion;
+  protected KnownVersion gfversion;
 
   /**
    * Recovered version of the data. Usually this is same as {@link #gfversion} except for the case
    * of upgrading disk store from previous version in which case the keys/values are carried forward
    * as is and need to be interpreted in load by latest product code if required.
    */
-  protected Version dataVersion;
+  protected KnownVersion dataVersion;
 
   /** Directory in which the file is present* */
   private DirectoryHolder dirHolder;
@@ -730,11 +730,11 @@ public class Oplog implements CompactableOplog, Flushable {
 
   private void writeGemfireVersionRecord(OplogFile olf) throws IOException {
     if (this.gfversion == null) {
-      this.gfversion = Version.CURRENT;
+      this.gfversion = KnownVersion.CURRENT;
     }
-    Version dataVersion = getDataVersionIfOld();
+    KnownVersion dataVersion = getDataVersionIfOld();
     if (dataVersion == null) {
-      dataVersion = Version.CURRENT;
+      dataVersion = KnownVersion.CURRENT;
     }
     // if gfversion and dataVersion are not same, then write a special token
     // version and then write both, else write gfversion as before
@@ -743,7 +743,7 @@ public class Oplog implements CompactableOplog, Flushable {
     if (this.gfversion == dataVersion) {
       writeProductVersionRecord(this.gfversion, olf);
     } else {
-      writeProductVersionRecord(Version.TOKEN, olf);
+      writeProductVersionRecord(KnownVersion.TOKEN, olf);
       clearOpState();
       writeProductVersionRecord(this.gfversion, olf);
       clearOpState();
@@ -751,14 +751,14 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private void writeProductVersionRecord(Version version, OplogFile olf) throws IOException {
+  private void writeProductVersionRecord(KnownVersion version, OplogFile olf) throws IOException {
     this.opState.initialize(version.ordinal());
     writeOpLogBytes(olf, false, true);
     olf.currSize += getOpStateSize();
     this.dirHolder.incrementTotalOplogSize(getOpStateSize());
   }
 
-  public Version currentRecoveredGFVersion() {
+  public KnownVersion currentRecoveredGFVersion() {
     return this.gfversion;
   }
 
@@ -1650,7 +1650,7 @@ public class Oplog implements CompactableOplog, Flushable {
       long oplogKeyIdHWM = DiskStoreImpl.INVALID_ID;
       int krfEntryCount = 0;
       DataInputStream dis = new DataInputStream(new BufferedInputStream(fis, 1024 * 1024));
-      final Version version = getProductVersionIfOld();
+      final KnownVersion version = getProductVersionIfOld();
       final ByteArrayDataInput in = new ByteArrayDataInput();
       try {
         try {
@@ -1836,9 +1836,9 @@ public class Oplog implements CompactableOplog, Flushable {
     CountingDataInputStream dis = null;
     try {
       final LocalRegion currentRegion = LocalRegion.getInitializingRegion();
-      final Version version = getProductVersionIfOld();
+      final KnownVersion version = getProductVersionIfOld();
       final ByteArrayDataInput in = new ByteArrayDataInput();
-      final HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+      final HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
       int recordCount = 0;
       boolean foundDiskStoreRecord = false;
       FileInputStream fis = null;
@@ -2035,9 +2035,9 @@ public class Oplog implements CompactableOplog, Flushable {
    * @throws DiskAccessException if this file does not belong to our parent
    */
   private void readGemfireVersionRecord(DataInput dis, File f) throws IOException {
-    Version recoveredGFVersion = readProductVersionRecord(dis, f);
+    KnownVersion recoveredGFVersion = readProductVersionRecord(dis, f);
     final boolean hasDataVersion;
-    if ((hasDataVersion = (recoveredGFVersion == Version.TOKEN))) {
+    if ((hasDataVersion = (recoveredGFVersion == KnownVersion.TOKEN))) {
       // actual GFE version will be the next record in this case
       byte opCode = dis.readByte();
       if (opCode != OPLOG_GEMFIRE_VERSION) {
@@ -2070,9 +2070,9 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private Version readProductVersionRecord(DataInput dis, File f) throws IOException {
+  private KnownVersion readProductVersionRecord(DataInput dis, File f) throws IOException {
     short ver = VersioningIO.readOrdinal(dis);
-    final Version recoveredGFVersion =
+    final KnownVersion recoveredGFVersion =
         Versioning.getKnownVersionOrDefault(
             Versioning.getVersionOrdinal(ver), null);
     if (recoveredGFVersion == null) {
@@ -2287,7 +2287,7 @@ public class Oplog implements CompactableOplog, Flushable {
    */
   public DiskEntry.RecoveredEntry createRecoveredEntry(byte[] valueBytes, int valueLength,
       byte userBits, long oplogId, long offsetInOplog, long oplogKeyId, boolean recoverValue,
-      Version version, ByteArrayDataInput in) {
+      KnownVersion version, ByteArrayDataInput in) {
     DiskEntry.RecoveredEntry re = null;
     if (recoverValue || EntryBits.isAnyInvalid(userBits) || EntryBits.isTombstone(userBits)) {
       Object value;
@@ -2352,7 +2352,7 @@ public class Oplog implements CompactableOplog, Flushable {
   }
 
   private VersionTag readVersionsFromOplog(DataInput dis) throws IOException {
-    if (Version.GFE_70.compareTo(currentRecoveredGFVersion()) <= 0) {
+    if (KnownVersion.GFE_70.compareTo(currentRecoveredGFVersion()) <= 0) {
       // this version format is for gemfire 7.0
       // if we have different version format in 7.1, it will be handled in
       // "else if"
@@ -2413,7 +2413,8 @@ public class Oplog implements CompactableOplog, Flushable {
    * @param opcode byte whether the id is short/int/long
    */
   private void readNewEntry(CountingDataInputStream dis, byte opcode, OplogEntryIdSet deletedIds,
-      boolean recoverValue, final LocalRegion currentRegion, Version version, ByteArrayDataInput in,
+      boolean recoverValue, final LocalRegion currentRegion, KnownVersion version,
+      ByteArrayDataInput in,
       HeapDataOutputStream hdos) throws IOException {
     final boolean isPersistRecoveryDebugEnabled =
         logger.isTraceEnabled(LogMarker.PERSIST_RECOVERY_VERBOSE);
@@ -2602,7 +2603,7 @@ public class Oplog implements CompactableOplog, Flushable {
    * @param opcode byte whether the id is short/int/long
    */
   private void readModifyEntry(CountingDataInputStream dis, byte opcode, OplogEntryIdSet deletedIds,
-      boolean recoverValue, LocalRegion currentRegion, Version version, ByteArrayDataInput in,
+      boolean recoverValue, LocalRegion currentRegion, KnownVersion version, ByteArrayDataInput in,
       HeapDataOutputStream hdos) throws IOException {
     final boolean isPersistRecoveryDebugEnabled =
         logger.isTraceEnabled(LogMarker.PERSIST_RECOVERY_VERBOSE);
@@ -2792,7 +2793,7 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private void validateValue(byte[] valueBytes, byte userBits, Version version,
+  private void validateValue(byte[] valueBytes, byte userBits, KnownVersion version,
       ByteArrayDataInput in) {
     if (getParent().isValidating()) {
       if (EntryBits.isSerialized(userBits)) {
@@ -2819,7 +2820,7 @@ public class Oplog implements CompactableOplog, Flushable {
    */
   private void readModifyEntryWithKey(CountingDataInputStream dis, byte opcode,
       OplogEntryIdSet deletedIds, boolean recoverValue, final LocalRegion currentRegion,
-      Version version, ByteArrayDataInput in, HeapDataOutputStream hdos) throws IOException {
+      KnownVersion version, ByteArrayDataInput in, HeapDataOutputStream hdos) throws IOException {
     long oplogOffset = -1;
 
     byte userBits = dis.readByte();
@@ -3911,14 +3912,14 @@ public class Oplog implements CompactableOplog, Flushable {
     // write both gemfire and data versions if the two are different else write
     // only gemfire version; a token distinguishes the two cases while reading
     // like in writeGemFireVersionRecord
-    Version dataVersion = getDataVersionIfOld();
+    KnownVersion dataVersion = getDataVersionIfOld();
     if (dataVersion == null) {
-      dataVersion = Version.CURRENT;
+      dataVersion = KnownVersion.CURRENT;
     }
     if (this.gfversion == dataVersion) {
       VersioningIO.writeOrdinal(this.krf.dos, this.gfversion.ordinal(), false);
     } else {
-      VersioningIO.writeOrdinal(this.krf.dos, Version.TOKEN.ordinal(), false);
+      VersioningIO.writeOrdinal(this.krf.dos, KnownVersion.TOKEN.ordinal(), false);
       this.krf.dos.writeByte(END_OF_RECORD_ID);
       this.krf.dos.writeByte(OPLOG_GEMFIRE_VERSION);
       VersioningIO.writeOrdinal(this.krf.dos, this.gfversion.ordinal(), false);
@@ -5352,7 +5353,7 @@ public class Oplog implements CompactableOplog, Flushable {
               this.stats.incOplogReads();
               bb = new BytesAndBits(valueBytes, userBits);
               // also set the product version for an older product
-              final Version version = getProductVersionIfOld();
+              final KnownVersion version = getProductVersionIfOld();
               if (version != null) {
                 bb.setVersion(version);
               }
@@ -6192,7 +6193,7 @@ public class Oplog implements CompactableOplog, Flushable {
 
   private byte[] serializeRVVs(Map<Long, AbstractDiskRegion> drMap, boolean gcRVV)
       throws IOException {
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     // Filter out any regions that do not have versioning enabled
     drMap = new HashMap<Long, AbstractDiskRegion>(drMap);
@@ -6323,7 +6324,7 @@ public class Oplog implements CompactableOplog, Flushable {
 
   private byte[] serializeVersionTag(int entryVersion, long regionVersion,
       VersionSource versionMember, long timestamp, int dsId) throws IOException {
-    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8 + 4 + 8 + 4, Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(4 + 8 + 4 + 8 + 4, KnownVersion.CURRENT);
     serializeVersionTag(entryVersion, regionVersion, versionMember, timestamp, dsId, out);
     return out.toByteArray();
   }
@@ -6353,7 +6354,7 @@ public class Oplog implements CompactableOplog, Flushable {
     }
   }
 
-  private Object deserializeKey(byte[] keyBytes, final Version version,
+  private Object deserializeKey(byte[] keyBytes, final KnownVersion version,
       final ByteArrayDataInput in) {
     if (!getParent().isOffline() || !PdxWriterImpl.isPdx(keyBytes)) {
       return EntryEventImpl.deserialize(keyBytes, version, in);
@@ -6364,20 +6365,20 @@ public class Oplog implements CompactableOplog, Flushable {
 
   /**
    * If this OpLog is from an older version of the product, then return that
-   * {@link Version} else
+   * {@link KnownVersion} else
    * return null.
    */
-  public Version getProductVersionIfOld() {
-    final Version version = this.gfversion;
+  public KnownVersion getProductVersionIfOld() {
+    final KnownVersion version = this.gfversion;
     if (version == null) {
       // check for the case of diskstore upgrade from 6.6 to >= 7.0
       if (getParent().isUpgradeVersionOnly()) {
         // assume previous release version
-        return Version.GFE_66;
+        return KnownVersion.GFE_66;
       } else {
         return null;
       }
-    } else if (version == Version.CURRENT) {
+    } else if (version == KnownVersion.CURRENT) {
       return null;
     } else {
       // version changed so return that for VersionedDataStream
@@ -6387,19 +6388,19 @@ public class Oplog implements CompactableOplog, Flushable {
 
   /**
    * If this OpLog has data that was written by an older version of the product, then return that
-   * {@link Version} else return null.
+   * {@link KnownVersion} else return null.
    */
-  public Version getDataVersionIfOld() {
-    final Version version = this.dataVersion;
+  public KnownVersion getDataVersionIfOld() {
+    final KnownVersion version = this.dataVersion;
     if (version == null) {
       // check for the case of diskstore upgrade from 6.6 to >= 7.0
       if (getParent().isUpgradeVersionOnly()) {
         // assume previous release version
-        return Version.GFE_66;
+        return KnownVersion.GFE_66;
       } else {
         return null;
       }
-    } else if (version == Version.CURRENT) {
+    } else if (version == KnownVersion.CURRENT) {
       return null;
     } else {
       // version changed so return that for VersionedDataStream
@@ -7222,7 +7223,7 @@ public class Oplog implements CompactableOplog, Flushable {
     @Override
     public boolean fillInValue(InternalRegion region, InitialImageOperation.Entry entry,
         ByteArrayDataInput in, DistributionManager distributionManager,
-        final Version version) {
+        final KnownVersion version) {
       return false;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
index e9f3e6e..d681804 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PRQueryProcessor.java
@@ -53,8 +53,8 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.cache.execute.BucketMovedException;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -380,7 +380,7 @@ public class PRQueryProcessor {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java
index 66c710a..23e3f9b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionRegionConfig.java
@@ -33,8 +33,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.ExternalizableDSFID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.Versionable;
 import org.apache.geode.internal.util.VersionedArrayList;
 
@@ -433,7 +433,7 @@ public class PartitionRegionConfig extends ExternalizableDSFID implements Versio
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
index fd0169e..27b2cf6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegion.java
@@ -249,7 +249,7 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.sequencelog.RegionLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.TransformUtils;
@@ -4685,7 +4685,7 @@ public class PartitionedRegion extends LocalRegion
 
     Set<InternalDistributedMember> oldMembers =
         new HashSet<InternalDistributedMember>(nodeToBuckets.keySet());
-    dm.removeMembersWithSameOrNewerVersion(oldMembers, Version.CURRENT);
+    dm.removeMembersWithSameOrNewerVersion(oldMembers, KnownVersion.CURRENT);
     Iterator<InternalDistributedMember> oldies = oldMembers.iterator();
     while (oldies.hasNext()) {
       InternalDistributedMember old = oldies.next();
@@ -4830,7 +4830,7 @@ public class PartitionedRegion extends LocalRegion
         oneBucketKeys.clear();
         oneBucketKeys.put(e.getKey(), e.getValue());
         try {
-          if (entry.getKey().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+          if (entry.getKey().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
             failures.putAll(nodeToBuckets.get(entry.getKey()));
             continue;
           }
@@ -4882,7 +4882,7 @@ public class PartitionedRegion extends LocalRegion
         bucketId.clear();
         bucketId.add(bucket);
         try {
-          if (entry.getKey().getVersionOrdinalObject().isOlderThan(Version.GFE_80)) {
+          if (entry.getKey().getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_80)) {
             failures.addAll(nodeToBuckets.get(entry.getKey()));
             continue;
           }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
index 1c7d4bb..4ced34c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionQueryEvaluator.java
@@ -74,7 +74,7 @@ import org.apache.geode.internal.cache.partitioned.PartitionMessage;
 import org.apache.geode.internal.cache.partitioned.QueryMessage;
 import org.apache.geode.internal.cache.partitioned.RegionAdvisor;
 import org.apache.geode.internal.cache.partitioned.StreamingPartitionOperation;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -186,7 +186,7 @@ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation
     // we will have to sort it
     boolean sortNeeded = false;
     List<CompiledSortCriterion> orderByAttribs = null;
-    if (sender.getVersionOrdinalObject().isOlderThan(Version.GFE_90)) {
+    if (sender.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_90)) {
       CompiledSelect cs = this.query.getSimpleSelect();
       if (cs != null && cs.isOrderBy()) {
         sortNeeded = true;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
index a674eed..74ce664 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PreferBytesCachedDeserializable.java
@@ -25,8 +25,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This cache deserializable always keeps its byte[] in serialized form. You can ask it for its
@@ -161,7 +161,7 @@ public class PreferBytesCachedDeserializable
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
index bb8420a..28963ea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ProxyRegionMap.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.concurrent.ConcurrentMapWithReusableEntries;
 
 /**
@@ -467,7 +467,7 @@ class ProxyRegionMap extends BaseRegionMap {
 
     @Override
     public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-        DistributionManager distributionManager, final Version version) {
+        DistributionManager distributionManager, final KnownVersion version) {
       throw new UnsupportedOperationException(
           String.format("No entry support on regions with DataPolicy %s",
               DataPolicy.EMPTY));
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
index 33ded56..fee0954 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEntry.java
@@ -33,7 +33,7 @@ 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.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Internal interface for a region entry. Note that a region is implemented with a ConcurrentHashMap
@@ -178,7 +178,7 @@ public interface RegionEntry {
    */
   boolean fillInValue(InternalRegion region,
       @Retained(ABSTRACT_REGION_ENTRY_FILL_IN_VALUE) Entry entry, ByteArrayDataInput in,
-      DistributionManager distributionManager, final Version version);
+      DistributionManager distributionManager, final KnownVersion version);
 
   /**
    * Returns true if this entry has overflowed to disk.
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
index 402b7f2..fba513d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/RegionEventImpl.java
@@ -33,8 +33,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Implementation of a region event
@@ -310,7 +310,7 @@ public class RegionEventImpl
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
index 8f8d337..5882fdd 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ServerPingMessage.java
@@ -28,8 +28,8 @@ import org.apache.geode.distributed.internal.ReplyMessage;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Ping to check if a server is alive. It waits for a specified time before returning false.
@@ -65,7 +65,7 @@ public class ServerPingMessage extends PooledDistributionMessage {
 
     // filtered recipients
     for (InternalDistributedMember recipient : recipients) {
-      if (Version.GFE_81.compareTo(recipient.getVersionOrdinalObject()) <= 0) {
+      if (KnownVersion.GFE_81.compareTo(recipient.getVersionOrdinalObject()) <= 0) {
         filteredRecipients.add(recipient);
       }
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
index 39aac63..62d1661 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/StoreAllCachedDeserializable.java
@@ -25,8 +25,8 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * This cache deserializable always keeps its byte[] in serialized form and the object form.
@@ -158,7 +158,7 @@ public class StoreAllCachedDeserializable implements CachedDeserializable, DataS
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
index 21cefb2..f15ee80 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXCommitMessage.java
@@ -74,9 +74,9 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -138,7 +138,7 @@ public class TXCommitMessage extends PooledDistributionMessage
    * Version of the client that this TXCommitMessage is being sent to. Used for backwards
    * compatibility
    */
-  private transient Version clientVersion;
+  private transient KnownVersion clientVersion;
 
   /**
    * A token to be put in TXManagerImpl#failoverMap to represent a CommitConflictException while
@@ -953,8 +953,8 @@ public class TXCommitMessage extends PooledDistributionMessage
     return hasFlagsField(StaticSerialization.getVersionForDataStream(in));
   }
 
-  private boolean hasFlagsField(final Version version) {
-    return version.isNotOlderThan(Version.GEODE_1_7_0);
+  private boolean hasFlagsField(final KnownVersion version) {
+    return version.isNotOlderThan(KnownVersion.GEODE_1_7_0);
   }
 
   private boolean useShadowKey() {
@@ -1503,7 +1503,8 @@ public class TXCommitMessage extends PooledDistributionMessage
         out.writeBoolean(largeModCount);
 
         final boolean sendVersionTags =
-            this.msg.clientVersion == null || Version.GFE_70.compareTo(this.msg.clientVersion) <= 0;
+            this.msg.clientVersion == null
+                || KnownVersion.GFE_70.compareTo(this.msg.clientVersion) <= 0;
         if (sendVersionTags) {
           VersionSource member = this.memberId;
           if (member == null) {
@@ -1536,7 +1537,7 @@ public class TXCommitMessage extends PooledDistributionMessage
         this.preserializedBuffer.rewind();
         this.preserializedBuffer.sendTo(out);
       } else if (this.refCount > 1) {
-        Version v = StaticSerialization.getVersionForDataStream(out);
+        KnownVersion v = StaticSerialization.getVersionForDataStream(out);
         HeapDataOutputStream hdos = new HeapDataOutputStream(1024, v);
         basicToData(hdos, context, useShadowKey);
         this.preserializedBuffer = hdos;
@@ -2417,11 +2418,11 @@ public class TXCommitMessage extends PooledDistributionMessage
     disableListeners = true;
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return clientVersion;
   }
 
-  public void setClientVersion(Version clientVersion) {
+  public void setClientVersion(KnownVersion clientVersion) {
     this.clientVersion = clientVersion;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
index e0afaad..ba795ca 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXEntryState.java
@@ -51,8 +51,8 @@ import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -2077,7 +2077,7 @@ public class TXEntryState implements Releasable {
     public DistTxThinEntryState() {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java
index 89830e5..946587e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXId.java
@@ -24,8 +24,8 @@ import org.apache.geode.internal.DSFIDFactory;
 import org.apache.geode.internal.ExternalizableDSFID;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * The implementation of the {@link TransactionId} interface stored in the transaction state and
@@ -121,7 +121,7 @@ public class TXId extends ExternalizableDSFID implements TransactionId {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java
index 5ae0e19..fbf057d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXRegionLockRequestImpl.java
@@ -29,8 +29,8 @@ import org.apache.geode.cache.CacheClosedException;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.locks.TXRegionLockRequest;
 import org.apache.geode.internal.logging.log4j.LogMarker;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -119,7 +119,8 @@ public class TXRegionLockRequestImpl implements TXRegionLockRequest {
       if (cache != null && size > 0) {
         this.r = (LocalRegion) cache.getRegion(this.regionPath);
       }
-      if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(Version.GEODE_1_10_0)) {
+      if (StaticSerialization.getVersionForDataStream(in)
+          .isNotOlderThan(KnownVersion.GEODE_1_10_0)) {
         this.entryKeys = readEntryKeyMap(size, in);
       } else {
         this.entryKeys = readEntryKeySet(size, in);
@@ -183,7 +184,8 @@ public class TXRegionLockRequestImpl implements TXRegionLockRequest {
   @Override
   public void toData(DataOutput out) throws IOException {
     DataSerializer.writeString(getRegionFullPath(), out);
-    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(Version.GEODE_1_10_0)) {
+    if (StaticSerialization.getVersionForDataStream(out)
+        .isNotOlderThan(KnownVersion.GEODE_1_10_0)) {
       InternalDataSerializer.writeHashMap(this.entryKeys, out);
     } else {
       HashSet hashset = new HashSet(this.entryKeys.keySet());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
index fea81be..9c032a3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Token.java
@@ -25,8 +25,8 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Internal tokens used as region values. These tokens are never seen from the public API.
@@ -161,7 +161,7 @@ public abstract class Token {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -214,7 +214,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -247,7 +247,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -280,7 +280,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -313,7 +313,7 @@ public abstract class Token {
         DeserializationContext context) throws IOException, ClassNotFoundException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -365,7 +365,7 @@ public abstract class Token {
         SerializationContext context) throws IOException {}
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
index f248e04..4870789 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/VMCachedDeserializable.java
@@ -27,8 +27,8 @@ import org.apache.geode.internal.cache.eviction.EvictableEntry;
 import org.apache.geode.internal.lang.StringUtils;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxInstance;
 
 /**
@@ -273,7 +273,7 @@ public class VMCachedDeserializable implements CachedDeserializable, DataSeriali
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
index 7863ac4..b68e701 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ValidatingDiskRegion.java
@@ -38,7 +38,7 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * A disk region that is created when doing offline validation.
@@ -351,7 +351,7 @@ public class ValidatingDiskRegion extends DiskRegion implements DiskRecoveryStor
 
     @Override
     public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-        DistributionManager distributionManager, final Version version) {
+        DistributionManager distributionManager, final KnownVersion version) {
       return false;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java
index 9655ebe..9615eb5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ValueComparisonHelper.java
@@ -21,7 +21,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.PdxSerializable;
 import org.apache.geode.pdx.PdxSerializationException;
@@ -153,7 +153,7 @@ public class ValueComparisonHelper {
         }
         if (pdxSerializer != null || obj instanceof PdxSerializable) {
           // try to convert obj to a PdxInstance
-          HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
           try {
             if (InternalDataSerializer.autoSerialized(obj, hdos)
                 || InternalDataSerializer.writePdx(hdos, cache, obj, pdxSerializer)) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java b/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java
index bdbba0e..3630101 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/compression/SnappyCompressedCachedDeserializable.java
@@ -19,7 +19,7 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.compression.Compressor;
 import org.apache.geode.compression.SnappyCompressor;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * An implementation of {@link CompressedCachedDeserializable} that uses the built in Snappy
@@ -78,7 +78,7 @@ public class SnappyCompressedCachedDeserializable extends CompressedCachedDeseri
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java
index a3ab5f5..239c079 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRegionRedundancyStatusImpl.java
@@ -22,8 +22,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.operation.RegionRedundancyStatusImpl;
 
 /**
@@ -109,7 +109,7 @@ public class SerializableRegionRedundancyStatusImpl extends
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java
index c9f80f0..746173d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/control/SerializableRestoreRedundancyResultsImpl.java
@@ -22,8 +22,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.partition.PartitionRebalanceInfo;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.operation.RestoreRedundancyResultsImpl;
 
 /**
@@ -71,7 +71,7 @@ public class SerializableRestoreRedundancyResultsImpl
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
index f70ca65..5ba295c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractOplogDiskRegionEntry.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Abstract implementation class of RegionEntry interface. This is adds Disk support behavior
@@ -65,7 +65,7 @@ public abstract class AbstractOplogDiskRegionEntry extends AbstractDiskRegionEnt
 
   @Override
   public boolean fillInValue(InternalRegion region, Entry entry, ByteArrayDataInput in,
-      DistributionManager mgr, final Version version) {
+      DistributionManager mgr, final KnownVersion version) {
     return Helper.fillInValue(this, entry, region.getDiskRegion(), mgr, in, region, version);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
index 2e1da25..ec31aeb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/AbstractRegionEntry.java
@@ -78,7 +78,7 @@ 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.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.internal.util.Versionable;
 import org.apache.geode.internal.util.concurrent.CustomEntryConcurrentHashMap;
@@ -329,7 +329,7 @@ public abstract class AbstractRegionEntry implements HashRegionEntry<Object, Obj
   @Override
   public boolean fillInValue(InternalRegion region,
       @Retained(ABSTRACT_REGION_ENTRY_FILL_IN_VALUE) Entry entry, ByteArrayDataInput in,
-      DistributionManager mgr, final Version version) {
+      DistributionManager mgr, final KnownVersion version) {
 
     // starting default value
     entry.setSerialized(false);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
index 7b33d65..989c65b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/entries/DiskEntry.java
@@ -59,7 +59,7 @@ 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.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -297,7 +297,7 @@ public interface DiskEntry extends RegionEntry {
      */
     static boolean fillInValue(DiskEntry de, InitialImageOperation.Entry entry, DiskRegion dr,
         DistributionManager mgr, ByteArrayDataInput in, RegionEntryContext context,
-        Version version) {
+        KnownVersion version) {
       @Retained
       @Released
       Object v = null;
@@ -1293,7 +1293,7 @@ public interface DiskEntry extends RegionEntry {
       return preparedValue;
     }
 
-    public static Object readSerializedValue(byte[] valueBytes, Version version,
+    public static Object readSerializedValue(byte[] valueBytes, KnownVersion version,
         ByteArrayDataInput in, boolean forceDeserialize, InternalCache cache) {
       if (forceDeserialize) {
         // deserialize checking for product version change
@@ -1306,7 +1306,8 @@ public interface DiskEntry extends RegionEntry {
       }
     }
 
-    public static Object readRawValue(byte[] valueBytes, Version version, ByteArrayDataInput in) {
+    public static Object readRawValue(byte[] valueBytes, KnownVersion version,
+        ByteArrayDataInput in) {
       return valueBytes;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java
index 8eca9be..9191a87 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/FunctionRemoteContext.java
@@ -26,8 +26,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.internal.cache.BucketSetHelper;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * FunctionContext for remote/target nodes
@@ -77,7 +77,7 @@ public class FunctionRemoteContext implements DataSerializable {
     }
     this.args = DataSerializer.readObject(in);
     this.filter = (HashSet) DataSerializer.readHashSet(in);
-    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(Version.GEODE_1_11_0)) {
+    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(KnownVersion.GEODE_1_11_0)) {
       this.bucketArray = DataSerializer.readIntArray(in);
     } else {
       HashSet<Integer> bucketSet = DataSerializer.readHashSet(in);
@@ -95,7 +95,8 @@ public class FunctionRemoteContext implements DataSerializable {
     }
     DataSerializer.writeObject(this.args, out);
     DataSerializer.writeHashSet((HashSet) this.filter, out);
-    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(Version.GEODE_1_11_0)) {
+    if (StaticSerialization.getVersionForDataStream(out)
+        .isNotOlderThan(KnownVersion.GEODE_1_11_0)) {
       DataSerializer.writeIntArray(this.bucketArray, out);
     } else {
       Set<Integer> bucketSet = BucketSetHelper.toSet(this.bucketArray);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java
index 586f4d9..ea06618 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/execute/PartitionedRegionFunctionResultSender.java
@@ -27,7 +27,7 @@ import org.apache.geode.internal.cache.ForceReattemptException;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.execute.metrics.FunctionStatsManager;
 import org.apache.geode.internal.cache.partitioned.PartitionedRegionFunctionStreamingMessage;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -74,7 +74,7 @@ public class PartitionedRegionFunctionResultSender implements InternalResultSend
   private BucketMovedException bme;
 
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     if (serverSender != null && serverSender.sc != null) { // is a client-server connection
       return serverSender.sc.getClientVersion();
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
index 13475df..21558b8 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/ha/HARegionQueue.java
@@ -99,8 +99,8 @@ import org.apache.geode.internal.cache.tier.sockets.Handshake;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.util.BlobHelper;
@@ -2118,7 +2118,7 @@ public class HARegionQueue implements RegionQueue {
     try {
       inputValue = BlobHelper.deserializeBlob(newValueCd.getSerializedValue(),
           Versioning
-              .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), Version.CURRENT),
+              .getKnownVersionOrDefault(sender.getVersionOrdinalObject(), KnownVersion.CURRENT),
           null);
       newValueCd = new VMCachedDeserializable(inputValue, newValueCd.getSizeInBytes());
     } catch (IOException | ClassNotFoundException e) {
@@ -3382,7 +3382,7 @@ public class HARegionQueue implements RegionQueue {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       // TODO Auto-generated method stub
       return null;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
index 94129ca..1eff2f5 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockBatch.java
@@ -31,8 +31,8 @@ import org.apache.geode.internal.cache.IdentityArrayList;
 import org.apache.geode.internal.cache.TXRegionLockRequestImpl;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Adapts multiple TXRegionLockRequests to one DLockBatch for DLock to use.
@@ -149,7 +149,7 @@ public class TXLockBatch implements DLockBatch, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
index 85121bc..454909d 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/locks/TXLockIdImpl.java
@@ -24,8 +24,8 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Identifies a group of transaction locks.
@@ -154,7 +154,7 @@ public class TXLockIdImpl implements TXLockId, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
index 1ccdd65..5532f8c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/BucketCountLoadProbe.java
@@ -23,8 +23,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A load probe which calculates the load of a pr using the just the number of buckets on a member.
@@ -68,7 +68,7 @@ public class BucketCountLoadProbe implements LoadProbe, DataSerializableFixedID
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
index 6fb1a9a..9fc2756 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchBulkEntriesMessage.java
@@ -56,8 +56,8 @@ import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -194,7 +194,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
     private HashSet<Integer> failedBucketIds;
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
@@ -240,7 +240,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
 
       HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
       Iterator<BucketRegion> mapsIterator = maps.iterator();
       BucketRegion map = null;
       Iterator it = null;
@@ -660,7 +660,7 @@ public class FetchBulkEntriesMessage extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
index a41ba14..69f1bea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessage.java
@@ -61,8 +61,8 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -178,10 +178,10 @@ public class FetchEntriesMessage extends PartitionMessage {
 
     /** The versions in which this message was modified */
     @Immutable
-    private static final Version[] dsfidVersions = null;
+    private static final KnownVersion[] dsfidVersions = null;
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return dsfidVersions;
     }
 
@@ -293,7 +293,7 @@ public class FetchEntriesMessage extends PartitionMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(receiver.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(receiver.getVersionOrdinalObject(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
index c457d3a..9655c44 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/FetchKeysMessage.java
@@ -48,8 +48,8 @@ import org.apache.geode.internal.cache.TXStateProxy;
 import org.apache.geode.internal.cache.tier.InterestType;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -215,10 +215,10 @@ public class FetchKeysMessage extends PartitionMessage {
   /**
    * Versions in which on-wire form has changed, requiring new toData/fromData methods
    */
-  public Version[] serializationVersions = null;
+  public KnownVersion[] serializationVersions = null;
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
@@ -372,7 +372,7 @@ public class FetchKeysMessage extends PartitionMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java
index bc933d6..7ab3dc2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/GetMessage.java
@@ -58,9 +58,9 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -342,7 +342,7 @@ public class GetMessage extends PartitionMessageWithDirectReply {
      */
     public VersionTag versionTag;
 
-    public transient Version remoteVersion;
+    public transient KnownVersion remoteVersion;
 
     /**
      * Empty constructor to conform to DataSerializable interface
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
index 6b9534f..826ff43 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/IndexCreationMsg.java
@@ -49,8 +49,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionException;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class IndexCreationMsg extends PartitionMessage {
@@ -357,7 +357,7 @@ public class IndexCreationMsg extends PartitionMessage {
     }
 
     for (InternalDistributedMember rec : recipients) {
-      if (rec.getVersionOrdinalObject().isOlderThan(Version.GFE_81)) {
+      if (rec.getVersionOrdinalObject().isOlderThan(KnownVersion.GFE_81)) {
         throw new UnsupportedOperationException(
             "Indexes should not be created during rolling upgrade");
       }
@@ -422,7 +422,7 @@ public class IndexCreationMsg extends PartitionMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
index aa85eb6..1fe615c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PRTombstoneMessage.java
@@ -43,9 +43,9 @@ import org.apache.geode.internal.cache.tier.sockets.ClientTombstoneMessage;
 import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessage;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.SerializationVersions;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -59,7 +59,7 @@ public class PRTombstoneMessage extends PartitionMessageWithDirectReply
   private static final Logger logger = LogService.getLogger();
 
   @Immutable
-  private static final Version[] serializationVersions = null;
+  private static final KnownVersion[] serializationVersions = null;
 
   private Set<Object> keys;
   private EventID eventID;
@@ -129,7 +129,7 @@ public class PRTombstoneMessage extends PartitionMessageWithDirectReply
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java
index af54788..d676f92 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/PartitionMessage.java
@@ -63,9 +63,9 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -541,7 +541,7 @@ public abstract class PartitionMessage extends DistributionMessage
     setBooleans(this.flags, in, context);
     this.regionId = in.readInt();
     // extra field post 9.0
-    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(Version.GFE_90)) {
+    if (StaticSerialization.getVersionForDataStream(in).isNotOlderThan(KnownVersion.GFE_90)) {
       this.isTransactionDistributed = in.readBoolean();
     }
   }
@@ -585,7 +585,7 @@ public abstract class PartitionMessage extends DistributionMessage
       context.getSerializer().writeObject(this.txMemberId, out);
     out.writeInt(this.regionId);
     // extra field post 9.0
-    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(Version.GFE_90)) {
+    if (StaticSerialization.getVersionForDataStream(out).isNotOlderThan(KnownVersion.GFE_90)) {
       out.writeBoolean(this.isTransactionDistributed);
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
index d96e573..ffdd027 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/QueryMessage.java
@@ -53,8 +53,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.Token;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class QueryMessage extends StreamingPartitionOperation.StreamingPartitionMessage {
@@ -123,7 +123,8 @@ public class QueryMessage extends StreamingPartitionOperation.StreamingPartition
       }
     }
     Object data = this.currentResultIterator.next();
-    boolean isPostGFE_8_1 = this.getSender().getVersionOrdinalObject().isNewerThan(Version.GFE_81);
+    boolean isPostGFE_8_1 =
+        this.getSender().getVersionOrdinalObject().isNewerThan(KnownVersion.GFE_81);
 
     // There is a bug in older versions of GFE such that the query node expects the structs to have
     // type as ObjectTypes only & not specific types. So the new version needs to send the
@@ -190,7 +191,8 @@ public class QueryMessage extends StreamingPartitionOperation.StreamingPartition
         logger.debug("Started executing query from remote node: {}", query.getQueryString());
       }
       isQueryTraced =
-          query.isTraced() && this.sender.getVersionOrdinalObject().isNotOlderThan(Version.GFE_81);
+          query.isTraced()
+              && this.sender.getVersionOrdinalObject().isNotOlderThan(KnownVersion.GFE_81);
 
       // Adds a query trace info object to the results list for remote queries
       PRQueryTraceInfo queryTraceInfo = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
index 6bbfd4c..aa9da20 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/SizedBasedLoadProbe.java
@@ -23,8 +23,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PartitionedRegionDataStore;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 /**
@@ -77,7 +77,7 @@ public class SizedBasedLoadProbe implements LoadProbe, DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
index 8d32211..16dd1e1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/StreamingPartitionOperation.java
@@ -47,7 +47,7 @@ import org.apache.geode.internal.cache.ForceReattemptException;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.PrimaryBucketException;
 import org.apache.geode.internal.cache.Token;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -385,7 +385,7 @@ public abstract class StreamingPartitionOperation extends StreamingOperation {
       boolean receiverCacheClosed = false;
 
       this.outStream = new HeapDataOutputStream(chunkSize, Versioning
-          .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), Version.CURRENT));
+          .getKnownVersionOrDefault(getSender().getVersionOrdinalObject(), KnownVersion.CURRENT));
 
       try {
         do {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java
index 8a0306c..fe65b8d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/BytesAndBits.java
@@ -14,7 +14,7 @@
  */
 package org.apache.geode.internal.cache.persistence;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Used to fetch a record's raw bytes and user bits.
@@ -24,7 +24,7 @@ import org.apache.geode.internal.serialization.Version;
 public class BytesAndBits {
   private final byte[] data;
   private final byte userBits;
-  private Version version;
+  private KnownVersion version;
 
   public BytesAndBits(byte[] data, byte userBits) {
     this.data = data;
@@ -39,11 +39,11 @@ public class BytesAndBits {
     return this.userBits;
   }
 
-  public void setVersion(Version v) {
+  public void setVersion(KnownVersion v) {
     this.version = v;
   }
 
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java
index 881e100..5fb5fea 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileInterpreter.java
@@ -19,7 +19,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.geode.internal.cache.DiskInitFile.DiskRegionFlag;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public interface DiskInitFileInterpreter {
 
@@ -85,5 +85,5 @@ public interface DiskInitFileInterpreter {
 
   boolean cmnRevokeDiskStoreId(PersistentMemberPattern id);
 
-  void cmnGemfireVersion(Version version);
+  void cmnGemfireVersion(KnownVersion version);
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
index 41fd9bdf..9bf801e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskInitFileParser.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.Oplog.OPLOG_TYPE;
 import org.apache.geode.internal.cache.ProxyBucketRegion;
 import org.apache.geode.internal.cache.versions.RegionVersionHolder;
 import org.apache.geode.internal.logging.log4j.LogMarker;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -65,7 +65,7 @@ public class DiskInitFileParser {
   private transient boolean gotEOF;
 
   public DiskStoreID parse() throws IOException, ClassNotFoundException {
-    Version gfversion = Version.GFE_662;
+    KnownVersion gfversion = KnownVersion.GFE_662;
     DiskStoreID result = null;
     boolean endOfFile = false;
     while (!endOfFile) {
@@ -571,7 +571,7 @@ public class DiskInitFileParser {
     }
   }
 
-  private PersistentMemberID readPMID(CountingDataInputStream dis, Version gfversion)
+  private PersistentMemberID readPMID(CountingDataInputStream dis, KnownVersion gfversion)
       throws IOException, ClassNotFoundException {
     int len = dis.readInt();
     byte[] buf = new byte[len];
@@ -579,12 +579,12 @@ public class DiskInitFileParser {
     return bytesToPMID(buf, gfversion);
   }
 
-  private PersistentMemberID bytesToPMID(byte[] bytes, Version gfversion)
+  private PersistentMemberID bytesToPMID(byte[] bytes, KnownVersion gfversion)
       throws IOException, ClassNotFoundException {
     ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
     DataInputStream dis = new DataInputStream(bais);
     PersistentMemberID result = new PersistentMemberID();
-    if (Version.GFE_70.compareTo(gfversion) > 0) {
+    if (KnownVersion.GFE_70.compareTo(gfversion) > 0) {
       result._fromData662(dis);
     } else {
       InternalDataSerializer.invokeFromData(result, dis);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java
index 202b74a..9dad9ba 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/DiskStoreID.java
@@ -22,8 +22,8 @@ import java.util.UUID;
 
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * A Unique ID for a disk store
@@ -142,7 +142,7 @@ public class DiskStoreID implements VersionSource<DiskStoreID>, Serializable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
index 10af540..06c8982 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/snapshot/SnapshotPacket.java
@@ -32,8 +32,8 @@ import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
@@ -175,7 +175,7 @@ public class SnapshotPacket implements DataSerializableFixedID {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
@@ -274,7 +274,7 @@ public class SnapshotPacket implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java
index f5f14ea..acb4e2f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ConnectionProxy.java
@@ -15,7 +15,7 @@
 package org.apache.geode.internal.cache.tier;
 
 import org.apache.geode.annotations.Immutable;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Provides the version of the client.
@@ -31,5 +31,5 @@ public interface ConnectionProxy {
    * @since GemFire 5.7
    */
   @Immutable
-  Version VERSION = Version.CURRENT;
+  KnownVersion VERSION = KnownVersion.CURRENT;
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java
index f585e00..024b747 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/ServerSideHandshake.java
@@ -21,7 +21,7 @@ import java.io.OutputStream;
 import java.security.Principal;
 
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.AuthenticationRequiredException;
 
@@ -36,7 +36,7 @@ public interface ServerSideHandshake {
 
   int getClientReadTimeout();
 
-  Version getVersion();
+  KnownVersion getVersion();
 
   Object verifyCredentials() throws AuthenticationRequiredException, AuthenticationFailedException;
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
index d1a61fb..c173466 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
@@ -94,7 +94,7 @@ import org.apache.geode.internal.logging.CoreLoggingExecutors;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsClockFactory;
 import org.apache.geode.internal.tcp.ConnectionTable;
@@ -1510,7 +1510,7 @@ public class AcceptorImpl implements Acceptor, Runnable {
 
   @Override
   public void refuseHandshake(OutputStream out, String message, byte exception) throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
     DataOutputStream dos = new DataOutputStream(hdos);
     // Write refused reply
     dos.writeByte(exception);
@@ -1522,7 +1522,7 @@ public class AcceptorImpl implements Acceptor, Runnable {
 
     // Write the server's member
     DistributedMember member = InternalDistributedSystem.getAnyInstance().getDistributedMember();
-    HeapDataOutputStream memberDos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream memberDos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(member, memberDos);
     DataSerializer.writeByteArray(memberDos.toByteArray(), dos);
     memberDos.close();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java
index b68bc94..e8ccbbc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommand.java
@@ -78,7 +78,7 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.sequencelog.EntryLogger;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.GemFireSecurityException;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -215,7 +215,7 @@ public abstract class BaseCommand implements Command {
    */
   protected boolean shouldMasqueradeForTx(Message clientMessage,
       ServerConnection serverConnection) {
-    return serverConnection.getClientVersion().isNotOlderThan(Version.GFE_66)
+    return serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_66)
         && clientMessage.getTransactionId() > TXManagerImpl.NOTX;
   }
 
@@ -901,7 +901,7 @@ public abstract class BaseCommand implements Command {
       sendRegisterInterestResponseChunk(region, riKey, new ArrayList(), true, servConn);
       return;
     }
-    if (policy.isKeysValues() && servConn.getClientVersion().isNotOlderThan(Version.GFE_80)) {
+    if (policy.isKeysValues() && servConn.getClientVersion().isNotOlderThan(KnownVersion.GFE_80)) {
       handleKeysValuesPolicy(region, riKey, interestType, serializeValues, servConn);
       return;
     }
@@ -1018,7 +1018,7 @@ public abstract class BaseCommand implements Command {
   private static boolean sendTombstonesInRIResults(ServerConnection servConn,
       InterestResultPolicy policy) {
     return policy == InterestResultPolicy.KEYS_VALUES
-        && servConn.getClientVersion().isNotOlderThan(Version.GFE_80);
+        && servConn.getClientVersion().isNotOlderThan(KnownVersion.GFE_80);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java
index 7f8d7ec..7a5cb6e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/BaseCommandQuery.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.CachedRegionHelper;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -97,7 +97,7 @@ public abstract class BaseCommandQuery extends BaseCommand {
 
     // from 7.0, set flag to indicate a remote query irrespective of the
     // object type
-    if (servConn.getClientVersion().isNotOlderThan(Version.GFE_70)) {
+    if (servConn.getClientVersion().isNotOlderThan(KnownVersion.GFE_70)) {
       ((DefaultQuery) query).setRemoteQuery(true);
     }
     // Process the query request
@@ -309,8 +309,8 @@ public abstract class BaseCommandQuery extends BaseCommand {
   }
 
   private boolean sendCqResultsWithKey(ServerConnection servConn) {
-    Version clientVersion = servConn.getClientVersion();
-    if (clientVersion.isNotOlderThan(Version.GFE_65)) {
+    KnownVersion clientVersion = servConn.getClientVersion();
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_65)) {
       return true;
     }
     return false;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
index fff2bb2..aaa7dea 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientNotifier.java
@@ -102,7 +102,7 @@ import org.apache.geode.internal.cache.tier.OverflowAttributes;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.net.SocketCloser;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.DummyStatisticsFactory;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -184,7 +184,7 @@ public class CacheClientNotifier {
     ClientProxyMembershipID clientProxyMembershipID =
         clientRegistrationMetadata.getClientProxyMembershipID();
     DataOutputStream dataOutputStream = clientRegistrationMetadata.getDataOutputStream();
-    Version clientVersion = clientRegistrationMetadata.getClientVersion();
+    KnownVersion clientVersion = clientRegistrationMetadata.getClientVersion();
 
     try {
       if (isClientPermitted(clientRegistrationMetadata, clientProxyMembershipID)) {
@@ -246,7 +246,7 @@ public class CacheClientNotifier {
     ClientProxyMembershipID clientProxyMembershipID =
         clientRegistrationMetadata.getClientProxyMembershipID();
     byte clientConflation = clientRegistrationMetadata.getClientConflation();
-    Version clientVersion = clientRegistrationMetadata.getClientVersion();
+    KnownVersion clientVersion = clientRegistrationMetadata.getClientVersion();
 
     CacheClientProxy cacheClientProxy = getClientProxy(clientProxyMembershipID);
     DistributedMember member = clientProxyMembershipID.getDistributedMember();
@@ -446,7 +446,7 @@ public class CacheClientNotifier {
   }
 
   private void handleAuthenticationException(final ClientProxyMembershipID clientProxyMembershipID,
-      final DataOutputStream dataOutputStream, final Version clientVersion,
+      final DataOutputStream dataOutputStream, final KnownVersion clientVersion,
       final GemFireSecurityException ex, final byte replyExceptionAuthenticationFailed)
       throws IOException {
     securityLogWriter.warning(
@@ -683,7 +683,7 @@ public class CacheClientNotifier {
       Object[] objects = filterClients.toArray();
       for (Object id : objects) {
         CacheClientProxy ccp = getClientProxy((ClientProxyMembershipID) id, true);
-        if (ccp != null && ccp.getVersion().isOlderThan(Version.GFE_70)) {
+        if (ccp != null && ccp.getVersion().isOlderThan(KnownVersion.GFE_70)) {
           filterClients.remove(id);
         }
       }
@@ -1864,7 +1864,7 @@ public class CacheClientNotifier {
         for (CacheClientProxy proxy : getClientProxies()) {
           logger.debug("Checking whether to ping {}", proxy);
           // Ping clients whose version is GE 6.6.2.2
-          if (proxy.getVersion().isNotOlderThan(Version.GFE_6622)) {
+          if (proxy.getVersion().isNotOlderThan(KnownVersion.GFE_6622)) {
             // Send the ping message directly to the client. Do not qo through
             // the queue. If the queue were used, the secondary connection would
             // not be pinged. Instead, pings would just build up in secondary
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
index 89d9878..c17b302 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxy.java
@@ -79,7 +79,7 @@ import org.apache.geode.internal.logging.LogWriterImpl;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AccessControl;
@@ -242,7 +242,7 @@ public class CacheClientProxy implements ClientSession {
   /**
    * The version of the client
    */
-  private Version clientVersion;
+  private KnownVersion clientVersion;
 
   /**
    * A map of region name as key and integer as its value. Basically, it stores the names of the
@@ -313,7 +313,7 @@ public class CacheClientProxy implements ClientSession {
    */
   protected CacheClientProxy(CacheClientNotifier ccn, Socket socket,
       ClientProxyMembershipID proxyID, boolean isPrimary, byte clientConflation,
-      Version clientVersion, long acceptorId, boolean notifyBySubscription,
+      KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
       SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
       throws CacheException {
     this(ccn.getCache(), ccn, socket, proxyID, isPrimary, clientConflation, clientVersion,
@@ -326,7 +326,7 @@ public class CacheClientProxy implements ClientSession {
   @VisibleForTesting
   protected CacheClientProxy(InternalCache cache, CacheClientNotifier ccn, Socket socket,
       ClientProxyMembershipID proxyID, boolean isPrimary, byte clientConflation,
-      Version clientVersion, long acceptorId, boolean notifyBySubscription,
+      KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
       SecurityService securityService, Subject subject, StatisticsClock statisticsClock,
       StatisticsFactory statisticsFactory,
       CacheClientProxyStatsFactory cacheClientProxyStatsFactory,
@@ -358,7 +358,7 @@ public class CacheClientProxy implements ClientSession {
     initializeClientAuths();
   }
 
-  Version getClientVersion() {
+  KnownVersion getClientVersion() {
     return clientVersion;
   }
 
@@ -405,7 +405,7 @@ public class CacheClientProxy implements ClientSession {
   }
 
   private void initializeTransientFields(Socket socket, ClientProxyMembershipID pid, boolean ip,
-      byte cc, Version vers) {
+      byte cc, KnownVersion vers) {
     this._socket = socket;
     this.proxyID = pid;
     this.connected = true;
@@ -1171,7 +1171,7 @@ public class CacheClientProxy implements ClientSession {
     // If the client is not 7.0.1 or greater and the key of interest is a list,
     // then create an individual message for each entry in the list since the
     // client doesn't support a ClientInterestMessageImpl containing a list.
-    if (Version.GFE_701.compareTo(this.clientVersion) > 0
+    if (KnownVersion.GFE_701.compareTo(this.clientVersion) > 0
         && message.getKeyOfInterest() instanceof List) {
       for (Iterator i = ((List) message.getKeyOfInterest()).iterator(); i.hasNext();) {
         this._messageDispatcher.enqueueMessage(
@@ -1826,7 +1826,7 @@ public class CacheClientProxy implements ClientSession {
    * @param ip whether this proxy represents the primary
    */
   protected void reinitialize(Socket socket, ClientProxyMembershipID proxyId, Cache cache,
-      boolean ip, byte cc, Version ver) {
+      boolean ip, byte cc, KnownVersion ver) {
     // Re-initialize transient fields
     initializeTransientFields(socket, proxyId, ip, cc, ver);
     getCacheClientNotifier().getAcceptorStats().incCurrentQueueConnections();
@@ -1874,7 +1874,7 @@ public class CacheClientProxy implements ClientSession {
     return this._messageDispatcher._messageQueue.getRegion();
   }
 
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.clientVersion;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java
index ae26aa7..6a42352 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactory.java
@@ -26,7 +26,7 @@ import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.cache.CacheException;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 
 /**
@@ -75,7 +75,7 @@ public class CacheClientProxyFactory {
 
   public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
       ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-      Version clientVersion, long acceptorId, boolean notifyBySubscription,
+      KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
       SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
       throws CacheException {
     return internalFactory.create(notifier, socket, proxyId, isPrimary, clientConflation,
@@ -87,7 +87,7 @@ public class CacheClientProxyFactory {
   public interface InternalCacheClientProxyFactory {
     CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
index eed2107..3a14feb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheClientUpdater.java
@@ -83,7 +83,7 @@ import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.sequencelog.EntryLogger;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsTypeFactoryImpl;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -562,7 +562,7 @@ public class CacheClientUpdater extends LoggingThread implements ClientUpdater,
    * the server.
    */
   private Message initializeMessage() {
-    Message message = new Message(2, Version.CURRENT);
+    Message message = new Message(2, KnownVersion.CURRENT);
     message.setComms(this.socket, this.in, this.out, this.commBuffer, this.stats);
     return message;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java
index 9cf4aec..973b4a6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CacheServerHelper.java
@@ -27,7 +27,7 @@ import java.util.zip.GZIPOutputStream;
 import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.CacheServerImpl;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 
 /**
@@ -68,7 +68,7 @@ public class CacheServerHelper {
     return unzipObject ? unzip(blob) : BlobHelper.deserializeBlob(blob);
   }
 
-  public static Object deserialize(byte[] blob, Version version, boolean unzipObject)
+  public static Object deserialize(byte[] blob, KnownVersion version, boolean unzipObject)
       throws IOException, ClassNotFoundException {
     return unzipObject ? unzip(blob) : BlobHelper.deserializeBlob(blob, version, null);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java
index a1250a9..0be09bf 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ChunkedMessage.java
@@ -22,7 +22,7 @@ import java.nio.ByteBuffer;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.internal.cache.tier.MessageType;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -107,7 +107,7 @@ public class ChunkedMessage extends Message {
    *
    * @param numberOfParts The number of parts to create
    */
-  public ChunkedMessage(int numberOfParts, Version version) {
+  public ChunkedMessage(int numberOfParts, KnownVersion version) {
     super(numberOfParts, version);
   }
 
@@ -152,7 +152,7 @@ public class ChunkedMessage extends Message {
   public void setLastChunkAndNumParts(boolean lastChunk, int numParts) {
     setLastChunk(lastChunk);
     if (this.serverConnection != null
-        && this.serverConnection.getClientVersion().isNotOlderThan(Version.GFE_65)) {
+        && this.serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_65)) {
       // we us e three bits for number of parts in last chunk byte
       // we us e three bits for number of parts in last chunk byte
       byte localLastChunk = (byte) (numParts << 5);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java
index 66c84567..ea25d31 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientDataSerializerMessage.java
@@ -25,8 +25,8 @@ import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
   private byte[][] serializedDataSerializer;
@@ -65,9 +65,9 @@ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
    */
   @Override
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    if (proxy.getVersion().isNotOlderThan(Version.GFE_6516)) {
+    if (proxy.getVersion().isNotOlderThan(KnownVersion.GFE_6516)) {
       return getGFE6516Message(proxy.getVersion());
-    } else if (proxy.getVersion().isNotOlderThan(Version.GFE_57)) {
+    } else if (proxy.getVersion().isNotOlderThan(KnownVersion.GFE_57)) {
       return getGFEMessage(proxy.getVersion());
     } else {
       throw new IOException("Unsupported client version for server-to-client message creation: "
@@ -75,7 +75,7 @@ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
     }
   }
 
-  protected Message getGFEMessage(Version clientVersion) {
+  protected Message getGFEMessage(KnownVersion clientVersion) {
     Message message = null;
     int dataSerializerLength = this.serializedDataSerializer.length;
     message = new Message(dataSerializerLength + 1, clientVersion); // one for eventID
@@ -90,7 +90,7 @@ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl {
     return message;
   }
 
-  protected Message getGFE6516Message(Version clientVersion) {
+  protected Message getGFE6516Message(KnownVersion clientVersion) {
     Message message = null;
 
     // The format:
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java
index 2405ff5..29dd180 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientHealthMonitor.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.TXManagerImpl;
 import org.apache.geode.internal.cache.tier.Acceptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.lang.JavaWorkarounds;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -129,7 +129,8 @@ public class ClientHealthMonitor {
    *
    * @see CacheClientNotifier#addClientProxy(CacheClientProxy)
    */
-  AtomicIntegerArray numOfClientsPerVersion = new AtomicIntegerArray(Version.HIGHEST_VERSION + 1);
+  AtomicIntegerArray numOfClientsPerVersion =
+      new AtomicIntegerArray(KnownVersion.HIGHEST_VERSION + 1);
 
   public long getMonitorInterval() {
     return monitorInterval;
@@ -647,7 +648,7 @@ public class ClientHealthMonitor {
     return cleanupTable;
   }
 
-  private int getNumberOfClientsAtOrAboveVersion(Version version) {
+  private int getNumberOfClientsAtOrAboveVersion(KnownVersion version) {
     int number = 0;
     for (int i = version.ordinal(); i < numOfClientsPerVersion.length(); i++) {
       number += numOfClientsPerVersion.get(i);
@@ -656,7 +657,7 @@ public class ClientHealthMonitor {
   }
 
   public boolean hasDeltaClients() {
-    return getNumberOfClientsAtOrAboveVersion(Version.GFE_61) > 0;
+    return getNumberOfClientsAtOrAboveVersion(KnownVersion.GFE_61) > 0;
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java
index 8557f56..54a9f0d 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInstantiatorMessage.java
@@ -26,8 +26,8 @@ import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientInstantiatorMessage</code> represents a message that is to be sent to the
@@ -106,9 +106,9 @@ public class ClientInstantiatorMessage extends ClientUpdateMessageImpl {
 
   @Override
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage(proxy.getProxyID(), null, clientVersion);
     } else {
       throw new IOException(
@@ -120,7 +120,7 @@ public class ClientInstantiatorMessage extends ClientUpdateMessageImpl {
 
   @Override
   protected Message getGFEMessage(ClientProxyMembershipID proxy, byte[] latestValue,
-      Version clientVersion) throws IOException {
+      KnownVersion clientVersion) throws IOException {
     Message message = null;
     int instantiatorsLength = this.serializedInstantiators.length;
     message = new Message(instantiatorsLength + 1, clientVersion); // one for eventID
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
index 02c9d08..028f536 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientInterestMessageImpl.java
@@ -29,8 +29,8 @@ import org.apache.geode.internal.cache.tier.InterestType;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientInterestMessageImpl</code> represents an update to the a client's interest
@@ -135,9 +135,9 @@ public class ClientInterestMessageImpl implements ClientMessage {
 
   @Override
   public Message getMessage(CacheClientProxy proxy, boolean notify) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage();
     } else {
       throw new IOException(
@@ -148,7 +148,7 @@ public class ClientInterestMessageImpl implements ClientMessage {
   }
 
   protected Message getGFEMessage() throws IOException {
-    Message message = new Message(isRegister() ? 7 : 6, Version.CURRENT);
+    Message message = new Message(isRegister() ? 7 : 6, KnownVersion.CURRENT);
     message.setTransactionId(0);
 
     // Set the message type
@@ -304,7 +304,7 @@ public class ClientInterestMessageImpl implements ClientMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java
index 03f9ba4..70717bf 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientMarkerMessageImpl.java
@@ -23,8 +23,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientMarkerMessageImpl</code> is a marker message that is placed in the
@@ -59,9 +59,9 @@ public class ClientMarkerMessageImpl implements ClientMessage {
 
   @Override
   public Message getMessage(CacheClientProxy proxy, boolean notify) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage();
     } else {
       throw new IOException(
@@ -72,7 +72,7 @@ public class ClientMarkerMessageImpl implements ClientMessage {
   }
 
   protected Message getGFEMessage() throws IOException {
-    Message message = new Message(1, Version.CURRENT);
+    Message message = new Message(1, KnownVersion.CURRENT);
     message.setMessageType(MessageType.CLIENT_MARKER);
     message.setTransactionId(0);
     message.addObjPart(this.eventId);
@@ -131,7 +131,7 @@ public class ClientMarkerMessageImpl implements ClientMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java
index 9d42deb..cc74f0a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientPingMessageImpl.java
@@ -22,8 +22,8 @@ import java.io.IOException;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>ClientPingMessageImpl</code> is a ping message that is periodically placed in the
@@ -43,9 +43,9 @@ public class ClientPingMessageImpl implements ClientMessage {
 
   @Override
   public Message getMessage(CacheClientProxy proxy, boolean notify) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     Message message = null;
-    if (clientVersion.isNotOlderThan(Version.GFE_6622)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_6622)) {
       message = getGFEMessage();
     } else {
       throw new IOException(
@@ -56,7 +56,7 @@ public class ClientPingMessageImpl implements ClientMessage {
   }
 
   protected Message getGFEMessage() throws IOException {
-    Message message = new Message(0, Version.CURRENT);
+    Message message = new Message(0, KnownVersion.CURRENT);
     message.setMessageType(MessageType.SERVER_TO_CLIENT_PING);
     message.setTransactionId(0);
     return message;
@@ -110,7 +110,7 @@ public class ClientPingMessageImpl implements ClientMessage {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
index 17fd036..0fa67e4 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientProxyMembershipID.java
@@ -41,8 +41,8 @@ import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -194,7 +194,7 @@ public class ClientProxyMembershipID
             ((InternalDistributedMember) systemMemberId).setDurableId(attributes.getId());
           }
         }
-        HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
         DataSerializer.writeObject(systemMemberId, hdos);
         client_side_identity = hdos.toByteArray();
       } catch (IOException ioe) {
@@ -349,11 +349,11 @@ public class ClientProxyMembershipID
     // {toString(); this.transientPort = ((InternalDistributedMember)this.memberId).getPort();}
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return Versioning
         .getKnownVersionOrDefault(
             ((InternalDistributedMember) getDistributedMember()).getVersionOrdinalObject(),
-            Version.CURRENT);
+            KnownVersion.CURRENT);
   }
 
   public String getDSMembership() {
@@ -374,7 +374,7 @@ public class ClientProxyMembershipID
   private String getMemberIdAsString() {
     String memberIdAsString = null;
     InternalDistributedMember idm = (InternalDistributedMember) getDistributedMember();
-    if (getClientVersion().isOlderThan(Version.GFE_90)) {
+    if (getClientVersion().isOlderThan(KnownVersion.GFE_90)) {
       memberIdAsString = idm.toString();
     } else {
       StringBuilder sb = new StringBuilder();
@@ -493,7 +493,7 @@ public class ClientProxyMembershipID
     // new Exception("stack trace")
     // ));
     // }
-    HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
     try {
       DataSerializer.writeObject(idm, hdos);
     } catch (IOException e) {
@@ -607,7 +607,7 @@ public class ClientProxyMembershipID
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
index 4a051d3..b50be26 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientRegistrationMetadata.java
@@ -29,7 +29,7 @@ import org.apache.geode.cache.UnsupportedVersionException;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.Command;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.Versioning;
@@ -44,7 +44,7 @@ class ClientRegistrationMetadata {
   private ClientProxyMembershipID clientProxyMembershipID;
   private byte clientConflation;
   private Properties clientCredentials;
-  private Version clientVersion;
+  private KnownVersion clientVersion;
   private DataInputStream dataInputStream;
   private DataOutputStream dataOutputStream;
 
@@ -106,7 +106,7 @@ class ClientRegistrationMetadata {
     return clientCredentials;
   }
 
-  Version getClientVersion() {
+  KnownVersion getClientVersion() {
     return clientVersion;
   }
 
@@ -124,7 +124,7 @@ class ClientRegistrationMetadata {
 
     final String message;
     if (clientVersion == null) {
-      message = Version.unsupportedVersionMessage(clientVersionOrdinal);
+      message = KnownVersion.unsupportedVersionMessage(clientVersionOrdinal);
     } else {
       final Map<Integer, Command> commands = CommandInitializer.getCommands(clientVersion);
       if (commands == null) {
@@ -161,15 +161,15 @@ class ClientRegistrationMetadata {
   }
 
   private boolean doesClientSupportExtractOverrides() {
-    return clientVersion.isNotOlderThan(Version.GFE_603);
+    return clientVersion.isNotOlderThan(KnownVersion.GFE_603);
   }
 
-  private boolean oldClientRequiresVersionedStreams(final Version clientVersion) {
-    return Version.CURRENT.compareTo(clientVersion) > 0;
+  private boolean oldClientRequiresVersionedStreams(final KnownVersion clientVersion) {
+    return KnownVersion.CURRENT.compareTo(clientVersion) > 0;
   }
 
-  private boolean isVersionOlderThan57(final Version clientVersion) {
-    return Version.GFE_57.compareTo(clientVersion) > 0;
+  private boolean isVersionOlderThan57(final KnownVersion clientVersion) {
+    return KnownVersion.GFE_57.compareTo(clientVersion) > 0;
   }
 
   private void getAndValidateClientProxyMembershipID()
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java
index c76409e..c6685a7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientTombstoneMessage.java
@@ -27,8 +27,8 @@ import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class ClientTombstoneMessage extends ClientUpdateMessageImpl {
 
@@ -76,14 +76,14 @@ public class ClientTombstoneMessage extends ClientUpdateMessageImpl {
    */
   @Override
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    if (Version.GFE_70.compareTo(proxy.getVersion()) <= 0) {
+    if (KnownVersion.GFE_70.compareTo(proxy.getVersion()) <= 0) {
       return getGFE70Message(proxy.getVersion());
     } else {
       return null;
     }
   }
 
-  protected Message getGFE70Message(Version clientVersion) {
+  protected Message getGFE70Message(KnownVersion clientVersion) {
     Message message = null;
 
     // The format:
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
index 5042d45..7ef848c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ClientUpdateMessageImpl.java
@@ -46,8 +46,8 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -353,7 +353,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
    */
 
   protected Message getMessage(CacheClientProxy proxy, byte[] latestValue) throws IOException {
-    Version clientVersion = proxy.getVersion();
+    KnownVersion clientVersion = proxy.getVersion();
     byte[] serializedValue = null;
     Message message;
     boolean conflation;
@@ -374,13 +374,13 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
         this._value = serializedValue = CacheServerHelper.serialize(latestValue);
       }
     }
-    if (clientVersion.isNotOlderThan(Version.GFE_70)) {
+    if (clientVersion.isNotOlderThan(KnownVersion.GFE_70)) {
       message = getGFE70Message(proxy, serializedValue, conflation, clientVersion);
-    } else if (clientVersion.isNotOlderThan(Version.GFE_65)) {
+    } else if (clientVersion.isNotOlderThan(KnownVersion.GFE_65)) {
       message = getGFE65Message(proxy, serializedValue, conflation, clientVersion);
-    } else if (clientVersion.isNotOlderThan(Version.GFE_61)) {
+    } else if (clientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
       message = getGFE61Message(proxy, serializedValue, conflation, clientVersion);
-    } else if (clientVersion.isNotOlderThan(Version.GFE_57)) {
+    } else if (clientVersion.isNotOlderThan(KnownVersion.GFE_57)) {
       message = getGFEMessage(proxy.getProxyID(), latestValue, clientVersion);
     } else {
       throw new IOException(
@@ -391,7 +391,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   protected Message getGFEMessage(ClientProxyMembershipID proxyId, byte[] latestValue,
-      Version clientVersion) throws IOException {
+      KnownVersion clientVersion) throws IOException {
     Message message;
     // Add CQ info.
     int cqMsgParts = 0;
@@ -499,7 +499,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   private Message getGFE61Message(CacheClientProxy proxy, byte[] latestValue, boolean conflation,
-      Version clientVersion) throws IOException {
+      KnownVersion clientVersion) throws IOException {
     Message message;
     ClientProxyMembershipID proxyId = proxy.getProxyID();
 
@@ -663,7 +663,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   private Message getGFE65Message(CacheClientProxy proxy, byte[] p_latestValue,
-      boolean conflation, Version clientVersion) throws IOException {
+      boolean conflation, KnownVersion clientVersion) throws IOException {
     byte[] latestValue = p_latestValue;
     Message message;
     ClientProxyMembershipID proxyId = proxy.getProxyID();
@@ -824,7 +824,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
 
 
   private Message getGFE70Message(CacheClientProxy proxy, byte[] p_latestValue,
-      boolean conflation, Version clientVersion) throws IOException {
+      boolean conflation, KnownVersion clientVersion) throws IOException {
     byte[] latestValue = p_latestValue;
 
     Message message;
@@ -970,10 +970,10 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   private static final ThreadLocal<Map<Integer, Message>> CACHED_MESSAGES =
       ThreadLocal.withInitial(HashMap::new);
 
-  private Message getMessage(int numParts, Version clientVersion) {
+  private Message getMessage(int numParts, KnownVersion clientVersion) {
     Message m = CACHED_MESSAGES.get().get(numParts);
     if (m == null) {
-      m = new Message(numParts, Version.CURRENT);
+      m = new Message(numParts, KnownVersion.CURRENT);
       CACHED_MESSAGES.get().put(numParts, m);
     }
     m.clearParts();
@@ -1396,7 +1396,7 @@ public class ClientUpdateMessageImpl implements ClientUpdateMessage, Sizeable, N
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java
index 2376624..cbce1b2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializer.java
@@ -103,7 +103,7 @@ import org.apache.geode.internal.cache.tier.sockets.command.TXSynchronizationCom
 import org.apache.geode.internal.cache.tier.sockets.command.UnregisterInterest;
 import org.apache.geode.internal.cache.tier.sockets.command.UnregisterInterestList;
 import org.apache.geode.internal.cache.tier.sockets.command.UpdateClientNotification;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * A <code>CommandInitializer</code> maintains version specific commands map.
@@ -114,7 +114,7 @@ import org.apache.geode.internal.serialization.Version;
 public class CommandInitializer {
 
   @Immutable
-  static final Map<Version, Map<Integer, Command>> ALL_COMMANDS = initializeAllCommands();
+  static final Map<KnownVersion, Map<Integer, Command>> ALL_COMMANDS = initializeAllCommands();
 
   /**
    * Register a new command with the system.
@@ -125,12 +125,13 @@ public class CommandInitializer {
    *        earliest version for which this command class is valid (starting with GFE_57). The value
    *        is the command object for clients starting with that version.
    */
-  public static void registerCommand(int messageType, Map<Version, Command> versionToNewCommand) {
+  public static void registerCommand(int messageType,
+      Map<KnownVersion, Command> versionToNewCommand) {
     Command command = null;
     // Iterate through all the gemfire versions, and
     // add a command to the map for that version
-    for (Map.Entry<Version, Map<Integer, Command>> entry : ALL_COMMANDS.entrySet()) {
-      Version version = entry.getKey();
+    for (Map.Entry<KnownVersion, Map<Integer, Command>> entry : ALL_COMMANDS.entrySet()) {
+      KnownVersion version = entry.getKey();
 
       // Get the current set of commands for this version.
       Map<Integer, Command> commandMap = entry.getValue();
@@ -154,15 +155,15 @@ public class CommandInitializer {
     }
   }
 
-  private static Map<Version, Map<Integer, Command>> initializeAllCommands() {
-    final LinkedHashMap<Version, Map<Integer, Command>> allCommands =
-        new LinkedHashMap<Version, Map<Integer, Command>>();
+  private static Map<KnownVersion, Map<Integer, Command>> initializeAllCommands() {
+    final LinkedHashMap<KnownVersion, Map<Integer, Command>> allCommands =
+        new LinkedHashMap<KnownVersion, Map<Integer, Command>>();
 
-    allCommands.put(Version.GFE_56, new HashMap<>());
+    allCommands.put(KnownVersion.GFE_56, new HashMap<>());
 
     // Initialize the GFE 5.7 commands
     Map<Integer, Command> gfe57Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_57, gfe57Commands);
+    allCommands.put(KnownVersion.GFE_57, gfe57Commands);
     gfe57Commands.put(MessageType.PING, Ping.getCommand());
     gfe57Commands.put(MessageType.REQUEST, Request.getCommand());
     gfe57Commands.put(MessageType.PUT, Put.getCommand());
@@ -193,20 +194,20 @@ public class CommandInitializer {
 
     // Initialize the GFE 5.8 commands example
     Map<Integer, Command> gfe58Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_58, gfe58Commands);
-    gfe58Commands.putAll(allCommands.get(Version.GFE_57));
+    allCommands.put(KnownVersion.GFE_58, gfe58Commands);
+    gfe58Commands.putAll(allCommands.get(KnownVersion.GFE_57));
     gfe58Commands.put(MessageType.EXECUTE_REGION_FUNCTION, ExecuteRegionFunction.getCommand());
     gfe58Commands.put(MessageType.EXECUTE_FUNCTION, ExecuteFunction.getCommand());
 
     // Initialize the GFE 6.0.3 commands map
     Map<Integer, Command> gfe603Commands =
-        new HashMap<Integer, Command>(allCommands.get(Version.GFE_58));
-    allCommands.put(Version.GFE_603, gfe603Commands);
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GFE_58));
+    allCommands.put(KnownVersion.GFE_603, gfe603Commands);
 
     // Initialize the GFE 6.1 commands
     Map<Integer, Command> gfe61Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_61, gfe61Commands);
-    gfe61Commands.putAll(allCommands.get(Version.GFE_603));
+    allCommands.put(KnownVersion.GFE_61, gfe61Commands);
+    gfe61Commands.putAll(allCommands.get(KnownVersion.GFE_603));
     gfe61Commands.put(MessageType.REGISTER_INTEREST, RegisterInterest61.getCommand());
     gfe61Commands.put(MessageType.REGISTER_INTEREST_LIST, RegisterInterestList61.getCommand());
     gfe61Commands.put(MessageType.REQUEST_EVENT_VALUE, RequestEventValue.getCommand());
@@ -215,8 +216,8 @@ public class CommandInitializer {
 
     // Initialize the GFE 6.5 commands
     Map<Integer, Command> gfe65Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_65, gfe65Commands);
-    gfe65Commands.putAll(allCommands.get(Version.GFE_61));
+    allCommands.put(KnownVersion.GFE_65, gfe65Commands);
+    gfe65Commands.putAll(allCommands.get(KnownVersion.GFE_61));
     gfe65Commands.put(MessageType.DESTROY, Destroy65.getCommand());
     gfe65Commands.put(MessageType.PUT, Put65.getCommand());
     gfe65Commands.put(MessageType.EXECUTE_REGION_FUNCTION, ExecuteRegionFunction65.getCommand());
@@ -231,22 +232,22 @@ public class CommandInitializer {
 
     // Initialize the GFE 6.5.1 commands
     Map<Integer, Command> gfe651Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_651, gfe651Commands);
-    gfe651Commands.putAll(allCommands.get(Version.GFE_65));
+    allCommands.put(KnownVersion.GFE_651, gfe651Commands);
+    gfe651Commands.putAll(allCommands.get(KnownVersion.GFE_65));
     gfe651Commands.put(MessageType.QUERY_WITH_PARAMETERS, Query651.getCommand());
 
     // Initialize the GFE 6.5.1.6 commands
     Map<Integer, Command> gfe6516Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_6516, gfe6516Commands);
-    gfe6516Commands.putAll(allCommands.get(Version.GFE_651));
+    allCommands.put(KnownVersion.GFE_6516, gfe6516Commands);
+    gfe6516Commands.putAll(allCommands.get(KnownVersion.GFE_651));
     gfe6516Commands.put(MessageType.GET_ALL, GetAll651.getCommand());
     gfe6516Commands.put(MessageType.GET_CLIENT_PR_METADATA,
         GetClientPRMetadataCommand66.getCommand());
 
     // Initialize the GFE 6.6 commands
     Map<Integer, Command> gfe66Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_66, gfe66Commands);
-    gfe66Commands.putAll(allCommands.get(Version.GFE_6516));
+    allCommands.put(KnownVersion.GFE_66, gfe66Commands);
+    gfe66Commands.putAll(allCommands.get(KnownVersion.GFE_6516));
     gfe66Commands.put(MessageType.ADD_PDX_TYPE, AddPdxType.getCommand());
     gfe66Commands.put(MessageType.GET_PDX_ID_FOR_TYPE, GetPDXIdForType.getCommand());
     gfe66Commands.put(MessageType.GET_PDX_TYPE_BY_ID, GetPDXTypeById.getCommand());
@@ -269,20 +270,20 @@ public class CommandInitializer {
 
     // Initialize the GFE 6.6.2 commands
     Map<Integer, Command> gfe662Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_662, gfe662Commands);
-    gfe662Commands.putAll(allCommands.get(Version.GFE_66));
+    allCommands.put(KnownVersion.GFE_662, gfe662Commands);
+    gfe662Commands.putAll(allCommands.get(KnownVersion.GFE_66));
     gfe662Commands.put(MessageType.ADD_PDX_ENUM, AddPdxEnum.getCommand());
     gfe662Commands.put(MessageType.GET_PDX_ID_FOR_ENUM, GetPDXIdForEnum.getCommand());
     gfe662Commands.put(MessageType.GET_PDX_ENUM_BY_ID, GetPDXEnumById.getCommand());
 
     // Initialize the GFE 6.6.2.2 commands (same commands as the GFE 6.6.2 commands)
     // The SERVER_TO_CLIENT_PING message was added, but it doesn't need to be registered here
-    allCommands.put(Version.GFE_6622, gfe662Commands);
+    allCommands.put(KnownVersion.GFE_6622, gfe662Commands);
 
     // Initialize the GFE 70 commands
     Map<Integer, Command> gfe70Commands = new HashMap<Integer, Command>();
-    allCommands.put(Version.GFE_70, gfe70Commands);
-    gfe70Commands.putAll(allCommands.get(Version.GFE_662));
+    allCommands.put(KnownVersion.GFE_70, gfe70Commands);
+    gfe70Commands.putAll(allCommands.get(KnownVersion.GFE_662));
     gfe70Commands.remove(MessageType.GET_ALL_FOR_RI);
     gfe70Commands.put(MessageType.REQUEST, Get70.getCommand());
     gfe70Commands.put(MessageType.GET_ENTRY, GetEntry70.getCommand());
@@ -295,56 +296,57 @@ public class CommandInitializer {
     gfe70Commands.put(MessageType.GET_PDX_ENUMS, GetPdxEnums70.getCommand());
     gfe70Commands.put(MessageType.EXECUTE_FUNCTION, ExecuteFunction70.getCommand());
 
-    allCommands.put(Version.GFE_701, gfe70Commands);
-    allCommands.put(Version.GFE_7099, gfe70Commands);
-    allCommands.put(Version.GFE_71, gfe70Commands);
+    allCommands.put(KnownVersion.GFE_701, gfe70Commands);
+    allCommands.put(KnownVersion.GFE_7099, gfe70Commands);
+    allCommands.put(KnownVersion.GFE_71, gfe70Commands);
 
     Map<Integer, Command> gfe80Commands =
-        new HashMap<Integer, Command>(allCommands.get(Version.GFE_71));
-    allCommands.put(Version.GFE_80, gfe80Commands);
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GFE_71));
+    allCommands.put(KnownVersion.GFE_80, gfe80Commands);
     // PutAll is changed to chunk responses back to the client
     gfe80Commands.put(MessageType.PUTALL, PutAll80.getCommand());
 
-    allCommands.put(Version.GFE_8009, gfe80Commands);
+    allCommands.put(KnownVersion.GFE_8009, gfe80Commands);
 
     Map<Integer, Command> gfe81Commands = new HashMap<Integer, Command>(gfe80Commands);
     gfe81Commands.put(MessageType.GET_ALL_WITH_CALLBACK, GetAllWithCallback.getCommand());
     gfe81Commands.put(MessageType.PUT_ALL_WITH_CALLBACK, PutAllWithCallback.getCommand());
     gfe81Commands.put(MessageType.REMOVE_ALL, RemoveAll.getCommand());
 
-    allCommands.put(Version.GFE_81, gfe81Commands);
-    allCommands.put(Version.GFE_82, gfe81Commands);
+    allCommands.put(KnownVersion.GFE_81, gfe81Commands);
+    allCommands.put(KnownVersion.GFE_82, gfe81Commands);
 
-    Map<Integer, Command> commands = new HashMap<Integer, Command>(allCommands.get(Version.GFE_82));
-    allCommands.put(Version.GFE_90, commands);
+    Map<Integer, Command> commands =
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GFE_82));
+    allCommands.put(KnownVersion.GFE_90, commands);
     commands.put(MessageType.QUERY_WITH_PARAMETERS, QueryWithParametersGeode10.getCommand());
     commands.put(MessageType.QUERY, QueryGeode10.getCommand());
 
-    allCommands.put(Version.GEODE_1_1_0, commands);
-    allCommands.put(Version.GEODE_1_1_1, commands);
-    allCommands.put(Version.GEODE_1_2_0, commands);
-    allCommands.put(Version.GEODE_1_3_0, commands);
-    allCommands.put(Version.GEODE_1_4_0, commands);
-    allCommands.put(Version.GEODE_1_5_0, commands);
-    allCommands.put(Version.GEODE_1_6_0, commands);
-    allCommands.put(Version.GEODE_1_7_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_1_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_1_1, commands);
+    allCommands.put(KnownVersion.GEODE_1_2_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_3_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_4_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_5_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_6_0, commands);
+    allCommands.put(KnownVersion.GEODE_1_7_0, commands);
 
     Map<Integer, Command> geode18Commands =
-        new HashMap<Integer, Command>(allCommands.get(Version.GEODE_1_7_0));
+        new HashMap<Integer, Command>(allCommands.get(KnownVersion.GEODE_1_7_0));
     geode18Commands.put(MessageType.EXECUTE_REGION_FUNCTION,
         ExecuteRegionFunctionGeode18.getCommand());
-    allCommands.put(Version.GEODE_1_8_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_9_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_10_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_11_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_12_0, geode18Commands);
-    allCommands.put(Version.GEODE_1_13_0, geode18Commands);
-
-    allCommands.put(Version.GEODE_1_14_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_8_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_9_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_10_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_11_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_12_0, geode18Commands);
+    allCommands.put(KnownVersion.GEODE_1_13_0, geode18Commands);
+
+    allCommands.put(KnownVersion.GEODE_1_14_0, geode18Commands);
     return Collections.unmodifiableMap(allCommands);
   }
 
-  public static Map<Integer, Command> getCommands(Version version) {
+  public static Map<Integer, Command> getCommands(KnownVersion version) {
     return ALL_COMMANDS.get(version);
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
index 00b6495..73a345c 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/EncryptorImpl.java
@@ -69,7 +69,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationFailedException;
 import org.apache.geode.security.GemFireSecurityException;
 
@@ -413,7 +413,7 @@ public class EncryptorImpl implements Encryptor {
         // PublicKey pubKey = keyFact.generatePublic(x509KeySpec);
         this.clientPublicKey = keyFact.generatePublic(x509KeySpec);
 
-        try (HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT)) {
+        try (HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT)) {
           // Add the challenge string
           DataSerializer.writeByteArray(serverChallenge, hdos);
           // byte[] encBytes = encrypt.doFinal(hdos.toByteArray());
@@ -498,7 +498,7 @@ public class EncryptorImpl implements Encryptor {
 
 
 
-        HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+        HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
         try {
           DataSerializer.writeProperties(p_credentials, hdos);
           // Also add the challenge string
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
index 9d0f95c..9ac47e9 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/HAEventWrapper.java
@@ -35,8 +35,8 @@ import org.apache.geode.internal.cache.tier.sockets.ClientUpdateMessageImpl.CqNa
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.Sizeable;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -393,7 +393,7 @@ public class HAEventWrapper implements Conflatable, DataSerializableFixedID, Siz
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java
index baa9283..9755475 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Handshake.java
@@ -41,7 +41,7 @@ import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.security.CallbackInstantiator;
 import org.apache.geode.internal.security.Credentials;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AuthInitialize;
 import org.apache.geode.security.AuthenticationFailedException;
@@ -75,7 +75,7 @@ public abstract class Handshake {
    * @since GemFire 5.7
    */
   @MutableForTesting
-  protected static Version currentClientVersion = ConnectionProxy.VERSION;
+  protected static KnownVersion currentClientVersion = ConnectionProxy.VERSION;
 
   protected SecurityService securityService;
 
@@ -223,7 +223,7 @@ public abstract class Handshake {
   public void writeCredentials(DataOutputStream dos, DataInputStream dis, Properties p_credentials,
       boolean isNotification, DistributedMember member)
       throws IOException, GemFireSecurityException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(32, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(32, KnownVersion.CURRENT);
     try {
       writeCredentials(dos, dis, p_credentials, isNotification, member, hdos);
     } finally {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
index 66a134f..ff4f885 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/InterestResultPolicyImpl.java
@@ -23,8 +23,8 @@ import java.io.IOException;
 import org.apache.geode.cache.InterestResultPolicy;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Used to make InterestResultPolicy implement DataSerializableFixedID
@@ -60,7 +60,7 @@ public class InterestResultPolicyImpl extends InterestResultPolicy
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java
index 3d73565..4a617d1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Message.java
@@ -37,7 +37,7 @@ import org.apache.geode.internal.cache.TXManagerImpl;
 import org.apache.geode.internal.cache.tier.MessageType;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
@@ -169,12 +169,12 @@ public class Message {
   Part securePart = null;
   private boolean isMetaRegion = false;
 
-  private Version version;
+  private KnownVersion version;
 
   /**
    * Creates a new message with the given number of parts
    */
-  public Message(int numberOfParts, Version destVersion) {
+  public Message(int numberOfParts, KnownVersion destVersion) {
     this.version = destVersion;
     Assert.assertTrue(destVersion != null, "Attempt to create an unversioned message");
     this.partsList = new Part[numberOfParts];
@@ -202,7 +202,7 @@ public class Message {
     this.messageType = msgType;
   }
 
-  public void setVersion(Version clientVersion) {
+  public void setVersion(KnownVersion clientVersion) {
     this.version = clientVersion;
   }
 
@@ -371,8 +371,8 @@ public class Message {
   }
 
   private void serializeAndAddPartNoCopying(Object o) {
-    Version v = this.version;
-    if (this.version.equals(Version.CURRENT)) {
+    KnownVersion v = this.version;
+    if (this.version.equals(KnownVersion.CURRENT)) {
       v = null;
     }
 
@@ -395,8 +395,8 @@ public class Message {
       throw new UnsupportedOperationException("zipValues no longer supported");
     }
 
-    Version v = this.version;
-    if (this.version.equals(Version.CURRENT)) {
+    KnownVersion v = this.version;
+    if (this.version.equals(KnownVersion.CURRENT)) {
       v = null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java
index 91b1496..0b75c86 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/MessageDispatcher.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.ha.HARegionQueueAttributes;
 import org.apache.geode.internal.cache.ha.HARegionQueueStats;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -137,7 +137,7 @@ public class MessageDispatcher extends LoggingThread {
       ((HAContainerWrapper) proxy._cacheClientNotifier.getHaContainer())
           .putProxy(HARegionQueue.createRegionName(getProxy().getHARegionName()), getProxy());
       boolean createDurableQueue = proxy.proxyID.isDurable();
-      boolean canHandleDelta = (proxy.getClientVersion().isNotOlderThan(Version.GFE_61))
+      boolean canHandleDelta = (proxy.getClientVersion().isNotOlderThan(KnownVersion.GFE_61))
           && InternalDistributedSystem.getAnyInstance().getConfig().getDeltaPropagation()
           && !(this._proxy.clientConflation == Handshake.CONFLATION_ON);
       if ((createDurableQueue || canHandleDelta) && logger.isDebugEnabled()) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
index cb4f5d2..9a710e3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ObjectPartList.java
@@ -30,8 +30,8 @@ import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.offheap.Releasable;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -249,7 +249,7 @@ public class ObjectPartList implements DataSerializableFixedID, Releasable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java
index 3663902..45344c8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/OldClientSupportService.java
@@ -19,7 +19,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 
 import org.apache.geode.internal.cache.CacheService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Support for old GemFire clients
@@ -33,7 +33,7 @@ public interface OldClientSupportService extends CacheService {
    * @param clientVersion the version of the client
    * @return the exception to give the client
    */
-  Throwable getThrowable(Throwable theThrowable, Version clientVersion);
+  Throwable getThrowable(Throwable theThrowable, KnownVersion clientVersion);
 
   /**
    * Process a class name read from a serialized object of unknown origin
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
index f833f05..371cd34 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/Part.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.offheap.AddressableMemoryManager;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Represents one unit of information (essentially a <code>byte</code> array) in the wire protocol.
@@ -44,7 +44,7 @@ public class Part {
   private static final byte BYTE_CODE = 0;
   private static final byte OBJECT_CODE = 1;
 
-  private Version version;
+  private KnownVersion version;
 
   /**
    * Used to represent and empty byte array for bug 36279
@@ -525,7 +525,7 @@ public class Part {
     return sb.toString();
   }
 
-  public void setVersion(Version clientVersion) {
+  public void setVersion(KnownVersion clientVersion) {
     this.version = clientVersion;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
index d47e39d..2ecd411 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
@@ -69,7 +69,7 @@ import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AuthenticationFailedException;
@@ -170,20 +170,20 @@ public abstract class ServerConnection implements Runnable {
 
   // IMPORTANT: if new messages are added change setHandshake to initialize them
   // to the correct Version for serializing to the client
-  private Message requestMessage = new Message(2, Version.CURRENT);
-  private final Message replyMessage = new Message(1, Version.CURRENT);
-  private final Message responseMessage = new Message(1, Version.CURRENT);
-  private final Message errorMessage = new Message(1, Version.CURRENT);
+  private Message requestMessage = new Message(2, KnownVersion.CURRENT);
+  private final Message replyMessage = new Message(1, KnownVersion.CURRENT);
+  private final Message responseMessage = new Message(1, KnownVersion.CURRENT);
+  private final Message errorMessage = new Message(1, KnownVersion.CURRENT);
 
   // IMPORTANT: if new messages are added change setHandshake to initialize them
   // to the correct Version for serializing to the client
-  private final ChunkedMessage queryResponseMessage = new ChunkedMessage(2, Version.CURRENT);
-  private final ChunkedMessage chunkedResponseMessage = new ChunkedMessage(1, Version.CURRENT);
+  private final ChunkedMessage queryResponseMessage = new ChunkedMessage(2, KnownVersion.CURRENT);
+  private final ChunkedMessage chunkedResponseMessage = new ChunkedMessage(1, KnownVersion.CURRENT);
   private final ChunkedMessage executeFunctionResponseMessage =
-      new ChunkedMessage(1, Version.CURRENT);
+      new ChunkedMessage(1, KnownVersion.CURRENT);
   private final ChunkedMessage registerInterestResponseMessage =
-      new ChunkedMessage(1, Version.CURRENT);
-  private final ChunkedMessage keySetResponseMessage = new ChunkedMessage(1, Version.CURRENT);
+      new ChunkedMessage(1, KnownVersion.CURRENT);
+  private final ChunkedMessage keySetResponseMessage = new ChunkedMessage(1, KnownVersion.CURRENT);
 
   @Deprecated
   private final InternalLogWriter logWriter;
@@ -362,7 +362,7 @@ public abstract class ServerConnection implements Runnable {
 
         setHandshake(readHandshake);
         setProxyId(readHandshake.getMembershipId());
-        if (readHandshake.getVersion().isOlderThan(Version.GFE_65)
+        if (readHandshake.getVersion().isOlderThan(KnownVersion.GFE_65)
             || getCommunicationMode().isWAN()) {
           try {
             setAuthAttributes();
@@ -469,7 +469,7 @@ public abstract class ServerConnection implements Runnable {
 
   public void setHandshake(ServerSideHandshake handshake) {
     this.handshake = handshake;
-    Version v = handshake.getVersion();
+    KnownVersion v = handshake.getVersion();
 
     replyMessage.setVersion(v);
     requestMessage.setVersion(v);
@@ -487,7 +487,7 @@ public abstract class ServerConnection implements Runnable {
     this.requestMessage = requestMessage;
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return handshake.getVersion();
   }
 
@@ -1125,7 +1125,7 @@ public abstract class ServerConnection implements Runnable {
   public Part updateAndGetSecurityPart() {
     // need to take care all message types here
     if (AcceptorImpl.isAuthenticationRequired()
-        && handshake.getVersion().isNotOlderThan(Version.GFE_65)
+        && handshake.getVersion().isNotOlderThan(KnownVersion.GFE_65)
         && !communicationMode.isWAN() && !requestMessage.getAndResetIsMetaRegion()
         && !isInternalMessage(requestMessage, allowInternalMessagesWithoutCredentials)) {
       setSecurityPart();
@@ -1652,7 +1652,8 @@ public abstract class ServerConnection implements Runnable {
 
   private byte[] encryptId(long id) throws Exception {
     // deserialize this using handshake keys
-    try (HeapDataOutputStream heapDataOutputStream = new HeapDataOutputStream(Version.CURRENT)) {
+    try (HeapDataOutputStream heapDataOutputStream =
+        new HeapDataOutputStream(KnownVersion.CURRENT)) {
 
       heapDataOutputStream.writeLong(id);
 
@@ -1663,7 +1664,7 @@ public abstract class ServerConnection implements Runnable {
   public long getUniqueId() {
     long uniqueId;
 
-    if (handshake.getVersion().isOlderThan(Version.GFE_65) || communicationMode.isWAN()) {
+    if (handshake.getVersion().isOlderThan(KnownVersion.GFE_65) || communicationMode.isWAN()) {
       uniqueId = userAuthId;
     } else if (requestMessage.isSecureMode()) {
       uniqueId = messageIdExtractor.getUniqueIdFromMessage(requestMessage,
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
index 7f86825..c2ff9b3 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeFactory.java
@@ -31,7 +31,7 @@ import org.apache.geode.internal.cache.tier.Command;
 import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -40,18 +40,18 @@ class ServerSideHandshakeFactory {
   private static final Logger logger = LogService.getLogger();
 
   @Immutable
-  static final Version currentServerVersion = Version.CURRENT;
+  static final KnownVersion currentServerVersion = KnownVersion.CURRENT;
 
   ServerSideHandshake readHandshake(Socket socket, int timeout, CommunicationMode communicationMode,
       DistributedSystem system, SecurityService securityService) throws Exception {
     // Read the version byte from the socket
-    Version clientVersion = readClientVersion(socket, timeout, communicationMode.isWAN());
+    KnownVersion clientVersion = readClientVersion(socket, timeout, communicationMode.isWAN());
 
     if (logger.isDebugEnabled()) {
       logger.debug("Client version: {}", clientVersion);
     }
 
-    if (clientVersion.isOlderThan(Version.GFE_57)) {
+    if (clientVersion.isOlderThan(KnownVersion.GFE_57)) {
       throw new UnsupportedVersionException("Unsupported version " + clientVersion
           + "Server's current version " + currentServerVersion);
     }
@@ -60,7 +60,7 @@ class ServerSideHandshakeFactory {
         securityService);
   }
 
-  private Version readClientVersion(Socket socket, int timeout, boolean isWan)
+  private KnownVersion readClientVersion(Socket socket, int timeout, boolean isWan)
       throws IOException, VersionException {
     int soTimeout = -1;
     try {
@@ -72,11 +72,11 @@ class ServerSideHandshakeFactory {
         throw new EOFException(
             "HandShakeReader: EOF reached before client version could be read");
       }
-      final Version clientVersion = Versioning.getKnownVersionOrDefault(
+      final KnownVersion clientVersion = Versioning.getKnownVersionOrDefault(
           Versioning.getVersionOrdinal(clientVersionOrdinal), null);
       final String message;
       if (clientVersion == null) {
-        message = Version.unsupportedVersionMessage(clientVersionOrdinal);
+        message = KnownVersion.unsupportedVersionMessage(clientVersionOrdinal);
       } else {
         final Map<Integer, Command> commands = CommandInitializer.getCommands(clientVersion);
         if (commands == null) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
index e4c62e0..44d71af 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerSideHandshakeImpl.java
@@ -34,7 +34,7 @@ import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.serialization.VersionedDataStream;
@@ -44,9 +44,9 @@ import org.apache.geode.security.AuthenticationRequiredException;
 
 public class ServerSideHandshakeImpl extends Handshake implements ServerSideHandshake {
   @Immutable
-  private static final Version currentServerVersion =
+  private static final KnownVersion currentServerVersion =
       ServerSideHandshakeFactory.currentServerVersion;
-  private Version clientVersion;
+  private KnownVersion clientVersion;
 
   private final byte replyCode;
 
@@ -59,7 +59,8 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
    * HandShake Constructor used by server side connection
    */
   public ServerSideHandshakeImpl(Socket sock, int timeout, DistributedSystem sys,
-      Version clientVersion, CommunicationMode communicationMode, SecurityService securityService)
+      KnownVersion clientVersion, CommunicationMode communicationMode,
+      SecurityService securityService)
       throws IOException, AuthenticationRequiredException {
 
     this.clientVersion = clientVersion;
@@ -86,7 +87,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
         DataInputStream dataInputStream = new DataInputStream(inputStream);
         DataOutputStream dataOutputStream = new DataOutputStream(sock.getOutputStream());
         this.clientReadTimeout = dataInputStream.readInt();
-        if (clientVersion.isOlderThan(Version.CURRENT)) {
+        if (clientVersion.isOlderThan(KnownVersion.CURRENT)) {
           // versioned streams allow object serialization code to deal with older clients
           dataInputStream = new VersionedDataInputStream(dataInputStream, clientVersion);
           dataOutputStream =
@@ -95,12 +96,12 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
         this.id = ClientProxyMembershipID.readCanonicalized(dataInputStream);
         // Note: credentials should always be the last piece in handshake for
         // Diffie-Hellman key exchange to work
-        if (clientVersion.isNotOlderThan(Version.GFE_603)) {
+        if (clientVersion.isNotOlderThan(KnownVersion.GFE_603)) {
           setOverrides(new byte[] {dataInputStream.readByte()});
         } else {
           setClientConflation(dataInputStream.readByte());
         }
-        if (this.clientVersion.isOlderThan(Version.GFE_65) || communicationMode.isWAN()) {
+        if (this.clientVersion.isOlderThan(KnownVersion.GFE_65) || communicationMode.isWAN()) {
           this.credentials =
               readCredentials(dataInputStream, dataOutputStream, sys, this.securityService);
         } else {
@@ -120,12 +121,12 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     }
   }
 
-  public Version getClientVersion() {
+  public KnownVersion getClientVersion() {
     return this.clientVersion;
   }
 
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.clientVersion;
   }
 
@@ -134,7 +135,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
       int queueSize, CommunicationMode communicationMode, Principal principal) throws IOException {
     DataOutputStream dos = new DataOutputStream(out);
     DataInputStream dis;
-    if (clientVersion.isOlderThan(Version.CURRENT)) {
+    if (clientVersion.isOlderThan(KnownVersion.CURRENT)) {
       dis = new VersionedDataInputStream(in, clientVersion);
       dos = new VersionedDataOutputStream(dos, clientVersion);
     } else {
@@ -159,9 +160,9 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     // Write the server's member
     DistributedMember member = this.system.getDistributedMember();
 
-    Version v = Version.CURRENT;
+    KnownVersion v = KnownVersion.CURRENT;
     if (dos instanceof VersionedDataStream) {
-      v = (Version) ((VersionedDataStream) dos).getVersion();
+      v = (KnownVersion) ((VersionedDataStream) dos).getVersion();
     }
     HeapDataOutputStream hdos = new HeapDataOutputStream(v);
     DataSerializer.writeObject(member, hdos);
@@ -172,7 +173,7 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
     dos.writeUTF("");
 
     // Write delta-propagation property value if this is not WAN.
-    if (!communicationMode.isWAN() && this.clientVersion.isNotOlderThan(Version.GFE_61)) {
+    if (!communicationMode.isWAN() && this.clientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
       dos.writeBoolean(((InternalDistributedSystem) this.system).getConfig().getDeltaPropagation());
     }
 
@@ -184,14 +185,14 @@ public class ServerSideHandshakeImpl extends Handshake implements ServerSideHand
 
     // Write the distributed system id if this is a 6.6 or greater client
     // on the remote side of the gateway
-    if (communicationMode.isWAN() && this.clientVersion.isNotOlderThan(Version.GFE_66)
-        && currentServerVersion.isNotOlderThan(Version.GFE_66)) {
+    if (communicationMode.isWAN() && this.clientVersion.isNotOlderThan(KnownVersion.GFE_66)
+        && currentServerVersion.isNotOlderThan(KnownVersion.GFE_66)) {
       dos.writeByte(((InternalDistributedSystem) this.system).getDistributionManager()
           .getDistributedSystemId());
     }
 
-    if ((communicationMode.isWAN()) && this.clientVersion.isNotOlderThan(Version.GFE_80)
-        && currentServerVersion.isNotOlderThan(Version.GFE_80)) {
+    if ((communicationMode.isWAN()) && this.clientVersion.isNotOlderThan(KnownVersion.GFE_80)
+        && currentServerVersion.isNotOlderThan(KnownVersion.GFE_80)) {
       int pdxSize = PeerTypeRegistration.getPdxRegistrySize();
       dos.writeInt(pdxSize);
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java
index a18b750..4a4a8bb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/SocketMessageWriter.java
@@ -24,7 +24,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.InternalInstantiator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 public class SocketMessageWriter {
@@ -32,7 +32,7 @@ public class SocketMessageWriter {
       Integer.getInteger(GeodeGlossary.GEMFIRE_PREFIX + "serverToClientPingPeriod", 60000);
 
   public void writeHandshakeMessage(DataOutputStream dos, byte type, String p_msg,
-      Version clientVersion, byte endpointType, int queueSize) throws IOException {
+      KnownVersion clientVersion, byte endpointType, int queueSize) throws IOException {
     String msg = p_msg;
 
     // write the message type
@@ -45,7 +45,7 @@ public class SocketMessageWriter {
       msg = "";
     }
     dos.writeUTF(msg);
-    if (clientVersion != null && clientVersion.isNotOlderThan(Version.GFE_61)) {
+    if (clientVersion != null && clientVersion.isNotOlderThan(KnownVersion.GFE_61)) {
       // get all the instantiators.
       Instantiator[] instantiators = InternalInstantiator.getInstantiators();
       HashMap instantiatorMap = new HashMap();
@@ -68,7 +68,7 @@ public class SocketMessageWriter {
         for (DataSerializer dataSerializer : dataSerializers) {
           dataSerializersMap.put(dataSerializer.getId(),
               dataSerializer.getClass().toString().substring(6));
-          if (clientVersion.isNotOlderThan(Version.GFE_6516)) {
+          if (clientVersion.isNotOlderThan(KnownVersion.GFE_6516)) {
             ArrayList<String> supportedClassNames = new ArrayList<String>();
             for (Class clazz : dataSerializer.getSupportedClasses()) {
               supportedClassNames.add(clazz.getName());
@@ -78,10 +78,10 @@ public class SocketMessageWriter {
         }
       }
       DataSerializer.writeHashMap(dataSerializersMap, dos);
-      if (clientVersion.isNotOlderThan(Version.GFE_6516)) {
+      if (clientVersion.isNotOlderThan(KnownVersion.GFE_6516)) {
         DataSerializer.writeHashMap(dsToSupportedClasses, dos);
       }
-      if (clientVersion.isNotOlderThan(Version.GEODE_1_5_0)) {
+      if (clientVersion.isNotOlderThan(KnownVersion.GEODE_1_5_0)) {
         dos.writeInt(CLIENT_PING_TASK_PERIOD);
       }
     }
@@ -95,7 +95,8 @@ public class SocketMessageWriter {
    * @param type a byte representing the exception type
    * @param ex the exception to be written; should not be null
    */
-  public void writeException(DataOutputStream dos, byte type, Exception ex, Version clientVersion)
+  public void writeException(DataOutputStream dos, byte type, Exception ex,
+      KnownVersion clientVersion)
       throws IOException {
     writeHandshakeMessage(dos, type, ex.toString(), clientVersion, (byte) 0x00, 0);
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
index 5628f2d..023690f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/VersionedObjectList.java
@@ -46,8 +46,8 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -298,10 +298,11 @@ public class VersionedObjectList extends ObjectPartList implements Externalizabl
   }
 
   @Immutable
-  private static final Version[] serializationVersions = new Version[] {Version.GFE_80};
+  private static final KnownVersion[] serializationVersions =
+      new KnownVersion[] {KnownVersion.GFE_80};
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return serializationVersions;
   }
 
@@ -778,7 +779,7 @@ public class VersionedObjectList extends ObjectPartList implements Externalizabl
     // }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return this.list.getSerializationVersions();
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java
index 27f94f6..00cb4af 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/CloseConnection.java
@@ -25,7 +25,7 @@ import org.apache.geode.internal.cache.tier.sockets.Message;
 import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class CloseConnection extends BaseCommand {
 
@@ -43,7 +43,8 @@ public class CloseConnection extends BaseCommand {
       final SecurityService securityService, long start) throws IOException {
     CacheServerStats stats = serverConnection.getCacheServerStats();
     long oldStart = start;
-    boolean respondToClient = serverConnection.getClientVersion().isNotOlderThan(Version.GFE_90);
+    boolean respondToClient =
+        serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_90);
     start = DistributionStats.getStatTime();
     stats.incReadCloseConnectionRequestTime(start - oldStart);
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java
index ea7b402..bb68e04 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteFunction66.java
@@ -56,7 +56,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 
 /**
@@ -113,7 +113,7 @@ public class ExecuteFunction66 extends BaseCommand {
       byte[] bytes = clientMessage.getPart(0).getSerializedForm();
       functionState = bytes[0];
       if (bytes.length >= 5
-          && serverConnection.getClientVersion().ordinal() >= Version.GFE_8009.ordinal()) {
+          && serverConnection.getClientVersion().ordinal() >= KnownVersion.GFE_8009.ordinal()) {
         functionTimeout = Part.decodeInt(bytes, 1);
       }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java
index 2e6a75e..bc6da8f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * @since GemFire 6.6
@@ -84,7 +84,7 @@ public class ExecuteRegionFunction66 extends BaseCommand {
       byte[] bytes = clientMessage.getPart(0).getSerializedForm();
       functionState = bytes[0];
       if (bytes.length >= 5
-          && serverConnection.getClientVersion().ordinal() >= Version.GFE_8009.ordinal()) {
+          && serverConnection.getClientVersion().ordinal() >= KnownVersion.GFE_8009.ordinal()) {
         functionTimeout = Part.decodeInt(bytes, 1);
       }
       if (functionState != 1) {
@@ -103,7 +103,7 @@ public class ExecuteRegionFunction66 extends BaseCommand {
       memberMappedArg = extractMemberMappedArgument(part);
 
       byte[] flags = clientMessage.getPart(5).getSerializedForm();
-      if (serverConnection.getClientVersion().ordinal() > Version.GFE_81.ordinal()) {
+      if (serverConnection.getClientVersion().ordinal() > KnownVersion.GFE_81.ordinal()) {
         isBucketsAsFilter = (flags[0] & ExecuteFunctionHelper.BUCKETS_AS_FILTER_MASK) != 0;
         isReExecute = (flags[0] & ExecuteFunctionHelper.IS_REXECUTE_MASK) != 0 ? (byte) 1 : 0;
       } else {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java
index c4946c4..98c848f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * @since GemFire 6.5
@@ -85,7 +85,7 @@ public class ExecuteRegionFunctionSingleHop extends BaseCommand {
       byte[] bytes = clientMessage.getPart(0).getSerializedForm();
       functionState = bytes[0];
       if (bytes.length >= 5
-          && serverConnection.getClientVersion().ordinal() >= Version.GFE_8009.ordinal()) {
+          && serverConnection.getClientVersion().ordinal() >= KnownVersion.GFE_8009.ordinal()) {
         functionTimeout = Part.decodeInt(bytes, 1);
       }
       if (functionState != 1) {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
index df6f5f6..c345130 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
@@ -45,7 +45,7 @@ import org.apache.geode.internal.cache.wan.BatchException70;
 import org.apache.geode.internal.cache.wan.GatewayReceiverStats;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.pdx.PdxConfigurationException;
 import org.apache.geode.pdx.PdxRegistryMismatchException;
@@ -802,7 +802,7 @@ public class GatewayReceiverCommand extends BaseCommand {
     // For older gateway senders, we need to send back an exception
     // they can deserialize.
     if ((servConn.getClientVersion() == null
-        || servConn.getClientVersion().isOlderThan(Version.GFE_80))
+        || servConn.getClientVersion().isOlderThan(KnownVersion.GFE_80))
         && exception instanceof PdxRegistryMismatchException) {
       PdxConfigurationException newException =
           new PdxConfigurationException(exception.getMessage());
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java
index 8d007d7..e40193b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/GetAll70.java
@@ -38,7 +38,7 @@ import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.AuthorizeRequestPP;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -282,7 +282,7 @@ public class GetAll70 extends BaseCommand {
       }
 
       // Send the last chunk even if the list is of zero size.
-      if (Version.GFE_701.compareTo(servConn.getClientVersion()) <= 0) {
+      if (KnownVersion.GFE_701.compareTo(servConn.getClientVersion()) <= 0) {
         // 7.0.1 and later clients do not expect the keys in the response
         values.setKeys(null);
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java
index a6f3f97..7a1c10f 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/Put65.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.security.GemFireSecurityException;
 import org.apache.geode.security.ResourcePermission;
@@ -305,15 +305,16 @@ public class Put65 extends BaseCommand {
         }
         sendOldValue = true;
         oldValueIsObject = true;
-        Version clientVersion = serverConnection.getClientVersion();
+        KnownVersion clientVersion = serverConnection.getClientVersion();
         if (oldValue instanceof CachedDeserializable) {
           oldValue = ((CachedDeserializable) oldValue).getSerializedValue();
         } else if (oldValue instanceof byte[]) {
           oldValueIsObject = false;
-        } else if ((oldValue instanceof Token) && clientVersion.isNotNewerThan(Version.GFE_651)) {
+        } else if ((oldValue instanceof Token)
+            && clientVersion.isNotNewerThan(KnownVersion.GFE_651)) {
           // older clients don't know that Token is now a DSFID class, so we
           // put the token in a serialized form they can consume
-          HeapDataOutputStream str = new HeapDataOutputStream(Version.CURRENT);
+          HeapDataOutputStream str = new HeapDataOutputStream(KnownVersion.CURRENT);
           DataOutput dstr = new DataOutputStream(str);
           InternalDataSerializer.writeSerializableObject(oldValue, dstr);
           oldValue = str.toByteArray();
@@ -339,15 +340,16 @@ public class Put65 extends BaseCommand {
               serverConnection.getProxyID(), true, clientEvent);
           sendOldValue = !clientEvent.isConcurrencyConflict();
           oldValueIsObject = true;
-          Version clientVersion = serverConnection.getClientVersion();
+          KnownVersion clientVersion = serverConnection.getClientVersion();
           if (oldValue instanceof CachedDeserializable) {
             oldValue = ((CachedDeserializable) oldValue).getSerializedValue();
           } else if (oldValue instanceof byte[]) {
             oldValueIsObject = false;
-          } else if ((oldValue instanceof Token) && clientVersion.isNotNewerThan(Version.GFE_651)) {
+          } else if ((oldValue instanceof Token)
+              && clientVersion.isNotNewerThan(KnownVersion.GFE_651)) {
             // older clients don't know that Token is now a DSFID class, so we
             // put the token in a serialized form they can consume
-            HeapDataOutputStream str = new HeapDataOutputStream(Version.CURRENT);
+            HeapDataOutputStream str = new HeapDataOutputStream(KnownVersion.CURRENT);
             DataOutput dstr = new DataOutputStream(str);
             InternalDataSerializer.writeSerializableObject(oldValue, dstr);
             oldValue = str.toByteArray();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java
index e2ca674..db19802 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/PutAll70.java
@@ -45,7 +45,7 @@ import org.apache.geode.internal.cache.tier.sockets.VersionedObjectList;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -287,7 +287,8 @@ public class PutAll70 extends BaseCommand {
           serverConnection.getName(), serverConnection.getSocketString(), regionName, response);
     }
     // Starting in 7.0.1 we do not send the keys back
-    if (response != null && Version.GFE_70.compareTo(serverConnection.getClientVersion()) < 0) {
+    if (response != null
+        && KnownVersion.GFE_70.compareTo(serverConnection.getClientVersion()) < 0) {
       if (logger.isDebugEnabled()) {
         logger.debug("setting putAll keys to null");
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
index 086c353..d40b094 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61.java
@@ -36,7 +36,7 @@ import org.apache.geode.internal.cache.vmotion.VMotionObserver;
 import org.apache.geode.internal.cache.vmotion.VMotionObserverHolder;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -98,7 +98,7 @@ public class RegisterInterest61 extends BaseCommand {
     try {
       Part regionDataPolicyPart = clientMessage.getPart(clientMessage.getNumberOfParts() - 1);
       regionDataPolicyPartBytes = (byte[]) regionDataPolicyPart.getObject();
-      if (serverConnection.getClientVersion().isNotOlderThan(Version.GFE_80)) {
+      if (serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_80)) {
         // The second byte here is serializeValues
         serializeValues = regionDataPolicyPartBytes[1] == (byte) 0x01;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java
index 3e5817a..1ab7417 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
@@ -95,7 +95,7 @@ public class RegisterInterestList66 extends BaseCommand {
     try {
       Part regionDataPolicyPart = clientMessage.getPart(clientMessage.getNumberOfParts() - 1);
       regionDataPolicyPartBytes = (byte[]) regionDataPolicyPart.getObject();
-      if (serverConnection.getClientVersion().isNotOlderThan(Version.GFE_80)) {
+      if (serverConnection.getClientVersion().isNotOlderThan(KnownVersion.GFE_80)) {
         // The second byte here is serializeValues
         serializeValues = regionDataPolicyPartBytes[1] == (byte) 0x01;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
index 40ddf56..0358101 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/DistTxEntryEvent.java
@@ -33,9 +33,9 @@ import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 
 public class DistTxEntryEvent extends EntryEventImpl {
 
@@ -61,7 +61,7 @@ public class DistTxEntryEvent extends EntryEventImpl {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
@@ -153,7 +153,7 @@ public class DistTxEntryEvent extends EntryEventImpl {
     int putAllSize = DataSerializer.readInteger(in);
     PutAllEntryData[] putAllEntries = new PutAllEntryData[putAllSize];
     if (putAllSize > 0) {
-      final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+      final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
       final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
       for (int i = 0; i < putAllSize; i++) {
         putAllEntries[i] = new PutAllEntryData(in, context, this.eventID, i);
@@ -203,7 +203,7 @@ public class DistTxEntryEvent extends EntryEventImpl {
       DeserializationContext context) throws IOException, ClassNotFoundException {
     int removeAllSize = DataSerializer.readInteger(in);
     final RemoveAllEntryData[] removeAllData = new RemoveAllEntryData[removeAllSize];
-    final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+    final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
     final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
     for (int i = 0; i < removeAllSize; i++) {
       removeAllData[i] = new RemoveAllEntryData(in, this.eventID, i, context);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
index 8048afa..3466119 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteFetchKeysMessage.java
@@ -48,8 +48,8 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.RemoteOperationException;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.util.ObjectIntProcedure;
 import org.apache.geode.logging.internal.log4j.api.LogService;
@@ -224,7 +224,7 @@ public class RemoteFetchKeysMessage extends RemoteOperationMessage {
       // always write at least one chunk
       final HeapDataOutputStream mos = new HeapDataOutputStream(
           InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Versioning
-              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), Version.CURRENT));
+              .getKnownVersionOrDefault(recipient.getVersionOrdinalObject(), KnownVersion.CURRENT));
       do {
         mos.reset();
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java
index 2938e6a..0ae2247 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteGetMessage.java
@@ -49,9 +49,9 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.OffHeapHelper;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.util.BlobHelper;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -219,7 +219,7 @@ public class RemoteGetMessage extends RemoteOperationMessageWithDirectReply {
      */
     public transient byte[] valueInBytes;
 
-    public transient Version remoteVersion;
+    public transient KnownVersion remoteVersion;
 
     /**
      * Empty constructor to conform to DataSerializable interface
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
index 6ed9073..67f0f39 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemotePutAllMessage.java
@@ -62,9 +62,9 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -237,7 +237,7 @@ public class RemotePutAllMessage extends RemoteOperationMessageWithDirectReply {
     this.putAllDataCount = (int) InternalDataSerializer.readUnsignedVL(in);
     this.putAllData = new PutAllEntryData[putAllDataCount];
     if (this.putAllDataCount > 0) {
-      final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+      final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
       final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
       for (int i = 0; i < this.putAllDataCount; i++) {
         this.putAllData[i] = new PutAllEntryData(in, context, this.eventId, i);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
index da8d8ef..f155e29 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tx/RemoteRemoveAllMessage.java
@@ -63,9 +63,9 @@ import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.offheap.annotations.Released;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -232,7 +232,7 @@ public class RemoteRemoveAllMessage extends RemoteOperationMessageWithDirectRepl
     this.removeAllDataCount = (int) InternalDataSerializer.readUnsignedVL(in);
     this.removeAllData = new RemoveAllEntryData[removeAllDataCount];
     if (this.removeAllDataCount > 0) {
-      final Version version = StaticSerialization.getVersionForDataStreamOrNull(in);
+      final KnownVersion version = StaticSerialization.getVersionForDataStreamOrNull(in);
       final ByteArrayDataInput bytesIn = new ByteArrayDataInput();
       for (int i = 0; i < this.removeAllDataCount; i++) {
         this.removeAllData[i] = new RemoveAllEntryData(in, this.eventId, i,
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
index 232e685..77de281 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/DiskVersionTag.java
@@ -20,7 +20,7 @@ import java.io.IOException;
 
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * The version tag class for version tags for persistent regions. The VersionSource held in these
@@ -74,7 +74,7 @@ public class DiskVersionTag extends VersionTag<DiskStoreID> {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java
index a9020c3..3d9e1c8 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RVVException.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.VersionedDataSerializable;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * RVV exceptions are part of a RegionVersionVector. They are held by RegionVersionHolders.
@@ -205,7 +205,7 @@ abstract class RVVException
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {}
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
index 79633fd..13a0da7 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/RegionVersionVector.java
@@ -47,8 +47,8 @@ import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.util.internal.GeodeGlossary;
 
@@ -1542,7 +1542,7 @@ public abstract class RegionVersionVector<T extends VersionSource<?>>
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java
index 68dd7cb..9a06bf5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VMVersionTag.java
@@ -20,7 +20,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.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * The version tag class for version tags for non-persistent regions. The VersionSource held in
@@ -64,7 +64,7 @@ public class VMVersionTag extends VersionTag<InternalDistributedMember> {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
index 045ab2c..fb29480 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/versions/VersionTag.java
@@ -29,8 +29,8 @@ import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.logging.log4j.LogMarker;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.size.ReflectionSingleObjectSizer;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -417,7 +417,7 @@ public abstract class VersionTag<T extends VersionSource>
         try {
           this.previousMemberID = readMember(in);
         } catch (BufferUnderflowException e) {
-          if (context.getSerializationVersion().isOlderThan(Version.GEODE_1_11_0)) {
+          if (context.getSerializationVersion().isOlderThan(KnownVersion.GEODE_1_11_0)) {
             // GEODE-7219: older versions may report HAS_PREVIOUS_MEMBER_ID but not transmit it
             logger.info("Buffer underflow encountered while reading a version tag - ignoring");
           } else {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
index 0a9e3c7..adf80cb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderAdvisor.java
@@ -46,9 +46,9 @@ import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.UpdateAttributesProcessor;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingThread;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
@@ -557,7 +557,7 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
       this.senderEventListenerClassNames = DataSerializer.readArrayList(in);
       this.isDiskSynchronous = in.readBoolean();
       this.dispatcherThreads = in.readInt();
-      if (StaticSerialization.getVersionForDataStream(in).isOlderThan(Version.GFE_90)) {
+      if (StaticSerialization.getVersionForDataStream(in).isOlderThan(KnownVersion.GFE_90)) {
         Gateway.OrderPolicy oldOrderPolicy = DataSerializer.readObject(in);
         if (oldOrderPolicy != null) {
           if (oldOrderPolicy.name().equals(OrderPolicy.KEY.name())) {
@@ -599,7 +599,7 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
       DataSerializer.writeArrayList(senderEventListenerClassNames, out);
       out.writeBoolean(isDiskSynchronous);
       out.writeInt(dispatcherThreads);
-      if (StaticSerialization.getVersionForDataStream(out).isOlderThan(Version.GFE_90)
+      if (StaticSerialization.getVersionForDataStream(out).isOlderThan(KnownVersion.GFE_90)
           && this.orderPolicy != null) {
         String orderPolicyName = this.orderPolicy.name();
         if (orderPolicyName.equals(Gateway.OrderPolicy.KEY.name())) {
@@ -683,10 +683,11 @@ public class GatewaySenderAdvisor extends DistributionAdvisor {
     }
 
     @Immutable
-    private static final Version[] serializationVersions = new Version[] {Version.GFE_80};
+    private static final KnownVersion[] serializationVersions =
+        new KnownVersion[] {KnownVersion.GFE_80};
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return serializationVersions;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
index 41cf4f1..85f60aa 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventCallbackArgument.java
@@ -27,8 +27,8 @@ import org.apache.geode.cache.wan.GatewaySender;
 import org.apache.geode.internal.cache.WrappedCallbackArgument;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Class <code>GatewayEventCallbackArgument</code> is a wrapper on a callback arg plus the id of the
@@ -180,7 +180,7 @@ public class GatewaySenderEventCallbackArgument extends WrappedCallbackArgument
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
index 6ec7c40..19ece6e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderEventImpl.java
@@ -52,9 +52,9 @@ import org.apache.geode.internal.offheap.annotations.Retained;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.size.Sizeable;
 
@@ -73,7 +73,7 @@ public class GatewaySenderEventImpl
 
   // It should use current version. But it was hard-coded to be 0x11, i.e. GEODE_120_ORDINAL,
   // by mistake since 120 to pre-190
-  protected static final short VERSION = Version.getCurrentVersion().ordinal();
+  protected static final short VERSION = KnownVersion.getCurrentVersion().ordinal();
 
   protected EnumListenerEvent operation;
 
@@ -749,7 +749,7 @@ public class GatewaySenderEventImpl
   public void fromData(DataInput in,
       DeserializationContext context) throws IOException, ClassNotFoundException {
     fromDataPre_GEODE_1_13_0_0(in, context);
-    if (version >= Version.GEODE_1_13_0.ordinal()) {
+    if (version >= KnownVersion.GEODE_1_13_0.ordinal()) {
       boolean hasTransaction = DataSerializer.readBoolean(in);
       if (hasTransaction) {
         this.isLastEventInTransaction = DataSerializer.readBoolean(in);
@@ -761,7 +761,7 @@ public class GatewaySenderEventImpl
   public void fromDataPre_GEODE_1_13_0_0(DataInput in, DeserializationContext context)
       throws IOException, ClassNotFoundException {
     fromDataPre_GEODE_1_9_0_0(in, context);
-    if (version >= Version.GEODE_1_9_0.ordinal()) {
+    if (version >= KnownVersion.GEODE_1_9_0.ordinal()) {
       this.isConcurrencyConflict = DataSerializer.readBoolean(in);
     }
   }
@@ -774,8 +774,8 @@ public class GatewaySenderEventImpl
     this.numberOfParts = in.readInt();
     // this._id = in.readUTF();
     if (version < 0x11 && (in instanceof InputStream)
-        && StaticSerialization.getVersionForDataStream(in) == Version.CURRENT) {
-      in = new VersionedDataInputStream((InputStream) in, Version.GFE_701);
+        && StaticSerialization.getVersionForDataStream(in) == KnownVersion.CURRENT) {
+      in = new VersionedDataInputStream((InputStream) in, KnownVersion.GFE_701);
     }
     this.id = (EventID) context.getDeserializer().readObject(in);
     // TODO:Asif ; Check if this violates Barry's logic of not assiging VM
@@ -1280,8 +1280,8 @@ public class GatewaySenderEventImpl
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_9_0, Version.GEODE_1_13_0};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_9_0, KnownVersion.GEODE_1_13_0};
   }
 
   public int getSerializedValueSize() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
index c13b3c5..00a1196 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/wan/GatewaySenderQueueEntrySynchronizationOperation.java
@@ -46,8 +46,8 @@ import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.versions.VersionTag;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 public class GatewaySenderQueueEntrySynchronizationOperation {
@@ -287,7 +287,7 @@ public class GatewaySenderQueueEntrySynchronizationOperation {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java b/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java
index 691798f..ab095b6 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/logging/Banner.java
@@ -42,7 +42,7 @@ import java.util.TreeMap;
 import org.apache.geode.SystemFailure;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.VersionDescription;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.ArgumentRedactor;
 import org.apache.geode.logging.internal.ConfigurationInfo;
 import org.apache.geode.logging.internal.OSProcess;
@@ -123,7 +123,7 @@ public class Banner {
     sp.remove("os.arch");
 
     int processId = attemptToReadProcessId();
-    short currentOrdinal = Version.CURRENT_ORDINAL;
+    short currentOrdinal = KnownVersion.CURRENT_ORDINAL;
 
     List<String> commandLineArguments = new ArrayList<>();
     RuntimeMXBean runtimeBean = ManagementFactory.getRuntimeMXBean();
diff --git a/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java b/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java
index 9818f50..c38a6f1 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/sequencelog/io/GraphReader.java
@@ -22,7 +22,7 @@ import java.util.regex.Pattern;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.sequencelog.GraphType;
 import org.apache.geode.internal.sequencelog.model.GraphSet;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class GraphReader {
 
@@ -66,7 +66,7 @@ public class GraphReader {
     if (areGemfireLogs) {
       // TODO - probably don't need to go all the way
       // to a binary format here, but this is quick and easy.
-      HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
       GemfireLogConverter.convertFiles(out, files);
       InputStreamReader reader = new InputStreamReader(out.getInputStream());
       reader.addToGraphs(graphs, filter);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
index 5bc8bc4..fb4b331 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
@@ -81,7 +81,7 @@ import org.apache.geode.internal.net.BufferPool;
 import org.apache.geode.internal.net.NioFilter;
 import org.apache.geode.internal.net.NioPlainEngine;
 import org.apache.geode.internal.net.SocketCreator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
 import org.apache.geode.internal.tcp.MsgReader.Header;
@@ -187,7 +187,7 @@ public class Connection implements Runnable {
   /**
    * Identifies the version of the member on the other side of the connection.
    */
-  private Version remoteVersion;
+  private KnownVersion remoteVersion;
 
   /**
    * True if this connection was accepted by a listening socket. This makes it a receiver. False if
@@ -711,7 +711,7 @@ public class Connection implements Runnable {
       bb.putInt(cfg.getAsyncQueueTimeout());
       bb.putInt(cfg.getAsyncMaxQueueSize());
       // write own product version
-      VersioningIO.writeOrdinal(bb, Version.CURRENT.ordinal(), true);
+      VersioningIO.writeOrdinal(bb, KnownVersion.CURRENT.ordinal(), true);
       // now set the msg length into position 0
       bb.putInt(0, calcHdrSize(bb.position() - MSG_HEADER_BYTES));
       my_okHandshakeBuf = bb;
@@ -888,7 +888,7 @@ public class Connection implements Runnable {
     connectHandshake.writeBoolean(preserveOrder);
     connectHandshake.writeLong(uniqueId);
     // write the product version ordinal
-    VersioningIO.writeOrdinal(connectHandshake, Version.CURRENT.ordinal(), true);
+    VersioningIO.writeOrdinal(connectHandshake, KnownVersion.CURRENT.ordinal(), true);
     connectHandshake.writeInt(dominoCount.get() + 1);
     // this writes the sending member + thread name that is stored in senderName
     // on the receiver to show the cause of reader thread creation
@@ -1793,7 +1793,7 @@ public class Connection implements Runnable {
     }
   }
 
-  private MsgDestreamer obtainMsgDestreamer(short msgId, final Version v) {
+  private MsgDestreamer obtainMsgDestreamer(short msgId, final KnownVersion v) {
     synchronized (destreamerLock) {
       if (destreamerMap == null) {
         destreamerMap = new HashMap();
@@ -2636,7 +2636,7 @@ public class Connection implements Runnable {
     socketInUse = true;
     MsgReader msgReader = null;
     DMStats stats = owner.getConduit().getStats();
-    final Version version = getRemoteVersion();
+    final KnownVersion version = getRemoteVersion();
     try {
       msgReader = new MsgReader(this, ioFilter, version);
 
@@ -2817,7 +2817,7 @@ public class Connection implements Runnable {
           null);
       int dominoNumber = 0;
       if (remoteVersion == null
-          || remoteVersion.isNotOlderThan(Version.GFE_80)) {
+          || remoteVersion.isNotOlderThan(KnownVersion.GFE_80)) {
         dominoNumber = dis.readInt();
         if (sharedResource) {
           dominoNumber = 0;
@@ -3265,14 +3265,14 @@ public class Connection implements Runnable {
   /**
    * Return the version of the member on the other side of this connection.
    */
-  Version getRemoteVersion() {
+  KnownVersion getRemoteVersion() {
     return remoteVersion;
   }
 
   @Override
   public String toString() {
     return remoteAddr + "(uid=" + uniqueId + ")"
-        + (remoteVersion != null && remoteVersion != Version.CURRENT
+        + (remoteVersion != null && remoteVersion != KnownVersion.CURRENT
             ? "(v" + remoteVersion.toString() + ')' : "");
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
index 95d201e..49b9889 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgDestreamer.java
@@ -29,7 +29,7 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ReplyProcessor21;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 /**
@@ -64,9 +64,9 @@ public class MsgDestreamer {
 
   final CancelCriterion stopper;
 
-  final Version version;
+  final KnownVersion version;
 
-  public MsgDestreamer(DMStats stats, CancelCriterion stopper, Version v) {
+  public MsgDestreamer(DMStats stats, CancelCriterion stopper, KnownVersion v) {
     this.stopper = stopper;
     this.t = new DestreamerThread(stats, stopper);
     this.version = v;
@@ -237,7 +237,7 @@ public class MsgDestreamer {
         }
         try {
           ReplyProcessor21.initMessageRPId();
-          final Version v = version;
+          final KnownVersion v = version;
           DataInputStream dis =
               v == null ? new DataInputStream(this.is)
                   : new VersionedDataInputStream(this.is, v);
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
index 4561562..87cbfdc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgReader.java
@@ -27,7 +27,7 @@ import org.apache.geode.internal.Assert;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.net.BufferPool;
 import org.apache.geode.internal.net.NioFilter;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -46,7 +46,7 @@ public class MsgReader {
 
 
 
-  MsgReader(Connection conn, NioFilter nioFilter, Version version) {
+  MsgReader(Connection conn, NioFilter nioFilter, KnownVersion version) {
     this.conn = conn;
     this.ioFilter = nioFilter;
     this.byteBufferInputStream =
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java
index ae48a46..74bc829 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/MsgStreamer.java
@@ -35,8 +35,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.ObjToByteArraySerializer;
 import org.apache.geode.internal.net.BufferPool;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.util.internal.GeodeGlossary;
 
 /**
@@ -147,7 +147,7 @@ public class MsgStreamer extends OutputStream
       final boolean directReply, final DMStats stats, BufferPool bufferPool) {
     final Connection firstCon = (Connection) cons.get(0);
     // split into different versions if required
-    Version version;
+    KnownVersion version;
     final int numCons = cons.size();
     if (numCons > 1) {
       Connection con;
@@ -157,7 +157,7 @@ public class MsgStreamer extends OutputStream
         con = (Connection) c;
         version = con.getRemoteVersion();
         if (version != null
-            && Version.CURRENT_ORDINAL > version.ordinal()) {
+            && KnownVersion.CURRENT_ORDINAL > version.ordinal()) {
           if (versionToConnMap == null) {
             versionToConnMap = new Object2ObjectOpenHashMap();
           }
@@ -187,7 +187,7 @@ public class MsgStreamer extends OutputStream
           for (Object c : cons) {
             con = (Connection) c;
             version = con.getRemoteVersion();
-            if (version == null || version.ordinal() >= Version.CURRENT_ORDINAL) {
+            if (version == null || version.ordinal() >= KnownVersion.CURRENT_ORDINAL) {
               currentVersionConnections.add(con);
             }
           }
@@ -201,7 +201,7 @@ public class MsgStreamer extends OutputStream
           Object ver = entry.getKey();
           Object l = entry.getValue();
           streamers.add(new VersionedMsgStreamer((List<?>) l, msg, directReply, stats,
-              bufferPool, sendBufferSize, (Version) ver));
+              bufferPool, sendBufferSize, (KnownVersion) ver));
         }
         return new MsgStreamerList(streamers);
       }
@@ -308,7 +308,7 @@ public class MsgStreamer extends OutputStream
     if (isOverflowMode()) {
       if (this.overflowBuf == null) {
         this.overflowBuf = new HeapDataOutputStream(
-            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, Version.CURRENT);
+            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, KnownVersion.CURRENT);
       }
       return;
     }
@@ -934,7 +934,7 @@ public class MsgStreamer extends OutputStream
         // we don't even have room to write the length field so just create
         // the overflowBuf
         this.overflowBuf = new HeapDataOutputStream(
-            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, Version.CURRENT);
+            this.buffer.capacity() - Connection.MSG_HEADER_BYTES, KnownVersion.CURRENT);
         this.overflowBuf.writeAsSerializedByteArray(v);
         return;
       }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
index ef4ffe6..c3b4e9e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedByteBufferInputStream.java
@@ -17,7 +17,7 @@ package org.apache.geode.internal.tcp;
 
 import java.nio.ByteBuffer;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -29,26 +29,26 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
 public class VersionedByteBufferInputStream extends ByteBufferInputStream
     implements VersionedDataStream {
 
-  private final Version version;
+  private final KnownVersion version;
 
   /**
-   * Create a ByteBuffer input stream whose contents are null at given product {@link Version}.
+   * Create a ByteBuffer input stream whose contents are null at given product {@link KnownVersion}.
    *
    * @param version the product version for which this stream was created
    */
-  public VersionedByteBufferInputStream(Version version) {
+  public VersionedByteBufferInputStream(KnownVersion version) {
     super();
     this.version = version;
   }
 
   /**
    * Create a ByteBuffer input stream whose contents are the given {@link ByteBuffer} at given
-   * product {@link Version}.
+   * product {@link KnownVersion}.
    *
    * @param buffer the byte buffer to read
    * @param version the product version for which this stream was created
    */
-  public VersionedByteBufferInputStream(ByteBuffer buffer, Version version) {
+  public VersionedByteBufferInputStream(ByteBuffer buffer, KnownVersion version) {
     super(buffer);
     this.version = version;
   }
@@ -57,7 +57,7 @@ public class VersionedByteBufferInputStream extends ByteBufferInputStream
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
index 0f5639e..552c028 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/VersionedMsgStreamer.java
@@ -20,7 +20,7 @@ import java.util.List;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.internal.net.BufferPool;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataStream;
 
 /**
@@ -30,10 +30,10 @@ import org.apache.geode.internal.serialization.VersionedDataStream;
  */
 class VersionedMsgStreamer extends MsgStreamer implements VersionedDataStream {
 
-  private final Version version;
+  private final KnownVersion version;
 
   VersionedMsgStreamer(List<?> cons, DistributionMessage msg, boolean directReply, DMStats stats,
-      BufferPool bufferPool, int sendBufferSize, Version version) {
+      BufferPool bufferPool, int sendBufferSize, KnownVersion version) {
     super(cons, msg, directReply, stats, sendBufferSize, bufferPool);
     this.version = version;
   }
@@ -42,7 +42,7 @@ class VersionedMsgStreamer extends MsgStreamer implements VersionedDataStream {
    * {@inheritDoc}
    */
   @Override
-  public Version getVersion() {
+  public KnownVersion getVersion() {
     return this.version;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java b/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
index dcff5c9..c057cc6 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/util/BlobHelper.java
@@ -24,7 +24,7 @@ import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.offheap.annotations.Unretained;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.PdxInputStream;
 
 /**
@@ -47,7 +47,7 @@ public class BlobHelper {
    * A blob is a serialized Object. This method serializes the object into a blob and returns the
    * byte array that contains the blob.
    */
-  public static byte[] serializeToBlob(Object obj, Version version) throws IOException {
+  public static byte[] serializeToBlob(Object obj, KnownVersion version) throws IOException {
     final long start = startSerialization();
     HeapDataOutputStream hdos = new HeapDataOutputStream(version);
     DataSerializer.writeObject(obj, hdos);
@@ -77,7 +77,7 @@ public class BlobHelper {
   /**
    * A blob is a serialized Object. This method returns the deserialized object.
    */
-  public static Object deserializeBlob(byte[] blob, Version version, ByteArrayDataInput in)
+  public static Object deserializeBlob(byte[] blob, KnownVersion version, ByteArrayDataInput in)
       throws IOException, ClassNotFoundException {
     Object result;
     final long start = startDeserialization();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java b/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
index 6b7b7e9..ac3d0c2 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/FederationComponent.java
@@ -28,8 +28,8 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 
 /**
@@ -284,7 +284,7 @@ public class FederationComponent
 
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
index 5075af7..104629a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorRequest.java
@@ -30,8 +30,8 @@ import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Sent to a locator to request it to find (and possibly start) a jmx manager for us. It returns a
@@ -98,7 +98,7 @@ public class JmxManagerLocatorRequest implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
index b0d69c8..025e19a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocatorResponse.java
@@ -23,8 +23,8 @@ import java.net.UnknownHostException;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 /**
  * Sent to a locator to request it to find (and possibly start) a jmx manager for us. It returns a
@@ -100,7 +100,7 @@ public class JmxManagerLocatorResponse implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     // TODO Auto-generated method stub
     return null;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
index 3ac8885..b825718 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
@@ -52,7 +52,7 @@ import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.process.PidUnavailableException;
 import org.apache.geode.internal.process.ProcessUtils;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.ClientHealthStatus;
 import org.apache.geode.management.ClientQueueDetail;
@@ -89,7 +89,7 @@ public class CacheServerBridge extends ServerBridge {
 
   private ClientMembershipListener membershipListener;
 
-  public static final ThreadLocal<Version> clientVersion = new ThreadLocal<Version>();
+  public static final ThreadLocal<KnownVersion> clientVersion = new ThreadLocal<KnownVersion>();
 
   protected static int identifyPid() {
     try {
@@ -405,7 +405,7 @@ public class CacheServerBridge extends ServerBridge {
     }
   }
 
-  public Version getClientVersion(ClientConnInfo connInfo) {
+  public KnownVersion getClientVersion(ClientConnInfo connInfo) {
     if (cache.getCacheServers().size() == 0) {
       return null;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java
index 76606d3..2edf133 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/MemberMBeanBridge.java
@@ -72,7 +72,7 @@ import org.apache.geode.internal.offheap.MemoryAllocator;
 import org.apache.geode.internal.offheap.OffHeapMemoryStats;
 import org.apache.geode.internal.process.PidUnavailableException;
 import org.apache.geode.internal.process.ProcessUtils;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.OsStatisticsProvider;
 import org.apache.geode.internal.statistics.StatSamplerStats;
 import org.apache.geode.internal.statistics.StatisticsManager;
@@ -1424,6 +1424,6 @@ public class MemberMBeanBridge {
   }
 
   String getGeodeReleaseVersion() {
-    return Version.CURRENT.getName();
+    return KnownVersion.CURRENT.getName();
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
index 85c2ee8..b3ade4e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/Configuration.java
@@ -38,7 +38,7 @@ import org.xml.sax.SAXException;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionOrdinal;
 import org.apache.geode.internal.serialization.Versioning;
 import org.apache.geode.internal.serialization.VersioningIO;
@@ -169,7 +169,7 @@ public class Configuration implements DataSerializable {
     // configuration, and will now also write the deployment map.
     DataSerializer.writeHashSet(null, out);
     // As of 1.12, this class starting writing the current version
-    VersioningIO.writeOrdinal(out, Version.getCurrentVersion().ordinal(), true);
+    VersioningIO.writeOrdinal(out, KnownVersion.getCurrentVersion().ordinal(), true);
     DataSerializer.writeHashMap(deployments, out);
   }
 
@@ -189,7 +189,7 @@ public class Configuration implements DataSerializable {
     } else {
       // version of the data we are reading (1.12 or later)
       final VersionOrdinal version = Versioning.getVersionOrdinal(VersioningIO.readOrdinal(in));
-      if (version.isNotOlderThan(Version.GEODE_1_12_0)) {
+      if (version.isNotOlderThan(KnownVersion.GEODE_1_12_0)) {
         deployments.putAll(DataSerializer.readHashMap(in));
       }
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
index 427aaf6..118b14a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
@@ -47,7 +47,7 @@ import org.apache.geode.internal.VersionedDataSerializable;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils.XPathContext;
@@ -426,8 +426,8 @@ public class XmlEntity implements VersionedDataSerializable {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GEODE_1_1_1};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GEODE_1_1_1};
   }
 
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
index a7dd234..a4553e1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/messages/ConfigurationResponse.java
@@ -36,8 +36,8 @@ import org.apache.geode.InternalGemFireError;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.configuration.domain.Configuration;
 import org.apache.geode.management.internal.configuration.utils.XmlUtils;
 
@@ -148,7 +148,7 @@ public class ConfigurationResponse implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java
index 2175f44..29de7ea 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/functions/CliFunctionResult.java
@@ -29,8 +29,8 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.management.internal.configuration.domain.XmlEntity;
 
 public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSerializableFixedID {
@@ -352,7 +352,7 @@ public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSer
   }
 
   @Override
-  public Version[] getSerializationVersions() {
-    return new Version[] {Version.GFE_80};
+  public KnownVersion[] getSerializationVersions() {
+    return new KnownVersion[] {KnownVersion.GFE_80};
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
index 70dea88..14e9e08 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformer.java
@@ -31,7 +31,7 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.management.ManagementService;
 import org.apache.geode.management.internal.functions.RestoreRedundancyFunction;
 import org.apache.geode.management.internal.util.ManagementUtils;
@@ -42,7 +42,7 @@ public class RestoreRedundancyPerformer
     implements OperationPerformer<RestoreRedundancyRequest, RestoreRedundancyResults> {
   @Immutable
   @VisibleForTesting
-  static final Version ADDED_VERSION = Version.GEODE_1_13_0;
+  static final KnownVersion ADDED_VERSION = KnownVersion.GEODE_1_13_0;
   private static final String NO_MEMBERS_WITH_VERSION_FOR_REGION =
       "No members with a version greater than or equal to %s were found for region %s";
   private static final String EXCEPTION_MEMBER_MESSAGE = "Exception occurred on member %s: %s";
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java b/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
index cf097f0..823b7a0 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/util/ManagementUtils.java
@@ -49,7 +49,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.AbstractExecution;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.ManagementService;
 import org.apache.geode.management.internal.MBeanJMXAdapter;
@@ -75,7 +75,7 @@ public class ManagementUtils {
    */
   @SuppressWarnings("unchecked")
   public static Set<DistributedMember> getNormalMembersWithSameOrNewerVersion(InternalCache cache,
-      Version version) {
+      KnownVersion version) {
     return getAllNormalMembers(cache).stream().filter(
         member -> ((InternalDistributedMember) member).getVersionOrdinalObject()
             .compareTo(version) >= 0)
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
index d03385d..e65a58e 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumId.java
@@ -20,8 +20,8 @@ import java.io.IOException;
 
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 
 public class EnumId implements DataSerializableFixedID {
 
@@ -90,7 +90,7 @@ public class EnumId implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
index a37763e..2891014 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/EnumInfo.java
@@ -29,8 +29,8 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.pdx.WritablePdxInstance;
@@ -327,7 +327,7 @@ public class EnumInfo implements DataSerializableFixedID {
 
     @Override
     public byte[] toBytes() throws IOException {
-      HeapDataOutputStream hdos = new HeapDataOutputStream(16, Version.CURRENT);
+      HeapDataOutputStream hdos = new HeapDataOutputStream(16, KnownVersion.CURRENT);
       sendTo(hdos);
       return hdos.toByteArray();
     }
@@ -349,7 +349,7 @@ public class EnumInfo implements DataSerializableFixedID {
   }
 
   @Override
-  public Version[] getSerializationVersions() {
+  public KnownVersion[] getSerializationVersions() {
     return null;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java
index 5ea3700..ef629ec 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxField.java
@@ -21,8 +21,8 @@ import java.io.PrintStream;
 
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.FieldType;
 
 public class PdxField implements DataSerializable, Comparable<PdxField> {
@@ -172,8 +172,8 @@ public class PdxField implements DataSerializable, Comparable<PdxField> {
       // to set identityField to true.
       // For this reason the pdx delete-field command should only be used after
       // all member have been upgraded to 8.1 or later.
-      Version sourceVersion = StaticSerialization.getVersionForDataStream(out);
-      if (sourceVersion.isNotOlderThan(Version.GFE_81)) {
+      KnownVersion sourceVersion = StaticSerialization.getVersionForDataStream(out);
+      if (sourceVersion.isNotOlderThan(KnownVersion.GFE_81)) {
         if (this.deleted) {
           bits |= DELETED_BIT;
         }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
index 553c8e2..ebe3068 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxInstanceEnum.java
@@ -25,7 +25,7 @@ import org.apache.geode.annotations.Immutable;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.PdxSerializationException;
 import org.apache.geode.pdx.WritablePdxInstance;
 
@@ -179,7 +179,7 @@ public class PdxInstanceEnum implements InternalPdxInstance, ComparableEnum {
 
   @Override
   public byte[] toBytes() throws IOException {
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     sendTo(hdos);
     return hdos.toByteArray();
   }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java
index b087a57..fde1ce4 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxOutputStream.java
@@ -23,7 +23,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.ByteBufferWriter;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.tcp.ByteBufferInputStream.ByteSource;
 import org.apache.geode.pdx.PdxSerializationException;
 
@@ -36,11 +36,11 @@ public class PdxOutputStream implements ByteBufferWriter {
   private final HeapDataOutputStream hdos;
 
   public PdxOutputStream() {
-    this.hdos = new HeapDataOutputStream(Version.CURRENT);
+    this.hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
   }
 
   public PdxOutputStream(int allocSize) {
-    this.hdos = new HeapDataOutputStream(allocSize, Version.CURRENT);
+    this.hdos = new HeapDataOutputStream(allocSize, KnownVersion.CURRENT);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java
index 0fc2daa..0948de0 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxType.java
@@ -32,8 +32,8 @@ import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.tier.sockets.OldClientSupportService;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.StaticSerialization;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.pdx.PdxFieldAlreadyExistsException;
 import org.apache.geode.pdx.internal.AutoSerializableManager.AutoClassInfo;
 
@@ -134,8 +134,8 @@ public class PdxType implements DataSerializable {
       // to set noDomainClass to true.
       // For this reason the pdx delete-field command should only be used after
       // all member have been upgraded to 8.1 or later.
-      Version sourceVersion = StaticSerialization.getVersionForDataStream(out);
-      if (sourceVersion.isNotOlderThan(Version.GFE_81)) {
+      KnownVersion sourceVersion = StaticSerialization.getVersionForDataStream(out);
+      if (sourceVersion.isNotOlderThan(KnownVersion.GFE_81)) {
         if (this.hasDeletedField) {
           bits |= HAS_DELETED_FIELD_BIT;
         }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
index 0eb090d..58c770b 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/json/PdxToJSON.java
@@ -30,7 +30,7 @@ import com.fasterxml.jackson.core.JsonGenerator.Feature;
 
 import org.apache.geode.annotations.internal.MutableForTesting;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.JSONFormatter;
 import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.pdx.internal.EnumInfo;
@@ -52,7 +52,7 @@ public class PdxToJSON {
 
   public String getJSON() {
     JsonFactory jf = new JsonFactory();
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       JsonGenerator jg = jf.createJsonGenerator(hdos, JsonEncoding.UTF8);
       enableDisableJSONGeneratorFeature(jg);
@@ -68,7 +68,7 @@ public class PdxToJSON {
 
   public byte[] getJSONByteArray() {
     JsonFactory jf = new JsonFactory();
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     try {
       JsonGenerator jg = jf.createJsonGenerator(hdos, JsonEncoding.UTF8);
       enableDisableJSONGeneratorFeature(jg);
diff --git a/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
index dc5dede..e67ebaf 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/execute/FunctionAdapterJUnitTest.java
@@ -27,7 +27,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.geode.internal.InternalDataSerializer;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 public class FunctionAdapterJUnitTest {
@@ -77,7 +77,7 @@ public class FunctionAdapterJUnitTest {
                 + "serializedFunctionAdapterWithDifferentSerialVersionUID.ser").getAbsolutePath());
 
     DataInputStream dis =
-        new VersionedDataInputStream(new DataInputStream(fis), Version.GFE_82);
+        new VersionedDataInputStream(new DataInputStream(fis), KnownVersion.GFE_82);
     Object o = InternalDataSerializer.basicReadObject(dis);
     assertTrue(o instanceof FunctionAdapter);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java
index 41490f7..ab2634c 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/query/internal/ResultsBagJUnitTest.java
@@ -29,7 +29,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.query.SelectResults;
 import org.apache.geode.cache.query.internal.types.ObjectTypeImpl;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Test ResultsBag, including null elements
@@ -102,7 +102,7 @@ public class ResultsBagJUnitTest {
     ResultsCollectionWrapper w =
         new ResultsCollectionWrapper(new ObjectTypeImpl(Integer.class), set);
 
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(w, hdos);
     DataInputStream in = new DataInputStream(hdos.getInputStream());
     SelectResults setCopy = (SelectResults) DataSerializer.readObject(in);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
index 796db60..e8e93a8 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/DataSerializableJUnitTest.java
@@ -68,7 +68,7 @@ import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.Instantiator;
 import org.apache.geode.SystemFailure;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.internal.statistics.StatArchiveWriter;
@@ -1166,13 +1166,13 @@ public class DataSerializableJUnitTest implements Serializable {
     VersionedDataSerializableImpl ds = new VersionedDataSerializableImpl(getRandom());
 
     VersionedDataOutputStream v =
-        new VersionedDataOutputStream(this.baos, Version.GFE_70);
+        new VersionedDataOutputStream(this.baos, KnownVersion.GFE_70);
     DataSerializer.writeObject(ds, v);
     v.flush();
 
     ByteBuffer bb = ByteBuffer.wrap(this.baos.toByteArray());
     ByteBufferInputStream bbis = new ByteBufferInputStream(bb);
-    VersionedDataInputStream vin = new VersionedDataInputStream(bbis, Version.GFE_70);
+    VersionedDataInputStream vin = new VersionedDataInputStream(bbis, KnownVersion.GFE_70);
     VersionedDataSerializableImpl ds2 =
         (VersionedDataSerializableImpl) DataSerializer.readObject(vin);
 
@@ -2737,7 +2737,7 @@ public class DataSerializableJUnitTest implements Serializable {
     int[] offsets = new int[] {0, 1, 4, 9, 14, 15, 16, -1, -4, -9, -14, -15, -16};
 
     // write all combos of longs to the outputstream
-    HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataOutput out = hdos;
     for (long valueToTest : valuesToTest) {
       for (int offset : offsets) {
@@ -3032,8 +3032,8 @@ public class DataSerializableJUnitTest implements Serializable {
       implements VersionedDataSerializable {
 
     @Override
-    public Version[] getSerializationVersions() {
-      return new Version[] {Version.GFE_71};
+    public KnownVersion[] getSerializationVersions() {
+      return new KnownVersion[] {KnownVersion.GFE_71};
     }
 
     transient boolean preMethodInvoked;
diff --git a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
index e1338a4..539bc95 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/HeapDataOutputStreamJUnitTest.java
@@ -29,7 +29,7 @@ import org.junit.experimental.categories.Category;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.cache.UnitTestValueHolder;
 import org.apache.geode.internal.serialization.BufferDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.pdx.internal.TypeRegistry;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
@@ -50,7 +50,7 @@ public class HeapDataOutputStreamJUnitTest {
 
   @Test
   public void testWriteByteBuffer() {
-    HeapDataOutputStream out = new HeapDataOutputStream(64, Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(64, KnownVersion.CURRENT);
 
     byte[] bytes = "1234567890qwertyuiopasdfghjklzxcvbnm,./;'".getBytes();
     out.write(ByteBuffer.wrap(bytes, 0, 2));
@@ -69,7 +69,7 @@ public class HeapDataOutputStreamJUnitTest {
   @Test
   public void testWriteByteBufferCopyUseBuffer() {
     ByteBuffer buf = ByteBuffer.allocate(32);
-    HeapDataOutputStream out = new HeapDataOutputStream(buf, Version.CURRENT, true);
+    HeapDataOutputStream out = new HeapDataOutputStream(buf, KnownVersion.CURRENT, true);
 
     out.write(0);
 
@@ -108,7 +108,7 @@ public class HeapDataOutputStreamJUnitTest {
   @Test
   public void testWriteByteBufferNoCopyUseBuffer() {
     ByteBuffer buf = ByteBuffer.allocate(32);
-    HeapDataOutputStream out = new HeapDataOutputStream(buf, Version.CURRENT, true);
+    HeapDataOutputStream out = new HeapDataOutputStream(buf, KnownVersion.CURRENT, true);
 
     out.write(0);
 
@@ -155,7 +155,7 @@ public class HeapDataOutputStreamJUnitTest {
     }
     UnitTestValueHolder vh = new UnitTestValueHolder(bytes);
     ByteBuffer buf = ByteBuffer.allocate(32);
-    HeapDataOutputStream out = new HeapDataOutputStream(buf, Version.CURRENT, true);
+    HeapDataOutputStream out = new HeapDataOutputStream(buf, KnownVersion.CURRENT, true);
     DataSerializer.writeObject(vh, out);
     UnitTestValueHolder vh2 = DataSerializer.readObject(new DataInputStream(out.getInputStream()));
     if (!Arrays.equals(bytes, (byte[]) vh2.getValue())) {
diff --git a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java
index fc8e787..faad718 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/InternalDataSerializerSerializationAcceptlistTest.java
@@ -20,7 +20,7 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
 import org.apache.geode.internal.lang.ClassUtils;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.SerializationTest;
 
 /*
@@ -47,7 +47,7 @@ public class InternalDataSerializerSerializationAcceptlistTest {
   public void setUp() {
     Assume.assumeTrue("ObjectInputFilter is present in this JVM (post- 8.111)",
         hasObjectInputFilter());
-    outputStream = new HeapDataOutputStream(Version.CURRENT);
+    outputStream = new HeapDataOutputStream(KnownVersion.CURRENT);
     testSerializable = new TestSerializable();
     properties = new Properties();
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
index 8711d30..0625d68 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/AbstractRegionMapTest.java
@@ -64,7 +64,7 @@ import org.apache.geode.internal.cache.versions.VersionHolder;
 import org.apache.geode.internal.cache.versions.VersionSource;
 import org.apache.geode.internal.cache.versions.VersionStamp;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.util.concurrent.ConcurrentMapWithReusableEntries;
 import org.apache.geode.internal.util.concurrent.CustomEntryConcurrentHashMap;
 
@@ -1594,8 +1594,8 @@ public class AbstractRegionMapTest {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
-      return new Version[0];
+    public KnownVersion[] getSerializationVersions() {
+      return new KnownVersion[0];
     }
 
     @Override
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java
index 5fdc8ca..6287280 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/EventIDTest.java
@@ -22,7 +22,7 @@ import org.junit.Test;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 
 public class EventIDTest {
@@ -30,16 +30,16 @@ public class EventIDTest {
   @Test
   public void emptyEventIdCanBeSerializedWithCurrentVersion()
       throws IOException, ClassNotFoundException {
-    emptyEventIdCanBeSerialized(Version.CURRENT);
+    emptyEventIdCanBeSerialized(KnownVersion.CURRENT);
 
   }
 
   @Test
   public void emptyEventIdCanBeSerializedToGeode100() throws IOException, ClassNotFoundException {
-    emptyEventIdCanBeSerialized(Version.GFE_90);
+    emptyEventIdCanBeSerialized(KnownVersion.GFE_90);
   }
 
-  private void emptyEventIdCanBeSerialized(Version version)
+  private void emptyEventIdCanBeSerialized(KnownVersion version)
       throws IOException, ClassNotFoundException {
     EventID eventID = new EventID();
     HeapDataOutputStream out = new HeapDataOutputStream(version);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
index 4f5f9d3..a4257d3 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ExpireDisconnectedClientTransactionsMessageTest.java
@@ -28,7 +28,7 @@ import org.junit.Test;
 
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class ExpireDisconnectedClientTransactionsMessageTest {
   private final ClusterDistributionManager dm = mock(ClusterDistributionManager.class);
@@ -37,7 +37,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
   private final InternalDistributedMember sender = mock(InternalDistributedMember.class);
   private final ExpireDisconnectedClientTransactionsMessage message =
       spy(new ExpireDisconnectedClientTransactionsMessage());
-  private Version version = mock(Version.class);
+  private KnownVersion version = mock(KnownVersion.class);
 
   @Before
   public void setup() {
@@ -49,7 +49,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
 
   @Test
   public void processMessageFromServerOfGeode170AndLaterVersionWillExpireDisconnectedClientTransactions() {
-    when(version.compareTo(Version.GEODE_1_7_0)).thenReturn(1);
+    when(version.compareTo(KnownVersion.GEODE_1_7_0)).thenReturn(1);
 
     message.process(dm);
 
@@ -58,7 +58,7 @@ public class ExpireDisconnectedClientTransactionsMessageTest {
 
   @Test
   public void processMessageFromServerOfPriorGeode170VersionWillRemoveExpiredClientTransactions() {
-    when(version.compareTo(Version.GEODE_1_7_0)).thenReturn(-1);
+    when(version.compareTo(KnownVersion.GEODE_1_7_0)).thenReturn(-1);
 
     message.process(dm);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
index 5c08c50..090bd99 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/FilterInfoTest.java
@@ -26,7 +26,7 @@ import org.junit.Test;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.FilterRoutingInfo.FilterInfo;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Unit test for FilterRoutingInfo.FilterInfo
@@ -47,12 +47,12 @@ public class FilterInfoTest {
     clientsInv.add(3L);
     clientsInv.add(4L);
     serialized.setInterestedClientsInv(clientsInv);
-    HeapDataOutputStream dataOut = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream dataOut = new HeapDataOutputStream(KnownVersion.CURRENT);
     serialized.toData(dataOut);
     byte[] outputBytes = dataOut.toByteArray();
     FilterInfo deserialized = new FilterInfo();
     ByteArrayDataInput dataInput = new ByteArrayDataInput();
-    dataInput.initialize(outputBytes, Version.CURRENT);
+    dataInput.initialize(outputBytes, KnownVersion.CURRENT);
     deserialized.fromData(dataInput);
     assertThat(deserialized.getCQs()).isEqualTo(cqs);
     assertThat(deserialized.getInterestedClients()).isEqualTo(clients);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
index 483714d..6935e48 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/EventIdOptimizationJUnitTest.java
@@ -29,7 +29,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.serialization.DeserializationContext;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.serialization.VersionedDataOutputStream;
 import org.apache.geode.test.junit.categories.ClientServerTest;
@@ -176,14 +176,14 @@ public class EventIdOptimizationJUnitTest {
   @Test
   public void testEventIDForGEODE100Member() throws IOException, ClassNotFoundException {
     InternalDistributedMember distributedMember = new InternalDistributedMember("localhost", 10999);
-    HeapDataOutputStream hdos = new HeapDataOutputStream(256, Version.CURRENT);
+    HeapDataOutputStream hdos = new HeapDataOutputStream(256, KnownVersion.CURRENT);
     distributedMember.writeEssentialData(hdos);
     byte[] memberBytes = hdos.toByteArray();
     EventID eventID = new EventID(memberBytes, 1, 1);
 
 
-    HeapDataOutputStream hdos90 = new HeapDataOutputStream(256, Version.GFE_90);
-    VersionedDataOutputStream dop = new VersionedDataOutputStream(hdos90, Version.GFE_90);
+    HeapDataOutputStream hdos90 = new HeapDataOutputStream(256, KnownVersion.GFE_90);
+    VersionedDataOutputStream dop = new VersionedDataOutputStream(hdos90, KnownVersion.GFE_90);
 
     eventID.toData(dop, InternalDataSerializer.createSerializationContext(dop));
 
@@ -191,12 +191,12 @@ public class EventIdOptimizationJUnitTest {
 
 
     VersionedDataInputStream dataInputStream =
-        new VersionedDataInputStream(bais, Version.GFE_90);
+        new VersionedDataInputStream(bais, KnownVersion.GFE_90);
 
     EventID eventID2 = new EventID();
     eventID2.fromData(dataInputStream, mock(DeserializationContext.class));
 
-    assertEquals(distributedMember, eventID2.getDistributedMember(Version.GFE_90));
+    assertEquals(distributedMember, eventID2.getDistributedMember(KnownVersion.GFE_90));
 
     assertEquals(memberBytes.length + 17, eventID2.getMembershipID().length);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
index 4c8a21a..38a9b49 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/ha/ThreadIdentifierJUnitTest.java
@@ -27,7 +27,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.ha.ThreadIdentifier.WanType;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category({ClientServerTest.class})
@@ -36,7 +36,7 @@ public class ThreadIdentifierJUnitTest {
   @Test
   public void testEqualsIgnoresUUIDBytes() throws Exception {
     InternalDistributedMember id = new InternalDistributedMember(InetAddress.getLocalHost(), 1234);
-    id.setVersionObjectForTest(Version.GFE_90);
+    id.setVersionObjectForTest(KnownVersion.GFE_90);
     byte[] memberIdBytes = EventID.getMembershipId(new ClientProxyMembershipID(id));
     byte[] memberIdBytesWithoutUUID = new byte[memberIdBytes.length - (2 * 8 + 1)];// UUID bytes +
                                                                                    // weight byte
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java
index f981d30..48e167d 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/partitioned/FetchEntriesMessageJUnitTest.java
@@ -33,7 +33,7 @@ import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesReplyMessage;
 import org.apache.geode.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesResponse;
 import org.apache.geode.internal.cache.versions.VersionTag;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.fake.Fakes;
 
 public class FetchEntriesMessageJUnitTest {
@@ -52,7 +52,8 @@ public class FetchEntriesMessageJUnitTest {
 
   private HeapDataOutputStream createDummyChunk() throws IOException, ClassNotFoundException {
     HeapDataOutputStream mos =
-        new HeapDataOutputStream(InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048, Version.CURRENT);
+        new HeapDataOutputStream(InitialImageOperation.CHUNK_SIZE_IN_BYTES + 2048,
+            KnownVersion.CURRENT);
     mos.reset();
     DataSerializer.writeObject("keyWithOutVersionTag", mos);
     DataSerializer.writeObject("valueWithOutVersionTag", mos);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java
index d51c10d..5867f9e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CacheClientProxyFactoryTest.java
@@ -34,7 +34,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxyFactory.InternalCacheClientProxyFactory;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.statistics.StatisticsClock;
 import org.apache.geode.internal.statistics.StatisticsManager;
 
@@ -43,7 +43,7 @@ public class CacheClientProxyFactoryTest {
   private CacheClientNotifier notifier;
   private Socket socket;
   private ClientProxyMembershipID proxyId;
-  private Version clientVersion;
+  private KnownVersion clientVersion;
   private SecurityService securityService;
   private Subject subject;
   private StatisticsClock statisticsClock;
@@ -56,7 +56,7 @@ public class CacheClientProxyFactoryTest {
     notifier = mock(CacheClientNotifier.class);
     socket = mock(Socket.class);
     proxyId = mock(ClientProxyMembershipID.class);
-    clientVersion = mock(Version.class);
+    clientVersion = mock(KnownVersion.class);
     securityService = mock(SecurityService.class);
     subject = mock(Subject.class);
     statisticsClock = mock(StatisticsClock.class);
@@ -105,7 +105,7 @@ public class CacheClientProxyFactoryTest {
     @Override
     public CacheClientProxy create(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       return new SubCacheClientProxy(notifier, socket, proxyId, isPrimary, clientConflation,
@@ -118,7 +118,7 @@ public class CacheClientProxyFactoryTest {
 
     SubCacheClientProxy(CacheClientNotifier notifier, Socket socket,
         ClientProxyMembershipID proxyId, boolean isPrimary, byte clientConflation,
-        Version clientVersion, long acceptorId, boolean notifyBySubscription,
+        KnownVersion clientVersion, long acceptorId, boolean notifyBySubscription,
         SecurityService securityService, Subject subject, StatisticsClock statisticsClock)
         throws CacheException {
       super(notifier, socket, proxyId, isPrimary, clientConflation, clientVersion, acceptorId,
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java
index 67701d9..6a28398 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/CommandInitializerJUnitTest.java
@@ -16,13 +16,13 @@ package org.apache.geode.internal.cache.tier.sockets;
 
 import org.junit.Test;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class CommandInitializerJUnitTest {
 
   @Test
   public void testCommandMapContainsAllVersions() {
-    for (Version version : Version.getAllVersions()) {
+    for (KnownVersion version : KnownVersion.getAllVersions()) {
       org.junit.Assert.assertNotNull(
           "Please add a commnd set for " + version + " of Geode to CommandInitializer",
           CommandInitializer.getCommands(version));
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java
index d6f0151..465670a 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/MessageJUnitTest.java
@@ -35,7 +35,7 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
 @Category({ClientServerTest.class})
@@ -46,7 +46,7 @@ public class MessageJUnitTest {
   @Before
   public void setUp() throws Exception {
     Socket mockSocket = mock(Socket.class);
-    this.message = new Message(2, Version.CURRENT);
+    this.message = new Message(2, KnownVersion.CURRENT);
     assertEquals(2, this.message.getNumberOfParts());
     MessageStats mockStats = mock(MessageStats.class);
     ByteBuffer msgBuffer = ByteBuffer.allocate(1000);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
index a2669fe..638114d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/ServerConnectionTest.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.CommunicationMode;
 import org.apache.geode.internal.cache.tier.Encryptor;
 import org.apache.geode.internal.cache.tier.ServerSideHandshake;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.test.junit.categories.ClientServerTest;
 
@@ -93,7 +93,7 @@ public class ServerConnectionTest {
   @Test
   public void pre65SecureShouldReturnUserAuthId() {
     long userAuthId = 12345L;
-    when(handshake.getVersion()).thenReturn(Version.GFE_61);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_61);
     serverConnection.setUserAuthId(userAuthId);
 
     long value = serverConnection.getUniqueId();
@@ -103,7 +103,7 @@ public class ServerConnectionTest {
 
   @Test
   public void pre65NonSecureShouldReturnUserAuthId() {
-    when(handshake.getVersion()).thenReturn(Version.GFE_61);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_61);
     long userAuthId = 12345L;
     serverConnection.setUserAuthId(userAuthId);
 
@@ -117,7 +117,7 @@ public class ServerConnectionTest {
     long uniqueIdFromMessage = 23456L;
     MessageIdExtractor messageIdExtractor = mock(MessageIdExtractor.class);
     when(handshake.getEncryptor()).thenReturn(mock(Encryptor.class));
-    when(handshake.getVersion()).thenReturn(Version.GFE_82);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_82);
     when(messageIdExtractor.getUniqueIdFromMessage(any(Message.class), any(Encryptor.class),
         anyLong())).thenReturn(uniqueIdFromMessage);
     when(requestMessage.isSecureMode()).thenReturn(true);
@@ -131,7 +131,7 @@ public class ServerConnectionTest {
 
   @Test
   public void post65NonSecureShouldThrow() {
-    when(handshake.getVersion()).thenReturn(Version.GFE_82);
+    when(handshake.getVersion()).thenReturn(KnownVersion.GFE_82);
 
     Throwable thrown = catchThrowable(() -> serverConnection.getUniqueId());
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java
index eaa8684..a0dd813 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/ContainsKey66Test.java
@@ -35,7 +35,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -88,7 +88,7 @@ public class ContainsKey66Test {
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getResponseMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.regionNamePart.getCachedString()).thenReturn(REGION_NAME);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java
index 29b4546..9967028 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/CreateRegionTest.java
@@ -38,7 +38,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -97,7 +97,7 @@ public class CreateRegionTest {
     when(this.serverConnection.getCacheServerStats()).thenReturn(mock(CacheServerStats.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java
index 054754d..c1617ef 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Destroy65Test.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class Destroy65Test {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java
index 85c8a14..25cf12f 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyRegionTest.java
@@ -39,7 +39,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -108,7 +108,7 @@ public class DestroyRegionTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java
index 310b1c0..5a9eff0 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/DestroyTest.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class DestroyTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java
index d8dc48a..61f2183 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Get70Test.java
@@ -46,7 +46,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -115,7 +115,7 @@ public class Get70Test {
     when(serverConnection.getResponseMessage()).thenReturn(responseMessage);
     when(serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(serverConnection.getErrorResponseMessage()).thenReturn(errorResponseMessage);
-    when(serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(valuePart.getObject()).thenReturn(CALLBACK_ARG);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java
index a9b9e57..3999586 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/InvalidateTest.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -113,7 +113,7 @@ public class InvalidateTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java
index 331409d..f73bd51 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put61Test.java
@@ -42,7 +42,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -132,7 +132,7 @@ public class Put61Test {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.localRegion.basicBridgePut(eq(KEY), eq(VALUE), eq(VALUE), eq(true), eq(CALLBACK_ARG),
         any(), eq(true), any())).thenReturn(true);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java
index f643ccf..90d786d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/Put65Test.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -153,7 +153,7 @@ public class Put65Test {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.valuePart.getSerializedForm()).thenReturn(VALUE);
     when(this.valuePart.isObject()).thenReturn(true);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java
index 1dba615..24cff7d 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/PutTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -130,7 +130,7 @@ public class PutTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getReplyMessage()).thenReturn(this.replyMessage);
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.localRegion.basicBridgePut(eq(KEY), eq(VALUE), isNull(), eq(true), eq(CALLBACK_ARG),
         any(), anyBoolean(), any())).thenReturn(true);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java
index f2dc383..03bc8cb 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterest61Test.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -120,7 +120,7 @@ public class RegisterInterest61Test {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java
index c9fdef4..7944990 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList61Test.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class RegisterInterestList61Test {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java
index 655ee8b..587227b 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestList66Test.java
@@ -45,7 +45,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -130,7 +130,7 @@ public class RegisterInterestList66Test {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java
index b95ae8e..f1a4615 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RegisterInterestListTest.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -123,7 +123,7 @@ public class RegisterInterestListTest {
     when(this.serverConnection.getAuthzRequest()).thenReturn(this.authzRequest);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getChunkedResponseMessage()).thenReturn(this.chunkedResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.GFE_80);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.GFE_80);
     when(this.serverConnection.getAcceptor()).thenReturn(mock(AcceptorImpl.class));
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java
index 528cd2e..60950e2 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/RequestTest.java
@@ -40,7 +40,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -110,7 +110,7 @@ public class RequestTest {
     when(this.serverConnection.getResponseMessage()).thenReturn(this.responseMessage);
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.valuePart.getObject()).thenReturn(CALLBACK_ARG);
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java
index 8912e05..75b9707 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/tier/sockets/command/UnregisterInterestTest.java
@@ -43,7 +43,7 @@ import org.apache.geode.internal.cache.tier.sockets.Part;
 import org.apache.geode.internal.cache.tier.sockets.ServerConnection;
 import org.apache.geode.internal.security.AuthorizeRequest;
 import org.apache.geode.internal.security.SecurityService;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.security.NotAuthorizedException;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
@@ -129,7 +129,7 @@ public class UnregisterInterestTest {
     when(this.serverConnection.getCachedRegionHelper()).thenReturn(mock(CachedRegionHelper.class));
     when(this.serverConnection.getErrorResponseMessage()).thenReturn(this.errorResponseMessage);
     when(this.serverConnection.getAcceptor()).thenReturn(this.acceptor);
-    when(this.serverConnection.getClientVersion()).thenReturn(Version.CURRENT);
+    when(this.serverConnection.getClientVersion()).thenReturn(KnownVersion.CURRENT);
 
     when(this.valuePart.getObject()).thenReturn(CALLBACK_ARG);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java
index 42a2076..36a865e 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/AbstractVersionTagTestBase.java
@@ -43,7 +43,7 @@ import org.mockito.stubbing.Answer;
 
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.serialization.DeserializationContext;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionedDataInputStream;
 import org.apache.geode.internal.tcp.ByteBufferInputStream;
 
@@ -163,7 +163,7 @@ public abstract class AbstractVersionTagTestBase {
         new ByteBufferInputStream(ByteBuffer.wrap(outputStream.toByteArray()));
     DataInputStream in = new DataInputStream(inputStream);
     VersionedDataInputStream versionedDataInputStream =
-        new VersionedDataInputStream(in, Version.GEODE_1_10_0);
+        new VersionedDataInputStream(in, KnownVersion.GEODE_1_10_0);
     DeserializationContext context =
         InternalDataSerializer.createDeserializationContext(versionedDataInputStream);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
index cdced60..6dd9ecb 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/versions/RegionVersionVectorTest.java
@@ -49,7 +49,7 @@ import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.cache.LocalRegion;
 import org.apache.geode.internal.cache.persistence.DiskStoreID;
 import org.apache.geode.internal.inet.LocalHostUtil;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.test.junit.rules.ExecutorServiceRule;
 
 public class RegionVersionVectorTest {
@@ -485,7 +485,7 @@ public class RegionVersionVectorTest {
 
     assertTrue(rvv.sameAs(rvv.getCloneForTransmission()));
 
-    HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
     DataSerializer.writeObject(rvv.getCloneForTransmission(), out);
     byte[] bytes = out.toByteArray();
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
index f8a1996..9740b7b 100755
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/DataTypeJUnitTest.java
@@ -64,8 +64,8 @@ import org.apache.geode.internal.cache.execute.data.CustId;
 import org.apache.geode.internal.serialization.DSCODE;
 import org.apache.geode.internal.serialization.DataSerializableFixedID;
 import org.apache.geode.internal.serialization.DeserializationContext;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.SerializationContext;
-import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.internal.serialization.internal.DSFIDSerializerImpl;
 
 /**
@@ -943,7 +943,7 @@ public class DataTypeJUnitTest {
     }
 
     @Override
-    public Version[] getSerializationVersions() {
+    public KnownVersion[] getSerializationVersions() {
       return null;
     }
   }
diff --git a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
index e6634f0..b2f99d9 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/offheap/OffHeapStoredObjectJUnitTest.java
@@ -44,7 +44,7 @@ import org.apache.geode.internal.cache.EntryEventImpl;
 import org.apache.geode.internal.cache.RegionEntryContext;
 import org.apache.geode.internal.offheap.MemoryBlock.State;
 import org.apache.geode.internal.serialization.DSCODE;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
 
@@ -571,7 +571,7 @@ public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
     OffHeapStoredObject chunk = createValueAsUnserializedStoredObject(regionEntryValue);
 
     // writeByte is a final method and cannot be mocked, so creating a real one
-    HeapDataOutputStream dataOutput = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream dataOutput = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     chunk.sendTo(dataOutput);
 
@@ -594,7 +594,7 @@ public class OffHeapStoredObjectJUnitTest extends AbstractStoredObjectTestBase {
     OffHeapStoredObject chunk = createValueAsUnserializedStoredObject(regionEntryValue);
 
     // writeByte is a final method and cannot be mocked, so creating a real one
-    HeapDataOutputStream dataOutput = new HeapDataOutputStream(Version.CURRENT);
+    HeapDataOutputStream dataOutput = new HeapDataOutputStream(KnownVersion.CURRENT);
 
     chunk.sendAsByteArray(dataOutput);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java b/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java
index 362d718..0dee9f9 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/size/ObjectTraverserPerf.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import org.apache.geode.DataSerializable;
 import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.HeapDataOutputStream;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class ObjectTraverserPerf {
 
@@ -57,7 +57,7 @@ public class ObjectTraverserPerf {
   private static void calcSize(TestObject testObject) throws IllegalAccessException, IOException {
     if (USE_SERIALIZATION) {
       // NullDataOutputStream out = new NullDataOutputStream();
-      HeapDataOutputStream out = new HeapDataOutputStream(Version.CURRENT);
+      HeapDataOutputStream out = new HeapDataOutputStream(KnownVersion.CURRENT);
       testObject.toData(out);
     } else {
       ObjectGraphSizer.size(testObject);
diff --git a/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java b/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java
index 8094a37..b7df195 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/tcp/MsgStreamerTest.java
@@ -39,7 +39,7 @@ import org.apache.geode.distributed.internal.DistributionMessage;
 import org.apache.geode.distributed.internal.SerialAckedMessage;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.net.BufferPool;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 public class MsgStreamerTest {
   private DMStats stats = mock(DMStats.class);
@@ -87,12 +87,12 @@ public class MsgStreamerTest {
     message.setRecipients(Arrays.asList(member1, member2));
 
     when(connection1.getRemoteAddress()).thenReturn(member1);
-    when(connection1.getRemoteVersion()).thenReturn(Version.CURRENT);
+    when(connection1.getRemoteVersion()).thenReturn(KnownVersion.CURRENT);
     when(connection2.getRemoteAddress()).thenReturn(member2);
     if (mixedDestinationVersions) {
-      when(connection1.getRemoteVersion()).thenReturn(Version.GEODE_1_12_0);
+      when(connection1.getRemoteVersion()).thenReturn(KnownVersion.GEODE_1_12_0);
     } else {
-      when(connection1.getRemoteVersion()).thenReturn(Version.CURRENT);
+      when(connection1.getRemoteVersion()).thenReturn(KnownVersion.CURRENT);
     }
     List<Connection> connections = Arrays.asList(connection1, connection2);
 
diff --git a/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java b/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
index 60bfe69..2f25bfa 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/util/BlobHelperTest.java
@@ -34,16 +34,16 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.internal.offheap.StoredObject;
 import org.apache.geode.internal.serialization.ByteArrayDataInput;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 
 /**
  * Unit Tests for {@link BlobHelper}.
  *
  * TODO: add coverage for additional methods:
- * <li>{@link BlobHelper#deserializeBlob(byte[], Version, ByteArrayDataInput)}
+ * <li>{@link BlobHelper#deserializeBlob(byte[], KnownVersion, ByteArrayDataInput)}
  * <li>{@link BlobHelper#deserializeBuffer(ByteArrayDataInput, int)}
  * <li>{@link BlobHelper#deserializeOffHeapBlob(StoredObject)}
- * <li>{@link BlobHelper#serializeToBlob(Object, Version)}
+ * <li>{@link BlobHelper#serializeToBlob(Object, KnownVersion)}
  */
 public class BlobHelperTest {
 
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
index c46f1a2..e02a453 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/operation/RestoreRedundancyPerformerTest.java
@@ -40,7 +40,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalCacheForClientAccess;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.DistributedSystemMXBean;
 import org.apache.geode.management.internal.BaseManagementService;
@@ -240,9 +240,9 @@ public class RestoreRedundancyPerformerTest {
 
 
     when(server1.getVersionOrdinalObject())
-        .thenReturn(Version.GEODE_1_2_0);
+        .thenReturn(KnownVersion.GEODE_1_2_0);
     when(server2.getVersionOrdinalObject())
-        .thenReturn(Version.GEODE_1_9_0);
+        .thenReturn(KnownVersion.GEODE_1_9_0);
 
 
     // intercept the executeFunctionAndGetFunctionResult method call on the performer
diff --git a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
index 5cce73c..7f8f3a7 100644
--- a/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
+++ b/geode-core/src/upgradeTest/java/org/apache/geode/internal/cache/rollingupgrade/RollingUpgradeDUnitTest.java
@@ -55,7 +55,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.distributed.internal.membership.api.MembershipView;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.internal.AvailablePortHelper;
-import org.apache.geode.internal.serialization.Version;
+import org.apache.geode.internal.serialization.KnownVersion;
 import org.apache.geode.internal.serialization.VersionOrdinal;
 import org.apache.geode.test.dunit.DistributedTestUtils;
 import org.apache.geode.test.dunit.Host;
@@ -210,7 +210,7 @@ public abstract class RollingUpgradeDUnitTest extends JUnit4DistributedTestCase
       verifyValues(objectType, regionName, 0, 10, server2);
       putAndVerify(objectType, server2, regionName, 15, 25, server1);
 
-      final short versionOrdinalAfterUpgrade = Version.getCurrentVersion().ordinal();
+      final short versionOrdinalAfterUpgrade = KnownVersion.getCurrentVersion().ordinal();
... 4183 lines suppressed ...