diff --git a/hxt.cabal b/hxt.cabal
--- a/hxt.cabal
+++ b/hxt.cabal
@@ -1,6 +1,6 @@
 -- arch-tag: Haskell XML Toolbox main description file
 Name:           hxt
-Version:        9.1.0
+Version:        9.1.1
 Synopsis:       A collection of tools for processing XML with Haskell.
 Description:    The Haskell XML Toolbox bases on the ideas of HaXml and HXML,
                 but introduces a more general approach for processing XML with Haskell.
diff --git a/src/Control/Arrow/IOListArrow.hs b/src/Control/Arrow/IOListArrow.hs
--- a/src/Control/Arrow/IOListArrow.hs
+++ b/src/Control/Arrow/IOListArrow.hs
@@ -145,7 +145,7 @@
 instance ArrowNF IOLA where
     rnfA (IOLA f)       = IOLA $ \ x -> do
                                         res <- f x
-                                        deepseq res $ return res
+                                        res `deepseq` return res
 
 
 instance ArrowWNF IOLA
diff --git a/src/Control/Arrow/IOStateListArrow.hs b/src/Control/Arrow/IOStateListArrow.hs
--- a/src/Control/Arrow/IOStateListArrow.hs
+++ b/src/Control/Arrow/IOStateListArrow.hs
@@ -42,7 +42,9 @@
 import Control.Exception                ( SomeException
                                         , try
                                         )
-
+{-
+import qualified Debug.Trace as T
+-}
 -- ------------------------------------------------------------
 
 -- | list arrow combined with a state and the IO monad
@@ -218,10 +220,16 @@
 
 instance ArrowNavigatableTree (IOSLA s)
 
-instance (NFData s) => ArrowNF (IOSLA s) where
+instance ArrowNF (IOSLA s) where
     rnfA (IOSLA f)      = IOSLA $ \ s x -> do
                                            res <- f s x
-                                           deepseq res $ return res
+                                           ( -- T.trace "start rnfA for IOSLA" $
+                                             snd res
+                                             )
+                                             `deepseq`
+                                              return ( -- T.trace "end rnfA for IOSLA" $
+                                                       res
+                                                     )
 
 instance ArrowWNF (IOSLA s)
 
diff --git a/src/Control/Arrow/ListArrow.hs b/src/Control/Arrow/ListArrow.hs
--- a/src/Control/Arrow/ListArrow.hs
+++ b/src/Control/Arrow/ListArrow.hs
@@ -118,7 +118,7 @@
 instance ArrowNF LA where
     rnfA (LA f)         = LA $ \ x -> let res = f x
                                       in
-                                      deepseq res res
+                                      res `deepseq` res
 
 instance ArrowWNF LA
 
diff --git a/src/Control/Arrow/StateListArrow.hs b/src/Control/Arrow/StateListArrow.hs
--- a/src/Control/Arrow/StateListArrow.hs
+++ b/src/Control/Arrow/StateListArrow.hs
@@ -174,10 +174,10 @@
 
 instance ArrowNavigatableTree (SLA s)
 
-instance (NFData s) => ArrowNF (SLA s) where
+instance ArrowNF (SLA s) where
     rnfA (SLA f)        = SLA $ \ s x -> let res = f s x
                                          in
-                                         deepseq res res
+                                         snd res `deepseq`  res
 
 instance ArrowWNF (SLA s)
 
diff --git a/src/Text/XML/HXT/Arrow/Binary.hs b/src/Text/XML/HXT/Arrow/Binary.hs
--- a/src/Text/XML/HXT/Arrow/Binary.hs
+++ b/src/Text/XML/HXT/Arrow/Binary.hs
@@ -25,32 +25,47 @@
 import           Control.Arrow.ArrowList
 import           Control.Arrow.ArrowIO
 
-import           Control.DeepSeq
-
 import           Data.Binary
 import qualified Data.ByteString.Lazy   as B
 
+import           System.IO              ( openBinaryFile
+                                        , hClose
+                                        , IOMode(..)
+                                        )
+
 import           Text.XML.HXT.Arrow.XmlState.ErrorHandling
 import           Text.XML.HXT.Arrow.XmlState.TypeDefs
 
 -- ------------------------------------------------------------
 
