diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 -*-change-log-*-
 
+v0.8.1.0 March 2019
+
+ * Filter attributes.
+
 v0.8.0.0 March 2019
 
  * Remove WithDrawAttributes type class.
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.8.0.0
+version:             0.8.1.0
 synopsis:            SVG file loader and serializer
 description:
   reanimate-svg provides types representing a SVG document,
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
@@ -129,7 +129,7 @@
 
     -- ** Filter
     , Filter( .. )
-    , groupOfFilter
+    , filterChildren
 
       -- * Text related types
       -- ** Text
@@ -920,19 +920,19 @@
   defaultSvg = Definitions defaultSvg
 
 -- | Define the `<filter>` tag.
-newtype Filter a =
-    Filter { _groupOfFilter :: Group a }
+data Filter = Filter
+  { _filterDrawAttributes :: !DrawAttributes
+  , _filterSelfAttributes :: !FilterAttributes
+  , _filterChildren       :: ![FilterElement]
+  }
   deriving (Eq, Show)
 
--- | Lenses associated with the Definitions type.
-groupOfFilter :: Lens (Filter s) (Filter t) (Group s) (Group t)
-groupOfFilter f = fmap Filter . f . _groupOfFilter
-
-instance HasDrawAttributes (Filter a) where
-  drawAttributes = groupOfFilter . drawAttributes
-
-instance WithDefaultSvg (Filter a) where
-  defaultSvg = Filter defaultSvg
+instance WithDefaultSvg Filter where
+  defaultSvg = Filter
+    { _filterDrawAttributes = defaultSvg
+    , _filterSelfAttributes     = defaultSvg
+    , _filterChildren       = []
+    }
 
 -- | Define a `<circle>`.
 data Circle = Circle
@@ -1526,8 +1526,7 @@
   }
   deriving (Eq, Show)
 
--- | Lenses for the TextPath type.
-makeClassy ''TextPath
+-- -- | Lenses for the TextPath type.
 
 instance WithDefaultSvg TextPath where
   defaultSvg = TextPath
@@ -1602,7 +1601,7 @@
     | GroupTree     !(Group Tree)
     | SymbolTree    !(Symbol Tree)
     | DefinitionTree !(Definitions Tree)
-    | FilterTree    !(Filter FilterElement)
+    | FilterTree    !Filter
     | PathTree      !Path
     | CircleTree    !Circle
     | PolyLineTree  !PolyLine
@@ -2750,9 +2749,18 @@
         (f_asYN x5_asYS)
 
 
+makeClassy ''TextPath
+
 -- | Lenses for the DrawAttributes type.
 -- makeClassy ''DrawAttributes
 
+makeLenses ''Filter
+
+instance HasDrawAttributes Filter where
+  drawAttributes = filterDrawAttributes
+
+instance HasFilterAttributes Filter where
+  filterAttributes = filterSelfAttributes
 
 makeClassy ''Composite
 makeClassy ''ColorMatrix
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
@@ -882,12 +882,16 @@
      ,"preserveAspectRatio" `parseIn` (groupOfDefinitions . groupAspectRatio)
      ]
 
-instance XMLUpdatable (Filter FilterElement) where
+instance XMLUpdatable Filter where
   xmlTagName _ = "filter"
   serializeTreeNode node =
-     updateWithAccessor (_groupChildren . _groupOfFilter) node $
+     updateWithAccessor _filterChildren node $
         genericSerializeWithDrawAttr node
-  attributes = []
+  attributes =
+    [ "width" `parseIn` filterWidth
+    , "height" `parseIn` filterHeight
+    , "x" `parseIn` filterX
+    , "y" `parseIn` filterY ]
 
 instance XMLUpdatable FilterElement where
   xmlTagName _ = "FilterElement"
@@ -1174,10 +1178,7 @@
     groupNode :: Group Tree
     groupNode = _groupOfSymbol $ xmlUnparseWithDrawAttr e
 unparse e@(nodeName -> "filter") =
-  FilterTree . Filter $ groupNode & groupChildren .~ map unparseFE (elChildren e)
-  where
-    groupNode :: Group FilterElement
-    groupNode = undefined -- xmlUnparseWithDrawAttr e
+  FilterTree $ xmlUnparseWithDrawAttr e & filterChildren .~ map unparseFE (elChildren e)
 unparse e@(nodeName -> "symbol") =
   SymbolTree . Symbol $ groupNode & groupChildren .~ map unparse (elChildren e)
   where
