diff --git a/serokell-util.cabal b/serokell-util.cabal
--- a/serokell-util.cabal
+++ b/serokell-util.cabal
@@ -1,5 +1,5 @@
 name:                serokell-util
-version:             0.5.3
+version:             0.6.0
 synopsis:            General-purpose functions by Serokell
 homepage:            https://github.com/serokell/serokell-util
 license:             MIT
@@ -7,7 +7,7 @@
 category:            Utils
 author:              Serokell
 maintainer:          Serokell <hi@serokell.io>
-copyright:           2016 Serokell
+copyright:           2016-2018 Serokell
 build-type:          Simple
 description:         Serokell-util is a library consisting of functions, which
                      are not included in standard libraries, but are useful for
@@ -15,36 +15,34 @@
                      found that in new projects we need to use some utility
                      functions from existing projects and don't want to
                      copy-paste them.
--- extra-source-files:
-cabal-version:       >=1.10
+cabal-version:       >=2.0
 
 library
-  exposed-modules:     Serokell.AcidState
-                       Serokell.AcidState.ExtendedState
-                       Serokell.AcidState.Instances
-                       Serokell.AcidState.Util
-                       Serokell.Arbitrary
+  hs-source-dirs:      src
+  exposed-modules:     Serokell.Arbitrary
                        Serokell.Aeson.Options
                        Serokell.Data.Memory.Units
                        Serokell.Data.Variant
+
                        Serokell.Util
-                       Serokell.Util.ANSI
-                       Serokell.Util.Base
-                       Serokell.Util.Base16
-                       Serokell.Util.Base64
-                       Serokell.Util.Bench
-                       Serokell.Util.Common
-                       Serokell.Util.Concurrent
-                       Serokell.Util.I18N
-                       Serokell.Util.Parse
-                       Serokell.Util.OptParse
-                       Serokell.Util.Exceptions
-                       Serokell.Util.Lens
-                       Serokell.Util.StaticAssert
-                       Serokell.Util.Text
-                       Serokell.Util.Time
-                       Serokell.Util.Trace
-                       Serokell.Util.Verify
+                           Serokell.Util.ANSI
+                           Serokell.Util.Base
+                           Serokell.Util.Base16
+                           Serokell.Util.Base64
+                           Serokell.Util.Bench
+                           Serokell.Util.Common
+                           Serokell.Util.Concurrent
+                           Serokell.Util.I18N
+                           Serokell.Util.Parse
+                           Serokell.Util.OptParse
+                           Serokell.Util.Exceptions
+                           Serokell.Util.Lens
+                           Serokell.Util.StaticAssert
+                           Serokell.Util.Text
+                           Serokell.Util.Time
+                           Serokell.Util.Trace
+                           Serokell.Util.Verify
+
   other-modules:       Serokell.Data.Variant.Class
                        Serokell.Data.Variant.Helpers
                        Serokell.Data.Variant.Serialization
@@ -52,11 +50,10 @@
                        Serokell.Util.Parse.Base64
                        Serokell.Util.Parse.Common
                        Serokell.Util.Parse.Network
-  build-depends:       QuickCheck >= 2.8.1
-                     , acid-state
-                     , aeson >= 0.11.0.0 && < 1.2.0.0
+
+  build-depends:       base >= 4.9 && < 5
+                     , aeson >= 1.0 && < 1.4
                      , ansi-terminal
-                     , base >= 4.8 && < 5
                      , base16-bytestring
                      , base64-bytestring
                      , bytestring
@@ -67,16 +64,16 @@
                      , exceptions
                      , extra
                      , filepath
-                     , formatting >= 6.2.0
+                     , formatting >= 6.2.0 && < 6.3
                      , hashable >= 1.2.4.0
                      , lens
-                     , log-warper >= 1.7.1
+                     , log-warper ^>= 1.8.5
                      , monad-control
                      , mtl
                      , optparse-applicative
                      , parsec
+                     , QuickCheck >= 2.8.1
                      , quickcheck-instances
-                     , safecopy >= 0.9.0.1
                      , scientific
                      , semigroups
                      , stm >= 2.4.4
@@ -85,13 +82,14 @@
                      , text-format
                      , time-units
                      , transformers
