diff --git a/htiled.cabal b/htiled.cabal
--- a/htiled.cabal
+++ b/htiled.cabal
@@ -1,5 +1,5 @@
 Name:                htiled
-Version:             0.1.0
+Version:             0.1.1
 Synopsis:            Import from the Tiled map editor.
 Description:         Import maps from the .tmx map format generated by Tiled,
                      <http://www.mapeditor.org>.
@@ -18,7 +18,7 @@
 Library
   Hs-Source-Dirs:    src
   Exposed-Modules:   Data.Tiled, Data.Tiled.Types, Data.Tiled.Load
-  Build-depends:       base ==4.*, zlib ==0.5.*, bytestring >=0.9 && <=0.11
-                     , hxt == 9.3.*, base64-bytestring ==1.0.*
-                     , containers ==0.5.*, filepath
+  Build-depends:       base ==4.*, zlib ==0.5.*, bytestring
+                     , hxt == 9.*, base64-bytestring > 1
+                     , containers >=0.4 && <0.6, filepath
   Ghc-Options:       -Wall
diff --git a/src/Data/Tiled/Load.hs b/src/Data/Tiled/Load.hs
--- a/src/Data/Tiled/Load.hs
+++ b/src/Data/Tiled/Load.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE Arrows, UnicodeSyntax, RecordWildCards #-}
-module Data.Tiled.Load (loadMapFile) where
+module Data.Tiled.Load (loadMapFile, loadMap) where
 
 import Prelude hiding ((.), id)
 import Control.Category ((.), id)
@@ -19,11 +19,18 @@
 
 import Data.Tiled.Types
 
+-- | Load a map from a string
+loadMap ∷ String → IO TiledMap
+loadMap str = load (readString [] str) "binary"
+
 -- | Load a map file.
 loadMapFile ∷ FilePath → IO TiledMap
-loadMapFile fp = head `fmap` runX (
+loadMapFile fp = load (readDocument [] fp) fp
+
+load ∷ IOStateArrow () XmlTree XmlTree -> FilePath -> IO TiledMap
+load a fp = head `fmap` runX (
         configSysVars [withValidate no, withWarnings yes]
-    >>> readDocument [] fp
+    >>> a
     >>> getChildren >>> isElem
     >>> doMap fp)
 
