diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
--- a/CHANGELOG.markdown
+++ b/CHANGELOG.markdown
@@ -1,3 +1,7 @@
+3.2
+---
+* Changed the `Semigroup` to use a `Semigroup` to combine `Left` branches. Left `Alt` untouched, so you can mix and match.
+
 3.1
 ---
 * Added instances for `mtl` classes and `MonadRandom`.
diff --git a/either.cabal b/either.cabal
--- a/either.cabal
+++ b/either.cabal
@@ -1,6 +1,6 @@
 name:          either
 category:      Control, Monads
-version:       3.1
+version:       3.2
 license:       BSD3
 cabal-version: >= 1.6
 license-file:  LICENSE
diff --git a/src/Control/Monad/Trans/Either.hs b/src/Control/Monad/Trans/Either.hs
--- a/src/Control/Monad/Trans/Either.hs
+++ b/src/Control/Monad/Trans/Either.hs
@@ -139,14 +139,18 @@
       Right x -> return (Right (k x))
   {-# INLINE (<*>) #-}
 
-instance Monad m => Semigroup (EitherT e m a) where
+instance (Monad m, Semigroup e) => Semigroup (EitherT e m a) where
   EitherT m <> EitherT n = EitherT $ m >>= \a -> case a of
-    Left _ -> n
+    Left l -> liftM (\b -> case b of
+      Left l' -> Left (l <> l')
+      Right r -> Right r) n
     Right r -> return (Right r)
   {-# INLINE (<>) #-}
 
 instance (Functor m, Monad m) => Alt (EitherT e m) where
-  (<!>) = (<>)
+  EitherT m <!> EitherT n = EitherT $ m >>= \a -> case a of
+    Left _  -> n
+    Right r -> return (Right r)
   {-# INLINE (<!>) #-}
 
 instance (Functor m, Monad m) => Bind (EitherT e m) where
