diff --git a/library/Strelka/Core/Prelude.hs b/library/Strelka/Core/Prelude.hs
--- a/library/Strelka/Core/Prelude.hs
+++ b/library/Strelka/Core/Prelude.hs
@@ -5,10 +5,75 @@
 )
 where
 
-
--- base-prelude
+-- base
 -------------------------
-import BasePrelude as Exports hiding (First(..), Last(..), (<>))
+import Control.Applicative as Exports
+import Control.Arrow as Exports hiding (first, second)
+import Control.Category as Exports
+import Control.Concurrent as Exports
+import Control.Exception as Exports
+import Control.Monad as Exports hiding (fail, mapM_, sequence_, forM_, msum, mapM, sequence, forM)
+import Control.Monad.IO.Class as Exports
+import Control.Monad.Fail as Exports
+import Control.Monad.Fix as Exports hiding (fix)
+import Control.Monad.ST as Exports
+import Data.Bifunctor as Exports
+import Data.Bits as Exports
+import Data.Bool as Exports
+import Data.Char as Exports
+import Data.Coerce as Exports
+import Data.Complex as Exports
+import Data.Data as Exports
+import Data.Dynamic as Exports
+import Data.Either as Exports
+import Data.Fixed as Exports
+import Data.Foldable as Exports hiding (toList)
+import Data.Function as Exports hiding (id, (.))
+import Data.Functor as Exports
+import Data.Functor.Contravariant as Exports
+import Data.Functor.Identity as Exports
+import Data.Int as Exports
+import Data.IORef as Exports
+import Data.Ix as Exports
+import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')
+import Data.Maybe as Exports
+import Data.Monoid as Exports hiding (Last(..), First(..), (<>))
+import Data.Ord as Exports
+import Data.Proxy as Exports
+import Data.Ratio as Exports
+import Data.Semigroup as Exports
+import Data.STRef as Exports
+import Data.String as Exports
+import Data.Traversable as Exports
+import Data.Tuple as Exports
+import Data.Unique as Exports
+import Data.Version as Exports
+import Data.Void as Exports
+import Data.Word as Exports
+import Debug.Trace as Exports
+import Foreign.ForeignPtr as Exports
+import Foreign.Ptr as Exports
+import Foreign.StablePtr as Exports
+import Foreign.Storable as Exports hiding (sizeOf, alignment)
+import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)
+import GHC.Exts as Exports (lazy, inline, sortWith, groupWith, IsList(..))
+import GHC.Generics as Exports (Generic, Generic1)
+import GHC.IO.Exception as Exports
+import Numeric as Exports
+import Prelude as Exports hiding (fail, concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))
+import System.Environment as Exports
+import System.Exit as Exports
+import System.IO as Exports
+import System.IO.Error as Exports
+import System.IO.Unsafe as Exports
+import System.Mem as Exports
+import System.Mem.StableName as Exports
+import System.Timeout as Exports
+import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P)
+import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)
+import Text.Printf as Exports (printf, hPrintf)
+import Text.Read as Exports (Read(..), readMaybe, readEither)
+import Unsafe.Coerce as Exports
 
 -- transformers
 -------------------------
@@ -29,14 +94,6 @@
 import Control.Monad.State.Class as Exports
 import Control.Monad.Writer.Class as Exports
 
--- semigroups
--------------------------
-import Data.Semigroup as Exports
-
--- bifunctors
--------------------------
-import Data.Bifunctor as Exports
-
 -- unordered-containers
 -------------------------
 import Data.HashMap.Strict as Exports (HashMap)
@@ -52,6 +109,10 @@
 -- hashable
 -------------------------
 import Data.Hashable as Exports
+
+-- mmorph
+-------------------------
+import Control.Monad.Morph as Exports
 
 -- Utils
 -------------------------
diff --git a/library/Strelka/Core/RequestParser.hs b/library/Strelka/Core/RequestParser.hs
--- a/library/Strelka/Core/RequestParser.hs
+++ b/library/Strelka/Core/RequestParser.hs
@@ -24,6 +24,9 @@
   lift m =
     RequestParser (lift (lift (lift m)))
 
+instance MFunctor RequestParser where
+  hoist f (RequestParser a) = RequestParser (hoist (hoist (hoist f)) a)
+
 {-|
 Execute the parser providing a request and a list of segments.
 -}
diff --git a/strelka-core.cabal b/strelka-core.cabal
--- a/strelka-core.cabal
+++ b/strelka-core.cabal
@@ -1,64 +1,43 @@
-name:
-  strelka-core
-version:
-  0.3.0.1
-synopsis:
-  Core components of "strelka"
+name: strelka-core
+version: 0.3.1
+synopsis: Core components of "strelka"
 description:
   This library is only intended for the internal usage
   by the \"strelka\" ecosystem.
   It exposes the components,
   which may be needed by both the \"strelka\" library and
   the server drivers.
-homepage:
-  https://github.com/nikita-volkov/strelka-core
-bug-reports:
-  https://github.com/nikita-volkov/strelka-core/issues 
-author:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-maintainer:
-  Nikita Volkov <nikita.y.volkov@mail.ru>
-copyright:
-  (c) 2016, Nikita Volkov
-license:
-  MIT
-license-file:
-  LICENSE
-build-type:
-  Simple
-cabal-version:
-  >=1.10
+homepage: https://github.com/nikita-volkov/strelka-core
+bug-reports: https://github.com/nikita-volkov/strelka-core/issues
+author: Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright: (c) 2016, Nikita Volkov
+license: MIT
+license-file: LICENSE
+build-type: Simple
+cabal-version: >=1.10
 
 source-repository head
-  type:
-    git
-  location:
-    git://github.com/nikita-volkov/strelka-core.git
+  type: git
+  location: git://github.com/nikita-volkov/strelka-core.git
 
 library
-  hs-source-dirs:
-    library
-  other-modules:
-    Strelka.Core.Prelude
+  hs-source-dirs: library
+  default-extensions: Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language: Haskell2010
   exposed-modules:
     Strelka.Core.Model
     Strelka.Core.RequestParser
     Strelka.Core.ResponseBuilder
     Strelka.Core.Executor
-  default-extensions:
-    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
-  default-language:
-    Haskell2010
+  other-modules:
+    Strelka.Core.Prelude
   build-depends:
-    -- 
-    bytestring >= 0.10 && < 0.11,
-    text >= 1 && < 2,
-    unordered-containers >= 0.2 && < 0.3,
-    hashable == 1.*,
-    -- 
-    bifunctors == 5.*,
-    semigroups >= 0.18 && < 0.19,
-    mtl == 2.*,
-    transformers >= 0.4 && < 0.6,
-    base-prelude < 2,
-    base < 5
+    base >=4.9 && <5,
+    bytestring >=0.10 && <0.11,
+    hashable ==1.*,
+    mmorph >=1.1 && <2,
+    mtl ==2.*,
+    text >=1 && <2,
+    transformers >=0.4 && <0.6,
+    unordered-containers >=0.2 && <0.3