-readBinaryValue         :: (NFData a, Binary a) => String -> IOStateArrow s b a
-readBinaryValue file    = flip decodeBinaryValue file $< getSysVar theBinaryDeCompression
+readBinaryValue         :: (Binary a) => String -> IOStateArrow s b a
+readBinaryValue file
+                        = (uncurry $ decodeBinaryValue file)
+                          $< getSysVar ( theStrictDeserialize
+                                         .&&&.
+                                         theBinaryDeCompression
+                                       )
 
 -- | Read a serialied value from a file, optionally decompress it and decode the value
 -- In case of an error, the error message is issued and the arrow fails
 
-decodeBinaryValue         :: (NFData a, Binary a) => DeCompressionFct -> String -> IOStateArrow s b a
-decodeBinaryValue decompress file
-                          = arrIO0 ( do
-                                     r <- dec
-                                     rnf r `seq` return r
-                                   )
+decodeBinaryValue         :: (Binary a) => String -> Bool -> DeCompressionFct -> IOStateArrow s b a
+decodeBinaryValue file strict decompress
+                          = arrIO0 dec
                             `catchA`
                             issueExc "readBinaryValue"
     where
-    dec                 = B.readFile file >>= return . decode . decompress
+    dec                 = ( if strict
+                            then readItAll
+                            else B.readFile file
+                          ) >>= return . decode . decompress
+    readItAll           = do
+                          h <- openBinaryFile file ReadMode
+                          c <- B.hGetContents h
+                          B.length c `seq`
+                           do
+                           hClose h
+                           return c	-- hack: force reading whole file and close it immediately
 
 -- | Serialize a value, optionally compress it, and write it to a file.
 -- In case of an error, the error message is issued and the arrow fails
diff --git a/src/Text/XML/HXT/Arrow/XmlState.hs b/src/Text/XML/HXT/Arrow/XmlState.hs
--- a/src/Text/XML/HXT/Arrow/XmlState.hs
+++ b/src/Text/XML/HXT/Arrow/XmlState.hs
@@ -115,6 +115,7 @@
     , withCompression
     , withCheckNamespaces
     , withDefaultBaseURI
+    , withStrictDeserialize
     , withEncodingErrors
     , withErrors
     , withFileMimeType
diff --git a/src/Text/XML/HXT/Arrow/XmlState/RunIOStateArrow.hs b/src/Text/XML/HXT/Arrow/XmlState/RunIOStateArrow.hs
--- a/src/Text/XML/HXT/Arrow/XmlState/RunIOStateArrow.hs
+++ b/src/Text/XML/HXT/Arrow/XmlState/RunIOStateArrow.hs
@@ -163,6 +163,7 @@
                                    , xioDocumentAge             = 0
                                    , xioCache404Err             = False
                                    , xioCacheRead               = dummyCacheRead
+                                   , xioStrictDeserialize       = False
                                    }
 
 -- ------------------------------------------------------------
diff --git a/src/Text/XML/HXT/Arrow/XmlState/SystemConfig.hs b/src/Text/XML/HXT/Arrow/XmlState/SystemConfig.hs
--- a/src/Text/XML/HXT/Arrow/XmlState/SystemConfig.hs
+++ b/src/Text/XML/HXT/Arrow/XmlState/SystemConfig.hs
@@ -230,6 +230,11 @@
 withCompression                 :: (CompressionFct, DeCompressionFct) -> SysConfig
 withCompression                 = setS (theBinaryCompression .&&&. theBinaryDeCompression)
 
+-- | Strict input for deserialization of binary data
+
+withStrictDeserialize           :: Bool -> SysConfig
+withStrictDeserialize           = setS theStrictDeserialize
+
 -- ------------------------------------------------------------
 
 yes                             :: Bool
diff --git a/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs b/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs
--- a/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs
+++ b/src/Text/XML/HXT/Arrow/XmlState/TypeDefs.hs
@@ -240,6 +240,7 @@
                                   , xioDocumentAge              :: ! Int
                                   , xioCache404Err              :: ! Bool
                                   , xioCacheRead                ::   String -> IOSArrow XmlTree XmlTree
+                                  , xioStrictDeserialize        :: ! Bool
                                   }
 
 type CompressionFct     = ByteString -> ByteString
@@ -745,6 +746,13 @@
                                   >>>
                                   S { getS = xioCacheRead
                                     , setS = \ x s -> s { xioCacheRead = x}
+                                    }
+
+theStrictDeserialize            :: Selector XIOSysState Bool
+theStrictDeserialize            = theCacheConfig
+                                  >>>
+                                  S { getS = xioStrictDeserialize
+                                    , setS = \ x s -> s { xioStrictDeserialize = x}
                                     }
 
 -- ------------------------------------------------------------
