diff --git a/src/Graphics/XHB/Ewmh.hs b/src/Graphics/XHB/Ewmh.hs
--- a/src/Graphics/XHB/Ewmh.hs
+++ b/src/Graphics/XHB/Ewmh.hs
@@ -315,7 +315,7 @@
     where none = X.fromXid $ X.toXid (X.toValue WindowNone :: Word32)
 
 getNetDesktopNames :: EwmhCtx m => Connection -> m (Either SomeError [String])
-getNetDesktopNames c = getProp c (X.getRoot c) NET_DESKTOP_NAMES UTF8_STRING
+getNetDesktopNames c = getRootProp c NET_DESKTOP_NAMES UTF8_STRING
 
 setNetDesktopNames :: EwmhCtx m => Connection -> [String] -> m ()
 setNetDesktopNames c = setRootProp c NET_DESKTOP_NAMES UTF8_STRING
@@ -354,7 +354,7 @@
 setNetVirtualRoots c = setRootProp c NET_VIRTUAL_ROOTS AtomWINDOW
 
 getNetDesktopLayout :: EwmhCtx m => Connection -> m (Either SomeError NetDesktopLayout)
-getNetDesktopLayout conn = getRootProp conn NET_DESKTOP_LAYOUT AtomCARDINAL
+getNetDesktopLayout c = getRootProp c NET_DESKTOP_LAYOUT AtomCARDINAL
 
 setNetDesktopLayout :: EwmhCtx m => Connection -> NetDesktopLayout -> m ()
 setNetDesktopLayout c = setRootProp c NET_DESKTOP_LAYOUT AtomCARDINAL
