diff --git a/library/Rattletrap/Decode/AppliedDamageAttribute.hs b/library/Rattletrap/Decode/AppliedDamageAttribute.hs
--- a/library/Rattletrap/Decode/AppliedDamageAttribute.hs
+++ b/library/Rattletrap/Decode/AppliedDamageAttribute.hs
@@ -8,10 +8,10 @@
 import Rattletrap.Decode.Word8le
 import Rattletrap.Type.AppliedDamageAttribute
 
-decodeAppliedDamageAttributeBits :: DecodeBits AppliedDamageAttribute
-decodeAppliedDamageAttributeBits =
+decodeAppliedDamageAttributeBits :: (Int, Int, Int) -> DecodeBits AppliedDamageAttribute
+decodeAppliedDamageAttributeBits version =
   AppliedDamageAttribute
     <$> decodeWord8leBits
-    <*> decodeVectorBits
+    <*> decodeVectorBits version
     <*> decodeInt32leBits
     <*> decodeInt32leBits
diff --git a/library/Rattletrap/Decode/AttributeValue.hs b/library/Rattletrap/Decode/AttributeValue.hs
--- a/library/Rattletrap/Decode/AttributeValue.hs
+++ b/library/Rattletrap/Decode/AttributeValue.hs
@@ -55,7 +55,7 @@
     (Map.lookup name attributeTypes)
   case constructor of
     AttributeTypeAppliedDamage ->
-      AttributeValueAppliedDamage <$> decodeAppliedDamageAttributeBits
+      AttributeValueAppliedDamage <$> decodeAppliedDamageAttributeBits version
     AttributeTypeBoolean ->
       AttributeValueBoolean <$> decodeBooleanAttributeBits
     AttributeTypeByte -> AttributeValueByte <$> decodeByteAttributeBits
@@ -64,14 +64,14 @@
     AttributeTypeClubColors ->
       AttributeValueClubColors <$> decodeClubColorsAttributeBits
     AttributeTypeDamageState ->
-      AttributeValueDamageState <$> decodeDamageStateAttributeBits
+      AttributeValueDamageState <$> decodeDamageStateAttributeBits version
     AttributeTypeDemolish ->
-      AttributeValueDemolish <$> decodeDemolishAttributeBits
+      AttributeValueDemolish <$> decodeDemolishAttributeBits version
     AttributeTypeEnum -> AttributeValueEnum <$> decodeEnumAttributeBits
     AttributeTypeExplosion ->
-      AttributeValueExplosion <$> decodeExplosionAttributeBits
+      AttributeValueExplosion <$> decodeExplosionAttributeBits version
     AttributeTypeExtendedExplosion ->
-      AttributeValueExtendedExplosion <$> decodeExtendedExplosionAttributeBits
+      AttributeValueExtendedExplosion <$> decodeExtendedExplosionAttributeBits version
     AttributeTypeFlaggedInt ->
       AttributeValueFlaggedInt <$> decodeFlaggedIntAttributeBits
     AttributeTypeFloat -> AttributeValueFloat <$> decodeFloatAttributeBits
@@ -89,7 +89,7 @@
       AttributeValueLoadoutsOnline
         <$> decodeLoadoutsOnlineAttributeBits version objectMap
     AttributeTypeLocation ->
-      AttributeValueLocation <$> decodeLocationAttributeBits
+      AttributeValueLocation <$> decodeLocationAttributeBits version
     AttributeTypeMusicStinger ->
       AttributeValueMusicStinger <$> decodeMusicStingerAttributeBits
     AttributeTypePartyLeader ->
@@ -104,7 +104,7 @@
     AttributeTypeReservation ->
       AttributeValueReservation <$> decodeReservationAttributeBits version
     AttributeTypeRigidBodyState ->
-      AttributeValueRigidBodyState <$> decodeRigidBodyStateAttributeBits
+      AttributeValueRigidBodyState <$> decodeRigidBodyStateAttributeBits version
     AttributeTypeStatEvent ->
       AttributeValueStatEvent <$> decodeStatEventAttributeBits
     AttributeTypeString -> AttributeValueString <$> decodeStringAttributeBits
@@ -114,7 +114,7 @@
     AttributeTypeUniqueId ->
       AttributeValueUniqueId <$> decodeUniqueIdAttributeBits version
     AttributeTypeWeldedInfo ->
-      AttributeValueWeldedInfo <$> decodeWeldedInfoAttributeBits
+      AttributeValueWeldedInfo <$> decodeWeldedInfoAttributeBits version
 
 attributeTypes :: Map Str AttributeType
 attributeTypes = Map.mapKeys toStr (Map.fromList rawAttributeTypes)
