diff --git a/markup.cabal b/markup.cabal
--- a/markup.cabal
+++ b/markup.cabal
@@ -1,5 +1,5 @@
 Name:                   markup
-Version:                0.0.3
+Version:                0.0.4
 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.6
+                      , urlpath >= 0.2
 
 Test-Suite spec
   Type:                 exitcode-stdio-1.0
diff --git a/src/Data/Markup/Class.hs b/src/Data/Markup/Class.hs
--- a/src/Data/Markup/Class.hs
+++ b/src/Data/Markup/Class.hs
@@ -19,17 +19,19 @@
 class Deploy symbol input markup (m :: * -> *) where
   deploy :: symbol -> input -> m markup
 
--- | Overload extraction of monad
+-- | Overload extraction of (co)monad
 class Monad m => Markup (m :: * -> *) where
   renderMarkup :: m a -> a
-
+  toMarkup :: a -> m a
 
 instance Markup InlineMarkupM where
   renderMarkup = runInlineMarkupM
+  toMarkup = InlineMarkupM
 
 instance Markup HostedMarkupM where
   renderMarkup = runHostedMarkupM
+  toMarkup = HostedMarkupM
 
 instance Markup LocalMarkupM where
   renderMarkup = runLocalMarkupM
-
+  toMarkup = LocalMarkupM
diff --git a/src/Data/Markup/Library.hs b/src/Data/Markup/Library.hs
--- a/src/Data/Markup/Library.hs
+++ b/src/Data/Markup/Library.hs
@@ -46,10 +46,10 @@
   deploy Image i = return $
     L.img_ [L.src_ i]
 
-instance Url input m =>
-           Deploy Image input (LBase.HtmlT m ()) LocalMarkupM where
+instance Url T.Text m =>
+           Deploy Image (UrlString T.Text) (LBase.HtmlT m ()) LocalMarkupM where
   deploy Image i = return $ do
