diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 1.3
+
+* Give preference to Semigroup definitions over Monoid
+
 # 1.2
 
 * Replace the `Foreign` export with `Foreign.Storable`, `Foreign.Ptr`, `Foreign.ForeignPtr`, `Foreign.StablePtr`. It's more conservative and way less likely to cause name collisions.
diff --git a/base-prelude.cabal b/base-prelude.cabal
--- a/base-prelude.cabal
+++ b/base-prelude.cabal
@@ -1,7 +1,7 @@
 name:
   base-prelude
 version:
-  1.2.1
+  1.3
 synopsis:
   The most complete prelude formed solely from the "base" package
 description:
diff --git a/library/BasePrelude.hs b/library/BasePrelude.hs
--- a/library/BasePrelude.hs
+++ b/library/BasePrelude.hs
@@ -35,34 +35,71 @@
 import Control.Exception as Exports
 import Control.Monad as Exports hiding (mapM_, sequence_, forM_, msum, mapM, sequence, forM)
 import Control.Monad.Fix as Exports hiding (fix)
+#if MIN_VERSION_base(4,9,0)
+import Control.Monad.Fail as Exports (MonadFail)
+#endif
+#if MIN_VERSION_base(4,9,0)
+import Control.Monad.IO.Class as Exports
+#endif
 import Control.Monad.ST as Exports
+#if MIN_VERSION_base(4,8,0)
+import Data.Bifunctor as Exports
+#endif
 import Data.Bits as Exports
-import Data.Bool as Exports hiding (bool)
+import Data.Bool as Exports
 import Data.Char as Exports
+#if MIN_VERSION_base(4,7,0)
+import Data.Coerce as Exports
+#endif
 import Data.Complex as Exports
 import Data.Data as Exports
 import Data.Dynamic as Exports
 import Data.Either as Exports
 import Data.Fixed as Exports
 import Data.Foldable as Exports
-import Data.Functor as Exports hiding (($>))
-import Data.Function as Exports hiding ((.), id, (&))
+import Data.Functor as Exports
+#if MIN_VERSION_base(4,9,0)
+import Data.Functor.Classes as Exports
+#endif
+#if MIN_VERSION_base(4,9,0)
+import Data.Functor.Compose as Exports
+#endif
+#if MIN_VERSION_base(4,8,0)
+import Data.Functor.Identity as Exports
+#endif
+import Data.Function as Exports hiding ((.), id)
 import Data.Int as Exports
 import Data.IORef as Exports
 import Data.Ix as Exports
-import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
+import Data.List as Exports hiding (concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
+#if MIN_VERSION_base(4,9,0)
+import Data.List.NonEmpty as Exports (NonEmpty(..))
+#endif
 import Data.Maybe as Exports
+#if MIN_VERSION_base(4,9,0)
+import Data.Monoid as Exports hiding ((<>), First(..), Last(..))
+#else
 import Data.Monoid as Exports
+#endif
 import Data.Ord as Exports
+#if MIN_VERSION_base(4,7,0)
+import Data.Proxy as Exports
+#endif
 import Data.Ratio as Exports
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup as Exports
+#endif
 import Data.STRef as Exports
 import Data.String as Exports
 import Data.Traversable as Exports
 import Data.Tuple as Exports
 import Data.Unique as Exports
 import Data.Version as Exports
+#if MIN_VERSION_base(4,8,0)
+import Data.Void as Exports
+#endif
 import Data.Word as Exports
-import Debug.Trace as Exports hiding (traceShowId, traceM, traceShowM)
+import Debug.Trace as Exports
 import Foreign.Storable as Exports
 import Foreign.Ptr as Exports
 import Foreign.ForeignPtr as Exports
@@ -72,6 +109,9 @@
 import GHC.Generics as Exports (Generic)
 import GHC.IO.Exception as Exports
 import Numeric as Exports
+#if MIN_VERSION_base(4,8,0)
+import Numeric.Natural as Exports
+#endif
 import Prelude as Exports hiding (concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))
 import System.Environment as Exports
 import System.Exit as Exports
@@ -86,37 +126,6 @@
 import Text.Printf as Exports (printf, hPrintf)
 import Text.Read as Exports (Read(..), readMaybe, readEither)
 import Unsafe.Coerce as Exports
-
--- Conditional imports for newer bases
-#if MIN_VERSION_base(4,7,0)
-import Data.Coerce as Exports
-import Data.Proxy as Exports
-#endif
-#if MIN_VERSION_base(4,8,0)
-import Data.Bifunctor as Exports
-import Data.Functor.Identity as Exports
-import Data.Void as Exports
-import Numeric.Natural as Exports
-#endif
-#if MIN_VERSION_base(4,9,0)
-import Control.Monad.Fail as Exports (MonadFail)
-import Control.Monad.IO.Class as Exports
-import Data.Functor.Classes as Exports
-import Data.Functor.Compose as Exports
-import Data.List.NonEmpty as Exports (NonEmpty(..))
-import Data.Semigroup as Exports hiding ((<>), First(..), Last(..))
-#endif
-
--- Conditional imports for reimplementations
-#if MIN_VERSION_base(4,7,0)
-import Data.Bool (bool)
-import Debug.Trace (traceShowId, traceM, traceShowM)
-import Data.Functor (($>))
-#endif
-#if MIN_VERSION_base(4,8,0)
-import Data.Function ((&))
-import Data.List (isSubsequenceOf, sortOn, uncons)
-#endif
 
 
 ---------------------------------