diff --git a/src/Graphics/XHB/Ewmh/Error.hs b/src/Graphics/XHB/Ewmh/Error.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/XHB/Ewmh/Error.hs
@@ -0,0 +1,168 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+{-# LANGUAGE ConstraintKinds  #-}
+{-# LANGUAGE FlexibleContexts #-}
+
+module Graphics.XHB.Ewmh.Error
+    ( EwmhErrorCtx
+    , runEwmhT
+    , getNetSupported
+    , getNetClientList
+    , getNetClientListStacking
+    , getNetNumberOfDesktops
+    , getNetDesktopGeometry
+    , getNetDesktopViewport
+    , getNetCurrentDesktop
+    , getNetDesktopNames
+    , getActiveWindow
+    , getNetWorkarea
+    , getNetSupportingWmCheck
+    , getNetVirtualRoots
+    , getNetDesktopLayout
+    , getNetShowingDesktop
+    , getNetWmName
+    , getNetWmVisibleName
+    , getNetWmIconName
+    , getNetWmVisibleIconName
+    , getNetWmDesktop
+    , getNetWmWindowType
+    , getNetWmState
+    , getNetWmAllowedActions
+    , getNetWmStrut
+    , getNetWmStrutPartial
+    , getNetWmIconGeometry
+    , getNetWmIcon
+    , getNetWmPID
+    , getNetWmHandledIcons
+    , getNetWmUserTime
+    , getNetWmUserTimeWindow
+    , getNetFrameExtents
+    , getNetWmOpaqueRegion
+    , getNetWmBypassCompositor
+    ) where
+
+import Control.Applicative (Applicative)
+import Control.Monad.Except (MonadError(..))
+import Control.Monad.IO.Class (MonadIO(..))
+import Data.Word (Word32)
+import Graphics.XHB (Connection, SomeError, WINDOW)
+import Graphics.XHB.Ewmh.Atoms
+import Graphics.XHB.Ewmh.Types
+import qualified Graphics.XHB.Ewmh as E
+
+type EwmhErrorCtx m = (MonadError SomeError m, EwmhCtx m)
+
+eitherToError :: MonadError e m => Either e a -> m a
+eitherToError (Left e)  = throwError e
+eitherToError (Right a) = return a
+
+runEwmhT :: (MonadError SomeError m, MonadIO m, Applicative m)
+         => Connection -> EwmhT m a -> m a
+runEwmhT c m = E.runEwmhT c m >>= eitherToError
+
+----------------------------
+-- Root Window Properties --
+----------------------------
+
+getNetSupported :: EwmhErrorCtx m => Connection -> m NetSupported
+getNetSupported c = E.getNetSupported c >>= eitherToError
+
+getNetClientList :: EwmhErrorCtx m => Connection -> m [WINDOW]
+getNetClientList c = E.getNetClientList c >>= eitherToError
+
+getNetClientListStacking :: EwmhErrorCtx m => Connection -> m [WINDOW]
+getNetClientListStacking c = E.getNetClientListStacking c >>= eitherToError
+
+getNetNumberOfDesktops :: EwmhErrorCtx m => Connection -> m Word32
+getNetNumberOfDesktops c = E.getNetNumberOfDesktops c >>= eitherToError
+
+getNetDesktopGeometry :: EwmhErrorCtx m => Connection -> m NetDesktopGeometry
+getNetDesktopGeometry c = E.getNetDesktopGeometry c >>= eitherToError
+
+getNetDesktopViewport :: EwmhErrorCtx m => Connection -> m NetDesktopViewport
+getNetDesktopViewport c = E.getNetDesktopViewport c >>= eitherToError
+
+getNetCurrentDesktop :: EwmhErrorCtx m => Connection -> m Word32
+getNetCurrentDesktop c = E.getNetCurrentDesktop c >>= eitherToError
+
+getNetDesktopNames :: EwmhErrorCtx m => Connection -> m [String]
+getNetDesktopNames c = E.getNetDesktopNames c >>= eitherToError
+
+getActiveWindow :: EwmhErrorCtx m => Connection -> m WINDOW
+getActiveWindow c = E.getActiveWindow c >>= eitherToError
+
+getNetWorkarea :: EwmhErrorCtx m => Connection -> m NetWorkarea
+getNetWorkarea c = E.getNetWorkarea c >>= eitherToError
+
+getNetSupportingWmCheck :: EwmhErrorCtx m => Connection -> m WINDOW
+getNetSupportingWmCheck c = E.getNetSupportingWmCheck c >>= eitherToError
+
+getNetVirtualRoots :: EwmhErrorCtx m => Connection -> m [WINDOW]
+getNetVirtualRoots c = E.getNetVirtualRoots c >>= eitherToError
+
+getNetDesktopLayout :: EwmhErrorCtx m => Connection -> m NetDesktopLayout
+getNetDesktopLayout c = E.getNetDesktopLayout c >>= eitherToError
+
+getNetShowingDesktop :: EwmhErrorCtx m => Connection -> m Word32
+getNetShowingDesktop c = E.getNetShowingDesktop c >>= eitherToError
+
+-----------------------------------
+-- Application Window Properties --
+-----------------------------------
+
+getNetWmName :: EwmhErrorCtx m => Connection -> WINDOW -> m [String]
+getNetWmName c w = E.getNetWmName c w >>= eitherToError
+
+getNetWmVisibleName :: EwmhErrorCtx m => Connection -> WINDOW -> m [String]
+getNetWmVisibleName c w = E.getNetWmVisibleName c w >>= eitherToError
+
+getNetWmIconName :: EwmhErrorCtx m => Connection -> WINDOW -> m [String]
+getNetWmIconName c w = E.getNetWmIconName c w >>= eitherToError
+
+getNetWmVisibleIconName :: EwmhErrorCtx m => Connection -> WINDOW -> m [String]
+getNetWmVisibleIconName c w = E.getNetWmVisibleIconName c w >>= eitherToError
+
+getNetWmDesktop :: EwmhErrorCtx m => Connection -> WINDOW -> m Word32
+getNetWmDesktop c w = E.getNetWmDesktop c w >>= eitherToError
+
+getNetWmWindowType :: EwmhErrorCtx m => Connection -> WINDOW -> m [NET_WM_WINDOW_TYPE]
+getNetWmWindowType c w = E.getNetWmWindowType c w >>= eitherToError
+
+getNetWmState :: EwmhErrorCtx m => Connection -> WINDOW -> m [NET_WM_STATE]
+getNetWmState c w = E.getNetWmState c w >>= eitherToError
+
+getNetWmAllowedActions :: EwmhErrorCtx m => Connection -> WINDOW -> m [NET_WM_ALLOWED_ACTIONS]
+getNetWmAllowedActions c w = E.getNetWmAllowedActions c w >>= eitherToError
+
+getNetWmStrut :: EwmhErrorCtx m => Connection -> WINDOW -> m NetWmStrut
+getNetWmStrut c w = E.getNetWmStrut c w >>= eitherToError
+
+getNetWmStrutPartial :: EwmhErrorCtx m => Connection -> WINDOW -> m NetWmStrutPartial
+getNetWmStrutPartial c w = E.getNetWmStrutPartial c w >>= eitherToError
+
+getNetWmIconGeometry :: EwmhErrorCtx m => Connection -> WINDOW -> m NetWmIconGeometry
+getNetWmIconGeometry c w = E.getNetWmIconGeometry c w >>= eitherToError
+
+getNetWmIcon :: EwmhErrorCtx m => Connection -> WINDOW -> m NetWmIcon
+getNetWmIcon c w = E.getNetWmIcon c w >>= eitherToError
+
+getNetWmPID :: EwmhErrorCtx m => Connection -> WINDOW -> m Word32
+getNetWmPID c w = E.getNetWmPID c w >>= eitherToError
+
+getNetWmHandledIcons :: EwmhErrorCtx m => Connection -> WINDOW -> m Word32
+getNetWmHandledIcons c w = E.getNetWmHandledIcons c w >>= eitherToError
+
+getNetWmUserTime :: EwmhErrorCtx m => Connection -> WINDOW -> m Word32
+getNetWmUserTime c w = E.getNetWmUserTime c w >>= eitherToError
+
+getNetWmUserTimeWindow :: EwmhErrorCtx m => Connection -> WINDOW -> m WINDOW
+getNetWmUserTimeWindow c w = E.getNetWmUserTimeWindow c w >>= eitherToError
+
+getNetFrameExtents :: EwmhErrorCtx m => Connection -> WINDOW -> m NetFrameExtents
+getNetFrameExtents c w = E.getNetFrameExtents c w >>= eitherToError
+
+getNetWmOpaqueRegion :: EwmhErrorCtx m => Connection -> WINDOW -> m NetWmOpaqueRegion
+getNetWmOpaqueRegion c w = E.getNetWmOpaqueRegion c w >>= eitherToError
+
+getNetWmBypassCompositor :: EwmhErrorCtx m => Connection -> WINDOW -> m Word32
+getNetWmBypassCompositor c w = E.getNetWmBypassCompositor c w >>= eitherToError
diff --git a/xhb-ewmh.cabal b/xhb-ewmh.cabal
--- a/xhb-ewmh.cabal
+++ b/xhb-ewmh.cabal
@@ -1,5 +1,5 @@
 name:                xhb-ewmh
-version:             0.1.0.1
+version:             0.1.1.1
 synopsis:            EWMH utilities for XHB
 description:         EWMH utilities for XHB
 license:             BSD2
@@ -30,6 +30,7 @@
                        xhb-atom-cache
 
   exposed-modules:     Graphics.XHB.Ewmh,
+                       Graphics.XHB.Ewmh.Error,
                        Graphics.XHB.Ewmh.Atoms,
                        Graphics.XHB.Ewmh.Types,
                        Graphics.XHB.Ewmh.Values,
