diff --git a/CHANGELOG.rst b/CHANGELOG.rst
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -6,6 +6,17 @@
 
 .. _PVP: https://pvp.haskell.org/
 
+2.1.0.3 (2020-02-29)
+--------------------
+
+* Git: :tag:`dejafu-2.1.0.3`
+* Hackage: :hackage:`dejafu-2.1.0.3`
+
+Fixed
+~~~~~
+
+* Fixed an internal error message.
+
 
 2.1.0.2 (2020-02-29)
 --------------------
diff --git a/Test/DejaFu/SCT/Internal/DPOR.hs b/Test/DejaFu/SCT/Internal/DPOR.hs
--- a/Test/DejaFu/SCT/Internal/DPOR.hs
+++ b/Test/DejaFu/SCT/Internal/DPOR.hs
@@ -75,7 +75,7 @@
     | not (todo `S.isSubsetOf` runnable) = fatal "thread exists in todo set but not runnable set"
     | not (done `S.isSubsetOf` runnable) = fatal "thread exists in done set but not runnable set"
     | not (taken `S.isSubsetOf` done) = fatal "thread exists in taken set but not done set"
-    | not (todo `disjoint` done) = fatal "thread exists in both taken set and done set"
+    | not (todo `disjoint` done) = fatal "thread exists in both todo set and done set"
     | not (maybe True (`S.member` done) next) = fatal "taken thread does not exist in done set"
     | otherwise = dpor
   where
@@ -166,14 +166,14 @@
   -- ^ The initial concurrency state
   -> DPOR
   -> DPOR
-incorporateTrace safeIO memtype conservative trace state0 dpor0 = grow state0 (initialDPORThread dpor0) trace dpor0 where
-  grow state tid trc@((d, _, a):rest) dpor =
+incorporateTrace safeIO memtype conservative = grow initialThread where
+  grow tid trc@((d, _, a):rest) state dpor =
     let tid'   = tidOf tid d
         state' = updateCState memtype state tid' a
     in case dporNext dpor of
          Just (t, child)
            | t == tid' ->
-             validateDPOR $ dpor { dporNext = Just (tid', grow state' tid' rest child) }
+             validateDPOR $ dpor { dporNext = Just (tid', grow tid' rest state' child) }
            | hasTodos child -> fatal "replacing child with todos!"
          _ -> validateDPOR $
            let taken = M.insert tid' a (dporTaken dpor)
@@ -183,7 +183,7 @@
                    , dporNext  = Just (tid', subtree state' tid' sleep trc)
                    , dporDone  = S.insert tid' (dporDone dpor)
                    }
-  grow _ _ [] _ = fatal "trace exhausted without reading a to-do point!"
+  grow _ _ _ _ = fatal "trace exhausted without reading a to-do point!"
 
   -- check if there are to-do points in a tree
   hasTodos dpor = not (M.null (dporTodo dpor)) || (case dporNext dpor of Just (_, dpor') -> hasTodos dpor'; _ -> False)
@@ -210,7 +210,7 @@
           ((d', _, a'):_) -> M.singleton (tidOf tid d') a'
           [] -> M.empty
         }
-  subtree _ _ _ [] = fatal "subtree suffix empty!"
+  subtree _ _ _ _ = fatal "subtree suffix empty!"
 
 -- | Produce a list of new backtracking points from an execution
 -- trace. These are then used to inform new \"to-do\" points in the
@@ -673,10 +673,6 @@
 
 -------------------------------------------------------------------------------
 -- * Utilities
-
--- The initial thread of a DPOR tree.
-initialDPORThread :: DPOR -> ThreadId
-initialDPORThread = S.elemAt 0 . dporRunnable
 
 -- | Check if a thread yielded.
 didYield :: ThreadAction -> Bool
diff --git a/dejafu.cabal b/dejafu.cabal
--- a/dejafu.cabal
+++ b/dejafu.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                dejafu
-version:             2.1.0.2
+version:             2.1.0.3
 synopsis:            A library for unit-testing concurrent programs.
 
 description:
@@ -33,7 +33,7 @@
 source-repository this
   type:     git
   location: https://github.com/barrucadu/dejafu.git
-  tag:      dejafu-2.1.0.2
+  tag:      dejafu-2.1.0.3
 
 library
   exposed-modules:     Test.DejaFu
