diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
 # CHANGELOG
 
+## 1.0.0
+### Added
+* `MHRElemsConstraint`
+### Changed
+* depenes on `hset` > 2.0.0
+* use `tagged` instead of Labeled
+* some things renamed, so this version is not backwards compatible
+
 ## 0.2.0
 ### Added
 * `subHSetHReaderT` run a local reader with a subset of HSet elements
diff --git a/hreader.cabal b/hreader.cabal
--- a/hreader.cabal
+++ b/hreader.cabal
@@ -1,6 +1,6 @@
 name:                hreader
-version:             0.2.0
-synopsis:            Generalization of MonadReader and ReaderT
+version:             1.0.0
+synopsis:            Generalization of MonadReader and ReaderT using hset
 license:             BSD3
 license-file:        LICENSE
 author:              Aleksey Uimanov
@@ -21,6 +21,7 @@
   ghc-options:         -Wall
 
   default-extensions: CPP
+                    , ConstraintKinds
                     , DataKinds
                     , DeriveDataTypeable
                     , DeriveGeneric
@@ -30,14 +31,16 @@
                     , MultiParamTypeClasses
                     , StandaloneDeriving
                     , TypeFamilies
+                    , TypeOperators
                     , UndecidableInstances
 
   build-depends:       base  >= 4.7   && < 5
                      , exceptions
-                     , hset  >= 1.1.0 && < 2.0.0
+                     , hset  >= 2.0.0 && < 3.0.0
                      , mmorph
                      , monad-control
                      , mtl
+                     , tagged
                      , transformers-base
 
   exposed-modules:     Control.Monad.HReader
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
@@ -42,7 +42,7 @@
 runHReaderT h (HReaderT r) = runReaderT r h
 
 -- | Run a local reader with a subset of HSet elements.
-subHSetHReaderT :: ( Monad m, SubHSetable els subels eq )
+subHSetHReaderT :: (Monad m, SubHSettable els subels)
                 => HReaderT subels m a -> HReaderT els m a
 subHSetHReaderT hr = do
   hset <- askHSet
@@ -61,7 +61,7 @@
 
 -}
 
-narrowHReaderT :: ( Monad m, SubHSetable els subels eq )
+narrowHReaderT :: (Monad m, SubHSettable els subels)
                => proxy subels -> HReaderT subels m a -> HReaderT els m a
 narrowHReaderT _ = subHSetHReaderT
 
@@ -76,7 +76,7 @@
       local f $ runHReaderT h ma
 
 instance (Monad m, Applicative m) => MonadHReader (HReaderT els m) where
-  type HSetElements (HReaderT els m) = els
+  type MHRElements (HReaderT els m) = els
   askHSet = HReaderT ask
 
 deriving instance MFunctor (HReaderT els)
diff --git a/src/Control/Monad/HReader/Class.hs b/src/Control/Monad/HReader/Class.hs
--- a/src/Control/Monad/HReader/Class.hs
+++ b/src/Control/Monad/HReader/Class.hs
@@ -1,7 +1,8 @@
 module Control.Monad.HReader.Class
        ( MonadHReader(..)
-       , haskM
-       , haskLabeledM
+       , MHRElemsConstraint
+       , hask
+       , haskTagged
        ) where
 
 
@@ -9,6 +10,8 @@
 import Control.Monad.List
 import Control.Monad.Reader
 import Data.HSet
+import Data.Tagged
+import GHC.Exts
 
 #if MIN_VERSION_mtl(2, 2, 1)
 import Control.Monad.Except
@@ -19,33 +22,40 @@
 import Data.Monoid
 #endif
 
-
-import qualified Control.Monad.RWS.Lazy   as RWSL
-import qualified Control.Monad.RWS.Strict as RWSS
-import qualified Control.Monad.State.Lazy   as SL
-import qualified Control.Monad.State.Strict as SS
-import qualified Control.Monad.Writer.Lazy   as WL
-import qualified Control.Monad.Writer.Strict as WS
+import qualified Control.Monad.RWS.Lazy       as RWSL
+import qualified Control.Monad.RWS.Strict     as RWSS
+import qualified Control.Monad.State.Lazy     as SL
+import qualified Control.Monad.State.Strict   as SS
+import qualified Control.Monad.Writer.Lazy    as WL
+import qualified Control.Monad.Writer.Strict  as WS
 
+-- | Easy generate constraint like
+-- __(HGettable (MHRElements m) Int, HGettable (MHRElements m) Bool)__
+-- from type list __[Int, Bool]__. Usable to reuse type lists for
+-- constraints and concrete HSet.
+type family MHRElemsConstraint (m :: * -> *) (els :: [*]) :: Constraint where
+  MHRElemsConstraint m '[] = ()
+  MHRElemsConstraint m (e ': els) = (HGettable (MHRElements m) e, MHRElemsConstraint m els)
 
 -- | Monad which is a reader of HSet (or just can construct it).
 class (Monad m, Applicative m) => MonadHReader m where
-  type HSetElements m :: [*]
-  askHSet :: m (HSet (HSetElements m))
+  type MHRElements m :: [*]
+  askHSet :: m (HSet (MHRElements m))
 
 -- | Ask arbitrary element of hset inside HReader
-haskM :: (MonadHReader m, HGetable (HSetElements m) e)
+hask :: (MonadHReader m, HGettable (MHRElements m) e)
       => m e
-haskM = hget <$> askHSet
+hask = hget <$> askHSet
 
 -- | Ask arbitrary labeled element of hset in HReader
-haskLabeledM :: (MonadHReader m, HGetable (HSetElements m) (Labeled label e))
-             => proxy label -> m e
-haskLabeledM p = hgetLabeled p <$> askHSet
+haskTagged :: (MonadHReader m, HGettable (MHRElements m) (Tagged tag e))
+           => proxy tag
+           -> m e
+haskTagged p = hgetTagged p <$> askHSet
 
 #define MHR(MONAD)                                        \
 instance (MonadHReader m) => MonadHReader (MONAD) where { \
-  type HSetElements (MONAD) = HSetElements m ;            \
+  type MHRElements (MONAD) = MHRElements m ;            \
   askHSet = lift askHSet ;                                \
   }
 
@@ -61,17 +71,17 @@
 MHR(SS.StateT s m)
 
 instance (MonadHReader m, Monoid w) => MonadHReader (WL.WriterT w m) where
-  type HSetElements (WL.WriterT w m) = HSetElements m
+  type MHRElements (WL.WriterT w m) = MHRElements m
   askHSet = lift askHSet
 
 instance (MonadHReader m, Monoid w) => MonadHReader (WS.WriterT w m) where
-  type HSetElements (WS.WriterT w m) = HSetElements m
+  type MHRElements (WS.WriterT w m) = MHRElements m
   askHSet = lift askHSet
 
 instance (MonadHReader m, Monoid w) => MonadHReader (RWSL.RWST r w s m) where
-  type HSetElements (RWSL.RWST r w s m) = HSetElements m
+  type MHRElements (RWSL.RWST r w s m) = MHRElements m
   askHSet = lift askHSet
 
 instance (MonadHReader m, Monoid w) => MonadHReader (RWSS.RWST r w s m) where
-  type HSetElements (RWSS.RWST r w s m) = HSetElements m
+  type MHRElements (RWSS.RWST r w s m) = MHRElements m
   askHSet = lift askHSet