diff --git a/library/Rattletrap/Decode/CompressedWordVector.hs b/library/Rattletrap/Decode/CompressedWordVector.hs
--- a/library/Rattletrap/Decode/CompressedWordVector.hs
+++ b/library/Rattletrap/Decode/CompressedWordVector.hs
@@ -6,12 +6,12 @@
 import Rattletrap.Decode.CompressedWord
 import Rattletrap.Type.CompressedWordVector
 
-decodeCompressedWordVectorBits :: DecodeBits CompressedWordVector
-decodeCompressedWordVectorBits =
+decodeCompressedWordVectorBits :: (Int, Int, Int) -> DecodeBits CompressedWordVector
+decodeCompressedWordVectorBits version =
   CompressedWordVector
-    <$> decodeCompressedWordBits limit
-    <*> decodeCompressedWordBits limit
-    <*> decodeCompressedWordBits limit
+    <$> decodeCompressedWordBits (limit version)
+    <*> decodeCompressedWordBits (limit version)
+    <*> decodeCompressedWordBits (limit version)
 
-limit :: Word
-limit = 65536
+limit :: (Int, Int, Int) -> Word
+limit version = if version >= (868, 22, 7) then 262144 else 65536
diff --git a/library/Rattletrap/Decode/DamageStateAttribute.hs b/library/Rattletrap/Decode/DamageStateAttribute.hs
--- a/library/Rattletrap/Decode/DamageStateAttribute.hs
+++ b/library/Rattletrap/Decode/DamageStateAttribute.hs
@@ -8,12 +8,12 @@
 import Rattletrap.Decode.Word8le
 import Rattletrap.Type.DamageStateAttribute
 
-decodeDamageStateAttributeBits :: DecodeBits DamageStateAttribute
-decodeDamageStateAttributeBits =
+decodeDamageStateAttributeBits :: (Int, Int, Int) -> DecodeBits DamageStateAttribute
+decodeDamageStateAttributeBits version =
   DamageStateAttribute
     <$> decodeWord8leBits
     <*> getBool
     <*> decodeInt32leBits
-    <*> decodeVectorBits
+    <*> decodeVectorBits version
     <*> getBool
     <*> getBool
diff --git a/library/Rattletrap/Decode/DemolishAttribute.hs b/library/Rattletrap/Decode/DemolishAttribute.hs
--- a/library/Rattletrap/Decode/DemolishAttribute.hs
+++ b/library/Rattletrap/Decode/DemolishAttribute.hs
@@ -7,12 +7,12 @@
 import Rattletrap.Decode.Word32le
 import Rattletrap.Type.DemolishAttribute
 
-decodeDemolishAttributeBits :: DecodeBits DemolishAttribute
-decodeDemolishAttributeBits =
+decodeDemolishAttributeBits :: (Int, Int, Int) -> DecodeBits DemolishAttribute
+decodeDemolishAttributeBits version =
   DemolishAttribute
     <$> getBool
     <*> decodeWord32leBits
     <*> getBool
     <*> decodeWord32leBits
-    <*> decodeVectorBits
-    <*> decodeVectorBits
+    <*> decodeVectorBits version
+    <*> decodeVectorBits version
diff --git a/library/Rattletrap/Decode/ExplosionAttribute.hs b/library/Rattletrap/Decode/ExplosionAttribute.hs
--- a/library/Rattletrap/Decode/ExplosionAttribute.hs
+++ b/library/Rattletrap/Decode/ExplosionAttribute.hs
@@ -7,6 +7,6 @@
 import Rattletrap.Decode.Vector
 import Rattletrap.Type.ExplosionAttribute
 
-decodeExplosionAttributeBits :: DecodeBits ExplosionAttribute
-decodeExplosionAttributeBits =
-  ExplosionAttribute <$> getBool <*> decodeInt32leBits <*> decodeVectorBits
+decodeExplosionAttributeBits :: (Int, Int, Int) -> DecodeBits ExplosionAttribute
+decodeExplosionAttributeBits version =
+  ExplosionAttribute <$> getBool <*> decodeInt32leBits <*> decodeVectorBits version
diff --git a/library/Rattletrap/Decode/ExtendedExplosionAttribute.hs b/library/Rattletrap/Decode/ExtendedExplosionAttribute.hs
--- a/library/Rattletrap/Decode/ExtendedExplosionAttribute.hs
+++ b/library/Rattletrap/Decode/ExtendedExplosionAttribute.hs
@@ -7,8 +7,8 @@
 import Rattletrap.Decode.FlaggedIntAttribute
 import Rattletrap.Type.ExtendedExplosionAttribute
 
