diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.3.0 (2022-02-15)
+  * Update to fortran-src 0.9.0
+  * Remove `Language.Fortran.Extras.ModFiles`. The functions are available
+    in fortran-src 0.9.0. `decodeModFiles` is renamed to
+    `Language.Fortran.Util.ModFile.decodeModFiles'`.
+
 ## 0.2.0 (2021-06-30)
   * Minor changes to the documentation
   * Minor changes to provided `withProgramAnalysis` interface to include verbose mode
diff --git a/fortran-src-extras.cabal b/fortran-src-extras.cabal
--- a/fortran-src-extras.cabal
+++ b/fortran-src-extras.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           fortran-src-extras
-version:        0.2.0
+version:        0.3.0
 synopsis:       Common functions and utils for fortran-src.
 description:    Various utility functions and orphan instances which may be useful when using fortran-src.
 category:       Language
@@ -28,7 +28,6 @@
       Language.Fortran.Extras
       Language.Fortran.Extras.Analysis
       Language.Fortran.Extras.Encoding
-      Language.Fortran.Extras.ModFiles
       Language.Fortran.Extras.ProgramFile
       Language.Fortran.Extras.RunOptions
       Language.Fortran.Extras.Test
@@ -44,8 +43,9 @@
     , bytestring >=0.10.8.1
     , containers >=0.5.0.0
     , directory >=1.3.0.2
+    , either >=5.0.0 && <5.1
     , filepath >=1.4.1.2
-    , fortran-src >=0.5.0
+    , fortran-src >=0.9.0
     , optparse-applicative >=0.14
     , text >=1.2.2.2
     , uniplate >=1.6.10
@@ -65,7 +65,8 @@
       hspec-discover:hspec-discover
   build-depends:
       base >=4.7 && <5
-    , fortran-src >=0.5.0
+    , either >=5.0.0 && <5.1
+    , fortran-src >=0.9.0
     , fortran-src-extras
     , hspec >=2.2 && <3
     , silently ==1.2.*
diff --git a/src/Language/Fortran/Extras.hs b/src/Language/Fortran/Extras.hs
--- a/src/Language/Fortran/Extras.hs
+++ b/src/Language/Fortran/Extras.hs
@@ -32,8 +32,7 @@
                                                as P
 import qualified Language.Fortran.Extras.Analysis
                                                as A
