diff --git a/ghcjs-perch.cabal b/ghcjs-perch.cabal
--- a/ghcjs-perch.cabal
+++ b/ghcjs-perch.cabal
@@ -3,7 +3,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.3.3.2
+version:             0.3.3.3
 
 synopsis:            GHCJS version of Perch library.
 
diff --git a/src/Internal/API.hs b/src/Internal/API.hs
--- a/src/Internal/API.hs
+++ b/src/Internal/API.hs
@@ -42,6 +42,13 @@
 newElem = notImplemented
 #endif
 
+newElemNS :: JSString -> JSString -> IO Elem
+#ifdef ghcjs_HOST_OS
+newElemNS ns e  = Elem <$> js_documentCreateNodeNS ns e
+#else
+newElemNS = notImplemented
+#endif
+
 newTextElem :: JSString -> IO Elem
 #ifdef ghcjs_HOST_OS
 newTextElem = (Elem <$>) . js_createTextNode
diff --git a/src/Internal/FFI.hs b/src/Internal/FFI.hs
--- a/src/Internal/FFI.hs
+++ b/src/Internal/FFI.hs
@@ -28,6 +28,9 @@
 foreign import javascript unsafe "document.createElement($1)"
   js_documentCreateNode :: JSString -> IO JSVal
 
+foreign import javascript unsafe "document.createElementNS($1,$2)"
+  js_documentCreateNodeNS ::  JSString -> JSString -> IO JSVal
+
 foreign import javascript unsafe "document.createTextNode($1)"
   js_createTextNode :: JSString -> IO JSVal
 
diff --git a/src/Internal/Perch.hs b/src/Internal/Perch.hs
--- a/src/Internal/Perch.hs
+++ b/src/Internal/Perch.hs
@@ -46,11 +46,23 @@
 
 --------------------------------------------------------------------------------
 instance Monoid (PerchM a) where
-  mappend mx my = Perch . withPerch $ \e ->
+  mempty = Perch return
+  
+#if MIN_VERSION_base(4,11,0) 
+  mappend  = (<>) 
+
+instance  Semigroup (PerchM a) where
+  (<>)=  mappendt
+
+#else
+  mappend= mappendt
+#endif
+
+mappendt mx my = Perch . withPerch $ \e ->
     do build mx e
        build my e
-  mempty = Perch return
 
+
 instance Functor PerchM
 
 instance Applicative PerchM
@@ -98,9 +110,17 @@
 attr :: forall a. PerchM a -> (PropId, JSString) -> PerchM a
 attr tag (n, v) = Perch $ withPerchBuild tag (\t -> setAttr t n v)
 
+-- | Create a new elemet
 nelem :: JSString -> Perch
 nelem s = Perch $ \x ->
   do e <- newElem s
+     addChild e x
+     return e
+     
+-- | Create a new element with a namespace`
+nelemNS :: JSString -> JSString -> Perch
+nelemNS ns s=  Perch $ \x ->
+  do e <- newElemNS ns s
      addChild e x
      return e
 
