diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## Mark Ext 0.2.1.4
+
+* Prevent the test suite from failing ever again. [Issue
+  25](https://github.com/mmark-md/mmark-ext/issues/25).
+
 ## MMark Ext 0.2.1.3
 
 * The test suite passes with `modern-uri-0.3.4` and later.
diff --git a/Text/MMark/Extension/FontAwesome.hs b/Text/MMark/Extension/FontAwesome.hs
--- a/Text/MMark/Extension/FontAwesome.hs
+++ b/Text/MMark/Extension/FontAwesome.hs
@@ -25,13 +25,12 @@
 import Text.URI.Lens (uriPath)
 import Text.URI.QQ (scheme)
 
--- | Allow to insert @span@s with font awesome icons using autolinks like
--- this:
+-- | Insert @span@s with font awesome icons using autolinks like this:
 --
 -- > <fa:user>
 --
--- This @user@ identifier is the name of icon you want to insert. You can
--- also control the size of the icon like this:
+-- This @user@ identifier is the name of the icon you want to insert. You
+-- can also control the size of the icon like this:
 --
 -- > <fa:user/fw> -- fixed width
 -- > <fa:user/lg> -- large
@@ -40,9 +39,9 @@
 -- > <fa:user/4x>
 -- > <fa:user/5x>
 --
--- In general, all path components in this URI that go after the name of
--- icon will be prefixed with @\"fa-\"@ and added as classes, so you can do
--- a lot of fancy stuff, see <http://fontawesome.io/examples/>:
+-- In general, all path components that go after the name of the icon will
+-- be prefixed with @\"fa-\"@ and added as classes, so you can do a lot of
+-- fancy stuff, see <http://fontawesome.io/examples/>:
 --
 -- > <fa:quote-left/3x/pull-left/border>
 --
diff --git a/Text/MMark/Extension/Footnotes.hs b/Text/MMark/Extension/Footnotes.hs
--- a/Text/MMark/Extension/Footnotes.hs
+++ b/Text/MMark/Extension/Footnotes.hs
@@ -47,8 +47,8 @@
 --
 -- The extension is not fully safe though in the sense that we can't check
 -- that a footnote reference refers to an existing footnote and that
--- footnotes have corresponding references, or that they are present in the
--- document in the right order.
+-- footnotes have the corresponding references, or that they are present in
+-- the document in the right order.
 footnotes :: Extension
 footnotes = footnoteRefs <> footnoteSection
 
@@ -73,7 +73,7 @@
         else old l
     other -> old other
 
--- | Create footnote section.
+-- | Create a footnote section.
 footnoteSection :: Extension
 footnoteSection = Ext.blockRender $ \old block ->
   case block of
diff --git a/Text/MMark/Extension/GhcSyntaxHighlighter.hs b/Text/MMark/Extension/GhcSyntaxHighlighter.hs
--- a/Text/MMark/Extension/GhcSyntaxHighlighter.hs
+++ b/Text/MMark/Extension/GhcSyntaxHighlighter.hs
@@ -26,7 +26,8 @@
 import qualified Text.MMark.Extension as Ext
 
 -- | Use the @ghc-syntax-highlighter@ package to highlight Haskell code. The
--- extension is applied only to code blocks with info string @\"haskell\"@.
+-- extension is applied only to code blocks with the info string
+-- @\"haskell\"@.
 --
 -- The resulting code block will be wrapped in a @div@ with class
 -- @\"source-code\"@. The following @span@ classes can be used for styling:
diff --git a/Text/MMark/Extension/Kbd.hs b/Text/MMark/Extension/Kbd.hs
--- a/Text/MMark/Extension/Kbd.hs
+++ b/Text/MMark/Extension/Kbd.hs
@@ -9,8 +9,7 @@
 -- Stability   :  experimental
 -- Portability :  portable
 --
--- Introduce @kbd@ tags into resulting HTML document by wrapping content in
--- links with URL with @kbd@ scheme.
+-- Introduce @kbd@ tags by wrapping content in links with @kbd@ scheme.
 module Text.MMark.Extension.Kbd
   ( kbd,
   )
@@ -22,8 +21,7 @@
 import qualified Text.URI as URI
 import Text.URI.QQ (scheme)
 
--- | Introduce @kbd@ tags into resulting HTML document by wrapping content
--- in links with URL with @kbd@ scheme.
+-- | Introduce @kbd@ tags by wrapping content in links with @kbd@ scheme.
 --
 -- For example:
 --
@@ -31,8 +29,8 @@
 -- >
 -- > [kbd]: kbd:
 --
--- The use of reference-style links seems more aesthetically pleasant to the
--- author, but you can of course do somethnig like this instead:
+-- The use of reference-style links seems more aesthetically pleasant to me,
+-- but you can of course do somethnig like this instead:
 --
 -- > To enable that mode press [Ctrl+A](kbd:).
 kbd :: Extension
diff --git a/Text/MMark/Extension/LinkTarget.hs b/Text/MMark/Extension/LinkTarget.hs
--- a/Text/MMark/Extension/LinkTarget.hs
+++ b/Text/MMark/Extension/LinkTarget.hs
@@ -10,8 +10,8 @@
 -- Stability   :  experimental
 -- Portability :  portable
 --
--- Specify the @target@ attribute of links in link titles. This allows, e.g.
--- make a link open in new tab.
+-- Specify the @target@ attribute of links in link titles. This allows us
+-- to, e.g. make a link open in a new tab.
 module Text.MMark.Extension.LinkTarget
   ( linkTarget,
   )
diff --git a/Text/MMark/Extension/MathJax.hs b/Text/MMark/Extension/MathJax.hs
--- a/Text/MMark/Extension/MathJax.hs
+++ b/Text/MMark/Extension/MathJax.hs
@@ -24,17 +24,16 @@
 import Text.MMark.Extension (Block (..), Extension, Inline (..))
 import qualified Text.MMark.Extension as Ext
 
--- | The extension allows to transform inline code spans into MathJax inline
--- spans and code blocks with the info string @\"mathjax\"@ (case-sensitive)
--- into MathJax display spans. Every line in such a code block will produce
--- a separate display span, i.e. a separate line with a formula (which is
--- probably what you want anyway).
+-- | The extension allows us to transform inline code spans into MathJax
+-- inline spans and code blocks with the info string @\"mathjax\"@
+-- (case-sensitive) into MathJax display spans. Every line in such a code
+-- block will produce a separate display span, i.e. a separate line with a
+-- formula (which is probably what you want anyway).
 --
 -- The first argument is the character that must be the first and the last
 -- character in code spans for them to be recognized as MathJax markup. If
 -- 'Nothing' is passed instead of a char, we apply the transformation to all
--- code spans (useful for more academic articles that do not deal with
--- code).
+-- code spans (useful for more academic articles that do not contain code).
 mathJax ::
   -- | Starting\/ending character in MathJax inline spans
   Maybe Char ->
diff --git a/Text/MMark/Extension/TableOfContents.hs b/Text/MMark/Extension/TableOfContents.hs
--- a/Text/MMark/Extension/TableOfContents.hs
+++ b/Text/MMark/Extension/TableOfContents.hs
@@ -57,8 +57,8 @@
         then as . ((n, a) :)
         else as
 
--- | Create an extension that replaces a certain code block with previously
--- constructed table of contents.
+-- | Create an extension that replaces a certain code block with the
+-- previously constructed table of contents.
 toc ::
   -- | Label of the code block to replace by the table of contents
   Text ->
diff --git a/mmark-ext.cabal b/mmark-ext.cabal
--- a/mmark-ext.cabal
+++ b/mmark-ext.cabal
@@ -1,11 +1,11 @@
 cabal-version:   1.18
 name:            mmark-ext
-version:         0.2.1.3
+version:         0.2.1.4
 license:         BSD3
 license-file:    LICENSE.md
 maintainer:      Mark Karpov <markkarpov92@gmail.com>
 author:          Mark Karpov <markkarpov92@gmail.com>
-tested-with:     ghc ==8.8.4 ghc ==8.10.4 ghc ==9.0.1
+tested-with:     ghc ==8.8.4 ghc ==8.10.5 ghc ==9.0.1
 homepage:        https://github.com/mmark-md/mmark-ext
 bug-reports:     https://github.com/mmark-md/mmark-ext/issues
 synopsis:        Commonly useful extensions for the MMark markdown processor
@@ -52,11 +52,11 @@
         base >=4.13 && <5.0,
         foldl >=1.2 && <1.5,
         ghc-syntax-highlighter >=0.0.1 && <0.1,
-        lucid >=2.6 && <3.0,
+        lucid >=2.9.13 && <3.0,
         microlens >=0.4 && <0.5,
         mmark >=0.0.4 && <=0.1,
         modern-uri >=0.3.4 && <0.4,
-        skylighting >=0.7.6 && <0.11,
+        skylighting >=0.7.6 && <0.13,
         text >=0.2 && <1.3
 
     if flag(dev)
@@ -90,10 +90,10 @@
     build-depends:
         base >=4.13 && <5.0,
         hspec >=2.0 && <3.0,
-        lucid >=2.6 && <3.0,
+        lucid >=2.9.13 && <3.0,
         mmark >=0.0.4 && <=0.1,
         mmark-ext,
-        skylighting >=0.7.6 && <0.11,
+        skylighting >=0.7.6 && <0.13,
         text >=0.2 && <1.3
 
     if flag(dev)
diff --git a/tests/Text/MMark/Extension/LinkTargetSpec.hs b/tests/Text/MMark/Extension/LinkTargetSpec.hs
--- a/tests/Text/MMark/Extension/LinkTargetSpec.hs
+++ b/tests/Text/MMark/Extension/LinkTargetSpec.hs
@@ -21,8 +21,8 @@
       context "when there is nothing but the target in title" $
         it "works as intended, no title attribute produced" $
           "[link](/url '_blank')"
-            `to` "<p><a href=\"/url\" target=\"_blank\">link</a></p>\n"
+            `to` "<p><a target=\"_blank\" href=\"/url\">link</a></p>\n"
       context "when there is also a title" $
         it "works as intended, target is stripped from the title" $
           "[link](/url '_blank something')"
-            `to` "<p><a href=\"/url\" title=\"something\" target=\"_blank\">link</a></p>\n"
+            `to` "<p><a target=\"_blank\" href=\"/url\" title=\"something\">link</a></p>\n"
diff --git a/tests/Text/MMark/Extension/ObfuscateEmailSpec.hs b/tests/Text/MMark/Extension/ObfuscateEmailSpec.hs
--- a/tests/Text/MMark/Extension/ObfuscateEmailSpec.hs
+++ b/tests/Text/MMark/Extension/ObfuscateEmailSpec.hs
@@ -12,7 +12,7 @@
     let to = withExt (obfuscateEmail "foo")
     context "when URI has the mailto scheme" $
       it "produces the correct HTML" $
-        "<mailto:me@example.org>" `to` "<p><a href=\"javascript:void(0)\" data-email=\"me@example.org\" class=\"foo\">Enable JavaScript to see this email</a></p>\n"
+        "<mailto:me@example.org>" `to` "<p><a class=\"foo\" data-email=\"me@example.org\" href=\"javascript:void(0)\">Enable JavaScript to see this email</a></p>\n"
     context "when URI has some other scheme" $
       it "produces the correct HTML" $
         "<https:example.org>" `to` "<p><a href=\"https:example.org\">https:example.org</a></p>\n"
