diff --git a/.buckconfig b/.buckconfig
deleted file mode 100644
index 1e032e5..0000000
--- a/.buckconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-[alias]
-  events-log = //:events-log
-  plugin = //:events-log
-  src = //:events-log-sources
-
-[java]
-  src_roots = java, resources
-
-[project]
-  ignore = .git, eclipse-out
-
-[cache]
-  mode = dir
-  dir = buck-out/cache
-
diff --git a/.gitignore b/.gitignore
index 50ce7fd..0da307d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,13 +2,8 @@
 .project
 .settings
 bin
-/.buckconfig.local
-/.buckd
-/buck-cache
-/buck-out
 /local.properties
 *.pyc
-.buckversion
-.watchmanconfig
-/bucklets
 /eclipse-out
+/.primary_build_tool
+/bazel-*
diff --git a/BUCK b/BUCK
deleted file mode 100644
index 7b55bc0..0000000
--- a/BUCK
+++ /dev/null
@@ -1,72 +0,0 @@
-include_defs('//bucklets/gerrit_plugin.bucklet')
-include_defs('//bucklets/java_sources.bucklet')
-include_defs('//bucklets/maven_jar.bucklet')
-
-SOURCES = glob(['src/main/java/**/*.java'])
-RESOURCES = glob(['src/main/resources/**/*'])
-DEPS = [
-  '//lib:gson',
-  '//lib/commons:dbcp',
-]
-TEST_DEPS = GERRIT_PLUGIN_API + DEPS + GERRIT_TESTS + [
-  ':events-log__plugin',
-  ':mockito',
-]
-
-gerrit_plugin(
-  name = 'events-log',
-  srcs = SOURCES,
-  resources = RESOURCES,
-  manifest_entries = [
-    'Gerrit-PluginName: events-log',
-    'Implementation-Vendor: Ericsson',
-    'Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/events-log',
-    'Gerrit-Module: com.ericsson.gerrit.plugins.eventslog.sql.SQLModule',
-    'Gerrit-HttpModule: com.ericsson.gerrit.plugins.eventslog.HttpModule',
-  ],
-  provided_deps = DEPS,
-)
-
-java_library(
-  name = 'classpath',
-  deps = TEST_DEPS,
-)
-
-java_test(
-  name = 'events-log_tests',
-  srcs = glob(['src/test/java/**/*.java']),
-  labels = ['events-log'],
-  deps = TEST_DEPS,
-)
-
-java_sources(
-  name = 'events-log-sources',
-  srcs = SOURCES + RESOURCES,
-)
-
-maven_jar(
-  name = 'mockito',
-  id = 'org.mockito:mockito-core:2.5.0',
-  sha1 = 'be28d46a52c7f2563580adeca350145e9ce916f8',
-  license = 'MIT',
-  deps = [
-    ':byte-buddy',
-    ':objenesis',
-  ],
-)
-
-maven_jar(
-  name = 'byte-buddy',
-  id = 'net.bytebuddy:byte-buddy:1.5.12',
-  sha1 = 'b1ba1d15f102b36ed43b826488114678d6d413da',
-  license = 'DO_NOT_DISTRIBUTE',
-  attach_source = False,
-)
-
-maven_jar(
-  name = 'objenesis',
-  id = 'org.objenesis:objenesis:2.4',
-  sha1 = '2916b6c96b50c5b3ec4452ed99401db745aabb27',
-  license = 'DO_NOT_DISTRIBUTE',
-  attach_source = False,
-)
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..da14708
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,40 @@
+load("//tools/bzl:junit.bzl", "junit_tests")
+load(
+    "//tools/bzl:plugin.bzl",
+    "gerrit_plugin",
+    "PLUGIN_DEPS",
+    "PLUGIN_TEST_DEPS",
+)
+
+gerrit_plugin(
+    name = "events-log",
+    srcs = glob(["src/main/java/**/*.java"]),
+    manifest_entries = [
+        "Gerrit-PluginName: events-log",
+        "Implementation-URL: https://gerrit-review.googlesource.com/#/admin/projects/plugins/events-log",
+        "Implementation-Title: events-log plugin",
+        "Gerrit-Module: com.ericsson.gerrit.plugins.eventslog.sql.SQLModule",
+        "Gerrit-HttpModule: com.ericsson.gerrit.plugins.eventslog.HttpModule",
+    ],
+    resources = glob(["src/main/resources/**/*"]),
+)
+
+junit_tests(
+    name = "events_log_tests",
+    testonly = 1,
+    srcs = glob(["src/test/java/**/*.java"]),
+    tags = ["events-log"],
+    deps = [
+        ":events-log__plugin_test_deps",
+    ],
+)
+
+java_library(
+    name = "events-log__plugin_test_deps",
+    testonly = 1,
+    visibility = ["//visibility:public"],
+    exports = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
+        ":events-log__plugin",
+        "@mockito//jar",
+    ],
+)
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..44dabc8
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,30 @@
+workspace(name = "events_log")
+
+load("//:bazlets.bzl", "load_bazlets")
+
+load_bazlets(
+    commit = "11ce7521051ca73598d099aa8a396c9ffe932a74",
+    #    local_path = "/home/<user>/projects/bazlets",
+)
+
+#Snapshot Plugin API
+#load(
+#    "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+#    "gerrit_api_maven_local",
+#)
+
+# Load snapshot Plugin API
+#gerrit_api_maven_local()
+
+# Release Plugin API
+load(
+    "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+    "gerrit_api",
+)
+
+# Load release Plugin API
+gerrit_api()
+
+load("//:external_plugin_deps.bzl", "external_plugin_deps")
+
+external_plugin_deps()
diff --git a/bazlets.bzl b/bazlets.bzl
new file mode 100644
index 0000000..e14e488
--- /dev/null
+++ b/bazlets.bzl
@@ -0,0 +1,17 @@
+NAME = "com_googlesource_gerrit_bazlets"
+
+def load_bazlets(
+    commit,
+    local_path = None
+  ):
+  if not local_path:
+      native.git_repository(
+          name = NAME,
+          remote = "https://gerrit.googlesource.com/bazlets",
+          commit = commit,
+      )
+  else:
+      native.local_repository(
+          name = NAME,
+          path = local_path,
+      )
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
new file mode 100644
index 0000000..e26b362
--- /dev/null
+++ b/external_plugin_deps.bzl
@@ -0,0 +1,33 @@
+load("//tools/bzl:maven_jar.bzl", "maven_jar")
+
+def external_plugin_deps():
+  maven_jar(
+    name = "mockito",
+    artifact = "org.mockito:mockito-core:2.15.0",
+    sha1 = "b84bfbbc29cd22c9529409627af6ea2897f4fa85",
+    deps = [
+      "@byte_buddy//jar",
+      "@byte_buddy_agent//jar",
+      "@objenesis//jar",
+    ],
+  )
+
+  BYTE_BUDDY_VER = "1.7.9"
+
+  maven_jar(
+    name = "byte_buddy",
+    artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VER,
+    sha1 = "51218a01a882c04d0aba8c028179cce488bbcb58",
+  )
+
+  maven_jar(
+    name = "byte_buddy_agent",
+    artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VER,
+    sha1 = "a6c65f9da7f467ee1f02ff2841ffd3155aee2fc9",
+  )
+
+  maven_jar(
+    name = "objenesis",
+    artifact = "org.objenesis:objenesis:2.6",
+    sha1 = "639033469776fd37c08358c6b92a4761feb2af4b",
+  )
diff --git a/lib/BUCK b/lib/BUCK
deleted file mode 100644
index 06f7c02..0000000
--- a/lib/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-maven_jar(
-  name = 'gson',
-  id = 'com.google.code.gson:gson:2.3.1',
-  sha1 = 'ecb6e1f8e4b0e84c4b886c2f14a1500caf309757',
-  license = 'Apache2.0',
-)
diff --git a/lib/commons/BUCK b/lib/commons/BUCK
deleted file mode 100644
index ee87715..0000000
--- a/lib/commons/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-maven_jar(
-  name = 'dbcp',
-  id = 'commons-dbcp:commons-dbcp:1.4',
-  sha1 = '30be73c965cc990b153a100aaaaafcf239f82d39',
-  license = 'Apache2.0',
-  deps = [':pool'],
-  exclude = [
-    'META-INF/LICENSE.txt',
-    'META-INF/NOTICE.txt',
-    'testpool.jocl'
-  ],
-)
-
-maven_jar(
-  name = 'pool',
-  id = 'commons-pool:commons-pool:1.5.5',
-  sha1 = '7d8ffbdc47aa0c5a8afe5dc2aaf512f369f1d19b',
-  license = 'Apache2.0',
-  attach_source = False,
-  exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
-)
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
deleted file mode 100644
index f83d917..0000000
--- a/lib/gerrit/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-VER = '2.13'
-REPO = MAVEN_CENTRAL
-
-maven_jar(
-  name = 'acceptance-framework',
-  id = 'com.google.gerrit:gerrit-acceptance-framework:' + VER,
-  sha1 = 'a6913a61196a8fccdb45e761f43a0b7e21867c90',
-  license = 'Apache2.0',
-  attach_source = False,
-  repository = REPO,
-)
-
-maven_jar(
-  name = 'plugin-api',
-  id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = 'e25d55b8f41627c4ae6b9d2069ec398638b219a3',
-  license = 'Apache2.0',
-  attach_source = False,
-  repository = REPO,
-)
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
index 3ba78bb..262316c 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventHandler.java
@@ -18,26 +18,22 @@
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.ProjectEvent;
 import com.google.inject.Inject;
