diff --git a/Network/DGS.hs b/Network/DGS.hs
--- a/Network/DGS.hs
+++ b/Network/DGS.hs
@@ -7,24 +7,26 @@
 
 Here are some sample interactions from ghci, with a fictitious password:
 
-> *Network.DGS> browse (silence >> login development "smartypants" "password")
+> *Network.DGS> browseDGS (silence >> login development "smartypants" "password")
 > LoginSuccess
-> *Network.DGS> browse (silence >> statusUID production 4155) >>= mapM_ print
+> *Network.DGS> browseDGS (silence >> statusUID production 4155) >>= mapM_ print
 > (453881,"jedge42",False,"2009-12-21 03:14 GMT","F: 30d 1h")
 > (532927,"bartnix",False,"2009-12-20 06:06 GMT","F: 21d 13h")
-> *Network.DGS> browse (silence >> statusUser production "dmwit") >>= mapM_ print
+> *Network.DGS> browseDGS (silence >> statusUser production "dmwit") >>= mapM_ print
 > (453881,"jedge42",False,"2009-12-21 03:14 GMT","F: 30d 1h")
 > (532927,"bartnix",False,"2009-12-20 06:06 GMT","F: 21d 13h")
 > *Network.DGS> :{
-> *Network.DGS| browse $ do {
+> *Network.DGS| browseDGS $ do {
 > *Network.DGS|   silence;
 > *Network.DGS|   login development "smartypants" "password";
-> *Network.DGS|   (_, [(gid, _, black, _, _)]) <- status development;
+> *Network.DGS|   (_, (gid, _, black, _, _):_) <- status development;
 > *Network.DGS|   move development gid black (16, 18) (17, 16)
 > *Network.DGS|   }
 > *Network.DGS| :}
 > MoveSuccess
 -}
+
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 module Network.DGS (
     -- * Logging in
     LoginResult(..),
@@ -45,34 +47,44 @@
 
     -- * Miscellaneous
     module Network.Browser,
-    DGS,
+    DGS(..),
     development,
     production,
-    silence
+    silence,
+    browseDGS
 ) where
 
+-- TODO: remove this imports when the instance is available from the HTTP package
+import Control.Monad.Trans
 import Data.List
 import Data.List.Split
 import Network.Browser
 import Network.HTTP
 import Network.URI
+import qualified Network.Browser as B
 -- }}}
 -- helpers {{{
 -- | a convenient type synonym for HTTP's browser monad
-type DGS a = BrowserAction (HandleStream String) a
+newtype DGS a = DGS { runDGS :: BrowserAction (HandleStream String) a } deriving (Functor, Monad, MonadIO)
 
+-- TODO: port this upstream to the HTTP package
+instance MonadIO (BrowserAction conn) where liftIO = ioAction
+
 uri :: String -> String -> URI
 uri server path = full where
     auth = URIAuth { uriRegName = server, uriUserInfo = "", uriPort = "" }
     full = nullURI { uriScheme = "http:", uriAuthority = Just auth, uriPath = '/' : path }
 
 get :: (String -> a) -> URI -> [(String, String)] -> DGS a
-get f uri = fmap (f . rspBody . snd) . request . formToRequest . Form GET uri
+get f uri = DGS . fmap (f . rspBody . snd) . request . formToRequest . Form GET uri
 
 -- | by default, HTTP's browser chatters a lot on stdout; this action turns off
 -- the chatter
 silence :: DGS ()
-silence = setErrHandler quiet >> setOutHandler quiet where quiet _ = return ()
+silence = DGS $ setErrHandler quiet >> setOutHandler quiet where quiet _ = return ()
+
+browseDGS :: DGS a -> IO a
+browseDGS = B.browse . runDGS
 -- }}}
 -- servers {{{
 -- | the address of the development server, @\"dragongoserver.sourceforge.net\"@
diff --git a/dgs.cabal b/dgs.cabal
--- a/dgs.cabal
+++ b/dgs.cabal
@@ -1,5 +1,5 @@
 name:               dgs
-version:            0.1
+version:            0.2
 author:             Daniel Wagner
 maintainer:         daniel@wagner-home.com
 homepage:           http://www.dmwit.com/dgs
@@ -20,15 +20,16 @@
     exposed-modules:    Network.DGS
 
     build-depends:  base >=3 && < 4,
+                    mtl >= 1.1,
                     HTTP,
                     network,
                     split
 
 source-repository head
     type:       git
-    location:   http://www.dmwit.com/dgs
+    location:   http://www.dmwit.com/dgs/.git
 
 source-repository this
     type:       git
-    location:   http://www.dmwit.com/dgs
-    tag:        0.1
+    location:   http://www.dmwit.com/dgs/.git
+    tag:        0.2