-import           Language.Fortran.Extras.ModFiles
-                                                ( decodeModFiles )
+import           Language.Fortran.Util.ModFile  ( decodeModFiles' )
 import           Language.Fortran.Extras.RunOptions
                                                 ( unwrapFortranSrcOptions
                                                 , getFortranSrcRunOptions
@@ -98,7 +97,7 @@
     _ -> if null pfIncludes
       then return $ A.versionedProgramAnalysis fVersion pfPath pfContents
       else do
-        pfMods <- decodeModFiles pfIncludes
+        pfMods <- decodeModFiles' pfIncludes
         return $ A.versionedProgramAnalysisWithMods fVersion
                                                     pfMods
                                                     pfPath
diff --git a/src/Language/Fortran/Extras/Analysis.hs b/src/Language/Fortran/Extras/Analysis.hs
--- a/src/Language/Fortran/Extras/Analysis.hs
+++ b/src/Language/Fortran/Extras/Analysis.hs
@@ -1,5 +1,5 @@
 -- | This module exposes functions obtaining both explicitly versioned
--- and implicitly versionied analyses of source code.
+-- and implicitly versioned analyses of source code.
 module Language.Fortran.Extras.Analysis
   ( versionedExpandedProgramAnalysis
   , versionedProgramAnalysis
diff --git a/src/Language/Fortran/Extras/ModFiles.hs b/src/Language/Fortran/Extras/ModFiles.hs
deleted file mode 100644
--- a/src/Language/Fortran/Extras/ModFiles.hs
+++ /dev/null
@@ -1,50 +0,0 @@
--- | This module provides functions for handling FORTRAN source modules.
-module Language.Fortran.Extras.ModFiles
-  ( isModFile
-  , decodeModFiles
-  )
-where
-
-import           Control.Monad                  ( foldM
-                                                , forM
-                                                )
-import           Data.Binary                    ( decodeFileOrFail )
-import           Language.Fortran.Util.ModFile  ( emptyModFile
-                                                , emptyModFiles
-                                                , ModFiles
-                                                , modFileSuffix
-                                                )
-import           Language.Fortran.Util.Files    ( rGetDirContents )
-import           System.FilePath                ( takeExtension
-                                                , (</>)
-                                                )
-
--- | Return TRUE iff the file extension indicates a module file.
-isModFile :: String -> Bool
-isModFile = (== modFileSuffix) . takeExtension
-
--- | Read suspected module files from a list of files and obtain the
--- 'Language.Fortran.Util.ModFiles' object populated by their contents.
---
--- TODO: almost equal to Language.Fortran.Analysis.ModGraph.decodeModFiles
-decodeModFiles :: [FilePath] -> IO ModFiles
-decodeModFiles = foldM
-  (\modFiles d -> do
-    modFileNames  <- filter isModFile `fmap` rGetDirContents d
-    addedModFiles <- forM modFileNames $ \modFileName -> do
-      eResult <- decodeFileOrFail (d </> modFileName)
-      case eResult of
-        Left (offset, msg) -> do
-          putStrLn
-            $  modFileName
-            ++ ": Error at offset "
-            ++ show offset
-            ++ ": "
-            ++ msg
-          return emptyModFile
-        Right modFile -> do
-          putStrLn $ modFileName ++ ": successfully parsed precompiled file."
-          return modFile
-    return $ addedModFiles ++ modFiles
-  )
-  emptyModFiles
diff --git a/src/Language/Fortran/Extras/ProgramFile.hs b/src/Language/Fortran/Extras/ProgramFile.hs
--- a/src/Language/Fortran/Extras/ProgramFile.hs
+++ b/src/Language/Fortran/Extras/ProgramFile.hs
@@ -2,21 +2,16 @@
 -- 'Language.Fortran.AST.ProgramFile' from a valid file name.
 module Language.Fortran.Extras.ProgramFile where
 
-import qualified Data.ByteString.Char8         as B
-import           Language.Fortran.AST           ( A0
-                                                , ProgramFile
-                                                )
-import           Language.Fortran.Version       ( deduceFortranVersion
-                                                , FortranVersion(..)
-                                                )
-import           Language.Fortran.Parser.Any    ( parserVersions
-                                                )
-import           Language.Fortran.ParserMonad   ( fromParseResult
-                                                , fromRight
-                                                )
-import           Language.Fortran.Parser.Fortran77
-                                                ( legacy77ParserWithIncludes )
-import           System.FilePath                ( takeDirectory )
+import qualified Data.ByteString.Char8      as B
+import           Language.Fortran.AST       ( A0
+                                            , ProgramFile
+                                            )
+import           Language.Fortran.Version   ( deduceFortranVersion
+                                            , FortranVersion(..)
+                                            )
+import qualified Language.Fortran.Parser    as Parser
+import           System.FilePath            ( takeDirectory )
+import           Data.Either.Combinators    ( fromRight' )
 
 -- | Obtain a 'ProgramFile' from a specific version of the parser with include
 -- statements expanded.
@@ -24,22 +19,16 @@
 -- TODO: cover all FortranVersions, instead of just Fortran77Legacy
 versionedExpandedProgramFile
   :: FortranVersion -> [String] -> String -> B.ByteString -> IO (ProgramFile A0)
-versionedExpandedProgramFile version importDirs path contents = case version of
-  Fortran77Legacy ->
-    let parserF b s =
-            fromRight
-              . fromParseResult
-              <$> legacy77ParserWithIncludes (takeDirectory path : importDirs) b s
-    in  parserF contents path
-  _ -> error ("Unsupported version: " ++ show version)
+versionedExpandedProgramFile v importDirs path contents =
+    case v of
+      Fortran77Legacy ->
+        Parser.f77lIncludes (takeDirectory path : importDirs) [] path contents
+      _ -> error $ "Unsupported version: " ++ show v
 
 -- | Obtain a 'ProgramFile' from a specific version of the parser.
 versionedProgramFile
   :: FortranVersion -> String -> B.ByteString -> ProgramFile A0
-versionedProgramFile version path contents =
-  let parserF = parserVersions version
-      pf      = fromRight $ parserF contents path -- Parse contents of file
-  in  pf
+versionedProgramFile v p c = fromRight' $ (Parser.byVer v) p c
 
 -- | Obtain a 'ProgramFile' from a parser version deduced by inspection
 -- of the file extension.
