diff --git a/composite-aeson.cabal b/composite-aeson.cabal
--- a/composite-aeson.cabal
+++ b/composite-aeson.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.0.
+-- This file has been generated from package.yaml by hpack version 0.31.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 8d9a0c14fd8218f00a30ca1a388ca7f73e99ec3e5dd977fcbe895c9f9ad35e25
+-- hash: bc44f33e46706d10831fe5c7cbd44356a2f9455db48282273e25e9550d6dc57c
 
 name:           composite-aeson
-version:        0.5.5.0
+version:        0.6.0.0
 synopsis:       JSON for Vinyl/Frames records
 description:    Integration between Aeson and Vinyl/Frames records allowing records to be easily converted to JSON using automatic derivation, explicit formats, or a mix of both.
 category:       Records
@@ -19,86 +19,86 @@
 build-type:     Simple
 
 library
+  exposed-modules:
+      Composite.Aeson
+      Composite.Aeson.Base
+      Composite.Aeson.CoRecord
+      Composite.Aeson.DateTimeFormatUtils
+      Composite.Aeson.Enum
+      Composite.Aeson.Formats.DateTime
+      Composite.Aeson.Formats.Default
+      Composite.Aeson.Formats.Generic
+      Composite.Aeson.Formats.InternalTH
+      Composite.Aeson.Formats.Provided
+      Composite.Aeson.Record
+      Composite.Aeson.TH
+  other-modules:
+      Paths_composite_aeson
   hs-source-dirs:
       src
   default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses MultiWayIf OverloadedStrings PatternSynonyms PolyKinds QuasiQuotes RankNTypes ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators ViewPatterns
   ghc-options: -Wall -O2
   build-depends:
-      aeson >=1.1.2.0 && <1.4
+      aeson >=1.1.2.0 && <1.5
     , aeson-better-errors >=0.9.1.0 && <0.10
     , base >=4.7 && <5
-    , composite-base >=0.5.3.0 && <0.6
-    , containers >=0.5.7.0 && <0.6
-    , contravariant >=1.4 && <1.5
+    , composite-base >=0.5.3.0 && <0.7
+    , containers >=0.5.7.0 && <0.7
+    , contravariant >=1.4 && <1.6
     , generic-deriving >=1.11.2 && <1.13
     , hashable >=1.2.6.1 && <1.3
-    , lens >=4.15.4 && <4.17
+    , lens >=4.15.4 && <4.18
     , mmorph >=1.0.9 && <1.2
     , mtl >=2.2.1 && <2.3
-    , profunctors >=5.2.1 && <5.3
+    , profunctors >=5.2.1 && <5.4
     , scientific >=0.3.5.1 && <0.4
     , tagged >=0.8.5 && <0.9
-    , template-haskell >=2.11.1.0 && <2.14
+    , template-haskell >=2.11.1.0 && <2.15
     , text >=1.2.2.2 && <1.3
     , time >=1.6.0.1 && <1.9
     , unordered-containers >=0.2.8.0 && <0.3
     , vector >=0.12.0.1 && <0.13
-    , vinyl >=0.5.3 && <0.9
-  exposed-modules:
-      Composite.Aeson
-      Composite.Aeson.Base
-      Composite.Aeson.CoRecord
-      Composite.Aeson.DateTimeFormatUtils
-      Composite.Aeson.Enum
-      Composite.Aeson.Formats.DateTime
-      Composite.Aeson.Formats.Default
-      Composite.Aeson.Formats.Generic
-      Composite.Aeson.Formats.InternalTH
-      Composite.Aeson.Formats.Provided
-      Composite.Aeson.Record
-      Composite.Aeson.TH
-  other-modules:
-      Paths_composite_aeson
+    , vinyl >=0.5.3 && <0.12
   default-language: Haskell2010
 
 test-suite composite-aeson-test
   type: exitcode-stdio-1.0
   main-is: Main.hs
+  other-modules:
+      DateTimeSpec
+      EnumSpec
+      FieldSpec
+      RecordSpec
+      THSpec
+      TupleSpec
+      Paths_composite_aeson
   hs-source-dirs:
       test
   default-extensions: DataKinds FlexibleContexts FlexibleInstances GeneralizedNewtypeDeriving LambdaCase MultiParamTypeClasses MultiWayIf OverloadedStrings PatternSynonyms PolyKinds QuasiQuotes RankNTypes ScopedTypeVariables StandaloneDeriving StrictData TemplateHaskell TupleSections TypeApplications TypeFamilies TypeOperators ViewPatterns
   ghc-options: -Wall -O2 -threaded -rtsopts -with-rtsopts=-N -fno-warn-orphans
   build-depends:
       QuickCheck
-    , aeson >=1.1.2.0 && <1.4
+    , aeson >=1.1.2.0 && <1.5
     , aeson-better-errors >=0.9.1.0 && <0.10
     , aeson-qq
     , base >=4.7 && <5
     , composite-aeson
-    , composite-base >=0.5.3.0 && <0.6
-    , containers >=0.5.7.0 && <0.6
-    , contravariant >=1.4 && <1.5
+    , composite-base >=0.5.3.0 && <0.7
+    , containers >=0.5.7.0 && <0.7
+    , contravariant >=1.4 && <1.6
     , generic-deriving >=1.11.2 && <1.13
     , hashable >=1.2.6.1 && <1.3
     , hspec
-    , lens >=4.15.4 && <4.17
+    , lens >=4.15.4 && <4.18
     , mmorph >=1.0.9 && <1.2
     , mtl >=2.2.1 && <2.3
