diff --git a/reanimate-svg.cabal b/reanimate-svg.cabal
--- a/reanimate-svg.cabal
+++ b/reanimate-svg.cabal
@@ -1,5 +1,5 @@
 name:                reanimate-svg
-version:             0.9.3.1
+version:             0.9.4.0
 synopsis:            SVG file loader and serializer
 description:
   reanimate-svg provides types representing a SVG document,
diff --git a/src/Graphics/SvgTree.hs b/src/Graphics/SvgTree.hs
--- a/src/Graphics/SvgTree.hs
+++ b/src/Graphics/SvgTree.hs
@@ -14,7 +14,7 @@
   , cssApply
   , cssRulesOfText
   -- , applyCSSRules
-  , resolveUses
+  -- , resolveUses
 
     -- * Type definitions
   , module Graphics.SvgTree.Types
@@ -27,7 +27,7 @@
 import           Control.Lens
 import qualified Data.ByteString            as B
 import           Data.List                  (foldl')
-import qualified Data.Map                   as M
+-- import qualified Data.Map                   as M
 import qualified Data.Text                  as T
 import           Text.XML.Light.Input       (parseXMLDoc)
 import           Text.XML.Light.Output      (ppcTopElement, prettyConfigPP)
@@ -83,18 +83,18 @@
      attr = view drawAttributes t
      attr' = foldl' cssDeclApplyer attr matchingDeclarations
 
--- | For every 'use' tag, try to resolve the geometry associated
+-- For every 'use' tag, try to resolve the geometry associated
 -- with it and place it in the scene Tree. It is important to
 -- resolve the 'use' tag before applying the CSS rules, as some
 -- rules may apply some elements matching the children of "use".
-resolveUses :: Document -> Document
-resolveUses doc =
-  doc { _elements = mapTree fetchUses <$> _elements doc }
-  where
-    fetchUses (UseTree useInfo _) = UseTree useInfo $ search useInfo
-    fetchUses a                   = a
-
-    search nfo = M.lookup (_useName nfo) $ _definitions doc
+-- resolveUses :: Document -> Document
+-- resolveUses doc =
+--   doc { _elements = mapTree fetchUses <$> _elements doc }
+--   where
+--     fetchUses (UseTree useInfo _) = UseTree useInfo $ search useInfo
+--     fetchUses a                   = a
+--
+--     search nfo = M.lookup (_useName nfo) $ _definitions doc
 
 -- -- | Rewrite the document by applying the CSS rules embedded
 -- -- inside it.
diff --git a/src/Graphics/SvgTree/Printer.hs b/src/Graphics/SvgTree/Printer.hs
--- a/src/Graphics/SvgTree/Printer.hs
+++ b/src/Graphics/SvgTree/Printer.hs
@@ -3,16 +3,15 @@
   , ppDocument
   ) where
 
-import           Control.Lens
-import           Data.Char
+import           Control.Lens               ((^.))
 import           Data.List
