diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
 # Revision history for tasty-lua
 
+## 0.2.1 -- 2020-01-26
+
+- Fixed an issue with error reporting: the bug caused test-group
+  names to be added multiple times when reporting a test failure.
+
+## 0.2.0.1 -- 2019-06-19
+
+- List all files in cabal file: *stack.yaml* and
+  *test/tasty-lua.lua* were added to the list of extra source
+  files.
+
 ## 0.2.0 -- 2019-05-19
 
 - Renamed `testFileWith` to `testLuaFile`, and
diff --git a/src/Test/Tasty/Lua.hs b/src/Test/Tasty/Lua.hs
--- a/src/Test/Tasty/Lua.hs
+++ b/src/Test/Tasty/Lua.hs
@@ -22,6 +22,7 @@
 where
 
 import Control.Exception (SomeException, try)
+import Data.Bifunctor (first)
 import Data.List (intercalate)
 import Data.Semigroup (Semigroup (..))
 import Foreign.Lua (Lua)
@@ -83,22 +84,29 @@
 stringifyFailureGist (names, msg) =
   intercalate " // " names ++ ":\n" ++ msg ++ "\n\n"
 
--- | Extract all failures from a test result tree.
+-- | Combine all failures (or successes) from a test result tree into a
+-- @'ResultSummary'@. If the tree contains only successes, the result
+-- will be @'SuccessSummary'@ with the number of successful tests; if
+-- there was at least one failure, the result will be
+-- @'FailureSummary'@, with a @'FailureInfo'@ for each failure.
 collectSummary :: ResultTree -> ResultSummary
 collectSummary (ResultTree name tree) =
   case tree of
     SingleTest Success       -> SuccessSummary 1
     SingleTest (Failure msg) -> FailureSummary [([name], msg)]
-    TestGroup subtree        -> foldr go (SuccessSummary 0) subtree
-      where go r summary = collectSummary r <> addGroup name summary
+    TestGroup subtree        -> foldMap (addGroup name . collectSummary)
+                                        subtree
 
+-- | Add the name of the current test group to all failure summaries.
 addGroup :: TestName -> ResultSummary -> ResultSummary
-addGroup name (FailureSummary fs) = FailureSummary (map addName fs)
-  where addName (names, msg) = (name : names, msg)
-addGroup _name summary = summary
+addGroup name  (FailureSummary fs) = FailureSummary (map (first (name:)) fs)
+addGroup _name summary             = summary
 
 instance Semigroup ResultSummary where
   (SuccessSummary n)  <> (SuccessSummary m)  = SuccessSummary (n + m)
   (SuccessSummary _)  <> (FailureSummary fs) = FailureSummary fs
   (FailureSummary fs) <> (SuccessSummary _)  = FailureSummary fs
   (FailureSummary fs) <> (FailureSummary gs) = FailureSummary (fs ++ gs)
+
+instance Monoid ResultSummary where
+  mempty = SuccessSummary 0
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,5 @@
+resolver: lts-13.18
+packages:
+  - .
+extra-deps:
+  - hslua-1.0.3.1
diff --git a/tasty-lua.cabal b/tasty-lua.cabal
--- a/tasty-lua.cabal
+++ b/tasty-lua.cabal
@@ -1,5 +1,5 @@
 name:                tasty-lua
-version:             0.2.0.1
+version:             0.2.1
 synopsis:            Write tests in Lua, integrate into tasty.
 description:         Allow users to define tasty tests from Lua.
 homepage:            https://github.com/hslua/tasty-lua
@@ -13,6 +13,7 @@
 extra-source-files:  CHANGELOG.md
                    , tasty.lua
                    , test/test-tasty.lua
+                   , stack.yaml
 cabal-version:       >=1.10
 tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5
 
diff --git a/test/test-tasty-lua.hs b/test/test-tasty-lua.hs
--- a/test/test-tasty-lua.hs
+++ b/test/test-tasty-lua.hs
@@ -46,8 +46,9 @@
       assertEqual' "loading the module fails " Lua.OK =<<
         Lua.dostring "require 'tasty'"
 
-  , testGroup "testFileWith" $
-      [testLuaFile Lua.run "test-tasty.lua" ("test" </> "test-tasty.lua")]
+  , testGroup "testFileWith"
+    [ testLuaFile Lua.run "test-tasty.lua" ("test" </> "test-tasty.lua")
+    ]
   ]
 
 assertEqual' :: (Show a, Eq a) => String -> a -> a -> Lua ()
