diff --git a/README.md b/README.md
index 1b01f3e..e7eb7ab 100644
--- a/README.md
+++ b/README.md
@@ -71,22 +71,76 @@
 - --aggregate -granularity -g one of email, email_year, email_month, email_day, email_hour defaulting to aggregation by email
 - --extract-branches -r enables splitting of aggregation by branch name and expose branch name in the payload
 - --extract-issues -i enables the extraction of issues from commentLink
+- --botlike-filename-regexps -n comma separated list of regexps that identify a bot-like commit, commits that modify only files whose name is a match will be flagged as bot-like
 
 NOTE: Timestamp format is consistent with Gerrit's query syntax, see /Documentation/user-search.html for details.
 
-REST Example:
+### Examples
+
+- REST:
 
 ```
    $ curl http://gerrit.mycompany.com/projects/myproject/analytics~contributors
-   {"name":"John Doe","email":"john.doe@mycompany.com","num_commits":1, "num_files":4,"added_lines":9,"deleted_lines":1, "commits":[{"sha1":"6a1f73738071e299f600017d99f7252d41b96b4b","date":"Apr 28, 2011 5:13:14 AM","merge":false}]}
-   {"name":"Matt Smith","email":"matt.smith@mycompany.com","num_commits":1, "num_files":1,"added_lines":90,"deleted_lines":10,"commits":[{"sha1":"54527e7e3086758a23e3b069f183db6415aca304","date":"Sep 8, 2015 3:11:23 AM","merge":true}],"branches":["master"]}
+   {"name":"John Doe","email":"john.doe@mycompany.com","num_commits":1, "num_files":4,"added_lines":9,"deleted_lines":1, "commits":[{"sha1":"6a1f73738071e299f600017d99f7252d41b96b4b","date":"Apr 28, 2011 5:13:14 AM","merge":false,"bot_like": false}],"is_bot_like": false}
+   {"name":"Matt Smith","email":"matt.smith@mycompany.com","num_commits":1, "num_files":1,"added_lines":90,"deleted_lines":10,"commits":[{"sha1":"54527e7e3086758a23e3b069f183db6415aca304","date":"Sep 8, 2015 3:11:23 AM","merge":true,"bot_like": false}],"branches":["master"],"is_bot_like": false}
 ```
 
