diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.9.12.1
+
+* Allow different orderings of attributes in test-suite 
+
 ## 2.9.12
 
 * Add MonadFix instance
diff --git a/lucid.cabal b/lucid.cabal
--- a/lucid.cabal
+++ b/lucid.cabal
@@ -1,5 +1,5 @@
 name:                lucid
-version:             2.9.12
+version:             2.9.12.1
 synopsis:            Clear to write, read and edit DSL for HTML
 description:
   Clear to write, read and edit DSL for HTML.
@@ -19,11 +19,12 @@
 copyright:           2014-2017 Chris Done
 category:            Web
 build-type:          Simple
-cabal-version:       >=1.8
+cabal-version:       >=1.10
 extra-source-files:  README.md, CHANGELOG.md
-tested-with:         GHC==7.10.3,GHC==8.0.2,GHC==8.2.2,GHC==8.4.4,GHC==8.6.5, GHC==8.8.1
+tested-with:         GHC==7.10.3,GHC==8.0.2,GHC==8.2.2,GHC==8.4.4,GHC==8.6.5,GHC==8.8.4,GHC==8.10.4,GHC==9.0.1
 
 library
+  default-language:  Haskell2010
   hs-source-dirs:    src/
   ghc-options:       -Wall -O2
   exposed-modules:   Lucid
@@ -32,7 +33,7 @@
                      Lucid.Bootstrap
 
   -- GHC boot libraries
-  build-depends:     base                   >=4.8      && <4.14
+  build-depends:     base                   >=4.8      && <4.16
                    , bytestring             >=0.10.6.0
                    , containers             >=0.5.6.2
                    , transformers           >=0.4.2.0
@@ -51,7 +52,12 @@
                    , mmorph                >=1.0.3
                    , unordered-containers  >=0.2.5.1
 
+source-repository head
+  type:     git
+  location: https://github.com/chrisdone/lucid.git
+
 test-suite test
+    default-language: Haskell2010
     type: exitcode-stdio-1.0
     main-is: Main.hs
     hs-source-dirs: test
@@ -66,6 +72,7 @@
                    mtl
 
 benchmark bench
+  default-language: Haskell2010
   type:             exitcode-stdio-1.0
   hs-source-dirs:   benchmarks
   main-is:          Main.hs
@@ -80,6 +87,7 @@
   ghc-options:      -O2
 
 benchmark bench-io
+  default-language: Haskell2010
   type:             exitcode-stdio-1.0
   hs-source-dirs:   benchmarks
   main-is:          IO.hs
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -38,6 +38,10 @@
   describe "commuteHtmlT" testCommuteHtmlT
   describe "monadFix" testMonadFix
 
+(==?*) :: (Eq a, Show a) => a -> [a] -> Assertion
+x ==?* xs | x `elem` xs = return ()
+          | otherwise   = assertFailure $ show x ++ " is not equal to any of " ++ show xs
+
 -- | Test text/unicode.
 testText :: Spec
 testText =
@@ -103,18 +107,22 @@
            (p_ [class_ "foo"]
                (p_ "")) ==
          "<p class=\"foo\"><p></p></p>")
-     it "mixed"
-        (renderText
+     it "mixed" $
+        renderText
            (p_ [class_ "foo",style_ "attrib"]
                (do style_ ""
-                   style_ "")) ==
-         "<p style=\"attrib\" class=\"foo\"><style></style><style></style></p>")
+                   style_ "")) ==?*
+        [ "<p style=\"attrib\" class=\"foo\"><style></style><style></style></p>"
+        , "<p class=\"foo\" style=\"attrib\"><style></style><style></style></p>"
+        ]
      it "no closing"
         (renderText (p_ [class_ "foo"] (input_ [])) ==
          "<p class=\"foo\"><input></p>")
-     it "multiple"
-        (renderText (p_ [class_ "foo",id_ "zot"] "foo") ==
-         "<p id=\"zot\" class=\"foo\">foo</p>")
+     it "multiple" $
+        renderText (p_ [class_ "foo",id_ "zot"] "foo") ==?*
+        [ "<p id=\"zot\" class=\"foo\">foo</p>"
+        , "<p class=\"foo\" id=\"zot\">foo</p>"
+        ]
      it "encoded"
         (renderText (p_ [class_ "foo<>"] "foo") ==
          "<p class=\"foo&lt;&gt;\">foo</p>")
@@ -152,24 +160,30 @@
                  [class_ "foo"]
                  (p_ "")) ==
          "<p class=\"foo\"><p></p></p>")
-     it "mixed"
-        (renderText
+     it "mixed" $
+        renderText
            (with p_
                  [class_ "foo",style_ "attrib"]
-                 (style_ "")) ==
-         "<p style=\"attrib\" class=\"foo\"><style></style></p>")
-     it "no closing"
-        (renderText (with p_ [class_ "foo"] (with (input_ [type_ "text"]) [class_ "zot"])) ==
-         "<p class=\"foo\"><input type=\"text\" class=\"zot\"></p>")
-     it "multiple"
-        (renderText (with p_ [class_ "foo",id_ "zot"] "foo") ==
-         "<p id=\"zot\" class=\"foo\">foo</p>")
+                 (style_ "")) ==?*
+        [ "<p style=\"attrib\" class=\"foo\"><style></style></p>"
+        , "<pclass=\"foo\" style=\"attrib\"><style></style></p>"
+        ]
+     it "no closing" $
+        renderText (with p_ [class_ "foo"] (with (input_ [type_ "text"]) [class_ "zot"])) ==?*
+        [ "<p class=\"foo\"><input type=\"text\" class=\"zot\"></p>"
+        , "<p class=\"foo\"><input class=\"zot\" type=\"text\"></p>"
+        ]
+     it "multiple" $
+        renderText (with p_ [class_ "foo",id_ "zot"] "foo") ==?*
+        [ "<p id=\"zot\" class=\"foo\">foo</p>"
+        , "<p class=\"foo\" id=\"zot\">foo</p>"
+        ]
      it "encoded"
         (renderText (with p_ [class_ "foo<>"] "foo") ==
          "<p class=\"foo&lt;&gt;\">foo</p>")
      it "nesting attributes"
         (renderText (with (with p_ [class_ "foo"]) [class_ "bar"] "foo") ==
-         "<p class=\"foobar\">foo</p>")
+        "<p class=\"foobar\">foo</p>")
 
 -- | Test that one can use elements with extensible attributes.
 testExtension :: Spec
@@ -177,9 +191,11 @@
   do it "bootstrap"
         (renderText (container_ "Foo!") ==
          "<div class=\" container \">Foo!</div>")
-     it "bootstrap-attributes-extended"
-        (renderText (container_ [class_ "bar",id_ "zot"] "Foo!") ==
-         "<div id=\"zot\" class=\" container bar\">Foo!</div>")
+     it "bootstrap-attributes-extended" $
+        renderText (container_ [class_ "bar",id_ "zot"] "Foo!") ==?*
+        [ "<div id=\"zot\" class=\" container bar\">Foo!</div>"
+        , "<div class=\" container bar\" id=\"zot\">Foo!</div>"
+        ]
 
 -- | Test special elements that do something different to normal
 -- elements.
