diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,4 +1,7 @@
-unreleased
+0.1.3
+
+* support ghc from 8.6 to 9.6 and drop older versions
+* fix handling of indirect objects in Font Descriptor (#76)
 
 0.1.2
 
diff --git a/lib/Pdf/Document/FontDict.hs b/lib/Pdf/Document/FontDict.hs
--- a/lib/Pdf/Document/FontDict.hs
+++ b/lib/Pdf/Document/FontDict.hs
@@ -285,32 +285,40 @@
         , fdCharSet = charSet
         }
   where
-    required = requiredInDict "FontDescriptor"
-    optional = optionalInDict "FontDescriptor"
+    required = requiredInDict pdf "FontDescriptor"
+    optional = optionalInDict pdf "FontDescriptor"
     nameValue' = fmap Name.toByteString . nameValue
 
 -- | Parse a value from a required field of a dictionary. This will
 -- raise an exception if a) the field is not present or b) the field
 -- value has a false type.
-requiredInDict :: String -- ^ a context for a failure notice
+requiredInDict :: Pdf    -- ^ in case the field is a reference
+               -> String -- ^ a context for a failure notice
                -> Name   -- ^ name of dictionary field
                -> (Object -> Maybe a) -- ^ function for type-casting the object
                -> Dict                -- ^ the dictionary
                -> IO a
-requiredInDict context key typeFun =
-  join .
-  sure . (`notice` (context ++ ": " ++ msg ++ " should exist")) .
-  fmap (sure . (`notice` (context ++ ": " ++ msg ++ " type failure")) . typeFun) .
-  HashMap.lookup key
+requiredInDict pdf context key typeFun dict = do
+  case HashMap.lookup key dict of
+    Nothing -> throwIO $ Corrupted (context ++ ": " ++ msg ++ " should exist") []
+    Just oIn -> do
+      o <- deref pdf oIn
+      case typeFun o of
+        Nothing -> throwIO $ Corrupted (context ++ ": " ++ msg ++ " type failure") []
+        Just v -> return v
   where
     msg = Text.unpack $ decodeUtf8With ignore $ Name.toByteString key
 
 -- | Parse a value from an optional field of a dictionary. This will
 -- raise an exception if the field value has a false type.
-optionalInDict :: String -> Name -> (Object -> Maybe a) -> Dict -> IO (Maybe a)
-optionalInDict context key typeFun =
-  maybe (return Nothing) (liftM Just) .
-  fmap (sure . (`notice` (context ++ ": " ++ msg ++ " type failure")) . typeFun) .
-  HashMap.lookup key
+optionalInDict :: Pdf -> String -> Name -> (Object -> Maybe a) -> Dict -> IO (Maybe a)
+optionalInDict pdf context key typeFun dict =
+  case HashMap.lookup key dict of
+    Nothing -> return Nothing
+    Just oIn -> do
+      o <- deref pdf oIn
+      case typeFun o of
+        Nothing -> throwIO $ Corrupted (context ++ ": " ++ msg ++ " type failure") []
+        Just v -> return $ Just v
   where
     msg = Text.unpack $ decodeUtf8With ignore $ Name.toByteString key
diff --git a/pdf-toolbox-document.cabal b/pdf-toolbox-document.cabal
--- a/pdf-toolbox-document.cabal
+++ b/pdf-toolbox-document.cabal
@@ -1,5 +1,5 @@
 name:                pdf-toolbox-document
-version:             0.1.2
+version:             0.1.3
 synopsis:            A collection of tools for processing PDF files.
 license:             BSD3
 license-file:        LICENSE
@@ -36,7 +36,7 @@
                        Pdf.Document.Internal.Types
                        Pdf.Document.Internal.Util
   other-modules:       Prelude
-  build-depends:       base >= 4.5 && < 5,
+  build-depends:       base >= 4.9 && < 5,
                        containers,
                        text,
                        bytestring,
diff --git a/test/test.hs b/test/test.hs
--- a/test/test.hs
+++ b/test/test.hs
@@ -50,6 +50,18 @@
         txt `shouldBe` Just
           "\nHello World!!!\nXObject is here\nnested XObject is here"
 
+  describe "FontDescription with indirect fields" $ do
+    it "should have correct text" $ do
+      withPdfFile "test/files/indirect_font_desc_fields.pdf" $ \pdf -> do
+        doc <- document pdf
+        catalog <- documentCatalog doc
+        root <- catalogPageNode catalog
+        page <- pageNodePageByNum root 0
+        -- here timeout breaks infinite loop in case of a bug
+        txt <- timeout 5000000 $ pageExtractText page
+        txt `shouldBe` Just
+          "\nHello World!!!\nXObject is here\nnested XObject is here"
+
 -- | Generate simple PDF file for tests
 withSimpleFile :: (Handle -> IO ()) -> IO ()
 withSimpleFile action = do
