diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,54 +1,50 @@
-2.3.0.3
------
+# microlens-aeson
+
+## 2.3.1 (2020-07-19)
+
+#### Fixed
+
+- Test suite fixed to succeed deterministically on 32-bit machines.
+
+## 2.3.0.3
 - Readd 7.10 support. Forgive the spam.
 
-2.3.0.2
------
+## 2.3.0.2
 - Bumping bounds, cleaning code.
 
-2.3.0.1
------
+## 2.3.0.1
 - Enable compilation with GHC `7.8` (`base-4.7`). Only when this version of
   `base` is used does our type `Primitive` lose its `Hashable` instance, due to
   a lack of `DeriveAnyClass`. Otherwise, the API is unchanged from
   `microlens-aeson-2.3.0`.
 
-2.2.0
------
+## 2.2.0
 - Various fixes to dependency version bounds
 
-2.1.0
------
+## 2.1.0
 * Restored original `AsJSON` and `_JSON` typing
 * Bumped `microlens` dep max
 
-2.0.0
------
+## 2.0.0
 * Complete conversion to `microlens`
 * All `Prism` are now `Traversal`
 
-1.0.0.5
--------
+## 1.0.0.5
 * Fix tests to work against vector-0.11
 * Documentation fixes
 * No functional changes since 1.0.0.4
 
-1.0.0.3
--------
+## 1.0.0.3
 * Move lens upper bound to < 5 like the other packages in the family
 
-1
-----
+## 1
 * Module migrated from lens package to Data.Aeson.Lens
 
-0.1.2
------
+## 0.1.2
 * Added `members` and `values`
 
-0.1.1
------
+## 0.1.1
 * Broadened dependencies
 
-0.1
----
+## 0.1
 * Repository initialized
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 microlens-aeson
 ===============
 
-[![Build Status](https://travis-ci.org/fosskers/microlens-aeson.svg?branch=master)](https://travis-ci.org/fosskers/microlens-aeson)
+![](https://github.com/fosskers/microlens-aeson/workflows/Tests/badge.svg)
 [![Hackage](https://img.shields.io/hackage/v/microlens-aeson.svg?style=flat)](https://hackage.haskell.org/package/microlens-aeson)
 [![Stackage Nightly](http://stackage.org/package/microlens-aeson/badge/nightly)](http://stackage.org/nightly/package/microlens-aeson)
 [![Stackage LTS](http://stackage.org/package/microlens-aeson/badge/lts)](http://stackage.org/lts/package/microlens-aeson)
diff --git a/microlens-aeson.cabal b/microlens-aeson.cabal
--- a/microlens-aeson.cabal
+++ b/microlens-aeson.cabal
@@ -1,18 +1,18 @@
-cabal-version: 2.2
-
-name:         microlens-aeson
-version:      2.3.0.4
-synopsis:     Law-abiding lenses for Aeson, using microlens.
-description:  Law-abiding lenses for Aeson, using microlens.
-category:     Numeric
-homepage:     http://github.com/fosskers/microlens-aeson/
-author:       Colin Woodbury
-maintainer:   Colin Woodbury <colin@fosskers.ca>
-copyright:    Copyright (C) 2012 Paul Wilson, (C) 2013 Edward A. Kmett, (C) 2015 Colin Woodbury
-license:      MIT
-license-file: LICENSE
-build-type:   Simple
+cabal-version:      2.2
+name:               microlens-aeson
+version:            2.3.1
+synopsis:           Law-abiding lenses for Aeson, using microlens.
+description:        Law-abiding lenses for Aeson, using microlens.
+category:           Numeric
+homepage:           http://github.com/fosskers/microlens-aeson/
+author:             Colin Woodbury
+maintainer:         Colin Woodbury <colin@fosskers.ca>
+copyright:
+  Copyright (C) 2012 Paul Wilson, (C) 2013 Edward A. Kmett, (C) 2015 Colin Woodbury
 
+license:            MIT
+license-file:       LICENSE
+build-type:         Simple
 extra-source-files:
   AUTHORS.md
   README.md
@@ -22,31 +22,34 @@
 
 common commons
   default-language: Haskell2010
-  ghc-options: -Wall -fwarn-incomplete-record-updates
-  build-depends: base >= 4.7 && < 5
-               , aeson >= 0.7
-               , bytestring
-               , deepseq
-               , hashable
-               , microlens >= 0.3
-               , text >= 0.11
-               , unordered-containers >= 0.2.3
-               , vector >= 0.9
+  ghc-options:      -Wall -fwarn-incomplete-record-updates
+  build-depends:
+    , aeson                 >=0.7
+    , base                  >=4.7   && <5
+    , bytestring
+    , deepseq
+    , hashable
+    , microlens             >=0.3
+    , text                  >=0.11
+    , unordered-containers  >=0.2.3
+    , vector                >=0.9
 
 library
-  import: commons
-  hs-source-dirs: src
+  import:          commons
+  hs-source-dirs:  src
   exposed-modules: Lens.Micro.Aeson
-  other-modules: Lens.Micro.Aeson.Internal
-  build-depends: attoparsec >= 0.10
-               , scientific >= 0.3.2
+  other-modules:   Lens.Micro.Aeson.Internal
+  build-depends:
+    , attoparsec  >=0.10
+    , scientific  >=0.3.2
 
 test-suite microlens-aeson-test
-  import: commons
-  type: exitcode-stdio-1.0
+  import:         commons
+  type:           exitcode-stdio-1.0
   hs-source-dirs: test
-  main-is: Test.hs
-  ghc-options: -threaded -with-rtsopts=-N
-  build-depends: microlens-aeson
-               , tasty >=0.10.1.2
-               , tasty-hunit >=0.9.2
+  main-is:        Test.hs
+  ghc-options:    -threaded -with-rtsopts=-N
+  build-depends:
+    , microlens-aeson
+    , tasty            >=0.10.1.2
+    , tasty-hunit      >=0.9.2
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -7,6 +7,7 @@
 import           Lens.Micro.Aeson
 import           Test.Tasty
 import           Test.Tasty.HUnit
+import           Data.List
 
 ---
 
@@ -48,8 +49,8 @@
     , testCase "" $ ("{\"a\": {}, \"b\": null}" ^? key (T.pack "b") . _Object) @?= Nothing
     , testCase "" $ ("{\"a\": 100, \"b\": 200}" ^? key (T.pack "a")) @?= Just (Number 100.0)
     , testCase "" $ ("[1,2,3]" ^? key (T.pack "a")) @?= Nothing
-    , testCase "" $ ("{\"a\": 4, \"b\": 7}" ^.. members) @?= [Number 4.0,Number 7.0]
-    , testCase "" $ ("{\"a\": 4, \"b\": 7}" & members . _Number %~ (* 10)) @?= "{\"a\":40,\"b\":70}"
+    , testCase "" $ (sort ("{\"a\": 4, \"b\": 7}" ^.. members . _Number)) @?= [4.0, 7.0]
+    , testCase "" $ ("{\"a\": 4}" & members . _Number %~ (* 10)) @?= "{\"a\":40}"
     , testCase "" $ ("[1,2,3]" ^? nth 1) @?= Just (Number 2.0)
     , testCase "" $ ("{\"a\": 100, \"b\": 200}" ^? nth 1) @?= Nothing
     , testCase "" $ ("[1,2,3]" & nth 1 .~ Number 20) @?= "[1,20,3]"