-
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
-/**
- * Listen to Events and store them into the EventStore
- */
+/** Listen to Events and store them into the EventStore */
 class EventHandler implements EventListener {
   private final EventStore store;
   private final ScheduledThreadPoolExecutor pool;
 
   @Inject
-  EventHandler(EventStore store,
-      @EventPool ScheduledThreadPoolExecutor pool) {
+  EventHandler(EventStore store, @EventPool ScheduledThreadPoolExecutor pool) {
     this.store = store;
     this.pool = pool;
   }
 
   @Override
   public void onEvent(Event event) {
-    if(event instanceof ProjectEvent) {
+    if (event instanceof ProjectEvent) {
       pool.execute(new StoreEventTask((ProjectEvent) event));
     }
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
index 6148522..906c0e8 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventModule.java
@@ -21,7 +21,6 @@
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.internal.UniqueAnnotations;
-
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
 /** Configures handling for an event queue while providing its pool. */
@@ -31,9 +30,7 @@
   protected void configure() {
     bind(EventQueue.class).in(Scopes.SINGLETON);
     bind(EventHandler.class).in(Scopes.SINGLETON);
-    bind(LifecycleListener.class)
-        .annotatedWith(UniqueAnnotations.create())
-        .to(EventQueue.class);
+    bind(LifecycleListener.class).annotatedWith(UniqueAnnotations.create()).to(EventQueue.class);
     DynamicSet.bind(binder(), EventListener.class).to(EventHandler.class);
   }
 
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java
index 97324df..32e9465 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventPool.java
@@ -17,13 +17,9 @@
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 import com.google.inject.BindingAnnotation;
-
 import java.lang.annotation.Retention;
 
-/**
- * Annotation applied to a ScheduledThreadPoolExecutor.
- */
+/** Annotation applied to a ScheduledThreadPoolExecutor. */
 @Retention(RUNTIME)
 @BindingAnnotation
-public @interface EventPool {
-}
+public @interface EventPool {}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java
index 07d5b41..eca051b 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventQueue.java
@@ -17,7 +17,6 @@
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
-
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 
 /** A queue for events to store. */
@@ -30,10 +29,7 @@
     this.workQueue = workQueue;
   }
 
-  /**
-   * {@inheritDoc}
-   * Create a new executor queue in WorkQueue for storing events.
-   */
+  /** {@inheritDoc} Create a new executor queue in WorkQueue for storing events. */
   @Override
   public void start() {
     pool = workQueue.createQueue(1, "Store events");
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventStore.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventStore.java
index a7785db..468404e 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventStore.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventStore.java
@@ -15,7 +15,6 @@
 package com.ericsson.gerrit.plugins.eventslog;
 
 import com.google.gerrit.server.events.ProjectEvent;
-
 import java.util.List;
 
 /** A store for change events to query. */
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
index 8432be4..e912faf 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
@@ -21,7 +21,6 @@
 import com.google.gerrit.server.config.SitePaths;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
-
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
@@ -49,7 +48,6 @@
   static final int DEFAULT_WAIT_TIME = 1000;
   static final int DEFAULT_CONN_TIME = 1000;
   static final String DEFAULT_DRIVER = "org.h2.Driver";
-  static final String DEFAULT_URL = "jdbc:h2:~/db/";
   static final int DEFAULT_EVICT_IDLE_TIME = 1000 * 60;
 
   private boolean copyLocal;
@@ -65,11 +63,10 @@
   private String storeUsername;
   private String storePassword;
   private int evictIdleTime;
+  private String defaultUrl;
 
   @Inject
-  EventsLogConfig(PluginConfigFactory cfgFactory,
-      SitePaths site,
-      @PluginName String pluginName) {
+  EventsLogConfig(PluginConfigFactory cfgFactory, SitePaths site, @PluginName String pluginName) {
     String defaultLocalPath = site.site_path.toString() + "/events-db/";
     PluginConfig cfg = cfgFactory.getFromGerritConfig(pluginName, true);
     copyLocal = cfg.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL);
@@ -79,19 +76,15 @@
     waitTime = cfg.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME);
     connectTime = cfg.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME);
     storeDriver = cfg.getString(CONFIG_DRIVER, DEFAULT_DRIVER);
-    storeUrl = cfg.getString(CONFIG_URL, DEFAULT_URL);
-    localStorePath = Paths.get(cfg.getString(CONFIG_LOCAL_PATH,
-        defaultLocalPath));
-    urlOptions = concatenate(cfg.getStringList(CONFIG_URL_OPTIONS));
+    defaultUrl = "jdbc:h2:" + site.data_dir.toString() + "/db";
+    storeUrl = cfg.getString(CONFIG_URL, defaultUrl);
+    localStorePath = Paths.get(cfg.getString(CONFIG_LOCAL_PATH, defaultLocalPath));
+    urlOptions = Joiner.on(";").join(cfg.getStringList(CONFIG_URL_OPTIONS));
     storeUsername = cfg.getString(CONFIG_USERNAME);
     storePassword = cfg.getString(CONFIG_PASSWORD);
     evictIdleTime = cfg.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME);
   }
 
-  private String concatenate(String[] stringList) {
-    return Joiner.on(";").join(stringList);
-  }
-
   public int getMaxAge() {
     return maxAge;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogException.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogException.java
index 8227d22..70a8b74 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogException.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogException.java
@@ -19,8 +19,7 @@
   private static final long serialVersionUID = 1L;
 
   /**
-   * Constructs an <code>EventsLogException</code> object with a given
-   * <code>message</code>.
+   * Constructs an <code>EventsLogException</code> object with a given <code>message</code>.
    *
    * @param message a description of the exception
    */
@@ -29,12 +28,11 @@
   }
 
   /**
-   * Constructs an <code>EventsLogException</code> object with a given
-   * <code>message</code> and a given <code>cause</code>.
+   * Constructs an <code>EventsLogException</code> object with a given <code>message</code> and a
+   * given <code>cause</code>.
    *
    * @param message a description of the exception
-   * @param cause the underlying reason for this
-   *        <code>EventsLogException</code>
+   * @param cause the underlying reason for this <code>EventsLogException</code>
    */
   public EventsLogException(String message, Throwable cause) {
     super(message, cause);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
index 121e2d8..f05e33d 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServlet.java
@@ -19,24 +19,20 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.IOException;
 import java.io.Writer;
 import java.util.HashMap;
 import java.util.Map;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Singleton
 class EventsRestApiServlet extends HttpServlet {
-  private static final Logger log =
-      LoggerFactory.getLogger(EventsRestApiServlet.class);
+  private static final Logger log = LoggerFactory.getLogger(EventsRestApiServlet.class);
   private static final long serialVersionUID = 1L;
 
   private final EventStore store;
@@ -44,9 +40,8 @@
   private final Provider<CurrentUser> userProvider;
 
   @Inject
-  EventsRestApiServlet(EventStore store,
-      QueryMaker queryMaker,
-      Provider<CurrentUser> userProvider) {
+  EventsRestApiServlet(
+      EventStore store, QueryMaker queryMaker, Provider<CurrentUser> userProvider) {
     this.store = store;
     this.queryMaker = queryMaker;
     this.userProvider = userProvider;
@@ -60,13 +55,10 @@
       return;
     }
     rsp.setContentType("text/html");
-    Map<String, String> params =
-        req.getQueryString() != null ? getParameters(req) : null;
-    Writer out = rsp.getWriter();
+    Map<String, String> params = req.getQueryString() != null ? getParameters(req) : null;
 
-    String query = null;
-    try {
-      query = queryMaker.formQueryFromRequestParameters(params);
+    try (Writer out = rsp.getWriter()) {
+      String query = queryMaker.formQueryFromRequestParameters(params);
       for (String event : store.queryChangeEvents(query)) {
         out.write(event + "\n");
       }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/MalformedQueryException.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/MalformedQueryException.java
index 17caa1a..35f829d 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/MalformedQueryException.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/MalformedQueryException.java
@@ -20,20 +20,16 @@
   private static final String MESSAGE =
       "Query doesn't conform with the format required by the database";
 
-  /**
-   * Constructs a <code>MalformedQueryException</code> object with the default
-   * message.
-   */
+  /** Constructs a <code>MalformedQueryException</code> object with the default message. */
   public MalformedQueryException() {
     super(MESSAGE);
   }
 
   /**
-   * Constructs a <code>MalformedQueryException</code> object with the default
-   * message and a given <code>cause</code>.
+   * Constructs a <code>MalformedQueryException</code> object with the default message and a given
+   * <code>cause</code>.
    *
-   * @param cause the underlying reason for this
-   *        <code>MalformedQueryException</code>
+   * @param cause the underlying reason for this <code>MalformedQueryException</code>
    */
   public MalformedQueryException(Throwable cause) {
     super(MESSAGE, cause);
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/QueryMaker.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/QueryMaker.java
index bd55dbc..1969755 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/QueryMaker.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/QueryMaker.java
@@ -23,13 +23,11 @@
    * Forms a String query based on the given parameters.
    *
    * @param params parameters which are used to form the query
-   * @return a query based on the given parameters. The query should conform to
-   *         the format required by the database.
-   * @throws MalformedQueryException if the given parameters do conform to
-   *         requirements
+   * @return a query based on the given parameters. The query should conform to the format required
+   *     by the database.
+   * @throws MalformedQueryException if the given parameters do conform to requirements
    */
-  String formQueryFromRequestParameters(Map<String, String> params)
-      throws MalformedQueryException;
+  String formQueryFromRequestParameters(Map<String, String> params) throws MalformedQueryException;
 
   /**
    * Get the query designated as the default when no parameters are given.
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/ServiceUnavailableException.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/ServiceUnavailableException.java
index 57656e3..8689eb8 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/ServiceUnavailableException.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/ServiceUnavailableException.java
@@ -17,13 +17,9 @@
 /** An exception type for when the events database cannot be queried. */
 public class ServiceUnavailableException extends EventsLogException {
   private static final long serialVersionUID = 1L;
-  private static final String MESSAGE =
-      "Database server disconnected, cannot query events";
+  private static final String MESSAGE = "Database server disconnected, cannot query events";
 
-  /**
-   * Constructs a <code>ServiceUnavailableException</code> object with the
-   * default message.
-   */
+  /** Constructs a <code>ServiceUnavailableException</code> object with the default message. */
   public ServiceUnavailableException() {
     super(MESSAGE);
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java
index cf6d2d9..0016fde 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/EventsDb.java
@@ -17,13 +17,9 @@
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 import com.google.inject.BindingAnnotation;
-
 import java.lang.annotation.Retention;
 
-/**
- * Annotation applied to the SQLClient connected to the main database
- */
+/** Annotation applied to the SQLClient connected to the main database */
 @Retention(RUNTIME)
 @BindingAnnotation
-public @interface EventsDb {
-}
+public @interface EventsDb {}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java
index 0590d6e..654d9e8 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/LocalEventsDb.java
@@ -17,13 +17,9 @@
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 import com.google.inject.BindingAnnotation;
-
 import java.lang.annotation.Retention;
 
-/**
- * Annotation applied to the SQLClient connected to the local database
- */
+/** Annotation applied to the SQLClient connected to the local database */
 @Retention(RUNTIME)
 @BindingAnnotation
-@interface LocalEventsDb {
-}
+@interface LocalEventsDb {}
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
index 9242ab3..97f9dad 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
@@ -24,22 +24,16 @@
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.SECONDS;
 
+import com.ericsson.gerrit.plugins.eventslog.EventsLogException;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.gerrit.server.events.ProjectEvent;
+import com.google.gerrit.server.events.SupplierSerializer;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.inject.Inject;
-import com.google.gerrit.server.events.SupplierSerializer;
-
-import com.ericsson.gerrit.plugins.eventslog.EventsLogException;
-import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
-
-import org.apache.commons.dbcp.BasicDataSource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -47,6 +41,9 @@
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.commons.dbcp.BasicDataSource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class SQLClient {
   private static final Logger log = LoggerFactory.getLogger(SQLClient.class);
@@ -59,8 +56,7 @@
     ds.setDriverClassName(storeDriver);
     ds.setUrl(storeUrl);
     ds.setConnectionProperties(urlOptions);
-    gson = new GsonBuilder()
-        .registerTypeAdapter(Supplier.class, new SupplierSerializer()).create();
+    gson = new GsonBuilder().registerTypeAdapter(Supplier.class, new SupplierSerializer()).create();
   }
 
   /**
@@ -82,8 +78,7 @@
   }
 
   /**
-   * Set the time before an idle connection is evicted as well as the
-   * time between eviction runs.
+   * Set the time before an idle connection is evicted as well as the time between eviction runs.
    *
    * @param evictIdleTime the time in milliseconds before eviction
    */
@@ -110,8 +105,7 @@
    */
   boolean dbExists() throws SQLException {
     try (Connection conn = ds.getConnection();
-        ResultSet tables =
-            conn.getMetaData().getTables(null, null, TABLE_NAME, null)) {
+        ResultSet tables = conn.getMetaData().getTables(null, null, TABLE_NAME, null)) {
       return tables.next();
     }
   }
@@ -125,15 +119,14 @@
   }
 
   /**
-   * Get events as a multimap list of Strings and SQLEntries. The String
-   * represents the project name, and the SQLEntry is the event information.
+   * Get events as a multimap list of Strings and SQLEntries. The String represents the project
+   * name, and the SQLEntry is the event information.
    *
    * @param query the query as a string
    * @return Multimap list of Strings (project names) and SQLEntries (events)
    * @throws EventsLogException If there was a problem with the database
    */
-  ListMultimap<String, SQLEntry> getEvents(String query)
-      throws EventsLogException {
+  ListMultimap<String, SQLEntry> getEvents(String query) throws EventsLogException {
     try (Connection conn = ds.getConnection();
         Statement stat = conn.createStatement()) {
       return listEvents(stat, query);
@@ -149,7 +142,8 @@
    * @throws SQLException If there was a problem with the database
    */
   void storeEvent(ProjectEvent event) throws SQLException {
-    storeEvent(event.getProjectNameKey().get(),
+    storeEvent(
+        event.getProjectNameKey().get(),
         new Timestamp(SECONDS.toMillis(event.eventCreatedOn)),
         gson.toJson(event));
   }
@@ -162,11 +156,10 @@
    * @param event The event as a string
    * @throws SQLException If there was a problem with the database
    */
-  void storeEvent(String projectName, Timestamp timestamp, String event)
-      throws SQLException {
-    execute(format("INSERT INTO %s(%s, %s, %s) ", TABLE_NAME, PROJECT_ENTRY,
-        DATE_ENTRY, EVENT_ENTRY)
-        + format("VALUES('%s', '%s', '%s')", projectName, timestamp, event));
+  void storeEvent(String projectName, Timestamp timestamp, String event) throws SQLException {
+    execute(
+        format("INSERT INTO %s(%s, %s, %s) ", TABLE_NAME, PROJECT_ENTRY, DATE_ENTRY, EVENT_ENTRY)
+            + format("VALUES('%s', '%s', '%s')", projectName, timestamp, event));
   }
 
   /**
@@ -176,12 +169,12 @@
    */
   void removeOldEvents(int maxAge) {
     try {
-      execute(format(
-          "DELETE FROM %s WHERE %s < '%s'",
-          TABLE_NAME,
-          DATE_ENTRY,
-          new Timestamp(System.currentTimeMillis()
-              - MILLISECONDS.convert(maxAge, DAYS))));
+      execute(
+          format(
+              "DELETE FROM %s WHERE %s < '%s'",
+              TABLE_NAME,
+              DATE_ENTRY,
+              new Timestamp(System.currentTimeMillis() - MILLISECONDS.convert(maxAge, DAYS))));
     } catch (SQLException e) {
       log.warn("Cannot remove old event entries from database", e);
     }
@@ -194,17 +187,15 @@
    */
   void removeProjectEvents(String project) {
     try {
-      execute(
-          format("DELETE FROM %s WHERE project = '%s'", TABLE_NAME, project));
+      execute(format("DELETE FROM %s WHERE project = '%s'", TABLE_NAME, project));
     } catch (SQLException e) {
-      log.warn(
-          "Cannot remove project " + project + " events from database", e);
+      log.warn("Cannot remove project " + project + " events from database", e);
     }
   }
 
   /**
-   * Do a simple query on the database. This is used to determine whether or
-   * not the main database is online.
+   * Do a simple query on the database. This is used to determine whether or not the main database
+   * is online.
    *
    * @throws SQLException If there was a problem with the database
    */
@@ -224,9 +215,12 @@
         Statement stat = conn.createStatement();
         ResultSet rs = stat.executeQuery("SELECT * FROM " + TABLE_NAME)) {
       while (rs.next()) {
-        entries.add(new SQLEntry(rs.getString(PROJECT_ENTRY), rs
-            .getTimestamp(DATE_ENTRY), rs.getString(EVENT_ENTRY), rs
-            .getInt(PRIMARY_ENTRY)));
+        entries.add(
+            new SQLEntry(
+                rs.getString(PROJECT_ENTRY),
+                rs.getTimestamp(DATE_ENTRY),
+                rs.getString(EVENT_ENTRY),
+                rs.getInt(PRIMARY_ENTRY)));
       }
       return entries;
     }
@@ -238,8 +232,10 @@
       ListMultimap<String, SQLEntry> result = ArrayListMultimap.create();
       while (rs.next()) {
         SQLEntry entry =
-            new SQLEntry(rs.getString(PROJECT_ENTRY),
-                rs.getTimestamp(DATE_ENTRY), rs.getString(EVENT_ENTRY),
+            new SQLEntry(
+                rs.getString(PROJECT_ENTRY),
+                rs.getTimestamp(DATE_ENTRY),
+                rs.getString(EVENT_ENTRY),
                 rs.getInt(PRIMARY_ENTRY));
         result.put(rs.getString(PROJECT_ENTRY), entry);
       }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java
index 32572e3..a75335b 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java
@@ -14,17 +14,16 @@
 
 package com.ericsson.gerrit.plugins.eventslog.sql;
 
+import com.ericsson.gerrit.plugins.eventslog.EventModule;
+import com.ericsson.gerrit.plugins.eventslog.EventStore;
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
 import com.google.inject.internal.UniqueAnnotations;
 
-import com.ericsson.gerrit.plugins.eventslog.EventModule;
-import com.ericsson.gerrit.plugins.eventslog.EventStore;
-import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
-import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
-
 class SQLModule extends AbstractModule {
 
   private static final String H2_DB_PREFIX = "jdbc:h2:";
@@ -33,8 +32,7 @@
   protected void configure() {
     install(new EventModule());
     bind(EventStore.class).to(SQLStore.class);
-    bind(LifecycleListener.class).annotatedWith(UniqueAnnotations.create()).to(
-        SQLStore.class);
+    bind(LifecycleListener.class).annotatedWith(UniqueAnnotations.create()).to(SQLStore.class);
     bind(QueryMaker.class).to(SQLQueryMaker.class);
   }
 
@@ -42,8 +40,8 @@
   @Singleton
   @EventsDb
   SQLClient provideSqlClient(EventsLogConfig cfg) {
-    SQLClient sqlClient = new SQLClient(cfg.getStoreDriver(), cfg.getStoreUrl(),
-        cfg.getUrlOptions());
+    SQLClient sqlClient =
+        new SQLClient(cfg.getStoreDriver(), cfg.getStoreUrl(), cfg.getUrlOptions());
     sqlClient.setUsername(cfg.getStoreUsername());
     sqlClient.setPassword(cfg.getStorePassword());
     sqlClient.setEvictIdleTime(cfg.getEvictIdleTime());
@@ -56,8 +54,11 @@
   SQLClient provideLocalSqlClient(EventsLogConfig cfg) {
     String path = cfg.getLocalStorePath().toString();
     path = path.endsWith("/") ? path : path + "/";
-    SQLClient sqlClient = new SQLClient(cfg.getLocalStoreDriver(),
-        H2_DB_PREFIX + path + SQLTable.TABLE_NAME, cfg.getUrlOptions());
+    SQLClient sqlClient =
+        new SQLClient(
+            cfg.getLocalStoreDriver(),
+            H2_DB_PREFIX + path + SQLTable.TABLE_NAME,
+            cfg.getUrlOptions());
     sqlClient.setEvictIdleTime(cfg.getEvictIdleTime());
     return sqlClient;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
index 8ad81be..53e406c 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLQueryMaker.java
@@ -18,18 +18,15 @@
 import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.PRIMARY_ENTRY;
 import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
 
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
 import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
 import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
 import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.Map;
 
 @Singleton
@@ -37,20 +34,10 @@
   private static final int TWO = 2;
   private static final String TIME_ONE = "t1";
   private static final String TIME_TWO = "t2";
-  private static final ThreadLocal<DateFormat> DATE_TIME_FORMAT =
-      new ThreadLocal<DateFormat>() {
-        @Override
-        protected DateFormat initialValue() {
-          return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        }
-      };
-  private static final ThreadLocal<DateFormat> DATE_ONLY_FORMAT =
-      new ThreadLocal<DateFormat>() {
-        @Override
-        protected DateFormat initialValue() {
-          return new SimpleDateFormat("yyyy-MM-dd");
-        }
-      };
+  private static final DateTimeFormatter DATE_TIME_FORMAT =
+      DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+  private static final DateTimeFormatter DATE_ONLY_FORMAT =
+      DateTimeFormatter.ofPattern("yyyy-MM-dd");
 
   private final int returnLimit;
 
@@ -65,46 +52,52 @@
     if (params == null) {
       return getDefaultQuery();
     }
-    Date[] dates;
+    String[] dates;
     try {
       dates = parseDates(params.get(TIME_ONE), params.get(TIME_TWO));
-    } catch (ParseException e) {
+    } catch (DateTimeParseException e) {
       throw new MalformedQueryException(e);
     }
     return String.format(
-        "SELECT * FROM %s WHERE %s BETWEEN '%s' and '%s' LIMIT %d", TABLE_NAME,
-        DATE_ENTRY, DATE_TIME_FORMAT.get().format(dates[0]),
-        DATE_TIME_FORMAT.get().format(dates[1]), returnLimit);
+        "SELECT * FROM %s WHERE %s BETWEEN '%s' and '%s' LIMIT %d",
+        TABLE_NAME, DATE_ENTRY, dates[0], dates[1], returnLimit);
   }
 
   @Override
   public String getDefaultQuery() {
-    return "SELECT * FROM(SELECT * FROM " + TABLE_NAME
-        + " ORDER BY " + PRIMARY_ENTRY + " DESC LIMIT " + returnLimit + ")"
-        + " a ORDER BY " + PRIMARY_ENTRY + " ASC";
+    return "SELECT * FROM(SELECT * FROM "
+        + TABLE_NAME
+        + " ORDER BY "
+        + PRIMARY_ENTRY
+        + " DESC LIMIT "
+        + returnLimit
+        + ")"
+        + " a ORDER BY "
+        + PRIMARY_ENTRY
+        + " ASC";
   }
 
-  private Date[] parseDates(String dateOne, String dateTwo)
-      throws MalformedQueryException, ParseException {
+  private String[] parseDates(String dateOne, String dateTwo)
+      throws MalformedQueryException, DateTimeParseException {
     if (dateOne == null && dateTwo == null) {
       throw new MalformedQueryException();
     }
-    Calendar cal = Calendar.getInstance();
-    Date dOne = dateOne == null ? cal.getTime() : parseDate(dateOne);
-    Date dTwo = dateTwo == null ? cal.getTime() : parseDate(dateTwo);
-    Date[] dates = new Date[TWO];
+    LocalDateTime dOne = dateOne == null ? LocalDateTime.now() : parseDate(dateOne);
+    LocalDateTime dTwo = dateTwo == null ? LocalDateTime.now() : parseDate(dateTwo);
+    LocalDateTime[] dates = new LocalDateTime[TWO];
 
-    dates[0] = dOne.compareTo(dTwo) < 0 ? dOne : dTwo;
-    dates[1] = dOne.compareTo(dTwo) < 0 ? dTwo : dOne;
-    return dates;
+    dates[0] = dOne.isBefore(dTwo) ? dOne : dTwo;
+    dates[1] = dOne.isBefore(dTwo) ? dTwo : dOne;
+    return new String[] {DATE_TIME_FORMAT.format(dates[0]), DATE_TIME_FORMAT.format(dates[1])};
   }
 
-  private Date parseDate(String date) throws ParseException {
-    Date parsedDate;
+  private LocalDateTime parseDate(String date) throws DateTimeParseException {
+    LocalDateTime parsedDate;
     try {
-      parsedDate = DATE_TIME_FORMAT.get().parse(date);
-    } catch (ParseException e) {
-      parsedDate = DATE_ONLY_FORMAT.get().parse(date);
+      parsedDate = LocalDateTime.parse(date, DATE_TIME_FORMAT);
+    } catch (DateTimeParseException e) {
+      LocalDate localDate = LocalDate.parse(date, DATE_ONLY_FORMAT);
+      parsedDate = localDate.atStartOfDay();
     }
     return parsedDate;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
index b7beda8..d9445b5 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStore.java
@@ -16,6 +16,11 @@
 
 import static com.ericsson.gerrit.plugins.eventslog.sql.SQLTable.TABLE_NAME;
 
+import com.ericsson.gerrit.plugins.eventslog.EventPool;
+import com.ericsson.gerrit.plugins.eventslog.EventStore;
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.EventsLogException;
+import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
 import com.google.common.io.Files;
 import com.google.gerrit.common.TimeUtil;
 import com.google.gerrit.extensions.events.LifecycleListener;
@@ -27,16 +32,6 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-
-import com.ericsson.gerrit.plugins.eventslog.EventPool;
-import com.ericsson.gerrit.plugins.eventslog.EventStore;
-import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
-import com.ericsson.gerrit.plugins.eventslog.EventsLogException;
-import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.ConnectException;
@@ -50,6 +45,8 @@
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Singleton
 class SQLStore implements EventStore, LifecycleListener {
@@ -71,7 +68,8 @@
   private Path localPath;
 
   @Inject
-  SQLStore(ProjectControl.GenericFactory projectControlFactory,
+  SQLStore(
+      ProjectControl.GenericFactory projectControlFactory,
       Provider<CurrentUser> userProvider,
       EventsLogConfig cfg,
       @EventsDb SQLClient eventsDb,
@@ -103,9 +101,8 @@
   }
 
   /**
-   * {@inheritDoc}
-   * The events returned are restricted to the projects which are visible to
-   * the user.
+   * {@inheritDoc} The events returned are restricted to the projects which are visible to the user.
+   *
    * @throws ServiceUnavailableException if working in offline mode
    */
   @Override
@@ -115,21 +112,22 @@
     }
     List<SQLEntry> entries = new ArrayList<>();
 
-    for (Entry<String, Collection<SQLEntry>> entry
-        : eventsDb.getEvents(query).asMap().entrySet()) {
+    for (Entry<String, Collection<SQLEntry>> entry : eventsDb.getEvents(query).asMap().entrySet()) {
       String projectName = entry.getKey();
       try {
-        if (projectControlFactory.controlFor(new Project.NameKey(projectName),
-            userProvider.get()).isVisible()) {
+        if (projectControlFactory
+            .controlFor(new Project.NameKey(projectName), userProvider.get())
+            .isVisible()) {
           entries.addAll(entry.getValue());
         }
       } catch (NoSuchProjectException e) {
-        log.warn("Database contains a non-existing project, " + projectName
-            + ", removing project from database");
+        log.warn(
+            "Database contains a non-existing project, "
+                + projectName
+                + ", removing project from database");
         eventsDb.removeProjectEvents(projectName);
       } catch (IOException e) {
-        log.warn("Cannot get project visibility info for " + projectName
-            + " from cache", e);
+        log.warn("Cannot get project visibility info for " + projectName + " from cache", e);
       }
     }
     return sortedEventsFromEntries(entries);
@@ -145,10 +143,9 @@
   }
 
   /**
-   * {@inheritDoc}
-   * If storing the event fails due to a connection problem, storage will be
-   * re-attempted as specified in gerrit.config. After failing the maximum
-   * amount of times, the event will be stored in a local h2 database.
+   * {@inheritDoc} If storing the event fails due to a connection problem, storage will be
+   * re-attempted as specified in gerrit.config. After failing the maximum amount of times, the
+   * event will be stored in a local h2 database.
    */
   @Override
   public void storeEvent(ProjectEvent event) {
@@ -170,8 +167,7 @@
           try {
             retryIfAllowed(failedConnections);
           } catch (InterruptedException e1) {
-            log.warn("Cannot store ChangeEvent for: " + projectName.get()
-                + ": Interrupted");
+            log.warn("Cannot store ChangeEvent for: " + projectName.get() + ": Interrupted");
             Thread.currentThread().interrupt();
             return;
           }
@@ -181,8 +177,7 @@
     }
   }
 
-  private void retryIfAllowed(int failedConnections)
-      throws InterruptedException {
+  private void retryIfAllowed(int failedConnections) throws InterruptedException {
     if (failedConnections < maxTries - 1) {
       log.info("Retrying store event");
       Thread.sleep(waitTime);
@@ -196,8 +191,10 @@
     try {
       getEventsDb().createDBIfNotCreated();
     } catch (SQLException e) {
-      log.warn("Cannot start the database. Events will be stored locally"
-          + " until database connection can be established", e);
+      log.warn(
+          "Cannot start the database. Events will be stored locally"
+              + " until database connection can be established",
+          e);
       setOnline(false);
     }
     if (online) {
@@ -214,8 +211,9 @@
     this.online = online;
     setUp();
     if (!online) {
-      checkConnTask = pool.scheduleWithFixedDelay(
-          new CheckConnectionTask(), 0, connectTime, TimeUnit.MILLISECONDS);
+      checkConnTask =
+          pool.scheduleWithFixedDelay(
+              new CheckConnectionTask(), 0, connectTime, TimeUnit.MILLISECONDS);
     } else {
       cancelCheckConnectionTaskIfScheduled(false);
     }
@@ -249,16 +247,14 @@
 
   private void restoreEvent(SQLEntry entry) {
     try {
-      eventsDb.storeEvent(entry.getName(), entry.getTimestamp(),
-          entry.getEvent());
+      eventsDb.storeEvent(entry.getName(), entry.getTimestamp(), entry.getEvent());
     } catch (SQLException e) {
       log.warn("Could not restore events from local", e);
     }
   }
 
   class CheckConnectionTask implements Runnable {
-    CheckConnectionTask() {
-    }
+    CheckConnectionTask() {}
 
     @Override
     public void run() {
@@ -290,9 +286,7 @@
     try {
       exists = localEventsDb.dbExists();
     } catch (SQLException e) {
-      log.warn(
-          "Could not check existence of local database, assume that it doesn't exist",
-          e);
+      log.warn("Could not check existence of local database, assume that it doesn't exist", e);
     }
     return exists;
   }
@@ -302,9 +296,11 @@
       return;
     }
     File file = localPath.resolve(TABLE_NAME + H2_DB_SUFFIX).toFile();
-    File copyFile = localPath.resolve(TABLE_NAME
-        + (TimeUnit.MILLISECONDS.toSeconds(TimeUtil.nowMs()))
-        + H2_DB_SUFFIX).toFile();
+    File copyFile =
+        localPath
+            .resolve(
+                TABLE_NAME + (TimeUnit.MILLISECONDS.toSeconds(TimeUtil.nowMs())) + H2_DB_SUFFIX)
+            .toFile();
     try {
       Files.copy(file, copyFile);
     } catch (IOException e) {
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java
index 8102b1b..f25b618 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLTable.java
@@ -23,8 +23,7 @@
   static final String DATE_ENTRY = "date_created";
   static final String EVENT_ENTRY = "event_info";
 
-  private SQLTable() {
-  }
+  private SQLTable() {}
 
   static String createTableQuery(boolean postgresql) {
     StringBuilder query = new StringBuilder();
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index 3756aa6..41a69ca 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -1,82 +1,75 @@
 Build
 =====
 
-This plugin is built with Buck.
+This plugin is built with Bazel. Two build modes are supported:
+ * Standalone
+ * In Gerrit tree.
 
-Buck
-----
+Standalone build mode is recommended, as this mode doesn't require local Gerrit
+tree to exist. Moreover, there are some limitations and additional manual steps
+required when building in Gerrit tree mode (see corresponding sections).
 
-Two build modes are supported: Standalone and in Gerrit tree.
-The standalone build mode is recommended, as this mode doesn't require
-the Gerrit tree to exist locally.
+## Build standalone
 
-
-### Build standalone
-
-Clone bucklets library:
-
-```
-  git clone https://gerrit.googlesource.com/bucklets
-
-```
-and link it to events-log plugin directory:
-
-```
-  cd events-log && ln -s ../bucklets .
-```
-
-Add link to the .buckversion file:
-
-```
-  cd events-log && ln -s bucklets/buckversion .buckversion
-```
-
-Add link to the .watchmanconfig file:
-
-```
-  cd events-log && ln -s bucklets/watchmanconfig .watchmanconfig
-```
+### Bazel
 
 To build the plugin, issue the following command:
 
 ```
-  buck build plugin
+  bazel build @PLUGIN@
 ```
 
 The output is created in
 
 ```
-  buck-out/gen/events-log.jar
-```
-
-This project can be imported into the Eclipse IDE:
-
-```
-  ./bucklets/tools/eclipse.py
+  bazel-genfiles/@PLUGIN@.jar
 ```
 
 To execute the tests run:
 
 ```
-  buck test
+  bazel test //...
 ```
 
-### Build in Gerrit tree
-
-Clone or link this plugin to the plugins directory of Gerrit's source
-tree, and issue the command:
+This project can be imported into the Eclipse IDE:
 
 ```
-  buck build plugins/events-log
+  ./tools/eclipse/project.sh
 ```
 
+## Build in Gerrit tree
+
+### Bazel
+
+Clone (or link) this plugin to the `plugins` directory of Gerrit's source tree.
+
+Put the external dependency Bazel build file into the Gerrit /plugins directory,
+replacing the existing empty one.
+
+```
+  cd gerrit/plugins
+  rm external_plugin_deps.bzl
+  ln -s @PLUGIN@/external_plugin_deps.bzl .
+```
+
+Then issue
+
+```
+  bazel build plugins/@PLUGIN@
+```
+
+in the root of Gerrit's source tree to build
+
 The output is created in
 
 ```
-  buck-out/gen/plugins/events-log/events-log.jar
+  bazel-genfiles/plugins/@PLUGIN@/@PLUGIN@.jar
 ```
 
-This project can be imported into the Eclipse IDE:
+This project can be imported into the Eclipse IDE.
+Add the plugin name to the `CUSTOM_PLUGINS` and to the
+`CUSTOM_PLUGINS_TEST_DEPS` set in Gerrit core in
+`tools/bzl/plugins.bzl`, and execute:
 
 ```
   ./tools/eclipse/project.py
@@ -85,8 +78,8 @@
 To execute the tests run:
 
 ```
-  buck test --include events-log
+  bazel test plugins/@PLUGIN@:events_log_tests
 ```
 
 More information about Buck can be found in the [Gerrit
-documentation](../../../Documentation/dev-buck.html).
+documentation](../../../Documentation/dev-bazel.html).
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 749c600..4e29811 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -8,7 +8,7 @@
   [plugin "@PLUGIN@"]
     maxAge = 20
     returnLimit = 10000
-    storeUrl = jdbc:h2:~/gerrit/db/
+    storeUrl = jdbc:h2:<gerrit_site>/data/db
     urlOptions = loglevel=INFO
     urlOptions = logUnclosedConnections=true
     copyLocal = true
@@ -29,11 +29,11 @@
 
 plugin.@PLUGIN@.storeUrl
 :    Specify the path to the directory in which to keep the database. When not
-     specified, the default path is jdbc:h2:~/db/.
+     specified, the default path is jdbc:h2:\<gerrit_site>/data/db.
 
 plugin.@PLUGIN@.localStorePath
 :    Specify the path to the directory in which to keep the back up database.
-     When not specified, the default path is <gerrit_site>/events-db/.
+     When not specified, the default path is \<gerrit_site>/events-db/.
 
 plugin.@PLUGIN@.storeUsername
 :    Username to connect to the database, not defined by default. This value can
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
index b6c773b..f3eb207 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventHandlerTest.java
@@ -21,19 +21,16 @@
 
 import com.google.gerrit.server.events.ChangeEvent;
 import com.google.gerrit.server.events.Event;
-
+import java.util.concurrent.ScheduledThreadPoolExecutor;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-
 @RunWith(MockitoJUnitRunner.class)
 public class EventHandlerTest {
-  @Mock
-  private EventStore storeMock;
+  @Mock private EventStore storeMock;
   private EventHandler eventHandler;
 
   @Before
@@ -60,6 +57,7 @@
     PoolMock() {
       super(1);
     }
+
     @Override
     public void execute(Runnable command) {
       assertThat(command.toString()).isEqualTo("(Events-log) Insert Event");
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
index f4cd273..0d19579 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
@@ -34,7 +34,6 @@
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_MAX_AGE;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_MAX_TRIES;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_RETURN_LIMIT;
-import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_URL;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_WAIT_TIME;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.when;
@@ -43,7 +42,8 @@
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.gerrit.server.config.SitePaths;
-
+import java.io.IOException;
+import java.nio.file.Files;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -52,9 +52,6 @@
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.io.IOException;
-import java.nio.file.Files;
-
 @RunWith(MockitoJUnitRunner.class)
 public class EventsLogConfigTest {
   private static final String PLUGIN_NAME = "eventsLog";
@@ -63,46 +60,38 @@
   private SitePaths site;
   private EventsLogConfig config;
   private String defaultLocalStorePath;
+  private String defaultUrl;
   private String localStorePath;
   private String[] urlOptions = new String[] {"DB_CLOSE_DELAY=10"};
 
-  @Mock
-  private PluginConfigFactory cfgFactoryMock;
-  @Mock
-  private PluginConfig configMock;
+  @Mock private PluginConfigFactory cfgFactoryMock;
+  @Mock private PluginConfig configMock;
 
-  @Rule
-  public TemporaryFolder gerrit_site = new TemporaryFolder();
+  @Rule public TemporaryFolder gerrit_site = new TemporaryFolder();
 
   @Before
   public void setUp() throws IOException {
     site = new SitePaths(gerrit_site.getRoot().toPath());
     Files.createDirectories(site.etc_dir);
     defaultLocalStorePath = site.site_path.toString() + "/events-db/";
-    when(cfgFactoryMock.getFromGerritConfig(PLUGIN_NAME, true))
-        .thenReturn(configMock);
+    defaultUrl = "jdbc:h2:" + site.data_dir.toString() + "/db";
+    when(cfgFactoryMock.getFromGerritConfig(PLUGIN_NAME, true)).thenReturn(configMock);
   }
 
   private void setUpDefaults() {
     when(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL))
         .thenReturn(DEFAULT_COPY_LOCAL);
-    when(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE))
-        .thenReturn(DEFAULT_MAX_AGE);
-    when(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES))
-        .thenReturn(DEFAULT_MAX_TRIES);
+    when(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE)).thenReturn(DEFAULT_MAX_AGE);
+    when(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES)).thenReturn(DEFAULT_MAX_TRIES);
     when(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT))
         .thenReturn(DEFAULT_RETURN_LIMIT);
-    when(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME))
-        .thenReturn(DEFAULT_CONN_TIME);
-    when(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME))
-        .thenReturn(DEFAULT_WAIT_TIME);
-    when(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER))
-        .thenReturn(DEFAULT_DRIVER);
-    when(configMock.getString(CONFIG_URL, DEFAULT_URL)).thenReturn(DEFAULT_URL);
+    when(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME)).thenReturn(DEFAULT_CONN_TIME);
+    when(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME)).thenReturn(DEFAULT_WAIT_TIME);
+    when(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER)).thenReturn(DEFAULT_DRIVER);
+    when(configMock.getString(CONFIG_URL, defaultUrl)).thenReturn(defaultUrl);
     when(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath))
         .thenReturn(defaultLocalStorePath);
-    when(configMock.getStringList(CONFIG_URL_OPTIONS))
-        .thenReturn(new String[] {});
+    when(configMock.getStringList(CONFIG_URL_OPTIONS)).thenReturn(new String[] {});
     when(configMock.getString(CONFIG_USERNAME)).thenReturn(null);
     when(configMock.getString(CONFIG_PASSWORD)).thenReturn(null);
     when(configMock.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME))
@@ -111,28 +100,20 @@
 
   private void setUpCustom() {
     localStorePath = "~/gerrit/events-db/";
-    when(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL))
-        .thenReturn(true);
+    when(configMock.getBoolean(CONFIG_COPY_LOCAL, DEFAULT_COPY_LOCAL)).thenReturn(true);
     when(configMock.getInt(CONFIG_MAX_AGE, DEFAULT_MAX_AGE)).thenReturn(20);
     when(configMock.getInt(CONFIG_MAX_TRIES, DEFAULT_MAX_TRIES)).thenReturn(5);
-    when(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT))
-        .thenReturn(10000);
-    when(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME))
-        .thenReturn(5000);
-    when(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME))
-        .thenReturn(5000);
-    when(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER))
-        .thenReturn("org.h2.Driver2");
-    when(configMock.getString(CONFIG_URL, DEFAULT_URL))
-        .thenReturn("jdbc:h2:~/gerrit/db");
-    when(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath))
-        .thenReturn(localStorePath);
+    when(configMock.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT)).thenReturn(10000);
+    when(configMock.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME)).thenReturn(5000);
+    when(configMock.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME)).thenReturn(5000);
+    when(configMock.getString(CONFIG_DRIVER, DEFAULT_DRIVER)).thenReturn("org.h2.Driver2");
+    when(configMock.getString(CONFIG_URL, defaultUrl)).thenReturn("jdbc:h2:~/gerrit/db");
+    when(configMock.getString(CONFIG_LOCAL_PATH, defaultLocalStorePath)).thenReturn(localStorePath);
     when(configMock.getStringList(CONFIG_URL_OPTIONS)).thenReturn(urlOptions);
     when(configMock.getString(CONFIG_USERNAME)).thenReturn("testUsername");
     when(configMock.getString(CONFIG_PASSWORD)).thenReturn("testPassword");
     when(configMock.getInt(CONFIG_EVICT_IDLE_TIME, DEFAULT_EVICT_IDLE_TIME))
         .thenReturn(CUSTOM_EVICT_IDLE_TIME);
-
   }
 
   @Test
@@ -146,10 +127,9 @@
     assertThat(config.getConnectTime()).isEqualTo(1000);
     assertThat(config.getWaitTime()).isEqualTo(1000);
     assertThat(config.getLocalStoreDriver()).isEqualTo(DEFAULT_DRIVER);
-    assertThat(config.getLocalStorePath().toString() + "/")
-        .isEqualTo(defaultLocalStorePath);
+    assertThat(config.getLocalStorePath().toString() + "/").isEqualTo(defaultLocalStorePath);
     assertThat(config.getStoreDriver()).isEqualTo(DEFAULT_DRIVER);
-    assertThat(config.getStoreUrl()).isEqualTo(DEFAULT_URL);
+    assertThat(config.getStoreUrl()).isEqualTo(defaultUrl);
     assertThat(config.getUrlOptions()).isEmpty();
     assertThat(config.getStoreUsername()).isNull();
     assertThat(config.getStorePassword()).isNull();
@@ -167,12 +147,10 @@
     assertThat(config.getConnectTime()).isEqualTo(5000);
     assertThat(config.getWaitTime()).isEqualTo(5000);
     assertThat(config.getLocalStoreDriver()).isEqualTo(DEFAULT_DRIVER);
-    assertThat(config.getLocalStorePath().toString() + "/")
-        .isEqualTo(localStorePath);
+    assertThat(config.getLocalStorePath().toString() + "/").isEqualTo(localStorePath);
     assertThat(config.getStoreDriver()).isEqualTo("org.h2.Driver2");
     assertThat(config.getStoreUrl()).isEqualTo("jdbc:h2:~/gerrit/db");
-    assertThat(config.getUrlOptions())
-        .isEqualTo(Joiner.on(";").join(urlOptions));
+    assertThat(config.getUrlOptions()).isEqualTo(Joiner.on(";").join(urlOptions));
     assertThat(config.getStoreUsername()).isEqualTo("testUsername");
     assertThat(config.getStorePassword()).isEqualTo("testPassword");
     assertThat(config.getEvictIdleTime()).isEqualTo(CUSTOM_EVICT_IDLE_TIME);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java
index cfb1cce..d87832a 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogIT.java
@@ -17,11 +17,16 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.gerrit.acceptance.GerritConfig;
-import com.google.gerrit.acceptance.PluginDaemonTest;
-
+import com.google.gerrit.acceptance.LightweightPluginDaemonTest;
+import com.google.gerrit.acceptance.TestPlugin;
 import org.junit.Test;
 
-public class EventsLogIT extends PluginDaemonTest {
+@TestPlugin(
+  name = "events-log",
+  sysModule = "com.ericsson.gerrit.plugins.eventslog.sql.SQLModule",
+  httpModule = "com.ericsson.gerrit.plugins.eventslog.HttpModule"
+)
+public class EventsLogIT extends LightweightPluginDaemonTest {
 
   @Test
   @GerritConfig(name = "plugin.events-log.storeUrl", value = "jdbc:h2:mem:db")
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java
index bcccd07..917d9d8 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsRestApiServletTest.java
@@ -23,7 +23,12 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.gerrit.server.CurrentUser;
 import com.google.inject.Provider;
-
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -32,39 +37,23 @@
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 @RunWith(MockitoJUnitRunner.class)
 public class EventsRestApiServletTest {
   private static final String RANDOM_QUERY = "random query";
 
-  @Mock
-  private EventStore storeMock;
-  @Mock
-  private QueryMaker queryMakerMock;
-  @Mock
-  private Provider<CurrentUser> userProviderMock;
-  @Mock
-  private CurrentUser userMock;
-  @Mock
-  private HttpServletRequest reqMock;
-  @Mock
-  private HttpServletResponse rspMock;
-  @Captor
-  private ArgumentCaptor<Map<String, String>> captor;
+  @Mock private EventStore storeMock;
+  @Mock private QueryMaker queryMakerMock;
+  @Mock private Provider<CurrentUser> userProviderMock;
+  @Mock private CurrentUser userMock;
+  @Mock private HttpServletRequest reqMock;
+  @Mock private HttpServletResponse rspMock;
+  @Captor private ArgumentCaptor<Map<String, String>> captor;
 
   private EventsRestApiServlet eventServlet;
 
   @Before
   public void setUp() {
-    eventServlet =
-        new EventsRestApiServlet(storeMock, queryMakerMock, userProviderMock);
+    eventServlet = new EventsRestApiServlet(storeMock, queryMakerMock, userProviderMock);
 
     when(userProviderMock.get()).thenReturn(userMock);
     when(userMock.isIdentifiedUser()).thenReturn(true);
@@ -73,22 +62,17 @@
   @Test
   public void queryStringSplitting() throws Exception {
     when(reqMock.getQueryString()).thenReturn("a=1;b=2");
-    when(queryMakerMock.formQueryFromRequestParameters(captor.capture()))
-        .thenReturn(RANDOM_QUERY);
-    when(storeMock.queryChangeEvents(RANDOM_QUERY))
-        .thenReturn(new ArrayList<String>());
+    when(queryMakerMock.formQueryFromRequestParameters(captor.capture())).thenReturn(RANDOM_QUERY);
+    when(storeMock.queryChangeEvents(RANDOM_QUERY)).thenReturn(new ArrayList<>());
     eventServlet.doGet(reqMock, rspMock);
-    assertThat(ImmutableMap.of("a", "1", "b", "2"))
-        .isEqualTo(captor.getValue());
+    assertThat(ImmutableMap.of("a", "1", "b", "2")).isEqualTo(captor.getValue());
   }
 
   @Test
   public void badQueryString() throws Exception {
     when(reqMock.getQueryString()).thenReturn("a;b");
-    when(queryMakerMock.formQueryFromRequestParameters(captor.capture()))
-        .thenReturn(RANDOM_QUERY);
-    when(storeMock.queryChangeEvents(RANDOM_QUERY))
-        .thenReturn(new ArrayList<String>());
+    when(queryMakerMock.formQueryFromRequestParameters(captor.capture())).thenReturn(RANDOM_QUERY);
+    when(storeMock.queryChangeEvents(RANDOM_QUERY)).thenReturn(new ArrayList<>());
     eventServlet.doGet(reqMock, rspMock);
     assertThat(captor.getValue()).isEmpty();
   }
@@ -116,8 +100,7 @@
     PrintWriter outMock = mock(PrintWriter.class);
     List<String> listMock = ImmutableList.of("event one", "event two");
     when(rspMock.getWriter()).thenReturn(outMock);
-    when(queryMakerMock.formQueryFromRequestParameters(captor.capture()))
-        .thenReturn(RANDOM_QUERY);
+    when(queryMakerMock.formQueryFromRequestParameters(captor.capture())).thenReturn(RANDOM_QUERY);
     when(storeMock.queryChangeEvents(RANDOM_QUERY)).thenReturn(listMock);
     eventServlet.doGet(reqMock, rspMock);
     verify(outMock).write(listMock.get(0) + "\n");
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
index c7ec5d3..cd2a61d 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/QueryMakerTest.java
@@ -17,12 +17,10 @@
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.when;
 
-import com.google.common.collect.ImmutableMap;
-
 import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
 import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
 import com.ericsson.gerrit.plugins.eventslog.QueryMaker;
-
+import com.google.common.collect.ImmutableMap;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,8 +37,7 @@
   private QueryMaker queryMaker;
   private String defaultQuery;
 
-  @Mock
-  private EventsLogConfig cfgMock;
+  @Mock private EventsLogConfig cfgMock;
 
   private String query;
 
@@ -53,60 +50,51 @@
 
   @Test
   public void returnDefaultQueryforNullMap() throws Exception {
-    assertThat(queryMaker.formQueryFromRequestParameters(null))
-        .isEqualTo(defaultQuery);
+    assertThat(queryMaker.formQueryFromRequestParameters(null)).isEqualTo(defaultQuery);
   }
 
   @Test(expected = MalformedQueryException.class)
   public void badParameters() throws Exception {
-    queryMaker.formQueryFromRequestParameters(
-        ImmutableMap.of(T1, "13/13/32", T2, "14/10/10"));
+    queryMaker.formQueryFromRequestParameters(ImmutableMap.of(T1, "13/13/32", T2, "14/10/10"));
   }
 
   @Test
   public void dateOneOnly() throws Exception {
-    query = queryMaker
-        .formQueryFromRequestParameters(ImmutableMap.of(T1, OLD_DATE));
+    query = queryMaker.formQueryFromRequestParameters(ImmutableMap.of(T1, OLD_DATE));
     assertThat(query).contains(String.format("'%s' and ", OLD_DATE));
   }
 
   @Test
   public void dateTwoOnly() throws Exception {
-    query = queryMaker
-        .formQueryFromRequestParameters(ImmutableMap.of(T2, OLD_DATE));
+    query = queryMaker.formQueryFromRequestParameters(ImmutableMap.of(T2, OLD_DATE));
     assertThat(query).contains(String.format("'%s' and ", OLD_DATE));
   }
 
   @Test(expected = MalformedQueryException.class)
   public void noDate() throws Exception {
-    queryMaker
-        .formQueryFromRequestParameters(ImmutableMap.<String, String> of());
+    queryMaker.formQueryFromRequestParameters(ImmutableMap.of());
   }
 
   @Test
   public void dateOrdering() throws Exception {
-    query = queryMaker.formQueryFromRequestParameters(
-        ImmutableMap.of(T1, OLD_DATE, T2, NEW_DATE));
-    assertThat(query)
-        .contains(String.format("'%s' and '%s'", OLD_DATE, NEW_DATE));
+    query = queryMaker.formQueryFromRequestParameters(ImmutableMap.of(T1, OLD_DATE, T2, NEW_DATE));
+    assertThat(query).contains(String.format("'%s' and '%s'", OLD_DATE, NEW_DATE));
 
-    query = queryMaker.formQueryFromRequestParameters(
-        ImmutableMap.of(T1, NEW_DATE, T2, OLD_DATE));
-    assertThat(query)
-        .contains(String.format("'%s' and '%s'", OLD_DATE, NEW_DATE));
+    query = queryMaker.formQueryFromRequestParameters(ImmutableMap.of(T1, NEW_DATE, T2, OLD_DATE));
+    assertThat(query).contains(String.format("'%s' and '%s'", OLD_DATE, NEW_DATE));
   }
 
   @Test
   public void bothDateTime() throws Exception {
-    query = queryMaker.formQueryFromRequestParameters(
-        ImmutableMap.of(T1, OLD_DATE, T2, NEW_DATE));
+    query = queryMaker.formQueryFromRequestParameters(ImmutableMap.of(T1, OLD_DATE, T2, NEW_DATE));
     assertThat(query).isNotEqualTo(defaultQuery);
   }
 
   @Test
   public void onlyDateNoTime() throws Exception {
-    String query = queryMaker.formQueryFromRequestParameters(
-        ImmutableMap.of(T1, "2013-10-10", T2, "2014-10-10"));
+    query =
+        queryMaker.formQueryFromRequestParameters(
+            ImmutableMap.of(T1, "2013-10-10", T2, "2014-10-10"));
     assertThat(query).isNotEqualTo(defaultQuery);
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java
index eee066b..3fd3217 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java
@@ -16,11 +16,10 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import org.junit.Before;
-import org.junit.Test;
-
 import java.sql.Timestamp;
 import java.util.Calendar;
+import org.junit.Before;
+import org.junit.Test;
 
 public class SQLEntryTest {
 
@@ -67,11 +66,11 @@
     assertThat(entry2.compareTo(entry1)).isEqualTo(-1);
   }
 
+  @SuppressWarnings("unlikely-arg-type")
   @Test
   public void testEquals() throws Exception {
     assertThat(entry1.equals(null)).isFalse();
     assertThat(entry1.equals("String object")).isFalse();
-    assertThat(entry1.equals(entry1)).isTrue();
     assertThat(entry1.equals(entry2)).isFalse();
     assertThat(entry1.equals(entry4)).isTrue();
   }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
index 4b674d5..7f3c81c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
@@ -23,6 +23,9 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
+import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
+import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
 import com.google.common.collect.ImmutableList;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
@@ -32,21 +35,6 @@
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gson.Gson;
 import com.google.inject.Provider;
-
-import com.ericsson.gerrit.plugins.eventslog.EventsLogConfig;
-import com.ericsson.gerrit.plugins.eventslog.MalformedQueryException;
-import com.ericsson.gerrit.plugins.eventslog.ServiceUnavailableException;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.IOException;
 import java.net.ConnectException;
 import java.sql.Connection;
@@ -59,6 +47,15 @@
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @RunWith(MockitoJUnitRunner.class)
 public class SQLStoreTest {
@@ -66,20 +63,16 @@
   private static final String TEST_URL = "jdbc:h2:mem:" + TABLE_NAME;
   private static final String TEST_LOCAL_URL = "jdbc:h2:mem:test";
   private static final String TEST_DRIVER = "org.h2.Driver";
-  private static final String TEST_OPTIONS =
-      "DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";
+  private static final String TEST_OPTIONS = "DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";
   private static final String TERM_CONN_MSG = "terminating connection";
   private static final String MSG = "message";
   private static final String GENERIC_QUERY = "SELECT * FROM " + TABLE_NAME;
   private static final boolean PROJECT_VISIBLE_TO_USER = true;
   private static final boolean PROJECT_NOT_VISIBLE_TO_USER = false;
 
-  @Mock
-  private ProjectControl.GenericFactory pcFactoryMock;
-  @Mock
-  private Provider<CurrentUser> userProviderMock;
-  @Mock
-  private EventsLogConfig cfgMock;
+  @Mock private ProjectControl.GenericFactory pcFactoryMock;
+  @Mock private Provider<CurrentUser> userProviderMock;
+  @Mock private EventsLogConfig cfgMock;
   private SQLClient eventsDb;
   private SQLClient localEventsDb;
   private SQLStore store;
@@ -87,20 +80,18 @@
 
   private Statement stat;
 
-  @Rule
-  public TemporaryFolder testFolder = new TemporaryFolder();
+  @Rule public TemporaryFolder testFolder = new TemporaryFolder();
 
   @Before
   public void setUp() throws SQLException {
-    Connection conn =
-        DriverManager.getConnection(TEST_URL + ";" + TEST_OPTIONS);
+    Connection conn = DriverManager.getConnection(TEST_URL + ";" + TEST_OPTIONS);
     stat = conn.createStatement();
     poolMock = new PoolMock();
     when(cfgMock.getMaxAge()).thenReturn(5);
     when(cfgMock.getLocalStorePath()).thenReturn(testFolder.getRoot().toPath());
   }
 
-  public void tearDown() throws Exception {
+  private void tearDown() throws Exception {
     stat.execute("DROP TABLE " + TABLE_NAME);
     store.stop();
   }
@@ -108,8 +99,8 @@
   private void setUpClient() {
     eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
     localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
   }
 
@@ -125,7 +116,7 @@
     store.storeEvent(mockEvent);
     List<String> events = store.queryChangeEvents(GENERIC_QUERY);
     String json = new Gson().toJson(mockEvent);
-    assertThat(events).containsExactly(json);
+    assertThat(events).containsExactly(json).inOrder();
     tearDown();
   }
 
@@ -138,14 +129,12 @@
     tearDown();
   }
 
-  private MockEvent setUpMocks(boolean isVisible)
-      throws NoSuchProjectException, IOException {
+  private MockEvent setUpMocks(boolean isVisible) throws NoSuchProjectException, IOException {
     MockEvent mockEvent = new MockEvent();
     ProjectControl pcMock = mock(ProjectControl.class);
     CurrentUser userMock = mock(CurrentUser.class);
     when(userProviderMock.get()).thenReturn(userMock);
-    when(pcFactoryMock.controlFor(mockEvent.getProjectNameKey(), userMock))
-        .thenReturn(pcMock);
+    when(pcFactoryMock.controlFor(mockEvent.getProjectNameKey(), userMock)).thenReturn(pcMock);
     when(pcMock.isVisible()).thenReturn(isVisible);
     setUpClient();
     return mockEvent;
@@ -165,7 +154,8 @@
     CurrentUser userMock = mock(CurrentUser.class);
     when(userProviderMock.get()).thenReturn(userMock);
     NameKey projectNameKey = mockEvent.getProjectNameKey();
-    doThrow(new NoSuchProjectException(projectMock)).when(pcFactoryMock)
+    doThrow(new NoSuchProjectException(projectMock))
+        .when(pcFactoryMock)
         .controlFor(projectNameKey, userMock);
     setUpClient();
     store.storeEvent(mockEvent);
@@ -180,8 +170,7 @@
     CurrentUser userMock = mock(CurrentUser.class);
     when(userProviderMock.get()).thenReturn(userMock);
     NameKey projectNameKey = mockEvent.getProjectNameKey();
-    doThrow(new IOException()).when(pcFactoryMock).controlFor(projectNameKey,
-        userMock);
+    doThrow(new IOException()).when(pcFactoryMock).controlFor(projectNameKey, userMock);
     setUpClient();
     store.storeEvent(mockEvent);
     List<String> events = store.queryChangeEvents(GENERIC_QUERY);
@@ -198,8 +187,8 @@
     setUpClientMock();
     doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
     doThrow(exceptions).doNothing().when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     verify(eventsDb, times(3)).storeEvent(mockEvent);
@@ -215,8 +204,8 @@
     setUpClientMock();
     doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
     doThrow(exceptions).doNothing().when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     verify(eventsDb, times(3)).storeEvent(mockEvent);
@@ -229,8 +218,8 @@
     when(cfgMock.getMaxTries()).thenReturn(3);
     setUpClientMock();
     doThrow(new SQLException(MSG)).when(eventsDb).storeEvent(mockEvent);
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     verify(eventsDb, times(1)).storeEvent(mockEvent);
@@ -245,8 +234,8 @@
     setUpClientMock();
     doThrow(exceptions).doNothing().when(eventsDb).storeEvent(mockEvent);
     doThrow(exceptions).doNothing().when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     verify(eventsDb, times(1)).storeEvent(mockEvent);
@@ -256,11 +245,10 @@
   public void throwSQLExceptionIfNotOnline() throws Exception {
     MockEvent mockEvent = new MockEvent();
     setUpClientMock();
-    doThrow(new SQLException(new ConnectException())).when(eventsDb)
-        .createDBIfNotCreated();
+    doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     store.queryChangeEvents(GENERIC_QUERY);
@@ -276,18 +264,15 @@
     NoSuchProjectException e = mock(NoSuchProjectException.class);
     CurrentUser userMock = mock(CurrentUser.class);
     when(userProviderMock.get()).thenReturn(userMock);
-    when(pcFactoryMock.controlFor((mockEvent.getProjectNameKey()), userMock))
-        .thenReturn(pc);
-    when(pcFactoryMock.controlFor((mockEvent2.getProjectNameKey()), userMock))
-        .thenReturn(pc);
+    when(pcFactoryMock.controlFor((mockEvent.getProjectNameKey()), userMock)).thenReturn(pc);
+    when(pcFactoryMock.controlFor((mockEvent2.getProjectNameKey()), userMock)).thenReturn(pc);
     when(pc.isVisible()).thenReturn(true);
-    doThrow(e).when(pcFactoryMock).controlFor((mockEvent3.getProjectNameKey()),
-        userMock);
+    doThrow(e).when(pcFactoryMock).controlFor((mockEvent3.getProjectNameKey()), userMock);
 
     eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
     localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
 
     localEventsDb.createDBIfNotCreated();
     localEventsDb.storeEvent(mockEvent);
@@ -298,18 +283,17 @@
     Gson gson = new Gson();
     String json = gson.toJson(mockEvent);
     String json2 = gson.toJson(mockEvent2);
-    assertThat(events).containsExactly(json, json2);
+    assertThat(events).containsExactly(json, json2).inOrder();
     tearDown();
   }
 
   @Test
   public void offlineUponStart() throws Exception {
     setUpClientMock();
-    doThrow(new SQLException(new ConnectException())).when(eventsDb)
-        .createDBIfNotCreated();
+    doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     verify(localEventsDb).createDBIfNotCreated();
   }
@@ -318,11 +302,10 @@
   public void storeLocalOffline() throws Exception {
     MockEvent mockEvent = new MockEvent();
     setUpClientMock();
-    doThrow(new SQLException(new ConnectException())).when(eventsDb)
-        .createDBIfNotCreated();
+    doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     verify(localEventsDb).storeEvent(mockEvent);
@@ -333,34 +316,30 @@
     MockEvent mockEvent = new MockEvent();
     setUpClientMock();
     when(cfgMock.getMaxTries()).thenReturn(0);
-    doThrow(new SQLException(new ConnectException())).when(eventsDb)
-        .createDBIfNotCreated();
+    doThrow(new SQLException(new ConnectException())).when(eventsDb).createDBIfNotCreated();
     doThrow(new SQLException()).when(eventsDb).queryOne();
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     store.storeEvent(mockEvent);
     verify(localEventsDb).storeEvent(mockEvent);
   }
 
   /**
-   * For this test we expect that if we can connect to main database, then we
-   * should come back online and try setting up again. We just want to make sure
-   * that restoreEventsFromLocal gets called, so verifying that getLocalDBFile
-   * is called is sufficient.
+   * For this test we expect that if we can connect to main database, then we should come back
+   * online and try setting up again. We just want to make sure that restoreEventsFromLocal gets
+   * called, so verifying that getLocalDBFile is called is sufficient.
    */
   @Test
   public void testConnectionTask() throws Exception {
     eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
     localEventsDb = mock(SQLClient.class);
     when(localEventsDb.dbExists()).thenReturn(true);
-    when(localEventsDb.getAll())
-        .thenReturn(ImmutableList.of(mock(SQLEntry.class)));
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    when(localEventsDb.getAll()).thenReturn(ImmutableList.of(mock(SQLEntry.class)));
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
-    poolMock.scheduleWithFixedDelay(store.new CheckConnectionTask(), 0, 0,
-        TimeUnit.MILLISECONDS);
+    poolMock.scheduleWithFixedDelay(store.new CheckConnectionTask(), 0, 0, TimeUnit.MILLISECONDS);
     verify(localEventsDb, times(2)).removeOldEvents(0);
   }
 
@@ -380,19 +359,20 @@
     localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
     localEventsDb.createDBIfNotCreated();
     localEventsDb.storeEvent(mockEvent);
-    doThrow(new SQLException(new ConnectException())).doNothing().when(eventsDb)
+    doThrow(new SQLException(new ConnectException()))
+        .doNothing()
+        .when(eventsDb)
         .createDBIfNotCreated();
 
     if (copy) {
       when(cfgMock.getCopyLocal()).thenReturn(true);
     }
 
-    store = new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb,
-        localEventsDb, poolMock);
+    store =
+        new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
     verify(eventsDb).queryOne();
-    verify(eventsDb).storeEvent(any(String.class), any(Timestamp.class),
-        any(String.class));
+    verify(eventsDb).storeEvent(any(String.class), any(Timestamp.class), any(String.class));
     List<SQLEntry> entries = localEventsDb.getAll();
     assertThat(entries).isEmpty();
   }
@@ -421,8 +401,8 @@
     }
 
     @Override
-    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
-        long initialDelay, long delay, TimeUnit unit) {
+    public ScheduledFuture<?> scheduleWithFixedDelay(
+        Runnable command, long initialDelay, long delay, TimeUnit unit) {
       log.info(command.toString());
       command.run();
       return null;
diff --git a/tools/bazel.rc b/tools/bazel.rc
new file mode 100644
index 0000000..4ed16cf
--- /dev/null
+++ b/tools/bazel.rc
@@ -0,0 +1,2 @@
+build --workspace_status_command=./tools/workspace-status.sh
+test --build_tests_only
diff --git a/tools/bzl/BUILD b/tools/bzl/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tools/bzl/BUILD
diff --git a/tools/bzl/classpath.bzl b/tools/bzl/classpath.bzl
new file mode 100644
index 0000000..d5764f7
--- /dev/null
+++ b/tools/bzl/classpath.bzl
@@ -0,0 +1,4 @@
+load(
+    "@com_googlesource_gerrit_bazlets//tools:classpath.bzl",
+    "classpath_collector",
+)
diff --git a/tools/bzl/junit.bzl b/tools/bzl/junit.bzl
new file mode 100644
index 0000000..3af7e58
--- /dev/null
+++ b/tools/bzl/junit.bzl
@@ -0,0 +1,4 @@
+load(
+    "@com_googlesource_gerrit_bazlets//tools:junit.bzl",
+    "junit_tests",
+)
diff --git a/tools/bzl/maven_jar.bzl b/tools/bzl/maven_jar.bzl
new file mode 100644
index 0000000..2eabedb
--- /dev/null
+++ b/tools/bzl/maven_jar.bzl
@@ -0,0 +1 @@
+load("@com_googlesource_gerrit_bazlets//tools:maven_jar.bzl", "maven_jar")
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl
new file mode 100644
index 0000000..a2e438f
--- /dev/null
+++ b/tools/bzl/plugin.bzl
@@ -0,0 +1,6 @@
+load(
+    "@com_googlesource_gerrit_bazlets//:gerrit_plugin.bzl",
+    "gerrit_plugin",
+    "PLUGIN_DEPS",
+    "PLUGIN_TEST_DEPS",
+)
diff --git a/tools/eclipse/BUILD b/tools/eclipse/BUILD
new file mode 100644
index 0000000..c2fa474
--- /dev/null
+++ b/tools/eclipse/BUILD
@@ -0,0 +1,9 @@
+load("//tools/bzl:classpath.bzl", "classpath_collector")
+
+classpath_collector(
+    name = "main_classpath_collect",
+    testonly = 1,
+    deps = [
+        "//:events-log__plugin_test_deps",
+    ],
+)
diff --git a/tools/eclipse/project.sh b/tools/eclipse/project.sh
new file mode 100755
index 0000000..d8a854d
--- /dev/null
+++ b/tools/eclipse/project.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+#Copyright (C) 2017 The Android Open Source Project
+#
+# 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.
+
+`bazel query @com_googlesource_gerrit_bazlets//tools/eclipse:project --output location | sed s/BUILD:.*//`project.py -n events-log -r .
+
+
diff --git a/tools/sonar/sonar.sh b/tools/sonar/sonar.sh
new file mode 100755
index 0000000..39df185
--- /dev/null
+++ b/tools/sonar/sonar.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+# Copyright (C) 2018 The Android Open Source Project
+#
+# 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.
+`bazel query @com_googlesource_gerrit_bazlets//tools/sonar:sonar --output location | sed s/BUILD:.*//`sonar.py
diff --git a/tools/workspace-status.sh b/tools/workspace-status.sh
new file mode 100755
index 0000000..4e63364
--- /dev/null
+++ b/tools/workspace-status.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+#This script will be run by bazel when the build process starts to
+# generate key-value information that represents the status of the
+# workspace. The output should be like
+#
+# KEY1 VALUE1
+# KEY2 VALUE2
+#
+# If the script exits with non-zero code, it's considered as a failure
+# and the output will be discarded.
+
+function rev() {
+  cd $1; git describe --always --match "v[0-9].*" --dirty
+}
+
+echo STABLE_BUILD_EVENTS-LOG_LABEL $(rev .)