-decodeExtendedExplosionAttributeBits :: DecodeBits ExtendedExplosionAttribute
-decodeExtendedExplosionAttributeBits =
+decodeExtendedExplosionAttributeBits :: (Int, Int, Int) -> DecodeBits ExtendedExplosionAttribute
+decodeExtendedExplosionAttributeBits version =
   ExtendedExplosionAttribute
-    <$> decodeExplosionAttributeBits
+    <$> decodeExplosionAttributeBits version
     <*> decodeFlaggedIntAttributeBits
diff --git a/library/Rattletrap/Decode/Initialization.hs b/library/Rattletrap/Decode/Initialization.hs
--- a/library/Rattletrap/Decode/Initialization.hs
+++ b/library/Rattletrap/Decode/Initialization.hs
@@ -7,8 +7,8 @@
 import Rattletrap.Decode.Vector
 import Rattletrap.Type.Initialization
 
-decodeInitializationBits :: Bool -> Bool -> DecodeBits Initialization
-decodeInitializationBits hasLocation hasRotation =
+decodeInitializationBits :: (Int, Int, Int) -> Bool -> Bool -> DecodeBits Initialization
+decodeInitializationBits version hasLocation hasRotation =
   Initialization
-    <$> decodeWhen hasLocation decodeVectorBits
+    <$> decodeWhen hasLocation (decodeVectorBits version)
     <*> decodeWhen hasRotation decodeInt8VectorBits
diff --git a/library/Rattletrap/Decode/LoadoutAttribute.hs b/library/Rattletrap/Decode/LoadoutAttribute.hs
--- a/library/Rattletrap/Decode/LoadoutAttribute.hs
+++ b/library/Rattletrap/Decode/LoadoutAttribute.hs
@@ -25,3 +25,6 @@
     <*> decodeWhen (version >= Word8le 16) decodeWord32leBits
     <*> decodeWhen (version >= Word8le 17) decodeWord32leBits
     <*> decodeWhen (version >= Word8le 19) decodeWord32leBits
+    <*> decodeWhen (version >= Word8le 22) decodeWord32leBits
+    <*> decodeWhen (version >= Word8le 22) decodeWord32leBits
+    <*> decodeWhen (version >= Word8le 22) decodeWord32leBits
diff --git a/library/Rattletrap/Decode/LocationAttribute.hs b/library/Rattletrap/Decode/LocationAttribute.hs
--- a/library/Rattletrap/Decode/LocationAttribute.hs
+++ b/library/Rattletrap/Decode/LocationAttribute.hs
@@ -6,5 +6,5 @@
 import Rattletrap.Decode.Vector
 import Rattletrap.Type.LocationAttribute
 
-decodeLocationAttributeBits :: DecodeBits LocationAttribute
-decodeLocationAttributeBits = LocationAttribute <$> decodeVectorBits
+decodeLocationAttributeBits :: (Int, Int, Int) -> DecodeBits LocationAttribute
+decodeLocationAttributeBits version = LocationAttribute <$> decodeVectorBits version
diff --git a/library/Rattletrap/Decode/RigidBodyStateAttribute.hs b/library/Rattletrap/Decode/RigidBodyStateAttribute.hs
--- a/library/Rattletrap/Decode/RigidBodyStateAttribute.hs
+++ b/library/Rattletrap/Decode/RigidBodyStateAttribute.hs
@@ -7,11 +7,13 @@
 import Rattletrap.Decode.Vector
 import Rattletrap.Type.RigidBodyStateAttribute
 
-decodeRigidBodyStateAttributeBits :: DecodeBits RigidBodyStateAttribute
-decodeRigidBodyStateAttributeBits = do
+decodeRigidBodyStateAttributeBits :: (Int, Int, Int) -> DecodeBits RigidBodyStateAttribute
+decodeRigidBodyStateAttributeBits version = do
   sleeping <- getBool
   RigidBodyStateAttribute sleeping
