diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for TagSoup
 
+0.14.1
+    #63, add maybeAttrib
 0.14
     #14, eliminate Text.HTML.Download
 0.13.10
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Neil Mitchell 2006-2016.
+Copyright Neil Mitchell 2006-2017.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -256,6 +256,7 @@
 * [TagSoup for Java](http://tagsoup.info/) - an independently written malformed HTML parser for Java. Including [links to other](http://tagsoup.info/#other) HTML parsers.
 * [HXT: Haskell XML Toolbox](http://www.fh-wedel.de/~si/HXmlToolbox/) - a more comprehensive XML parser, giving the option of using TagSoup as a lexer.
 * [Other Related Work](http://www.fh-wedel.de/~si/HXmlToolbox/#rel) - as described on the HXT pages.
-* [Using TagSoup with Parsec](http://therning.org/magnus/archives/367) - a nice combination of Haskell libraries.
-* [tagsoup-parsec](http://hackage.haskell.org/packages/tagsoup-parsec) - a library for easily using TagSoup as a token type in Parsec.
+* [Using TagSoup with Parsec](http://therning.org/magnus/posts/2008-08-08-367-tagsoup-meet-parsec.html) - a nice combination of Haskell libraries.
+* [tagsoup-parsec](http://hackage.haskell.org/package/tagsoup-parsec) - a library for easily using TagSoup as a token type in Parsec.
+* [tagsoup-megaparsec](http://hackage.haskell.org/package/tagsoup-megaparsec) - a library for easily using TagSoup as a token type in Megaparsec.
 * [WraXML](http://hackage.haskell.org/packages/archive/wraxml/latest/doc/html/Text-XML-WraXML-Tree-TagSoup.html) - construct a lazy tree from TagSoup lexemes.
diff --git a/Text/HTML/TagSoup/Type.hs b/Text/HTML/TagSoup/Type.hs
--- a/Text/HTML/TagSoup/Type.hs
+++ b/Text/HTML/TagSoup/Type.hs
@@ -115,10 +115,17 @@
 
 -- | Extract an attribute, crashes if not a 'TagOpen'.
 --   Returns @\"\"@ if no attribute present.
+--
+-- Warning: does not distinquish between missing attribute
+-- and present attribute with value @\"\"@.
 fromAttrib :: (Show str, Eq str, StringLike str) => str -> Tag str -> str
-fromAttrib att (TagOpen _ atts) = fromMaybe empty $ lookup att atts
-fromAttrib _ x = error ("(" ++ show x ++ ") is not a TagOpen")
+fromAttrib att tag = fromMaybe empty $ maybeAttrib att tag
 
+-- | Extract an attribute, crashes if not a 'TagOpen'.
+--   Returns @Nothing@ if no attribute present.
+maybeAttrib :: (Show str, Eq str) => str -> Tag str -> Maybe str
+maybeAttrib att (TagOpen _ atts) = lookup att atts
+maybeAttrib _ x = error ("(" ++ show x ++ ") is not a TagOpen")
 
 -- | Returns True if the 'Tag' is 'TagOpen' and matches the given name
 isTagOpenName :: Eq str => str -> Tag str -> Bool
diff --git a/tagsoup.cabal b/tagsoup.cabal
--- a/tagsoup.cabal
+++ b/tagsoup.cabal
@@ -1,7 +1,7 @@
-cabal-version:  >= 1.6
+cabal-version:  >= 1.18
 name:           tagsoup
-version:        0.14
-copyright:      Neil Mitchell 2006-2016
+version:        0.14.1
+copyright:      Neil Mitchell 2006-2017
 author:         Neil Mitchell <ndmitchell@gmail.com>
 maintainer:     Neil Mitchell <ndmitchell@gmail.com>
 homepage:       https://github.com/ndmitchell/tagsoup#readme
@@ -11,7 +11,7 @@
 license-file:   LICENSE
 build-type:     Simple
 synopsis:       Parsing and extracting information from (possibly malformed) HTML/XML documents
-tested-with:    GHC==8.0.1, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2
+tested-with:    GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2
 description:
     TagSoup is a library for parsing HTML/XML. It supports the HTML 5 specification,
     and can be used to parse either well-formed XML, or unstructured and malformed HTML
@@ -29,9 +29,11 @@
 
 flag testprog
     default: False
+    manual: True
     description: Build the test program
 
 library
+    default-language: Haskell2010
     build-depends: base == 4.*, containers, bytestring, text
 
     exposed-modules:
@@ -51,16 +53,16 @@
         Text.HTML.TagSoup.Type
 
 executable test-tagsoup
+    default-language: Haskell2010
     if flag(testprog)
         buildable: True
         build-depends:
+            base == 4.*, containers, bytestring, text,
             QuickCheck >= 2.4,
             deepseq >= 1.1,
             time, directory, process
     else
         buildable: False
-
-    extensions: CPP
 
     main-is: Main.hs
     other-modules:
