diff --git a/fadno-braids.cabal b/fadno-braids.cabal
--- a/fadno-braids.cabal
+++ b/fadno-braids.cabal
@@ -1,6 +1,6 @@
 name:                fadno-braids
 category:            Data, Math, Algebra
-version:             0.1.1
+version:             0.1.2
 synopsis:            Braid representations in Haskell
 description:  Braids represented as Haskell types with support for generation and transformations.
 homepage:            http://github.com/slpopejoy/
@@ -22,13 +22,13 @@
                   Fadno.Braids.Graphics
   -- other-modules:
   -- other-extensions:
-  build-depends:       base >= 4.9 && < 4.11
-                     , containers >= 0.5 && < 0.6
-                     , data-default >= 0.7 && < 0.8
-                     , diagrams >= 1.4 && < 1.5
-                     , diagrams-lib >= 1.4 && < 1.5
-                     , diagrams-rasterific >= 1.4 && < 1.5
-                     , lens >= 4.15 && < 4.17
-                     , random >= 1.1 && < 1.2
+  build-depends:       base >= 4.9 && < 4.13
+                     , containers >= 0.5
+                     , data-default >= 0.7
+                     , diagrams >= 1.4
+                     , diagrams-lib >= 1.4
+                     , diagrams-rasterific >= 1.4
+                     , lens >= 4.15
+                     , random >= 1.1
   hs-source-dirs: src
   default-language:    Haskell2010
diff --git a/src/Fadno/Braids/Internal.hs b/src/Fadno/Braids/Internal.hs
--- a/src/Fadno/Braids/Internal.hs
+++ b/src/Fadno/Braids/Internal.hs
@@ -61,7 +61,7 @@
 
 -- | Braid as "Artin generators" (one-at-a-time).
 newtype Artin a = Artin { _aGens :: [Gen a] }
-    deriving (Eq,Show,Monoid,Functor)
+    deriving (Eq,Show,Semigroup,Monoid,Functor)
 instance Foldable Artin where
     foldMap f = foldMap f . map _gPos . _aGens
 makeLenses ''Artin
@@ -159,18 +159,19 @@
      Just v  -> f v <&> \v' -> insertS (Gen k v') m
      Nothing -> pure m
   {-# INLINE ix #-}
+instance Integral a => Semigroup (Step a) where
+    a <> b = foldl ins a (stepToGens b)
+        where ins s g = insertWithS (flip const) g s
 
 instance Integral a => Monoid (Step a) where
     mempty = Empty
-    a `mappend` b = foldl ins a (stepToGens b)
-        where ins s g = insertWithS (flip const) g s
 
 
 
 
 -- | Steps of many-at-a-time generators.
 newtype MultiGen a = MultiGen { _mSteps :: [Step a] }
-    deriving (Eq,Monoid)
+    deriving (Eq,Semigroup,Monoid)
 instance (Show a) => Show (MultiGen a) where show (MultiGen s) = "MultiGen " ++ show s
 makeLenses ''MultiGen
 
@@ -179,10 +180,11 @@
 data DimBraid b a =
     DimBraid { _dBraid :: b a, _dSteps :: Int, _dStrands :: a }
     deriving (Eq,Show)
+instance (Semigroup (b a), Integral a) => Semigroup (DimBraid b a) where
+  (DimBraid b1 x1 y1) <> (DimBraid b2 x2 y2) =
+        DimBraid (b1 <> b2) (max x1 x2) (y1 + y2)
 instance (Monoid (b a), Integral a) => Monoid (DimBraid b a) where
     mempty = DimBraid mempty 0 0
-    (DimBraid b1 x1 y1) `mappend` (DimBraid b2 x2 y2) =
-        DimBraid (b1 `mappend` b2) (max x1 x2) (y1 + y2)
 makeLenses ''DimBraid
 
 -- | Make 'DimBraid' using braid's dimensions.
@@ -304,7 +306,7 @@
 -- is the first value of the next.
 -- Foldable instance ignores "last" values of strands (since they will equal the next head).
 newtype Loop a = Loop { _lStrands :: [Strand a] }
-            deriving (Eq,Show,Monoid,Functor)
+            deriving (Eq,Show,Semigroup,Monoid,Functor)
 makeLenses ''Loop
 
 instance Foldable Loop where