-SSH Example:
+- SSH:
 
 ```
    $ ssh -p 29418 admin@gerrit.mycompany.com analytics contributors myproject --since 2017-08-01 --until 2017-12-31 --extract-issues
-   {"name":"John Doe","email":"john.doe@mycompany.com","num_commits":1, "num_files":4,"added_lines":9,"deleted_lines":1, "commits":[{"sha1":"6a1f73738071e299f600017d99f7252d41b96b4b","date":"Apr 28, 2011 5:13:14 AM","merge":false}], "issues_codes":["PRJ-001"],"issues_links":["https://jira.company.org/PRJ-001"]}
-   {"name":"Matt Smith","email":"matt.smith@mycompany.com","num_commits":1, "num_files":1,"added_lines":90,"deleted_lines":10,"commits":[{"sha1":"54527e7e3086758a23e3b069f183db6415aca304","date":"Sep 8, 2015 3:11:23 AM","merge":true}],"branches":["branch1"],"issues_codes":["PRJ-002","PRJ-003"],"issues_links":["https://jira.company.org/PRJ-002","https://jira.company.org/PRJ-003"]}
+   {"name":"John Doe","email":"john.doe@mycompany.com","num_commits":1, "num_files":4,"added_lines":9,"deleted_lines":1, "commits":[{"sha1":"6a1f73738071e299f600017d99f7252d41b96b4b","date":"Apr 28, 2011 5:13:14 AM","merge":false,"bot_like": false}],"is_bot_like": false,"issues_codes":["PRJ-001"],"issues_links":["https://jira.company.org/PRJ-001"]}
+   {"name":"Matt Smith","email":"matt.smith@mycompany.com","num_commits":1, "num_files":1,"added_lines":90,"deleted_lines":10,"commits":[{"sha1":"54527e7e3086758a23e3b069f183db6415aca304","date":"Sep 8, 2015 3:11:23 AM","merge":true,"bot_like": false,}],"is_bot_like": false,"branches":["branch1"],"issues_codes":["PRJ-002","PRJ-003"],"issues_links":["https://jira.company.org/PRJ-002","https://jira.company.org/PRJ-003"]}
+```
+
+- BOT-like:
+Flags the commit as bot-like when *all* files in that commit match any of the following regular expressions: 
+
+    * .+\\.xml
+    * .+\\.bzl
+    * BUILD
+    * WORKSPACE
+    * \\.gitignore
+    * plugins/
+    * \\.settings
+
+```
+curl 'http://gerrit.mycompany.com/projects/myproject/analytics~contributors?botlike-filename-regexps=.%2B%5C.xml%2C.%2B%5C.bzl%2CBUILD%2CWORKSPACE%2C%5C.gitignore%2Cplugins%2F%2C%5C.settings'
+
+{
+  "year": 2018,
+  "month": 3,
+  "day": 21,
+  "hour": 19,
+  "name": "Dave Borowitz",
+  "email": "dborowitz@google.com",
+  "num_commits": 1,
+  "num_files": 6,
+  "num_distinct_files": 6,
+  "added_lines": 6,
+  "deleted_lines": 6,
+  "commits": [
+    {
+      "sha1": "a3ab2e1d07e6745f50b1d9907f6580c6521fd035",
+      "date": 1521661246000,
+      "merge": false,
+      "bot_like": true,
+      "files": [
+        "version.bzl",
+        "gerrit-plugin-gwtui/pom.xml",
+        "gerrit-extension-api/pom.xml",
+        "gerrit-war/pom.xml",
+        "gerrit-plugin-api/pom.xml",
+        "gerrit-acceptance-framework/pom.xml"
+      ]
+    }
+  ],
+  "branches": [],
+  "issues_codes": [],
+  "issues_links": [],
+  "last_commit_date": 1521661246000,
+  "is_merge": false,
+  "is_bot_like": true
+}
 ```
 
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala
index 4b6c5e7..c11da56 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/Contributors.scala
@@ -34,6 +34,7 @@
   private var beginDate: Option[Long] = None
   private var endDate: Option[Long] = None
   private var granularity: Option[AggregationStrategy] = None
+  private var botLikeRegexps: List[String] = List.empty[String]
 
   @ArgOption(name = "--extract-branches", aliases = Array("-r"),
     usage = "Do extra parsing to extract a list of all branches for each line")
@@ -73,9 +74,15 @@
     usage = "Extract a list of issues and links using the Gerrit's commentLink configuration")
   private var extractIssues: Boolean = false
 
+  @ArgOption(name = "--botlike-filename-regexps", aliases = Array("-n"),
+    usage = "comma separated list of regexps that identify a bot-like commit, commits that modify only files whose name is a match will be flagged as bot-like")
+  def setBotLikeRegexps(value: String): Unit = {
+    botLikeRegexps = value.split(",").toList
+  }
+
   override protected def run =
     gsonFmt.format(executor.get(projectRes, beginDate, endDate,
-      granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches, extractIssues), stdout)
+      granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches, extractIssues, botLikeRegexps), stdout)
 
 }
 
@@ -86,6 +93,7 @@
   private var beginDate: Option[Long] = None
   private var endDate: Option[Long] = None
   private var granularity: Option[AggregationStrategy] = None
+  private var botLikeRegexps: List[String] = List.empty[String]
 
   @ArgOption(name = "--since", aliases = Array("--after", "-b"), metaVar = "QUERY",
     usage = "(included) begin timestamp. Must be in the format 2006-01-02[ 15:04:05[.890][ -0700]]")
@@ -125,11 +133,17 @@
     usage = "Extract a list of issues and links using the Gerrit's commentLink configuration")
   private var extractIssues: Boolean = false
 
