diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,44 @@
+# Change Log
+All notable changes to the `monad-memo` project will be documented in this file
+
+## [0.5.2] - 2020-09-20
+### Added
+- CI on Github actions with test coverage and Hackage upload
+### Fixed
+- `monad-memo.cabal` structure: redundancy and to enable test coverage calculation
+- `CHANGELOG.md` structure
+
+## [0.5.1] - 2018-08-31
+### Added
+- Support multiple mutable caches in transformers stack
+  This allows Array/Vector-based caches to be used for mutually recursive function memoization
+
+## [0.5.0] - 2018-08-06
+### Fixed
+- Refresh project to be compilable with latest GHC and libraries
+- Remove dependency on `mtl` package (`transformers` is sufficient)
+- Use `Except` instead of deprecated `Error`
+- Remove support for `ListT` transformer since it is now deprecated
+- Use standard `StateT` & `ReaderT` for `MonadCache` implementations
+
+## [0.4.1] - 2013-03-06
+### Fixed
+- Documentation
+- `Example` is renamed to `example` and is excluded from package's module hierarchy
+
+## [0.4.0] - 2013-02-26
+### Added
+- `ArrayCache`: mutable array-based `MonadCache` for top performance
+- `VectorCache` (and flavours) `vector`-based `MonadCache` for even better performance
+- Simple benchmark included
+### Fixed
+- Bug fixes in transformer implementations (`Reader`, `State`, `RWS`)
+
+## [0.3.0] - 2011-04-03
+### Added
+- Added generalized `MemoStateT` transformer (to host any `Data.MapLike` cache-container)
+- `MemoT` is now `MemoStateT` instantiated with `Data.Map`
+
+## [0.2.0] - 2011-03-27
+### Added
+- A set of `forX` functions (`for2`, `for3` and `for4`) to adapt curried function into uncurried `MemoCache`
diff --git a/CHANGES b/CHANGES
deleted file mode 100644
--- a/CHANGES
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-0.2.0
-- Added a set of forX functions (for2, for3 and for4) to adapt curried function into uncuried MemoCache
-
-0.3.0
-- Added generalized MemoStateT transformer (to host any Data.MapLike cache-container)
-- MemoT is now MemoStateT instantiated with Data.Map
-
-0.4.0
-- ArrayCache: mutable array-based MonadCache for top performance
-- VectorCache (and flavours) vector-based MonadCache for even better performance
-- Bug fixes in transformer implementations (Reader, State, RWS)
-- Simple benchmark included
-0.4.1
-- Documentation fixes
-- `Example` is renamed to `example` and is excluded from package's module hierarchy
-
-0.5.0
-- Refresh project to be compilable with latest GHC and libraries
-- Remove dependency on `mtl` package (`transformers` is sufficient)
-- Use `Except` instead of depricated `Error`
-- Remove support for `ListT` transformer since it is now depricated
-- Use standard `StateT` & `ReaderT` for `MonadCache` implementations
-
-0.5.1
-- Support multiple mutable caches in transformers stack
-  This allows Array/Vector-based caches to be used for mutually recursive function memoization
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,8 @@
 # monad-memo
