diff --git a/library/Rattletrap.hs b/library/Rattletrap.hs
--- a/library/Rattletrap.hs
+++ b/library/Rattletrap.hs
@@ -10,7 +10,6 @@
   , Rattletrap.Type.AttributeMapping.AttributeMapping(..)
   , Rattletrap.Type.AttributeType.AttributeType(..)
   , Rattletrap.Type.AttributeValue.AttributeValue(..)
-  , Rattletrap.Type.Bitstream.Bitstream(..)
   , Rattletrap.Type.BooleanAttribute.BooleanAttribute(..)
   , Rattletrap.Type.ByteAttribute.ByteAttribute(..)
   , Rattletrap.Type.Cache.Cache(..)
@@ -90,7 +89,6 @@
 import qualified Rattletrap.Type.AttributeMapping
 import qualified Rattletrap.Type.AttributeType
 import qualified Rattletrap.Type.AttributeValue
-import qualified Rattletrap.Type.Bitstream
 import qualified Rattletrap.Type.BooleanAttribute
 import qualified Rattletrap.Type.ByteAttribute
 import qualified Rattletrap.Type.Cache
diff --git a/library/Rattletrap/Decode/Bitstream.hs b/library/Rattletrap/Decode/Bitstream.hs
deleted file mode 100644
--- a/library/Rattletrap/Decode/Bitstream.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Rattletrap.Decode.Bitstream
-  ( decodeBitstreamBits
-  )
-where
-
-import Rattletrap.Decode.Common
-import Rattletrap.Type.Bitstream
-
-import qualified Control.Monad as Monad
-
-decodeBitstreamBits :: Int -> DecodeBits Bitstream
-decodeBitstreamBits n = Bitstream <$> Monad.replicateM n getBool
diff --git a/library/Rattletrap/Decode/PlayerHistoryKeyAttribute.hs b/library/Rattletrap/Decode/PlayerHistoryKeyAttribute.hs
--- a/library/Rattletrap/Decode/PlayerHistoryKeyAttribute.hs
+++ b/library/Rattletrap/Decode/PlayerHistoryKeyAttribute.hs
@@ -3,10 +3,9 @@
   )
 where
 
-import Rattletrap.Decode.Bitstream
 import Rattletrap.Decode.Common
 import Rattletrap.Type.PlayerHistoryKeyAttribute
 
 decodePlayerHistoryKeyAttributeBits :: DecodeBits PlayerHistoryKeyAttribute
 decodePlayerHistoryKeyAttributeBits =
-  PlayerHistoryKeyAttribute <$> decodeBitstreamBits 14
+  PlayerHistoryKeyAttribute <$> getWord16be 14
diff --git a/library/Rattletrap/Decode/RemoteId.hs b/library/Rattletrap/Decode/RemoteId.hs
--- a/library/Rattletrap/Decode/RemoteId.hs
+++ b/library/Rattletrap/Decode/RemoteId.hs
@@ -4,10 +4,10 @@
 where
 
 import Data.Semigroup ((<>))
-import Rattletrap.Decode.Bitstream
 import Rattletrap.Decode.Common
 import Rattletrap.Decode.Word64le
 import Rattletrap.Type.RemoteId
+import Rattletrap.Type.Word64le
 import Rattletrap.Type.Word8le
 import Rattletrap.Utility.Bytes
 
@@ -22,9 +22,12 @@
   1 -> RemoteIdSteam <$> decodeWord64leBits
   2 -> RemoteIdPlayStation <$> decodePsName <*> decodePsBytes version
   4 -> RemoteIdXbox <$> decodeWord64leBits
-  6 -> RemoteIdSwitch <$> decodeBitstreamBits 256
-  7 -> RemoteIdPsyNet
-    <$> decodeBitstreamBits (if version >= (868, 24, 10) then 64 else 256)
+  6 -> do
+    (a, b, c, d) <- getWord256
+    pure $ RemoteIdSwitch a b c d
+  7 -> if version >= (868, 24, 10)
+    then RemoteIdPsyNet . Left <$> decodeWord64leBits
+    else RemoteIdPsyNet . Right <$> getWord256
   _ -> fail ("unknown system id " <> show systemId)
 
 decodePsName :: DecodeBits Text.Text
