diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,12 @@
+
+### 1.2.1
+- Move Changelog.md to extra-doc-files section [#17](https://github.com/PSQueue/PSQueue/pull/17)
+- Use tasty in test suite [#16](https://github.com/PSQueue/PSQueue/pull/16)
+- Fix tree balancing logic (Thanks to @chowells79) [#15](https://github.com/PSQueue/PSQueue/pull/15)
+- Support GHC-9.12 [#13](https://github.com/PSQueue/PSQueue/pull/13)
+- Support GHC-9.10 [#12](https://github.com/PSQueue/PSQueue/pull/12)
+- Support GHC-9.8 [#11](https://github.com/PSQueue/PSQueue/pull/11)
+
 ### 1.2.0
 
 - Fix typos (Thanks to @Moiman) [#8](https://github.com/PSQueue/PSQueue/pull/8)
diff --git a/PSQueue.cabal b/PSQueue.cabal
--- a/PSQueue.cabal
+++ b/PSQueue.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.0
 name:               PSQueue
-version:            1.2.0
+version:            1.2.1
 build-type:         Simple
 license:            BSD3
 license-file:       LICENSE
@@ -18,8 +18,8 @@
   can be retrieved in constant time.  A queue can be built
   from a list of bindings, sorted by keys, in linear time.
 
-tested-with:        GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.1 || ==9.6.1
-extra-source-files: ChangeLog.md
+tested-with:        GHC ==8.8.4 || ==8.10.7 || ==9.0.2 || ==9.2.4 || ==9.4.1 || ==9.6.1 || ==9.8.1 || ==9.10.1 || ==9.12.1
+extra-doc-files: ChangeLog.md
 
 source-repository head
   type:     git
@@ -36,7 +36,7 @@
   if impl(ghc >7.2)
     default-extensions: Safe
 
-  build-depends:    base >=4.3 && <4.19
+  build-depends:    base >=4.3 && <4.22
 
 test-suite test
   type:             exitcode-stdio-1.0
@@ -47,3 +47,5 @@
       base
     , PSQueue
     , QuickCheck < 3
+    , tasty <1.6
+    , tasty-quickcheck <0.12
diff --git a/src/Data/PSQueue/Internal.hs b/src/Data/PSQueue/Internal.hs
--- a/src/Data/PSQueue/Internal.hs
+++ b/src/Data/PSQueue/Internal.hs
@@ -466,19 +466,17 @@
 lbalance, rbalance ::
   Ord p => k -> p -> LTree k p -> k -> LTree k p -> LTree k p
 
-lbalance k p Start m r        = lloser        k p Start m r
-lbalance k p l m Start        = lloser        k p l m Start
 lbalance k p l m r
+  | size' r + size' l < 2     = lloser        k p l m r
   | size' r > omega * size' l = lbalanceLeft  k p l m r
   | size' l > omega * size' r = lbalanceRight k p l m r
-  | otherwise               = lloser        k p l m r
+  | otherwise                 = lloser        k p l m r
 
-rbalance k p Start m r        = rloser        k p Start m r
-rbalance k p l m Start        = rloser        k p l m Start
 rbalance k p l m r
+  | size' r + size' l < 2     = rloser        k p l m r
   | size' r > omega * size' l = rbalanceLeft  k p l m r
   | size' l > omega * size' r = rbalanceRight k p l m r
-  | otherwise               = rloser        k p l m r
+  | otherwise                 = rloser        k p l m r
 
 {-# INLINABLE lbalanceLeft #-}
 lbalanceLeft :: Ord p => k -> p -> LTree k p -> k -> LTree k p -> LTree k p
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -2,6 +2,8 @@
 import Data.PSQueue.Internal
 
 import Test.QuickCheck
+import Test.Tasty
+import Test.Tasty.QuickCheck
 import Data.List (sort)
 
 isBalanced Start = True
@@ -47,15 +49,10 @@
         Nothing -> True
         Just (b2,_) -> prio b1 <= prio b2 && prop_MinView t'
 
-main =
-  do
-  putStrLn "Balanced"
-  quickCheck prop_Balanced
-  putStrLn "OrderedKeys"
-  quickCheck prop_OrderedKeys
-  putStrLn "MinView"
-  quickCheck prop_MinView
-  putStrLn "AtMost"
-  quickCheck prop_AtMost
-  putStrLn "AtMostRange"
-  quickCheck prop_AtMostRange
+main = defaultMain $ testGroup "Tests"
+  [ testProperty "Balanced" prop_Balanced
+  , testProperty "OrderedKeys" prop_OrderedKeys
+  , testProperty "MinView" prop_MinView
+  , testProperty "AtMost" prop_AtMost
+  , testProperty "AtMostRange" prop_AtMostRange
+  ]
