diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Changelog for the [`ghc-typelits-natnormalise`](http://hackage.haskell.org/package/ghc-typelits-natnormalise) package
 
+## 0.5.4 *October 14th 2017*
+* Perform normalisations such as: `2^x * 4^x ==> 8^x`
+
 ## 0.5.3 *May 15th 2017*
 * Add support for GHC 8.2
 
diff --git a/ghc-typelits-natnormalise.cabal b/ghc-typelits-natnormalise.cabal
--- a/ghc-typelits-natnormalise.cabal
+++ b/ghc-typelits-natnormalise.cabal
@@ -1,5 +1,5 @@
 name:                ghc-typelits-natnormalise
-version:             0.5.3
+version:             0.5.4
 synopsis:            GHC typechecker plugin for types of kind GHC.TypeLits.Nat
 description:
   A type checker plugin for GHC that can solve /equalities/ of types of kind
@@ -41,7 +41,8 @@
 license-file:        LICENSE
 author:              Christiaan Baaij
 maintainer:          christiaan.baaij@gmail.com
-copyright:           Copyright © 2015-2016 University of Twente
+copyright:           Copyright © 2015-2016, University of Twente,
+                                 2017     , QBayLogic B.V.
 category:            Type System
 build-type:          Simple
 extra-source-files:  README.md
@@ -82,7 +83,7 @@
   main-is:             Tests.hs
   Other-Modules:       ErrorTests
   build-depends:       base >=4.8 && <5,
-                       ghc-typelits-natnormalise >= 0.4,
+                       ghc-typelits-natnormalise,
                        tasty >= 0.10,
                        tasty-hunit >= 0.9,
                        template-haskell >= 2.11.0.0
diff --git a/src/GHC/TypeLits/Normalise/SOP.hs b/src/GHC/TypeLits/Normalise/SOP.hs
--- a/src/GHC/TypeLits/Normalise/SOP.hs
+++ b/src/GHC/TypeLits/Normalise/SOP.hs
@@ -1,5 +1,6 @@
 {-|
-Copyright  :  (C) 2015-2016, University of Twente
+Copyright  :  (C) 2015-2016, University of Twente,
+                  2017     , QBayLogic B.V.
 License    :  BSD2 (see the file LICENSE)
 Maintainer :  Christiaan Baaij <christiaan.baaij@gmail.com>
 
@@ -197,6 +198,11 @@
 mergeS (E (S [P [s']]) (P [I i])) s
   | s == s'
   = Left (E (S [P [s']]) (P [I (i + 1)]))
+
+-- 4^x * 2^x ==> 8^x
+mergeS (E (S [P [I i]]) p) (E (S [P [I j]]) p')
+  | p == p'
+  = Left (E (S [P [I (i*j)]]) p)
 
 -- y*y ==> y^2
 mergeS l r
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -248,6 +248,9 @@
 proxyInEq5 :: Proxy 1 -> Proxy (2^a) -> ()
 proxyInEq5 = proxyInEq
 
+proxyEq1 :: Proxy x -> Proxy ((2 ^ x) * (2 ^ (x + x))) -> Proxy (2 * (2 ^ ((x + (x + x)) - 1)))
+proxyEq1 _ = id
+
 main :: IO ()
 main = defaultMain tests
 
@@ -283,6 +286,11 @@
       "()"
     , testCase "show (proxyFun7 (Proxy :: Proxy 8) :: Proxy 3)" $
       show (proxyFun7 (Proxy :: Proxy 8) :: Proxy 3) @?=
+      "Proxy"
+    ]
+  , testGroup "Equality"
+    [ testCase "((2 ^ x) * (2 ^ (x + x))) ~ (2 * (2 ^ ((x + (x + x)) - 1)))" $
+      show (proxyEq1 (Proxy :: Proxy 4) Proxy) @?=
       "Proxy"
     ]
   , testGroup "Inequality"