-                     , universum >= 0.8.0
+                     , universum ^>= 1.0.2
                      , unordered-containers >= 0.2.7.0
                      , vector
                      , yaml
-  hs-source-dirs:      src
-  default-language:    Haskell2010
+
   ghc-options:         -Wall -fno-warn-orphans
+
+  default-language:    Haskell2010
   default-extensions:  OverloadedStrings
                        RecordWildCards
                        DeriveDataTypeable
@@ -108,7 +106,9 @@
                        Test.Serokell.Util.VerifySpec
                        Spec
   type:                exitcode-stdio-1.0
-  build-depends:       aeson >= 0.11.0.0 && < 1.2.0.0
+
+  build-tool-depends:  hspec-discover:hspec-discover
+  build-depends:       aeson >= 1.0 && < 1.4
                      , base >=4.8
                      , bytestring
                      , hspec >= 2.1.10
diff --git a/src/Serokell/AcidState.hs b/src/Serokell/AcidState.hs
deleted file mode 100644
--- a/src/Serokell/AcidState.hs
+++ /dev/null
@@ -1,10 +0,0 @@
--- | Re-export Serokell.AcidState.* modules.
-
-module Serokell.AcidState
-       (
-         module Exports
-       ) where
-
-import           Serokell.AcidState.ExtendedState as Exports
-import           Serokell.AcidState.Instances     ()
-import           Serokell.AcidState.Util          as Exports
diff --git a/src/Serokell/AcidState/ExtendedState.hs b/src/Serokell/AcidState/ExtendedState.hs
deleted file mode 100644
--- a/src/Serokell/AcidState/ExtendedState.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE TypeFamilies #-}
-
--- | The idea of ExtendedState is to store information about location
--- of the state (either FilePath or memory).
-
-module Serokell.AcidState.ExtendedState
-       ( ExtendedState (..)
-       , closeExtendedState
-       , extendedStateToAcid
-       , openLocalExtendedState
-       , openMemoryExtendedState
-       , queryExtended
-       , tidyExtendedState
-       , updateExtended
-       ) where
-
-import           Control.Monad.Extra     (whenM)
-import           Control.Monad.Trans     (MonadIO (liftIO))
-import           Data.Acid               (AcidState, EventResult, EventState, IsAcidic,
-                                          QueryEvent, UpdateEvent, closeAcidState,
-                                          openLocalStateFrom)
-import           Data.Acid.Advanced      (query', update')
-import           Data.Acid.Memory        (openMemoryState)
-import           Data.Typeable           (Typeable)
-
-import           System.Directory        (doesDirectoryExist, removeDirectoryRecursive)
-
-import           Serokell.AcidState.Util (tidyLocalState)
-
--- | ExtendedState is like usual AcidState, but also stores
--- information about FilePath (unless it's in memory).
-data ExtendedState st
-    = ESLocal (AcidState st)
-              FilePath
-    | ESMemory (AcidState st)
-
--- | Convert ExtendedState to AcidState.
-extendedStateToAcid :: ExtendedState st -> AcidState st
-extendedStateToAcid (ESLocal s _) = s
-extendedStateToAcid (ESMemory s)  = s
-
--- | Like query', but works on ExtendedState.
-queryExtended
-    :: (EventState event ~ st, QueryEvent event, MonadIO m)
-    => ExtendedState st -> event -> m (EventResult event)
-queryExtended st = query' (extendedStateToAcid st)
-
--- | Like update', but works on ExtendedState.
-updateExtended
-    :: (EventState event ~ st, UpdateEvent event, MonadIO m)
-    => ExtendedState st -> event -> m (EventResult event)
-updateExtended st = update' (extendedStateToAcid st)
-
--- | Like openLocalStateFrom, but returns ExtendedState and operates
--- in MonadIO.
-openLocalExtendedState
-    :: (IsAcidic st, Typeable st, MonadIO m)
-    => Bool -> FilePath -> st -> m (ExtendedState st)
-openLocalExtendedState deleteIfExists fp st = do
-    whenM ((deleteIfExists &&) <$> liftIO (doesDirectoryExist fp)) $
-        liftIO $ removeDirectoryRecursive fp
-    liftIO $ flip ESLocal fp <$> openLocalStateFrom fp st
-
--- | Like openMemoryState, but returns ExtendedState and operates in
--- MonadIO.
-openMemoryExtendedState
-    :: (IsAcidic st, Typeable st, MonadIO m)
-    => st -> m (ExtendedState st)
-openMemoryExtendedState st = liftIO $ ESMemory <$> openMemoryState st
-
--- | Like closeAcidState, but operates on ExtendedState and in
--- MonadIO.
-closeExtendedState :: MonadIO m => ExtendedState st -> m ()
-closeExtendedState = liftIO . closeAcidState . extendedStateToAcid
-
--- | Like tidyLocalState, but operates on ExtendedState.
-tidyExtendedState :: MonadIO m => ExtendedState st -> m ()
-tidyExtendedState (ESLocal st fp) = tidyLocalState st fp
-tidyExtendedState (ESMemory _)    = return ()
diff --git a/src/Serokell/AcidState/Instances.hs b/src/Serokell/AcidState/Instances.hs
deleted file mode 100644
--- a/src/Serokell/AcidState/Instances.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE CPP #-}
-
--- | Helper instances for acid-state to remove boilerplate and introduce
--- redundant instances for other data types.
-
-module Serokell.AcidState.Instances where
-
-import           Control.Exception   (throw)
-import           Control.Monad.Catch (MonadThrow (throwM))
-
-import qualified Data.Time.Units     as Time
-import           Data.Acid           (Query, Update)
-import           Data.Hashable       (Hashable)
-import           Data.HashMap.Strict (HashMap)
-import qualified Data.HashMap.Strict as HM hiding (HashMap)
-import           Data.HashSet        (HashSet)
-import qualified Data.HashSet        as HS hiding (HashSet)
-import           Data.SafeCopy       (SafeCopy (..), contain, safeGet,
-                                      safePut)
-
-#if !MIN_VERSION_safecopy(0,9,3)
-import qualified Data.List.NonEmpty  as NE
-#endif
-
--- | Usually Queries shouldn't throw anything. This is a dirty hack.
-instance MonadThrow (Query s) where
-    throwM = throw
-
-instance MonadThrow (Update s) where
-    throwM = throw
-
-instance (Eq a, Hashable a, SafeCopy a) => SafeCopy (HashSet a) where
-    putCopy = contain . safePut . HS.toList
-    getCopy = contain $ HS.fromList <$> safeGet
-
-instance (Eq a, Hashable a, SafeCopy a, SafeCopy b) => SafeCopy (HashMap a b) where
-    putCopy = contain . safePut . HM.toList
-    getCopy = contain $ HM.fromList <$> safeGet
-
-#if !MIN_VERSION_safecopy(0,9,3)
-instance SafeCopy a => SafeCopy (NE.NonEmpty a) where
-    getCopy = contain $ do
-        xs <- safeGet
-        case NE.nonEmpty xs of
-            Nothing -> fail "getCopy@NonEmpty: list can't be empty"
-            Just xx -> return xx
-    putCopy = contain . safePut . NE.toList
-    errorTypeName _ = "NonEmpty"
-#endif
-
-#define SAFECOPY_TIME(T, TS)                     \
-  instance SafeCopy T where {                    \
-    getCopy = contain (fromInteger <$> safeGet); \
-    putCopy = contain . safePut . toInteger;     \
-    errorTypeName _ = TS }                       \
-
-SAFECOPY_TIME(Time.Fortnight, "Fortnight")
-SAFECOPY_TIME(Time.Week, "Week")
-SAFECOPY_TIME(Time.Day, "Day")
-SAFECOPY_TIME(Time.Hour, "Hour")
-SAFECOPY_TIME(Time.Minute, "Minute")
-SAFECOPY_TIME(Time.Second, "Second")
-SAFECOPY_TIME(Time.Millisecond, "Millisecond")
-SAFECOPY_TIME(Time.Microsecond, "Microsecond")
-SAFECOPY_TIME(Time.Nanosecond, "Nanosecond")
-SAFECOPY_TIME(Time.Picosecond, "Picosecond")
-SAFECOPY_TIME(Time.Femtosecond, "Femtosecond")
-SAFECOPY_TIME(Time.Attosecond, "Attosecond")
-
-#undef SAFECOPY_TIME
diff --git a/src/Serokell/AcidState/Util.hs b/src/Serokell/AcidState/Util.hs
deleted file mode 100644
--- a/src/Serokell/AcidState/Util.hs
+++ /dev/null
@@ -1,56 +0,0 @@
--- | Some useful functions to work with Data.Acid.
-
-module Serokell.AcidState.Util
-       (
-         -- | Simple helpers
-         exceptStateToUpdate
-       , exceptStateToUpdateGeneric
-       , readerToQuery
-       , stateToUpdate
-
-         -- | Utilities
-       , createAndDiscardArchive
-       , tidyLocalState
-       ) where
-
-import           Control.Exception    (Exception, throw)
-import           Control.Monad.Except (ExceptT, runExceptT)
-import           Control.Monad.Reader (Reader, asks, runReader)
-import           Control.Monad.State  (State, runState, state)
-import           Control.Monad.Trans  (MonadIO (liftIO))
-import           Data.Acid            (AcidState, Query, Update, createArchive,
-                                       createCheckpoint)
-import           System.Directory     (removeDirectoryRecursive)
-import           System.FilePath      ((</>))
-
-readerToQuery :: Reader s a -> Query s a
-readerToQuery = asks . runReader
-
-stateToUpdate :: State s a -> Update s a
-stateToUpdate = state . runState
-
-exceptStateToUpdate
-    :: (Exception e)
-    => ExceptT e (State s) a -> Update s a
-exceptStateToUpdate = exceptStateToUpdateGeneric id
-
-exceptStateToUpdateGeneric
-  :: (Exception exc)
-  => (e -> exc) -> ExceptT e (State s) a -> Update s a
-exceptStateToUpdateGeneric toException u =
-    state $
-    runState $
-    do res <- runExceptT u
-       either (throw . toException) return res
-
--- | Archive unnecessary data (see createArchive docs for details) and
--- discard it. Works for local state.
-createAndDiscardArchive :: MonadIO m => AcidState st -> FilePath -> m ()
-createAndDiscardArchive st path =
-    liftIO $ createArchive st >> removeDirectoryRecursive (path </> "Archive")
-
--- | Apply all updates and remove all data from local state which is
--- unnecessary for state restoration.
-tidyLocalState :: MonadIO m => AcidState st -> FilePath -> m ()
-tidyLocalState st path =
-    liftIO (createCheckpoint st) >> createAndDiscardArchive st path
diff --git a/src/Serokell/Util/Lens.hs b/src/Serokell/Util/Lens.hs
--- a/src/Serokell/Util/Lens.hs
+++ b/src/Serokell/Util/Lens.hs
@@ -12,14 +12,12 @@
        , listL
        ) where
 