-import           Graphics.SvgTree.Types     (Document (..), DrawAttributes,
-                                             Tree (..), groupChildren,
-                                             patternElements, markerElements,
-                                             maskContent, clipPathContent,
+import           Graphics.SvgTree.Types     (Document (..),
+                                             Tree (..), clipPathContent,
+                                             groupChildren, markerElements,
+                                             maskContent, patternElements,
                                              preRendered)
 import           Graphics.SvgTree.XmlParser
-import           Text.XML.Light
+import           Text.XML.Light             hiding (showAttr)
 
 ppDocument :: Document -> String
 ppDocument doc =
@@ -54,5 +53,6 @@
 tagStart           :: QName -> [Attr] -> ShowS
 tagStart qn as rs   = '<':showQName qn ++ as_str ++ rs
  where as_str       = if null as then "" else ' ' : unwords (map showAttr as)
-       showAttr           :: Attr -> String
-       showAttr (Attr qn v) = showQName qn ++ '=' : '"' : v ++ "\""
+
+showAttr           :: Attr -> String
+showAttr (Attr qn v) = showQName qn ++ '=' : '"' : v ++ "\""
diff --git a/src/Graphics/SvgTree/Types.hs b/src/Graphics/SvgTree/Types.hs
--- a/src/Graphics/SvgTree/Types.hs
+++ b/src/Graphics/SvgTree/Types.hs
@@ -216,7 +216,6 @@
 import qualified Data.Foldable             as F
 import           Data.Function             (on)
 import           Data.List                 (inits)
-import qualified Data.Map                  as M
 import           Data.Monoid               (Last (..))
 import           Data.Semigroup            (Semigroup (..))
 import qualified Data.Text                 as T
@@ -1628,6 +1627,7 @@
     | MarkerTree    !Marker
     | MaskTree      !Mask
     | ClipPathTree  !ClipPath
+    | SvgTree       !Document
     deriving (Eq, Show)
 
 data FilterElement
@@ -1916,6 +1916,7 @@
   dig prev e@(MarkerTree _) = f $ appNode prev e
   dig prev e@(MaskTree _) = f $ appNode prev e
   dig prev e@(ClipPathTree _) = f $ appNode prev e
+  dig prev e@(SvgTree _) = f $ appNode prev e
 
 
   zipGroup prev g = g { _groupChildren = updatedChildren }
@@ -1951,6 +1952,7 @@
     FilterTree _         -> f acc e
     GroupTree g          -> foldGroup g
     SymbolTree s         -> foldGroup (_groupOfSymbol s)
+    SvgTree{}            -> f acc e
     where
       foldGroup g =
         let subAcc = F.foldl' go acc $ _groupChildren g in
@@ -1983,6 +1985,7 @@
   go e@(MarkerTree _) = f e
   go e@(MaskTree _) = f e
   go e@(ClipPathTree _) = f e
+  go e@SvgTree{} = f e
 
   mapGroup g =
       g { _groupChildren = map go $ _groupChildren g }
@@ -2014,6 +2017,7 @@
    MarkerTree _         -> "marker"
    MaskTree _           -> "mask"
    ClipPathTree _       -> "clipPath"
+   SvgTree{}            -> "svg"
 
 drawAttrOfTree :: Tree -> DrawAttributes
 drawAttrOfTree v = case v of
@@ -2039,6 +2043,7 @@
   MarkerTree e         -> e ^. drawAttributes
   MaskTree e           -> e ^. drawAttributes
   ClipPathTree e       -> e ^. drawAttributes
+  SvgTree _            -> mempty -- FIXME
 
 setDrawAttrOfTree :: Tree -> DrawAttributes -> Tree
 setDrawAttrOfTree v attr' = case v of
@@ -2064,6 +2069,7 @@
   MarkerTree e         -> MarkerTree $ e & drawAttributes .~ attr
   MaskTree e           -> MaskTree $ e & drawAttributes .~ attr
   ClipPathTree e       -> ClipPathTree $ e & drawAttributes .~ attr
+  SvgTree e            -> SvgTree e
   where
     attr = attr'{_preRendered = Nothing}
 
@@ -2545,12 +2551,11 @@
     , _width            :: Maybe Number
     , _height           :: Maybe Number
     , _elements         :: [Tree]
-    , _definitions      :: M.Map String Tree
     , _description      :: String
     , _documentLocation :: FilePath
     , _documentAspectRatio :: PreserveAspectRatio
     }
-    deriving Show
+    deriving (Show, Eq)
 
 
 -- | Lenses associated to a SVG document.
diff --git a/src/Graphics/SvgTree/XmlParser.hs b/src/Graphics/SvgTree/XmlParser.hs
--- a/src/Graphics/SvgTree/XmlParser.hs
+++ b/src/Graphics/SvgTree/XmlParser.hs
@@ -35,7 +35,6 @@
 import           Control.Lens.Unsound
 import           Data.Attoparsec.Text         (Parser, parseOnly, string)
 import           Data.List                    (foldl', intercalate)
-import qualified Data.Map                     as M
 import           Data.Maybe                   (catMaybes, fromMaybe)
 import           Data.Monoid                  (Last (Last), getLast, (<>))
 import qualified Data.Text                    as T
@@ -852,6 +851,7 @@
        pathNode <- serializeTreeNode p
        let sub = [X.Elem . setChildren pathNode $ X.elContent textNode]
        return $ setChildren textNode sub
+    SvgTree doc -> Just $ xmlOfDocument doc
 
 
 isNotNone :: Tree -> Bool
@@ -903,6 +903,8 @@
       FEColorMatrix m  -> serializeTreeNode m
       FEComposite c    -> serializeTreeNode c
       FEGaussianBlur b -> serializeTreeNode b
+      _                -> error $
+        "Unsupported element: " ++ show fe ++ ". Please submit bug on github."
   attributes =
     [ "result" `parseIn` (filterAttributes . filterResult)]
 
@@ -1189,6 +1191,10 @@
     groupNode = _groupOfSymbol $ xmlUnparseWithDrawAttr e
 unparse e@(nodeName -> "g") =
   GroupTree $ xmlUnparseWithDrawAttr e & groupChildren .~ map unparse (elChildren e)
+unparse e@(nodeName -> "svg") =
+  case unparseDocument "" e of
+    Nothing -> None
+    Just doc -> SvgTree doc
 unparse e@(nodeName -> "text") =
   TextTree tPath $ xmlUnparse e & textRoot .~ root
     where
@@ -1228,7 +1234,6 @@
     , _elements = parsedElements
     , _width = lengthFind "width"
     , _height = lengthFind "height"
-    , _definitions = defs
     , _description = ""
     , _documentLocation = rootLocation
     , _documentAspectRatio =
@@ -1237,11 +1242,6 @@
     }
   where
     parsedElements = map unparse $ elChildren e
-    defs = foldl' (foldTree worker) M.empty parsedElements
-    worker m t =
-      case t ^.drawAttributes.attrId of
-        Nothing  -> m
-        Just tid -> M.insert tid t m
     lengthFind n =
         attributeFinder n e >>= parse complexNumber
 unparseDocument _ _ = Nothing
