diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardClient.java b/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardClient.java
index d28013d..2f6a555 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardClient.java
@@ -16,7 +16,11 @@
 
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
-
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.HttpURLConnection;
 import org.apache.http.StatusLine;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -28,17 +32,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.HttpURLConnection;
-
-
 public class StoryboardClient {
 
-  private static final Logger log =
-      LoggerFactory.getLogger(StoryboardClient.class);
+  private static final Logger log = LoggerFactory.getLogger(StoryboardClient.class);
 
   public static final String STORIES_ENDPOINT = "/api/v1/stories";
   public static final String SYS_INFO_ENDPOINT = "/api/v1/systeminfo";
@@ -72,8 +68,8 @@
         log.debug("Data retreived: " + responseJson);
         return responseJson;
       } else {
-        log.error("Failed request: " + httpget.getRequestLine()
-            + " with response: " + responseCode);
+        log.error(
+            "Failed request: " + httpget.getRequestLine() + " with response: " + responseCode);
       }
     }
     return null;
@@ -93,8 +89,12 @@
       if (responseCode == HttpURLConnection.HTTP_OK) {
         log.info("Updated " + url + " with " + data);
       } else {
-        log.error("Failed to post, response: " + responseCode + " ("
-            + response.getStatusLine().getReasonPhrase() + ")");
+        log.error(
+            "Failed to post, response: "
+                + responseCode
+                + " ("
+                + response.getStatusLine().getReasonPhrase()
+                + ")");
       }
     }
   }
@@ -113,8 +113,12 @@
       if (responseCode == HttpURLConnection.HTTP_OK) {
         log.info("Updated " + url + " with " + data);
       } else {
-        log.error("Failed to post, response: " + responseCode + " ("
-            + response.getStatusLine().getReasonPhrase() + ")");
+        log.error(
+            "Failed to post, response: "
+                + responseCode
+                + " ("
+                + response.getStatusLine().getReasonPhrase()
+                + ")");
       }
     }
   }
@@ -137,12 +141,10 @@
     return getData(this.baseUrl + TASKS_ENDPOINT + "/" + issueId);
   }
 
-  public void setStatus(final String issueId, final String status)
-      throws IOException {
+  public void setStatus(final String issueId, final String status) throws IOException {
     log.debug("PUT task with data: ({},{})", issueId, status);
     final String url = baseUrl + TASKS_ENDPOINT + "/" + issueId;
-    final String json =
-        "{\"task_id\":\"" + issueId + "\",\"status\":\"" + status + "\"}";
+    final String json = "{\"task_id\":\"" + issueId + "\",\"status\":\"" + status + "\"}";
 
     putData(url, json);
   }
@@ -159,15 +161,12 @@
     return jobj.get("link").getAsString();
   }
 