@@ -35,3 +38,11 @@
 decodePsBytes :: (Int, Int, Int) -> DecodeBits [Word.Word8]
 decodePsBytes version = Bytes.unpack
   <$> getByteStringBits (if version >= (868, 20, 1) then 24 else 16)
+
+getWord256 :: DecodeBits (Word64le, Word64le, Word64le, Word64le)
+getWord256 = do
+  a <- decodeWord64leBits
+  b <- decodeWord64leBits
+  c <- decodeWord64leBits
+  d <- decodeWord64leBits
+  pure (a, b, c, d)
diff --git a/library/Rattletrap/Encode/Bitstream.hs b/library/Rattletrap/Encode/Bitstream.hs
deleted file mode 100644
--- a/library/Rattletrap/Encode/Bitstream.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-module Rattletrap.Encode.Bitstream
-  ( putBitstream
-  )
-where
-
-import Rattletrap.Type.Bitstream
-
-import qualified Data.Binary.Bits.Put as BinaryBits
-
-putBitstream :: Bitstream -> BinaryBits.BitPut ()
-putBitstream = mapM_ BinaryBits.putBool . bitstreamValue
diff --git a/library/Rattletrap/Encode/PlayerHistoryKeyAttribute.hs b/library/Rattletrap/Encode/PlayerHistoryKeyAttribute.hs
--- a/library/Rattletrap/Encode/PlayerHistoryKeyAttribute.hs
+++ b/library/Rattletrap/Encode/PlayerHistoryKeyAttribute.hs
@@ -3,11 +3,11 @@
   )
 where
 
-import Rattletrap.Encode.Bitstream
 import Rattletrap.Type.PlayerHistoryKeyAttribute
 
 import qualified Data.Binary.Bits.Put as BinaryBits
 
 putPlayerHistoryKeyAttribute
   :: PlayerHistoryKeyAttribute -> BinaryBits.BitPut ()
-putPlayerHistoryKeyAttribute = putBitstream . playerHistoryKeyAttributeUnknown
+putPlayerHistoryKeyAttribute =
+  BinaryBits.putWord16be 14 . playerHistoryKeyAttributeUnknown
diff --git a/library/Rattletrap/Encode/RemoteId.hs b/library/Rattletrap/Encode/RemoteId.hs
--- a/library/Rattletrap/Encode/RemoteId.hs
+++ b/library/Rattletrap/Encode/RemoteId.hs
@@ -3,9 +3,9 @@
   )
 where
 
-import Rattletrap.Encode.Bitstream
 import Rattletrap.Encode.Word64le
 import Rattletrap.Type.RemoteId
+import Rattletrap.Type.Word64le
 import Rattletrap.Utility.Bytes
 
 import qualified Data.Binary.Bits.Put as BinaryBits
@@ -17,8 +17,18 @@
     let rawName = reverseBytes (padBytes (16 :: Int) (encodeLatin1 name))
     BinaryBits.putByteString rawName
     BinaryBits.putByteString (Bytes.pack bytes)
-  RemoteIdPsyNet x -> putBitstream x
+  RemoteIdPsyNet e -> case e of
+    Left l -> putWord64Bits l
+    Right (a, b, c, d) -> putWord256 a b c d
   RemoteIdSplitscreen word24 -> BinaryBits.putWord32be 24 word24
   RemoteIdSteam word64 -> putWord64Bits word64
-  RemoteIdSwitch x -> putBitstream x
+  RemoteIdSwitch a b c d -> putWord256 a b c d
   RemoteIdXbox word64 -> putWord64Bits word64