-import qualified Control.Lens               as L
-import           Control.Monad.Reader       (MonadReader, Reader, ReaderT, reader,
-                                             runReader)
-import           Control.Monad.State        (MonadState, State, StateT, get, runState,
-                                             state)
-import           Control.Monad.Trans.Except (ExceptT, mapExceptT)
-import           GHC.Exts                   (IsList (..))
-import           System.Wlog                (LoggerName, LoggerNameBox (..))
+import qualified Control.Lens as L
+import Control.Monad.Reader (MonadReader, Reader, ReaderT, reader, runReader)
+import Control.Monad.State (MonadState, State, StateT, get, runState, state)
+import Control.Monad.Trans.Except (ExceptT, mapExceptT)
+import GHC.Exts (IsList (..))
+import System.Wlog (LoggerName, LoggerNameBox (..))
 
 -- I don't know how to call these operators
 
@@ -78,5 +76,12 @@
 magnify' l = reader . runReader . L.magnify l
 
 -- | This isomorphism can be used to convert to or from an instance of 'IsList'.
-listL :: IsList l => L.Iso' l [Item l]
+--
+-- Note that this function is quite general but doesn't allow to switch
+-- container - in most cases such behavious eliminates need in specifing
+-- container type manually.
+listL
+    :: (IsList (t a), IsList (t b))
+    => L.Iso (t a) (t b) [Item (t a)] [Item (t b)]
 listL = L.iso toList fromList
+
