diff --git a/Text/HTML/TagSoup/Parsec.hs b/Text/HTML/TagSoup/Parsec.hs
--- a/Text/HTML/TagSoup/Parsec.hs
+++ b/Text/HTML/TagSoup/Parsec.hs
@@ -5,17 +5,21 @@
    , tParse
    , openTag 
    , maybeOpenTag
+   , eitherOpenTag
    , notOpenTag
    , allOpenTags
    , wholeTag
    , maybeWholeTag
+   , eitherWholeTag
    , allWholeTags
    , closeTag
    , maybeCloseTag
+   , eitherCloseTag
    , notCloseTag
    , allCloseTags
    , maybeP
    , allP
+   , eitherP
    )
    where
 
@@ -117,41 +121,64 @@
 -- It will return `Nothing` otherwise.
 -- It is not case sensitive.
 maybeOpenTag :: String -> TagParser ( Maybe Tag )
-maybeOpenTag soughtName =
-   maybeP $ openTag soughtName
+maybeOpenTag =
+   maybeP . openTag
 
 -- | maybeCloseTag will return `Just` the tag if it gets a TagClose with he given name,
 -- It will return `Nothing` otherwise.
 -- It is not case sensitive.
 maybeCloseTag :: String -> TagParser ( Maybe Tag )
-maybeCloseTag soughtName =
-   maybeP $ closeTag soughtName
+maybeCloseTag =
+   maybeP . closeTag
 
 -- | maybeWholeTag will return `Just` the tag if it gets a WholeTag with he given name,
 -- It will return `Nothing` otherwise.
 -- It is not case sensitive.
 maybeWholeTag :: String -> TagParser ( Maybe WholeTag )
-maybeWholeTag soughtName =
-   maybeP $ wholeTag soughtName
+maybeWholeTag =
+   maybeP . wholeTag
 
 -- | allOpenTags will return all TagOpen with the given name.
 -- It is not case sensitive.
 allOpenTags :: String -> TagParser [ Tag ]
-allOpenTags t =
-   allP $ maybeOpenTag t 
+allOpenTags =
+   allP . maybeOpenTag
 
 -- | allCloseTags will return all TagClose with the given name.
 -- It is not case sensitive.
 allCloseTags :: String -> TagParser [ Tag ]
-allCloseTags t =
-   allP $ maybeCloseTag t
+allCloseTags =
+   allP . maybeCloseTag
 
 -- | allWholeTags will return all WholeTag with the given name.
 -- It is not case sensitive.
 allWholeTags :: String -> TagParser [ WholeTag ]
-allWholeTags t =
-   allP $ maybeWholeTag t
-      
+allWholeTags =
+   allP . maybeWholeTag
+
+-- | eitherP takes a parser, and becomes its `Either` equivalent -- returning `Right` if it matches, and `Left` if it doesn't.
+eitherP :: Show tok => GenParser tok st a -> GenParser tok st ( Either tok a )
+eitherP p = do
+   try ( do t <- p
+            return $ Right t
+       ) <|> ( do t <- anyToken
+                  return $ Left t
+             )
+-- | either a Right TagOpen or a Left arbitary tag.
+eitherOpenTag :: String -> TagParser ( Either Tag Tag )
+eitherOpenTag = 
+   eitherP . openTag
+
+-- | either a Right TagClose or a Left arbitary tag.
+eitherCloseTag :: String -> TagParser ( Either Tag Tag )
+eitherCloseTag =
+   eitherP . closeTag
+
+-- | either a Right WholeTag or a Left arbitary tag.
+eitherWholeTag :: String -> TagParser ( Either Tag WholeTag )
+eitherWholeTag = 
+   eitherP . wholeTag
+
 -- | allP takes a parser which returns  a `Maybe` value, and returns a list of matching tokens.
 allP :: GenParser tok st ( Maybe a ) -> GenParser tok st [ a ]
 allP p = do
diff --git a/tagsoup-parsec.cabal b/tagsoup-parsec.cabal
--- a/tagsoup-parsec.cabal
+++ b/tagsoup-parsec.cabal
@@ -1,5 +1,5 @@
 Name:           tagsoup-parsec 
-Version:        0.0.3
+Version:        0.0.5
 License:        BSD3 
 License-file:   LICENSE
 Author:         Johnny Morrice
