diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,27 @@
+# 1.1.0
+
+## Breaking Changes
+
+* The XML generated is now slightly different in order to satisfy Jenkins. In
+  particular:
+
+  * The `classname` attribute now joins the test path with `.` (like a Java
+    class name).
+  * `testsuite` nodes have a `tests` attribute, which is the amount of tests
+    executed.
+
+  For more discussion see https://github.com/ocharles/tasty-ant-xml/pull/20 and
+  https://github.com/ocharles/tasty-ant-xml/commit/a01df06b59122c3086fc9f42854129b1d4a8c31c#commitcomment-21211275
+
+  Thanks to @liskin and @haishengwu-okta for this work.
+
+## Other Changes
+
+* Increase the lower bound of `directory` to >= 1.2.3.0. Earlier versions may
+  throw exceptions on some of the actions we are using. Thanks to @liskin for
+  pointing this out.
+
+
 # 1.0.5
 
 ## Other Changes
diff --git a/Test/Tasty/Runners/AntXML.hs b/Test/Tasty/Runners/AntXML.hs
--- a/Test/Tasty/Runners/AntXML.hs
+++ b/Test/Tasty/Runners/AntXML.hs
@@ -13,6 +13,7 @@
 import Control.Applicative
 import Control.Arrow (first)
 import Control.Monad.IO.Class (liftIO)
+import Data.List (intercalate)
 import Data.Maybe (fromMaybe)
 import Data.Monoid (Monoid(..), Endo(..), Sum(..))
 import Data.Proxy (Proxy(..))
@@ -95,7 +96,7 @@
             let testCaseAttributes time = map (uncurry XML.Attr . first XML.unqual)
                   [ ("name", testName)
                   , ("time", showTime time)
-                  , ("classname", unwords groupNames)
+                  , ("classname", intercalate "." (reverse groupNames))
                   ]
 
                 mkSummary contents =
@@ -130,11 +131,14 @@
           Const summary <$ State.modify (+ 1)
 
         runGroup groupName children = Tasty.Traversal $ Functor.Compose $ do
-          Const soFar <- Reader.withReaderT (++ [groupName]) $ Functor.getCompose $ Tasty.getTraversal children
+          Const soFar <- Reader.local (groupName :) $ Functor.getCompose $ Tasty.getTraversal children
 
           let grouped = appEndo (xmlRenderer soFar) $
-                XML.node (XML.unqual "testsuite") $
-                  XML.Attr (XML.unqual "name") groupName
+                XML.node (XML.unqual "testsuite")
+                   [ XML.Attr (XML.unqual "name") groupName
+                   , XML.Attr (XML.unqual "tests")
+                       (show . getSum . (summaryFailures `mappend` summaryErrors `mappend` summarySuccesses) $ soFar)
+                   ]
 
           pure $ Const
             soFar { xmlRenderer = Endo (`appendChild` grouped)
diff --git a/tasty-ant-xml.cabal b/tasty-ant-xml.cabal
--- a/tasty-ant-xml.cabal
+++ b/tasty-ant-xml.cabal
@@ -1,5 +1,5 @@
 name: tasty-ant-xml
-version: 1.0.5
+version: 1.1.0
 synopsis: Render tasty output to XML for Jenkins
 description: A tasty ingredient to output test results in XML, using the Ant schema. This XML can be consumed by the Jenkins continuous integration framework.
 homepage: http://github.com/ocharles/tasty-ant-xml
@@ -25,7 +25,7 @@
     tagged >= 0.7,
     tasty >= 0.10 && < 0.12,
     transformers >= 0.3.0.0,
-    directory >= 1.0.0,
+    directory >= 1.2.3.0,
     filepath >= 1.0.0,
     xml >= 1.3.13
   default-language: Haskell98
