diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # CHANGELOG
 
+## 0.2.0
+### Added
+* `subHSetHReaderT` run a local reader with a subset of HSet elements
+### Changed
+* minimum required `hset` version is `1.1.0`
+
 ## 0.1.0
 ### Changed
 * Use `hset-1.0.0`
diff --git a/hreader.cabal b/hreader.cabal
--- a/hreader.cabal
+++ b/hreader.cabal
@@ -1,5 +1,5 @@
 name:                hreader
-version:             0.1.0
+version:             0.2.0
 synopsis:            Generalization of MonadReader and ReaderT
 license:             BSD3
 license-file:        LICENSE
@@ -34,7 +34,7 @@
 
   build-depends:       base  >= 4.7   && < 5
                      , exceptions
-                     , hset  >= 1.0.0 && < 2.0.0
+                     , hset  >= 1.1.0 && < 2.0.0
                      , mmorph
                      , monad-control
                      , mtl
diff --git a/src/Control/Monad/HReader.hs b/src/Control/Monad/HReader.hs
--- a/src/Control/Monad/HReader.hs
+++ b/src/Control/Monad/HReader.hs
@@ -1,6 +1,8 @@
 module Control.Monad.HReader
        ( HReaderT(..)
        , runHReaderT
+       , subHSetHReaderT
+       , narrowHReaderT
        , module Control.Monad.HReader.Class
        ) where
 
@@ -27,7 +29,7 @@
 import Control.Applicative
 #endif
 
-
+-- | Monad transformer which is like 'ReaderT' but for `HSet` only
 newtype HReaderT els m a = HReaderT
     { unHReaderT :: ReaderT (HSet els) m a
     } deriving ( Functor, Applicative, Monad, MonadIO
@@ -38,6 +40,30 @@
 
 runHReaderT :: HSet els -> HReaderT els m a -> m a
 runHReaderT h (HReaderT r) = runReaderT r h
+
+-- | Run a local reader with a subset of HSet elements.
+subHSetHReaderT :: ( Monad m, SubHSetable els subels eq )
+                => HReaderT subels m a -> HReaderT els m a
+subHSetHReaderT hr = do
+  hset <- askHSet
+  lift $ runHReaderT (subHSet hset) hr
+
+{- | Convenient variant of 'subHSetHReaderT' with proxy type to make it
+posible to run nested HReaderT in place without complex type
+declarations, e.g.
+
+@
+narrowHReaderT (Proxy :: Proxy '[String, Int]) $ do
+  doThingsWithString
+  doThingsWithInt
+  doThingsWithOtherStuff -- < this will not compile
+@
+
+-}
+
+narrowHReaderT :: ( Monad m, SubHSetable els subels eq )
+               => proxy subels -> HReaderT subels m a -> HReaderT els m a
+narrowHReaderT _ = subHSetHReaderT
 
 instance MonadTrans (HReaderT els) where
   lift = HReaderT . lift