-    url <- lift $ renderUrl i
+    url <- lift $ url i
     L.img_ [L.src_ url]
 
 instance ( Monad m
@@ -64,14 +64,13 @@
   deploy Image i = return $
     L.img_ [L.src_ i]
 
-instance ( Url input m
+instance ( Url T.Text m
          , Monad m' ) =>
-             Deploy Image input (LBase.HtmlT m ()) (LocalMarkupT m') where
+             Deploy Image (UrlString T.Text) (LBase.HtmlT m ()) (LocalMarkupT m') where
   deploy Image i = return $ do
-    url <- lift $ renderUrl i
+    url <- lift $ url i
     L.img_ [L.src_ url]
 
-
 -- JS instances
 
 instance Monad m =>
@@ -89,10 +88,10 @@
   deploy JavaScript i = return $
     L.script_ [L.src_ i] ("" :: T.Text)
 
-instance Url input m =>
-           Deploy JavaScript input (LBase.HtmlT m ()) LocalMarkupM where
+instance Url T.Text m =>
+           Deploy JavaScript (UrlString T.Text) (LBase.HtmlT m ()) LocalMarkupM where
   deploy JavaScript i = return $ do
-    url <- lift $ renderUrl i
+    url <- lift $ url i
     L.script_ [L.src_ url] ("" :: T.Text)
 
 instance ( Monad m
@@ -113,12 +112,12 @@
   deploy JavaScript i = return $
     L.script_ [L.src_ i] ("" :: T.Text)
 
-instance ( Url input m
+instance ( Url T.Text m
          , Monad m' ) =>
-             Deploy JavaScript input (LBase.HtmlT m ()) (LocalMarkupT m') where
+             Deploy JavaScript (UrlString T.Text) (LBase.HtmlT m ()) (LocalMarkupT m') where
   deploy JavaScript i = return $ do
-    url <- lift $ renderUrl i
-    L.script_ [L.src_ url] ("" :: T.Text)
+    link <- lift $ url i
+    L.script_ [L.src_ link] ("" :: T.Text)
 
 
 -- Blaze-html instances
@@ -129,27 +128,40 @@
   deploy Image i = return $
     H.img H.! A.src (H.toValue i)
 
-instance Url input HI.MarkupM =>
-           Deploy Image input (HI.MarkupM ()) LocalMarkupM where
+instance Url T.Text HI.MarkupM =>
+           Deploy Image T.Text (HI.MarkupM ()) LocalMarkupM where
   deploy Image i = return $ do
-    url <- renderUrl i
-    H.img H.! A.src (H.toValue url)
+    link <- plainUrl i
+    H.img H.! A.src (H.toValue link)
 
+instance Url T.Text HI.MarkupM =>
+           Deploy Image (UrlString T.Text) (HI.MarkupM ()) LocalMarkupM where
+  deploy Image i = return $ do
+    link <- url i
+    H.img H.! A.src (H.toValue link)
+
 instance ( H.ToValue input
          , Monad m ) =>
              Deploy Image input (HI.MarkupM ()) (HostedMarkupT m) where
   deploy Image i = return $
     H.img H.! A.src (H.toValue i)
 
-instance ( Url input HI.MarkupM
+instance ( Url T.Text HI.MarkupM
          , Monad m ) =>
-             Deploy Image input (HI.MarkupM ()) (LocalMarkupT m) where
+             Deploy Image T.Text (HI.MarkupM ()) (LocalMarkupT m) where
   deploy Image i = return $ do
-    url <- renderUrl i
-    H.img H.! A.src (H.toValue url)
+    link <- plainUrl i
+    H.img H.! A.src (H.toValue link)
 
+instance ( Url T.Text HI.MarkupM
+         , Monad m ) =>
+             Deploy Image (UrlString T.Text) (HI.MarkupM ()) (LocalMarkupT m) where
+  deploy Image i = return $ do
+    link <- url i
+    H.img H.! A.src (H.toValue link)
 
 
+
 instance H.ToMarkup input =>
            Deploy JavaScript input (HI.MarkupM ()) InlineMarkupM where
   deploy JavaScript i = return $
@@ -160,12 +172,18 @@
   deploy JavaScript i = return $
     (H.script H.! A.src (H.toValue i)) HI.Empty
 
-instance Url input HI.MarkupM =>
-           Deploy JavaScript input (HI.MarkupM ()) LocalMarkupM where
+instance Url T.Text HI.MarkupM =>
+           Deploy JavaScript T.Text (HI.MarkupM ()) LocalMarkupM where
   deploy JavaScript i = return $ do
-    url <- renderUrl i
-    (H.script H.! A.src (H.toValue url)) HI.Empty
+    link <- plainUrl i
+    (H.script H.! A.src (H.toValue link)) HI.Empty
 
+instance Url T.Text HI.MarkupM =>
+           Deploy JavaScript (UrlString T.Text) (HI.MarkupM ()) LocalMarkupM where
+  deploy JavaScript i = return $ do
+    link <- url i
+    (H.script H.! A.src (H.toValue link)) HI.Empty
+
 instance ( H.ToMarkup input
          , Monad m ) =>
              Deploy JavaScript input (HI.MarkupM ()) (InlineMarkupT m) where
@@ -178,9 +196,16 @@
   deploy JavaScript i = return $
     (H.script H.! A.src (H.toValue i)) HI.Empty
 
-instance ( Url input HI.MarkupM
+instance ( Url T.Text HI.MarkupM
          , Monad m ) =>
-             Deploy JavaScript input (HI.MarkupM ()) (LocalMarkupT m) where
+             Deploy JavaScript T.Text (HI.MarkupM ()) (LocalMarkupT m) where
   deploy JavaScript i = return $ do
-    url <- renderUrl i
-    (H.script H.! A.src (H.toValue url)) HI.Empty
+    link <- plainUrl i
+    (H.script H.! A.src (H.toValue link)) HI.Empty
+
+instance ( Url T.Text HI.MarkupM
+         , Monad m ) =>
+             Deploy JavaScript (UrlString T.Text) (HI.MarkupM ()) (LocalMarkupT m) where
+  deploy JavaScript i = return $ do
+    link <- url i
+    (H.script H.! A.src (H.toValue link)) HI.Empty
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
@@ -71,10 +71,6 @@
   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)
@@ -92,10 +88,6 @@
   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)
@@ -112,10 +104,6 @@
 instance Monad LocalMarkupM where
   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