-    , profunctors >=5.2.1 && <5.3
+    , profunctors >=5.2.1 && <5.4
     , scientific >=0.3.5.1 && <0.4
     , tagged >=0.8.5 && <0.9
-    , template-haskell >=2.11.1.0 && <2.14
+    , template-haskell >=2.11.1.0 && <2.15
     , text >=1.2.2.2 && <1.3
     , time >=1.6.0.1 && <1.9
     , unordered-containers >=0.2.8.0 && <0.3
     , vector >=0.12.0.1 && <0.13
-    , vinyl >=0.5.3 && <0.9
-  other-modules:
-      DateTimeSpec
-      EnumSpec
-      FieldSpec
-      RecordSpec
-      THSpec
-      TupleSpec
-      Paths_composite_aeson
+    , vinyl >=0.5.3 && <0.12
   default-language: Haskell2010
diff --git a/src/Composite/Aeson/CoRecord.hs b/src/Composite/Aeson/CoRecord.hs
--- a/src/Composite/Aeson/CoRecord.hs
+++ b/src/Composite/Aeson/CoRecord.hs
@@ -13,7 +13,7 @@
 import Data.List.NonEmpty (NonEmpty)
 import Data.Maybe (catMaybes, fromMaybe, listToMaybe)
 import Data.Text (Text)
-import Data.Vinyl (RecApplicative, rapply, recordToList, (<<&>>))
+import Data.Vinyl (RApply, RMap, RecApplicative, RecordToList, rapply, recordToList, (<<&>>))
 import Data.Vinyl.Functor (Compose(Compose), (:.), Const(Const), Lift(Lift))
 import Data.Vinyl.Lens (type (∈))
 import Data.Proxy (Proxy(Proxy))
@@ -35,7 +35,8 @@
 -- |Make a @'JsonFormat' e (Field rs)@ given how to map the sum type to JSON along with a record with formatters for each value the field could have.
 fieldJsonFormat
   :: forall (rs :: [*]) r' (rs' :: [*]) e.
-     (rs ~ (r' ': rs'), RecApplicative rs, RecWithContext rs rs, ReifyNames rs)
+     ( rs ~ (r' ': rs'), RApply rs, RMap rs
+     , RecApplicative rs, RecWithContext rs rs, RecordToList rs', ReifyNames rs )
   => SumStyle -> JsonFormatField e rs -> JsonFormat e (Field rs)
 fieldJsonFormat sumStyle fmts = jsonSumFormat sumStyle o i
   where
diff --git a/src/Composite/Aeson/Record.hs b/src/Composite/Aeson/Record.hs
--- a/src/Composite/Aeson/Record.hs
+++ b/src/Composite/Aeson/Record.hs
@@ -22,7 +22,7 @@
 import qualified Data.HashMap.Strict as HM
 import Data.Proxy (Proxy(Proxy))
 import Data.Text (Text, pack)
-import Data.Vinyl (Rec((:&), RNil), rmap)
+import Data.Vinyl (RMap, Rec((:&), RNil), rmap)
 import GHC.TypeLits (KnownSymbol, symbolVal)
 
 -- |Function to encode a single field of a record, possibly choosing to elide the field with @Nothing@.
@@ -143,7 +143,7 @@
 -- |Take a 'JsonFormatRecord' describing how to map a record with field @rs@ to and from JSON and produce a @'JsonFormat' e (Record rs)@.
 --
 -- See 'JsonFormatRecord' for more.
-recordJsonFormat :: (RecordToJsonObject rs, RecordFromJson rs) => JsonFormatRecord e rs -> JsonFormat e (Rec Identity rs)
+recordJsonFormat :: (RMap rs, RecordToJsonObject rs, RecordFromJson rs) => JsonFormatRecord e rs -> JsonFormat e (Rec Identity rs)
 recordJsonFormat formatRec =
   JsonFormat $ JsonProfunctor
     (recordToJson   . rmap (\ (JsonField o _) -> ToField o  ) $ formatRec)
diff --git a/test/RecordSpec.hs b/test/RecordSpec.hs
--- a/test/RecordSpec.hs
+++ b/test/RecordSpec.hs
@@ -5,7 +5,7 @@
 import Composite.Aeson.Formats.Provided (stringJsonFormat)
 import Composite.Aeson.Record (defaultJsonFormatRecord, recordJsonFormat, optionalField)
 import Composite.TH (withLensesAndProxies)
-import Control.Lens (set)
+import Control.Lens (Lens', set)
 import Data.Aeson.BetterErrors (parseValue)
 import Data.Aeson.QQ (aesonQQ)
 import Data.Vinyl.Lens (rlens)
@@ -21,9 +21,11 @@
 recordSuite :: Spec
 recordSuite =
   describe "Record support" $ do
-    let defaultFmt, optionalFmt :: JsonFormat Void (Record TestRec)
+    let fBar' :: Lens' (Rec f TestRec) (f FBar)
+        fBar' = rlens
+        defaultFmt, optionalFmt :: JsonFormat Void (Record TestRec)
         defaultFmt = recordJsonFormat defaultJsonFormatRecord
-        optionalFmt = recordJsonFormat $ set (rlens fBar_) (optionalField stringJsonFormat) defaultJsonFormatRecord
+        optionalFmt = recordJsonFormat $ set fBar' (optionalField stringJsonFormat) defaultJsonFormatRecord
 
     it "by default requires all fields" $ do
       parseValue (fromJsonWithFormat defaultFmt) [aesonQQ| {foo: 123, bar: "abc"} |] `shouldBe`    Right (123 :*: Just "abc" :*: RNil)
