diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0 (July 06, 2021)
+
+* Update fortran-src
+
 ## 1.0.1 (March 08, 2021)
 
 * Update fortran-src, verifiable-expressions versions
diff --git a/camfort.cabal b/camfort.cabal
--- a/camfort.cabal
+++ b/camfort.cabal
@@ -1,13 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: f20fef0bb3b68d25b23be09a7e5d81ecbc6c11a1fdbf47381807b55a5043774b
 
 name:           camfort
-version:        1.0.1
+version:        1.1.0
 synopsis:       CamFort - Cambridge Fortran infrastructure
 description:    CamFort is a tool for the analysis, transformation, verification of Fortran code.
 category:       Language
@@ -19,8 +17,9 @@
 copyright:      2012-2019 University of Cambridge
 license:        Apache-2.0
 license-file:   LICENSE
-tested-with:    GHC >= 8.6
 build-type:     Simple
+tested-with:
+    GHC >= 8.6
 extra-source-files:
     tests/fixtures/Specification/Stencils/example10.expected.f
     tests/fixtures/Specification/Stencils/example10.f
@@ -190,26 +189,26 @@
     , binary >=0.8.3.0 && <0.11
     , bytestring >=0.10 && <0.12
     , containers >=0.5.0.0 && <0.7
-    , deepseq >=1.4 && <1.5
+    , deepseq ==1.4.*
     , directory >=1.2 && <1.4
     , fgl >=5.6 && <5.8
-    , filepath >=1.4 && <1.5
-    , fortran-src >=0.4 && <0.5
-    , ghc-prim >=0.3.1.0 && <0.7
-    , hmatrix >=0.20 && <0.21
+    , filepath ==1.4.*
+    , fortran-src ==0.5.*
+    , ghc-prim >=0.3.1.0 && <0.8
+    , hmatrix ==0.20.*
     , lattices >=2.0.0 && <2.1
     , lens >=4.15.1 && <6
     , matrix >=0.2.2 && <0.4
     , mmorph >=1.0.9 && <2
     , mtl >=2.1 && <2.3
-    , parallel >=3.2 && <3.3
-    , pipes >=4.3 && <4.4
+    , parallel ==3.2.*
+    , pipes ==4.3.*
     , pretty >=1.1 && <2
     , sbv >=8.0 && <9
-    , singletons >=2.2 && <3
+    , singletons >=2.2 && <2.8
     , strict >=0.3.2 && <1
     , syb >=0.4 && <0.8
-    , syz >=0.2 && <0.3
+    , syz ==0.2.*
     , template-haskell >=2.11 && <3
     , text >=0.11.2.3 && <1.3
     , transformers >=0.5.5.0 && <0.6
@@ -226,7 +225,7 @@
       base >=4.6 && <5
     , camfort
     , directory >=1.2 && <2
-    , fortran-src >=0.4 && <0.5
+    , fortran-src ==0.5.*
     , optparse-applicative >=0.14 && <0.16
   default-language: Haskell2010
 
@@ -272,15 +271,15 @@
     , containers >=0.5.0.0 && <0.7
     , directory >=1.2 && <2
     , fgl >=5.6 && <5.8
-    , filepath >=1.4 && <1.5
-    , fortran-src >=0.4 && <0.5
-    , hmatrix >=0.20 && <0.21
+    , filepath ==1.4.*
+    , fortran-src ==0.5.*
+    , hmatrix ==0.20.*
     , hspec >=2.2 && <3
     , lattices >=2.0.0 && <2.1
-    , lens >=4.15.1 && <5
+    , lens >=4.15.1 && <5.1
     , mtl >=2.1 && <2.3
     , sbv >=8.0 && <9
-    , silently >=1.2 && <1.3
+    , silently ==1.2.*
     , temporary >=1.2.0.4 && <1.4
     , text >=0.11.2.3 && <1.3
     , time >=1.8 && <1.12
diff --git a/src/Camfort/Analysis/Simple.hs b/src/Camfort/Analysis/Simple.hs
--- a/src/Camfort/Analysis/Simple.hs
+++ b/src/Camfort/Analysis/Simple.hs
@@ -19,6 +19,7 @@
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE LambdaCase #-}
 
 {- Simple syntactic analysis on Fortran programs -}
 
