diff --git a/library/Rattletrap/Json.hs b/library/Rattletrap/Json.hs
--- a/library/Rattletrap/Json.hs
+++ b/library/Rattletrap/Json.hs
@@ -24,13 +24,16 @@
 import Rattletrap.ReplicationValue
 
 import qualified Control.Monad as Monad
-import qualified Data.Aeson.Casing as Casing
 import qualified Data.Aeson.TH as Aeson
+import qualified Data.Aeson.Types as Aeson
 import qualified Language.Haskell.TH as TH
 
-$(let optionsFor name =
-        (Casing.aesonDrop (length (TH.nameBase name)) Casing.snakeCase)
-        { Aeson.constructorTagModifier = Casing.snakeCase
+$(let toSnakeCase = Aeson.camelTo2 '_'
+      dropName name = drop (length (TH.nameBase name))
+      optionsFor name =
+        Aeson.defaultOptions
+        { Aeson.constructorTagModifier = toSnakeCase
+        , Aeson.fieldLabelModifier = toSnakeCase . dropName name
         , Aeson.omitNothingFields = True
         , Aeson.sumEncoding = Aeson.ObjectWithSingleField
         , Aeson.unwrapUnaryRecords = True
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,60 +1,61 @@
+name: rattletrap
+version: 2.5.1
+
 category: Game
 description: Rattletrap parses and generates Rocket League replays.
-executables:
-  rattletrap:
-    dependencies:
-    - base
-    - rattletrap
-    ghc-options:
-    - -rtsopts
-    - -threaded
-    - -with-rtsopts=-N
-    main: Main.hs
-    source-dirs: executables
 extra-source-files:
-- CHANGELOG.markdown
-- replays/*.replay
-- package.yaml
-- README.markdown
-- stack.yaml
-ghc-options: -Wall
+  - CHANGELOG.markdown
+  - replays/*.replay
+  - package.yaml
+  - README.markdown
+  - stack.yaml
 github: tfausak/rattletrap
+license-file: LICENSE.markdown
+license: MIT
+maintainer: Taylor Fausak
+synopsis: Parse and generate Rocket League replays.
+
+dependencies:
+  - aeson >= 1.1.2 && < 1.3
+  - base >= 4.10.0 && < 4.11
+  - bimap >= 0.3.3 && < 0.4
+  - binary >= 0.8.5 && < 0.9
+  - binary-bits >= 0.5 && < 0.6
+  - bytestring >= 0.10.8 && < 0.11
+  - containers >= 0.5.10 && < 0.6
+  - data-binary-ieee754 >= 0.4.4 && < 0.5
+  - template-haskell >= 2.12.0 && < 2.13
+  - text >= 1.2.2 && < 1.3
+  - vector >= 0.12.0 && < 0.13
+ghc-options: -Wall
+
 library:
   default-extensions:
-  - Strict
-  dependencies:
-  - aeson >=0.11 && <1.3
-  - aeson-casing >=0.1 && <0.2
-  - base >=4.9 && <4.10
-  - bimap >=0.3 && <0.4
-  - binary >=0.8 && <0.9
-  - binary-bits >=0.5 && <0.6
-  - bytestring >=0.10 && <0.11
-  - containers >=0.5 && <0.6
-  - data-binary-ieee754 >=0.4 && <0.5
-  - template-haskell >=2.11 && <2.12
-  - text >=1.2 && <1.3
-  - vector >=0.11 && <0.13
+    - Strict
   other-modules: Paths_rattletrap
   source-dirs: library
-license: MIT
-license-file: LICENSE.markdown
-maintainer: Taylor Fausak
-name: rattletrap
-synopsis: Parse and generate Rocket League replays.
+
+executables:
+  rattletrap:
+    dependencies:
+      - rattletrap
+    ghc-options:
+      - -rtsopts
+      - -threaded
+      - -with-rtsopts=-N
+    main: Main.hs
+    source-dirs: executables
+
 tests:
   test:
     dependencies:
-    - base
-    - bytestring
-    - filepath >=1.4 && <1.5
-    - hspec >=2.4 && <2.5
-    - rattletrap
-    - temporary >=1.2 && <1.3
+      - filepath >= 1.4.1 && < 1.5
+      - hspec >= 2.4.4 && < 2.5
+      - rattletrap
+      - temporary >= 1.2.1 && < 1.3
     ghc-options:
-    - -rtsopts
-    - -threaded
-    - -with-rtsopts=-N
+      - -rtsopts
+      - -threaded
+      - -with-rtsopts=-N
     main: Main.hs
     source-dirs: tests
-version: '2.5.0'
diff --git a/rattletrap.cabal b/rattletrap.cabal
--- a/rattletrap.cabal
+++ b/rattletrap.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           rattletrap
-version:        2.5.0
+version:        2.5.1
 synopsis:       Parse and generate Rocket League replays.
 description:    Rattletrap parses and generates Rocket League replays.
 category:       Game
@@ -88,18 +88,17 @@
   default-extensions: Strict
   ghc-options: -Wall
   build-depends:
-      aeson >=0.11 && <1.3
-    , aeson-casing >=0.1 && <0.2
-    , base >=4.9 && <4.10
-    , bimap >=0.3 && <0.4
-    , binary >=0.8 && <0.9
-    , binary-bits >=0.5 && <0.6
-    , bytestring >=0.10 && <0.11
-    , containers >=0.5 && <0.6
-    , data-binary-ieee754 >=0.4 && <0.5
-    , template-haskell >=2.11 && <2.12
-    , text >=1.2 && <1.3
-    , vector >=0.11 && <0.13
+      aeson >= 1.1.2 && < 1.3
+    , base >= 4.10.0 && < 4.11
+    , bimap >= 0.3.3 && < 0.4
+    , binary >= 0.8.5 && < 0.9
+    , binary-bits >= 0.5 && < 0.6
+    , bytestring >= 0.10.8 && < 0.11
+    , containers >= 0.5.10 && < 0.6
+    , data-binary-ieee754 >= 0.4.4 && < 0.5
+    , template-haskell >= 2.12.0 && < 2.13
+    , text >= 1.2.2 && < 1.3
+    , vector >= 0.12.0 && < 0.13
   exposed-modules:
       Rattletrap
       Rattletrap.ActorMap
@@ -188,7 +187,17 @@
       executables
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base
+      aeson >= 1.1.2 && < 1.3
+    , base >= 4.10.0 && < 4.11
+    , bimap >= 0.3.3 && < 0.4
+    , binary >= 0.8.5 && < 0.9
+    , binary-bits >= 0.5 && < 0.6
+    , bytestring >= 0.10.8 && < 0.11
+    , containers >= 0.5.10 && < 0.6
+    , data-binary-ieee754 >= 0.4.4 && < 0.5
+    , template-haskell >= 2.12.0 && < 2.13
+    , text >= 1.2.2 && < 1.3
+    , vector >= 0.12.0 && < 0.13
     , rattletrap
   default-language: Haskell2010
 
@@ -199,10 +208,19 @@
       tests
   ghc-options: -Wall -rtsopts -threaded -with-rtsopts=-N
   build-depends:
-      base
-    , bytestring
-    , filepath >=1.4 && <1.5
-    , hspec >=2.4 && <2.5
+      aeson >= 1.1.2 && < 1.3
+    , base >= 4.10.0 && < 4.11
+    , bimap >= 0.3.3 && < 0.4
+    , binary >= 0.8.5 && < 0.9
+    , binary-bits >= 0.5 && < 0.6
+    , bytestring >= 0.10.8 && < 0.11
+    , containers >= 0.5.10 && < 0.6
+    , data-binary-ieee754 >= 0.4.4 && < 0.5
+    , template-haskell >= 2.12.0 && < 2.13
+    , text >= 1.2.2 && < 1.3
+    , vector >= 0.12.0 && < 0.13
+    , filepath >= 1.4.1 && < 1.5
+    , hspec >= 2.4.4 && < 2.5
     , rattletrap
-    , temporary >=1.2 && <1.3
+    , temporary >= 1.2.1 && < 1.3
   default-language: Haskell2010
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,1 +1,117 @@
-resolver: lts-8.0
+resolver: ghc-8.2.1
+
+packages:
+  - .
+  - tools
+
+extra-deps:
+  - aeson-1.2.1.0
+  - ansi-terminal-0.6.3.1
+  - async-2.1.1.1
+  - attoparsec-0.13.1.0
+  - base-compat-0.9.3
+  - bimap-0.3.3
+  - binary-bits-0.5
+  - call-stack-0.1.0
+  - data-binary-ieee754-0.4.4
+  - dlist-0.8.0.3
+  - exceptions-0.8.3
+  - hashable-1.2.6.1
+  - hspec-2.4.4
+  - hspec-core-2.4.4
+  - hspec-discover-2.4.4
+  - hspec-expectations-0.8.2
+  - HUnit-1.6.0.0
+  - integer-logarithms-1.0.2
+  - mtl-2.2.1
+  - old-locale-1.0.0.7
+  - primitive-0.6.2.0
+  - QuickCheck-2.10.0.1
+  - quickcheck-io-0.2.0
+  - random-1.1
+  - scientific-0.3.5.1
+  - setenv-0.1.1.3
+  - stm-2.4.4.1
+  - tagged-0.8.5
+  - temporary-1.2.1
+  - text-1.2.2.2
+  - tf-random-0.5
+  - time-locale-compat-0.1.1.3
+  - transformers-compat-0.5.1.4
+  - unordered-containers-0.2.8.0
+  - uuid-types-1.0.3
+  - vector-0.12.0.1
+
+  # tools
+  - adjunctions-4.3
+  - ansi-wl-pprint-0.6.7.3
+  - asn1-encoding-0.9.5
+  - asn1-parse-0.9.4
+  - asn1-types-0.3.2
+  - base-orphans-0.6
+  - base64-bytestring-1.0.0.1
+  - bifunctors-5.4.2
+  - blaze-builder-0.4.0.2
+  - blaze-html-0.9.0.1
+  - blaze-markup-0.8.0.0
+  - byteable-0.1.1
+  - cabal-doctest-1.0.2
+  - case-insensitive-1.2.0.10
+  - cereal-0.5.4.0
+  - charset-0.3.7.1
+  - comonad-5.0.1
+  - connection-0.2.8
+  - contravariant-1.4
+  - cookie-0.4.2.1
+  - cryptonite-0.24
+  - data-default-class-0.1.2.0
+  - distributive-0.5.2
+  - fail-4.9.0.0
+  - fingertree-0.1.1.0
+  - foundation-0.0.13
+  - free-4.12.4
+  - github-release-1.0.4
+  - hourglass-0.2.10
+  - HTTP-4000.3.7
+  - http-client-0.5.7.0
+  - http-client-tls-0.3.5.1
+  - http-types-0.9.1
+  - kan-extensions-5.0.2
+  - lens-4.15.3
+  - memory-0.14.6
+  - mime-types-0.1.0.7
+  - network-2.6.3.2
+  - network-uri-2.6.1.0
+  - Only-0.1
+  - optparse-applicative-0.14.0.0
+  - optparse-generic-1.2.2
+  - parallel-3.2.1.1
+  - parsec-3.1.11
+  - parsers-0.12.5
+  - pem-0.2.2
+  - prelude-extras-0.4.0.3
+  - profunctors-5.2
+  - reducers-3.12.1
+  - reflection-2.1.2
+  - safe-0.3.15
+  - semigroupoids-5.2
+  - semigroups-0.18.3
+  - socks-0.5.5
+  - StateVar-1.1.0.4
+  - streaming-commons-0.1.18
+  - system-filepath-0.4.13.4
+  - th-abstraction-0.2.3.0
+  - tls-1.3.11
+  - trifecta-1.7
+  - uri-templater-0.2.1.0
+  - utf8-string-1.0.1.1
+  - void-0.7.2
+  - x509-1.7.1
+  - x509-store-1.6.3
+  - x509-system-1.6.5
+  - x509-validation-1.6.8
+  - zlib-0.6.1.2
+
+flags:
+  time-locale-compat:
+    old-locale: false