-[![Build Status](https://travis-ci.org/EduardSergeev/monad-memo.svg?branch=master)](https://travis-ci.org/EduardSergeev/monad-memo)
+[![Travis Build Status](https://travis-ci.org/EduardSergeev/monad-memo.svg?branch=master)](https://travis-ci.org/EduardSergeev/monad-memo)
+[![Github Build Status](../../workflows/CI/badge.svg)](../../actions?query=workflow%3ACI+branch%3Amaster)
+[![Test Coverage](https://coveralls.io/repos/github/EduardSergeev/monad-memo/badge.svg?branch=master)](https://coveralls.io/github/EduardSergeev/monad-memo?branch=master)
+[![Hackage](https://img.shields.io/hackage/v/monad-memo.svg)](http://hackage.haskell.org/package/monad-memo)
 
 ## Purpose
 This package provides a convenient mechanism for adding memoization to Haskell monadic functions.
diff --git a/monad-memo.cabal b/monad-memo.cabal
--- a/monad-memo.cabal
+++ b/monad-memo.cabal
@@ -1,6 +1,6 @@
 Name:               monad-memo
 
-Version:            0.5.1
+Version:            0.5.2
 
 -- A short (one-line) description of the package.
 Synopsis:           Memoization monad transformer
@@ -22,7 +22,7 @@
         >  n2 <- memo fibm (n-2)
         >  return (n1+n2)
         .
-     2) Use approprite /*eval*/ or /*run*/ function to evaluate resulting `MonadMemo` monad:
+     2) Use appropriate /*eval*/ or /*run*/ function to evaluate resulting `MonadMemo` monad:
         .
         >startEvalMemo (fibm 100)
         .
@@ -57,122 +57,86 @@
   GHC==7.10.3,
   GHC==8.2.2,
   GHC==8.4.3
+  GHC==8.6.5
+  GHC==8.8.4
 
 Extra-source-files:
-  CHANGES,
+  CHANGELOG.md,
   README.md,
   example/*.hs,
   example/Customisation/*.hs
 
-
-source-repository head
+Source-repository head
   type:             git
   location:	        https://github.com/EduardSergeev/monad-memo.git
 
-source-repository this
-  type:             git
-  location:         https://github.com/EduardSergeev/monad-memo.git
-  tag:              0.5.0
-
-
 Library
   default-language: Haskell2010
   build-depends:
-          base >= 3.0 && <= 5.0,
-          transformers >= 0.2,
-          containers >= 0.3,
-          array >= 0.3,
-          vector >= 0.7,
-          primitive >= 0.3
+    base >= 3.0 && <= 5.0,
+    transformers >= 0.2,
+    containers >= 0.3,
+    array >= 0.3,
+    vector >= 0.7,
+    primitive >= 0.3
   if impl(ghc < 7.10)
     build-depends:
-          transformers-compat >= 0.3
+      transformers-compat >= 0.3
   exposed-modules:
-          Control.Monad.Memo,
-          Control.Monad.Memo.Class,
-          Control.Monad.Trans.Memo.ReaderCache,
-          Control.Monad.Trans.Memo.StateCache,
-          Control.Monad.Trans.Memo.State,
-          Control.Monad.Trans.Memo.Map,
-          Control.Monad.Memo.Array,
-          Control.Monad.Memo.Array.Instances,
-          Control.Monad.Memo.Vector,
-          Control.Monad.Memo.Vector.Expandable,
-          Control.Monad.Memo.Vector.Unsafe,
-          Control.Monad.Memo.Vector.Instances,
-          Data.MapLike,
-          Data.MapLike.Instances,
-          Data.MaybeLike,
-          Data.MaybeLike.Instances
+    Control.Monad.Memo,
+    Control.Monad.Memo.Class,
+    Control.Monad.Trans.Memo.ReaderCache,
+    Control.Monad.Trans.Memo.StateCache,
+    Control.Monad.Trans.Memo.State,
+    Control.Monad.Trans.Memo.Map,
+    Control.Monad.Memo.Array,
+    Control.Monad.Memo.Array.Instances,
+    Control.Monad.Memo.Vector,
+    Control.Monad.Memo.Vector.Expandable,
+    Control.Monad.Memo.Vector.Unsafe,
+    Control.Monad.Memo.Vector.Instances,
+    Data.MapLike,
+    Data.MapLike.Instances,
+    Data.MaybeLike,
+    Data.MaybeLike.Instances
 
-Test-Suite tests
+Test-suite tests
   default-language: Haskell2010
   type:             exitcode-stdio-1.0
-  hs-source-dirs:   . test
+  hs-source-dirs:   test
   main-is:          Main.hs
   build-depends: 
-          base >= 3.0 && <= 5.0,
-          transformers >= 0.2,
-          containers >= 0.3,
-          array >= 0.3,
-          vector >= 0.7,
-          primitive >= 0.3,
-          random >= 1.0,
-          QuickCheck >= 2.0,
-          test-framework-quickcheck2 >= 0.2.9,
-          test-framework >= 0.3.3
+    monad-memo,
+    base >= 3.0 && <= 5.0,
+    transformers >= 0.2,
+    containers >= 0.3,
+    array >= 0.3,
+    vector >= 0.7,
+    primitive >= 0.3,
+    random >= 1.0,
+    QuickCheck >= 2.0,
+    test-framework-quickcheck2 >= 0.2.9,
+    test-framework >= 0.3.3
   if impl(ghc < 7.10)
     build-depends:
-          transformers-compat >= 0.3
+      transformers-compat >= 0.3
   other-modules:
-          Control.Monad.Memo,
-          Control.Monad.Memo.Class,
-          Control.Monad.Trans.Memo.ReaderCache,
-          Control.Monad.Trans.Memo.StateCache,
-          Control.Monad.Trans.Memo.State,
-          Control.Monad.Trans.Memo.Map,
-          Control.Monad.Memo.Array,
-          Control.Monad.Memo.Array.Instances,
-          Control.Monad.Memo.Vector,
-          Control.Monad.Memo.Vector.Expandable,
-          Control.Monad.Memo.Vector.Unsafe,
-          Control.Monad.Memo.Vector.Instances,
-          Data.MapLike,
-          Data.MapLike.Instances,
-          Data.MaybeLike,
-          Data.MaybeLike.Instances
-          MemoTest          
+    MemoTest      
 
 Benchmark all
   default-language: Haskell2010
   type:             exitcode-stdio-1.0
-  hs-source-dirs:   . benchmark
+  hs-source-dirs:   benchmark
   main-is:          Main.hs
   build-depends:
-          base >= 3.0 && <= 5.0,
-          transformers >= 0.2,
-          containers >= 0.3,
-          array >= 0.3,
-          vector >= 0.7,
-          primitive >= 0.3,
-          criterion >= 0.6
+    monad-memo,
+    base >= 3.0 && <= 5.0,
+    transformers >= 0.2,
+    containers >= 0.3,
+    array >= 0.3,
+    vector >= 0.7,
+    primitive >= 0.3,
+    criterion >= 0.6
   if impl(ghc < 7.10)
     build-depends:
-          transformers-compat >= 0.3
-  other-modules:
-          Control.Monad.Memo,
-          Control.Monad.Memo.Class,
-          Control.Monad.Trans.Memo.ReaderCache,
-          Control.Monad.Trans.Memo.StateCache,
-          Control.Monad.Trans.Memo.State,
-          Control.Monad.Trans.Memo.Map,
-          Control.Monad.Memo.Array,
-          Control.Monad.Memo.Array.Instances,
-          Control.Monad.Memo.Vector,
-          Control.Monad.Memo.Vector.Expandable,
-          Control.Monad.Memo.Vector.Unsafe,
-          Control.Monad.Memo.Vector.Instances,
-          Data.MapLike,
-          Data.MapLike.Instances,
-          Data.MaybeLike,
-          Data.MaybeLike.Instances 
+      transformers-compat >= 0.3