@@ -53,6 +54,7 @@
 import Data.Graph.Inductive
 
 import qualified Language.Fortran.AST as F
+import qualified Language.Fortran.Analysis.SemanticTypes as FAS
 import qualified Language.Fortran.Util.Position as F
 import qualified Language.Fortran.Analysis as F
 import qualified Language.Fortran.Analysis.DataFlow as F
@@ -229,16 +231,19 @@
           candidates :: [F.Expression (F.Analysis a)]
           candidates = [ e | e@(F.ExpBinary _ _ op x y) <- universeBi (F.programUnitBody pu)
                            , op `elem` [F.EQ, F.NE]
-                           , Just (F.IDType (Just bt) _) <- [F.idType (F.getAnnotation x), F.idType (F.getAnnotation y)]
-                           , bt `elem` floatingPointTypes ]
+                           , Just (F.IDType (Just st) _) <- [F.idType (F.getAnnotation x), F.idType (F.getAnnotation y)]
+                           , isFloatingPointType st ]
           badEquality = nub [ (F.getName pu, atSpannedInFile file e) | e <- candidates ]
 
   let reports = map checkPU (universeBi pf'')
 
   return $!! mconcat reports
 
-floatingPointTypes :: [F.BaseType]
-floatingPointTypes = [F.TypeReal, F.TypeDoubleComplex, F.TypeComplex, F.TypeDoublePrecision]
+isFloatingPointType :: FAS.SemType -> Bool
+isFloatingPointType = \case
+  FAS.TReal    _ -> True
+  FAS.TComplex _ -> True
+  _              -> False
 
 instance Describe CheckFPReport where
   describeBuilder (CheckFPReport {..})
diff --git a/src/Camfort/Helpers/Syntax.hs b/src/Camfort/Helpers/Syntax.hs
--- a/src/Camfort/Helpers/Syntax.hs
+++ b/src/Camfort/Helpers/Syntax.hs
@@ -52,6 +52,7 @@
 
 import qualified Language.Fortran.AST as F
 import qualified Language.Fortran.Analysis as FA
+import qualified Language.Fortran.Analysis.SemanticTypes as FAS
 import qualified Language.Fortran.Util.Position as FU
 
 -- * Comparison and ordering
@@ -95,6 +96,9 @@
                  where pos0 = FU.Position 0 0 0 "" Nothing
 
 instance Eq (AnnotationFree F.BaseType) where
+    (AnnotationFree x) == (AnnotationFree y) = x == y
+
+instance Eq (AnnotationFree FAS.SemType) where
     (AnnotationFree x) == (AnnotationFree y) = x == y
 
 instance Eq (AnnotationFree FA.ConstructType) where