+  @ArgOption(name = "--botlike-filename-regexps", aliases = Array("-n"),
+    usage = "comma separated list of regexps that identify a bot-like commit, commits that modify only files whose name is a match will be flagged as bot-like")
+  def setBotLikeRegexps(value: String): Unit = {
+    botLikeRegexps = value.split(",").toList
+  }
+
   override def apply(projectRes: ProjectResource) =
     Response.ok(
       new GsonStreamedResult[UserActivitySummary](gson,
         executor.get(projectRes, beginDate, endDate,
-          granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches, extractIssues)))
+          granularity.getOrElse(AggregationStrategy.EMAIL), extractBranches, extractIssues, botLikeRegexps)))
 }
 
 class ContributorsService @Inject()(repoManager: GitRepositoryManager,
@@ -141,7 +155,7 @@
   import scala.collection.JavaConverters._
 
   def get(projectRes: ProjectResource, startDate: Option[Long], stopDate: Option[Long],
-          aggregationStrategy: AggregationStrategy, extractBranches: Boolean, extractIssues: Boolean)
+          aggregationStrategy: AggregationStrategy, extractBranches: Boolean, extractIssues: Boolean, botLikeIdentifiers: List[String])
   : TraversableOnce[UserActivitySummary] = {
     val nameKey = projectRes.getNameKey
     val commentLinks: List[CommentLinkInfo] = extractIssues.option {
@@ -149,9 +163,8 @@
     }.toList.flatten
 
 
-
     ManagedResource.use(repoManager.openRepository(projectRes.getNameKey)) { repo =>
-      val stats = new Statistics(repo, commentLinks.asJava)
+      val stats = new Statistics(repo, new BotLikeExtractorImpl(botLikeIdentifiers), commentLinks.asJava)
       val branchesExtractor = extractBranches.option(new BranchesExtractor(repo))
 
       histogram.get(repo, new AggregatedHistogramFilterByDates(startDate, stopDate, branchesExtractor, aggregationStrategy))
@@ -162,7 +175,7 @@
   }
 }
 
-case class CommitInfo(sha1: String, date: Long, merge: Boolean, files: java.util.Set[String])
+case class CommitInfo(sha1: String, date: Long, merge: Boolean, botLike: Boolean, files: java.util.Set[String])
 
 case class IssueInfo(code: String, link: String)
 
@@ -182,7 +195,8 @@
                                issuesCodes: Array[String],
                                issuesLinks: Array[String],
                                lastCommitDate: Long,
-                               isMerge: Boolean
+                               isMerge: Boolean,
+                               isBotLike: Boolean
                               )
 
 object UserActivitySummary {
@@ -202,7 +216,7 @@
             stat.numFiles, stat.numDistinctFiles, stat.addedLines, stat.deletedLines,
             stat.commits.toArray, maybeBranches, stat.issues.map(_.code)
               .toArray, stat.issues.map(_.link).toArray, uca.getLatest, stat
-              .isForMergeCommits
+              .isForMergeCommits,stat.isForBotLike
           )
         }
       case _ => throw new Exception(s"invalid key format found ${uca.key}")
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractor.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractor.scala
new file mode 100644
index 0000000..16a8bf2
--- /dev/null
+++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractor.scala
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 GerritForge Ltd
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.analytics.common
+
+import scala.util.matching.Regex
+
+trait BotLikeExtractor {
+  def isBotLike(files: Set[String]): Boolean
+}
+
+class BotLikeExtractorImpl(botLikeIdentifiers: List[String]) extends BotLikeExtractor {
+  private val botRegexps = new Regex(botLikeIdentifiers.mkString("|"))
+  override def isBotLike(files: Set[String]): Boolean = botLikeIdentifiers.nonEmpty && files.forall(botRegexps.findFirstIn(_).isDefined)
+}
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala
index bb5c0e2..e5f9723 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala
@@ -35,15 +35,18 @@
   * @param isForMergeCommits    true if the current instance is including stats for merge commits and false if
   *                             calculated for NON merge commits. The current code is not generating stats objects for
   *                             a mixture of merge and non-merge commits
