diff --git a/Text/XML/Stream/Parse.hs b/Text/XML/Stream/Parse.hs
--- a/Text/XML/Stream/Parse.hs
+++ b/Text/XML/Stream/Parse.hs
@@ -153,11 +153,10 @@
         | Just t <- lookup e es = ContentText t
     resolve c = c
     n' = if isClosed then n else l' : n
-    fixAttName level (name', val) = (tnameToName True level name', val)
-    begin = EventBeginElement (tnameToName False l' name)
-          $ map (fixAttName l')
-          $ as' []
-    end = EventEndElement $ tnameToName False l' name
+    fixAttName (name', val) = (tnameToName True l' name', val)
+    elementName = tnameToName False l' name
+    begin = EventBeginElement elementName $ map fixAttName $ as' []
+    end = EventEndElement elementName
 tokenToEvent es n (TokenEndElement name) =
     (es, n', [EventEndElement $ tnameToName False l name])
   where
@@ -200,9 +199,8 @@
     getEncoding front bs'
         | S.length bs < 4 =
             Left (bs `S.append`)
-        | otherwise = do
-            let decode = CT.decode codec
-             in Right (bsOut, decode)
+        | otherwise =
+            Right (bsOut, CT.decode codec)
       where
         bs = front bs'
         bsOut = S.append (S.drop toDrop x) y
@@ -282,7 +280,7 @@
         await >>= maybe (return ()) push
       where
         push (position, token) =
-            mapM_ (yield . ((,) (Just position))) events >> go es' levels'
+            mapM_ (yield . (,) (Just position)) events >> go es' levels'
           where
             (es', levels', events) = tokenToEvent es levels token
 
@@ -302,10 +300,10 @@
 parseToken de = (char '<' >> parseLt) <|> TokenContent <$> parseContent de False False
   where
     parseLt =
-        (char '?' >> parseInstr) <|>
-        (char '!' >> (parseComment <|> parseCdata <|> parseDoctype)) <|>
+        parseBegin <|>
         (char '/' >> parseEnd) <|>
-        parseBegin
+        (char '!' >> (parseComment <|> parseCdata <|> parseDoctype)) <|>
+        (char '?' >> parseInstr)
     parseInstr = do
         name <- parseIdent
         if name == "xml"
@@ -405,21 +403,15 @@
     val <- squoted <|> dquoted
     return (key, val)
   where
-    squoted = do
-        char' '\''
-        manyTill (parseContent de False True) (char '\'')
-    dquoted = do
-        char' '"'
-        manyTill (parseContent de True False) (char '"')
+    squoted = char '\'' *> manyTill (parseContent de False True) (char '\'')
+    dquoted = char  '"' *> manyTill (parseContent de True False) (char  '"')
 
 parseName :: Parser TName
-parseName = do
-    i1 <- parseIdent
-    mi2 <- (char ':' >> fmap Just parseIdent) <|> return Nothing
-    return $
-        case mi2 of
-            Nothing -> TName Nothing i1
-            Just i2 -> TName (Just i1) i2
+parseName =
+  name <$> parseIdent <*> A.optional (char ':' >> parseIdent)
+  where
+    name i1 Nothing = TName Nothing i1
+    name i1 (Just i2) = TName (Just i1) i2
 
 parseIdent :: Parser Text
 parseIdent =
@@ -434,7 +426,7 @@
     valid '"' = False
     valid '\'' = False
     valid '/' = False
-    valid c  = not $ isSpace c
+    valid c  = not $ isXMLSpace c
 
 parseContent :: DecodeEntities
              -> Bool -- break on double quote
@@ -458,7 +450,20 @@
     valid _  = True
 
 skipSpace :: Parser ()
-skipSpace = skipWhile isSpace
+skipSpace = skipWhile isXMLSpace
+
+-- | Determines whether a character is an XML white space. The list of
+-- white spaces is given by
+--
+-- >  S ::= (#x20 | #x9 | #xD | #xA)+
+--
+-- in <http://www.w3.org/TR/2008/REC-xml-20081126/#sec-common-syn>.
+isXMLSpace :: Char -> Bool
+isXMLSpace ' ' = True
+isXMLSpace '\t' = True
+isXMLSpace '\r' = True
+isXMLSpace '\n' = True
+isXMLSpace _ = False
 
 newline :: Parser ()
 newline = ((char '\r' >> char '\n') <|> char '\n') >> return ()
diff --git a/xml-conduit.cabal b/xml-conduit.cabal
--- a/xml-conduit.cabal
+++ b/xml-conduit.cabal
@@ -1,5 +1,5 @@
 name:            xml-conduit
-version:         1.1.0.4
+version:         1.1.0.5
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michaels@suite-sol.com>, Aristid Breitkreuz <aristidb@googlemail.com>
