diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,3 +14,8 @@
 * Removed formal definition.
 * Added section headings in documentation.
 * Removed unnecessary `Show` constraint.
+
+## 0.1.0.3 -- 2022-9-3
+
+* Improved performance (thanks to Bodigrim).
+* Fixed source repository name.
diff --git a/bench/Main.hs b/bench/Main.hs
new file mode 100644
--- /dev/null
+++ b/bench/Main.hs
@@ -0,0 +1,13 @@
+{-# LANGUAGE DataKinds #-}
+
+module Main where
+
+import NumberWall
+import Test.Tasty.Bench
+
+showPagoda n =
+  showSection show (0, n * 2) (0, n) $ numberWall ((pagoda :: Int -> Mod 2) . (+ n))
+
+main = defaultMain
+  [ bench "showPagoda" $ nf showPagoda 256
+  ]
diff --git a/number-wall.cabal b/number-wall.cabal
--- a/number-wall.cabal
+++ b/number-wall.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.4
 name:          number-wall
-version:       0.1.0.2
+version:       0.1.0.3
 author:        Owen Bechtel
 maintainer:    ombspring@gmail.com
 
@@ -28,7 +28,7 @@
 
 source-repository head
   type:     git
-  location: https://github.com/UnaryPlus/lambda.git
+  location: https://github.com/UnaryPlus/number-wall.git
 
 library
   hs-source-dirs:   src
@@ -38,7 +38,7 @@
 
   build-depends:
     base >= 4.14.1.0 && < 5,
-    memoize >= 0.2.0 && < 1.2,
+    chimera >= 0.3.2.0 && < 0.4,
     mod >= 0.1.1.0 && < 0.2,
     semirings >= 0.5.2 && < 0.8,
     JuicyPixels >= 3.3 && < 3.4
@@ -53,3 +53,15 @@
   build-depends:
     base,
     number-wall
+
+benchmark bench
+  type:             exitcode-stdio-1.0
+  hs-source-dirs:   bench
+  default-language: Haskell2010
+  ghc-options:      -W
+  main-is:          Main.hs
+
+  build-depends:
+    base,
+    number-wall,
+    tasty-bench
diff --git a/src/NumberWall.hs b/src/NumberWall.hs
--- a/src/NumberWall.hs
+++ b/src/NumberWall.hs
@@ -16,6 +16,7 @@
 
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 module NumberWall
   ( -- * Creating number walls
     Col, Row, numberWall, NumberWall
@@ -29,12 +30,13 @@
 
 import Prelude hiding (negate, (*), (+), (-), (^), quot)
 
-import Data.Function.Memoize (memoFix2)
+import Data.Chimera (VChimera, index, tabulateFix')
+import Data.Chimera.ContinuousMapping (fromZCurve, toZCurve, wordToInt, intToWord)
 import Data.Semiring (Semiring, Ring, zero, one, negate, (*), (+), (-), (^))
 import Data.Euclidean (Euclidean, quot)
 
-import Data.Mod.Word
 import Codec.Picture (PixelRGB8(..), generateImage, writePng)
+import Data.Mod.Word
 import Data.Word (Word8)
 
 {-|
@@ -52,6 +54,16 @@
 
 sign :: Ring a => Int -> a
 sign x = if even x then one else negate one
+
+memoFix2 :: forall a. ((Int -> Int -> a) -> (Int -> Int -> a)) -> (Int -> Int -> a)
+memoFix2 f = uncast $ index (tabulateFix' (cast . f . uncast) :: VChimera a)
+  where
+    cast :: (Int -> Int -> a) -> (Word -> a)
+    cast f = \n -> let (x, y) = fromZCurve n in
+     f (wordToInt x) (wordToInt y)
+
+    uncast :: (Word -> a) -> (Int -> Int -> a)
+    uncast g = \x y -> g (toZCurve (intToWord x) (intToWord y))
 
 {-|
 Generate the number wall for a sequence.
