diff --git a/disjoint-containers.cabal b/disjoint-containers.cabal
--- a/disjoint-containers.cabal
+++ b/disjoint-containers.cabal
@@ -1,5 +1,5 @@
 name: disjoint-containers
-version: 0.2.4
+version: 0.3.0
 synopsis: Disjoint containers
 description: Disjoint containers
 homepage: https://github.com/andrewthad/disjoint-containers#readme
@@ -20,9 +20,8 @@
     Data.DisjointMap
   build-depends:
       base >= 4.11.1 && < 5
-    , transformers >= 0.5 && < 0.6
+    , transformers >= 0.5 && < 0.7
     , containers >= 0.5 && < 0.7
-    , aeson >= 0.11 && < 1.5
   default-language: Haskell2010
 
 test-suite test
@@ -34,12 +33,11 @@
     , disjoint-containers
     , containers
     , QuickCheck >= 2.11
-    , quickcheck-classes >= 0.4.14.1
+    , quickcheck-classes >= 0.5
     , tasty
     , tasty-quickcheck
     , enum-types
     , quickcheck-enum-instances
-    , aeson
     , semigroups
   default-language: Haskell2010
 
diff --git a/src/Data/DisjointMap.hs b/src/Data/DisjointMap.hs
--- a/src/Data/DisjointMap.hs
+++ b/src/Data/DisjointMap.hs
@@ -57,7 +57,6 @@
 import Data.Bifunctor (first)
 import Data.Foldable (Foldable)
 import Data.Maybe (fromMaybe)
-import Data.Aeson (ToJSON(..),FromJSON(..))
 import Data.Foldable (foldlM)
 import qualified Data.Semigroup as SG
 import qualified Data.Map.Strict as M
@@ -96,16 +95,6 @@
 instance (Show k, Ord k, Show v) => Show (DisjointMap k v) where
   show = showDisjointSet
 
-instance (ToJSON k, ToJSON v) => ToJSON (DisjointMap k v) where
-  toJSON = toJSON . toSets
-
-instance (FromJSON k, FromJSON v, Ord k) => FromJSON (DisjointMap k v) where
-  parseJSON x = do
-    theSets <- parseJSON x
-    case fromSets theSets of
-      Nothing -> fail "the sets comprising the DisjointSet were not distinct"
-      Just s -> return s
-
 fromSets :: Ord k => [(Set k,v)] -> Maybe (DisjointMap k v)
 fromSets xs = case unionDistinctAll (map fst xs) of
   Nothing -> Nothing
@@ -395,6 +384,7 @@
 
 >>> import Data.Function ((&))
 >>> data Rating = Lowest | Low | Medium | High | Highest deriving (Eq,Ord,Show)
+>>> instance Semigroup Rating where (<>) = min
 >>> instance Monoid Rating where mempty = Highest; mappend = min
 
 Notice that the 'Monoid' instance combines ratings by choosing
diff --git a/src/Data/DisjointSet.hs b/src/Data/DisjointSet.hs
--- a/src/Data/DisjointSet.hs
+++ b/src/Data/DisjointSet.hs
@@ -56,7 +56,6 @@
 import Data.Set (Set)
 import Data.Semigroup (Semigroup)
 import Data.Maybe (fromMaybe)
-import Data.Aeson (ToJSON(..),FromJSON(..))
 import Data.Foldable (foldlM)
 import qualified Data.Semigroup
 import qualified Data.Map.Strict as M
@@ -77,16 +76,6 @@
 
 showInternal :: Show a => DisjointSet a -> String
 showInternal (DisjointSet p r) = show (RevealDisjointSet p r)
-
-instance ToJSON a => ToJSON (DisjointSet a) where
-  toJSON = toJSON . toSets
-
-instance (Ord a, FromJSON a) => FromJSON (DisjointSet a) where
-  parseJSON x = do
-    theSets <- parseJSON x
-    case fromSets theSets of
-      Nothing -> fail "the sets comprising the DisjointSet were not distinct"
-      Just s -> return s
 
 fromSets :: Ord a => [Set a] -> Maybe (DisjointSet a)
 fromSets xs = case unionDistinctAll xs of
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -2,7 +2,6 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
-import Data.Aeson (ToJSON,FromJSON)
 import Data.Bifunctor (first)
 import Data.DisjointMap (DisjointMap)
 import Data.DisjointSet (DisjointSet)
@@ -15,7 +14,7 @@
 import Data.Set (Set)
 import Data.Word
 import Test.QuickCheck
-import Test.QuickCheck.Classes (jsonLaws,Laws(..))
+import Test.QuickCheck.Classes (Laws(..))
 import Test.Tasty (TestTree,defaultMain,testGroup)
 
 import qualified Data.DisjointMap as DM
@@ -38,8 +37,6 @@
       ]
     , TQC.testProperty "singletons" propSingletons
     , TQC.testProperty "equivalences" propEquivalances
-    , lawsToTest (QCC.jsonLaws (Proxy :: Proxy (DisjointSet Word8)))
-    , lawsToTest (QCC.jsonLaws (Proxy :: Proxy (DisjointSet Word8)))
     , lawsToTest (QCC.monoidLaws (Proxy :: Proxy (DisjointSet Integer)))
     , lawsToTest (QCC.commutativeMonoidLaws (Proxy :: Proxy (DisjointSet Integer)))
     ]
@@ -50,7 +47,6 @@
       , TQC.testProperty "extra" propMapInsertUnionOrder
       ]
     , TQC.testProperty "insert" propMapInsertOrder
-    , lawsToTest (QCC.jsonLaws (Proxy :: Proxy (DisjointMap Word8 WrapWord8)))
     , lawsToTest (QCC.monoidLaws (Proxy :: Proxy (DisjointMap Word8 G)))
     , lawsToTest (QCC.commutativeMonoidLaws (Proxy :: Proxy (DisjointMap Word8 G)))
     ]
@@ -171,7 +167,7 @@
   shrink = mapMaybe DM.fromSets . shrink . DM.toSets
 
 newtype WrapWord8 = WrapWord8 Word8
-  deriving (FromJSON,ToJSON,Show,Eq,Arbitrary,Ord)
+  deriving (Show,Eq,Arbitrary,Ord)
 
 instance Semigroup WrapWord8 where
   WrapWord8 a <> WrapWord8 b = WrapWord8 (a + b)