-    <$> decodeVectorBits
-    <*> decodeCompressedWordVectorBits
-    <*> decodeWhen (not sleeping) decodeVectorBits
-    <*> decodeWhen (not sleeping) decodeVectorBits
+    <$> decodeVectorBits version
+    <*> decodeWhen (version >= (868, 22, 7)) getBool
+    <*> decodeCompressedWordVectorBits version
+    <*> decodeWhen (version >= (868, 22, 7)) getBool
+    <*> decodeWhen (not sleeping) (decodeVectorBits version)
+    <*> decodeWhen (not sleeping) (decodeVectorBits version)
diff --git a/library/Rattletrap/Decode/SpawnedReplication.hs b/library/Rattletrap/Decode/SpawnedReplication.hs
--- a/library/Rattletrap/Decode/SpawnedReplication.hs
+++ b/library/Rattletrap/Decode/SpawnedReplication.hs
@@ -37,7 +37,7 @@
   let hasLocation = classHasLocation className
   let hasRotation = classHasRotation className
   initialization <- Trans.lift
-    (decodeInitializationBits hasLocation hasRotation)
+    (decodeInitializationBits version hasLocation hasRotation)
   pure
     ( SpawnedReplication
       flag
diff --git a/library/Rattletrap/Decode/Vector.hs b/library/Rattletrap/Decode/Vector.hs
--- a/library/Rattletrap/Decode/Vector.hs
+++ b/library/Rattletrap/Decode/Vector.hs
@@ -7,13 +7,13 @@
 import Rattletrap.Type.CompressedWord
 import Rattletrap.Type.Vector
 
-decodeVectorBits :: DecodeBits Vector
-decodeVectorBits = do
-  size <- decodeCompressedWordBits 19
+decodeVectorBits :: (Int, Int, Int) -> DecodeBits Vector
+decodeVectorBits version = do
+  size <- decodeCompressedWordBits (if version >= (868, 22, 7) then 21 else 19)
   let
     limit = getLimit size
     bias = getBias size
-  Vector bias
+  Vector size bias
     <$> fmap (fromDelta bias) (decodeCompressedWordBits limit)
     <*> fmap (fromDelta bias) (decodeCompressedWordBits limit)
     <*> fmap (fromDelta bias) (decodeCompressedWordBits limit)
diff --git a/library/Rattletrap/Decode/WeldedInfoAttribute.hs b/library/Rattletrap/Decode/WeldedInfoAttribute.hs
--- a/library/Rattletrap/Decode/WeldedInfoAttribute.hs
+++ b/library/Rattletrap/Decode/WeldedInfoAttribute.hs
@@ -9,11 +9,11 @@
 import Rattletrap.Decode.Vector
 import Rattletrap.Type.WeldedInfoAttribute
 
-decodeWeldedInfoAttributeBits :: DecodeBits WeldedInfoAttribute
-decodeWeldedInfoAttributeBits =
+decodeWeldedInfoAttributeBits :: (Int, Int, Int) -> DecodeBits WeldedInfoAttribute
+decodeWeldedInfoAttributeBits version =
   WeldedInfoAttribute
     <$> getBool
     <*> decodeInt32leBits
-    <*> decodeVectorBits
+    <*> decodeVectorBits version
     <*> decodeFloat32leBits
     <*> decodeInt8VectorBits
diff --git a/library/Rattletrap/Encode/LoadoutAttribute.hs b/library/Rattletrap/Encode/LoadoutAttribute.hs
--- a/library/Rattletrap/Encode/LoadoutAttribute.hs
+++ b/library/Rattletrap/Encode/LoadoutAttribute.hs
@@ -24,6 +24,9 @@
   putOptional (loadoutAttributeGoalExplosion loadoutAttribute) putWord32Bits
   putOptional (loadoutAttributeBanner loadoutAttribute) putWord32Bits
   putOptional (loadoutAttributeUnknown3 loadoutAttribute) putWord32Bits
+  putOptional (loadoutAttributeUnknown4 loadoutAttribute) putWord32Bits
+  putOptional (loadoutAttributeUnknown5 loadoutAttribute) putWord32Bits
+  putOptional (loadoutAttributeUnknown6 loadoutAttribute) putWord32Bits
 
 putOptional :: Maybe a -> (a -> BinaryBits.BitPut ()) -> BinaryBits.BitPut ()
 putOptional m f = case m of
diff --git a/library/Rattletrap/Encode/RigidBodyStateAttribute.hs b/library/Rattletrap/Encode/RigidBodyStateAttribute.hs
--- a/library/Rattletrap/Encode/RigidBodyStateAttribute.hs
+++ b/library/Rattletrap/Encode/RigidBodyStateAttribute.hs
@@ -12,8 +12,10 @@
 putRigidBodyStateAttribute rigidBodyStateAttribute = do
   BinaryBits.putBool (rigidBodyStateAttributeSleeping rigidBodyStateAttribute)
   putVector (rigidBodyStateAttributeLocation rigidBodyStateAttribute)
+  maybe (pure ()) BinaryBits.putBool (rigidBodyStateAttributeUnknown1 rigidBodyStateAttribute)
   putCompressedWordVector
     (rigidBodyStateAttributeRotation rigidBodyStateAttribute)
+  maybe (pure ()) BinaryBits.putBool (rigidBodyStateAttributeUnknown2 rigidBodyStateAttribute)
   case rigidBodyStateAttributeLinearVelocity rigidBodyStateAttribute of
     Nothing -> pure ()
     Just linearVelocity -> putVector linearVelocity
diff --git a/library/Rattletrap/Encode/Vector.hs b/library/Rattletrap/Encode/Vector.hs
--- a/library/Rattletrap/Encode/Vector.hs
+++ b/library/Rattletrap/Encode/Vector.hs
@@ -20,7 +20,7 @@
     dz =
       fromIntegral (vectorZ vector + fromIntegral (vectorBias vector)) :: Word
     limit = 2 ^ (bitSize + 2) :: Word
-  putCompressedWord (CompressedWord 19 bitSize)
+  putCompressedWord (vectorSize vector)
   putCompressedWord (CompressedWord limit dx)
   putCompressedWord (CompressedWord limit dy)
   putCompressedWord (CompressedWord limit dz)
diff --git a/library/Rattletrap/Type/LoadoutAttribute.hs b/library/Rattletrap/Type/LoadoutAttribute.hs
--- a/library/Rattletrap/Type/LoadoutAttribute.hs
+++ b/library/Rattletrap/Type/LoadoutAttribute.hs
@@ -24,6 +24,9 @@
   , loadoutAttributeGoalExplosion :: Maybe Word32le
   , loadoutAttributeBanner :: Maybe Word32le
   , loadoutAttributeUnknown3 :: Maybe Word32le
+  , loadoutAttributeUnknown4 :: Maybe Word32le
+  , loadoutAttributeUnknown5 :: Maybe Word32le
+  , loadoutAttributeUnknown6 :: Maybe Word32le
   } deriving (Eq, Ord, Show)
 
 $(deriveJson ''LoadoutAttribute)
