diff --git a/Text/HTML/DOM.hs b/Text/HTML/DOM.hs
--- a/Text/HTML/DOM.hs
+++ b/Text/HTML/DOM.hs
@@ -11,12 +11,15 @@
 import qualified Text.HTML.TagStream as TS
 import qualified Data.XML.Types as XT
 import Data.Conduit
+import Data.Text (Text)
+import qualified Data.Text as T
 import qualified Data.Conduit.List as CL
-import Control.Arrow ((***))
+import Control.Arrow ((***), second)
 import Data.Text.Encoding (decodeUtf8With)
 import Data.Text.Encoding.Error (lenientDecode)
 import qualified Data.Set as Set
 import qualified Text.XML as X
+import Text.XML.Stream.Parse (decodeHtmlEntities)
 import qualified Filesystem.Path.CurrentOS as F
 import Data.Conduit.Filesystem (sourceFile)
 import qualified Data.ByteString.Lazy as L
@@ -30,7 +33,7 @@
   where
     go stack = do
         mx <- await
-        case fmap (fmap' $ decodeUtf8With lenientDecode) mx of
+        case fmap (entities . fmap' (decodeUtf8With lenientDecode)) mx of
             Nothing -> closeStack stack
             Just (TS.TagOpen local attrs isClosed) -> do
                 let name = toName local
@@ -67,6 +70,24 @@
     fmap' f (TS.Comment x) = TS.Comment (f x)
     fmap' f (TS.Special x y) = TS.Special (f x) (f y)
     fmap' f (TS.Incomplete x) = TS.Incomplete (f x)
+
+    entities :: TS.Token' Text -> TS.Token' Text
+    entities (TS.TagOpen x pairs b) = TS.TagOpen x (map (second entities') pairs) b
+    entities (TS.Text x) = TS.Text $ entities' x
+    entities ts = ts
+
+    entities' :: Text -> Text
+    entities' t =
+        case T.break (== '&') t of
+            (_, "") -> t
+            (before, t') ->
+                case T.break (== ';') $ T.drop 1 t' of
+                    (_, "") -> t
+                    (entity, rest') ->
+                        let rest = T.drop 1 rest'
+                         in case decodeHtmlEntities entity of
+                                XT.ContentText entity' -> T.concat [before, entity', entities' rest]
+                                XT.ContentEntity _ -> T.concat [before, "&", entity, entities' rest']
 
     isVoid = flip Set.member $ Set.fromList
         [ "area"
diff --git a/html-conduit.cabal b/html-conduit.cabal
--- a/html-conduit.cabal
+++ b/html-conduit.cabal
@@ -1,5 +1,5 @@
 Name:                html-conduit
-Version:             0.0.0
+Version:             0.0.1
 Synopsis:            Parse HTML documents using xml-conduit datatypes.
 Description:         This package uses tagstream-conduit for its parser. It automatically balances mismatched tags, so that there shouldn't be any parse failures. It does not handle a full HTML document rendering, such as adding missing html and head tags.
 Homepage:            https://github.com/snoyberg/xml
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -15,11 +15,21 @@
         it "adds missing close tags" $
             X.parseLBS_ X.def "<foo><bar>baz</bar></foo>" @=?
             H.parseLBS        "<foo><bar>baz</foo>"
-            {- Need to fix in tagstream-conduit
-        it "entities" $
-            X.parseLBS_ X.def "<foo><bar>baz&#160;</bar></foo>" @=?
-            H.parseLBS        "<foo><bar>baz&nbsp;</foo>"
-            -}
         it "void tags" $
             X.parseLBS_ X.def "<foo><bar><img/>foo</bar></foo>" @=?
             H.parseLBS        "<foo><bar><img>foo</foo>"
+        it "xml entities" $
+            X.parseLBS_ X.def "<foo><bar>baz&gt;</bar></foo>" @=?
+            H.parseLBS        "<foo><bar>baz&gt;</foo>"
+        it "html entities" $
+            X.parseLBS_ X.def "<foo><bar>baz&#160;</bar></foo>" @=?
+            H.parseLBS        "<foo><bar>baz&nbsp;</foo>"
+        it "decimal entities" $
+            X.parseLBS_ X.def "<foo><bar>baz&#160;</bar></foo>" @=?
+            H.parseLBS        "<foo><bar>baz&#160;</foo>"
+        it "hex entities" $
+            X.parseLBS_ X.def "<foo><bar>baz&#x160;</bar></foo>" @=?
+            H.parseLBS        "<foo><bar>baz&#x160;</foo>"
+        it "invalid entities" $
+            X.parseLBS_ X.def "<foo><bar>baz&amp;foobar;</bar></foo>" @=?
+            H.parseLBS        "<foo><bar>baz&foobar;</foo>"
