Convert all GWT 1.5 listener uses to GWT 1.6 handlers

Bug: GERRIT-75
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/main/java/com/google/gerrit/client/ErrorDialog.java b/src/main/java/com/google/gerrit/client/ErrorDialog.java
index 1181b4a..4375c0d 100644
--- a/src/main/java/com/google/gerrit/client/ErrorDialog.java
+++ b/src/main/java/com/google/gerrit/client/ErrorDialog.java
@@ -15,11 +15,11 @@
 package com.google.gerrit.client;
 
 import com.google.gerrit.client.rpc.Common;
+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.ClickListener;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwtexpui.user.client.AutoCenterDialogBox;
 import com.google.gwtjsonrpc.client.RemoteJsonException;
 
@@ -36,9 +36,10 @@
     buttons.setStyleName("gerrit-ErrorDialog-Buttons");
     final Button closey = new Button();
     closey.setText(Gerrit.C.errorDialogClose());
-    closey.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
-        hide();
+    closey.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(ClickEvent event) {
+        hide();        
       }
     });
     buttons.add(closey);
diff --git a/src/main/java/com/google/gerrit/client/Gerrit.java b/src/main/java/com/google/gerrit/client/Gerrit.java
index 163ff4c..0608d6d 100644
--- a/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -26,10 +26,11 @@
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Cookies;
 import com.google.gwt.user.client.History;
-import com.google.gwt.user.client.HistoryListener;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.HTML;
@@ -203,9 +204,10 @@
   static void addHistoryHook(final JavaScriptObject hook) {
     if (historyHooks == null) {
       historyHooks = new ArrayList<JavaScriptObject>();
-      History.addHistoryListener(new HistoryListener() {
-        public void onHistoryChanged(final String historyToken) {
-          dispatchHistoryHooks(historyToken);
+      History.addValueChangeHandler(new ValueChangeHandler<String>() {
+        @Override
+        public void onValueChange(ValueChangeEvent<String> event) {
+          dispatchHistoryHooks(event.getValue());
         }
       });
     }
@@ -281,7 +283,7 @@
     sg.getElement().getParentElement().removeChild(sg.getElement());
     RootPanel.detachNow(sg);
 
-    History.addHistoryListener(new Link());
+    History.addValueChangeHandler(new Link());
     if ("".equals(History.getToken())) {
       if (isSignedIn()) {
         History.newItem(Link.MINE);
diff --git a/src/main/java/com/google/gerrit/client/Link.java b/src/main/java/com/google/gerrit/client/Link.java
index 2f34c3a..65a96c6 100644
--- a/src/main/java/com/google/gerrit/client/Link.java
+++ b/src/main/java/com/google/gerrit/client/Link.java
@@ -43,9 +43,10 @@
 import com.google.gerrit.client.rpc.Common;
 import com.google.gerrit.client.ui.Screen;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.user.client.HistoryListener;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
 
-public class Link implements HistoryListener {
+public class Link implements ValueChangeHandler<String> {
   public static final String SETTINGS = "settings";
   public static final String SETTINGS_SSHKEYS = "settings,ssh-keys";
   public static final String SETTINGS_WEBIDENT = "settings,web-identities";
@@ -106,7 +107,9 @@
     return "project,open," + proj.toString() + ",n,z";
   }
 
-  public void onHistoryChanged(final String token) {
+  @Override
+  public void onValueChange(final ValueChangeEvent<String> event) {
+    final String token = event.getValue();
     Screen s;
     try {
       s = select(token);
diff --git a/src/main/java/com/google/gerrit/client/account/AccountSettings.java b/src/main/java/com/google/gerrit/client/account/AccountSettings.java
index 1b8a0e2..d2388e4 100644
--- a/src/main/java/com/google/gerrit/client/account/AccountSettings.java
+++ b/src/main/java/com/google/gerrit/client/account/AccountSettings.java
@@ -22,11 +22,11 @@
 import com.google.gerrit.client.rpc.Common;
 import com.google.gerrit.client.rpc.ScreenLoadCallback;
 import com.google.gerrit.client.ui.AccountScreen;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
 import com.google.gwt.i18n.client.LocaleInfo;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.LazyPanel;
-import com.google.gwt.user.client.ui.SourcesTabEvents;
-import com.google.gwt.user.client.ui.TabListener;
 import com.google.gwt.user.client.ui.TabPanel;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
 
@@ -131,13 +131,10 @@
       tabTokens.add(Link.SETTINGS_AGREEMENTS);
     }
 
-    tabs.addTabListener(new TabListener() {
-      public boolean onBeforeTabSelected(SourcesTabEvents sender, int tabIndex) {
-        return true;
-      }
-
-      public void onTabSelected(SourcesTabEvents sender, int tabIndex) {
-        Gerrit.display(tabTokens.get(tabIndex), false);
+    tabs.addSelectionHandler(new SelectionHandler<Integer>() {
+      @Override
+      public void onSelection(final SelectionEvent<Integer> event) {
+        Gerrit.display(tabTokens.get(event.getSelectedItem()), false);
       }
     });
   }
diff --git a/src/main/java/com/google/gerrit/client/account/AgreementPanel.java b/src/main/java/com/google/gerrit/client/account/AgreementPanel.java
index 51c810a..ba0d26a 100644
--- a/src/main/java/com/google/gerrit/client/account/AgreementPanel.java
+++ b/src/main/java/com/google/gerrit/client/account/AgreementPanel.java
@@ -20,13 +20,14 @@
 import com.google.gerrit.client.reviewdb.ContributorAgreement;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.FancyFlexTable;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Hyperlink;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtexpui.safehtml.client.SafeHtml;
 import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
 
@@ -61,10 +62,12 @@
       table.setText(0, 3, Util.C.agreementDescription());
       table.setText(0, 4, Util.C.agreementAccepted());
 
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
diff --git a/src/main/java/com/google/gerrit/client/account/ContactPanel.java b/src/main/java/com/google/gerrit/client/account/ContactPanel.java
index 11ce924..86bd271 100644
--- a/src/main/java/com/google/gerrit/client/account/ContactPanel.java
+++ b/src/main/java/com/google/gerrit/client/account/ContactPanel.java
@@ -21,16 +21,15 @@
 import com.google.gerrit.client.rpc.Common;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.TextSaveButtonListener;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.i18n.client.LocaleInfo;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ChangeListener;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FormHandler;
 import com.google.gwt.user.client.ui.FormPanel;
-import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
-import com.google.gwt.user.client.ui.FormSubmitEvent;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Label;
@@ -39,6 +38,7 @@
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
 import com.google.gwtexpui.user.client.AutoCenterDialogBox;
 import com.google.gwtjsonrpc.client.VoidResult;
 
@@ -129,8 +129,9 @@
 
     registerNewEmail = new Button(Util.C.buttonOpenRegisterNewEmail());
     registerNewEmail.setEnabled(false);
-    registerNewEmail.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    registerNewEmail.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doRegisterNewEmail();
       }
     });
@@ -156,17 +157,19 @@
 
     save = new Button(Util.C.buttonSaveContact());
     save.setEnabled(false);
-    save.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    save.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doSave();
       }
     });
     body.add(save);
 
     final TextSaveButtonListener sbl = new TextSaveButtonListener(save);
-    nameTxt.addKeyboardListener(sbl);
-    emailPick.addChangeListener(new ChangeListener() {
-      public void onChange(Widget sender) {
+    nameTxt.addKeyPressHandler(sbl);
+    emailPick.addChangeHandler(new ChangeHandler() {
+      @Override
+      public void onChange(final ChangeEvent event) {
         final int idx = emailPick.getSelectedIndex();
         final String v = 0 <= idx ? emailPick.getValue(idx) : null;
         if (Util.C.buttonOpenRegisterNewEmail().equals(v)) {
@@ -182,10 +185,10 @@
         }
       }
     });
-    addressTxt.addKeyboardListener(sbl);
-    countryTxt.addKeyboardListener(sbl);
-    phoneTxt.addKeyboardListener(sbl);
-    faxTxt.addKeyboardListener(sbl);
+    addressTxt.addKeyPressHandler(sbl);
+    countryTxt.addKeyPressHandler(sbl);
+    phoneTxt.addKeyPressHandler(sbl);
+    faxTxt.addKeyPressHandler(sbl);
 
     initWidget(body);
   }
@@ -216,29 +219,27 @@
         postLoad();
       }
     });
-    Util.ACCOUNT_SEC
-        .myExternalIds(new GerritCallback<ExternalIdDetail>() {
-          public void onSuccess(final ExternalIdDetail detail) {
-            if (!isAttached()) {
-              return;
-            }
-            final List<AccountExternalId> result = detail.ids;
-            final Set<String> emails = new HashSet<String>();
-            for (final AccountExternalId i : result) {
-              if (i.getEmailAddress() != null
-                  && i.getEmailAddress().length() > 0) {
-                emails.add(i.getEmailAddress());
-              }
-            }
-            final List<String> addrs = new ArrayList<String>(emails);
-            Collections.sort(addrs);
-            for (String s : addrs) {
-              emailPick.addItem(s);
-            }
-            haveEmails = true;
-            postLoad();
+    Util.ACCOUNT_SEC.myExternalIds(new GerritCallback<ExternalIdDetail>() {
+      public void onSuccess(final ExternalIdDetail detail) {
+        if (!isAttached()) {
+          return;
+        }
+        final List<AccountExternalId> result = detail.ids;
+        final Set<String> emails = new HashSet<String>();
+        for (final AccountExternalId i : result) {
+          if (i.getEmailAddress() != null && i.getEmailAddress().length() > 0) {
+            emails.add(i.getEmailAddress());
           }
-        });
+        }
+        final List<String> addrs = new ArrayList<String>(emails);
+        Collections.sort(addrs);
+        for (String s : addrs) {
+          emailPick.addItem(s);
+        }
+        haveEmails = true;
+        postLoad();
+      }
+    });
   }
 
   private void postLoad() {
@@ -306,9 +307,10 @@
 
     final Button register = new Button(Util.C.buttonSendRegisterNewEmail());
     final FormPanel form = new FormPanel();
-    form.addFormHandler(new FormHandler() {
-      public void onSubmit(final FormSubmitEvent event) {
-        event.setCancelled(true);
+    form.addSubmitHandler(new FormPanel.SubmitHandler() {
+      @Override
+      public void onSubmit(final SubmitEvent event) {
+        event.cancel();
         final String addr = inEmail.getText().trim();
         if (!addr.contains("@")) {
           return;
@@ -329,14 +331,12 @@
           }
         });
       }
-
-      public void onSubmitComplete(final FormSubmitCompleteEvent event) {
-      }
     });
     form.setWidget(body);
 
-    register.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    register.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         form.submit();
       }
     });
diff --git a/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java b/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java
index 929a3a5..6d91273 100644
--- a/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java
+++ b/src/main/java/com/google/gerrit/client/account/ExternalIdPanel.java
@@ -20,15 +20,15 @@
 import com.google.gerrit.client.rpc.Common;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.FancyFlexTable;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -44,8 +44,9 @@
     body.add(identites);
 
     deleteIdentity = new Button(Util.C.buttonDeleteIdentity());
-    deleteIdentity.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    deleteIdentity.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         identites.deleteChecked();
       }
     });
