diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/GetPreferences.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/GetPreferences.java
index e2a582a..34f0fa7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/GetPreferences.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/GetPreferences.java
@@ -29,12 +29,10 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
-
+import java.io.IOException;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Repository;
 
-import java.io.IOException;
-
 @Singleton
 public class GetPreferences implements RestReadView<AccountResource> {
   private final String pluginName;
@@ -44,7 +42,8 @@
   private final PermissionBackend permissionBackend;
 
   @Inject
-  public GetPreferences(@PluginName String pluginName,
+  public GetPreferences(
+      @PluginName String pluginName,
       Provider<CurrentUser> self,
       AllUsersName allUsersName,
       GitRepositoryManager gitMgr,
@@ -57,8 +56,9 @@
   }
 
   @Override
-  public PreferencesInfo apply(AccountResource rsrc) throws AuthException,
-      ResourceNotFoundException, IOException, ConfigInvalidException, PermissionBackendException {
+  public PreferencesInfo apply(AccountResource rsrc)
+      throws AuthException, ResourceNotFoundException, IOException, ConfigInvalidException,
+          PermissionBackendException {
     if (self.get() != rsrc.getUser()) {
       permissionBackend.user(self).check(GlobalPermission.MODIFY_ACCOUNT);
     }
@@ -69,8 +69,7 @@
       p.load(git);
 
       PreferencesInfo info = new PreferencesInfo();
-      info.ui =
-          p.getConfig().getEnum("plugin", pluginName, "ui", LabelUi.DEFAULT);
+      info.ui = p.getConfig().getEnum("plugin", pluginName, "ui", LabelUi.DEFAULT);
       return info;
     }
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/HttpModule.java
index b62c172..4a3bd76 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/HttpModule.java
@@ -23,7 +23,6 @@
 
   @Override
   protected void configureServlets() {
-    DynamicSet.bind(binder(), WebUiPlugin.class)
-        .toInstance(new GwtPlugin("labelui"));
+    DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new GwtPlugin("labelui"));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/LabelUi.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/LabelUi.java
index 918f96c..9be42e7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/LabelUi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/LabelUi.java
@@ -15,5 +15,7 @@
 package com.googlesource.gerrit.plugins.labelui;
 
 public enum LabelUi {
-  DEFAULT, LABEL_USER_TABLE, USER_LABEL_TABLE
+  DEFAULT,
+  LABEL_USER_TABLE,
+  USER_LABEL_TABLE
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/Module.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/Module.java
index a3b63c5..9770740 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/Module.java
@@ -23,12 +23,13 @@
 
   @Override
   protected void configure() {
-    install(new RestApiModule() {
-      @Override
-      protected void configure() {
-        get(ACCOUNT_KIND, "preferences").to(GetPreferences.class);
-        put(ACCOUNT_KIND, "preferences").to(SetPreferences.class);
-      }
-    });
+    install(
+        new RestApiModule() {
+          @Override
+          protected void configure() {
+            get(ACCOUNT_KIND, "preferences").to(GetPreferences.class);
+            put(ACCOUNT_KIND, "preferences").to(SetPreferences.class);
+          }
+        });
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/SetPreferences.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/SetPreferences.java
index ddc76d8..c55a875 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/SetPreferences.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/SetPreferences.java
@@ -27,15 +27,12 @@
 import com.google.gerrit.server.permissions.PermissionBackendException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
 import com.googlesource.gerrit.plugins.labelui.GetPreferences.PreferencesInfo;
 import com.googlesource.gerrit.plugins.labelui.SetPreferences.Input;
-
+import java.io.IOException;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 
-import java.io.IOException;
-
 public class SetPreferences implements RestModifyView<AccountResource, Input> {
   public static class Input {
     LabelUi ui;
@@ -48,7 +45,8 @@
   private final PermissionBackend permissionBackend;
 
   @Inject
-  public SetPreferences(@PluginName String pluginName,
+  public SetPreferences(
+      @PluginName String pluginName,
       Provider<CurrentUser> self,
       AllUsersName allUsersName,
       Provider<MetaDataUpdate.User> metaDataUpdateFactory,
@@ -62,8 +60,8 @@
 
   @Override
   public GetPreferences.PreferencesInfo apply(AccountResource rsrc, Input input)
-      throws AuthException, RepositoryNotFoundException, IOException,
-      ConfigInvalidException, PermissionBackendException {
+      throws AuthException, RepositoryNotFoundException, IOException, ConfigInvalidException,
+          PermissionBackendException {
     if (self.get() != rsrc.getUser()) {
       permissionBackend.user(self).check(GlobalPermission.MODIFY_ACCOUNT);
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelPanel.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelPanel.java
index 41c9d69..7cd3514 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelPanel.java
@@ -39,7 +39,6 @@
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
-
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -55,35 +54,37 @@
     }
   }
 
-  private final static String COLOR_GREEN = "#060";
-  private final static String COLOR_RED = "#F00";
+  private static final String COLOR_GREEN = "#060";
+  private static final String COLOR_RED = "#F00";
 
   LabelPanel(final Panel panel) {
-    new RestApi("accounts").id("self").view(Plugin.get().getPluginName(), "preferences")
-        .get(new AsyncCallback<PreferencesInfo>() {
-          @Override
-          public void onSuccess(PreferencesInfo result) {
-            LabelUIPlugin.refreshDefaultLabelUi(result.ui());
-            ChangeInfo change =
-                panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
-            switch (result.ui()) {
-              case LABEL_USER_TABLE:
-                displayLabelUserTable(change);
-                break;
-              case USER_LABEL_TABLE:
-                displayUserLabelTable(change);
-                break;
-              case DEFAULT:
-              default:
-                return;
-            }
-          }
+    new RestApi("accounts")
+        .id("self")
+        .view(Plugin.get().getPluginName(), "preferences")
+        .get(
+            new AsyncCallback<PreferencesInfo>() {
+              @Override
+              public void onSuccess(PreferencesInfo result) {
+                LabelUIPlugin.refreshDefaultLabelUi(result.ui());
+                ChangeInfo change = panel.getObject(GerritUiExtensionPoint.Key.CHANGE_INFO).cast();
+                switch (result.ui()) {
+                  case LABEL_USER_TABLE:
+                    displayLabelUserTable(change);
+                    break;
+                  case USER_LABEL_TABLE:
+                    displayUserLabelTable(change);
+                    break;
+                  case DEFAULT:
+                  default:
+                    return;
+                }
+              }
 
-          @Override
-          public void onFailure(Throwable caught) {
-            // never invoked
-          }
-        });
+              @Override
+              public void onFailure(Throwable caught) {
+                // never invoked
+              }
+            });
   }
 
   private void displayLabelUserTable(ChangeInfo change) {
@@ -186,8 +187,7 @@
     return new TreeSet<>(change.labels());
   }
 
-  private static Map<String, AccountInfo> getUserMap(Set<String> labelNames,
-      ChangeInfo change) {
+  private static Map<String, AccountInfo> getUserMap(Set<String> labelNames, ChangeInfo change) {
     Map<String, AccountInfo> users = new TreeMap<>();
     for (String labelName : labelNames) {
       LabelInfo label = change.label(labelName);
@@ -202,11 +202,9 @@
     int accountId = ai._accountId();
     String formattedValue = formatValue(ai.value());
     String valueText = label.valueText(formattedValue);
-    if (label.approved() != null
-        && label.approved()._accountId() == accountId) {
+    if (label.approved() != null && label.approved()._accountId() == accountId) {
       return createImage(LabelUIPlugin.RESOURCES.greenCheck(), valueText);
-    } else if (label.rejected() != null
-        && label.rejected()._accountId() == accountId) {
+    } else if (label.rejected() != null && label.rejected()._accountId() == accountId) {
       return createImage(LabelUIPlugin.RESOURCES.redNot(), valueText);
     } else {
       return createValueLabel(formattedValue, valueText, ai.value());
@@ -250,8 +248,7 @@
     String url;
     if (avatar == null) {
       RestApi api =
-          new RestApi("/accounts/").id(account._accountId()).view("avatar")
-              .addParameter("s", size);
+          new RestApi("/accounts/").id(account._accountId()).view("avatar").addParameter("s", size);
       url = GWT.getHostPageBaseURL() + api.path().substring(1);
     } else {
       url = avatar.url();
@@ -282,7 +279,7 @@
   }
 
   private static void center(Image image) {
-    Style s =  image.getElement().getStyle();
+    Style s = image.getElement().getStyle();
     s.setProperty("margin-left", "auto");
     s.setProperty("margin-right", "auto");
     s.setDisplay(Display.BLOCK);
@@ -293,7 +290,7 @@
     if (valueText != null) {
       l.setTitle(valueText);
     }
-    Style s =  l.getElement().getStyle();
+    Style s = l.getElement().getStyle();
     s.setTextAlign(TextAlign.CENTER);
     s.setCursor(Cursor.DEFAULT);
     if (value > 0) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUIPlugin.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUIPlugin.java
index a7dba89..3b71caa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUIPlugin.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUIPlugin.java
@@ -21,27 +21,30 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.user.client.ui.RootPanel;
-
 import com.googlesource.gerrit.plugins.labelui.client.PreferencesInfo.LabelUi;
 
 public class LabelUIPlugin extends PluginEntryPoint {
   public static final Resources RESOURCES = GWT.create(Resources.class);
 
-  private final static String DEFAULT_LABELS_CLASS =
+  private static final String DEFAULT_LABELS_CLASS =
       "com-google-gerrit-client-change-ChangeScreen_BinderImpl_GenCss_style-labels";
-  private final static String HIDE_DEFAULT_LABELS_CLASS = Plugin.get()
-      .getName() + "-hideDefaultLabels";
+  private static final String HIDE_DEFAULT_LABELS_CLASS =
+      Plugin.get().getName() + "-hideDefaultLabels";
 
   @Override
   public void onPluginLoad() {
     injectCssToHideDefaultLabels();
 
-    Plugin.get().panel(
-        GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_CHANGE_INFO_BLOCK,
-        new LabelPanel.Factory(), null);
-    Plugin.get().panel(
-        GerritUiExtensionPoint.PREFERENCES_SCREEN_BOTTOM,
-        new LabelUiPreferencesPanel.Factory(), null);
+    Plugin.get()
+        .panel(
+            GerritUiExtensionPoint.CHANGE_SCREEN_BELOW_CHANGE_INFO_BLOCK,
+            new LabelPanel.Factory(),
+            null);
+    Plugin.get()
+        .panel(
+            GerritUiExtensionPoint.PREFERENCES_SCREEN_BOTTOM,
+            new LabelUiPreferencesPanel.Factory(),
+            null);
   }
 
   public static void refreshDefaultLabelUi(LabelUi ui) {
@@ -73,6 +76,6 @@
     injectCss(css.toString());
   }
 
-  private final static native void injectCss(String css)
-  /*-{ return $wnd.Gerrit.injectCss(css) }-*/;
+  private static final native void injectCss(String css)
+      /*-{ return $wnd.Gerrit.injectCss(css) }-*/ ;
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java
index 7685146..4705858 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/LabelUiPreferencesPanel.java
@@ -39,19 +39,21 @@
   private Timer hideTimer;
 
   LabelUiPreferencesPanel() {
-    new RestApi("accounts").id("self")
+    new RestApi("accounts")
+        .id("self")
         .view(Plugin.get().getPluginName(), "preferences")
-        .get(new AsyncCallback<PreferencesInfo>() {
-          @Override
-          public void onSuccess(PreferencesInfo result) {
-            display(result);
-          }
+        .get(
+            new AsyncCallback<PreferencesInfo>() {
+              @Override
+              public void onSuccess(PreferencesInfo result) {
+                display(result);
+              }
 
-          @Override
-          public void onFailure(Throwable caught) {
-            // never invoked
-          }
-        });
+              @Override
+              public void onFailure(Throwable caught) {
+                // never invoked
+              }
+            });
   }
 
   private void display(PreferencesInfo info) {
@@ -84,27 +86,31 @@
       }
     }
 
-    ui.addChangeHandler(new ChangeHandler() {
-      @Override
-      public void onChange(ChangeEvent event) {
-        savedLabel.setVisible(false);
-        PreferencesInfo info = PreferencesInfo.create();
-        info.ui(ui.getSelectedValue());
-        new RestApi("accounts").id("self")
-            .view(Plugin.get().getPluginName(), "preferences")
-            .put(info, new AsyncCallback<PreferencesInfo>() {
-              @Override
-              public void onSuccess(PreferencesInfo result) {
-                showSavedStatus();
-              }
+    ui.addChangeHandler(
+        new ChangeHandler() {
+          @Override
+          public void onChange(ChangeEvent event) {
+            savedLabel.setVisible(false);
+            PreferencesInfo info = PreferencesInfo.create();
+            info.ui(ui.getSelectedValue());
+            new RestApi("accounts")
+                .id("self")
+                .view(Plugin.get().getPluginName(), "preferences")
+                .put(
+                    info,
+                    new AsyncCallback<PreferencesInfo>() {
+                      @Override
+                      public void onSuccess(PreferencesInfo result) {
+                        showSavedStatus();
+                      }
 
-              @Override
-              public void onFailure(Throwable caught) {
-                // never invoked
-              }
-            });
-      }
-    });
+                      @Override
+                      public void onFailure(Throwable caught) {
+                        // never invoked
+                      }
+                    });
+          }
+        });
   }
 
   private void showSavedStatus() {
@@ -113,13 +119,14 @@
       hideTimer = null;
     }
     savedLabel.setVisible(true);
-    hideTimer = new Timer() {
-      @Override
-      public void run() {
-        savedLabel.setVisible(false);
-        hideTimer = null;
-      }
-    };
+    hideTimer =
+        new Timer() {
+          @Override
+          public void run() {
+            savedLabel.setVisible(false);
+            hideTimer = null;
+          }
+        };
     hideTimer.schedule(1000);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/PreferencesInfo.java b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/PreferencesInfo.java
index 76ab746..5e19bdf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/labelui/client/PreferencesInfo.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/labelui/client/PreferencesInfo.java
@@ -18,7 +18,9 @@
 
 public class PreferencesInfo extends JavaScriptObject {
   public static enum LabelUi {
-    DEFAULT, LABEL_USER_TABLE, USER_LABEL_TABLE
+    DEFAULT,
+    LABEL_USER_TABLE,
+    USER_LABEL_TABLE
   }
 
   public static PreferencesInfo create() {
@@ -30,8 +32,8 @@
   }
 
   private final native String _ui() /*-{ return this.ui; }-*/;
-  public  final native void ui(String n) /*-{ if(n)this.ui=n; }-*/;
 
-  protected PreferencesInfo() {
-  }
+  public final native void ui(String n) /*-{ if(n)this.ui=n; }-*/;
+
+  protected PreferencesInfo() {}
 }
