diff --git a/non-negative.cabal b/non-negative.cabal
--- a/non-negative.cabal
+++ b/non-negative.cabal
@@ -1,5 +1,5 @@
 Name:             non-negative
-Version:          0.1.1.2
+Version:          0.1.2
 License:          GPL
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -21,7 +21,7 @@
   description: Choose the new smaller, split-up base package.
 
 Source-Repository this
-  Tag:         0.1.1.2
+  Tag:         0.1.2
   Type:        darcs
   Location:    http://code.haskell.org/~thielema/non-negative/
 
@@ -31,6 +31,7 @@
 
 Library
   Build-Depends:
+    semigroups >=0.1 && <1.0,
     utility-ht >= 0.0.1 && <0.1,
     QuickCheck >= 2.1 && <3
   If flag(splitBase)
@@ -55,6 +56,7 @@
   GHC-Options:      -Wall
   Build-Depends:
     QuickCheck,
+    semigroups,
     utility-ht,
     base
   Main-Is:          Test/Main.hs
diff --git a/src/Numeric/NonNegative/ChunkyPrivate.hs b/src/Numeric/NonNegative/ChunkyPrivate.hs
--- a/src/Numeric/NonNegative/ChunkyPrivate.hs
+++ b/src/Numeric/NonNegative/ChunkyPrivate.hs
@@ -18,9 +18,10 @@
 
 import qualified Numeric.NonNegative.Class as NonNeg
 import Control.Monad (liftM, liftM2)
+import Data.Monoid (Monoid(mempty, mappend), )
+import Data.Semigroup (Semigroup((<>)), )
 import Data.Tuple.HT (mapSnd, )
 
-import qualified Data.Monoid as Mn
 import Test.QuickCheck (Arbitrary(arbitrary, shrink))
 
 {- |
@@ -151,7 +152,7 @@
 -}
 
 instance (NonNeg.C a, Num a) => Num (T a) where
-   (+)    = Mn.mappend
+   (+) = mappend
    (Cons x) - (Cons y) =
       let (b,d) = snd $ glue x y
           d' = Cons d
@@ -193,7 +194,10 @@
    in  (fromChunks cs, rm)
 
 
-instance Mn.Monoid (T a) where
+instance Semigroup (T a) where
+   (<>) = lift2 (++)
+
+instance Monoid (T a) where
    mempty = zero
    mappend = lift2 (++)
 
diff --git a/src/Numeric/NonNegative/Wrapper.hs b/src/Numeric/NonNegative/Wrapper.hs
--- a/src/Numeric/NonNegative/Wrapper.hs
+++ b/src/Numeric/NonNegative/Wrapper.hs
@@ -15,8 +15,9 @@
     Int, Integer, Float, Double, Ratio, Rational) where
 
 import qualified Numeric.NonNegative.Class as NonNeg
-import Data.Monoid (Monoid, )
-import qualified Data.Monoid as Monoid
+import Data.Monoid (Monoid(mempty, mappend, mconcat))
+import Data.Semigroup (Semigroup(sconcat, (<>)))
+import Data.List.NonEmpty (NonEmpty((:|)))
 
 import Test.QuickCheck (Arbitrary(arbitrary, shrink))
 import Data.Tuple.HT (mapPair, mapSnd, )
@@ -104,6 +105,10 @@
 lift2 :: (a -> a -> a) -> (T a -> T a -> T a)
 lift2 f (Cons x) (Cons y) = Cons $ f x y
 
+
+instance (Num a) => Semigroup (T a) where
+   Cons x <> Cons y = Cons (x+y)
+   sconcat (x :| xs) = Cons $ toNumber x + sum (map toNumber xs)
 
 instance (Num a) => Monoid (T a) where
    mempty = Cons 0