-  public void addComment(final String issueId, final String comment)
-      throws IOException {
+  public void addComment(final String issueId, final String comment) throws IOException {
     int story_id = getStoryId(issueId);
     log.debug("Posting comment with data: ({},{})", story_id, comment);
-    final String url =
-        baseUrl + STORIES_ENDPOINT + "/" + story_id + "/comments";
+    final String url = baseUrl + STORIES_ENDPOINT + "/" + story_id + "/comments";
     final String escapedComment = comment.replace("\n", "\\n");
-    final String json = "{\"story_id\":\"" + issueId + "\",\"content\":\""
-        + escapedComment + "\"}";
+    final String json = "{\"story_id\":\"" + issueId + "\",\"content\":\"" + escapedComment + "\"}";
 
     postData(url, json);
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacade.java
index 2313c03..cca868e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacade.java
@@ -14,18 +14,15 @@
 
 package com.googlesource.gerrit.plugins.its.storyboard;
 
-import java.io.IOException;
-import java.net.URL;
-
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.inject.Inject;
-
 import com.googlesource.gerrit.plugins.its.base.its.ItsFacade;
+import java.io.IOException;
+import java.net.URL;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class StoryboardItsFacade implements ItsFacade {
   private final Logger log = LoggerFactory.getLogger(StoryboardItsFacade.class);
@@ -36,11 +33,9 @@
   private final StoryboardClient client;
 
   @Inject
-  public StoryboardItsFacade(@PluginName String pluginName,
-      @GerritServerConfig Config cfg) {
+  public StoryboardItsFacade(@PluginName String pluginName, @GerritServerConfig Config cfg) {
     final String url = cfg.getString(pluginName, null, GERRIT_CONFIG_URL);
-    final String password =
-        cfg.getString(pluginName, null, GERRIT_CONFIG_PASSWORD);
+    final String password = cfg.getString(pluginName, null, GERRIT_CONFIG_PASSWORD);
 
     this.client = new StoryboardClient(url, password);
   }
@@ -68,20 +63,18 @@
   }
 
   @Override
-  public void addRelatedLink(final String issueId, final URL relatedUrl,
-      String description) throws IOException {
-    addComment(issueId, "Related URL: "
-        + createLinkForWebui(relatedUrl.toExternalForm(), description));
+  public void addRelatedLink(final String issueId, final URL relatedUrl, String description)
+      throws IOException {
+    addComment(
+        issueId, "Related URL: " + createLinkForWebui(relatedUrl.toExternalForm(), description));
   }
 
   @Override
   public void performAction(final String issueId, final String actionString) {
 
     try {
-      String actionName =
-          actionString.substring(0, actionString.indexOf(" ")).toLowerCase();
-      String actionValue =
-          actionString.substring(actionString.indexOf(" ") + 1).toLowerCase();
+      String actionName = actionString.substring(0, actionString.indexOf(" ")).toLowerCase();
+      String actionValue = actionString.substring(actionString.indexOf(" ") + 1).toLowerCase();
       if (actionName.equals("set-status")) {
         if (!client.getTaskStatus(issueId).toLowerCase().equals(actionValue)) {
           log.info("Updating task " + issueId + " with status: " + actionValue);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardModule.java b/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardModule.java
index 5d809b8..67b4cdf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardModule.java
@@ -14,30 +14,28 @@
 
 package com.googlesource.gerrit.plugins.its.storyboard;
 
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
-
 import com.googlesource.gerrit.plugins.its.base.ItsHookModule;
 import com.googlesource.gerrit.plugins.its.base.its.ItsFacade;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class StoryboardModule extends AbstractModule {
 
-  private static final Logger log = LoggerFactory.getLogger(
-      StoryboardModule.class);
+  private static final Logger log = LoggerFactory.getLogger(StoryboardModule.class);
 
   private final String pluginName;
   private final Config gerritConfig;
   private final PluginConfigFactory pluginCfgFactory;
 
   @Inject
-  public StoryboardModule(@PluginName final String pluginName,
+  public StoryboardModule(
+      @PluginName final String pluginName,
       @GerritServerConfig final Config config,
       PluginConfigFactory pluginCfgFactory) {
     this.pluginName = pluginName;
@@ -49,8 +47,7 @@
   protected void configure() {
     if (gerritConfig.getString(pluginName, null, "url") != null) {
       log.info("Storyboard is configured as ITS");
-      bind(ItsFacade.class).toInstance(new StoryboardItsFacade(
-          pluginName, gerritConfig));
+      bind(ItsFacade.class).toInstance(new StoryboardItsFacade(pluginName, gerritConfig));
       install(new ItsHookModule(pluginName, pluginCfgFactory));
     }
   }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacadeTest.java b/src/test/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacadeTest.java
index 63caf65..5ebfa10 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacadeTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/its/storyboard/StoryboardItsFacadeTest.java
@@ -15,15 +15,13 @@
 
 import static org.easymock.EasyMock.expect;
 
-import org.eclipse.jgit.lib.Config;
-
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.config.FactoryModule;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-
 import com.googlesource.gerrit.plugins.its.base.testutil.LoggingMockingTestCase;
+import org.eclipse.jgit.lib.Config;
 
 public class StoryboardItsFacadeTest extends LoggingMockingTestCase {
   private Injector injector;
@@ -78,10 +76,8 @@
   }
 
   private void mockUnconnectableStoryboard() {
-    expect(serverConfig.getString("its-storyboard",  null, "url"))
-    .andReturn("<no-url>").anyTimes();
-    expect(serverConfig.getString("its-storyboard",  null, "password"))
-    .andReturn("none").anyTimes();
+    expect(serverConfig.getString("its-storyboard", null, "url")).andReturn("<no-url>").anyTimes();
+    expect(serverConfig.getString("its-storyboard", null, "password")).andReturn("none").anyTimes();
   }
 
   @Override
@@ -95,10 +91,8 @@
     @Override
     protected void configure() {
       serverConfig = createMock(Config.class);
-      bind(Config.class).annotatedWith(GerritServerConfig.class)
-          .toInstance(serverConfig);
-      bind(String.class).annotatedWith(PluginName.class)
-          .toInstance("its-storyboard");
+      bind(Config.class).annotatedWith(GerritServerConfig.class).toInstance(serverConfig);
+      bind(String.class).annotatedWith(PluginName.class).toInstance("its-storyboard");
     }
   }
 }
