diff --git a/Git/Sample.hs b/Git/Sample.hs
--- a/Git/Sample.hs
+++ b/Git/Sample.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE FlexibleContexts #-}
@@ -11,22 +10,15 @@
                 -fno-warn-unused-binds
                 -fno-warn-orphans #-}
 
-module Git.Sample
-       ( SampleRepository(..), Repository(..)
-       , Git.Oid, BlobOid(), TreeOid(), CommitOid()
-       , Tree(), Commit()
-       , sampleFactory
-       , sampleGet
-       ) where
+module Git.Sample ( SampleRepository(..), sampleFactory ) where
 
 import           Control.Applicative
-import           Control.Monad.IO.Class
-import           Control.Monad.Trans.Class
-import           Control.Monad.Trans.Reader
+import           Control.Failure
+import           Control.Monad.Reader.Class
+import           Control.Monad.Trans.Reader (ReaderT, runReaderT)
 import qualified Git
 
 data Void
-data VoidP p
 
 instance Show Void where
     show _ = undefined
@@ -40,90 +32,66 @@
 instance Git.IsOid Void where
     renderOid _ = undefined
 
-instance Git.MonadGit m => Git.Repository (SampleRepository m) where
-    type Oid (SampleRepository m)         = Void
-    data Tree (SampleRepository m)        = Void
-    data Options (SampleRepository m)     = Options
+data SampleRepository = SampleRepository
 
+class HasSampleRepository env where
+    getSampleRepository :: env -> SampleRepository
+
+instance HasSampleRepository SampleRepository where
+    getSampleRepository = id
+
+instance HasSampleRepository (e, SampleRepository) where
+    getSampleRepository = snd
+
+instance (Applicative m, Failure Git.GitException m,
+          MonadReader env m, HasSampleRepository env)
+         => Git.MonadGit SampleRepository m where
+    type Oid SampleRepository     = Void
+    data Tree SampleRepository    = Void
+    data Options SampleRepository = Options
+
     facts = return Git.RepositoryFacts
         { Git.hasSymbolicReferences = True }
 
+    getRepository     = getSampleRepository <$> ask
+    closeRepository   = undefined
+    deleteRepository  = undefined
+
     parseOid          = undefined
+
     lookupReference   = undefined
     createReference   = undefined
     updateReference   = undefined
     deleteReference   = undefined
-    listReferences    = undefined
+    sourceReferences  = undefined
+
+    lookupObject      = undefined
+    existsObject      = undefined
+    sourceObjects     = undefined
+
     lookupCommit      = undefined
     lookupTree        = undefined
     lookupBlob        = undefined
     lookupTag         = undefined
-    lookupObject      = undefined
-    existsObject      = undefined
-    sourceObjects     = undefined
+
     newTreeBuilder    = undefined
     treeOid           = undefined
     treeEntry         = undefined
-    listTreeEntries   = undefined
+    sourceTreeEntries = undefined
+
     hashContents      = undefined
     createBlob        = undefined
     createCommit      = undefined
     createTag         = undefined
-    deleteRepository  = undefined
-    -- remoteFetch       = undefined
 
     diffContentsWithTree = undefined
-
--- type TreeEntry m = Git.TreeEntry (SampleRepository m)
 
-data Repository = Repository Void
-
-instance Eq Repository where
-  _x == _y = undefined
-
-instance Show Repository where
-  show _x = undefined
-
-newtype SampleRepository m a = SampleRepository
-    { sampleRepositoryReaderT :: ReaderT Repository m a }
-    deriving (Functor, Applicative, Monad, MonadIO, MonadTrans)
-
-type BlobOid m   = Git.BlobOid (SampleRepository m)
-type TreeOid m   = Git.TreeOid (SampleRepository m)
-type CommitOid m = Git.CommitOid (SampleRepository m)
-type TagOid m    = Git.TagOid (SampleRepository m)
-
-type Tree m      = Git.Tree (SampleRepository m)
-type Commit m    = Git.Commit (SampleRepository m)
-type RefTarget m = Git.RefTarget (SampleRepository m)
-
-sampleGet :: Monad m => SampleRepository m Repository
-sampleGet = SampleRepository ask
-
-sampleFactory :: Git.MonadGit m
-              => Git.RepositoryFactory (SampleRepository m) m Repository
+sampleFactory :: (MonadReader env m, HasSampleRepository env)
+              => Git.RepositoryFactory (ReaderT SampleRepository m) m
+                     SampleRepository
 sampleFactory = Git.RepositoryFactory
-    { Git.openRepository  = openSampleRepository
-    , Git.runRepository   = runSampleRepository
-    , Git.closeRepository = closeSampleRepository
-    , Git.getRepository   = sampleGet
-    , Git.defaultOptions  = defaultSampleOptions
-    , Git.startupBackend  = return ()
-    , Git.shutdownBackend = return ()
+    { Git.openRepository = undefined
+    , Git.runRepository  = flip runReaderT
     }
-
-openSampleRepository :: Git.MonadGit m => Git.RepositoryOptions -> m Repository
-openSampleRepository _opts = undefined
-
-runSampleRepository :: Git.MonadGit m
-                    => Repository -> SampleRepository m a -> m a
-runSampleRepository repo action =
-    runReaderT (sampleRepositoryReaderT action) repo
-
-closeSampleRepository :: Git.MonadGit m => Repository -> m ()
-closeSampleRepository = const (return ())
-
-defaultSampleOptions :: Git.RepositoryOptions
-defaultSampleOptions = Git.RepositoryOptions "" False False
 
 -- Sample.hs
diff --git a/gitlib-sample.cabal b/gitlib-sample.cabal
--- a/gitlib-sample.cabal
+++ b/gitlib-sample.cabal
@@ -1,5 +1,5 @@
 Name:                gitlib-sample
-Version:             2.2.0.0
+Version:             3.0.0
 Synopsis:            Sample backend for gitlib showing the basic structure for any backend.
 License-file:        LICENSE
 License:             MIT
@@ -22,9 +22,9 @@
 --     Hs-source-dirs: test
 --     Build-depends: 
 --           base >=3
---         , gitlib             >= 2.2.0.0
---         , gitlib-test        >= 2.2.0.0
---         , gitlib-sample      >= 2.2.0.0
+--         , gitlib             >= 3.0.0
+--         , gitlib-test        >= 3.0.0
+--         , gitlib-sample      >= 3.0.0
 --         , HUnit              >= 1.2.5
 --         , hspec              >= 1.4.4
 --         , hspec-expectations >= 0.3
@@ -34,7 +34,9 @@
     ghc-options: -Wall
     build-depends:
           base                 >= 3 && < 5
-        , gitlib               >= 2.2.0.0
+        , failure              >= 0.2.0
+        , gitlib               >= 3.0.0
+        , mtl                  >= 2.1.2
         , transformers         >= 0.3.0.0
     exposed-modules:
         Git.Sample
