diff --git a/markup.cabal b/markup.cabal
--- a/markup.cabal
+++ b/markup.cabal
@@ -1,5 +1,5 @@
 Name:                   markup
-Version:                0.0.2
+Version:                0.0.3
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                MIT
@@ -55,7 +55,7 @@
                       , blaze-html
                       , blaze-markup
                       , text
-                      , urlpath >= 0.0.5
+                      , urlpath >= 0.0.6
 
 Test-Suite spec
   Type:                 exitcode-stdio-1.0
diff --git a/src/Data/Markup/Types.hs b/src/Data/Markup/Types.hs
--- a/src/Data/Markup/Types.hs
+++ b/src/Data/Markup/Types.hs
@@ -5,6 +5,7 @@
 
 module Data.Markup.Types where
 
+import Data.Monoid
 import Control.Applicative
 import Control.Monad
 import Control.Monad.Trans
@@ -70,6 +71,16 @@
   return = InlineMarkupM
   x >>= f = f $ runInlineMarkupM x
 
+instance Monoid w => Monoid (InlineMarkupM w) where
+  x `mappend` y = InlineMarkupM $
+    (runInlineMarkupM x) `mappend` (runInlineMarkupM y)
+
+instance Monad w => Monoid (InlineMarkupM (w a)) where
+  x `mappend` y = InlineMarkupM $ do
+    (runInlineMarkupM x)
+    (runInlineMarkupM y)
+
+
 newtype HostedMarkupM a = HostedMarkupM {runHostedMarkupM :: a}
   deriving (Functor)
 
@@ -81,6 +92,16 @@
   return = HostedMarkupM
   x >>= f = f $ runHostedMarkupM x
 
+instance Monoid w => Monoid (HostedMarkupM w) where
+  x `mappend` y = HostedMarkupM $
+    (runHostedMarkupM x) `mappend` (runHostedMarkupM y)
+
+instance Monad w => Monoid (HostedMarkupM (w a)) where
+  x `mappend` y = HostedMarkupM $ do
+    (runHostedMarkupM x)
+    (runHostedMarkupM y)
+
+
 newtype LocalMarkupM a = LocalMarkupM {runLocalMarkupM :: a}
   deriving (Functor)
 
@@ -92,4 +113,11 @@
   return = LocalMarkupM
   x >>= f = f $ runLocalMarkupM x
 
+instance Monoid w => Monoid (LocalMarkupM w) where
+  x `mappend` y = LocalMarkupM $
+    (runLocalMarkupM x) `mappend` (runLocalMarkupM y)
 
+instance Monad w => Monoid (LocalMarkupM (w a)) where
+  x `mappend` y = LocalMarkupM $ do
+    (runLocalMarkupM x)
+    (runLocalMarkupM y)
