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: 12.0.1
+version: 12.0.2
 synopsis: Parse and generate Rocket League replays.
 description: Rattletrap parses and generates Rocket League replays.
 
@@ -22,7 +22,7 @@
   manual: True
 
 common library
-  build-depends: base >= 4.15 && < 4.18
+  build-depends: base >= 4.16 && < 4.19
   default-extensions: NamedFieldPuns
   default-language: Haskell2010
   ghc-options:
@@ -34,14 +34,12 @@
     -Wno-missing-export-lists
     -Wno-missing-exported-signatures
     -Wno-missing-import-lists
+    -Wno-missing-kind-signatures
     -Wno-missing-safe-haskell-mode
     -Wno-prepositive-qualified-module
     -Wno-safe
     -Wno-unsafe
 
-  if impl(ghc >= 9.2)
-    ghc-options: -Wno-missing-kind-signatures
-
   if flag(pedantic)
     ghc-options: -Werror
 
@@ -56,15 +54,15 @@
 
   autogen-modules: Paths_rattletrap
   build-depends:
-    , aeson ^>= 2.0.3 || ^>= 2.1.0
-    , aeson-pretty ^>= 0.8.9
-    , array ^>= 0.5.4
-    , bytestring >= 0.10.12 && < 0.12
-    , containers >= 0.6 && < 0.7
-    , filepath ^>= 1.4.2
-    , http-client ^>= 0.7.11
-    , http-client-tls ^>= 0.3.6
-    , text ^>= 1.2.5 || ^>= 2.0
+    , aeson >= 2.0.3 && < 2.2
+    , aeson-pretty >= 0.8.9 && < 0.9
+    , array >= 0.5.4 && < 0.6
+    , bytestring >= 0.11.4 && < 0.12
+    , containers >= 0.6.5 && < 0.7
+    , filepath >= 1.4.2 && < 1.5
+    , http-client >= 0.7.13 && < 0.8
+    , http-client-tls >= 0.3.6 && < 0.4
+    , text >= 1.2.5 && < 1.3 || >= 2.0 && < 2.1
   exposed-modules:
     Paths_rattletrap
     Rattletrap
diff --git a/src/lib/Rattletrap/Type/Attribute.hs b/src/lib/Rattletrap/Type/Attribute.hs
--- a/src/lib/Rattletrap/Type/Attribute.hs
+++ b/src/lib/Rattletrap/Type/Attribute.hs
@@ -15,7 +15,6 @@
 import qualified Rattletrap.Type.U32 as U32
 import qualified Rattletrap.Type.Version as Version
 import qualified Rattletrap.Utility.Json as Json
-import Prelude hiding (id)
 
 data Attribute = Attribute
   { id :: CompressedWord.CompressedWord,
@@ -28,15 +27,15 @@
 
 instance Json.FromJSON Attribute where
   parseJSON = Json.withObject "Attribute" $ \object -> do
-    id <- Json.required object "id"
+    id_ <- Json.required object "id"
     name <- Json.required object "name"
     value <- Json.required object "value"
-    pure Attribute {id, name, value}
+    pure Attribute {Rattletrap.Type.Attribute.id = id_, name, value}
 
 instance Json.ToJSON Attribute where
   toJSON x =
     Json.object
-      [ Json.pair "id" $ id x,
+      [ Json.pair "id" $ Rattletrap.Type.Attribute.id x,
         Json.pair "name" $ name x,
         Json.pair "value" $ value x
       ]
@@ -66,8 +65,8 @@
   BitGet.label "Attribute" $ do
     attributes <- lookupAttributeMap classes actors actor
     limit <- lookupAttributeIdLimit attributes actor
-    id <- BitGet.label "id" $ CompressedWord.bitGet limit
-    name <- lookupAttributeName classes attributes id
+    id_ <- BitGet.label "id" $ CompressedWord.bitGet limit
+    name <- lookupAttributeName classes attributes id_
     value <-
       BitGet.label "value" $
         AttributeValue.bitGet
@@ -75,7 +74,7 @@
           buildVersion
           (ClassAttributeMap.objectMap classes)
           name
-    pure Attribute {id, name, value}
+    pure Attribute {Rattletrap.Type.Attribute.id = id_, name, value}
 
 lookupAttributeMap ::
   ClassAttributeMap.ClassAttributeMap ->
diff --git a/src/lib/Rattletrap/Type/Attribute/CustomDemolish.hs b/src/lib/Rattletrap/Type/Attribute/CustomDemolish.hs
--- a/src/lib/Rattletrap/Type/Attribute/CustomDemolish.hs
+++ b/src/lib/Rattletrap/Type/Attribute/CustomDemolish.hs
@@ -7,7 +7,6 @@
 import qualified Rattletrap.Type.I32 as I32
 import qualified Rattletrap.Type.Version as Version
 import qualified Rattletrap.Utility.Json as Json
-import Prelude hiding (id)
 
 data CustomDemolish = CustomDemolish
   { flag :: Bool,
@@ -19,15 +18,15 @@
 instance Json.FromJSON CustomDemolish where
   parseJSON = Json.withObject "CustomDemolish" $ \object -> do
     flag <- Json.required object "flag"
-    id <- Json.required object "id"
+    id_ <- Json.required object "id"
     demolish <- Json.required object "demolish"
-    pure CustomDemolish {flag, id, demolish}
+    pure CustomDemolish {flag, Rattletrap.Type.Attribute.CustomDemolish.id = id_, demolish}
 
 instance Json.ToJSON CustomDemolish where
   toJSON x =
     Json.object
       [ Json.pair "flag" $ flag x,
-        Json.pair "id" $ id x,
+        Json.pair "id" $ Rattletrap.Type.Attribute.CustomDemolish.id x,
         Json.pair "demolish" $ demolish x
       ]
 
@@ -49,11 +48,11 @@
 bitGet :: Version.Version -> BitGet.BitGet CustomDemolish
 bitGet version = BitGet.label "CustomDemolish" $ do
   flag <- BitGet.label "flag" BitGet.bool
-  id <- BitGet.label "id" I32.bitGet
+  id_ <- BitGet.label "id" I32.bitGet
   demolish <- BitGet.label "demolish" $ Demolish.bitGet version
   pure
     CustomDemolish
       { flag,
-        Rattletrap.Type.Attribute.CustomDemolish.id,
+        Rattletrap.Type.Attribute.CustomDemolish.id = id_,
         demolish
       }