+  * @param isForBotLike         true if the current instance is including BOT-like commits, false otherwise
   * @param commits              list of commits the stats are calculated for
   */
 case class CommitsStatistics(
                               addedLines: Int,
                               deletedLines: Int,
                               isForMergeCommits: Boolean,
+                              isForBotLike: Boolean,
                               commits: List[CommitInfo],
                               issues: List[IssueInfo] = Nil
                             ) {
+  require(commits.forall(_.botLike == isForBotLike), s"Creating a stats object with isForBotLike = $isForBotLike but containing commits of different type")
   require(commits.forall(_.merge == isForMergeCommits), s"Creating a stats object with isMergeCommit = $isForMergeCommits but containing commits of different type")
 
   /**
@@ -73,11 +76,13 @@
 }
 
 object CommitsStatistics {
-  val Empty = CommitsStatistics(0, 0, false, List[CommitInfo](), List[IssueInfo]())
-  val EmptyMerge = Empty.copy(isForMergeCommits = true)
+  val EmptyNonMerge = CommitsStatistics(0, 0, false, false, List[CommitInfo](), List[IssueInfo]())
+  val EmptyBotNonMerge = EmptyNonMerge.copy(isForBotLike = true)
+  val EmptyMerge = EmptyNonMerge.copy(isForMergeCommits = true)
+  val EmptyBotMerge = EmptyMerge.copy(isForBotLike = true)
 }
 
-class Statistics(repo: Repository, commentInfoList: java.util.List[CommentLinkInfo] = Nil) {
+class Statistics(repo: Repository, botLikeExtractor: BotLikeExtractor, commentInfoList: java.util.List[CommentLinkInfo] = Nil) {
 
   val log = LoggerFactory.getLogger(classOf[Statistics])
   val replacers = commentInfoList.map(info =>
@@ -86,7 +91,11 @@
       Option(info.link).getOrElse(info.html)))
 
   /**
-    * Returns up to two different CommitsStatistics object grouping the stats into merge and non-merge commits
+    * Returns up to four different CommitsStatistics object grouping the stats into:
+    * Non Merge - Non Bot
+    * Merge     - Non Bot
+    * Non Merge - Bot
+    * Merge     - Bot
     *
     * @param commits
     * @return
@@ -97,10 +106,16 @@
 
     val (mergeStatsSeq, nonMergeStatsSeq) = stats.partition(_.isForMergeCommits)
 
-    val nonMergeStats = nonMergeStatsSeq.foldLeft(CommitsStatistics.Empty)(_ + _)
-    val mergeStats = mergeStatsSeq.foldLeft(CommitsStatistics.EmptyMerge)(_ + _)
+    val (mergeBotStatsSeq, mergeNonBotStatsSeq) = mergeStatsSeq.partition(_.isForBotLike)
+    val (nonMergeBotStatsSeq, nonMergeNonBotStatsSeq) = nonMergeStatsSeq.partition(_.isForBotLike)
 
-    List(nonMergeStats, mergeStats).filterNot(_.isEmpty)
+    List(
+      nonMergeNonBotStatsSeq.foldLeft(CommitsStatistics.EmptyNonMerge)(_ + _), // Non Merge - Non Bot
+      mergeNonBotStatsSeq.foldLeft(CommitsStatistics.EmptyMerge)(_ + _),       // Merge     - Non Bot
+      nonMergeBotStatsSeq.foldLeft(CommitsStatistics.EmptyBotNonMerge)(_ + _), // Non Merge - Bot
+      mergeBotStatsSeq.foldLeft(CommitsStatistics.EmptyBotMerge)(_ + _)        // Merge     - Bot
+    )
+    .filterNot(_.isEmpty)
   }
 
   protected def forSingleCommit(objectId: ObjectId): CommitsStatistics = {
@@ -138,9 +153,9 @@
 
       val files: Set[String] = diffs.map(df.toFileHeader(_).getNewPath).toSet
 
-      val commitInfo = CommitInfo(objectId.getName, commit.getAuthorIdent.getWhen.getTime, commit.isMerge, files)
+      val commitInfo = CommitInfo(objectId.getName, commit.getAuthorIdent.getWhen.getTime, commit.isMerge, botLikeExtractor.isBotLike(files), files)
 
-      CommitsStatistics(lines.added, lines.deleted, commitInfo.merge, List(commitInfo), extractIssues(commitMessage))
+      CommitsStatistics(lines.added, lines.deleted, commitInfo.merge, commitInfo.botLike, List(commitInfo), extractIssues(commitMessage))
     }
   }
 
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala
new file mode 100644
index 0000000..2893a31
--- /dev/null
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/common/BotLikeExtractorImplSpec.scala
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 GerritForge Ltd
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.analytics.common
+
+import com.googlesource.gerrit.plugins.analytics.test.GitTestCase
+import org.scalatest.{FlatSpec, Matchers}
+
+class BotLikeExtractorImplSpec extends FlatSpec with Matchers with GitTestCase {
+
+  behavior of "isBotLike"
+
+  it should "return true when all files match bot-like identifiers" in {
+    val extractor = new BotLikeExtractorImpl(List(""".+\.xml"""))
+
+    extractor.isBotLike(Set(
+      "some/path/AFile.xml",
+      "some/path/AnotherFile.xml"
+    )).shouldBe(true)
+
+  }
+
+  it should "return false when at least one file does not match bot-like identifiers" in {
+    val extractor = new BotLikeExtractorImpl(List(""".+\.xml"""))
+
+    extractor.isBotLike(Set(
+      "some/path/AFile.xml",
+      "some/path/AnotherFile.someExtension"
+    )).shouldBe(false)
+
+  }
+
+  it should "return false when no bot-like identifiers have been provided" in {
+    val extractor = new BotLikeExtractorImpl(List.empty)
+
+    extractor.isBotLike(Set("some/path/anyFile")).shouldBe(false)
+
+  }
+
+}
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitInfoSpec.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitInfoSpec.scala
index 7de2c03..c8aff83 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitInfoSpec.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitInfoSpec.scala
@@ -8,14 +8,14 @@
 class CommitInfoSpec extends FlatSpec with Matchers {
 
   "CommitInfo" should "be serialised as JSON correctly" in {
-    val commitInfo = CommitInfo(sha1 = "sha", date = 1000l, merge = false, files = newHashSet("file1", "file2"))
+    val commitInfo = CommitInfo(sha1 = "sha", date = 1000l, merge = false, botLike = false, files = newHashSet("file1", "file2"))
 
     val gsonBuilder = OutputFormat.JSON_COMPACT.newGsonBuilder
 
     val actual = gsonBuilder.create().toJson(commitInfo)
     List(actual) should contain oneOf(
-      "{\"sha1\":\"sha\",\"date\":1000,\"merge\":false,\"files\":[\"file1\",\"file2\"]}",
-      "{\"sha1\":\"sha\",\"date\":1000,\"merge\":false,\"files\":[\"file2\",\"file1\"]}"
+      "{\"sha1\":\"sha\",\"date\":1000,\"merge\":false,\"bot_like\":false,\"files\":[\"file1\",\"file2\"]}",
+      "{\"sha1\":\"sha\",\"date\":1000,\"merge\":false,\"bot_like\":false,\"files\":[\"file2\",\"file1\"]}"
     )
   }
 
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsCommentLinkSpec.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsCommentLinkSpec.scala
index 95784fd..c9031c6 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsCommentLinkSpec.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsCommentLinkSpec.scala
@@ -39,7 +39,7 @@
                           createCommentLinkInfo(pattern = "([Bb]ug:\\s+)(\\d+)",
                             html = Some("$1<a href=\"http://trak.example.com/$2\">$2</a>"))).asJava) {
 
-    lazy val stats = new Statistics(repo, commentLinks)
+    lazy val stats = new Statistics(repo, TestBotLikeExtractor, commentLinks)
   }
 
   it should "collect no commentslink if no matching" in new TestEnvironment {
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsSpec.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsSpec.scala
index 6db1d00..d5257ef 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsSpec.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/CommitStatisticsSpec.scala
@@ -25,7 +25,7 @@
 
   class TestEnvironment {
     val repo = new FileRepository(testRepo)
-    val stats = new Statistics(repo)
+    val stats = new Statistics(repo, TestBotLikeExtractor)
   }
 
   "CommitStatistics" should "stats a single file added" in new TestEnvironment {
@@ -39,19 +39,19 @@
   }
 
   it should "sum to another compatible CommitStatistics generating an aggregated stat" in {
-    val commit1 = CommitInfo("sha_1", 1000l, false, newHashSet("file1"))
-    val commit2 = CommitInfo("sha_2", 2000l, false, newHashSet("file1"))
-    val commit3 = CommitInfo("sha_3", 3000l, false, newHashSet("file2"))
-    val commit4 = CommitInfo("sha_4", 1000l, false, newHashSet("file1"))
+    val commit1 = CommitInfo("sha_1", 1000l, false, botLike = false, newHashSet("file1"))
+    val commit2 = CommitInfo("sha_2", 2000l, false, botLike = false, newHashSet("file1"))
+    val commit3 = CommitInfo("sha_3", 3000l, false, botLike = false, newHashSet("file2"))
+    val commit4 = CommitInfo("sha_4", 1000l, false, botLike = false, newHashSet("file1"))
 
-    val stat1 = CommitsStatistics(3, 4, false, List(commit1, commit2))
-    val stat2 = CommitsStatistics(5, 7, false, List(commit3, commit4))
+    val stat1 = CommitsStatistics(3, 4, false, false, List(commit1, commit2))
+    val stat2 = CommitsStatistics(5, 7, false, false, List(commit3, commit4))
 
-    (stat1 + stat2) shouldBe CommitsStatistics(8, 11, false, List(commit1, commit2, commit3, commit4))
+    (stat1 + stat2) shouldBe CommitsStatistics(8, 11, false, false, List(commit1, commit2, commit3, commit4))
   }
 
   it should "fail if trying to be added to a CommitStatistics object for a different isMerge value" in {
-    an [IllegalArgumentException] should be thrownBy  (CommitsStatistics.EmptyMerge + CommitsStatistics.Empty)
+    an [IllegalArgumentException] should be thrownBy  (CommitsStatistics.EmptyMerge + CommitsStatistics.EmptyNonMerge)
   }
 
   it should "stats multiple files added" in new TestEnvironment {
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/TestBotLikeExtractor.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/TestBotLikeExtractor.scala
new file mode 100644
index 0000000..3018436
--- /dev/null
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/TestBotLikeExtractor.scala
@@ -0,0 +1,21 @@
+// Copyright (C) 2019 GerritForge Ltd
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.analytics.test
+
+import com.googlesource.gerrit.plugins.analytics.common.BotLikeExtractor
+
+case object TestBotLikeExtractor extends BotLikeExtractor {
+  override def isBotLike(files: Set[String]): Boolean = false
+}
diff --git a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/UserActivitySummarySpec.scala b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/UserActivitySummarySpec.scala
index 57417cd..de4d2f2 100644
--- a/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/UserActivitySummarySpec.scala
+++ b/src/test/scala/com/googlesource/gerrit/plugins/analytics/test/UserActivitySummarySpec.scala
@@ -18,7 +18,7 @@
     mergeCommit(personEmail, fileName = "anotherFile.txt", content="some other content")
     val aggregatedCommits = aggregateBy(EMAIL)
 
-    val List(nonMergeSummary, mergeSummary) = UserActivitySummary.apply(new Statistics(repo))(aggregatedCommits.head)
+    val List(nonMergeSummary, mergeSummary) = UserActivitySummary.apply(new Statistics(repo, TestBotLikeExtractor))(aggregatedCommits.head)
 
     nonMergeSummary.numCommits should be(2)
     mergeSummary.numCommits should be(1)
