diff --git a/gitter.cabal b/gitter.cabal
--- a/gitter.cabal
+++ b/gitter.cabal
@@ -1,5 +1,5 @@
 name: gitter
-version: 0.0.0.1
+version: 0.1
 cabal-version: >=1.10
 build-type: Simple
 license: GPL-3
@@ -21,18 +21,16 @@
         Network.Gitter.Monad
         Network.Gitter.Types
     build-depends:
-        aeson >=0.8.0.2 && <0.9,
-        base >=4.8.1.0 && <4.9,
-        bytestring >=0.10.6.0 && <0.11,
-        exceptions >=0.8.0.2 && <0.9,
-        lens >=4.12.3 && <4.13,
-        lens-aeson >=1.0.0.4 && <1.1,
+        aeson >=0.11.2.1 && <0.12,
+        base >=4.9.0.0 && <4.10,
+        bytestring >=0.10.8.1 && <0.11,
+        exceptions >=0.8.3 && <0.9,
+        lens ==4.14.*,
+        lens-aeson >=1.0.0.5 && <1.1,
         mtl >=2.2.1 && <2.3,
-        text >=1.2.1.3 && <1.3,
-        wreq >=0.4.0.0 && <0.5
+        text >=1.2.2.1 && <1.3,
+        wreq >=0.4.1.0 && <0.5
     default-language: Haskell2010
-    default-extensions: GeneralizedNewtypeDeriving OverloadedStrings
-                        RecordWildCards StandaloneDeriving TemplateHaskell
     hs-source-dirs: src
     other-modules:
         Control.Monad.Trans.X
diff --git a/src/Network/Gitter.hs b/src/Network/Gitter.hs
--- a/src/Network/Gitter.hs
+++ b/src/Network/Gitter.hs
@@ -1,6 +1,6 @@
 {-
     Gitter API client — Haskell library
-    Copyright (C) 2015 Yuriy Syrovetskiy
+    Copyright (C) 2015-2016 Yuriy Syrovetskiy
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -16,6 +16,10 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -}
 
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+
 module Network.Gitter
     ( Gitter(..)
     , GitterT
@@ -24,20 +28,25 @@
     , withRoom
     ) where
 
-import Network.Gitter.Monad
-import Network.Gitter.Types
+import           Control.Lens ((&~), (?=), (^.), (^?))
+import           Control.Monad (void)
+import           Control.Monad.Catch (MonadThrow)
+import           Control.Monad.IO.Class (MonadIO, liftIO)
+import           Control.Monad.Reader (ReaderT, ask, runReaderT)
+import           Control.Monad.Trans (MonadTrans, lift)
+import           Data.Aeson (Value(String), object)
+import           Data.Aeson.Lens (_String, key)
+import qualified Data.ByteString.Char8 as ByteString
+import qualified Data.List as List
+import           Data.Monoid ((<>))
+import           Data.Text (Text)
+import qualified Data.Text as Text
+import           Network.Wreq (asJSON, auth, defaults, oauth2Bearer, postWith,
+                               responseBody)
 
-import            Control.Lens
-import            Control.Monad.Catch
-import            Control.Monad.Reader
-import            Data.Aeson
-import            Data.Aeson.Lens
-import            Data.ByteString.Char8 as ByteString
-import            Data.List as List
-import            Data.Monoid
-import            Data.Text ( Text )
-import qualified  Data.Text as Text
-import            Network.Wreq
+import           Network.Gitter.Monad (MonadGitter (runGitterAction))
+import           Network.Gitter.Types (Gitter(..), ResourcePath, Room(ONETOONE,
+                                       REPO), RoomId, RoomUri)
 
 newtype GitterT m a = GitterT (ReaderT Gitter m a)
     deriving (Applicative, Functor, Monad, MonadIO, MonadThrow, MonadTrans)
@@ -49,10 +58,10 @@
     deriving Functor
 
 roomUri :: Room -> RoomUri
-roomUri (ONETOONE user) = user
+roomUri (ONETOONE user)  = user
 roomUri (REPO user repo) = user <> "/" <> repo
 
-withRoom :: MonadGitter gitter => Room -> GitterRoomT gitter a -> gitter a
+withRoom :: Room -> GitterRoomT gitter a -> gitter a
 withRoom room (GitterRoomT readerAction) =
     runReaderT readerAction room
 
@@ -75,7 +84,7 @@
 
 instance (MonadIO io, MonadThrow io) => MonadGitter (GitterT io) where
     runGitterAction path apiRequest = GitterT $ do
-        Gitter{..} <- ask
+        Gitter{gitter_baseUrl, gitter_tokenFile} <- ask
         tokenFileContents <- liftIO $ ByteString.readFile gitter_tokenFile
         let token = normalizeSpace tokenFileContents
             url = List.intercalate "/" (gitter_baseUrl : fmap Text.unpack path)
diff --git a/src/Network/Gitter/Types.hs b/src/Network/Gitter/Types.hs
--- a/src/Network/Gitter/Types.hs
+++ b/src/Network/Gitter/Types.hs
@@ -1,6 +1,6 @@
 {-
     Gitter API client — Haskell library
-    Copyright (C) 2015 Yuriy Syrovetskiy
+    Copyright (C) 2015-2016 Yuriy Syrovetskiy
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -16,11 +16,15 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -}
 
+{-# LANGUAGE TemplateHaskell #-}
+
 module Network.Gitter.Types where
 
-import Data.Aeson.TH
-import Data.String.X
-import Data.Text
+import Data.Aeson.TH (SumEncoding(TaggedObject), contentsFieldName,
+                      defaultOptions, deriveJSON, fieldLabelModifier,
+                      sumEncoding, tagFieldName)
+import Data.String.X (dropPrefix)
+import Data.Text (Text)
 
 type ResourcePath = [Text]
 type UserName = Text
@@ -28,19 +32,22 @@
 type RoomId = Text
 type RoomUri = Text
 
-data Room = ONETOONE UserName | REPO UserName RepoName
+data Room
+    = ONETOONE UserName
+    | REPO UserName RepoName
     deriving Show
 
 deriveJSON
-    defaultOptions  { sumEncoding = TaggedObject  { tagFieldName = "type"
-                                                  , contentsFieldName = "uri"
-                                                  }
-                    }
+    defaultOptions
+        { sumEncoding =
+              TaggedObject{tagFieldName = "type", contentsFieldName = "uri"}
+        }
     ''Room
 
-data Gitter = Gitter  { gitter_baseUrl :: String
-                      , gitter_room :: Room
-                      , gitter_tokenFile :: FilePath
-                      }
+data Gitter = Gitter
+    { gitter_baseUrl   :: String
+    , gitter_room      :: Room
+    , gitter_tokenFile :: FilePath
+    }
 
-deriveJSON defaultOptions { fieldLabelModifier = dropPrefix "gitter_" } ''Gitter
+deriveJSON defaultOptions{fieldLabelModifier = dropPrefix "gitter_"} ''Gitter