diff --git a/src/Camfort/Specification/Units/Analysis.hs b/src/Camfort/Specification/Units/Analysis.hs
--- a/src/Camfort/Specification/Units/Analysis.hs
+++ b/src/Camfort/Specification/Units/Analysis.hs
@@ -9,6 +9,7 @@
 -}
 
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE LambdaCase        #-}
 
 module Camfort.Specification.Units.Analysis
   ( UnitAnalysis
@@ -54,6 +55,7 @@
 import qualified Language.Fortran.AST as F
 import           Language.Fortran.Analysis (constExp, varName, srcName)
 import qualified Language.Fortran.Analysis as FA
+import qualified Language.Fortran.Analysis.SemanticTypes as FAS
 import qualified Language.Fortran.Analysis.BBlocks as FAB
 import qualified Language.Fortran.Analysis.DataFlow as FAD
 import           Language.Fortran.Parser.Utils (readReal, readInteger)
@@ -183,8 +185,8 @@
 -- Specifically handle variables
 insertUndeterminedUnitVar :: DeclMap -> F.Expression UA -> UnitSolver (F.Expression UA)
 insertUndeterminedUnitVar dmap v@(F.ExpValue _ _ (F.ValVariable _))
-  | Just (FA.IDType { FA.idVType = Just bty }) <- FA.idType (F.getAnnotation v)
-  , bty `elem` acceptableTypes = do
+  | Just (FA.IDType { FA.idVType = Just sty }) <- FA.idType (F.getAnnotation v)
+  , isAcceptableType sty = do
   let vname = varName v
   let sname = srcName v
   let unit  = toUnitVar dmap (vname, sname)
@@ -202,8 +204,12 @@
       _                                                    -> UnitVar (vname, sname)
 
 -- Insert undetermined units annotations on the following types of variables.
-acceptableTypes :: [F.BaseType]
-acceptableTypes = [F.TypeReal, F.TypeDoublePrecision, F.TypeComplex, F.TypeDoubleComplex, F.TypeInteger]
+isAcceptableType :: FAS.SemType -> Bool
+isAcceptableType = \case
+  FAS.TReal    _ -> True
+  FAS.TComplex _ -> True
+  FAS.TInteger _ -> True
+  _              -> False
 
 --------------------------------------------------
 
diff --git a/src/Camfort/Transformation/CommonBlockElim.hs b/src/Camfort/Transformation/CommonBlockElim.hs
--- a/src/Camfort/Transformation/CommonBlockElim.hs
+++ b/src/Camfort/Transformation/CommonBlockElim.hs
@@ -18,6 +18,7 @@
 {-# LANGUAGE PolyKinds #-}
 {-# LANGUAGE TypeSynonymInstances #-}
 {-# LANGUAGE MonoLocalBinds #-}
+{-# LANGUAGE LambdaCase #-}
 
 module Camfort.Transformation.CommonBlockElim
   ( commonElimToModules
@@ -39,6 +40,7 @@
 import           Data.Void
 import qualified Language.Fortran.AST as F
 import qualified Language.Fortran.Analysis as FA
+import qualified Language.Fortran.Analysis.SemanticTypes as FAS
 import qualified Language.Fortran.Analysis.Renaming as FAR
 import qualified Language.Fortran.Analysis.Types as FAT
 import qualified Language.Fortran.ParserMonad as PM
@@ -50,7 +52,7 @@
 -- Tuple of:
 --     * a (possible) common block name
 --     * map from names to their types
-type TypeInfo = (F.BaseType, FA.ConstructType)
+type TypeInfo = (FAS.SemType, FA.ConstructType)
 type TCommon p = (Maybe F.Name, [(F.Name, TypeInfo)])
 
 -- Typed and "located" common block representation
@@ -454,19 +456,19 @@
     modname = commonName name
     path = dir ++ modname ++ ".f90"
     r = "Creating module " ++ modname ++ " at " ++ path ++ "\n"
-    mod = mkModule modname varTys modname
+    mod = mkModule (F.miVersion meta) modname varTys modname
 
-mkModule :: String -> [(F.Name, TypeInfo)] -> String -> F.ProgramUnit A
-mkModule name vtys fname =
+mkModule :: PM.FortranVersion -> String -> [(F.Name, TypeInfo)] -> String -> F.ProgramUnit A
+mkModule v name vtys fname =
     F.PUModule a sp (caml fname) decls Nothing
   where
     a = unitAnnotation { refactored = Just loc, newNode = True }
     loc = FU.Position 0 0 0 "" Nothing
     sp = FU.SrcSpan loc loc
     toDeclBlock (v, t) = F.BlStatement a sp Nothing (toStmt (v, t))
-    toStmt (v, (bt, ct)) = F.StDeclaration a sp (toTypeSpec bt) attrs (toDeclarator (v, ct))
+    toStmt (v, (st, ct)) = F.StDeclaration a sp (typespec st) attrs (toDeclarator (v, ct))
     attrs = Just $ F.AList a sp [F.AttrSave a sp]
-    toTypeSpec t = F.TypeSpec a sp t Nothing
+    typespec = FAS.recoverSemTypeTypeSpec a sp v
     toDeclarator (v, FA.CTVariable) = F.AList a sp
        [F.DeclVariable a sp
           (F.ExpValue a sp (F.ValVariable (caml name ++ "_" ++ v))) Nothing Nothing]
