diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## [0.4.1.0] - 2024-08-03
+
+### Changed
+
+* Moved the `ToJSON (Autodocodec a)` and `FromJSON (Autodocodec a)` instances so they are no longer orphans.
+
 ## [0.4.0.0] - 2024-07-26
 
 This is technically a breaking change but it's unlikely that you'll need to
diff --git a/autodocodec.cabal b/autodocodec.cabal
--- a/autodocodec.cabal
+++ b/autodocodec.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           autodocodec
-version:        0.4.0.0
+version:        0.4.1.0
 synopsis:       Self-documenting encoder and decoder
 homepage:       https://github.com/NorfairKing/autodocodec#readme
 bug-reports:    https://github.com/NorfairKing/autodocodec/issues
diff --git a/src/Autodocodec/Aeson/Decode.hs b/src/Autodocodec/Aeson/Decode.hs
--- a/src/Autodocodec/Aeson/Decode.hs
+++ b/src/Autodocodec/Aeson/Decode.hs
@@ -2,7 +2,7 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE PartialTypeSignatures #-}
-{-# OPTIONS_GHC -fno-warn-partial-type-signatures -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}
 
 module Autodocodec.Aeson.Decode
   ( -- * Decoding JSON Values
@@ -21,7 +21,6 @@
 import qualified Autodocodec.Aeson.Compat as Compat
 import Autodocodec.Class
 import Autodocodec.Codec
-import Autodocodec.DerivingVia
 import Control.Monad
 import Data.Aeson as JSON
 import Data.Aeson.Types as JSON
@@ -179,6 +178,3 @@
       OptionalKeyWithOmittedDefaultCodec k c defaultValue mDoc -> go value $ OptionalKeyWithDefaultCodec k c defaultValue mDoc
       PureCodec a -> pure a
       ApCodec ocf oca -> go (value :: JSON.Object) ocf <*> go (value :: JSON.Object) oca
-
-instance (HasCodec a) => JSON.FromJSON (Autodocodec a) where
-  parseJSON = fmap Autodocodec <$> parseJSONViaCodec
diff --git a/src/Autodocodec/Aeson/Encode.hs b/src/Autodocodec/Aeson/Encode.hs
--- a/src/Autodocodec/Aeson/Encode.hs
+++ b/src/Autodocodec/Aeson/Encode.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE PartialTypeSignatures #-}
-{-# OPTIONS_GHC -fno-warn-partial-type-signatures -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-partial-type-signatures #-}
 
 module Autodocodec.Aeson.Encode
   ( -- * Encoding JSON Values
@@ -21,7 +21,6 @@
 import qualified Autodocodec.Aeson.Compat as Compat
 import Autodocodec.Class
 import Autodocodec.Codec
-import Autodocodec.DerivingVia
 import Data.Aeson (toJSON)
 import qualified Data.Aeson as JSON
 import qualified Data.Aeson.Encoding as JSON
@@ -146,7 +145,3 @@
         Right a2 -> go a2 c2
       CommentCodec _ c -> go a c
       ReferenceCodec _ c -> go a c
-
-instance (HasCodec a) => JSON.ToJSON (Autodocodec a) where
-  toJSON = toJSONViaCodec . unAutodocodec
-  toEncoding = toEncodingViaCodec . unAutodocodec
diff --git a/src/Autodocodec/DerivingVia.hs b/src/Autodocodec/DerivingVia.hs
--- a/src/Autodocodec/DerivingVia.hs
+++ b/src/Autodocodec/DerivingVia.hs
@@ -1,5 +1,10 @@
 module Autodocodec.DerivingVia where
 
+import Autodocodec.Aeson.Decode (parseJSONViaCodec)
+import Autodocodec.Aeson.Encode (toEncodingViaCodec, toJSONViaCodec)
+import Autodocodec.Class (HasCodec)
+import qualified Data.Aeson as JSON
+
 -- | 'Autodocodec' is a wrapper to provide codec-based deriving strategies.
 --
 -- === Example usage
@@ -15,3 +20,10 @@
 -- >         <$> requiredField "one" "first field" .= viaOne
 -- >         <*> requiredField "two" "second field" .= viaTwo
 newtype Autodocodec a = Autodocodec {unAutodocodec :: a}
+
+instance (HasCodec a) => JSON.ToJSON (Autodocodec a) where
+  toJSON = toJSONViaCodec . unAutodocodec
+  toEncoding = toEncodingViaCodec . unAutodocodec
+
+instance (HasCodec a) => JSON.FromJSON (Autodocodec a) where
+  parseJSON = fmap Autodocodec <$> parseJSONViaCodec