@@ -54,8 +55,9 @@
     switch (Common.getGerritConfig().getLoginType()) {
       case OPENID: {
         final Button linkIdentity = new Button(Util.C.buttonLinkIdentity());
-        linkIdentity.addClickListener(new ClickListener() {
-          public void onClick(final Widget sender) {
+        linkIdentity.addClickHandler(new ClickHandler() {
+          @Override
+          public void onClick(final ClickEvent event) {
             doLinkIdentity();
           }
         });
@@ -93,10 +95,13 @@
       table.setText(0, 3, Util.C.webIdStatus());
       table.setText(0, 4, Util.C.webIdEmail());
       table.setText(0, 5, Util.C.webIdIdentity());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
@@ -115,12 +120,12 @@
     }
 
     @Override
-    protected boolean onKeyPress(final char keyCode, final int modifiers) {
-      if (super.onKeyPress(keyCode, modifiers)) {
+    protected boolean onKeyPress(final KeyPressEvent event) {
+      if (super.onKeyPress(event)) {
         return true;
       }
-      if (modifiers == 0) {
-        switch (keyCode) {
+      if (!event.isAnyModifierKeyDown()) {
+        switch (event.getCharCode()) {
           case 's':
           case 'c':
             toggleCurrentRow();
@@ -138,7 +143,7 @@
     private void toggleCurrentRow() {
       final CheckBox cb = (CheckBox) table.getWidget(getCurrentRow(), 1);
       if (cb != null) {
-        cb.setChecked(!cb.isChecked());
+        cb.setValue(!cb.getValue());
       }
     }
 
@@ -154,7 +159,7 @@
         if (cb == null) {
           continue;
         }
-        if (cb.isChecked()) {
+        if (cb.getValue()) {
           keys.add(k.getKey());
         }
       }
diff --git a/src/main/java/com/google/gerrit/client/account/NewAgreementScreen.java b/src/main/java/com/google/gerrit/client/account/NewAgreementScreen.java
index 32dacc7..a42093c 100644
--- a/src/main/java/com/google/gerrit/client/account/NewAgreementScreen.java
+++ b/src/main/java/com/google/gerrit/client/account/NewAgreementScreen.java
@@ -24,6 +24,8 @@
 import com.google.gerrit.client.ui.SmallHeading;
 import com.google.gerrit.client.ui.TextSaveButtonListener;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.http.client.Request;
 import com.google.gwt.http.client.RequestBuilder;
 import com.google.gwt.http.client.RequestCallback;
@@ -31,7 +33,6 @@
 import com.google.gwt.http.client.Response;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.FormPanel;
 import com.google.gwt.user.client.ui.HTML;
@@ -41,7 +42,6 @@
 import com.google.gwt.user.client.ui.RadioButton;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwtjsonrpc.client.VoidResult;
 
 import java.util.HashSet;
@@ -123,8 +123,9 @@
     fp.add(new InlineLabel(Util.M.enterIAGREE(Util.C.newAgreementIAGREE())));
     finalGroup.add(fp);
     submit = new Button(Util.C.buttonSubmitNewAgreement());
-    submit.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    submit.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doSign();
       }
     });
@@ -170,8 +171,9 @@
         l.setStyleName("gerrit-ContributorAgreement-AlreadySubmitted");
         radios.add(l);
       } else {
-        r.addClickListener(new ClickListener() {
-          public void onClick(final Widget sender) {
+        r.addClickHandler(new ClickHandler() {
+          @Override
+          public void onClick(final ClickEvent event) {
             showCLA(cla);
           }
         });
diff --git a/src/main/java/com/google/gerrit/client/account/PreferencePanel.java b/src/main/java/com/google/gerrit/client/account/PreferencePanel.java
index 4f0ca6d..8ecc4fa 100644
--- a/src/main/java/com/google/gerrit/client/account/PreferencePanel.java
+++ b/src/main/java/com/google/gerrit/client/account/PreferencePanel.java
@@ -18,15 +18,16 @@
 import com.google.gerrit.client.reviewdb.Account;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.i18n.client.LocaleInfo;
-import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwtjsonrpc.client.VoidResult;
 
 class PreferencePanel extends Composite {
@@ -39,9 +40,10 @@
     final FlowPanel body = new FlowPanel();
 
     showSiteHeader = new CheckBox(Util.C.showSiteHeader());
-    showSiteHeader.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
-        final boolean val = showSiteHeader.isChecked();
+    showSiteHeader.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
+        final boolean val = showSiteHeader.getValue();
         Util.ACCOUNT_SVC.changeShowSiteHeader(val,
             new GerritCallback<VoidResult>() {
               public void onSuccess(final VoidResult result) {
@@ -51,7 +53,7 @@
 
               @Override
               public void onFailure(final Throwable caught) {
-                showSiteHeader.setChecked(!val);
+                showSiteHeader.setValue(!val);
                 super.onFailure(caught);
               }
             });
@@ -68,8 +70,9 @@
       }
       defaultContext.addItem(label, String.valueOf(v));
     }
-    defaultContext.addChangeListener(new ChangeListener() {
-      public void onChange(Widget sender) {
+    defaultContext.addChangeHandler(new ChangeHandler() {
+      @Override
+      public void onChange(final ChangeEvent event) {
         final int idx = defaultContext.getSelectedIndex();
         if (idx < 0) {
           return;
@@ -128,7 +131,7 @@
   }
 
   void display(final Account account) {
-    showSiteHeader.setChecked(account.isShowSiteHeader());
+    showSiteHeader.setValue(account.isShowSiteHeader());
     setDefaultContext(account.getDefaultContext());
   }
 
diff --git a/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java b/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java
index 7ebd933..e2bad10 100644
--- a/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java
+++ b/src/main/java/com/google/gerrit/client/account/ProjectWatchPanel.java
@@ -19,19 +19,22 @@
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gerrit.client.ui.ProjectNameSuggestOracle;
 import com.google.gerrit.client.ui.ProjectOpenLink;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FocusListenerAdapter;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
 import com.google.gwt.user.client.ui.SuggestBox;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtjsonrpc.client.VoidResult;
 
 import java.util.HashSet;
@@ -56,17 +59,18 @@
       box.setVisibleLength(50);
       box.setText(Util.C.defaultProjectName());
       box.addStyleName("gerrit-InputFieldTypeHint");
-      box.addFocusListener(new FocusListenerAdapter() {
+      box.addFocusHandler(new FocusHandler() {
         @Override
-        public void onFocus(Widget sender) {
+        public void onFocus(FocusEvent event) {
           if (Util.C.defaultProjectName().equals(box.getText())) {
             box.setText("");
             box.removeStyleName("gerrit-InputFieldTypeHint");
           }
         }
-
+      });
+      box.addBlurHandler(new BlurHandler() {
         @Override
-        public void onLostFocus(Widget sender) {
+        public void onBlur(BlurEvent event) {
           if ("".equals(box.getText())) {
             box.setText(Util.C.defaultProjectName());
             box.addStyleName("gerrit-InputFieldTypeHint");
@@ -76,8 +80,9 @@
       fp.add(nameTxt);
 
       addNew = new Button(Util.C.buttonWatchProject());
-      addNew.addClickListener(new ClickListener() {
-        public void onClick(final Widget sender) {
+      addNew.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
           doAddNew();
         }
       });
@@ -90,8 +95,9 @@
     {
       final FlowPanel fp = new FlowPanel();
       delSel = new Button(Util.C.buttonDeleteSshKey());
-      delSel.addClickListener(new ClickListener() {
-        public void onClick(final Widget sender) {
+      delSel.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
           watches.deleteChecked();
         }
       });
@@ -149,19 +155,23 @@
       table.setText(0, 2, com.google.gerrit.client.changes.Util.C
           .changeTableColumnProject());
       table.setText(0, 3, Util.C.watchedProjectColumnEmailNotifications());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          switch (cell) {
-            case 1:
-            case 3:
-              // Don't do anything, these cells also contain check boxes.
-              break;
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null) {
+            switch (cell.getCellIndex()) {
+              case 1:
+              case 3:
+                // Don't do anything, these cells also contain check boxes.
+                break;
 
-            default:
-              if (getRowItem(row) != null) {
-                movePointerTo(row);
-              }
-              break;
+              default:
+                if (getRowItem(cell.getRowIndex()) != null) {
+                  movePointerTo(cell.getRowIndex());
+                }
+                break;
+            }
           }
         }
       });
@@ -190,12 +200,12 @@
     }
 
     @Override
-    protected boolean onKeyPress(final char keyCode, final int modifiers) {
-      if (super.onKeyPress(keyCode, modifiers)) {
+    protected boolean onKeyPress(final KeyPressEvent event) {
+      if (super.onKeyPress(event)) {
         return true;
       }
-      if (modifiers == 0) {
-        switch (keyCode) {
+      if (!event.isAnyModifierKeyDown()) {
+        switch (event.getCharCode()) {
           case 's':
           case 'c':
             toggleCurrentRow();
@@ -212,7 +222,7 @@
 
     private void toggleCurrentRow() {
       final CheckBox cb = (CheckBox) table.getWidget(getCurrentRow(), 1);
-      cb.setChecked(!cb.isChecked());
+      cb.setValue(!cb.getValue());
     }
 
     void deleteChecked() {
@@ -220,7 +230,7 @@
           new HashSet<AccountProjectWatch.Key>();
       for (int row = 1; row < table.getRowCount(); row++) {
         final AccountProjectWatchInfo k = getRowItem(row);
-        if (k != null && ((CheckBox) table.getWidget(row, 1)).isChecked()) {
+        if (k != null && ((CheckBox) table.getWidget(row, 1)).getValue()) {
           ids.add(k.getWatch().getKey());
         }
       }
@@ -284,10 +294,11 @@
       table.setWidget(row, 2, new ProjectOpenLink(k.getProject().getNameKey()));
       {
         final CheckBox notifyNewChanges = new CheckBox();
-        notifyNewChanges.addClickListener(new ClickListener() {
-          public void onClick(final Widget sender) {
+        notifyNewChanges.addClickHandler(new ClickHandler() {
+          @Override
+          public void onClick(final ClickEvent event) {
             final boolean oldVal = k.getWatch().isNotifyNewChanges();
-            k.getWatch().setNotifyNewChanges(notifyNewChanges.isChecked());
+            k.getWatch().setNotifyNewChanges(notifyNewChanges.getValue());
             Util.ACCOUNT_SVC.updateProjectWatch(k.getWatch(),
                 new GerritCallback<VoidResult>() {
                   public void onSuccess(final VoidResult result) {
@@ -296,21 +307,22 @@
                   @Override
                   public void onFailure(final Throwable caught) {
                     k.getWatch().setNotifyNewChanges(oldVal);
-                    notifyNewChanges.setChecked(oldVal);
+                    notifyNewChanges.setValue(oldVal);
                     super.onFailure(caught);
                   }
                 });
           }
         });
-        notifyNewChanges.setChecked(k.getWatch().isNotifyNewChanges());
+        notifyNewChanges.setValue(k.getWatch().isNotifyNewChanges());
         table.setWidget(row, 3, notifyNewChanges);
       }
       {
         final CheckBox notifyAllComments = new CheckBox();
-        notifyAllComments.addClickListener(new ClickListener() {
-          public void onClick(final Widget sender) {
+        notifyAllComments.addClickHandler(new ClickHandler() {
+          @Override
+          public void onClick(final ClickEvent event) {
             final boolean oldVal = k.getWatch().isNotifyAllComments();
-            k.getWatch().setNotifyAllComments(notifyAllComments.isChecked());
+            k.getWatch().setNotifyAllComments(notifyAllComments.getValue());
             Util.ACCOUNT_SVC.updateProjectWatch(k.getWatch(),
                 new GerritCallback<VoidResult>() {
                   public void onSuccess(final VoidResult result) {
@@ -319,21 +331,23 @@
                   @Override
                   public void onFailure(final Throwable caught) {
                     k.getWatch().setNotifyAllComments(oldVal);
-                    notifyAllComments.setChecked(oldVal);
+                    notifyAllComments.setValue(oldVal);
                     super.onFailure(caught);
                   }
                 });
           }
         });
-        notifyAllComments.setChecked(k.getWatch().isNotifyAllComments());
+        notifyAllComments.setValue(k.getWatch().isNotifyAllComments());
         table.setWidget(row, 4, notifyAllComments);
       }
       {
         final CheckBox notifySubmittedChanges = new CheckBox();
-        notifySubmittedChanges.addClickListener(new ClickListener() {
-          public void onClick(final Widget sender) {
+        notifySubmittedChanges.addClickHandler(new ClickHandler() {
+          @Override
+          public void onClick(final ClickEvent event) {
             final boolean oldVal = k.getWatch().isNotifySubmittedChanges();
-            k.getWatch().setNotifySubmittedChanges(notifySubmittedChanges.isChecked());
+            k.getWatch().setNotifySubmittedChanges(
+                notifySubmittedChanges.getValue());
             Util.ACCOUNT_SVC.updateProjectWatch(k.getWatch(),
                 new GerritCallback<VoidResult>() {
                   public void onSuccess(final VoidResult result) {
@@ -342,13 +356,14 @@
                   @Override
                   public void onFailure(final Throwable caught) {
                     k.getWatch().setNotifySubmittedChanges(oldVal);
-                    notifySubmittedChanges.setChecked(oldVal);
+                    notifySubmittedChanges.setValue(oldVal);
                     super.onFailure(caught);
                   }
                 });
           }
         });
-        notifySubmittedChanges.setChecked(k.getWatch().isNotifySubmittedChanges());
+        notifySubmittedChanges
+            .setValue(k.getWatch().isNotifySubmittedChanges());
         table.setWidget(row, 5, notifySubmittedChanges);
       }
 
diff --git a/src/main/java/com/google/gerrit/client/account/SshKeyPanel.java b/src/main/java/com/google/gerrit/client/account/SshKeyPanel.java
index f499a46..dd610c3 100644
--- a/src/main/java/com/google/gerrit/client/account/SshKeyPanel.java
+++ b/src/main/java/com/google/gerrit/client/account/SshKeyPanel.java
@@ -25,12 +25,14 @@
 import com.google.gerrit.client.ui.SmallHeading;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.HTML;
@@ -38,12 +40,10 @@
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.RootPanel;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtjsonrpc.client.RemoteJsonException;
 import com.google.gwtjsonrpc.client.VoidResult;
 
@@ -67,14 +67,15 @@
   private TextArea addTxt;
   private Button delSel;
 
-  private Panel serverKeys;  
+  private Panel serverKeys;
 
   SshKeyPanel() {
     final FlowPanel body = new FlowPanel();
 
     showAddKeyBlock = new Button(Util.C.buttonShowAddSshKey());
-    showAddKeyBlock.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    showAddKeyBlock.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         showAddKeyBlock(true);
       }
     });
@@ -84,8 +85,9 @@
     {
       final FlowPanel fp = new FlowPanel();
       delSel = new Button(Util.C.buttonDeleteSshKey());
-      delSel.addClickListener(new ClickListener() {
-        public void onClick(final Widget sender) {
+      delSel.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
           keys.deleteChecked();
         }
       });
@@ -110,8 +112,9 @@
     addKeyBlock.add(buttons);
 
     clearNew = new Button(Util.C.buttonClearSshKeyInput());
-    clearNew.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    clearNew.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         addTxt.setText("");
         addTxt.setFocus(true);
       }
@@ -119,8 +122,9 @@
     buttons.add(clearNew);
 
     browse = new Button(Util.C.buttonOpenSshKey());
-    browse.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    browse.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doBrowse();
       }
     });
@@ -128,16 +132,18 @@
     buttons.add(browse);
 
     addNew = new Button(Util.C.buttonAddSshKey());
-    addNew.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    addNew.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doAddNew();
       }
     });
     buttons.add(addNew);
 
     closeAddKeyBlock = new Button(Util.C.buttonCloseAddSshKey());
-    closeAddKeyBlock.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    closeAddKeyBlock.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         showAddKeyBlock(false);
       }
     });
@@ -310,10 +316,13 @@
       table.setText(0, 5, Util.C.sshKeyComment());
       table.setText(0, 6, Util.C.sshKeyLastUsed());
       table.setText(0, 7, Util.C.sshKeyStored());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
@@ -334,12 +343,12 @@
     }
 
     @Override
-    protected boolean onKeyPress(final char keyCode, final int modifiers) {
-      if (super.onKeyPress(keyCode, modifiers)) {
+    protected boolean onKeyPress(final KeyPressEvent event) {
+      if (super.onKeyPress(event)) {
         return true;
       }
-      if (modifiers == 0) {
-        switch (keyCode) {
+      if (!event.isAnyModifierKeyDown()) {
+        switch (event.getCharCode()) {
           case 's':
           case 'c':
             toggleCurrentRow();
@@ -356,14 +365,14 @@
 
     private void toggleCurrentRow() {
       final CheckBox cb = (CheckBox) table.getWidget(getCurrentRow(), 1);
-      cb.setChecked(!cb.isChecked());
+      cb.setValue(!cb.getValue());
     }
 
     void deleteChecked() {
       final HashSet<AccountSshKey.Id> ids = new HashSet<AccountSshKey.Id>();
       for (int row = 1; row < table.getRowCount(); row++) {
         final AccountSshKey k = getRowItem(row);
-        if (k != null && ((CheckBox) table.getWidget(row, 1)).isChecked()) {
+        if (k != null && ((CheckBox) table.getWidget(row, 1)).getValue()) {
           ids.add(k.getKey());
         }
       }
diff --git a/src/main/java/com/google/gerrit/client/admin/AccountGroupScreen.java b/src/main/java/com/google/gerrit/client/admin/AccountGroupScreen.java
index 7c940b94..f2a3964 100644
--- a/src/main/java/com/google/gerrit/client/admin/AccountGroupScreen.java
+++ b/src/main/java/com/google/gerrit/client/admin/AccountGroupScreen.java
@@ -27,20 +27,20 @@
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gerrit.client.ui.SmallHeading;
 import com.google.gerrit.client.ui.TextSaveButtonListener;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
 import com.google.gwt.user.client.ui.SuggestBox;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtjsonrpc.client.VoidResult;
 
 import java.util.HashSet;
@@ -70,7 +70,7 @@
   }
 
   @Override
-  public void onLoad() {   
+  public void onLoad() {
     super.onLoad();
     Util.GROUP_SVC.groupDetail(groupId,
         new ScreenLoadCallback<AccountGroupDetail>(this) {
@@ -98,8 +98,9 @@
 
     saveName = new Button(Util.C.buttonRenameGroup());
     saveName.setEnabled(false);
-    saveName.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    saveName.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         final String newName = groupNameTxt.getText().trim();
         Util.GROUP_SVC.renameGroup(groupId, newName,
             new GerritCallback<VoidResult>() {
@@ -127,8 +128,9 @@
 
     saveOwner = new Button(Util.C.buttonChangeGroupOwner());
     saveOwner.setEnabled(false);
-    saveOwner.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    saveOwner.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         final String newOwner = ownerTxt.getText().trim();
         if (newOwner.length() > 0) {
           Util.GROUP_SVC.changeGroupOwner(groupId, newOwner,
@@ -158,8 +160,9 @@
 
     saveDesc = new Button(Util.C.buttonSaveDescription());
     saveDesc.setEnabled(false);
-    saveDesc.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    saveDesc.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         final String txt = descTxt.getText().trim();
         Util.GROUP_SVC.changeGroupDescription(groupId, txt,
             new GerritCallback<VoidResult>() {
@@ -177,9 +180,10 @@
 
   private void initMemberList() {
     addMemberBox = new AddMemberBox();
-    
-    addMemberBox.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+
+    addMemberBox.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doAddNew();
       }
     });
@@ -187,8 +191,9 @@
     members = new MemberTable();
 
     delMember = new Button(Util.C.buttonDeleteGroupMembers());
-    delMember.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    delMember.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         members.deleteChecked();
       }
     });
@@ -253,10 +258,13 @@
     MemberTable() {
       table.setText(0, 2, Util.C.columnMember());
       table.setText(0, 3, Util.C.columnEmailAddress());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
@@ -273,12 +281,12 @@
     }
 
     @Override
-    protected boolean onKeyPress(final char keyCode, final int modifiers) {
-      if (super.onKeyPress(keyCode, modifiers)) {
+    protected boolean onKeyPress(final KeyPressEvent event) {
+      if (super.onKeyPress(event)) {
         return true;
       }
-      if (modifiers == 0) {
-        switch (keyCode) {
+      if (!event.isAnyModifierKeyDown()) {
+        switch (event.getCharCode()) {
           case 's':
           case 'c':
             toggleCurrentRow();
@@ -295,7 +303,7 @@
 
     private void toggleCurrentRow() {
       final CheckBox cb = (CheckBox) table.getWidget(getCurrentRow(), 1);
-      cb.setChecked(!cb.isChecked());
+      cb.setValue(!cb.getValue());
     }
 
     void deleteChecked() {
@@ -303,7 +311,7 @@
           new HashSet<AccountGroupMember.Key>();
       for (int row = 1; row < table.getRowCount(); row++) {
         final AccountGroupMember k = getRowItem(row);
-        if (k != null && ((CheckBox) table.getWidget(row, 1)).isChecked()) {
+        if (k != null && ((CheckBox) table.getWidget(row, 1)).getValue()) {
           ids.add(k.getKey());
         }
       }
diff --git a/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java b/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java
index b15acc6..871a8aa 100644
--- a/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java
+++ b/src/main/java/com/google/gerrit/client/admin/GroupListScreen.java
@@ -21,16 +21,15 @@
 import com.google.gerrit.client.ui.AccountScreen;
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Hyperlink;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 
 import java.util.List;
 
@@ -70,8 +69,9 @@
     fp.add(addTxt);
 
     addNew = new Button(Util.C.buttonCreateGroup());
-    addNew.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    addNew.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doCreateGroup();
       }
     });
@@ -96,10 +96,13 @@
     GroupTable() {
       table.setText(0, 1, Util.C.columnGroupName());
       table.setText(0, 2, Util.C.columnGroupDescription());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
diff --git a/src/main/java/com/google/gerrit/client/admin/ProjectAdminScreen.java b/src/main/java/com/google/gerrit/client/admin/ProjectAdminScreen.java
index 644be9a..d069bb9 100644
--- a/src/main/java/com/google/gerrit/client/admin/ProjectAdminScreen.java
+++ b/src/main/java/com/google/gerrit/client/admin/ProjectAdminScreen.java
@@ -20,9 +20,9 @@
 import com.google.gerrit.client.reviewdb.ProjectRight;
 import com.google.gerrit.client.rpc.ScreenLoadCallback;
 import com.google.gerrit.client.ui.AccountScreen;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
 import com.google.gwt.user.client.ui.LazyPanel;
-import com.google.gwt.user.client.ui.SourcesTabEvents;
-import com.google.gwt.user.client.ui.TabListener;
 import com.google.gwt.user.client.ui.TabPanel;
 
 import java.util.ArrayList;
@@ -91,13 +91,10 @@
     }, Util.C.projectAdminTabAccess());
     tabTokens.add(Link.toProjectAdmin(projectId, ACCESS_TAB));
 
-    tabs.addTabListener(new TabListener() {
-      public boolean onBeforeTabSelected(SourcesTabEvents sender, int tabIndex) {
-        return true;
-      }
-
-      public void onTabSelected(SourcesTabEvents sender, int tabIndex) {
-        Gerrit.display(tabTokens.get(tabIndex), false);
+    tabs.addSelectionHandler(new SelectionHandler<Integer>() {
+      @Override
+      public void onSelection(final SelectionEvent<Integer> event) {
+        Gerrit.display(tabTokens.get(event.getSelectedItem()), false);
       }
     });
   }
diff --git a/src/main/java/com/google/gerrit/client/admin/ProjectBranchesPanel.java b/src/main/java/com/google/gerrit/client/admin/ProjectBranchesPanel.java
index f84fd44..ef911b0 100644
--- a/src/main/java/com/google/gerrit/client/admin/ProjectBranchesPanel.java
+++ b/src/main/java/com/google/gerrit/client/admin/ProjectBranchesPanel.java
@@ -22,20 +22,23 @@
 import com.google.gerrit.client.rpc.InvalidNameException;
 import com.google.gerrit.client.rpc.InvalidRevisionException;
 import com.google.gerrit.client.ui.FancyFlexTable;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FocusListenerAdapter;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtjsonrpc.client.RemoteJsonException;
 
 import java.util.HashSet;
@@ -91,17 +94,18 @@
     nameTxtBox.setVisibleLength(50);
     nameTxtBox.setText(Util.C.defaultBranchName());
     nameTxtBox.addStyleName("gerrit-InputFieldTypeHint");
-    nameTxtBox.addFocusListener(new FocusListenerAdapter() {
+    nameTxtBox.addFocusHandler(new FocusHandler() {
       @Override
-      public void onFocus(Widget sender) {
+      public void onFocus(FocusEvent event) {
         if (Util.C.defaultBranchName().equals(nameTxtBox.getText())) {
           nameTxtBox.setText("");
           nameTxtBox.removeStyleName("gerrit-InputFieldTypeHint");
         }
       }
-
+    });
+    nameTxtBox.addBlurHandler(new BlurHandler() {
       @Override
-      public void onLostFocus(Widget sender) {
+      public void onBlur(BlurEvent event) {
         if ("".equals(nameTxtBox.getText())) {
           nameTxtBox.setText(Util.C.defaultBranchName());
           nameTxtBox.addStyleName("gerrit-InputFieldTypeHint");
@@ -115,17 +119,18 @@
     irevTxtBox.setVisibleLength(50);
     irevTxtBox.setText(Util.C.defaultRevisionSpec());
     irevTxtBox.addStyleName("gerrit-InputFieldTypeHint");
-    irevTxtBox.addFocusListener(new FocusListenerAdapter() {
+    irevTxtBox.addFocusHandler(new FocusHandler() {
       @Override
-      public void onFocus(Widget sender) {
+      public void onFocus(FocusEvent event) {
         if (Util.C.defaultRevisionSpec().equals(irevTxtBox.getText())) {
           irevTxtBox.setText("");
           irevTxtBox.removeStyleName("gerrit-InputFieldTypeHint");
         }
       }
-
+    });
+    irevTxtBox.addBlurHandler(new BlurHandler() {
       @Override
-      public void onLostFocus(Widget sender) {
+      public void onBlur(BlurEvent event) {
         if ("".equals(irevTxtBox.getText())) {
           irevTxtBox.setText(Util.C.defaultRevisionSpec());
           irevTxtBox.addStyleName("gerrit-InputFieldTypeHint");
@@ -136,8 +141,9 @@
     addGrid.setWidget(1, 1, irevTxtBox);
 
     addBranch = new Button(Util.C.buttonAddBranch());
-    addBranch.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    addBranch.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doAddNewBranch();
       }
     });
@@ -147,8 +153,9 @@
     branches = new BranchesTable();
 
     delBranch = new Button(Util.C.buttonDeleteBranch());
-    delBranch.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    delBranch.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         branches.deleteChecked();
       }
     });
@@ -208,10 +215,13 @@
     BranchesTable() {
       table.setText(0, 2, Util.C.columnBranchName());
       table.setHTML(0, 3, "&nbsp;");
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
@@ -228,12 +238,12 @@
     }
 
     @Override
-    protected boolean onKeyPress(final char keyCode, final int modifiers) {
-      if (super.onKeyPress(keyCode, modifiers)) {
+    protected boolean onKeyPress(final KeyPressEvent event) {
+      if (super.onKeyPress(event)) {
         return true;
       }
-      if (modifiers == 0) {
-        switch (keyCode) {
+      if (!event.isAnyModifierKeyDown()) {
+        switch (event.getCharCode()) {
           case 's':
           case 'c':
             toggleCurrentRow();
@@ -250,7 +260,7 @@
 
     private void toggleCurrentRow() {
       final CheckBox cb = (CheckBox) table.getWidget(getCurrentRow(), 1);
-      cb.setChecked(!cb.isChecked());
+      cb.setValue(!cb.getValue());
     }
 
     void deleteChecked() {
@@ -258,7 +268,7 @@
       for (int row = 1; row < table.getRowCount(); row++) {
         final Branch k = getRowItem(row);
         if (k != null && table.getWidget(row, 1) instanceof CheckBox
-            && ((CheckBox) table.getWidget(row, 1)).isChecked()) {
+            && ((CheckBox) table.getWidget(row, 1)).getValue()) {
           ids.add(k.getNameKey());
         }
       }
diff --git a/src/main/java/com/google/gerrit/client/admin/ProjectInfoPanel.java b/src/main/java/com/google/gerrit/client/admin/ProjectInfoPanel.java
index 35350d5..c49dd95 100644
--- a/src/main/java/com/google/gerrit/client/admin/ProjectInfoPanel.java
+++ b/src/main/java/com/google/gerrit/client/admin/ProjectInfoPanel.java
@@ -21,9 +21,11 @@
 import com.google.gerrit.client.ui.AccountGroupSuggestOracle;
 import com.google.gerrit.client.ui.SmallHeading;
 import com.google.gerrit.client.ui.TextSaveButtonListener;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+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.ChangeListener;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.ListBox;
@@ -32,7 +34,6 @@
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.user.client.ui.VerticalPanel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwtjsonrpc.client.VoidResult;
 
 public class ProjectInfoPanel extends Composite {
@@ -94,8 +95,9 @@
     ownerPanel.add(ownerTxt);
 
     saveOwner = new Button(Util.C.buttonChangeGroupOwner());
-    saveOwner.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    saveOwner.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         final String newOwner = ownerTxt.getText().trim();
         if (newOwner.length() > 0) {
           Util.PROJECT_SVC.changeProjectOwner(projectId, newOwner,
@@ -123,8 +125,9 @@
     vp.add(descTxt);
 
     saveDesc = new Button(Util.C.buttonSaveDescription());
-    saveDesc.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    saveDesc.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         final String txt = descTxt.getText().trim();
         Util.PROJECT_SVC.changeProjectDescription(projectId, txt,
             new GerritCallback<VoidResult>() {
@@ -148,8 +151,9 @@
     for (final Project.SubmitType type : Project.SubmitType.values()) {
       submitType.addItem(Util.toLongString(type), type.name());
     }
-    submitType.addChangeListener(new ChangeListener() {
-      public void onChange(Widget sender) {
+    submitType.addChangeHandler(new ChangeHandler() {
+      @Override
+      public void onChange(final ChangeEvent event) {
         final int i = submitType.getSelectedIndex();
         if (i < 0) {
           return;
diff --git a/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java b/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
index 92ae5a2..a628aa1 100644
--- a/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
+++ b/src/main/java/com/google/gerrit/client/admin/ProjectListScreen.java
@@ -20,12 +20,13 @@
 import com.google.gerrit.client.ui.AccountScreen;
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Hyperlink;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 
 import java.util.List;
 
@@ -62,10 +63,13 @@
     ProjectTable() {
       table.setText(0, 1, Util.C.columnProjectName());
       table.setText(0, 2, Util.C.columnProjectDescription());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
diff --git a/src/main/java/com/google/gerrit/client/admin/ProjectRightsPanel.java b/src/main/java/com/google/gerrit/client/admin/ProjectRightsPanel.java
index f399c45..af5aac3 100644
--- a/src/main/java/com/google/gerrit/client/admin/ProjectRightsPanel.java
+++ b/src/main/java/com/google/gerrit/client/admin/ProjectRightsPanel.java
@@ -26,22 +26,26 @@
 import com.google.gerrit.client.ui.AccountGroupSuggestOracle;
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ChangeListener;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FocusListenerAdapter;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
 import com.google.gwt.user.client.ui.SuggestBox;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtexpui.safehtml.client.SafeHtml;
 import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
 import com.google.gwtjsonrpc.client.VoidResult;
@@ -106,8 +110,9 @@
     rangeMinBox = new ListBox();
     rangeMaxBox = new ListBox();
 
-    catBox.addChangeListener(new ChangeListener() {
-      public void onChange(Widget sender) {
+    catBox.addChangeHandler(new ChangeHandler() {
+      @Override
+      public void onChange(final ChangeEvent event) {
         populateRangeBoxes();
       }
     });
@@ -132,17 +137,18 @@
     nameTxtBox.setVisibleLength(50);
     nameTxtBox.setText(Util.C.defaultAccountGroupName());
     nameTxtBox.addStyleName("gerrit-InputFieldTypeHint");
-    nameTxtBox.addFocusListener(new FocusListenerAdapter() {
+    nameTxtBox.addFocusHandler(new FocusHandler() {
       @Override
-      public void onFocus(Widget sender) {
+      public void onFocus(FocusEvent event) {
         if (Util.C.defaultAccountGroupName().equals(nameTxtBox.getText())) {
           nameTxtBox.setText("");
           nameTxtBox.removeStyleName("gerrit-InputFieldTypeHint");
         }
       }
-
+    });
+    nameTxtBox.addBlurHandler(new BlurHandler() {
       @Override
-      public void onLostFocus(Widget sender) {
+      public void onBlur(BlurEvent event) {
         if ("".equals(nameTxtBox.getText())) {
           nameTxtBox.setText(Util.C.defaultAccountGroupName());
           nameTxtBox.addStyleName("gerrit-InputFieldTypeHint");
@@ -159,8 +165,9 @@
     addGrid.setWidget(3, 1, rangeMaxBox);
 
     addRight = new Button(Util.C.buttonAddProjectRight());
-    addRight.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    addRight.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doAddNewRight();
       }
     });
@@ -170,8 +177,9 @@
     rights = new RightsTable();
 
     delRight = new Button(Util.C.buttonDeleteGroupMembers());
-    delRight.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    delRight.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         rights.deleteChecked();
       }
     });
@@ -303,10 +311,13 @@
       table.setText(0, 2, Util.C.columnApprovalCategory());
       table.setText(0, 3, Util.C.columnGroupName());
       table.setText(0, 4, Util.C.columnRightRange());
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (cell != 1 && getRowItem(row) != null) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getCellIndex() != 1
+              && getRowItem(cell.getRowIndex()) != null) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
@@ -324,12 +335,12 @@
     }
 
     @Override
-    protected boolean onKeyPress(final char keyCode, final int modifiers) {
-      if (super.onKeyPress(keyCode, modifiers)) {
+    protected boolean onKeyPress(final KeyPressEvent event) {
+      if (super.onKeyPress(event)) {
         return true;
       }
-      if (modifiers == 0) {
-        switch (keyCode) {
+      if (!event.isAnyModifierKeyDown()) {
+        switch (event.getCharCode()) {
           case 's':
           case 'c':
             toggleCurrentRow();
@@ -346,7 +357,7 @@
 
     private void toggleCurrentRow() {
       final CheckBox cb = (CheckBox) table.getWidget(getCurrentRow(), 1);
-      cb.setChecked(!cb.isChecked());
+      cb.setValue(!cb.getValue());
     }
 
     void deleteChecked() {
@@ -354,7 +365,7 @@
       for (int row = 1; row < table.getRowCount(); row++) {
         final ProjectRight k = getRowItem(row);
         if (k != null && table.getWidget(row, 1) instanceof CheckBox
-            && ((CheckBox) table.getWidget(row, 1)).isChecked()) {
+            && ((CheckBox) table.getWidget(row, 1)).getValue()) {
           ids.add(k.getKey());
         }
       }
diff --git a/src/main/java/com/google/gerrit/client/changes/AbandonChangeDialog.java b/src/main/java/com/google/gerrit/client/changes/AbandonChangeDialog.java
index b0d419b..480d062 100644
--- a/src/main/java/com/google/gerrit/client/changes/AbandonChangeDialog.java
+++ b/src/main/java/com/google/gerrit/client/changes/AbandonChangeDialog.java
@@ -18,13 +18,13 @@
 import com.google.gerrit.client.reviewdb.PatchSet;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.TextArea;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwtexpui.user.client.AutoCenterDialogBox;
 import com.google.gwtjsonrpc.client.VoidResult;
 
@@ -66,8 +66,9 @@
     panel.add(buttonPanel);
 
     sendButton = new Button(Util.C.buttonAbandonChangeSend());
-    sendButton.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    sendButton.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         sendButton.setEnabled(false);
         PatchUtil.DETAIL_SVC.abandonChange(psid, message.getText().trim(),
             new GerritCallback<VoidResult>() {
@@ -89,8 +90,9 @@
     buttonPanel.add(sendButton);
 
     cancelButton = new Button(Util.C.buttonAbandonChangeCancel());
-    cancelButton.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    cancelButton.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         hide();
       }
     });
diff --git a/src/main/java/com/google/gerrit/client/changes/ApprovalTable.java b/src/main/java/com/google/gerrit/client/changes/ApprovalTable.java
index d16fcf9..898ee21 100644
--- a/src/main/java/com/google/gerrit/client/changes/ApprovalTable.java
+++ b/src/main/java/com/google/gerrit/client/changes/ApprovalTable.java
@@ -30,13 +30,13 @@
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.AccountDashboardLink;
 import com.google.gerrit.client.ui.AddMemberBox;
-import com.google.gwt.user.client.ui.ClickListener;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
 import com.google.gwtjsonrpc.client.VoidResult;
 
@@ -70,8 +70,9 @@
     addReviewer.setStyleName("gerrit-Change-AddReviewer");
     addMemberBox = new AddMemberBox();
     addMemberBox.setAddButtonText(Util.C.approvalTableAddReviewer());
-    addMemberBox.addClickListener(new ClickListener() {
-      public void onClick(final Widget sender) {
+    addMemberBox.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         doAddReviewer();
       }
     });
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java b/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
index 2af18b0..6793efa 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java
@@ -31,9 +31,10 @@
 import com.google.gerrit.client.ui.LinkMenuBar;
 import com.google.gerrit.client.ui.RefreshListener;
 import com.google.gerrit.client.ui.Screen;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.i18n.client.LocaleInfo;
 import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.DisclosurePanel;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Image;
@@ -127,8 +128,9 @@
     starChange = Gerrit.ICONS.starOpen().createImage();
     starChange.setStyleName("gerrit-ChangeScreen-StarIcon");
     starChange.setVisible(Gerrit.isSignedIn());
-    starChange.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    starChange.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         final boolean prior = starred;
         setStarred(!prior);
 
@@ -261,7 +263,7 @@
           }
         });
       } else {
-        panel.addEventHandler(psp);
+        panel.addOpenHandler(psp);
       }
       add(panel);
       patchSetPanels.add(panel);
diff --git a/src/main/java/com/google/gerrit/client/changes/ChangeTable.java b/src/main/java/com/google/gerrit/client/changes/ChangeTable.java
index 66a570e..d0800ae 100644
--- a/src/main/java/com/google/gerrit/client/changes/ChangeTable.java
+++ b/src/main/java/com/google/gerrit/client/changes/ChangeTable.java
@@ -28,13 +28,15 @@
 import com.google.gerrit.client.ui.ChangeLink;
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gerrit.client.ui.ProjectOpenLink;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
 import com.google.gwtjsonrpc.client.VoidResult;
 
@@ -78,14 +80,19 @@
       fmt.addStyleName(0, i, S_DATA_HEADER);
     }
 
-    table.addTableListener(new TableListener() {
-      public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-        if (cell == C_STAR) {
-          onStarClick(row);
-        } else if (cell == C_OWNER) {
+    table.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
+        final Cell cell = table.getCellForEvent(event);
+        if (cell == null) {
+          return;
+        }
+        if (cell.getCellIndex() == C_STAR) {
+          onStarClick(cell.getRowIndex());
+        } else if (cell.getCellIndex() == C_OWNER) {
           // Don't do anything.
-        } else if (getRowItem(row) != null) {
-          movePointerTo(row);
+        } else if (getRowItem(cell.getRowIndex()) != null) {
+          movePointerTo(cell.getRowIndex());
         }
       }
     });
@@ -155,12 +162,12 @@
   }
 
   @Override
-  protected boolean onKeyPress(final char keyCode, final int modifiers) {
-    if (super.onKeyPress(keyCode, modifiers)) {
+  protected boolean onKeyPress(final KeyPressEvent event) {
+    if (super.onKeyPress(event)) {
       return true;
     }
-    if (modifiers == 0) {
-      switch (keyCode) {
+    if (!event.isAnyModifierKeyDown()) {
+      switch (event.getCharCode()) {
         case 's':
           onStarClick(getCurrentRow());
           return true;
diff --git a/src/main/java/com/google/gerrit/client/changes/PatchSetPanel.java b/src/main/java/com/google/gerrit/client/changes/PatchSetPanel.java
index 25099c2..4547383 100644
--- a/src/main/java/com/google/gerrit/client/changes/PatchSetPanel.java
+++ b/src/main/java/com/google/gerrit/client/changes/PatchSetPanel.java
@@ -32,17 +32,18 @@
 import com.google.gerrit.client.rpc.Common;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.RefreshListener;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.logical.shared.OpenEvent;
+import com.google.gwt.event.logical.shared.OpenHandler;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.DisclosureEvent;
-import com.google.gwt.user.client.ui.DisclosureHandler;
+import com.google.gwt.user.client.ui.DisclosurePanel;
 import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.Grid;
 import com.google.gwt.user.client.ui.Panel;
-import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
 import com.google.gwtexpui.clippy.client.CopyableLabel;
 import com.google.gwtexpui.safehtml.client.SafeHtml;
@@ -53,7 +54,7 @@
 import java.util.List;
 import java.util.Set;
 
-class PatchSetPanel extends Composite implements DisclosureHandler {
+class PatchSetPanel extends Composite implements OpenHandler<DisclosurePanel> {
   private static final int R_AUTHOR = 0;
   private static final int R_COMMITTER = 1;
   private static final int R_DOWNLOAD = 2;
@@ -295,8 +296,9 @@
       final Button b =
           new Button(Util.M.patchSetAction(at.getCategory().getName(), detail
               .getPatchSet().getPatchSetId()));
-      b.addClickListener(new ClickListener() {
-        public void onClick(Widget sender) {
+      b.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
           b.setEnabled(false);
           Util.MANAGE_SVC.patchSetAction(max.getId(), patchSet.getId(),
               new GerritCallback<VoidResult>() {
@@ -319,8 +321,9 @@
 
   private void populateAbandonAction() {
     final Button b = new Button(Util.C.buttonAbandonChangeBegin());
-    b.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    b.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         new AbandonChangeDialog(patchSet.getId(), new AsyncCallback<Object>() {
           public void onSuccess(Object result) {
             actionsPanel.remove(b);
@@ -337,8 +340,9 @@
 
   private void populateCommentAction() {
     final Button b = new Button(Util.C.buttonPublishCommentsBegin());
-    b.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    b.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         Gerrit.display("change,publish," + patchSet.getId().toString(),
             new PublishCommentScreen(patchSet.getId()));
       }
@@ -346,7 +350,8 @@
     actionsPanel.add(b);
   }
 
-  public void onOpen(final DisclosureEvent event) {
+  @Override
+  public void onOpen(final OpenEvent<DisclosurePanel> event) {
     if (infoTable == null) {
       Util.DETAIL_SVC.patchSetDetail(patchSet.getId(),
           new GerritCallback<PatchSetDetail>() {
@@ -357,9 +362,6 @@
     }
   }
 
-  public void onClose(final DisclosureEvent event) {
-  }
-
   private void initRow(final int row, final String name) {
     infoTable.setText(row, 0, name);
     infoTable.getCellFormatter().addStyleName(row, 0, "header");
diff --git a/src/main/java/com/google/gerrit/client/changes/PatchTable.java b/src/main/java/com/google/gerrit/client/changes/PatchTable.java
index 5df27d3..f8dc44b 100644
--- a/src/main/java/com/google/gerrit/client/changes/PatchTable.java
+++ b/src/main/java/com/google/gerrit/client/changes/PatchTable.java
@@ -19,13 +19,14 @@
 import com.google.gerrit.client.reviewdb.PatchSet;
 import com.google.gerrit.client.ui.FancyFlexTable;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.IncrementalCommand;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtexpui.progress.client.ProgressBar;
 import com.google.gwtexpui.safehtml.client.SafeHtml;
 import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
@@ -60,10 +61,12 @@
 
   private class MyTable extends FancyFlexTable<Patch> {
     MyTable() {
-      table.addTableListener(new TableListener() {
-        public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-          if (row > 0) {
-            movePointerTo(row);
+      table.addClickHandler(new ClickHandler() {
+        @Override
+        public void onClick(final ClickEvent event) {
+          final Cell cell = table.getCellForEvent(event);
+          if (cell != null && cell.getRowIndex() > 0) {
+            movePointerTo(cell.getRowIndex());
           }
         }
       });
diff --git a/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java b/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
index 174fc26..24f3a2f 100644
--- a/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
+++ b/src/main/java/com/google/gerrit/client/changes/PublishCommentScreen.java
@@ -32,22 +32,21 @@
 import com.google.gerrit.client.ui.AccountScreen;
 import com.google.gerrit.client.ui.PatchLink;
 import com.google.gerrit.client.ui.SmallHeading;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FormHandler;
 import com.google.gwt.user.client.ui.FormPanel;
-import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
-import com.google.gwt.user.client.ui.FormSubmitEvent;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.RadioButton;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
 import com.google.gwtexpui.safehtml.client.SafeHtml;
 import com.google.gwtjsonrpc.client.VoidResult;
 
@@ -60,8 +59,7 @@
 import java.util.Map;
 import java.util.Set;
 
-public class PublishCommentScreen extends AccountScreen implements
-    ClickListener {
+public class PublishCommentScreen extends AccountScreen implements ClickHandler {
   private static SavedState lastState;
 
   private final PatchSet.Id patchSetId;
@@ -92,12 +90,10 @@
     final FormPanel form = new FormPanel();
     final FlowPanel body = new FlowPanel();
     form.setWidget(body);
-    form.addFormHandler(new FormHandler() {
-      public void onSubmit(FormSubmitEvent event) {
-        event.setCancelled(true);
-      }
-
-      public void onSubmitComplete(FormSubmitCompleteEvent event) {
+    form.addSubmitHandler(new FormPanel.SubmitHandler() {
+      @Override
+      public void onSubmit(final SubmitEvent event) {
+        event.cancel();
       }
     });
     add(form);
@@ -114,11 +110,11 @@
     body.add(buttonRow);
 
     send = new Button(Util.C.buttonPublishCommentsSend());
-    send.addClickListener(this);
+    send.addClickHandler(this);
     buttonRow.add(send);
 
     cancel = new Button(Util.C.buttonPublishCommentsCancel());
-    cancel.addClickListener(this);
+    cancel.addClickHandler(this);
     buttonRow.add(cancel);
   }
 
@@ -148,7 +144,9 @@
     }
   }
 
-  public void onClick(final Widget sender) {
+  @Override
+  public void onClick(final ClickEvent event) {
+    final Widget sender = (Widget) event.getSource();
     if (send == sender) {
       lastState = null;
       onSend();
@@ -214,10 +212,10 @@
 
       if (lastState != null && patchSetId.equals(lastState.patchSetId)
           && lastState.approvals.containsKey(buttonValue.getCategoryId())) {
-        b.setChecked(lastState.approvals.get(buttonValue.getCategoryId())
-            .equals(buttonValue));
+        b.setValue(lastState.approvals.get(buttonValue.getCategoryId()).equals(
+            buttonValue));
       } else {
-        b.setChecked(prior != null ? buttonValue.getValue() == prior.getValue()
+        b.setValue(prior != null ? buttonValue.getValue() == prior.getValue()
             : buttonValue.getValue() == 0);
       }
 
@@ -274,7 +272,7 @@
     final Map<ApprovalCategory.Id, ApprovalCategoryValue.Id> values =
         new HashMap<ApprovalCategory.Id, ApprovalCategoryValue.Id>();
     for (final ValueRadioButton b : approvalButtons) {
-      if (b.isChecked()) {
+      if (b.getValue()) {
         values.put(b.value.getCategoryId(), b.value.getId());
       }
     }
@@ -331,7 +329,7 @@
       message = p.message.getText();
       approvals = new HashMap<ApprovalCategory.Id, ApprovalCategoryValue>();
       for (final ValueRadioButton b : p.approvalButtons) {
-        if (b.isChecked()) {
+        if (b.getValue()) {
           approvals.put(b.value.getCategoryId(), b.value);
         }
       }
diff --git a/src/main/java/com/google/gerrit/client/openid/OpenIdLoginPanel.java b/src/main/java/com/google/gerrit/client/openid/OpenIdLoginPanel.java
index 11b711f..243c3a2 100644
--- a/src/main/java/com/google/gerrit/client/openid/OpenIdLoginPanel.java
+++ b/src/main/java/com/google/gerrit/client/openid/OpenIdLoginPanel.java
@@ -19,32 +19,32 @@
 import com.google.gerrit.client.ui.SmallHeading;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.FormElement;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
 import com.google.gwt.user.client.Cookies;
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.History;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.CheckBox;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FormHandler;
 import com.google.gwt.user.client.ui.FormPanel;
 import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
-import com.google.gwt.user.client.ui.FormSubmitEvent;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.Hidden;
 import com.google.gwt.user.client.ui.Image;
 import com.google.gwt.user.client.ui.InlineLabel;
-import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
 import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
 
 import java.util.Map;
 
-public class OpenIdLoginPanel extends Composite implements FormHandler {
+public class OpenIdLoginPanel extends Composite implements
+    FormPanel.SubmitHandler {
   private final SignInDialog.Mode mode;
   private final LoginIcons icons;
   private final FlowPanel panelWidget;
@@ -71,7 +71,7 @@
 
     form = new FormPanel();
     form.setMethod(FormPanel.METHOD_GET);
-    form.addFormHandler(this);
+    form.addSubmitHandler(this);
     form.add(formBody);
 
     redirectBody = new FlowPanel();
@@ -155,13 +155,12 @@
     providerId.setVisibleLength(60);
     providerId.setStyleName("gerrit-OpenID-openid_identifier");
     providerId.setTabIndex(0);
-    providerId.addKeyboardListener(new KeyboardListenerAdapter() {
+    providerId.addKeyPressHandler(new KeyPressHandler() {
       @Override
-      public void onKeyPress(Widget sender, char keyCode, int modifiers) {
-        if (keyCode == KEY_ENTER) {
-          final Event event = DOM.eventGetCurrentEvent();
-          DOM.eventCancelBubble(event, true);
-          DOM.eventPreventDefault(event);
+      public void onKeyPress(final KeyPressEvent event) {
+        if (event.getCharCode() == KeyCodes.KEY_ENTER) {
+          event.stopPropagation();
+          event.preventDefault();
           form.submit();
         }
       }
@@ -178,8 +177,9 @@
         login.setText(OpenIdUtil.C.buttonSignIn());
         break;
     }
-    login.addClickListener(new ClickListener() {
-      public void onClick(Widget sender) {
+    login.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         form.submit();
       }
     });
@@ -194,7 +194,7 @@
       final String last = Cookies.getCookie(OpenIdUtil.LASTID_COOKIE);
       if (last != null && !"".equals(last)) {
         providerId.setText(last);
-        rememberId.setChecked(true);
+        rememberId.setValue(true);
       }
     }
 
@@ -203,8 +203,9 @@
 
   private void link(final String identUrl, final String who,
       final AbstractImagePrototype icon) {
-    final ClickListener i = new ClickListener() {
-      public void onClick(Widget sender) {
+    final ClickHandler i = new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
         if (!discovering) {
           providerId.setText(identUrl);
           form.submit();
@@ -216,7 +217,7 @@
     line.addStyleName("gerrit-OpenID-directlink");
 
     final Image img = icon.createImage();
-    img.addClickListener(i);
+    img.addClickHandler(i);
     line.add(img);
 
     final InlineLabel lbl = new InlineLabel();
@@ -229,7 +230,7 @@
         lbl.setText(OpenIdUtil.M.signInWith(who));
         break;
     }
-    lbl.addClickListener(i);
+    lbl.addClickHandler(i);
     line.add(lbl);
 
     formBody.add(line);
@@ -277,8 +278,9 @@
     providerId.setFocus(true);
   }
 
-  public void onSubmit(final FormSubmitEvent event) {
-    event.setCancelled(true);
+  @Override
+  public void onSubmit(final SubmitEvent event) {
+    event.cancel();
 
     final String openidIdentifier = providerId.getText();
     if (openidIdentifier == null || openidIdentifier.equals("")) {
@@ -290,7 +292,7 @@
     enable(false);
     hideError();
 
-    final boolean remember = rememberId != null && rememberId.isChecked();
+    final boolean remember = rememberId != null && rememberId.getValue();
     final String token = History.getToken();
     OpenIdUtil.SVC.discover(openidIdentifier, mode, remember, token,
         new GerritCallback<DiscoveryResult>() {
diff --git a/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java b/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
index 2f298e6..61ebfad 100644
--- a/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
+++ b/src/main/java/com/google/gerrit/client/patches/AbstractPatchContentTable.java
@@ -25,12 +25,13 @@
 import com.google.gerrit.client.reviewdb.PatchSet;
 import com.google.gerrit.client.ui.ComplexDisclosurePanel;
 import com.google.gerrit.client.ui.FancyFlexTable;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.InlineLabel;
-import com.google.gwt.user.client.ui.KeyboardListener;
 import com.google.gwt.user.client.ui.Widget;
 
 import java.sql.Timestamp;
@@ -103,11 +104,11 @@
   }
 
   @Override
-  protected boolean onKeyPress(final char keyCode, final int modifiers) {
-    if (modifiers == 0) {
-      switch (keyCode) {
-        case KeyboardListener.KEY_UP:
-        case KeyboardListener.KEY_DOWN:
+  protected boolean onKeyPress(final KeyPressEvent event) {
+    if (!event.isAnyModifierKeyDown()) {
+      switch (event.getCharCode()) {
+        case KeyCodes.KEY_UP:
+        case KeyCodes.KEY_DOWN:
           return false;
 
         case 'c':
@@ -122,7 +123,7 @@
           return true;
       }
     }
-    return super.onKeyPress(keyCode, modifiers);
+    return super.onKeyPress(event);
   }
 
   @Override
diff --git a/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java b/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java
index f6513b5..89922d5 100644
--- a/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java
+++ b/src/main/java/com/google/gerrit/client/patches/CommentEditorPanel.java
@@ -17,18 +17,21 @@
 import com.google.gerrit.client.reviewdb.PatchLineComment;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.TextSaveButtonListener;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlexTable;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.HasFocus;
+import com.google.gwt.user.client.ui.Focusable;
 import com.google.gwt.user.client.ui.InlineLabel;
-import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.TextArea;
 import com.google.gwt.user.client.ui.Widget;
@@ -36,7 +39,7 @@
 
 import java.sql.Timestamp;
 
-class CommentEditorPanel extends Composite implements ClickListener {
+class CommentEditorPanel extends Composite implements ClickHandler {
   private static final int INITIAL_COLS = 60;
   private static final int INITIAL_LINES = 5;
   private static final int MAX_LINES = 30;
@@ -85,28 +88,30 @@
     text.setCharacterWidth(INITIAL_COLS);
     text.setVisibleLines(INITIAL_LINES);
     DOM.setElementPropertyBoolean(text.getElement(), "spellcheck", true);
-    text.addKeyboardListener(new KeyboardListenerAdapter() {
+    text.addKeyPressHandler(new KeyPressHandler() {
       @Override
-      public void onKeyPress(final Widget sender, final char kc, final int mod) {
-        DOM.eventCancelBubble(DOM.eventGetCurrentEvent(), true);
+      public void onKeyPress(final KeyPressEvent event) {
+        event.stopPropagation();
 
-        if (kc == KEY_ESCAPE && mod == 0 && isNew()) {
-          DOM.eventPreventDefault(DOM.eventGetCurrentEvent());
+        if (isNew() && event.getCharCode() == KeyCodes.KEY_ESCAPE
+            && !event.isAnyModifierKeyDown()) {
+          event.preventDefault();
           onDiscard();
           return;
         }
 
-        if ((mod & MODIFIER_CTRL) == MODIFIER_CTRL) {
-          switch (kc) {
+        if ((event.isControlKeyDown() || event.isMetaKeyDown())
+            && !event.isAltKeyDown() && !event.isShiftKeyDown()) {
+          switch (event.getCharCode()) {
             case 's':
-              DOM.eventPreventDefault(DOM.eventGetCurrentEvent());
+              event.preventDefault();
               onSave();
               return;
 
             case 'd':
-            case KEY_BACKSPACE:
-            case KEY_DELETE:
-              DOM.eventPreventDefault(DOM.eventGetCurrentEvent());
+            case KeyCodes.KEY_BACKSPACE:
+            case KeyCodes.KEY_DELETE:
+              event.preventDefault();
               if (isNew()) {
                 onDiscard();
               } else if (Window.confirm(PatchUtil.C.confirmDiscard())) {
@@ -129,24 +134,24 @@
 
     edit = new Button();
     edit.setText(PatchUtil.C.buttonEdit());
-    edit.addClickListener(this);
+    edit.addClickHandler(this);
     buttons.add(edit);
 
     save = new Button();
     save.setText(PatchUtil.C.buttonSave());
-    save.addClickListener(this);
+    save.addClickHandler(this);
     new TextSaveButtonListener(text, save);
     save.setEnabled(false);
     buttons.add(save);
 
     cancel = new Button();
     cancel.setText(PatchUtil.C.buttonCancel());
-    cancel.addClickListener(this);
+    cancel.addClickHandler(this);
     buttons.add(cancel);
 
     discard = new Button();
     discard.setText(PatchUtil.C.buttonDiscard());
-    discard.addClickListener(this);
+    discard.addClickHandler(this);
     buttons.add(discard);
 
     savedAt = new InlineLabel();
@@ -205,7 +210,9 @@
     return comment.getKey().get() == null;
   }
 
-  public void onClick(Widget sender) {
+  @Override
+  public void onClick(final ClickEvent event) {
+    final Widget sender = (Widget) event.getSource();
     if (sender == edit) {
       edit();
 
@@ -294,8 +301,8 @@
           AbstractPatchContentTable.destroyEditor(table, row, cell);
           Widget p = table;
           while (p != null) {
-            if (p instanceof HasFocus) {
-              ((HasFocus) p).setFocus(true);
+            if (p instanceof Focusable) {
+              ((Focusable) p).setFocus(true);
               break;
             }
             p = p.getParent();
diff --git a/src/main/java/com/google/gerrit/client/patches/HistoryTable.java b/src/main/java/com/google/gerrit/client/patches/HistoryTable.java
index 305c8aa..367e3a7 100644
--- a/src/main/java/com/google/gerrit/client/patches/HistoryTable.java
+++ b/src/main/java/com/google/gerrit/client/patches/HistoryTable.java
@@ -18,13 +18,15 @@
 import com.google.gerrit.client.reviewdb.Patch;
 import com.google.gerrit.client.reviewdb.PatchSet;
 import com.google.gerrit.client.ui.FancyFlexTable;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.HasHorizontalAlignment;
 import com.google.gwt.user.client.ui.RadioButton;
-import com.google.gwt.user.client.ui.SourcesTableEvents;
-import com.google.gwt.user.client.ui.TableListener;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.HTMLTable.Cell;
 import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
 
 import java.util.ArrayList;
@@ -38,10 +40,12 @@
     setStyleName("gerrit-PatchHistoryTable");
     screen = parent;
     table.addStyleName("gerrit-PatchHistoryTable");
-    table.addTableListener(new TableListener() {
-      public void onCellClicked(SourcesTableEvents sender, int row, int cell) {
-        if (row > 0) {
-          movePointerTo(row);
+    table.addClickHandler(new ClickHandler() {
+      @Override
+      public void onClick(final ClickEvent event) {
+        final Cell cell = table.getCellForEvent(event);
+        if (cell != null && cell.getRowIndex() > 0) {
+          movePointerTo(cell.getRowIndex());
         }
       }
     });
@@ -53,12 +57,12 @@
   }
 
   @Override
-  protected boolean onKeyPress(final char keyCode, final int modifiers) {
-    if (super.onKeyPress(keyCode, modifiers)) {
+  protected boolean onKeyPress(final KeyPressEvent event) {
+    if (super.onKeyPress(event)) {
       return true;
     }
-    if (modifiers == 0 && getCurrentRow() > 0) {
-      switch (keyCode) {
+    if (!event.isAnyModifierKeyDown()) {
+      switch (event.getCharCode()) {
         case 'o':
         case 'l': {
           final Widget w = table.getWidget(getCurrentRow(), radioCell(0));
@@ -82,14 +86,14 @@
   }
 
   private void fakeClick(final HistoryRadio b) {
-    if (!b.isChecked() && b.isEnabled()) {
+    if (!b.getValue() && b.isEnabled()) {
       for (final HistoryRadio a : all) {
-        if (a.isChecked() && a.getName().equals(b.getName())) {
-          a.setChecked(false);
+        if (a.getValue() && a.getName().equals(b.getName())) {
+          a.setValue(false);
           break;
         }
       }
-      b.setChecked(true);
+      b.setValue(true);
       onClick(b);
     }
   }
@@ -152,7 +156,7 @@
       final PatchSet.Id cur) {
     final PatchSet.Id psid = k.getKey().getParentKey();
     final HistoryRadio b = new HistoryRadio(psid, file);
-    b.setChecked(eq(cur, psid));
+    b.setValue(eq(cur, psid));
 
     final int cell = radioCell(file);
     table.setWidget(row, cell, b);
diff --git a/src/main/java/com/google/gerrit/client/ui/AddMemberBox.java b/src/main/java/com/google/gerrit/client/ui/AddMemberBox.java
index 55dacbd..71f9dd6 100644
--- a/src/main/java/com/google/gerrit/client/ui/AddMemberBox.java
+++ b/src/main/java/com/google/gerrit/client/ui/AddMemberBox.java
@@ -15,53 +15,55 @@
 package com.google.gerrit.client.ui;
 
 import com.google.gerrit.client.admin.Util;
+import com.google.gwt.event.dom.client.BlurEvent;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
 import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.ClickListener;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.FocusListenerAdapter;
 import com.google.gwt.user.client.ui.SuggestBox;
 import com.google.gwt.user.client.ui.TextBox;
-import com.google.gwt.user.client.ui.Widget;
 
 public class AddMemberBox extends Composite {
-  
   private final FlowPanel addPanel;
   private final Button addMember;
   private final TextBox nameTxtBox;
   private final SuggestBox nameTxt;
-  
+
   public AddMemberBox() {
     addPanel = new FlowPanel();
     addMember = new Button(Util.C.buttonAddGroupMember());
     nameTxtBox = new TextBox();
     nameTxt = new SuggestBox(new AccountSuggestOracle(), nameTxtBox);
-    
+
     nameTxtBox.setVisibleLength(50);
     nameTxtBox.setText(Util.C.defaultAccountName());
     nameTxtBox.addStyleName("gerrit-InputFieldTypeHint");
-    nameTxtBox.addFocusListener(new FocusListenerAdapter() {
+    nameTxtBox.addFocusHandler(new FocusHandler() {
       @Override
-      public void onFocus(Widget sender) {
+      public void onFocus(final FocusEvent event) {
         if (Util.C.defaultAccountName().equals(nameTxtBox.getText())) {
           nameTxtBox.setText("");
           nameTxtBox.removeStyleName("gerrit-InputFieldTypeHint");
         }
       }
-
+    });
+    nameTxtBox.addBlurHandler(new BlurHandler() {
       @Override
-      public void onLostFocus(Widget sender) {
+      public void onBlur(final BlurEvent event) {
         if ("".equals(nameTxtBox.getText())) {
           nameTxtBox.setText(Util.C.defaultAccountName());
           nameTxtBox.addStyleName("gerrit-InputFieldTypeHint");
         }
       }
     });
-    
+
     addPanel.setStyleName("gerrit-ProjectWatchPanel-AddPanel");
     addPanel.add(nameTxt);
     addPanel.add(addMember);
-    
+
     initWidget(addPanel);
   }
 
@@ -69,10 +71,10 @@
     addMember.setText(text);
   }
 
-  public void addClickListener(ClickListener listener) {
-    addMember.addClickListener(listener);
+  public void addClickHandler(final ClickHandler handler) {
+    addMember.addClickHandler(handler);
   }
-  
+
   public String getText() {
     String s = nameTxtBox.getText();
     if (s == null || s.equals(Util.C.defaultAccountName())) {
@@ -80,12 +82,12 @@
     }
     return s;
   }
-  
+
   public void setEnabled(boolean enabled) {
     addMember.setEnabled(enabled);
     nameTxtBox.setEnabled(enabled);
   }
-  
+
   public void setText(String text) {
     nameTxtBox.setText(text);
   }
diff --git a/src/main/java/com/google/gerrit/client/ui/ComplexDisclosurePanel.java b/src/main/java/com/google/gerrit/client/ui/ComplexDisclosurePanel.java
index 2cb01d6..34d464f 100644
--- a/src/main/java/com/google/gerrit/client/ui/ComplexDisclosurePanel.java
+++ b/src/main/java/com/google/gerrit/client/ui/ComplexDisclosurePanel.java
@@ -14,18 +14,21 @@
 
 package com.google.gerrit.client.ui;
 
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.HasCloseHandlers;
+import com.google.gwt.event.logical.shared.HasOpenHandlers;
+import com.google.gwt.event.logical.shared.OpenHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.ui.ComplexPanel;
 import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.DisclosureHandler;
 import com.google.gwt.user.client.ui.DisclosurePanel;
-import com.google.gwt.user.client.ui.FiresDisclosureEvents;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.Widget;
 
 public class ComplexDisclosurePanel extends Composite implements
-    FiresDisclosureEvents {
+    HasOpenHandlers<DisclosurePanel>, HasCloseHandlers<DisclosurePanel> {
   private final DisclosurePanel main;
   private final Panel header;
 
@@ -84,12 +87,15 @@
     return main.getContent();
   }
 
-  public void addEventHandler(final DisclosureHandler handler) {
-    main.addEventHandler(handler);
+  @Override
+  public HandlerRegistration addOpenHandler(final OpenHandler<DisclosurePanel> h) {
+    return main.addOpenHandler(h);
   }
 
-  public void removeEventHandler(final DisclosureHandler handler) {
-    main.removeEventHandler(handler);
+  @Override
+  public HandlerRegistration addCloseHandler(
+      final CloseHandler<DisclosurePanel> h) {
+    return main.addCloseHandler(h);
   }
 
   /** @return true if the panel's content is visible. */
diff --git a/src/main/java/com/google/gerrit/client/ui/FancyFlexTable.java b/src/main/java/com/google/gerrit/client/ui/FancyFlexTable.java
index 10d4f60..5cae02e 100644
--- a/src/main/java/com/google/gerrit/client/ui/FancyFlexTable.java
+++ b/src/main/java/com/google/gerrit/client/ui/FancyFlexTable.java
@@ -16,19 +16,25 @@
 
 import com.google.gerrit.client.Gerrit;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.BlurHandler;
+import com.google.gwt.event.dom.client.FocusEvent;
+import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.dom.client.HasBlurHandlers;
+import com.google.gwt.event.dom.client.HasFocusHandlers;
+import com.google.gwt.event.dom.client.HasKeyPressHandlers;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Element;
-import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.FlexTable;
-import com.google.gwt.user.client.ui.FocusListener;
 import com.google.gwt.user.client.ui.FocusPanel;
-import com.google.gwt.user.client.ui.HasFocus;
+import com.google.gwt.user.client.ui.Focusable;
 import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.KeyboardListener;
-import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
 import com.google.gwt.user.client.ui.UIObject;
 import com.google.gwt.user.client.ui.Widget;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
@@ -40,7 +46,7 @@
 import java.util.Map.Entry;
 
 public abstract class FancyFlexTable<RowItem> extends Composite implements
-    HasFocus {
+    Focusable, HasFocusHandlers, HasBlurHandlers, HasKeyPressHandlers {
   private static final FancyFlexTableImpl impl =
       GWT.create(FancyFlexTableImpl.class);
 
@@ -74,25 +80,22 @@
     table.addStyleName(MY_STYLE);
     focusy = UserAgent.wrapFocusPanel(table);
     if (focusy != null) {
-      focusy.addKeyboardListener(new KeyboardListenerAdapter() {
+      focusy.addKeyPressHandler(new KeyPressHandler() {
         @Override
-        public void onKeyPress(Widget sender, char keyCode, int modifiers) {
-          if (FancyFlexTable.this.onKeyPress(keyCode, modifiers)) {
-            final Event event = DOM.eventGetCurrentEvent();
-            DOM.eventCancelBubble(event, true);
-            DOM.eventPreventDefault(event);
+        public void onKeyPress(final KeyPressEvent event) {
+          if (FancyFlexTable.this.onKeyPress(event)) {
+            event.stopPropagation();
+            event.preventDefault();
           }
         }
       });
-      focusy.addFocusListener(new FocusListener() {
-        public void onFocus(final Widget sender) {
+      focusy.addFocusHandler(new FocusHandler() {
+        @Override
+        public void onFocus(final FocusEvent event) {
           if (currentRow < 0) {
             onDown();
           }
         }
-
-        public void onLostFocus(final Widget sender) {
-        }
       });
     }
     initWidget(focusy != null ? focusy : table);
@@ -122,21 +125,21 @@
     impl.resetHtml(table, body);
   }
 
-  protected boolean onKeyPress(final char keyCode, final int modifiers) {
-    if (modifiers == 0) {
-      switch (keyCode) {
+  protected boolean onKeyPress(final KeyPressEvent event) {
+    if (!event.isAnyModifierKeyDown()) {
+      switch (event.getCharCode()) {
         case 'k':
-        case KeyboardListener.KEY_UP:
+        case KeyCodes.KEY_UP:
           onUp();
           return true;
 
         case 'j':
-        case KeyboardListener.KEY_DOWN:
+        case KeyCodes.KEY_DOWN:
           onDown();
           return true;
 
         case 'o':
-        case KeyboardListener.KEY_ENTER:
+        case KeyCodes.KEY_ENTER:
           onOpen();
           return true;
       }
@@ -273,33 +276,38 @@
     }
   }
 
-  public void addFocusListener(FocusListener listener) {
+  public HandlerRegistration addFocusHandler(FocusHandler handler) {
     if (focusy != null) {
-      focusy.addFocusListener(listener);
+      return focusy.addFocusHandler(handler);
     }
+    return NoopRegistration.INSTANCE;
   }
 
-  public void addKeyboardListener(KeyboardListener listener) {
+  public HandlerRegistration addBlurHandler(BlurHandler handler) {
     if (focusy != null) {
-      focusy.addKeyboardListener(listener);
+      return focusy.addBlurHandler(handler);
     }
+    return NoopRegistration.INSTANCE;
   }
 
-  public void removeFocusListener(FocusListener listener) {
+  public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
     if (focusy != null) {
-      focusy.removeFocusListener(listener);
+      return focusy.addKeyPressHandler(handler);
     }
-  }
-
-  public void removeKeyboardListener(KeyboardListener listener) {
-    if (focusy != null) {
-      focusy.removeKeyboardListener(listener);
-    }
+    return NoopRegistration.INSTANCE;
   }
 
   protected static class MyFlexTable extends FlexTable {
   }
 
+  private static final class NoopRegistration implements HandlerRegistration {
+    static final NoopRegistration INSTANCE = new NoopRegistration();
+
+    @Override
+    public void removeHandler() {
+    }
+  }
+
   private static final native <ItemType> void setRowItem(Element td, ItemType c)/*-{ td["__gerritRowItem"] = c; }-*/;
 
   private static final native <ItemType> ItemType getRowItem(Element td)/*-{ return td["__gerritRowItem"]; }-*/;
diff --git a/src/main/java/com/google/gerrit/client/ui/TextSaveButtonListener.java b/src/main/java/com/google/gerrit/client/ui/TextSaveButtonListener.java
index d424d62..63270df 100644
--- a/src/main/java/com/google/gerrit/client/ui/TextSaveButtonListener.java
+++ b/src/main/java/com/google/gerrit/client/ui/TextSaveButtonListener.java
@@ -14,13 +14,14 @@
 
 package com.google.gerrit.client.ui;
 
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
 import com.google.gwt.user.client.ui.FocusWidget;
-import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
 import com.google.gwt.user.client.ui.TextBoxBase;
-import com.google.gwt.user.client.ui.Widget;
 
 /** Enables an action (e.g. a Button) if the text box is modified. */
-public class TextSaveButtonListener extends KeyboardListenerAdapter {
+public class TextSaveButtonListener implements KeyPressHandler {
   private final FocusWidget descAction;
 
   public TextSaveButtonListener(final FocusWidget action) {
@@ -29,36 +30,42 @@
 
   public TextSaveButtonListener(final TextBoxBase text, final FocusWidget action) {
     this(action);
-    text.addKeyboardListener(this);
+    text.addKeyPressHandler(this);
   }
 
   @Override
-  public void onKeyPress(final Widget sender, final char key, final int mod) {
-    boolean hasm = (mod & (MODIFIER_CTRL | MODIFIER_ALT | MODIFIER_META)) != 0;
-    if (!hasm) {
-      switch (key) {
-        case KEY_UP:
-        case KEY_DOWN:
-        case KEY_LEFT:
-        case KEY_RIGHT:
-        case KEY_HOME:
-        case KEY_END:
-        case KEY_PAGEUP:
-        case KEY_PAGEDOWN:
-        case KEY_ALT:
-        case KEY_CTRL:
-        case KEY_SHIFT:
-          break;
-        default:
-          on(sender);
+  public void onKeyPress(final KeyPressEvent e) {
+    if (descAction.isEnabled()) {
+      // Do nothing, its already enabled.
+    } else if (e.isControlKeyDown() || e.isAltKeyDown() || e.isMetaKeyDown()) {
+      switch (e.getCharCode()) {
+        case 'v':
+        case 'x':
+          on(e);
           break;
       }
-    } else if (hasm && (key == 'v' || key == 'x')) {
-      on(sender);
+    } else {
+      switch (e.getCharCode()) {
+        case KeyCodes.KEY_UP:
+        case KeyCodes.KEY_DOWN:
+        case KeyCodes.KEY_LEFT:
+        case KeyCodes.KEY_RIGHT:
+        case KeyCodes.KEY_HOME:
+        case KeyCodes.KEY_END:
+        case KeyCodes.KEY_PAGEUP:
+        case KeyCodes.KEY_PAGEDOWN:
+        case KeyCodes.KEY_ALT:
+        case KeyCodes.KEY_CTRL:
+        case KeyCodes.KEY_SHIFT:
+          break;
+        default:
+          on(e);
+          break;
+      }
     }
   }
 
-  private void on(final Widget sender) {
-    descAction.setEnabled(((TextBoxBase) sender).isEnabled());
+  private void on(final KeyPressEvent e) {
+    descAction.setEnabled(((TextBoxBase) e.getSource()).isEnabled());
   }
 }