diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,18 @@
+0.8.0
+=====
+
+* [#83](https://github.com/serokell/universum/issues/83):
+  Change the order of types in `show` and `print` functions.
+* Move string related reexports and functions to `Conv` module.
+* Rename `Conv` module to `String`.
+* Move `print` function to `Print` module.
+
+0.7.2
+=======
+
+* [#77](https://github.com/serokell/universum/issues/77):
+  Add `modify'` function to export list.
+
 0.7.1.1
 =======
 
diff --git a/src/Conv.hs b/src/Conv.hs
deleted file mode 100644
--- a/src/Conv.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE Safe                  #-}
-{-# LANGUAGE TypeSynonymInstances  #-}
-
--- | Type classes for convertion between different string representations.
-
-module Conv
-       ( ConvertUtf8 (..)
-       , ToString (..)
-       , ToLText (..)
-       , ToText (..)
-       ) where
-
-import qualified Data.ByteString           as B
-import qualified Data.ByteString.Lazy      as LB
-import qualified Data.ByteString.Lazy.UTF8 as LBU
-import qualified Data.ByteString.UTF8      as BU
-import qualified Data.Text                 as T
-import qualified Data.Text.Encoding        as T
-import qualified Data.Text.Encoding.Error  as T
-import qualified Data.Text.Lazy            as LT
-import qualified Data.Text.Lazy.Encoding   as LT
-
-import           Data.Either               (Either)
-import           Data.Function             (id, (.))
-import           Data.String               (String)
-import           Functor                   ((<$>))
-
--- | Type class for conversion to utf8 representation of text.
-class ConvertUtf8 a b where
-    -- | Encode as utf8 string (usually 'B.ByteString').
-    --
-    -- >>> encodeUtf8 @Text @ByteString "патак"
-    -- "\208\191\208\176\209\130\208\176\208\186"
-    encodeUtf8 :: a -> b
-
-    -- | Decode from utf8 string.
-    --
-    -- >>> decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"
-    -- "\1087\1072\1090\1072\1082"
-    -- >>> putStrLn $ decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"
-    -- патак
-    decodeUtf8 :: b -> a
-
-    -- | Decode as utf8 string but returning execption if byte sequence is malformed.
-    --
-    -- >>> decodeUtf8 @Text @ByteString "\208\208\176\209\130\208\176\208\186"
-    -- "\65533\65533\1090\1072\1082"
-    -- >>> decodeUtf8Strict @Text @ByteString "\208\208\176\209\130\208\176\208\186"
-    -- Left Cannot decode byte '\xd0': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream
-    decodeUtf8Strict :: b -> Either T.UnicodeException a
-
-instance ConvertUtf8 String B.ByteString where
-    encodeUtf8 = BU.fromString
-    decodeUtf8 = BU.toString
-    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict
-
-instance ConvertUtf8 T.Text B.ByteString where
-    encodeUtf8 = T.encodeUtf8
-    decodeUtf8 = T.decodeUtf8With T.lenientDecode
-    decodeUtf8Strict = T.decodeUtf8'
-
-instance ConvertUtf8 LT.Text B.ByteString where
-    encodeUtf8 = LB.toStrict . encodeUtf8
-    decodeUtf8 = LT.decodeUtf8With T.lenientDecode . LB.fromStrict
-    decodeUtf8Strict = decodeUtf8Strict . LB.fromStrict
-
-instance ConvertUtf8 String LB.ByteString where
-    encodeUtf8 = LBU.fromString
-    decodeUtf8 = LBU.toString
-    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict
-
-instance ConvertUtf8 T.Text LB.ByteString where
-    encodeUtf8 = LB.fromStrict . T.encodeUtf8
-    decodeUtf8 = T.decodeUtf8With T.lenientDecode . LB.toStrict
-    decodeUtf8Strict = T.decodeUtf8' . LB.toStrict
-
-instance ConvertUtf8 LT.Text LB.ByteString where
-    encodeUtf8 = LT.encodeUtf8
-    decodeUtf8 = LT.decodeUtf8With T.lenientDecode
-    decodeUtf8Strict = LT.decodeUtf8'
-
--- | Type class for converting other strings to 'T.Text'.
-class ToText a where
-    toText :: a -> T.Text
-
-instance ToText String where
-    toText = T.pack
-
-instance ToText T.Text where
-    toText = id
-
-instance ToText LT.Text where
-    toText = LT.toStrict
-
--- | Type class for converting other strings to 'LT.Text'.
-class ToLText a where
-    toLText :: a -> LT.Text
-
-instance ToLText String where
-    toLText = LT.pack
-
-instance ToLText T.Text where
-    toLText = LT.fromStrict
-
-instance ToLText LT.Text where
-    toLText = id
-
--- | Type class for converting other strings to 'String'.
-class ToString a where
-    toString :: a -> String
-
-instance ToString String where
-    toString = id
-
-instance ToString T.Text where
-    toString = T.unpack
-
-instance ToString LT.Text where
-    toString = LT.unpack
diff --git a/src/Monad/Trans.hs b/src/Monad/Trans.hs
--- a/src/Monad/Trans.hs
+++ b/src/Monad/Trans.hs
@@ -30,8 +30,8 @@
                                                asks, local, reader, runReader)
 import           Control.Monad.State.Strict   (MonadState, State, StateT (..), evalState,
                                                evalStateT, execState, execStateT, get,
-                                               gets, modify, put, runState, state,
-                                               withState)
+                                               gets, modify, modify', put, runState,
+                                               state, withState)
 import           Control.Monad.Trans          (MonadIO, MonadTrans, lift, liftIO)
 import           Control.Monad.Trans.Identity (IdentityT (runIdentityT))
 import           Control.Monad.Trans.Maybe    (MaybeT (..), exceptToMaybeT,
diff --git a/src/Print.hs b/src/Print.hs
--- a/src/Print.hs
+++ b/src/Print.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE ExplicitForAll    #-}
 {-# LANGUAGE FlexibleContexts  #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE Trustworthy       #-}
@@ -6,24 +7,26 @@
 
 module Print
        ( Print (..)
+       , print
        , putText
        , putLText
        ) where
 
+import Data.Function ((.))
+
+import Monad.Trans (MonadIO, liftIO)
+
 import qualified Base
-import           Data.Function              ((.))
-import qualified Prelude                    as Prelude
+import qualified Prelude (print, putStr, putStrLn)
 
-import           Control.Monad.IO.Class     (MonadIO, liftIO)
-import qualified Data.ByteString.Char8      as BS
+import qualified Data.ByteString.Char8 as BS
 import qualified Data.ByteString.Lazy.Char8 as BL
 
-import qualified Data.Text                  as T
-import qualified Data.Text.IO               as T
-
-import qualified Data.Text.Lazy             as TL
-import qualified Data.Text.Lazy.IO          as TL
+import qualified Data.Text as T
+import qualified Data.Text.IO as T
 
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.IO as TL
 
 -- | Polymorfic over string and lifted to 'MonadIO' printing functions.
 class Print a where
@@ -49,6 +52,10 @@
 instance Print [Base.Char] where
   putStr = liftIO . Prelude.putStr
   putStrLn = liftIO . Prelude.putStrLn
+
+-- | Lifted version of 'Prelude.print'.
+print :: forall a m . (MonadIO m, Base.Show a) => a -> m ()
+print = liftIO . Prelude.print
 
 -- | Specialized to 'T.Text' version of 'putStrLn' or forcing type inference.
 putText :: MonadIO m => T.Text -> m ()
diff --git a/src/String.hs b/src/String.hs
new file mode 100644
--- /dev/null
+++ b/src/String.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE ExplicitForAll        #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeSynonymInstances  #-}
+
+-- | Type classes for convertion between different string representations.
+
+module String
+       ( module Data.String
+
+         -- * Text
+       , module Text.Read
+       , module Data.Text
+       , module Data.Text.Lazy
+       , module Data.Text.Encoding
+       , module Data.Text.Encoding.Error
+
+       , module Data.ByteString
+
+       , ConvertUtf8 (..)
+       , ToString (..)
+       , ToLText (..)
+       , ToText (..)
+
+         -- * Buildable class
+       , Buildable
+
+         -- * Show and read functions
+       , readEither
+       , show
+       , pretty
+       , prettyL
+
+         -- * Convenient type aliases
+       , LText
+       , LByteString
+       ) where
+
+
+-- for reexport
+import Data.ByteString (ByteString)
+import Data.String (IsString (..))
+import Data.Text (Text, lines, unlines, unwords, words)
+import Data.Text.Buildable (Buildable (build))
+import Data.Text.Encoding (decodeUtf8', decodeUtf8With)
+import Data.Text.Encoding.Error (OnDecodeError, OnError, UnicodeException, lenientDecode,
+                                 strictDecode)
+import Data.Text.Lazy (fromStrict, toStrict)
+import Text.Read (Read, readMaybe, reads)
+
+-- for internal usage
+import Data.Bifunctor (first)
+import Data.Either (Either)
+import Data.Function (id, (.))
+import Data.String (String)
+import Data.Text.Lazy.Builder (toLazyText)
+
+import Functor ((<$>))
+
+import qualified Base as Base (Show (show))
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as LB
+import qualified Data.ByteString.Lazy.UTF8 as LBU
+import qualified Data.ByteString.UTF8 as BU
+import qualified Data.Text as T
+import qualified Data.Text.Encoding as T
+import qualified Data.Text.Encoding.Error as T
+import qualified Data.Text.Lazy as LT
+import qualified Data.Text.Lazy.Encoding as LT
+import qualified Text.Read (readEither)
+
+-- | Type synonym for 'Data.Text.Lazy.Text'.
+type LText = LT.Text
+
+-- | Type synonym for 'Data.ByteString.Lazy.ByteString'.
+type LByteString = LB.ByteString
+
+
+-- | Type class for conversion to utf8 representation of text.
+class ConvertUtf8 a b where
+    -- | Encode as utf8 string (usually 'B.ByteString').
+    --
+    -- >>> encodeUtf8 @Text @ByteString "патак"
+    -- "\208\191\208\176\209\130\208\176\208\186"
+    encodeUtf8 :: a -> b
+
+    -- | Decode from utf8 string.
+    --
+    -- >>> decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"
+    -- "\1087\1072\1090\1072\1082"
+    -- >>> putStrLn $ decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"
+    -- патак
+    decodeUtf8 :: b -> a
+
+    -- | Decode as utf8 string but returning execption if byte sequence is malformed.
+    --
+    -- >>> decodeUtf8 @Text @ByteString "\208\208\176\209\130\208\176\208\186"
+    -- "\65533\65533\1090\1072\1082"
+    -- >>> decodeUtf8Strict @Text @ByteString "\208\208\176\209\130\208\176\208\186"
+    -- Left Cannot decode byte '\xd0': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream
+    decodeUtf8Strict :: b -> Either T.UnicodeException a
+
+instance ConvertUtf8 String B.ByteString where
+    encodeUtf8 = BU.fromString
+    decodeUtf8 = BU.toString
+    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict
+
+instance ConvertUtf8 T.Text B.ByteString where
+    encodeUtf8 = T.encodeUtf8
+    decodeUtf8 = T.decodeUtf8With T.lenientDecode
+    decodeUtf8Strict = T.decodeUtf8'
+
+instance ConvertUtf8 LT.Text B.ByteString where
+    encodeUtf8 = LB.toStrict . encodeUtf8
+    decodeUtf8 = LT.decodeUtf8With T.lenientDecode . LB.fromStrict
+    decodeUtf8Strict = decodeUtf8Strict . LB.fromStrict
+
+instance ConvertUtf8 String LB.ByteString where
+    encodeUtf8 = LBU.fromString
+    decodeUtf8 = LBU.toString
+    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict
+
+instance ConvertUtf8 T.Text LB.ByteString where
+    encodeUtf8 = LB.fromStrict . T.encodeUtf8
+    decodeUtf8 = T.decodeUtf8With T.lenientDecode . LB.toStrict
+    decodeUtf8Strict = T.decodeUtf8' . LB.toStrict
+
+instance ConvertUtf8 LT.Text LB.ByteString where
+    encodeUtf8 = LT.encodeUtf8
+    decodeUtf8 = LT.decodeUtf8With T.lenientDecode
+    decodeUtf8Strict = LT.decodeUtf8'
+
+-- | Type class for converting other strings to 'T.Text'.
+class ToText a where
+    toText :: a -> T.Text
+
+instance ToText String where
+    toText = T.pack
+
+instance ToText T.Text where
+    toText = id
+
+instance ToText LT.Text where
+    toText = LT.toStrict
+
+-- | Type class for converting other strings to 'LT.Text'.
+class ToLText a where
+    toLText :: a -> LT.Text
+
+instance ToLText String where
+    toLText = LT.pack
+
+instance ToLText T.Text where
+    toLText = LT.fromStrict
+
+instance ToLText LT.Text where
+    toLText = id
+
+-- | Type class for converting other strings to 'String'.
+class ToString a where
+    toString :: a -> String
+
+instance ToString String where
+    toString = id
+
+instance ToString T.Text where
+    toString = T.unpack
+
+instance ToString LT.Text where
+    toString = LT.unpack
+
+-- | Polymorhpic version of 'Text.Read.readEither'.
+--
+-- >>> readEither @Text @Int "123"
+-- Right 123
+-- >>> readEither @Text @Int "aa"
+-- Left "Prelude.read: no parse"
+readEither :: (ToString a, Read b) => a -> Either Text b
+readEither = first toText . Text.Read.readEither . toString
+
+-- | Generalized version of 'Prelude.show'.
+show :: forall b a . (Base.Show a, IsString b) => a -> b
+show x = fromString (Base.show x)
+{-# SPECIALIZE show :: Base.Show  a => a -> Text  #-}
+{-# SPECIALIZE show :: Base.Show  a => a -> LText  #-}
+{-# SPECIALIZE show :: Base.Show  a => a -> ByteString  #-}
+{-# SPECIALIZE show :: Base.Show  a => a -> LByteString  #-}
+{-# SPECIALIZE show :: Base.Show  a => a -> String  #-}
+
+-- | Functions to show pretty output for buildable data types.
+pretty :: Buildable a => a -> Text
+pretty = toStrict . prettyL
+
+-- | Similar to 'pretty' but for 'LText'.
+prettyL :: Buildable a => a -> LText
+prettyL = toLazyText . build
diff --git a/src/Universum.hs b/src/Universum.hs
--- a/src/Universum.hs
+++ b/src/Universum.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP                   #-}
+{-# LANGUAGE ExplicitForAll        #-}
 {-# LANGUAGE FlexibleContexts      #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE Trustworthy           #-}
@@ -18,9 +19,6 @@
          module X  -- Should I expand this to all modules to remove haddock warnings?
        , module Base
 
-         -- * Useful classes
-       , Buildable
-
          -- * Useful standard unclassifed functions
        , evaluateNF
        , evaluateNF_
@@ -28,23 +26,13 @@
        , evaluateWHNF_
        , identity
        , map
-       , pretty
-       , prettyL
-       , print
-       , readEither
-       , show
        , uncons
        , unsnoc
-
-         -- * Convenient type aliases
-       , LText
-       , LByteString
        ) where
 
 import           Applicative              as X
 import           Bool                     as X
 import           Containers               as X
-import           Conv                     as X
 import           Debug                    as X
 import           Exceptions               as X
 import           Functor                  as X
@@ -52,16 +40,14 @@
 import           List                     as X
 import           Monad                    as X
 import           Print                    as X
+import           String                   as X
 import           TypeOps                  as X
 import           VarArg                   as X
 
 import           Base                     as Base hiding (error, show, showFloat,
                                                    showList, showSigned, showSignedFloat,
                                                    showsPrec, undefined)
-import qualified Base                     as PBase
 
-import           Data.String              as X (IsString (..))
-
 -- Maybe'ized version of partial functions
 import           Safe                     as X (atDef, atMay, foldl1May, foldr1May,
                                                 headDef, headMay, initDef, initMay,
@@ -131,25 +117,6 @@
 -- Generics
 import           GHC.Generics             as X (Generic)
 
--- Buildable
-import           Data.Text.Buildable      (Buildable (build))
-import           Data.Text.Lazy.Builder   (toLazyText)
-
--- ByteString
-import           Data.ByteString          as X (ByteString)
-import qualified Data.ByteString.Lazy
-
--- Text
-import           Data.Text                as X (Text, lines, unlines, unwords, words)
-import qualified Data.Text.Lazy
-
-import           Data.Text.Lazy           as X (fromStrict, toStrict)
-
-import           Data.Text.Encoding       as X (decodeUtf8', decodeUtf8With)
-import           Data.Text.Encoding.Error as X (OnDecodeError, OnError, UnicodeException,
-                                                lenientDecode, strictDecode)
-import           Text.Read                as X (Read, readMaybe, reads)
-
 -- IO
 import           System.IO                as X (FilePath, Handle, IOMode (..), stderr,
                                                 stdin, stdout, withFile)
@@ -162,15 +129,7 @@
 
 -- For internal usage only
 import qualified Control.Exception.Base   (evaluate)
-import qualified Prelude                  (print)
-import qualified Text.Read                (readEither)
 
--- | Type synonym for 'Data.Text.Lazy.Text'.
-type LText = Data.Text.Lazy.Text
-
--- | Type synonym for 'Data.ByteString.Lazy.ByteString'.
-type LByteString = Data.ByteString.Lazy.ByteString
-
 -- | Renamed version of 'Prelude.id'.
 identity :: a -> a
 identity x = x
@@ -199,36 +158,6 @@
     go x mxs = Just (case mxs of
        Nothing      -> ([], x)
        Just (xs, e) -> (x:xs, e))
-
--- | Lifted version of 'Prelude.print'.
-print :: (X.MonadIO m, PBase.Show a) => a -> m ()
-print = liftIO . Prelude.print
-
--- | Polymorhpic version of 'Text.Read.readEither'.
---
--- >>> readEither @Text @Int "123"
--- Right 123
--- >>> readEither @Text @Int "aa"
--- Left "Prelude.read: no parse"
-readEither :: (ToString a, Read b) => a -> Either Text b
-readEither = X.first toText . Text.Read.readEither . X.toString
-
--- | Generalized version of 'Prelude.show'.
-show :: (Show a, IsString b) => a -> b
-show x = X.fromString (PBase.show x)
-{-# SPECIALIZE show :: Show  a => a -> Text  #-}
-{-# SPECIALIZE show :: Show  a => a -> LText  #-}
-{-# SPECIALIZE show :: Show  a => a -> ByteString  #-}
-{-# SPECIALIZE show :: Show  a => a -> LByteString  #-}
-{-# SPECIALIZE show :: Show  a => a -> String  #-}
-
--- | Functions to show pretty output for buildable data types.
-pretty :: Buildable a => a -> Text
-pretty = X.toStrict . prettyL
-
--- | Similar to 'pretty' but for 'LText'.
-prettyL :: Buildable a => a -> LText
-prettyL = toLazyText . build
 
 -- | Lifted alias for 'Control.Exception.Base.evaluate' with clearer name.
 evaluateWHNF :: MonadIO m => a -> m a
diff --git a/universum.cabal b/universum.cabal
--- a/universum.cabal
+++ b/universum.cabal
@@ -1,5 +1,5 @@
 name: universum
-version: 0.7.1.1
+version: 0.8.0
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
@@ -29,13 +29,13 @@
         Base
         Bool
         Containers
-        Conv
         Debug
         Exceptions
         Functor
         List
         Nub
         Print
+        String
         TypeOps
         Unsafe
         VarArg
