diff --git a/src/Foreign/Storable/Record.hs b/src/Foreign/Storable/Record.hs
--- a/src/Foreign/Storable/Record.hs
+++ b/src/Foreign/Storable/Record.hs
@@ -70,6 +70,7 @@
 import Control.Applicative (Applicative(pure, (<*>)), )
 import Data.Functor.Compose (Compose(Compose), )
 import Data.Monoid (Monoid(mempty, mappend), )
+import Data.Semigroup (Semigroup((<>)), )
 
 import Foreign.Storable.FixedArray (roundUp, )
 import qualified Foreign.Storable as St
@@ -130,11 +131,15 @@
 
 newtype Alignment = Alignment {deconsAlignment :: Int}
 
+instance Semigroup Alignment where
+   {-# INLINE (<>) #-}
+   Alignment x <> Alignment y = Alignment (lcm x y)
+
 instance Monoid Alignment where
    {-# INLINE mempty #-}
    {-# INLINE mappend #-}
    mempty = Alignment 1
-   mappend (Alignment x) (Alignment y) = Alignment (lcm x y)
+   mappend = (<>)
 
 
 {-# INLINE element #-}
diff --git a/src/Foreign/Storable/RecordMinimalSize.hs b/src/Foreign/Storable/RecordMinimalSize.hs
--- a/src/Foreign/Storable/RecordMinimalSize.hs
+++ b/src/Foreign/Storable/RecordMinimalSize.hs
@@ -73,6 +73,7 @@
 import Control.Applicative (Applicative(pure, (<*>)), )
 import Data.Functor.Compose (Compose(Compose), )
 import Data.Monoid (Monoid(mempty, mappend), )
+import Data.Semigroup (Semigroup((<>)), )
 
 import Foreign.Storable.FixedArray (roundUp, )
 import qualified Foreign.Storable as St
@@ -127,11 +128,15 @@
 
 newtype Alignment = Alignment Int
 
+instance Semigroup Alignment where
+   {-# INLINE (<>) #-}
+   Alignment x <> Alignment y = Alignment (lcm x y)
+
 instance Monoid Alignment where
    {-# INLINE mempty #-}
    {-# INLINE mappend #-}
    mempty = Alignment 1
-   mappend (Alignment x) (Alignment y) = Alignment (lcm x y)
+   mappend = (<>)
 
 
 {-# INLINE element #-}
diff --git a/src/Foreign/Storable/RecordReaderPtr.hs b/src/Foreign/Storable/RecordReaderPtr.hs
--- a/src/Foreign/Storable/RecordReaderPtr.hs
+++ b/src/Foreign/Storable/RecordReaderPtr.hs
@@ -73,6 +73,7 @@
 import Control.Applicative (Applicative(pure, (<*>)), )
 import Data.Functor.Compose (Compose(Compose), )
 import Data.Monoid (Monoid(mempty, mappend), )
+import Data.Semigroup (Semigroup((<>)), )
 
 import Foreign.Storable.FixedArray (roundUp, )
 import qualified Foreign.Storable as St
@@ -127,11 +128,15 @@
 
 newtype Alignment = Alignment {deconsAlignment :: Int}
 
+instance Semigroup Alignment where
+   {-# INLINE (<>) #-}
+   Alignment x <> Alignment y = Alignment (lcm x y)
+
 instance Monoid Alignment where
    {-# INLINE mempty #-}
    {-# INLINE mappend #-}
    mempty = Alignment 1
-   mappend (Alignment x) (Alignment y) = Alignment (lcm x y)
+   mappend = (<>)
 
 
 {-# INLINE element #-}
diff --git a/src/Foreign/Storable/Traversable.hs b/src/Foreign/Storable/Traversable.hs
--- a/src/Foreign/Storable/Traversable.hs
+++ b/src/Foreign/Storable/Traversable.hs
@@ -41,6 +41,7 @@
 import qualified Data.Foldable as Fold
 import qualified Control.Applicative as App
 
+-- ToDo: Maybe we should use State.Strict instead?
 import Control.Monad.Trans.State
           (StateT, evalStateT, get, put, modify, )
 import Control.Monad.IO.Class (liftIO, )
diff --git a/storable-record.cabal b/storable-record.cabal
--- a/storable-record.cabal
+++ b/storable-record.cabal
@@ -1,5 +1,5 @@
 Name:         storable-record
-Version:      0.0.3.1
+Version:      0.0.4
 Category:     Data, Foreign
 Synopsis:     Elegant definition of Storable instances for records
 Description:
@@ -63,7 +63,7 @@
 Source-Repository this
   Type:     darcs
   Location: http://code.haskell.org/~thielema/storable-record/
-  Tag:      0.0.3.1
+  Tag:      0.0.4
 
 Flag splitBase
   description: Choose the new smaller, split-up base package.
@@ -75,6 +75,7 @@
 Library
   Build-Depends:
     transformers >=0.2 && <0.6,
+    semigroups >=0.1 && <1.0,
     utility-ht >=0.0.1 && <0.1
   If flag(splitBase)
     Build-Depends:
