diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,12 @@
+2020-12-06 Ivan Perez <ivan.perez@acm.org>
+        * Version bump (3.2).
+        * Fixed implementation of tysize for n-dimensional arrays. (#20).
+        * Removed sorting of interpreter output (#19).
+        * Minor documentation fixes (#17, #15).
+        * Credits: @fdedden.
+
+2019-11-22 Ivan Perez <ivan.perez@nianet.org>
+        * Version bump (3.1).
+        * Eliminate random modules and generators (#9).
+        * Updated contact information for 'impossible' error (#12).
+        * Implement missing pretty printer for Index operator (#11).
diff --git a/copilot-core.cabal b/copilot-core.cabal
--- a/copilot-core.cabal
+++ b/copilot-core.cabal
@@ -1,28 +1,28 @@
 cabal-version:       >=1.10
 name:                copilot-core
-version:             3.1
+version:             3.2
 synopsis:            An intermediate representation for Copilot.
 description:
   Intermediate representation for Copilot.
   .
   Copilot is a stream (i.e., infinite lists) domain-specific language (DSL) in
   Haskell that compiles into embedded C.  Copilot contains an interpreter,
-  multiple back-end compilers, and other verification tools.  A tutorial, bug
-  reports, and todos are available at
-  <https://github.com/Copilot-Language/copilot-discussion>.
+  multiple back-end compilers, and other verification tools.
   .
-  Examples are available at
-  <https://github.com/Copilot-Language/Copilot/tree/master/Examples>.
+  A tutorial, examples, and other information are available at
+  <https://copilot-language.github.io>.
 
 author:              Frank Dedden, Lee Pike, Robin Morisset, Alwyn Goodloe,
                      Sebastian Niller, Nis Nordbyop Wegmann
 license:             BSD3
 license-file:        LICENSE
 maintainer:          Frank Dedden <dev@dedden.net>
+homepage:            https://copilot-language.github.io
+bug-reports:         https://github.com/Copilot-Language/copilot-core/issues
 stability:           Experimental
 category:            Language, Embedded
 build-type:          Simple
-extra-source-files:  README.md
+extra-source-files:  README.md, CHANGELOG
 
 source-repository head
     type:       git
@@ -41,7 +41,6 @@
 
   build-depends:
     base       >= 4.9 && < 5,
-    containers >= 0.4 && < 0.7,
     pretty     >= 1.0 && < 1.2,
     mtl        >= 2.0 && < 2.3,
     dlist
diff --git a/src/Copilot/Core/Interpret/Eval.hs b/src/Copilot/Core/Interpret/Eval.hs
--- a/src/Copilot/Core/Interpret/Eval.hs
+++ b/src/Copilot/Core/Interpret/Eval.hs
@@ -22,8 +22,6 @@
 import qualified Prelude as P
 
 import Data.List (transpose)
-import qualified Data.Map as M
-import Data.Map (Map)
 import Data.Maybe (fromJust)
 import Data.Bits
 import Control.Exception (Exception, throw)
@@ -105,9 +103,9 @@
     -- representing their values.  (Nothing output if the guard for the trigger
     -- is false).  The order is important, since we compare the arg lists
     -- between the interpreter and backends.
-  { interpTriggers  :: Map String [Maybe [Output]]
+  { interpTriggers  :: [(String, [Maybe [Output]])]
     -- map from observer names to their outputs.  We also show observer outputs.
-  , interpObservers :: Map String [Output] }
+  , interpObservers :: [(String, [Output])] }
   deriving Show
 
 --------------------------------------------------------------------------------
@@ -146,9 +144,9 @@
                   (specObservers spec)                        in
 
   strms `seq` ExecTrace
-                { interpTriggers  = M.fromList $
+                { interpTriggers  =
                     zip (map triggerName  (specTriggers  spec)) trigs
-                , interpObservers = M.fromList $
+                , interpObservers =
                     zip (map observerName (specObservers spec)) obsvs
                 }
 
diff --git a/src/Copilot/Core/Interpret/Render.hs b/src/Copilot/Core/Interpret/Render.hs
--- a/src/Copilot/Core/Interpret/Render.hs
+++ b/src/Copilot/Core/Interpret/Render.hs
@@ -14,7 +14,6 @@
 import Data.List (intersperse, transpose, foldl')
 import Data.Maybe (catMaybes)
 import Copilot.Core.Interpret.Eval (Output, ExecTrace (..))
-import qualified Data.Map as M
 import Text.PrettyPrint
 
 import Prelude hiding ((<>))
@@ -34,20 +33,20 @@
      where
 
      ppTriggerNames :: [Doc]
-     ppTriggerNames  = map (text . (++ ":")) (M.keys trigs)
+     ppTriggerNames  = map (text . (++ ":")) (map fst trigs)
 
      ppObserverNames :: [Doc]
-     ppObserverNames = map (text . (++ ":")) (M.keys obsvs)
+     ppObserverNames = map (text . (++ ":")) (map fst obsvs)
 
      ppTriggerOutputs :: [[Doc]]
-     ppTriggerOutputs = map (map ppTriggerOutput) (M.elems trigs)
+     ppTriggerOutputs = map (map ppTriggerOutput) (map snd trigs)
 
      ppTriggerOutput :: Maybe [Output] -> Doc
      ppTriggerOutput (Just vs) = text $ "(" ++ concat (intersperse "," vs) ++ ")"
      ppTriggerOutput Nothing   = text "--"
 
      ppObserverOutputs :: [[Doc]]
-     ppObserverOutputs = map (map text) (M.elems obsvs)
+     ppObserverOutputs = map (map text) (map snd obsvs)
 
 --------------------------------------------------------------------------------
 
@@ -64,7 +63,7 @@
 step ExecTrace
        { interpTriggers  = trigs
        } =
-  if M.null trigs then (empty, Nothing)
+  if null trigs then (empty, Nothing)
     else (foldl' ($$) empty (text "#" : ppTriggerOutputs), tails)
 
   where
@@ -73,8 +72,7 @@
   ppTriggerOutputs =
       catMaybes
     . fmap ppTriggerOutput
-    . M.assocs
-    . fmap head
+    . map (fmap head)
     $ trigs
 
   ppTriggerOutput :: (String, Maybe [Output]) -> Maybe Doc
@@ -85,12 +83,12 @@
 
   tails :: Maybe ExecTrace
   tails =
-    if any null (M.elems (fmap tail trigs))
+    if any null (fmap (tail.snd) trigs)
       then Nothing
       else Just
         ExecTrace
-          { interpTriggers  = fmap tail trigs
-          , interpObservers = M.empty
+          { interpTriggers  = map (fmap tail) trigs
+          , interpObservers = []
           }
 
 --------------------------------------------------------------------------------
diff --git a/src/Copilot/Core/Type.hs b/src/Copilot/Core/Type.hs
--- a/src/Copilot/Core/Type.hs
+++ b/src/Copilot/Core/Type.hs
@@ -95,7 +95,7 @@
 
 -- Get the total (nested) size of an array from its type
 tysize :: forall n t. KnownNat n => Type (Array n t) -> Int
-tysize ty@(Array ty'@(Array _)) = tylength ty * tylength ty'
+tysize ty@(Array ty'@(Array _)) = tylength ty * tysize ty'
 tysize ty@(Array _            ) = tylength ty
 
 instance EqualType Type where
