diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,13 @@
 Changes
 =======
 
+Version 0.3
+-----------
+
+Update to Cabal-1.22.
+
+Change the format of on-disk JSON interface files.
+
 Version 0.2.4.4
 ---------------
 
diff --git a/haskell-packages.cabal b/haskell-packages.cabal
--- a/haskell-packages.cabal
+++ b/haskell-packages.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                haskell-packages
-version:             0.2.4.4
+version:             0.3
 synopsis:            Haskell suite library for package management and integration with Cabal
 description:         See <http://documentup.com/haskell-suite/haskell-packages>
 license:             MIT
@@ -41,7 +41,7 @@
     , optparse-applicative >= 0.11
     , aeson >= 0.6
     , bytestring >= 0.9
-    , Cabal >= 1.14 && <= 1.20.0.2
+    , Cabal == 1.22.*
     , deepseq
     , directory
     , filepath
diff --git a/src/Distribution/HaskellSuite/Compiler.hs b/src/Distribution/HaskellSuite/Compiler.hs
--- a/src/Distribution/HaskellSuite/Compiler.hs
+++ b/src/Distribution/HaskellSuite/Compiler.hs
@@ -28,7 +28,7 @@
 import Distribution.Simple.Compiler
 import Distribution.Simple.Utils
 import Distribution.Verbosity
-import Distribution.InstalledPackageInfo
+import Distribution.InstalledPackageInfo (InstalledPackageInfo, sourcePackageId)
 import Distribution.Package
 import Distribution.Text
 import Distribution.ModuleName (ModuleName)
diff --git a/src/Distribution/HaskellSuite/Modules.hs b/src/Distribution/HaskellSuite/Modules.hs
--- a/src/Distribution/HaskellSuite/Modules.hs
+++ b/src/Distribution/HaskellSuite/Modules.hs
@@ -102,7 +102,10 @@
           return $ Just i
 
 findModule'sPackage :: ModName n => Packages -> n -> Maybe InstalledPackageInfo
-findModule'sPackage pkgs m = find ((convertModuleName m `elem`) . exposedModules) pkgs
+findModule'sPackage pkgs m =
+  find
+    ((convertModuleName m `elem`) . map exposedName . exposedModules)
+    pkgs
 
 -- | A standard module monad transformer.
 --
diff --git a/src/Distribution/HaskellSuite/Packages.hs b/src/Distribution/HaskellSuite/Packages.hs
--- a/src/Distribution/HaskellSuite/Packages.hs
+++ b/src/Distribution/HaskellSuite/Packages.hs
@@ -57,6 +57,7 @@
   where
 
 import Data.Aeson
+import Data.Aeson.TH
 import Data.Aeson.Types
 import Control.Applicative
 import qualified Data.ByteString      as BS
@@ -352,74 +353,11 @@
 instance FromJSON InstalledPackageId where
   parseJSON = stdFromJSON
 
-instance ToJSON a => ToJSON (Info.InstalledPackageInfo_ a) where
-  toJSON i = object
-    [ "id" .= Info.installedPackageId i
-    , "name" .= Info.sourcePackageId i
-    , "license" .= Info.license i
-    , "copyright" .= Info.copyright i
-    , "maintainer" .= Info.maintainer i
-    , "author" .= Info.author i
-    , "stability" .= Info.stability i
-    , "homepage" .= Info.homepage i
-    , "package-url" .= Info.pkgUrl i
-    , "synopsis" .= Info.synopsis i
-    , "description" .= Info.description i
-    , "category" .= Info.category i
-    , "exposed" .= Info.exposed i
-    , "exposed-modules" .= Info.exposedModules i
-    , "hidden-modules" .= Info.hiddenModules i
-    , "trusted" .= Info.trusted i
-    , "import-dirs" .= Info.importDirs i
-    , "library-dirs" .= Info.libraryDirs i
-    , "hs-libraries" .= Info.hsLibraries i
-    , "extra-libraries" .= Info.extraLibraries i
-    , "extra-ghci-libraries" .= Info.extraGHCiLibraries i
-    , "include-dirs" .= Info.includeDirs i
-    , "includes" .= Info.includes i
-    , "depends" .= Info.depends i
-    , "hugs-options" .= Info.hugsOptions i
-    , "cc-options" .= Info.ccOptions i
-    , "ld-options" .= Info.ldOptions i
-    , "framework-dirs" .= Info.frameworkDirs i
-    , "frameworks" .= Info.frameworks i
-    , "haddock-interfaces" .= Info.haddockInterfaces i
-    , "haddock-html" .= Info.haddockHTMLs i
-    ]
+instance ToJSON PackageKey where
+  toJSON = stdToJSON
+instance FromJSON PackageKey where
+  parseJSON = stdFromJSON
 
--- FIXME this will break silently if the order of fields changes in the
--- future
-instance FromJSON a => FromJSON (Info.InstalledPackageInfo_ a) where
-  parseJSON (Object v) = Info.InstalledPackageInfo <$>
-    v .: "id" <*>
-    v .: "name" <*>
-    v .: "license" <*>
-    v .: "copyright" <*>
-    v .: "maintainer" <*>
-    v .: "author" <*>
-    v .: "stability" <*>
-    v .: "homepage" <*>
-    v .: "package-url" <*>
-    v .: "synopsis" <*>
-    v .: "description" <*>
-    v .: "category" <*>
-    v .: "exposed" <*>
-    v .: "exposed-modules" <*>
-    v .: "hidden-modules" <*>
-    v .: "trusted" <*>
-    v .: "import-dirs" <*>
-    v .: "library-dirs" <*>
-    v .: "hs-libraries" <*>
-    v .: "extra-libraries" <*>
-    v .: "extra-ghci-libraries" <*>
-    v .: "include-dirs" <*>
-    v .: "includes" <*>
-    v .: "depends" <*>
-    v .: "hugs-options" <*>
-    v .: "cc-options" <*>
-    v .: "ld-options" <*>
-    v .: "framework-dirs" <*>
-    v .: "frameworks" <*>
-    v .: "haddock-interfaces" <*>
-    v .: "haddock-html"
-  parseJSON _ = mzero
+deriveJSON defaultOptions ''Info.OriginalModule
+deriveJSON defaultOptions ''Info.ExposedModule
+deriveJSON defaultOptions ''Info.InstalledPackageInfo_
