diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,13 @@
 `co-log-core` uses [PVP Versioning][1].
 The change log is available [on GitHub][2].
 
+## 0.3.1.0 — Feb 15, 2022
+
+* [#7](https://github.com/co-log/co-log-core/issues/7):
+  Support GHC-9.2.
+* [#13](https://github.com/co-log/co-log-core/issues/13):
+  Add `WithSeverity` and `mapSeverity` to `Colog.Severity`.
+
 ## 🎃 0.3.0.0 — Oct 29, 2021
 
 * [#223](https://github.com/co-log/co-log/pull/223):
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,111 +1,53 @@
-# co-log
+# co-log-core
 
 ![Co-logo](https://user-images.githubusercontent.com/8126674/80955687-92f21a80-8df7-11ea-90d3-422dafdc8391.png)
 
-[![GitHub CI](https://github.com/kowainik/co-log/workflows/CI/badge.svg)](https://github.com/kowainik/co-log/actions)
-[![Build status](https://img.shields.io/travis/kowainik/co-log.svg?logo=travis)](https://travis-ci.org/kowainik/co-log)
-[![Windows build](https://ci.appveyor.com/api/projects/status/github/kowainik/co-log?branch=main&svg=true)](https://ci.appveyor.com/project/kowainik/co-log)
+[![GitHub CI](https://github.com/co-log/co-log-core/workflows/CI/badge.svg)](https://github.com/co-log/co-log-core/actions)
+[![Hackage][hk-img-core]][hk-core]
+[![Stackage LTS][lts-img-core]][lts-core]
 [![MPL-2.0 license](https://img.shields.io/badge/license-MPL--2.0-blue.svg)](https://github.com/kowainik/co-log/blob/main/LICENSE)
 
+`co-log-core` is a lightweight package that provides core types and functions to 
+work with the @LogAction@ data type which is both simple and powerful.
 
-|                   |                                    |                                           |                                                       |
-| :------------     | :--------------------------------- | :---------------------------------------- | :---------------------------------------------------- |
-| `co-log-core`     | [![Hackage][hk-img-core]][hk-core] | [![Stackage LTS][lts-img-core]][lts-core] | [![Stackage Nightly][nightly-img-core]][nightly-core] |
-| `co-log`          | [![Hackage][hk-img]][hk]           | [![Stackage LTS][lts-img]][lts]           | [![Stackage Nightly][nightly-img]][nightly]           |
-| `co-log-polysemy` | [![Hackage][hk-img-ps]][hk-ps]     | [![Stackage LTS][lts-img-ps]][lts-ps]     | [![Stackage Nightly][nightly-img-ps]][nightly-ps]     |
+## How to use
 
-`co-log` is a composable and configurable logging framework. It
-combines all the benefits of Haskell idioms to provide a reasonable
-and convenient interface. Though it uses some advanced concepts in its
-core, we are striving to provide beginner-friendly API. The library
-also contains complete documentation with a lot of beginner-friendly
-examples, explanations and tutorials to guide users. The combination
-of a pragmatic approach to logging and fundamental Haskell abstractions
-allows us to create a highly composable and configurable logging
-framework.
+`co-log-core` is compatible with the following GHC
+versions - [supported versions](https://matrix.hackage.haskell.org/#/package/co-log-core)
 
-If you're interested in how different Haskell typeclasses are used to
-implement core functions of `co-log`, you can read the following blog
-post which goes into detail about internal implementation specifics:
+In order to start using `co-log-core` in your project, you
+will need to set it up with these steps:
 
-* [co-log: Composable Contravariant Combinatorial Comonadic Configurable Convenient Logging](https://kowainik.github.io/posts/2018-09-25-co-log)
+1. Add the dependency on `co-log-core` in your project's
+   `.cabal` file. For this, you should modify the `build-depends`
+   section according to the below section:
 
-`co-log` is also modular on the level of packages. We care a lot about a
-low dependency footprint so you can build your logging only on top of
-the minimal required interface for your use-case. This repository contains
-the following packages:
+   ```haskell
+   build-depends: base ^>= LATEST_SUPPORTED_BASE
+                , co-log-core ^>= LATEST_VERSION
+   ```
 
-* [`co-log-core`](co-log-core): lightweight package with basic data types and
-  general idea which depends only on `base`.
-* [`co-log`](co-log): taggless final implementation of logging library based on
-  `co-log-core`.
-* [`co-log-polysemy`](co-log-polysemy): implementation of logging library based
-  on `co-log-core` and the [`polysemy`](http://hackage.haskell.org/package/polysemy) extensible effects library.
-* [`co-log-benchmark`](co-log-benchmark): benchmarks of the `co-log` library.
+2. To use this package, refer to the below example.
 
-To provide a more user-friendly introduction to the library, we've
-created the tutorial series which introduces the main concepts behind `co-log`
-smoothly:
+   ```haskell
+   module Main (main) where
 
-* [Intro: Using `LogAction`](https://github.com/kowainik/co-log/blob/main/co-log/tutorials/1-intro/Intro.md)
-* [Using custom monad that stores `LogAction` inside its environment](https://github.com/kowainik/co-log/blob/main/co-log/tutorials/2-custom/Custom.md)
+   import Prelude hiding (log)
 
-`co-log` also cares about concurrent logging. For this purpose we have the `concurrent-playground`
-executable where we experiment with different multithreading scenarios to test the library's behavior.
-You can find it here:
+   import Colog.Core (LogAction, logStringStdout, (<&))
 
-* [tutorials/Concurrent.hs](co-log/tutorials/Concurrent.hs)
 
-## Benchmarks
-
-`co-log` is compared with basic functions like `putStrLn`. Since IO overhead is
-big enough, every benchmark dumps 10K messages to output. If a benchmark's name
-doesn't contain `Message` then this benchmark simply dumps the string `"message"`
-to output, otherwise it works with the `Message` data type from the `co-log`
-library.
-
-To run benchmarks, use the following command:
-
-```
-cabal v2-run co-log-bench
-```
-
-| Benchmarks                                              | Time for 10K messages |
-| :------------------------------------------------------ | :-------------------- |
-| `Prelude.putStrLn`                                      | `  5.117ms`           |
-| `Text.putStrLn`                                         | `  9.220ms`           |
-| `ByteString.putStrLn`                                   | `  2.971ms`           |
-| `mempty`                                                | `  1.181ms`           |
-| `logStringStdout`                                       | `  5.107ms`           |
-| `logPrint`                                              | `  5.248ms`           |
-| `logTextStdout`                                         | `  5.351ms`           |
-| `logByteStringStdout`                                   | `  2.933ms`           |
-| `logByteStringStderr`                                   | ` 17.482ms`           |
-| `ByteString > (stdout <> stderr)`                       | ` 17.715ms`           |
-| `Message > format > stdout`                             | `  9.188ms`           |
-| `Message > format > ByteString > stdout`                | `  3.524ms`           |
-| `Message{callstack} > format > stdout`                  | `  9.139ms`           |
-| `Message{callstack:5} > format > stdout`                | `  9.464ms`           |
-| `Message{callstack:50} > format > stdout`               | `  9.439ms`           |
-| `Message{Time,ThreadId} > format > stdout`              | ` 54.160ms`           |
-| `Message{Time,ThreadId} > format > ByteString > stdout` | ` 54.137ms`           |
-
+   app :: LogAction IO String -> IO ()
+   app log = do
+       log <& "Starting app..."
+       log <& "Finishing app..."
 
-[hk-img]: https://img.shields.io/hackage/v/co-log.svg?logo=haskell
-[hk-img-ps]: https://img.shields.io/hackage/v/co-log-polysemy.svg?logo=haskell
+   main :: IO ()
+   main = app logStringStdout
+   ```
+ 
+ 
 [hk-img-core]: https://img.shields.io/hackage/v/co-log-core.svg?logo=haskell
-[hk]: https://hackage.haskell.org/package/co-log
-[hk-ps]: https://hackage.haskell.org/package/co-log-polysemy
 [hk-core]: https://hackage.haskell.org/package/co-log-core
-[lts-img]: http://stackage.org/package/co-log/badge/lts
-[lts-img-ps]: http://stackage.org/package/co-log-polysemy/badge/lts
 [lts-img-core]: http://stackage.org/package/co-log-core/badge/lts
-[lts]: http://stackage.org/lts/package/co-log
-[lts-ps]: http://stackage.org/lts/package/co-log-polysemy
 [lts-core]: http://stackage.org/lts/package/co-log-core
-[nightly-img]: http://stackage.org/package/co-log/badge/nightly
-[nightly-img-ps]: http://stackage.org/package/co-log-polysemy/badge/nightly
-[nightly-img-core]: http://stackage.org/package/co-log-core/badge/nightly
-[nightly]: http://stackage.org/nightly/package/co-log
-[nightly-ps]: http://stackage.org/nightly/package/co-log-polysemy
-[nightly-core]: http://stackage.org/nightly/package/co-log-core
diff --git a/co-log-core.cabal b/co-log-core.cabal
--- a/co-log-core.cabal
+++ b/co-log-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.4
 name:                co-log-core
-version:             0.3.0.0
+version:             0.3.1.0
 synopsis:            Composable Contravariant Comonadic Logging Library
 description:
     This package provides core types and functions to work with the @LogAction@ data type which is both simple and powerful.
@@ -27,7 +27,7 @@
 license-file:        LICENSE
 author:              Dmitrii Kovanikov
 maintainer:          Kowainik <xrom.xkov@gmail.com>
-copyright:           2018-2020 Kowainik, 2021 Co-Log
+copyright:           2018-2020 Kowainik, 2021-2022 Co-Log
 category:            Logging, Contravariant, Comonad
 build-type:          Simple
 stability:           stable
@@ -38,14 +38,15 @@
                      GHC == 8.6.5
                      GHC == 8.8.4
                      GHC == 8.10.7
-                     GHC == 9.0.1
+                     GHC == 9.0.2
+                     GHC == 9.2.1
 
 source-repository head
   type:                git
   location:            https://github.com/co-log/co-log-core.git
 
 common common-options
-  build-depends:       base >= 4.10.1.0 && < 4.16
+  build-depends:       base >= 4.10.1.0 && < 4.17
 
   ghc-options:         -Wall
                        -Wcompat
@@ -62,9 +63,16 @@
     ghc-options:       -Wmissing-deriving-strategies
   if impl(ghc >= 8.10)
     ghc-options:       -Wunused-packages
+  if impl(ghc >= 9.0)
+    ghc-options:       -Winvalid-haddock
+  if impl(ghc >= 9.2)
+    ghc-options:       -Wredundant-bang-patterns
+                       -Woperator-whitespace
 
   default-language:    Haskell2010
   default-extensions:  ConstraintKinds
+                       DeriveFunctor
+                       DeriveTraversable
                        DeriveGeneric
                        DerivingStrategies
                        GeneralizedNewtypeDeriving
diff --git a/src/Colog/Core.hs b/src/Colog/Core.hs
--- a/src/Colog/Core.hs
+++ b/src/Colog/Core.hs
@@ -1,6 +1,6 @@
 {- |
 Module                  : Colog.Core
-Copyright               : (c) 2018-2020 Kowainik, 2021 Co-Log
+Copyright               : (c) 2018-2020 Kowainik, 2021-2022 Co-Log
 SPDX-License-Identifier : MPL-2.0
 Maintainer              : Co-Log <xrom.xkov@gmail.com>
 Stability               : Stable
diff --git a/src/Colog/Core/Action.hs b/src/Colog/Core/Action.hs
--- a/src/Colog/Core/Action.hs
+++ b/src/Colog/Core/Action.hs
@@ -7,7 +7,7 @@
 
 {- |
 Module                  : Colog.Core.Action
-Copyright               : (c) 2018-2020 Kowainik, 2021 Co-Log
+Copyright               : (c) 2018-2020 Kowainik, 2021-2022 Co-Log
 SPDX-License-Identifier : MPL-2.0
 Maintainer              : Co-Log <xrom.xkov@gmail.com>
 Stability               : Stable
diff --git a/src/Colog/Core/Class.hs b/src/Colog/Core/Class.hs
--- a/src/Colog/Core/Class.hs
+++ b/src/Colog/Core/Class.hs
@@ -4,7 +4,7 @@
 
 {- |
 Module                  : Colog.Core.Class
-Copyright               : (c) 2018-2020 Kowainik, 2021 Co-Log
+Copyright               : (c) 2018-2020 Kowainik, 2021-2022 Co-Log
 SPDX-License-Identifier : MPL-2.0
 Maintainer              : Co-Log <xrom.xkov@gmail.com>
 Stability               : Stable
diff --git a/src/Colog/Core/IO.hs b/src/Colog/Core/IO.hs
--- a/src/Colog/Core/IO.hs
+++ b/src/Colog/Core/IO.hs
@@ -2,7 +2,7 @@
 
 {- |
 Module                  : Colog.Core.IO
-Copyright               : (c) 2018-2020 Kowainik
+Copyright               : (c) 2018-2020 Kowainik, 2021-2022 Co-Log
 SPDX-License-Identifier : MPL-2.0
 Maintainer              : Co-Log <xrom.xkov@gmail.com>
 Stability               : Stable
diff --git a/src/Colog/Core/Severity.hs b/src/Colog/Core/Severity.hs
--- a/src/Colog/Core/Severity.hs
+++ b/src/Colog/Core/Severity.hs
@@ -2,7 +2,7 @@
 
 {- |
 Module                  : Colog.Core.Severity
-Copyright               : (c) 2018-2020 Kowainik, 2021 Co-Log
+Copyright               : (c) 2018-2020 Kowainik, 2021-2022 Co-Log
 SPDX-License-Identifier : MPL-2.0
 Maintainer              : Co-Log <xrom.xkov@gmail.com>
 Stability               : Stable
@@ -34,6 +34,8 @@
        , pattern W
        , pattern E
        , filterBySeverity
+       , WithSeverity (..)
+       , mapSeverity
        ) where
 
 import Data.Ix (Ix)
@@ -102,3 +104,42 @@
     -> LogAction m a
 filterBySeverity s fs = cfilter (\a -> fs a >= s)
 {-# INLINE filterBySeverity #-}
+
+-- Note: the order of the fields here is to allow the constructor to be used infix.
+{-| A message tagged with a 'Severity'.
+ 
+It is common to want to log various types of messages tagged with a severity. 
+'WithSeverity' provides a standard way to do so while allowing the messages to be processed independently of the severity.
+
+It is easy to 'cmap' over a 'LogAction m (WithSeverity a)', or to filter based on the severity.
+
+@
+logSomething :: 'LogAction' m ('WithSeverity' 'String') -> m ()
+logSomething logger = logger <& "hello" \`WithSeverity\` 'Info'
+
+cmap' :: (b -> a) -> 'LogAction' m ('WithSeverity' a) -> 'LogAction' m ('WithSeverity' b)
+cmap' f action = 'cmap' ('fmap' f) action
+
+filterBySeverity' :: ('Applicative' m) => 'Severity' -> 'LogAction' m ('WithSeverity' a) -> 'LogAction' m ('WithSeverity' a)
+filterBySeverity' threshold action = 'filterBySeverity' threshold 'getSeverity' action
+@
+
+@since 0.3.1.0
+-}
+data WithSeverity msg = WithSeverity { getMsg :: msg , getSeverity :: Severity }
+  deriving stock (Show, Eq, Ord, Functor, Foldable, Traversable)
+
+{- | Map the given function over the severity of a 'WithSeverity'.
+ 
+This can be useful to operate generically over the severity, for example:
+
+@
+suppressErrors :: 'LogAction' m ('WithSeverity' msg) -> 'LogAction' m ('WithSeverity' msg)
+suppressErrors = 'cmap' ('mapSeverity' (\s -> if s == 'Error' then 'Warning' else s))
+@
+
+@since 0.3.1.0
+-}
+mapSeverity :: (Severity -> Severity) -> WithSeverity msg -> WithSeverity msg
+mapSeverity f (WithSeverity msg sev) = WithSeverity msg (f sev)
+{-# INLINE mapSeverity #-}
