diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
index df68a6e..ce1a6c1 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/CompleteImportDialog.java
@@ -43,59 +43,51 @@
 
     completeButton = new Button();
     completeButton.setText("Complete");
-    completeButton.addClickHandler(new ClickHandler() {
-      @Override
-      public void onClick(ClickEvent event) {
-        hide();
+    completeButton.addClickHandler(event -> {
+      hide();
 
-        new RestApi("config").id("server")
-            .view(Plugin.get().getName(), "projects").id(project)
-            .delete(new AsyncCallback<NoContent>() {
-              @Override
-              public void onSuccess(NoContent result) {
-                Plugin.get().go("/x/" + Plugin.get().getName() + "/list");
+      new RestApi("config").id("server")
+          .view(Plugin.get().getName(), "projects").id(project)
+          .delete(new AsyncCallback<NoContent>() {
+            @Override
+            public void onSuccess(NoContent result) {
+              Plugin.get().go("/x/" + Plugin.get().getName() + "/list");
 
-                final DialogBox successDialog = new DialogBox();
-                successDialog.setText("Project "
-                    + (copy ? "Copy" : "Import") + " Completed");
-                successDialog.setAnimationEnabled(true);
+              final DialogBox successDialog = new DialogBox();
+              successDialog.setText("Project "
+                  + (copy ? "Copy" : "Import") + " Completed");
+              successDialog.setAnimationEnabled(true);
 
-                Panel p = new VerticalPanel();
-                p.setStyleName("importer-message-panel");
-                p.add(new Label("The project "
-                  + (copy ? "copy" : "import") + " was completed."));
-                Button okButton = new Button("OK");
-                okButton.addClickHandler(new ClickHandler() {
-                  @Override
-                  public void onClick(ClickEvent event) {
-                    successDialog.hide();
-                  }
-                });
+              Panel p = new VerticalPanel();
+              p.setStyleName("importer-message-panel");
+              p.add(new Label("The project "
+                + (copy ? "copy" : "import") + " was completed."));
+              Button okButton = new Button("OK");
+              okButton.addClickHandler(new ClickHandler() {
+                @Override
+                public void onClick(ClickEvent event) {
+                  successDialog.hide();
+                }
+              });
 
-                p.add(okButton);
-                successDialog.add(p);
+              p.add(okButton);
+              successDialog.add(p);
 
-                successDialog.center();
-                successDialog.show();
-              }
+              successDialog.center();
+              successDialog.show();
+            }
 
-              @Override
-              public void onFailure(Throwable caught) {
-              }
-            });
-      }
+            @Override
+            public void onFailure(Throwable caught) {
+            }
+          });
     });
     buttons.add(completeButton);
 
     cancelButton = new Button();
     cancelButton.addStyleName("importer-cancel-button");
     cancelButton.setText("Cancel");
-    cancelButton.addClickHandler(new ClickHandler() {
-      @Override
-      public void onClick(ClickEvent event) {
-        hide();
-      }
-    });
+    cancelButton.addClickHandler(event -> hide());
     buttons.add(cancelButton);
 
     FlowPanel center = new FlowPanel();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java
index 212e5cc..2dc3e57 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportActionPanel.java
@@ -14,7 +14,6 @@
 
 package com.googlesource.gerrit.plugins.importer.client;
 
-import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.FlowPanel;
@@ -23,17 +22,11 @@
 
   ImportActionPanel(final String project, final boolean copy) {
     setStyleName("importer-action-panel");
-    add(new Button("Resume...", new ClickHandler() {
-      @Override
-      public void onClick(ClickEvent event) {
-        (new ResumeImportDialog(project, copy)).center();
-      }
-    }));
-    add(new Button("Complete...", new ClickHandler() {
-      @Override
-      public void onClick(ClickEvent event) {
-        (new CompleteImportDialog(project, copy)).center();
-      }
-    }));
+    add(new Button("Resume...",
+        (ClickHandler) event -> (new ResumeImportDialog(project, copy))
+            .center()));
+    add(new Button("Complete...",
+        (ClickHandler) event -> (new CompleteImportDialog(project, copy))
+            .center()));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportGroupScreen.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportGroupScreen.java
index 6bafec2..a4e9cea 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportGroupScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ImportGroupScreen.java
@@ -23,8 +23,6 @@
 import com.google.gerrit.plugin.client.rpc.RestApi;
 import com.google.gerrit.plugin.client.screen.Screen;
 import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
@@ -66,12 +64,7 @@
 
     Button importButton = new Button("Import");
     importButton.addStyleName("importer-importButton");
-    importButton.addClickHandler(new ClickHandler() {
-      @Override
-      public void onClick(ClickEvent event) {
-        doImport();
-      }
-    });
+    importButton.addClickHandler(event -> doImport());
     buttons.add(importButton);
     importButton.setEnabled(false);
     new OnEditEnabler(importButton, fromTxt);
@@ -105,12 +98,7 @@
         p.setStyleName("importer-message-panel");
         p.add(new Label("The group was imported."));
         Button okButton = new Button("OK");
-        okButton.addClickHandler(new ClickHandler() {
-          @Override
-          public void onClick(ClickEvent event) {
-            successDialog.hide();
-          }
-        });
+        okButton.addClickHandler(event -> successDialog.hide());
 
         p.add(okButton);
         successDialog.add(p);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/InputUtil.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/InputUtil.java
index 6edfe44..1f9d55d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/InputUtil.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/InputUtil.java
@@ -15,9 +15,6 @@
 package com.googlesource.gerrit.plugins.importer.client;
 
 import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.core.client.Scheduler.ScheduledCommand;
-import com.google.gwt.event.dom.client.KeyPressEvent;
-import com.google.gwt.event.dom.client.KeyPressHandler;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.CheckBox;
 import com.google.gwt.user.client.ui.HorizontalPanel;
@@ -72,12 +69,7 @@
         }
       };
     }
