diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,8 @@
+# 0.2.0.0
+
+- Compatibility with generic-data 0.4.0.0
+- Removed `onData` (moved to generic-data 0.4.0.0).
+
+# 0.1.0.0
+
+Initial version
diff --git a/generic-data-surgery.cabal b/generic-data-surgery.cabal
--- a/generic-data-surgery.cabal
+++ b/generic-data-surgery.cabal
@@ -1,5 +1,5 @@
 name:                generic-data-surgery
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Surgery for generic data types
 description:
   Transform data types before passing them to generic functions.
@@ -11,10 +11,10 @@
 copyright:           2018 Li-yao Xia
 category:            Other
 build-type:          Simple
-extra-source-files:  README.md
+extra-source-files:  README.md, CHANGELOG.md
 cabal-version:       >=1.10
 tested-with:
-  GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.6.2
+  GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.6.3
 
 library
   hs-source-dirs:      src
@@ -40,20 +40,6 @@
   ghc-options: -Wall
   default-language: Haskell2010
   type: exitcode-stdio-1.0
-
-test-suite lens-surgery-test
-  hs-source-dirs: test
-  main-is: lens-surgery.hs
-  build-depends:
-    tasty,
-    tasty-hunit,
-    generic-data-surgery,
-    generic-lens,
-    base
-  ghc-options: -Wall
-  default-language: Haskell2010
-  type: exitcode-stdio-1.0
-  buildable: False
 
 source-repository head
   type:     git
diff --git a/src/Generic/Data/Surgery.hs b/src/Generic/Data/Surgery.hs
--- a/src/Generic/Data/Surgery.hs
+++ b/src/Generic/Data/Surgery.hs
@@ -15,35 +15,26 @@
 -- Note that constructors and fields are indexed from zero.
 
 module Generic.Data.Surgery
-  ( Data
+  ( -- * Surgeries from generic-data and generic-lens
+    --
+    -- | The library <https://hackage.haskell.org/package/generic-data generic-data>
+    -- has a "Generic.Data.Microsurgery" module (since 0.4.0.0) to modify some
+    -- metadata of generic representations.
+    --
+    -- See also the documentation in that module about surgeries using
+    -- <https://hackage.haskell.org/package/generic-data generic-lens>,
+    -- when you want to /update/ fields, rather than remove or insert them.
 
+    -- * Synthetic data types
+
+    Data
+
   , toData
   , fromData
-  , onData
 
-    --   Microsurgery
-
-    --   One common and simple situation is to wrap a couple of fields in some
-    -- newtype. You can leverage the @generic-lens@ library with the three
-    -- functions below.
-    --
-    -- @
-    -- over :: ASetter s t a b -> (a -> b) -> s -> t  -- from lens or microlens
-    -- field :: HasField s t a b => Lens s t a b      -- from generic-lens
-    -- @
-    --
-    -- For example, to wrap a field named @hidden@ in a newtype like
-    -- 'Generic.Data.Opaque' in some record type @R@:
-    --
-    -- @
-    -- 'onData' (over (field @"hidden") 'Generic.Data.Opaque') . 'toData'
-    --   :: R -> Data _ _
-    -- @
-    --
-    -- The result is a type, that from the point of view of "GHC.Generics"
-    -- looks just like @R@ but with the field @hidden@ wrapped.
+    -- * Surgeries
 
-    -- * Getting into the operating room
+    -- ** Getting into the operating room
   , OR
 
   , toOR
@@ -53,8 +44,6 @@
 
   , OROf
 
-    -- * Surgeries
-
     -- ** Unnamed fields
   , removeCField
   , insertCField
@@ -117,6 +106,6 @@
   , ModConstrT
   ) where
 
-import Generic.Data.Internal.Data
+import Generic.Data.Types (Data(..), toData, fromData)
 
 import Generic.Data.Surgery.Internal
diff --git a/src/Generic/Data/Surgery/Internal.hs b/src/Generic/Data/Surgery/Internal.hs
--- a/src/Generic/Data/Surgery/Internal.hs
+++ b/src/Generic/Data/Surgery/Internal.hs
@@ -1041,29 +1041,3 @@
 instance (t ~ (a, b, c, d, e))       => IsTuple 5 t
 instance (t ~ (a, b, c, d, e, f))    => IsTuple 6 t
 instance (t ~ (a, b, c, d, e, f, g)) => IsTuple 7 t
-
--- | Unify the "spines" of two generic representations (the "spine" is
--- everything except the field types).
-class UnifyRep (f :: k -> *) (g :: k -> *)
-instance (g' ~ M1 D c g, UnifyRep f g) => UnifyRep (M1 D c f) g'
-instance (g' ~ M1 C c g, UnifyRep f g)
-  => UnifyRep (M1 C c f) g'
-instance (g' ~ M1 S c g, UnifyRep f g) => UnifyRep (M1 S c f) g'
-instance (g' ~ (g1 :+: g2), UnifyRep f1 g1, UnifyRep f2 g2)
-  => UnifyRep (f1 :+: f2) g'
-instance (g' ~ (g1 :*: g2), UnifyRep f1 g1, UnifyRep f2 g2)
-  => UnifyRep (f1 :*: f2) g'
-instance (g' ~ K1 i b) => UnifyRep (K1 i a) g'
-instance (g' ~ U1) => UnifyRep U1 g'
-instance (g' ~ V1) => UnifyRep V1 g'
-
--- | Can be used with @generic-lens@ for type-changing field updates.
---
--- A specialization of the identity function to be used to fix types
--- of functions using 'Data' as input or output, unifying the "spines" of input
--- and output generic representations (the "spine" is everything except field
--- types, which may thus change).
-onData
-  :: (UnifyRep (Rep a) (Rep b), UnifyRep (Rep a) (Rep b))
-  => p a b -> p a b
-onData = id
diff --git a/test/lens-surgery.hs b/test/lens-surgery.hs
deleted file mode 100644
--- a/test/lens-surgery.hs
+++ /dev/null
@@ -1,30 +0,0 @@
-{-# LANGUAGE
-    DataKinds,
-    DeriveGeneric,
-    TypeApplications,
-    TypeOperators #-}
-
-{-# OPTIONS_GHC -Wno-unused-top-binds #-}
-
-import GHC.Generics (Generic)
-import Test.Tasty
-import Test.Tasty.HUnit
-
-import Data.Generics.Product (field)
-import Data.Generics.Internal.VL.Lens
-
-import Generic.Data.Surgery (onData, toData)
-
-data T a = R { f :: a } deriving (Generic, Show)
-
-main :: IO ()
-main = defaultMain test
-
-show' :: Show (f ()) => f () -> String
-show' = show
-
-test :: TestTree
-test = testGroup "lens-surgery"
-  [ testCase "update" $
-      "R {f = 42}" @?= (show' . onData (field @"f" .~ (42 :: Int)) . toData) (R ())
-  ]
