diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -2,6 +2,10 @@
 
 ## Unreleased changes
 
+## 0.2.0.0
+ * Drop `ModernToJSON`, use `GenericallyToJSONToEncoding` instead
+ * Introduce `GenericallyToEncoding`
+
 ## 0.1.1.0
  * Set aeson 2 compatibility
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,11 +1,17 @@
 # aeson-modern-tojson
-Provide a newtype to be used with DerivingVia to correctly derive [ToJSON](https://hackage.haskell.org/package/aeson-1.5.6.0/docs/Data-Aeson.html#g:7).
+Provide a newtype to be used with DerivingVia to correctly derive [ToJSON](https://hackage.haskell.org/package/aeson-2.1.0.0/docs/Data-Aeson.html#g:7).
 
 As simple as:
 
 
 ```
 data W = W Int Int
-deriving stock (Generic)
-deriving (ToJSON) via (ModernToJSON W)
+    deriving stock (Generic)
+    deriving (ToJSON) via (GenericallyToJSONToEncoding W)
+```
+
+```
+data X = X Int Int
+    deriving stock (Generic)
+    deriving (ToJSON) via (GenericallyToEncoding X)
 ```
diff --git a/aeson-modern-tojson.cabal b/aeson-modern-tojson.cabal
--- a/aeson-modern-tojson.cabal
+++ b/aeson-modern-tojson.cabal
@@ -5,9 +5,9 @@
 -- see: https://github.com/sol/hpack
 
 name:           aeson-modern-tojson
-version:        0.1.1.0
+version:        0.2.0.0
 synopsis:       Provide a handy way for derving ToJSON proprely.
-description:    Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-1.5.6.0/docs/Data-Aeson.html#g:7 ToJSON>.
+description:    Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-2.1.0.0/docs/Data-Aeson.html#g:7 ToJSON>.
                 .
                 As simple as:
                 .
@@ -15,7 +15,7 @@
                 @
                 data W = W Int Int
                   deriving stock (Generic)
-                  deriving (ToJSON) via (ModernToJSON W)
+                  deriving (ToJSON) via (GenericallyToJSONToEncoding W)
                 @
 category:       Text, Web, JSON
 homepage:       https://github.com/blackheaven/aeson-modern-tojson#readme
diff --git a/src/Data/Aeson/ToJSON/Deriving.hs b/src/Data/Aeson/ToJSON/Deriving.hs
--- a/src/Data/Aeson/ToJSON/Deriving.hs
+++ b/src/Data/Aeson/ToJSON/Deriving.hs
@@ -6,13 +6,13 @@
 
 -- |
 -- Module:      Data.Time.Format.Typed
--- Copyright:   (c) 20021 Gautier DI FOLCO
+-- Copyright:   (c) 2021-2022 Gautier DI FOLCO
 -- License:     ISC
 -- Maintainer:  Gautier DI FOLCO <gautier.difolco@gmail.com>
 -- Stability:   experimental
 -- Portability: GHC
 --
--- Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-1.5.6.0/docs/Data-Aeson.html#g:7 ToJSON>.
+-- Provide a newtype to be used with DerivingVia to correctly derive <https://hackage.haskell.org/package/aeson-2.1.0.0/docs/Data-Aeson.html#g:7 ToJSON>.
 --
 -- As simple as:
 --
@@ -20,18 +20,27 @@
 -- @
 -- data W = W Int Int
 --   deriving stock (Generic)
---   deriving (ToJSON) via (ModernToJSON W)
+--   deriving (ToJSON) via (GenericallyToJSONToEncoding W)
 -- @
+--
+-- @
+-- data X = X Int Int
+--   deriving stock (Generic)
+--   deriving (ToJSON) via (GenericallyToEncoding X)
+-- @
 module Data.Aeson.ToJSON.Deriving
-  ( ModernToJSON (..),
+  ( GenericallyToJSONToEncoding (..),
+    GenericallyToEncoding (..),
     ToJSON (..),
   )
 where
 
 import Data.Aeson
+import Data.Maybe (fromMaybe)
 import GHC.Generics
 
-newtype ModernToJSON a = ModernToJSON {unModernToJSON :: a}
+-- | Deriving via 'Generic' 'toJSON' and 'toEncoding'.
+newtype GenericallyToJSONToEncoding a = GenericallyToJSONToEncoding {unGenericallyToJSONToEncoding :: a}
   deriving stock (Eq, Show, Generic)
 
 instance
@@ -40,7 +49,31 @@
     GToJSON' Value Zero (Rep a),
     GToJSON' Encoding Zero (Rep a)
   ) =>
-  ToJSON (ModernToJSON a)
+  ToJSON (GenericallyToJSONToEncoding a)
   where
-  toJSON = genericToJSON defaultOptions . unModernToJSON
-  toEncoding = genericToEncoding defaultOptions . unModernToJSON
+  toJSON =
+    genericToJSON defaultOptions
+      . unGenericallyToJSONToEncoding
+  toEncoding =
+    genericToEncoding defaultOptions
+      . unGenericallyToJSONToEncoding
+
+-- | Deriving via 'Generic' 'toEncoding' ('toJSON' is done via 'decode . encode').
+newtype GenericallyToEncoding a = GenericallyToEncoding {unGenericallyToEncoding :: a}
+  deriving stock (Eq, Show, Generic)
+
+instance
+  ( Generic a,
+    ToJSON a,
+    GToJSON' Encoding Zero (Rep a)
+  ) =>
+  ToJSON (GenericallyToEncoding a)
+  where
+  toJSON =
+    fromMaybe (error "GenericallyToEncoding.toJSON: unable to decode encoded Value")
+      . decode
+      . encode
+      . unGenericallyToEncoding
+  toEncoding =
+    genericToEncoding defaultOptions
+      . unGenericallyToEncoding
diff --git a/test/Data/Aeson/ToJSON/DerivingSpec.hs b/test/Data/Aeson/ToJSON/DerivingSpec.hs
--- a/test/Data/Aeson/ToJSON/DerivingSpec.hs
+++ b/test/Data/Aeson/ToJSON/DerivingSpec.hs
@@ -14,15 +14,26 @@
 
 data W = W Int Int
   deriving stock (Generic)
-  deriving (ToJSON) via (ModernToJSON W)
+  deriving (ToJSON) via (GenericallyToJSONToEncoding W)
 
-toEncodingDerived :: W -> Encoding
-toEncodingDerived = toEncoding
+data X = X Int Int
+  deriving stock (Generic)
+  deriving (ToJSON) via (GenericallyToEncoding X)
 
-toEncodingTarget :: W -> Encoding
-toEncodingTarget = genericToEncoding defaultOptions
+toEncodingDerivedBoth :: W -> Encoding
+toEncodingDerivedBoth = toEncoding
 
+toEncodingTargetBoth :: W -> Encoding
+toEncodingTargetBoth = genericToEncoding defaultOptions
+
+toEncodingDerivedOnly :: X -> Encoding
+toEncodingDerivedOnly = toEncoding
+
+toEncodingTargetOnly :: X -> Encoding
+toEncodingTargetOnly = genericToEncoding defaultOptions
+
 main :: IO ()
 main = pure ()
 
-inspect $ 'toEncodingDerived ==- 'toEncodingTarget
+inspect $ 'toEncodingDerivedBoth ==- 'toEncodingTargetBoth
+inspect $ 'toEncodingDerivedOnly ==- 'toEncodingTargetOnly
