diff --git a/non-empty.cabal b/non-empty.cabal
--- a/non-empty.cabal
+++ b/non-empty.cabal
@@ -1,6 +1,6 @@
 Cabal-Version:    2.2
 Name:             non-empty
-Version:          0.3.6
+Version:          0.3.6.1
 License:          BSD-3-Clause
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -68,7 +68,7 @@
   Makefile
 
 Source-Repository this
-  Tag:         0.3.6
+  Tag:         0.3.6.1
   Type:        darcs
   Location:    https://hub.darcs.net/thielema/non-empty/
 
@@ -83,7 +83,7 @@
     deepseq >=1.3 && <1.7,
     utility-ht >=0.0.8 && <0.1,
     QuickCheck >=2.1 && <3,
-    base >=4 && <5
+    base >=4.11 && <5
 
   Default-Language: Haskell98
   GHC-Options:      -Wall
diff --git a/src/Data/Empty.hs b/src/Data/Empty.hs
--- a/src/Data/Empty.hs
+++ b/src/Data/Empty.hs
@@ -6,7 +6,7 @@
 import qualified Data.Foldable as Fold
 import qualified Data.Ix as Ix
 import Data.Semigroup (Semigroup((<>)))
-import Data.Monoid (Monoid(mempty,mappend))
+import Data.Monoid (Monoid(mempty))
 import Control.Applicative (pure, )
 import Control.DeepSeq (NFData, rnf, )
 
@@ -29,7 +29,6 @@
 
 instance Monoid (T a) where
    mempty = Cons
-   mappend Cons Cons = Cons
 
 instance Functor T where
    fmap _ Cons = Cons
diff --git a/src/Data/NonEmptyPrivate.hs b/src/Data/NonEmptyPrivate.hs
--- a/src/Data/NonEmptyPrivate.hs
+++ b/src/Data/NonEmptyPrivate.hs
@@ -18,7 +18,7 @@
 import Data.Foldable (Foldable, )
 import Data.Semigroup (Semigroup((<>)))
 import Control.Monad.HT (void, )
-import Control.Monad (Monad, return, (=<<), )
+import Control.Monad (Monad, (=<<), )
 import Control.Applicative (Applicative, liftA2, pure, (<*>), )
 import Control.DeepSeq (NFData, rnf, )
 
@@ -154,7 +154,6 @@
 
 instance (Monad f, C.Empty f, C.Cons f, C.Append f) =>
       Monad (T f) where
-   return = singleton
    (>>=) = bind
 
 
