diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,8 @@
+0.0.5.0
+
+* add support for multiple bfrange and bfchars sections in CMap
+* support spaces inside hex numbers in CMap
+
 0.0.4.0
 
 * switch to errors-2.0
diff --git a/lib/Pdf/Toolbox/Content/Parser.hs b/lib/Pdf/Toolbox/Content/Parser.hs
--- a/lib/Pdf/Toolbox/Content/Parser.hs
+++ b/lib/Pdf/Toolbox/Content/Parser.hs
@@ -4,7 +4,8 @@
 module Pdf.Toolbox.Content.Parser
 (
   parseContentStream,
-  readNextOperator
+  readNextOperator,
+  parseContent
 )
 where
 
diff --git a/lib/Pdf/Toolbox/Content/UnicodeCMap.hs b/lib/Pdf/Toolbox/Content/UnicodeCMap.hs
--- a/lib/Pdf/Toolbox/Content/UnicodeCMap.hs
+++ b/lib/Pdf/Toolbox/Content/UnicodeCMap.hs
@@ -14,6 +14,7 @@
 import Data.Monoid
 import Data.Functor
 import Data.Char
+import qualified Data.List as List
 import Data.Map (Map)
 import qualified Data.Map as Map
 import Data.ByteString (ByteString)
@@ -89,7 +90,13 @@
 
 charsParser :: Parser (Map Int Text)
 charsParser = do
-  n <- P.option 0 $ skipTillParser $ do
+  combineChars <$> P.many' charsParser'
+  where
+  combineChars = List.foldl' Map.union Map.empty
+
+charsParser' :: Parser (Map Int Text)
+charsParser' = do
+  n <- skipTillParser $ do
     n <- P.decimal
     P.skipSpace
     _ <- P.string "beginbfchar"
@@ -108,8 +115,16 @@
 --
 -- Array ranges are converted to char map
 rangesParser :: Parser ([(Int, Int, Char)], Map Int Text)
-rangesParser = do
-  n <- P.option (0 :: Int) $ skipTillParser $ do
+rangesParser =
+  combineRanges <$> P.many' rangesParser'
+  where
+  combineRanges = List.foldl' combineRange ([], Map.empty)
+  combineRange (ranges, rmap) (ranges', rmap') =
+    (ranges ++ ranges', Map.union rmap rmap')
+
+rangesParser' :: Parser ([(Int, Int, Char)], Map Int Text)
+rangesParser' = do
+  n <- skipTillParser $ do
     n <- P.decimal
     P.skipSpace
     void $ P.string "beginbfrange"
@@ -153,7 +168,8 @@
 parseHex :: Parser ByteString
 parseHex = do
   void $ P.char '<'
-  res <- P.takeTill (== '>') >>= fromHex
+  -- hex can contain spaces, lets filter them out
+  res <- P.takeTill (== '>') >>= fromHex . BS.filter (/= 32)
   void $ P.char '>'
   return res
 
diff --git a/pdf-toolbox-content.cabal b/pdf-toolbox-content.cabal
--- a/pdf-toolbox-content.cabal
+++ b/pdf-toolbox-content.cabal
@@ -1,5 +1,5 @@
 name:                pdf-toolbox-content
-version:             0.0.4.0
+version:             0.0.5.0
 synopsis:            A collection of tools for processing PDF files
 license:             BSD3
 license-file:        LICENSE