diff --git a/library/Rattletrap/Type/RigidBodyStateAttribute.hs b/library/Rattletrap/Type/RigidBodyStateAttribute.hs
--- a/library/Rattletrap/Type/RigidBodyStateAttribute.hs
+++ b/library/Rattletrap/Type/RigidBodyStateAttribute.hs
@@ -11,7 +11,9 @@
 data RigidBodyStateAttribute = RigidBodyStateAttribute
   { rigidBodyStateAttributeSleeping :: Bool
   , rigidBodyStateAttributeLocation :: Vector
+  , rigidBodyStateAttributeUnknown1 :: Maybe Bool
   , rigidBodyStateAttributeRotation :: CompressedWordVector
+  , rigidBodyStateAttributeUnknown2 :: Maybe Bool
   , rigidBodyStateAttributeLinearVelocity :: Maybe Vector
   , rigidBodyStateAttributeAngularVelocity :: Maybe Vector
   } deriving (Eq, Ord, Show)
diff --git a/library/Rattletrap/Type/Vector.hs b/library/Rattletrap/Type/Vector.hs
--- a/library/Rattletrap/Type/Vector.hs
+++ b/library/Rattletrap/Type/Vector.hs
@@ -5,9 +5,11 @@
   ) where
 
 import Rattletrap.Type.Common
+import Rattletrap.Type.CompressedWord
 
 data Vector = Vector
-  { vectorBias :: Word
+  { vectorSize :: CompressedWord
+  , vectorBias :: Word
   , vectorX :: Int
   , vectorY :: Int
   , vectorZ :: Int
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: rattletrap
-version: 4.0.9
+version: 4.1.0
 
 category: Game
 description: Rattletrap parses and generates Rocket League replays.
diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: e986168506e97e019ab191e8e508ee5fbe8b21f26017594422c0f4883558fb51
+-- hash: f84e96b60bea510eedb4cf3a04c0dcc3155ccd26f8c4e6b0e081b8a1d0d83211
 
 name:           rattletrap
-version:        4.0.9
+version:        4.1.0
 synopsis:       Parse and generate Rocket League replays.
 description:    Rattletrap parses and generates Rocket League replays.
 category:       Game
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -94,6 +94,7 @@
   , ("a558", "extended explosion data")
   , ("a671", "a waiting player")
   , ("a7f0", "a ready attribute")
+  , ("a9df", "salty shores patch 1.45")
   , ("afb1", "patch 1.37")
   , ("b9f9", "a party leader")
   , ("c14f", "some mutators")