-    tb.addKeyPressHandler(new KeyPressHandler() {
-      @Override
-      public void onKeyPress(KeyPressEvent event) {
-        event.stopPropagation();
-      }
-    });
+    tb.addKeyPressHandler(event -> event.stopPropagation());
     tb.sinkEvents(Event.ONPASTE);
     tb.setVisibleLength(40);
     return tb;
@@ -85,12 +77,9 @@
 
   private static void handlePaste(final TextBox tb, Event event) {
     if (event.getTypeInt() == Event.ONPASTE) {
-      Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-        @Override
-        public void execute() {
-          if (getValue(tb).length() != 0) {
-            tb.setEnabled(true);
-          }
+      Scheduler.get().scheduleDeferred(() -> {
+        if (getValue(tb).length() != 0) {
+          tb.setEnabled(true);
         }
       });
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/OnEditEnabler.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/OnEditEnabler.java
index 81e9fbb..d632652 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/OnEditEnabler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/OnEditEnabler.java
@@ -15,11 +15,8 @@
 package com.googlesource.gerrit.plugins.importer.client;
 
 import com.google.gwt.core.client.Scheduler;
-import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.dom.client.ChangeEvent;
 import com.google.gwt.event.dom.client.ChangeHandler;
-import com.google.gwt.event.dom.client.FocusEvent;
-import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.event.dom.client.KeyDownEvent;
 import com.google.gwt.event.dom.client.KeyDownHandler;
 import com.google.gwt.event.dom.client.KeyPressEvent;
@@ -88,12 +85,7 @@
     // up to date with non-user updates of the text (calls to
     // setText()...) and also up to date with user changes which
     // occured after enabling "widget".
-    tb.addFocusHandler(new FocusHandler() {
-        @Override
-        public void onFocus(FocusEvent event) {
-          strings.put(tb, tb.getText().trim());
-        }
-      });
+    tb.addFocusHandler(event -> strings.put(tb, tb.getText().trim()));
 
     // CTRL-V Pastes in Chrome seem only detectable via BrowserEvents or
     // KeyDownEvents, the latter is better.
@@ -144,12 +136,9 @@
         ! ((FocusWidget) e.getSource()).isEnabled() ) {
       if (e.getSource() instanceof ValueBoxBase) {
         final TextBoxBase box = ((TextBoxBase) e.getSource());
-        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-          @Override
-          public void execute() {
-            if (box.getValue().trim().equals(originalValue)) {
-              widget.setEnabled(false);
-            }
+        Scheduler.get().scheduleDeferred(() -> {
+          if (box.getValue().trim().equals(originalValue)) {
+            widget.setEnabled(false);
           }
         });
       }
@@ -168,16 +157,13 @@
 
   private void onTextBoxBase(final TextBoxBase tb) {
     // The text appears to not get updated until the handlers complete.
-    Scheduler.get().scheduleDeferred(new ScheduledCommand() {
-      @Override
-      public void execute() {
-        String orig = strings.get(tb);
-        if (orig == null) {
-          orig = "";
-        }
-        if (! orig.equals(tb.getText().trim())) {
-          widget.setEnabled(true);
-        }
+    Scheduler.get().scheduleDeferred(() -> {
+      String orig = strings.get(tb);
+      if (orig == null) {
+        orig = "";
+      }
+      if (! orig.equals(tb.getText().trim())) {
+        widget.setEnabled(true);
       }
     });
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java
index 5b25ec4..79cd727 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/client/ResumeImportDialog.java
@@ -86,12 +86,7 @@
                 p.add(new Label("Created Changes: " + result.numChangesCreated()));
                 p.add(new Label("Updated Changes: " + result.numChangesUpdated()));
                 Button okButton = new Button("OK");
-                okButton.addClickHandler(new ClickHandler() {
-                  @Override
-                  public void onClick(ClickEvent event) {
-                    successDialog.hide();
-                  }
-                });
+                okButton.addClickHandler(event1 -> successDialog.hide());
 
                 p.add(okButton);
                 successDialog.add(p);
@@ -111,12 +106,7 @@
     cancelButton = new Button();
     cancelButton.addStyleName("importer-cancel-button");
     cancelButton.setText("Cancel");
-    cancelButton.addClickHandler(new ClickHandler() {
-      @Override
-      public void onClick(ClickEvent event) {
-        hide();
-      }
-    });
+    cancelButton.addClickHandler(event -> hide());
     buttons.add(cancelButton);
 
     FlowPanel center = new FlowPanel();