diff --git a/test/Test/Data/NonEmptyPrivate.hs b/test/Test/Data/NonEmptyPrivate.hs
--- a/test/Test/Data/NonEmptyPrivate.hs
+++ b/test/Test/Data/NonEmptyPrivate.hs
@@ -27,47 +27,47 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Data.NonEmptyPrivate:484: "
-{-# LINE 484 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:483: "
+{-# LINE 483 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 484 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 483 "src/Data/NonEmptyPrivate.hs" #-}
         
    \xs ys ->
    NonEmpty.flatten (NonEmptyC.mergeBy (<=) xs (ys :: NonEmpty.T [] Int))
    ==
    ListHT.mergeBy (<=) (NonEmpty.flatten xs) (NonEmpty.flatten ys)
   )
- DocTest.printPrefix "Data.NonEmptyPrivate:498: "
-{-# LINE 498 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:497: "
+{-# LINE 497 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 498 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 497 "src/Data/NonEmptyPrivate.hs" #-}
         
    \xs ys ->
    NonEmpty.flatten (NonEmpty.mergeLeftBy (<=) xs (ys :: [Int]))
    ==
    ListHT.mergeBy (<=) (NonEmpty.flatten xs) ys
   )
- DocTest.printPrefix "Data.NonEmptyPrivate:517: "
-{-# LINE 517 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:516: "
+{-# LINE 516 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 517 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 516 "src/Data/NonEmptyPrivate.hs" #-}
         
    \xs ys ->
    NonEmpty.flatten (NonEmpty.mergeRightBy (<=) (xs :: [Int]) ys)
    ==
    ListHT.mergeBy (<=) xs (NonEmpty.flatten ys)
   )
- DocTest.printPrefix "Data.NonEmptyPrivate:536: "
-{-# LINE 536 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:535: "
+{-# LINE 535 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.example(
-{-# LINE 536 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 535 "src/Data/NonEmptyPrivate.hs" #-}
     NonEmpty.mergeBy (<=) ('c'!:'d':'f':[]) ('a'!:'e':'h':[])
   )
   [ExpectedLine [LineChunk "'a'!:'c'!:'d':'e':'f':'h':[]"]]
- DocTest.printPrefix "Data.NonEmptyPrivate:539: "
-{-# LINE 539 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:538: "
+{-# LINE 538 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 539 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 538 "src/Data/NonEmptyPrivate.hs" #-}
         
    \xs ys ->
    NonEmpty.flatten
@@ -75,39 +75,39 @@
    ==
    ListHT.mergeBy (<=) (NonEmpty.flatten xs) (NonEmpty.flatten ys)
   )
- DocTest.printPrefix "Data.NonEmptyPrivate:684: "
-{-# LINE 684 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:683: "
+{-# LINE 683 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 684 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 683 "src/Data/NonEmptyPrivate.hs" #-}
       let takeUntil p xs = NonEmpty.zipWith const xs $ () !: void (takeWhile (not . p) $ NonEmpty.flatten xs) in \k xs -> takeUntil (>=k) xs == NonEmpty.takeUntil (>=(k::Int)) xs
   )
+ DocTest.printPrefix "Data.NonEmptyPrivate:827: "
+{-# LINE 827 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.property(
+{-# LINE 827 "src/Data/NonEmptyPrivate.hs" #-}
+      \xs -> mapMaybe EitherHT.maybeLeft (NonEmpty.flatten xs) == either NonEmpty.flatten fst (NonEmpty.partitionEithersLeft (xs::NonEmpty.T[](Either Char Int)))
+  )
  DocTest.printPrefix "Data.NonEmptyPrivate:828: "
 {-# LINE 828 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
 {-# LINE 828 "src/Data/NonEmptyPrivate.hs" #-}
-      \xs -> mapMaybe EitherHT.maybeLeft (NonEmpty.flatten xs) == either NonEmpty.flatten fst (NonEmpty.partitionEithersLeft (xs::NonEmpty.T[](Either Char Int)))
+      \xs -> mapMaybe EitherHT.maybeRight (NonEmpty.flatten xs) == either (const []) (NonEmpty.flatten . snd) (NonEmpty.partitionEithersLeft (xs::NonEmpty.T[](Either Char Int)))
   )
  DocTest.printPrefix "Data.NonEmptyPrivate:829: "
 {-# LINE 829 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
 {-# LINE 829 "src/Data/NonEmptyPrivate.hs" #-}
-      \xs -> mapMaybe EitherHT.maybeRight (NonEmpty.flatten xs) == either (const []) (NonEmpty.flatten . snd) (NonEmpty.partitionEithersLeft (xs::NonEmpty.T[](Either Char Int)))
-  )
- DocTest.printPrefix "Data.NonEmptyPrivate:830: "
-{-# LINE 830 "src/Data/NonEmptyPrivate.hs" #-}
- DocTest.property(
-{-# LINE 830 "src/Data/NonEmptyPrivate.hs" #-}
       \xs -> NonEmpty.partitionEithersRight (fmap EitherHT.swap xs) == EitherHT.mapLeft swap (EitherHT.swap (NonEmpty.partitionEithersLeft (xs::NonEmpty.T[](Either Char Int))))
   )
- DocTest.printPrefix "Data.NonEmptyPrivate:840: "
-{-# LINE 840 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:839: "
+{-# LINE 839 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 840 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 839 "src/Data/NonEmptyPrivate.hs" #-}
       \xs -> NonEmpty.partitionEithersLeft (fmap EitherHT.swap xs) == EitherHT.mapRight swap (EitherHT.swap (NonEmpty.partitionEithersRight (xs::NonEmpty.T[](Either Char Int))))
   )
- DocTest.printPrefix "Data.NonEmptyPrivate:851: "
-{-# LINE 851 "src/Data/NonEmptyPrivate.hs" #-}
+ DocTest.printPrefix "Data.NonEmptyPrivate:850: "
+{-# LINE 850 "src/Data/NonEmptyPrivate.hs" #-}
  DocTest.property(
-{-# LINE 851 "src/Data/NonEmptyPrivate.hs" #-}
+{-# LINE 850 "src/Data/NonEmptyPrivate.hs" #-}
       forRange $ \b0 -> forRange $ \b1 -> forRange $ \b2 -> let b = FuncHT.unzip $ b0!:b1!:b2!:Empty.Cons in map (Ix.index b) (Ix.range b) == take (Ix.rangeSize b) [0..]
   )