+
+putWord256
+  :: Word64le -> Word64le -> Word64le -> Word64le -> BinaryBits.BitPut ()
+putWord256 a b c d = do
+  putWord64Bits a
+  putWord64Bits b
+  putWord64Bits c
+  putWord64Bits d
diff --git a/library/Rattletrap/Type/Bitstream.hs b/library/Rattletrap/Type/Bitstream.hs
deleted file mode 100644
--- a/library/Rattletrap/Type/Bitstream.hs
+++ /dev/null
@@ -1,27 +0,0 @@
-module Rattletrap.Type.Bitstream
-  ( Bitstream(..)
-  )
-where
-
-import qualified Data.Aeson as Json
-import qualified Data.Bool as Bool
-import qualified Data.Text as Text
-
-newtype Bitstream = Bitstream
-  { bitstreamValue :: [Bool]
-  } deriving (Eq, Ord, Show)
-
-instance Json.FromJSON Bitstream where
-  parseJSON = Json.withText
-    "Bitstream"
-    (\text -> Bitstream <$> mapM
-      (\char -> case char of
-        '0' -> pure False
-        '1' -> pure True
-        _ -> fail ("invalid bit: " <> show char)
-      )
-      (Text.unpack text)
-    )
-
-instance Json.ToJSON Bitstream where
-  toJSON = Json.toJSON . fmap (Bool.bool '0' '1') . bitstreamValue
diff --git a/library/Rattletrap/Type/PlayerHistoryKeyAttribute.hs b/library/Rattletrap/Type/PlayerHistoryKeyAttribute.hs
--- a/library/Rattletrap/Type/PlayerHistoryKeyAttribute.hs
+++ b/library/Rattletrap/Type/PlayerHistoryKeyAttribute.hs
@@ -5,11 +5,10 @@
   )
 where
 
-import Rattletrap.Type.Bitstream
 import Rattletrap.Type.Common
 
 newtype PlayerHistoryKeyAttribute = PlayerHistoryKeyAttribute
-  { playerHistoryKeyAttributeUnknown :: Bitstream
+  { playerHistoryKeyAttributeUnknown :: Word16
   } deriving (Eq, Ord, Show)
 
 $(deriveJson ''PlayerHistoryKeyAttribute)
diff --git a/library/Rattletrap/Type/RemoteId.hs b/library/Rattletrap/Type/RemoteId.hs
--- a/library/Rattletrap/Type/RemoteId.hs
+++ b/library/Rattletrap/Type/RemoteId.hs
@@ -5,16 +5,16 @@
   )
 where
 
-import Rattletrap.Type.Bitstream
 import Rattletrap.Type.Common
 import Rattletrap.Type.Word64le
 
 data RemoteId
   = RemoteIdPlayStation Text [Word8]
-  | RemoteIdPsyNet Bitstream
+  | RemoteIdPsyNet (Either Word64le (Word64le, Word64le, Word64le, Word64le))
   | RemoteIdSplitscreen Word32
+  -- ^ Really only 24 bits.
   | RemoteIdSteam Word64le
-  | RemoteIdSwitch Bitstream
+  | RemoteIdSwitch Word64le Word64le Word64le Word64le
   | RemoteIdXbox Word64le
   deriving (Eq, Ord, Show)
 
diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name: rattletrap
-version: 7.0.3
+version: 8.0.0
 
 category: Game
 description: Rattletrap parses and generates Rocket League replays.
@@ -60,7 +60,6 @@
     Rattletrap.Decode.Attribute
     Rattletrap.Decode.AttributeMapping
     Rattletrap.Decode.AttributeValue
-    Rattletrap.Decode.Bitstream
     Rattletrap.Decode.BooleanAttribute
     Rattletrap.Decode.ByteAttribute
     Rattletrap.Decode.Cache
@@ -135,7 +134,6 @@
     Rattletrap.Encode.Attribute
     Rattletrap.Encode.AttributeMapping
     Rattletrap.Encode.AttributeValue
-    Rattletrap.Encode.Bitstream
     Rattletrap.Encode.BooleanAttribute
     Rattletrap.Encode.ByteAttribute
     Rattletrap.Encode.Cache
@@ -210,7 +208,6 @@
     Rattletrap.Type.AttributeMapping
     Rattletrap.Type.AttributeType
     Rattletrap.Type.AttributeValue
-    Rattletrap.Type.Bitstream
     Rattletrap.Type.BooleanAttribute
     Rattletrap.Type.ByteAttribute
     Rattletrap.Type.Cache
