Automated refactoring to stop using deprecated DOM methods.

Change-Id: I43f400e2c05aa70f13d1af1dd16ca23f7298add2
diff --git a/user/src/com/google/gwt/logging/client/LoggingPopup.java b/user/src/com/google/gwt/logging/client/LoggingPopup.java
index 1bb817c..7db5964 100644
--- a/user/src/com/google/gwt/logging/client/LoggingPopup.java
+++ b/user/src/com/google/gwt/logging/client/LoggingPopup.java
@@ -68,7 +68,7 @@
       DOM.setCapture(dragHandle.getElement());
       dragStartX = event.getClientX();
       dragStartY = event.getClientY();
-      DOM.eventPreventDefault(DOM.eventGetCurrentEvent());
+      DOM.eventGetCurrentEvent().preventDefault();
     }
  
     public void onMouseMove(MouseMoveEvent event) {
diff --git a/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java b/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java
index 33a6cdf..8ad57be 100644
--- a/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java
@@ -64,9 +64,9 @@
    * @param elem the DOM element
    */
   private static void changeToStaticPositioning(Element elem) {
-    DOM.setStyleAttribute(elem, "left", "");
-    DOM.setStyleAttribute(elem, "top", "");
-    DOM.setStyleAttribute(elem, "position", "");
+    elem.getStyle().setProperty("left", "");
+    elem.getStyle().setProperty("top", "");
+    elem.getStyle().setProperty("position", "");
   }
 
   /**
@@ -77,8 +77,8 @@
 
     // Setting the panel's position style to 'relative' causes it to be treated
     // as a new positioning context for its children.
-    DOM.setStyleAttribute(getElement(), "position", "relative");
-    DOM.setStyleAttribute(getElement(), "overflow", "hidden");
+    getElement().getStyle().setProperty("position", "relative");
+    getElement().getStyle().setProperty("overflow", "hidden");
   }
 
   /**
@@ -136,8 +136,8 @@
    */
   public int getWidgetLeft(Widget w) {
     checkWidgetParent(w);
-    return DOM.getAbsoluteLeft(w.getElement())
-        - DOM.getAbsoluteLeft(getElement());
+    return w.getElement().getAbsoluteLeft()
+        - getElement().getAbsoluteLeft();
   }
 
   /**
@@ -149,8 +149,8 @@
    */
   public int getWidgetTop(Widget w) {
     checkWidgetParent(w);
-    return DOM.getAbsoluteTop(w.getElement())
-        - DOM.getAbsoluteTop(getElement());
+    return w.getElement().getAbsoluteTop()
+        - getElement().getAbsoluteTop();
   }
 
   public void insert(Widget w, int beforeIndex) {
@@ -223,9 +223,9 @@
     if (left == -1 && top == -1) {
       changeToStaticPositioning(h);
     } else {
-      DOM.setStyleAttribute(h, "position", "absolute");
-      DOM.setStyleAttribute(h, "left", left + "px");
-      DOM.setStyleAttribute(h, "top", top + "px");
+      h.getStyle().setProperty("position", "absolute");
+      h.getStyle().setProperty("left", left + "px");
+      h.getStyle().setProperty("top", top + "px");
     }
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/CellPanel.java b/user/src/com/google/gwt/user/client/ui/CellPanel.java
index 8391239..f4b87f6 100644
--- a/user/src/com/google/gwt/user/client/ui/CellPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/CellPanel.java
@@ -94,7 +94,7 @@
    * @param width the width of the panel's cell borders, in pixels
    */
   public void setBorderWidth(int width) {
-    DOM.setElementProperty(table, "border", "" + width);
+    table.setPropertyString("border", "" + width);
   }
 
   /**
@@ -198,7 +198,7 @@
    */
   public void setSpacing(int spacing) {
     this.spacing = spacing;
-    DOM.setElementPropertyInt(table, "cellSpacing", spacing);
+    table.setPropertyInt("cellSpacing", spacing);
   }
 
   protected Element getBody() {
@@ -211,12 +211,12 @@
 
   protected void setCellHorizontalAlignment(Element td,
       HorizontalAlignmentConstant align) {
-    DOM.setElementProperty(td, "align", align.getTextAlignString());
+    td.setPropertyString("align", align.getTextAlignString());
   }
 
   protected void setCellVerticalAlignment(Element td,
       VerticalAlignmentConstant align) {
-    DOM.setStyleAttribute(td, "verticalAlign", align.getVerticalAlignString());
+    td.getStyle().setProperty("verticalAlign", align.getVerticalAlignString());
   }
 
   Element getWidgetTd(Widget w) {
diff --git a/user/src/com/google/gwt/user/client/ui/ComplexPanel.java b/user/src/com/google/gwt/user/client/ui/ComplexPanel.java
index bbf4966..6b692f9 100644
--- a/user/src/com/google/gwt/user/client/ui/ComplexPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/ComplexPanel.java
@@ -68,7 +68,7 @@
     } finally {
       // Physical detach.
       Element elem = w.getElement();
-      DOM.removeChild(DOM.getParent(elem), elem);
+      DOM.getParent(elem).removeChild(elem);
   
       // Logical detach.
       getChildren().remove(w);
diff --git a/user/src/com/google/gwt/user/client/ui/CustomButton.java b/user/src/com/google/gwt/user/client/ui/CustomButton.java
index 8c1ded7..d15d41e 100644
--- a/user/src/com/google/gwt/user/client/ui/CustomButton.java
+++ b/user/src/com/google/gwt/user/client/ui/CustomButton.java
@@ -164,7 +164,7 @@
      */
     @Override
     public String getHTML() {
-      return DOM.getInnerHTML(getFace());
+      return getFace().getInnerHTML();
     }
 
     /**
@@ -175,7 +175,7 @@
      */
     @Override
     public String getText() {
-      return DOM.getInnerText(getFace());
+      return getFace().getInnerText();
     }
 
     /**
@@ -198,7 +198,7 @@
     public void setHTML(String html) {
       face = DOM.createDiv();
       UIObject.setStyleName(face, STYLENAME_HTML_FACE, true);
-      DOM.setInnerHTML(face, html);
+      face.setInnerHTML(html);
       updateButtonFace();
     }
 
@@ -221,7 +221,7 @@
     public final void setText(String text) {
       face = DOM.createDiv();
       UIObject.setStyleName(face, STYLENAME_HTML_FACE, true);
-      DOM.setInnerText(face, text);
+      face.setInnerText(text);
       updateButtonFace();
     }
 
@@ -652,7 +652,7 @@
           DOM.setCapture(getElement());
           isCapturing = true;
           // Prevent dragging (on some browsers);
-          DOM.eventPreventDefault(event);
+          event.preventDefault();
         }
         break;
       case Event.ONMOUSEUP:
@@ -667,13 +667,13 @@
       case Event.ONMOUSEMOVE:
         if (isCapturing) {
           // Prevent dragging (on other browsers);
-          DOM.eventPreventDefault(event);
+          event.preventDefault();
         }
         break;
       case Event.ONMOUSEOUT:
         Element to = DOM.eventGetToElement(event);
-        if (DOM.isOrHasChild(getElement(), DOM.eventGetTarget(event))
-            && (to == null || !DOM.isOrHasChild(getElement(), to))) {
+        if (getElement().isOrHasChild(DOM.eventGetTarget(event))
+            && (to == null || !getElement().isOrHasChild(to))) {
           if (isCapturing) {
             onClickCancel();
           }
@@ -681,7 +681,7 @@
         }
         break;
       case Event.ONMOUSEOVER:
-        if (DOM.isOrHasChild(getElement(), DOM.eventGetTarget(event))) {
+        if (getElement().isOrHasChild(DOM.eventGetTarget(event))) {
           setHovering(true);
           if (isCapturing) {
             onClickStart();
@@ -706,7 +706,7 @@
 
     // Synthesize clicks based on keyboard events AFTER the normal key handling.
     if ((event.getTypeInt() & Event.KEYEVENTS) != 0) {
-      char keyCode = (char) DOM.eventGetKeyCode(event);
+      char keyCode = (char) event.getKeyCode();
       switch (type) {
         case Event.ONKEYDOWN:
           if (keyCode == ' ') {
@@ -1015,7 +1015,7 @@
   private void setCurrentFaceElement(Element newFaceElement) {
     if (curFaceElement != newFaceElement) {
       if (curFaceElement != null) {
-        DOM.removeChild(getElement(), curFaceElement);
+        getElement().removeChild(curFaceElement);
       }
       curFaceElement = newFaceElement;
       DOM.appendChild(getElement(), curFaceElement);
diff --git a/user/src/com/google/gwt/user/client/ui/DeckPanel.java b/user/src/com/google/gwt/user/client/ui/DeckPanel.java
index 919f5a8..608ab9d 100644
--- a/user/src/com/google/gwt/user/client/ui/DeckPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DeckPanel.java
@@ -138,18 +138,18 @@
     @Override
     protected void onComplete() {
       if (growing) {
-        DOM.setStyleAttribute(container1, "height", "100%");
+        container1.getStyle().setProperty("height", "100%");
         UIObject.setVisible(container1, true);
         UIObject.setVisible(container2, false);
-        DOM.setStyleAttribute(container2, "height", "100%");
+        container2.getStyle().setProperty("height", "100%");
       } else {
         UIObject.setVisible(container1, false);
-        DOM.setStyleAttribute(container1, "height", "100%");
-        DOM.setStyleAttribute(container2, "height", "100%");
+        container1.getStyle().setProperty("height", "100%");
+        container2.getStyle().setProperty("height", "100%");
         UIObject.setVisible(container2, true);
       }
-      DOM.setStyleAttribute(container1, "overflow", "visible");
-      DOM.setStyleAttribute(container2, "overflow", "visible");
+      container1.getStyle().setProperty("overflow", "visible");
+      container2.getStyle().setProperty("overflow", "visible");
       container1 = null;
       container2 = null;
       hideOldWidget();
@@ -158,8 +158,8 @@
     @Override
     protected void onStart() {
       // Start the animation
-      DOM.setStyleAttribute(container1, "overflow", "hidden");
-      DOM.setStyleAttribute(container2, "overflow", "hidden");
+      container1.getStyle().setProperty("overflow", "hidden");
+      container2.getStyle().setProperty("overflow", "hidden");
       onUpdate(0.0);
       UIObject.setVisible(container1, true);
       UIObject.setVisible(container2, true);
@@ -175,10 +175,8 @@
       int height1;
       int height2;
       if (fixedHeight == -1) {
-        height1 = (int) (progress * DOM.getElementPropertyInt(container1,
-            "scrollHeight"));
-        height2 = (int) ((1.0 - progress) * DOM.getElementPropertyInt(
-            container2, "scrollHeight"));
+        height1 = (int) (progress * container1.getPropertyInt("scrollHeight"));
+        height2 = (int) ((1.0 - progress) * container2.getPropertyInt("scrollHeight"));
       } else {
         height1 = (int) (progress * fixedHeight);
         height2 = fixedHeight - height1;
@@ -193,8 +191,8 @@
         height2 = 1;
         height1 = Math.max(1, height1 - 1);
       }
-      DOM.setStyleAttribute(container1, "height", height1 + "px");
-      DOM.setStyleAttribute(container2, "height", height2 + "px");
+      container1.getStyle().setProperty("height", height1 + "px");
+      container2.getStyle().setProperty("height", height2 + "px");
     }
 
     /**
@@ -298,7 +296,7 @@
     if (removed) {
       resetChildWidget(w);
 
-      DOM.removeChild(getElement(), container);
+      getElement().removeChild(container);
       if (visibleWidget == w) {
         visibleWidget = null;
       }
@@ -335,10 +333,10 @@
    */
   private Element createWidgetContainer() {
     Element container = DOM.createDiv();
-    DOM.setStyleAttribute(container, "width", "100%");
-    DOM.setStyleAttribute(container, "height", "0px");
-    DOM.setStyleAttribute(container, "padding", "0px");
-    DOM.setStyleAttribute(container, "margin", "0px");
+    container.getStyle().setProperty("width", "100%");
+    container.getStyle().setProperty("height", "0px");
+    container.getStyle().setProperty("padding", "0px");
+    container.getStyle().setProperty("margin", "0px");
     return container;
   }
 
@@ -347,14 +345,14 @@
    */
   private void finishWidgetInitialization(Element container, Widget w) {
     UIObject.setVisible(container, false);
-    DOM.setStyleAttribute(container, "height", "100%");
+    container.getStyle().setProperty("height", "100%");
 
     // Set 100% by default.
     Element element = w.getElement();
-    if (DOM.getStyleAttribute(element, "width").equals("")) {
+    if (element.getStyle().getProperty("width").equals("")) {
       w.setWidth("100%");
     }
-    if (DOM.getStyleAttribute(element, "height").equals("")) {
+    if (element.getStyle().getProperty("height").equals("")) {
       w.setHeight("100%");
     }
 
diff --git a/user/src/com/google/gwt/user/client/ui/DecoratedStackPanel.java b/user/src/com/google/gwt/user/client/ui/DecoratedStackPanel.java
index b5ef039..4d00ca4 100644
--- a/user/src/com/google/gwt/user/client/ui/DecoratedStackPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DecoratedStackPanel.java
@@ -83,9 +83,9 @@
     Element table = DOM.createTable();
     Element tbody = DOM.createTBody();
     DOM.appendChild(table, tbody);
-    DOM.setStyleAttribute(table, "width", "100%");
-    DOM.setElementPropertyInt(table, "cellSpacing", 0);
-    DOM.setElementPropertyInt(table, "cellPadding", 0);
+    table.getStyle().setProperty("width", "100%");
+    table.setPropertyInt("cellSpacing", 0);
+    table.setPropertyInt("cellPadding", 0);
 
     // Add the decorated rows
     for (int i = 0; i < DEFAULT_ROW_STYLENAMES.length; i++) {
diff --git a/user/src/com/google/gwt/user/client/ui/DecoratorPanel.java b/user/src/com/google/gwt/user/client/ui/DecoratorPanel.java
index eab74ab..d40b5b5 100644
--- a/user/src/com/google/gwt/user/client/ui/DecoratorPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DecoratorPanel.java
@@ -166,8 +166,8 @@
     Element table = getElement();
     tbody = DOM.createTBody();
     DOM.appendChild(table, tbody);
-    DOM.setElementPropertyInt(table, "cellSpacing", 0);
-    DOM.setElementPropertyInt(table, "cellPadding", 0);
+    table.setPropertyInt("cellSpacing", 0);
+    table.setPropertyInt("cellPadding", 0);
 
     // Add each row
     for (int i = 0; i < rowStyles.length; i++) {
diff --git a/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java b/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
index 92d81d3..80ae551 100644
--- a/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
@@ -103,9 +103,9 @@
       // Anchor is used to allow keyboard access.
       super(DOM.createAnchor());
       Element elem = getElement();
-      DOM.setElementProperty(elem, "href", "javascript:void(0);");
+      elem.setPropertyString("href", "javascript:void(0);");
       // Avoids layout problems from having blocks in inlines.
-      DOM.setStyleAttribute(elem, "display", "block");
+      elem.getStyle().setProperty("display", "block");
       sinkEvents(Event.ONCLICK);
       setStyleName(STYLENAME_HEADER);
     }
@@ -165,8 +165,7 @@
       if (!opening) {
         curPanel.contentWrapper.setVisible(false);
       }
-      DOM.setStyleAttribute(curPanel.contentWrapper.getElement(), "height",
-          "auto");
+      curPanel.contentWrapper.getElement().getStyle().setProperty("height", "auto");
       curPanel = null;
     }
 
@@ -182,17 +181,14 @@
 
     @Override
     protected void onUpdate(double progress) {
-      int scrollHeight = DOM.getElementPropertyInt(
-          curPanel.contentWrapper.getElement(), "scrollHeight");
+      int scrollHeight = curPanel.contentWrapper.getElement().getPropertyInt("scrollHeight");
       int height = (int) (progress * scrollHeight);
       if (!opening) {
         height = scrollHeight - height;
       }
       height = Math.max(height, 1);
-      DOM.setStyleAttribute(curPanel.contentWrapper.getElement(), "height",
-          height + "px");
-      DOM.setStyleAttribute(curPanel.contentWrapper.getElement(), "width",
-          "auto");
+      curPanel.contentWrapper.getElement().getStyle().setProperty("height", height + "px");
+      curPanel.contentWrapper.getElement().getStyle().setProperty("width", "auto");
     }
   }
 
@@ -246,9 +242,9 @@
       DOM.appendChild(tr, labelTD);
 
       // set image TD to be same width as image.
-      DOM.setElementProperty(imageTD, "align", "center");
-      DOM.setElementProperty(imageTD, "valign", "middle");
-      DOM.setStyleAttribute(imageTD, "width", iconImage.getWidth() + "px");
+      imageTD.setPropertyString("align", "center");
+      imageTD.setPropertyString("valign", "middle");
+      imageTD.getStyle().setProperty("width", iconImage.getWidth() + "px");
 
       DOM.appendChild(imageTD, iconImage.getElement());
 
@@ -277,7 +273,7 @@
     }
 
     public final String getText() {
-      return DOM.getInnerText(labelTD);
+      return labelTD.getInnerText();
     }
 
     public final void onClose(CloseEvent<DisclosurePanel> event) {
@@ -289,7 +285,7 @@
     }
 
     public final void setText(String text) {
-      DOM.setInnerText(labelTD, text);
+      labelTD.setInnerText(text);
     }
 
     private void setStyle() {
@@ -351,8 +347,8 @@
     initWidget(mainPanel);
     mainPanel.add(header);
     mainPanel.add(contentWrapper);
-    DOM.setStyleAttribute(contentWrapper.getElement(), "padding", "0px");
-    DOM.setStyleAttribute(contentWrapper.getElement(), "overflow", "hidden");
+    contentWrapper.getElement().getStyle().setProperty("padding", "0px");
+    contentWrapper.getElement().getStyle().setProperty("overflow", "hidden");
     setStyleName(STYLENAME_DEFAULT);
     setContentDisplay(false);
   }
diff --git a/user/src/com/google/gwt/user/client/ui/DockPanel.java b/user/src/com/google/gwt/user/client/ui/DockPanel.java
index 952d60e..969c12f 100644
--- a/user/src/com/google/gwt/user/client/ui/DockPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DockPanel.java
@@ -149,8 +149,8 @@
    * Creates an empty dock panel.
    */
   public DockPanel() {
-    DOM.setElementPropertyInt(getTable(), "cellSpacing", 0);
-    DOM.setElementPropertyInt(getTable(), "cellPadding", 0);
+    getTable().setPropertyInt("cellSpacing", 0);
+    getTable().setPropertyInt("cellPadding", 0);
   }
 
   /**
@@ -246,7 +246,7 @@
     LayoutData data = (LayoutData) w.getLayoutData();
     data.height = height;
     if (data.td != null) {
-      DOM.setStyleAttribute(data.td, "height", data.height);
+      data.td.getStyle().setProperty("height", data.height);
     }
   }
 
@@ -274,7 +274,7 @@
     LayoutData data = (LayoutData) w.getLayoutData();
     data.width = width;
     if (data.td != null) {
-      DOM.setStyleAttribute(data.td, "width", data.width);
+      data.td.getStyle().setProperty("width", data.width);
     }
   }
 
@@ -349,7 +349,7 @@
   private void realizeTable() {
     Element bodyElem = getBody();
     while (DOM.getChildCount(bodyElem) > 0) {
-      DOM.removeChild(bodyElem, DOM.getChild(bodyElem, 0));
+      bodyElem.removeChild(DOM.getChild(bodyElem, 0));
     }
 
     int rowCount = 1, colCount = 1;
@@ -380,20 +380,20 @@
 
       Element td = DOM.createTD();
       layout.td = td;
-      DOM.setElementProperty(layout.td, "align", layout.hAlign);
-      DOM.setStyleAttribute(layout.td, "verticalAlign", layout.vAlign);
-      DOM.setElementProperty(layout.td, "width", layout.width);
-      DOM.setElementProperty(layout.td, "height", layout.height);
+      layout.td.setPropertyString("align", layout.hAlign);
+      layout.td.getStyle().setProperty("verticalAlign", layout.vAlign);
+      layout.td.setPropertyString("width", layout.width);
+      layout.td.setPropertyString("height", layout.height);
 
       if (layout.direction == NORTH) {
         DOM.insertChild(rows[northRow].tr, td, rows[northRow].center);
         DOM.appendChild(td, child.getElement());
-        DOM.setElementPropertyInt(td, "colSpan", logicalRightCol - logicalLeftCol + 1);
+        td.setPropertyInt("colSpan", logicalRightCol - logicalLeftCol + 1);
         ++northRow;
       } else if (layout.direction == SOUTH) {
         DOM.insertChild(rows[southRow].tr, td, rows[southRow].center);
         DOM.appendChild(td, child.getElement());
-        DOM.setElementPropertyInt(td, "colSpan", logicalRightCol - logicalLeftCol + 1);
+        td.setPropertyInt("colSpan", logicalRightCol - logicalLeftCol + 1);
         --southRow;
       } else if (layout.direction == CENTER) {
         // Defer adding the center widget, so that it can be added after all
@@ -403,13 +403,13 @@
         TmpRow row = rows[northRow];
         DOM.insertChild(row.tr, td, row.center++);
         DOM.appendChild(td, child.getElement());
-        DOM.setElementPropertyInt(td, "rowSpan", southRow - northRow + 1);
+        td.setPropertyInt("rowSpan", southRow - northRow + 1);
         ++logicalLeftCol;
       } else if (shouldAddToLogicalRightOfTable(layout.direction)) {
         TmpRow row = rows[northRow];
         DOM.insertChild(row.tr, td, row.center);
         DOM.appendChild(td, child.getElement());
-        DOM.setElementPropertyInt(td, "rowSpan", southRow - northRow + 1);
+        td.setPropertyInt("rowSpan", southRow - northRow + 1);
         --logicalRightCol;
       } 
     }
diff --git a/user/src/com/google/gwt/user/client/ui/FlexTable.java b/user/src/com/google/gwt/user/client/ui/FlexTable.java
index 5ec2999..16bee2f 100644
--- a/user/src/com/google/gwt/user/client/ui/FlexTable.java
+++ b/user/src/com/google/gwt/user/client/ui/FlexTable.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.user.client.DOM;
-
 /**
  * A flexible table that creates cells on demand. It can be jagged (that is,
  * each row can contain a different number of cells) and individual cells can be
@@ -48,7 +46,7 @@
      * @throws IndexOutOfBoundsException
      */
     public int getColSpan(int row, int column) {
-      return DOM.getElementPropertyInt(getElement(row, column), "colSpan");
+      return getElement(row, column).getPropertyInt("colSpan");
     }
 
     /**
@@ -61,7 +59,7 @@
      * @throws IndexOutOfBoundsException
      */
     public int getRowSpan(int row, int column) {
-      return DOM.getElementPropertyInt(getElement(row, column), "rowSpan");
+      return getElement(row, column).getPropertyInt("rowSpan");
     }
 
     /**
@@ -74,7 +72,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setColSpan(int row, int column, int colSpan) {
-      DOM.setElementPropertyInt(ensureElement(row, column), "colSpan", colSpan);
+      ensureElement(row, column).setPropertyInt("colSpan", colSpan);
     }
 
     /**
@@ -87,7 +85,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setRowSpan(int row, int column, int rowSpan) {
-      DOM.setElementPropertyInt(ensureElement(row, column), "rowSpan", rowSpan);
+      ensureElement(row, column).setPropertyInt("rowSpan", rowSpan);
     }
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/FocusWidget.java b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
index 7c1fa55..2e5e36c 100644
--- a/user/src/com/google/gwt/user/client/ui/FocusWidget.java
+++ b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
@@ -79,7 +79,6 @@
 import com.google.gwt.event.dom.client.TouchStartEvent;
 import com.google.gwt.event.dom.client.TouchStartHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.impl.FocusImpl;
 
 /**
@@ -285,7 +284,7 @@
    * @return <code>true</code> if the widget is enabled
    */
   public boolean isEnabled() {
-    return !DOM.getElementPropertyBoolean(getElement(), "disabled");
+    return !getElement().getPropertyBoolean("disabled");
   }
 
   /**
@@ -334,7 +333,7 @@
   }
 
   public void setAccessKey(char key) {
-    DOM.setElementProperty(getElement(), "accessKey", "" + key);
+    getElement().setPropertyString("accessKey", "" + key);
   }
 
   /**
@@ -344,7 +343,7 @@
    *          to disable it
    */
   public void setEnabled(boolean enabled) {
-    DOM.setElementPropertyBoolean(getElement(), "disabled", !enabled);
+    getElement().setPropertyBoolean("disabled", !enabled);
   }
 
   public void setFocus(boolean focused) {
diff --git a/user/src/com/google/gwt/user/client/ui/Grid.java b/user/src/com/google/gwt/user/client/ui/Grid.java
index 8e22238..ced5ef4 100644
--- a/user/src/com/google/gwt/user/client/ui/Grid.java
+++ b/user/src/com/google/gwt/user/client/ui/Grid.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
 /**
@@ -130,7 +129,7 @@
   public boolean clearCell(int row, int column) {
     Element td = getCellFormatter().getElement(row, column);
     boolean b = internalClearCell(td, false);
-    DOM.setInnerHTML(td, "&nbsp;");
+    td.setInnerHTML("&nbsp;");
     return b;
   }
 
@@ -271,7 +270,7 @@
 
     // Add a non-breaking space to the TD. This ensures that the cell is
     // displayed.
-    DOM.setInnerHTML(td, "&nbsp;");
+    td.setInnerHTML("&nbsp;");
     return td;
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLTable.java b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
index 3fef0e8..f35ea80 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLTable.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
@@ -272,7 +272,7 @@
     public void setHeight(int row, int column, String height) {
       prepareCell(row, column);
       Element elem = getCellElement(bodyElem, row, column);
-      DOM.setElementProperty(elem, "height", height);
+      elem.setPropertyString("height", height);
     }
 
     /**
@@ -288,7 +288,7 @@
         HorizontalAlignmentConstant align) {
       prepareCell(row, column);
       Element elem = getCellElement(bodyElem, row, column);
-      DOM.setElementProperty(elem, "align", align.getTextAlignString());
+      elem.setPropertyString("align", align.getTextAlignString());
     }
 
     /**
@@ -331,8 +331,8 @@
     public void setVerticalAlignment(int row, int column,
         VerticalAlignmentConstant align) {
       prepareCell(row, column);
-      DOM.setStyleAttribute(getCellElement(bodyElem, row, column),
-          "verticalAlign", align.getVerticalAlignString());
+      getCellElement(bodyElem, row, column).getStyle()
+          .setProperty("verticalAlign", align.getVerticalAlignString());
     }
 
     /**
@@ -361,8 +361,7 @@
     public void setWidth(int row, int column, String width) {
       // Give the subclass a chance to prepare the cell.
       prepareCell(row, column);
-      DOM.setElementProperty(getCellElement(bodyElem, row, column), "width",
-          width);
+      getCellElement(bodyElem, row, column).setPropertyString("width", width);
     }
 
     /**
@@ -376,7 +375,7 @@
     public void setWordWrap(int row, int column, boolean wrap) {
       prepareCell(row, column);
       String wrapValue = wrap ? "" : "nowrap";
-      DOM.setStyleAttribute(getElement(row, column), "whiteSpace", wrapValue);
+      getElement(row, column).getStyle().setProperty("whiteSpace", wrapValue);
     }
 
     /**
@@ -404,7 +403,7 @@
      */
     protected String getAttr(int row, int column, String attr) {
       Element elem = getElement(row, column);
-      return DOM.getElementAttribute(elem, attr);
+      return elem.getAttribute(attr);
     }
 
     /**
@@ -418,7 +417,7 @@
      */
     protected void setAttr(int row, int column, String attrName, String value) {
       Element elem = ensureElement(row, column);
-      DOM.setElementAttribute(elem, attrName, value);
+      elem.setAttribute(attrName, value);
     }
 
     /**
@@ -544,7 +543,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setWidth(int column, String width) {
-      DOM.setElementProperty(ensureColumn(column), "width", width);
+      ensureColumn(column).setPropertyString("width", width);
     }
 
     /**
@@ -702,8 +701,7 @@
      * @throws IndexOutOfBoundsException
      */
     public void setVerticalAlign(int row, VerticalAlignmentConstant align) {
-      DOM.setStyleAttribute(ensureElement(row), "verticalAlign",
-          align.getVerticalAlignString());
+      ensureElement(row).getStyle().setProperty("verticalAlign", align.getVerticalAlignString());
     }
 
     /**
@@ -745,7 +743,7 @@
      */
     protected void setAttr(int row, String attrName, String value) {
       Element elem = ensureElement(row);
-      DOM.setElementAttribute(elem, attrName, value);
+      elem.setAttribute(attrName, value);
     }
   }
 
@@ -918,7 +916,7 @@
    * @return the cell padding, in pixels
    */
   public int getCellPadding() {
-    return DOM.getElementPropertyInt(tableElem, "cellPadding");
+    return tableElem.getPropertyInt("cellPadding");
   }
 
   /**
@@ -927,7 +925,7 @@
    * @return the cell spacing, in pixels
    */
   public int getCellSpacing() {
-    return DOM.getElementPropertyInt(tableElem, "cellSpacing");
+    return tableElem.getPropertyInt("cellSpacing");
   }
 
   /**
@@ -948,7 +946,7 @@
    * @throws IndexOutOfBoundsException
    */
   public String getHTML(int row, int column) {
-    return DOM.getInnerHTML(cellFormatter.getElement(row, column));
+    return cellFormatter.getElement(row, column).getInnerHTML();
   }
 
   /**
@@ -978,7 +976,7 @@
   public String getText(int row, int column) {
     checkCellBounds(row, column);
     Element e = cellFormatter.getElement(row, column);
-    return DOM.getInnerText(e);
+    return e.getInnerText();
   }
 
   /**
@@ -1080,7 +1078,7 @@
     } finally {
       // Physical detach.
       Element elem = widget.getElement();
-      DOM.removeChild(DOM.getParent(elem), elem);
+      DOM.getParent(elem).removeChild(elem);
   
       // Logical detach.
       widgetMap.removeByElement(elem);
@@ -1108,7 +1106,7 @@
    * @param width the width of the border, in pixels
    */
   public void setBorderWidth(int width) {
-    DOM.setElementProperty(tableElem, "border", "" + width);
+    tableElem.setPropertyString("border", "" + width);
   }
 
   /**
@@ -1117,7 +1115,7 @@
    * @param padding the cell padding, in pixels
    */
   public void setCellPadding(int padding) {
-    DOM.setElementPropertyInt(tableElem, "cellPadding", padding);
+    tableElem.setPropertyInt("cellPadding", padding);
   }
 
   /**
@@ -1126,7 +1124,7 @@
    * @param spacing the cell spacing, in pixels
    */
   public void setCellSpacing(int spacing) {
-    DOM.setElementPropertyInt(tableElem, "cellSpacing", spacing);
+    tableElem.setPropertyInt("cellSpacing", spacing);
   }
 
   /**
@@ -1141,7 +1139,7 @@
     prepareCell(row, column);
     Element td = cleanCell(row, column, html == null);
     if (html != null) {
-      DOM.setInnerHTML(td, html);
+      td.setInnerHTML(html);
     }
   }
 
@@ -1170,7 +1168,7 @@
     Element td;
     td = cleanCell(row, column, text == null);
     if (text != null) {
-      DOM.setInnerText(td, text);
+      td.setInnerText(text);
     }
   }
 
@@ -1318,7 +1316,7 @@
     Element td = DOM.eventGetTarget(event);
     for (; td != null; td = DOM.getParent(td)) {
       // If it's a TD, it might be the one we're looking for.
-      if (DOM.getElementProperty(td, "tagName").equalsIgnoreCase("td")) {
+      if (td.getPropertyString("tagName").equalsIgnoreCase("td")) {
         // Make sure it's directly a part of this table before returning
         // it.
         Element tr = DOM.getParent(td);
@@ -1403,7 +1401,7 @@
     } else {
       // Otherwise, simply clear whatever text and/or HTML may be there.
       if (clearInnerHTML) {
-        DOM.setInnerHTML(td, "");
+        td.setInnerHTML("");
       }
       return false;
     }
@@ -1479,7 +1477,7 @@
     checkCellBounds(row, column);
     Element td = cleanCell(row, column, false);
     Element tr = rowFormatter.getRow(bodyElem, row);
-    DOM.removeChild(tr, td);
+    tr.removeChild(td);
   }
 
   /**
@@ -1493,7 +1491,7 @@
     for (int column = 0; column < columnCount; ++column) {
       cleanCell(row, column, false);
     }
-    DOM.removeChild(bodyElem, rowFormatter.getRow(bodyElem, row));
+    bodyElem.removeChild(rowFormatter.getRow(bodyElem, row));
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/ui/HorizontalPanel.java b/user/src/com/google/gwt/user/client/ui/HorizontalPanel.java
index 67d4426..df5184d 100644
--- a/user/src/com/google/gwt/user/client/ui/HorizontalPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/HorizontalPanel.java
@@ -38,8 +38,8 @@
     tableRow = DOM.createTR();
     DOM.appendChild(getBody(), tableRow);
 
-    DOM.setElementProperty(getTable(), "cellSpacing", "0");
-    DOM.setElementProperty(getTable(), "cellPadding", "0");
+    getTable().setPropertyString("cellSpacing", "0");
+    getTable().setPropertyString("cellPadding", "0");
   }
 
   @Override
@@ -84,7 +84,7 @@
     Element td = DOM.getParent(w.getElement());
     boolean removed = super.remove(w);
     if (removed) {
-      DOM.removeChild(tableRow, td);
+      tableRow.removeChild(td);
     }
     return removed;
   }
diff --git a/user/src/com/google/gwt/user/client/ui/HorizontalSplitPanel.java b/user/src/com/google/gwt/user/client/ui/HorizontalSplitPanel.java
index d1ad785..8ce20ed 100644
--- a/user/src/com/google/gwt/user/client/ui/HorizontalSplitPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/HorizontalSplitPanel.java
@@ -84,7 +84,7 @@
     public void init(HorizontalSplitPanel panel) {
       this.panel = panel;
 
-      DOM.setStyleAttribute(panel.getElement(), "position", "relative");
+      panel.getElement().getStyle().setProperty("position", "relative");
 
       expandToFitParentHorizontally(panel.getElement(LEFT));
       expandToFitParentHorizontally(panel.getElement(RIGHT));
@@ -211,7 +211,7 @@
         elem.getStyle().setTextAlign(TextAlign.LEFT);
       }
 
-      DOM.setStyleAttribute(elem, "position", "relative");
+      elem.getStyle().setProperty("position", "relative");
 
       /*
        * Technically, these are snapped to the top and bottom, but IE doesn't
@@ -240,7 +240,7 @@
 
     @Override
     public void onDetach() {
-      DOM.setElementAttribute(panel.container, "onresize", null);
+      panel.container.setAttribute("onresize", null);
     }
 
     @Override
diff --git a/user/src/com/google/gwt/user/client/ui/Hyperlink.java b/user/src/com/google/gwt/user/client/ui/Hyperlink.java
index 61b9821..60b0ed4 100644
--- a/user/src/com/google/gwt/user/client/ui/Hyperlink.java
+++ b/user/src/com/google/gwt/user/client/ui/Hyperlink.java
@@ -283,7 +283,7 @@
     super.onBrowserEvent(event);
     if (DOM.eventGetType(event) == Event.ONCLICK && impl.handleAsClick(event)) {
       History.newItem(getTargetHistoryToken());
-      DOM.eventPreventDefault(event);
+      event.preventDefault();
     }
   }
 
@@ -343,7 +343,7 @@
       : "targetHistoryToken must not be null, consider using Anchor instead";
     this.targetHistoryToken = targetHistoryToken;
     String hash = History.encodeHistoryToken(targetHistoryToken);
-    DOM.setElementProperty(anchorElem, "href", "#" + hash);
+    anchorElem.setPropertyString("href", "#" + hash);
   }
 
   public void setText(String text) {
diff --git a/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java b/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java
index 62dbde8..18e5ab4 100644
--- a/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java
@@ -37,10 +37,10 @@
    * @return the modifiers as defined in {@link KeyboardListener}.
    */
   public static int getKeyboardModifiers(Event event) {
-    return (DOM.eventGetShiftKey(event) ? KeyboardListener.MODIFIER_SHIFT : 0)
-        | (DOM.eventGetMetaKey(event) ? KeyboardListener.MODIFIER_META : 0)
-        | (DOM.eventGetCtrlKey(event) ? KeyboardListener.MODIFIER_CTRL : 0)
-        | (DOM.eventGetAltKey(event) ? KeyboardListener.MODIFIER_ALT : 0);
+    return (event.getShiftKey() ? KeyboardListener.MODIFIER_SHIFT : 0)
+        | (event.getMetaKey() ? KeyboardListener.MODIFIER_META : 0)
+        | (event.getCtrlKey() ? KeyboardListener.MODIFIER_CTRL : 0)
+        | (event.getAltKey() ? KeyboardListener.MODIFIER_ALT : 0);
   }
 
   /**
@@ -55,15 +55,15 @@
 
     switch (DOM.eventGetType(event)) {
       case Event.ONKEYDOWN:
-        fireKeyDown(sender, (char) DOM.eventGetKeyCode(event), modifiers);
+        fireKeyDown(sender, (char) event.getKeyCode(), modifiers);
         break;
 
       case Event.ONKEYUP:
-        fireKeyUp(sender, (char) DOM.eventGetKeyCode(event), modifiers);
+        fireKeyUp(sender, (char) event.getKeyCode(), modifiers);
         break;
 
       case Event.ONKEYPRESS:
-        fireKeyPress(sender, (char) DOM.eventGetKeyCode(event), modifiers);
+        fireKeyPress(sender, (char) event.getKeyCode(), modifiers);
         break;
     }
   }
diff --git a/user/src/com/google/gwt/user/client/ui/MenuBar.java b/user/src/com/google/gwt/user/client/ui/MenuBar.java
index c09e68c..dda33fc 100644
--- a/user/src/com/google/gwt/user/client/ui/MenuBar.java
+++ b/user/src/com/google/gwt/user/client/ui/MenuBar.java
@@ -381,7 +381,7 @@
 
     Element container = getItemContainerElement();
     while (DOM.getChildCount(container) > 0) {
-      DOM.removeChild(container, DOM.getChild(container, 0));
+      container.removeChild(DOM.getChild(container, 0));
     }
 
     // Set the parent of all items to null
@@ -625,7 +625,7 @@
       }
 
       case Event.ONKEYDOWN: {
-        int keyCode = DOM.eventGetKeyCode(event);
+        int keyCode = event.getKeyCode();
         boolean isRtl = LocaleInfo.getCurrentLocale().isRTL();
         keyCode = KeyCodes.maybeSwapArrowKeysForRtl(keyCode, isRtl);
         switch (keyCode) {
@@ -999,14 +999,14 @@
     if (submenu == null) {
       // Remove the submenu indicator
       if (tdCount == 2) {
-        DOM.removeChild(tr, DOM.getChild(tr, 1));
+        tr.removeChild(DOM.getChild(tr, 1));
       }
       setItemColSpan(item, 2);
     } else if (tdCount == 1) {
       // Show the submenu indicator
       setItemColSpan(item, 1);
       Element td = DOM.createTD();
-      DOM.setElementProperty(td, "vAlign", "middle");
+      td.setPropertyString("vAlign", "middle");
       td.setInnerSafeHtml(subMenuIcon.getSafeHtml());
       setStyleName(td, "subMenuIcon");
       DOM.appendChild(tr, td);
@@ -1046,13 +1046,13 @@
   }
 
   private void eatEvent(Event event) {
-    DOM.eventCancelBubble(event, true);
-    DOM.eventPreventDefault(event);
+    event.stopPropagation();
+    event.preventDefault();
   }
 
   private MenuItem findItem(Element hItem) {
     for (MenuItem item : items) {
-      if (DOM.isOrHasChild(item.getElement(), hItem)) {
+      if (item.getElement().isOrHasChild(hItem)) {
         return item;
       }
     }
@@ -1098,10 +1098,10 @@
     }
 
     // Hide focus outline in Mozilla/Webkit/Opera
-    DOM.setStyleAttribute(getElement(), "outline", "0px");
+    getElement().getStyle().setProperty("outline", "0px");
 
     // Hide focus outline in IE 6/7
-    DOM.setElementAttribute(getElement(), "hideFocus", "true");
+    getElement().setAttribute("hideFocus", "true");
 
     // Deselect items when blurring without a child menu.
     addDomHandler(new BlurHandler() {
@@ -1278,7 +1278,7 @@
     }
 
     Element container = getItemContainerElement();
-    DOM.removeChild(container, DOM.getChild(container, idx));
+    container.removeChild(DOM.getChild(container, idx));
     allItems.remove(idx);
     return true;
   }
@@ -1383,6 +1383,6 @@
    * @param colspan the colspan
    */
   private void setItemColSpan(UIObject item, int colspan) {
-    DOM.setElementPropertyInt(item.getElement(), "colSpan", colspan);
+    item.getElement().setPropertyInt("colSpan", colspan);
   }
 }
diff --git a/user/src/com/google/gwt/user/client/ui/MenuItem.java b/user/src/com/google/gwt/user/client/ui/MenuItem.java
index 3c9cf22..52e538d 100644
--- a/user/src/com/google/gwt/user/client/ui/MenuItem.java
+++ b/user/src/com/google/gwt/user/client/ui/MenuItem.java
@@ -126,7 +126,7 @@
     }
     setStyleName("gwt-MenuItem");
 
-    DOM.setElementAttribute(getElement(), "id", DOM.createUniqueId());
+    getElement().setAttribute("id", DOM.createUniqueId());
     // Add a11y role "menuitem"
     Roles.getMenuitemRole().set(getElement());
   }
@@ -163,7 +163,7 @@
 
   @Override
   public String getHTML() {
-    return DOM.getInnerHTML(getElement());
+    return getElement().getInnerHTML();
   }
 
   /**
@@ -195,7 +195,7 @@
 
   @Override
   public String getText() {
-    return DOM.getInnerText(getElement());
+    return getElement().getInnerText();
   }
 
   @Override
@@ -231,7 +231,7 @@
 
   @Override
   public void setHTML(String html) {
-    DOM.setInnerHTML(getElement(), html);
+    getElement().setInnerHTML(html);
   }
 
   /**
@@ -269,7 +269,7 @@
 
   @Override
   public void setText(String text) {
-    DOM.setInnerText(getElement(), text);
+    getElement().setInnerText(text);
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java b/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java
index 49d849a..57c4311 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java
@@ -64,11 +64,11 @@
    */
   public void fireMouseEvent(Widget sender, Event event) {
     final Element senderElem = sender.getElement();
-    int x = DOM.eventGetClientX(event) - DOM.getAbsoluteLeft(senderElem)
-        + DOM.getElementPropertyInt(senderElem, "scrollLeft")
+    int x = event.getClientX() - senderElem.getAbsoluteLeft()
+        + senderElem.getPropertyInt("scrollLeft")
         + Window.getScrollLeft();
-    int y = DOM.eventGetClientY(event) - DOM.getAbsoluteTop(senderElem)
-        + DOM.getElementPropertyInt(senderElem, "scrollTop")
+    int y = event.getClientY() - senderElem.getAbsoluteTop()
+        + senderElem.getPropertyInt("scrollTop")
         + Window.getScrollTop();
 
     switch (DOM.eventGetType(event)) {
@@ -85,7 +85,7 @@
         // Only fire the mouseEnter event if it's coming from outside this
         // widget.
         Element from = DOM.eventGetFromElement(event);
-        if (from == null || !DOM.isOrHasChild(senderElem, from)) {
+        if (from == null || !senderElem.isOrHasChild(from)) {
           fireMouseEnter(sender);
         }
         break;
@@ -93,7 +93,7 @@
         // Only fire the mouseLeave event if it's actually leaving this
         // widget.
         Element to = DOM.eventGetToElement(event);
-        if (to == null || !DOM.isOrHasChild(senderElem, to)) {
+        if (to == null || !senderElem.isOrHasChild(to)) {
           fireMouseLeave(sender);
         }
         break;
diff --git a/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java b/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java
index 3cc8703..9f5a065 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 
 /**
@@ -43,7 +42,7 @@
    * @param e the event
    */
   public MouseWheelVelocity(Event e) {
-    vY = DOM.eventGetMouseWheelVelocityY(e);
+    vY = e.getMouseWheelVelocityY();
   }
 
   @Override
diff --git a/user/src/com/google/gwt/user/client/ui/NamedFrame.java b/user/src/com/google/gwt/user/client/ui/NamedFrame.java
index fb65033..de95fa8 100644
--- a/user/src/com/google/gwt/user/client/ui/NamedFrame.java
+++ b/user/src/com/google/gwt/user/client/ui/NamedFrame.java
@@ -112,6 +112,6 @@
    * @return the frame's name
    */
   public String getName() {
-    return DOM.getElementProperty(getElement(), "name");
+    return getElement().getPropertyString("name");
   }
 }
diff --git a/user/src/com/google/gwt/user/client/ui/Panel.java b/user/src/com/google/gwt/user/client/ui/Panel.java
index 42515a7..2884ec4 100644
--- a/user/src/com/google/gwt/user/client/ui/Panel.java
+++ b/user/src/com/google/gwt/user/client/ui/Panel.java
@@ -162,7 +162,7 @@
     // element is still attached when onDetach()/onUnload() are called.
     Element elem = w.getElement();
     w.setParent(null);
-    DOM.removeChild(DOM.getParent(elem), elem);
+    DOM.getParent(elem).removeChild(elem);
   }
 
   @Override
diff --git a/user/src/com/google/gwt/user/client/ui/PopupPanel.java b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
index ddcad33..30f5288 100644
--- a/user/src/com/google/gwt/user/client/ui/PopupPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
@@ -212,7 +212,7 @@
           // Set the position attribute, and then attach to the DOM. Otherwise,
           // the PopupPanel will appear to 'jump' from its static/relative
           // position to its absolute position (issue #1231).
-          DOM.setStyleAttribute(curPanel.getElement(), "position", "absolute");
+          curPanel.getElement().getStyle().setProperty("position", "absolute");
           if (curPanel.topPosition != -1) {
             curPanel.setPopupPosition(curPanel.leftPosition,
                 curPanel.topPosition);
@@ -250,14 +250,14 @@
         impl.onHide(curPanel.getElement());
       }
       impl.setClip(curPanel.getElement(), "rect(auto, auto, auto, auto)");
-      DOM.setStyleAttribute(curPanel.getElement(), "overflow", "visible");
+      curPanel.getElement().getStyle().setProperty("overflow", "visible");
     }
 
     @Override
     protected void onStart() {
       offsetHeight = curPanel.getOffsetHeight();
       offsetWidth = curPanel.getOffsetWidth();
-      DOM.setStyleAttribute(curPanel.getElement(), "overflow", "hidden");
+      curPanel.getElement().getStyle().setProperty("overflow", "hidden");
       super.onStart();
     }
 
@@ -337,7 +337,7 @@
         // Set the position attribute, and then attach to the DOM. Otherwise,
         // the PopupPanel will appear to 'jump' from its static/relative
         // position to its absolute position (issue #1231).
-        DOM.setStyleAttribute(curPanel.getElement(), "position", "absolute");
+        curPanel.getElement().getStyle().setProperty("position", "absolute");
         if (curPanel.topPosition != -1) {
           curPanel.setPopupPosition(curPanel.leftPosition, curPanel.topPosition);
         }
@@ -349,7 +349,7 @@
         }
         impl.onHide(curPanel.getElement());
       }
-      DOM.setStyleAttribute(curPanel.getElement(), "overflow", "visible");
+      curPanel.getElement().getStyle().setProperty("overflow", "visible");
     }
   }
 
@@ -589,7 +589,7 @@
    * @return the popup's left position
    */
   public int getPopupLeft() {
-    return DOM.getAbsoluteLeft(getElement());
+    return getElement().getAbsoluteLeft();
   }
 
   /**
@@ -598,12 +598,12 @@
    * @return the popup's top position
    */
   public int getPopupTop() {
-    return DOM.getAbsoluteTop(getElement());
+    return getElement().getAbsoluteTop();
   }
 
   @Override
   public String getTitle() {
-    return DOM.getElementProperty(getContainerElement(), "title");
+    return getContainerElement().getPropertyString("title");
   }
 
   /**
@@ -960,8 +960,7 @@
     // Because the panel is absolutely positioned, this will not create
     // "holes" in displayed contents and it allows normal layout passes
     // to occur so the size of the PopupPanel can be reliably determined.
-    DOM.setStyleAttribute(getElement(), "visibility", visible ? "visible"
-        : "hidden");
+    getElement().getStyle().setProperty("visibility", visible ? "visible" : "hidden");
 
     // If the PopupImpl creates an iframe shim, it's also necessary to hide it
     // as well.
diff --git a/user/src/com/google/gwt/user/client/ui/SplitPanel.java b/user/src/com/google/gwt/user/client/ui/SplitPanel.java
index b0b84b2..162d472 100644
--- a/user/src/com/google/gwt/user/client/ui/SplitPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/SplitPanel.java
@@ -44,7 +44,7 @@
    * @param elem the element
    */
   static void addAbsolutePositoning(Element elem) {
-    DOM.setStyleAttribute(elem, "position", "absolute");
+    elem.getStyle().setProperty("position", "absolute");
   }
 
   /**
@@ -53,7 +53,7 @@
    * @param elem the element
    */
   static final void addClipping(final Element elem) {
-    DOM.setStyleAttribute(elem, "overflow", "hidden");
+    elem.getStyle().setProperty("overflow", "hidden");
   }
 
   /**
@@ -62,7 +62,7 @@
    * @param elem the element
    */
   static final void addScrolling(final Element elem) {
-    DOM.setStyleAttribute(elem, "overflow", "auto");
+    elem.getStyle().setProperty("overflow", "auto");
   }
 
   /**
@@ -107,7 +107,7 @@
    * @return the offsetHeight property
    */
   static final int getOffsetHeight(Element elem) {
-    return DOM.getElementPropertyInt(elem, "offsetHeight");
+    return elem.getPropertyInt("offsetHeight");
   }
 
   /**
@@ -117,7 +117,7 @@
    * @return the offsetWidth property
    */
   static final int getOffsetWidth(Element elem) {
-    return DOM.getElementPropertyInt(elem, "offsetWidth");
+    return elem.getPropertyInt("offsetWidth");
   }
 
   /**
@@ -131,7 +131,7 @@
   static final Element preventBoxStyles(final Element elem) {
     DOM.setIntStyleAttribute(elem, "padding", 0);
     DOM.setIntStyleAttribute(elem, "margin", 0);
-    DOM.setStyleAttribute(elem, "border", "none");
+    elem.getStyle().setProperty("border", "none");
     return elem;
   }
 
@@ -142,7 +142,7 @@
    * @param size a CSS length value for bottom
    */
   static void setBottom(Element elem, String size) {
-    DOM.setStyleAttribute(elem, "bottom", size);
+    elem.getStyle().setProperty("bottom", size);
   }
 
   /**
@@ -152,7 +152,7 @@
    * @param className the class name
    */
   static final void setClassname(final Element elem, final String className) {
-    DOM.setElementProperty(elem, "className", className);
+    elem.setPropertyString("className", className);
   }
 
   /**
@@ -162,7 +162,7 @@
    * @param height a CSS length value for the height
    */
   static final void setHeight(Element elem, String height) {
-    DOM.setStyleAttribute(elem, "height", height);
+    elem.getStyle().setProperty("height", height);
   }
 
   /**
@@ -172,7 +172,7 @@
    * @param left a CSS length value for left
    */
   static final void setLeft(Element elem, String left) {
-    DOM.setStyleAttribute(elem, "left", left);
+    elem.getStyle().setProperty("left", left);
   }
 
   /**
@@ -182,7 +182,7 @@
    * @param right a CSS length value for right
    */
   static final void setRight(Element elem, String right) {
-    DOM.setStyleAttribute(elem, "right", right);
+    elem.getStyle().setProperty("right", right);
   }
 
   /**
@@ -192,7 +192,7 @@
    * @param top a CSS length value for top
    */
   static final void setTop(Element elem, String top) {
-    DOM.setStyleAttribute(elem, "top", top);
+    elem.getStyle().setProperty("top", top);
   }
 
   /**
@@ -202,7 +202,7 @@
    * @param width a CSS length value for the width
    */
   static final void setWidth(Element elem, String width) {
-    DOM.setStyleAttribute(elem, "width", width);
+    elem.getStyle().setProperty("width", width);
   }
 
   // The enclosed widgets.
@@ -283,11 +283,11 @@
 
       case Event.ONMOUSEDOWN: {
         Element target = DOM.eventGetTarget(event);
-        if (DOM.isOrHasChild(splitElem, target)) {
-          startResizingFrom(DOM.eventGetClientX(event) - getAbsoluteLeft(),
-              DOM.eventGetClientY(event) - getAbsoluteTop());
+        if (splitElem.isOrHasChild(target)) {
+          startResizingFrom(event.getClientX() - getAbsoluteLeft(),
+              event.getClientY() - getAbsoluteTop());
           DOM.setCapture(getElement());
-          DOM.eventPreventDefault(event);
+          event.preventDefault();
         }
         break;
       }
@@ -306,9 +306,9 @@
       case Event.ONMOUSEMOVE: {
         if (isResizing()) {
           assert DOM.getCaptureElement() != null;
-          onSplitterResize(DOM.eventGetClientX(event) - getAbsoluteLeft(),
-              DOM.eventGetClientY(event) - getAbsoluteTop());
-          DOM.eventPreventDefault(event);
+          onSplitterResize(event.getClientX() - getAbsoluteLeft(),
+              event.getClientY() - getAbsoluteTop());
+          event.preventDefault();
         }
         break;
       }
@@ -414,7 +414,7 @@
         orphan(oldWidget);
       } finally {
         // Physical detach old.
-        DOM.removeChild(elements[index], oldWidget.getElement());
+        elements[index].removeChild(oldWidget.getElement());
         widgets[index] = null;
       }
     }
diff --git a/user/src/com/google/gwt/user/client/ui/StackPanel.java b/user/src/com/google/gwt/user/client/ui/StackPanel.java
index c7a8898..f1c809a 100644
--- a/user/src/com/google/gwt/user/client/ui/StackPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/StackPanel.java
@@ -65,8 +65,8 @@
 
     body = DOM.createTBody();
     DOM.appendChild(table, body);
-    DOM.setElementPropertyInt(table, "cellSpacing", 0);
-    DOM.setElementPropertyInt(table, "cellPadding", 0);
+    table.setPropertyInt("cellSpacing", 0);
+    table.setPropertyInt("cellPadding", 0);
 
     DOM.sinkEvents(table, Event.ONCLICK);
     setStyleName(DEFAULT_STYLENAME);
@@ -146,13 +146,13 @@
 
     // header styling
     setStyleName(tdh, DEFAULT_ITEM_STYLENAME, true);
-    DOM.setElementPropertyInt(tdh, "__owner", hashCode());
-    DOM.setElementProperty(tdh, "height", "1px");
+    tdh.setPropertyInt("__owner", hashCode());
+    tdh.setPropertyString("height", "1px");
 
     // body styling
     setStyleName(tdb, DEFAULT_STYLENAME + "Content", true);
-    DOM.setElementProperty(tdb, "height", "100%");
-    DOM.setElementProperty(tdb, "vAlign", "top");
+    tdb.setPropertyString("height", "100%");
+    tdb.setPropertyString("vAlign", "top");
 
     // Now that the DOM is connected, call insert (this ensures that onLoad() is
     // not fired until the child widget is attached to the DOM).
@@ -231,9 +231,9 @@
     Element tdWrapper = DOM.getChild(DOM.getChild(body, index * 2), 0);
     Element headerElem = DOM.getFirstChild(tdWrapper);
     if (asHTML) {
-      DOM.setInnerHTML(getHeaderTextElem(headerElem), text);
+      getHeaderTextElem(headerElem).setInnerHTML(text);
     } else {
-      DOM.setInnerText(getHeaderTextElem(headerElem), text);
+      getHeaderTextElem(headerElem).setInnerText(text);
     }
   }
 
@@ -300,10 +300,10 @@
 
   private int findDividerIndex(Element elem) {
     while (elem != null && elem != getElement()) {
-      String expando = DOM.getElementProperty(elem, "__index");
+      String expando = elem.getPropertyString("__index");
       if (expando != null) {
         // Make sure it belongs to me!
-        int ownerHash = DOM.getElementPropertyInt(elem, "__owner");
+        int ownerHash = elem.getPropertyInt("__owner");
         if (ownerHash == hashCode()) {
           // Yes, it's mine.
           return Integer.parseInt(expando);
@@ -324,9 +324,9 @@
       // Calculate which internal table elements to remove.
       int rowIndex = 2 * index;
       Element tr = DOM.getChild(body, rowIndex);
-      DOM.removeChild(body, tr);
+      body.removeChild(tr);
       tr = DOM.getChild(body, rowIndex);
-      DOM.removeChild(body, tr);
+      body.removeChild(tr);
 
       // Correct visible stack for new location.
       if (visibleStack == index) {
@@ -373,7 +373,7 @@
     for (int i = beforeIndex, c = getWidgetCount(); i < c; ++i) {
       Element childTR = DOM.getChild(body, i * 2);
       Element childTD = DOM.getFirstChild(childTR);
-      DOM.setElementPropertyInt(childTD, "__index", i);
+      childTD.setPropertyInt("__index", i);
 
       // Update the special style on the first element
       if (beforeIndex == 0) {
diff --git a/user/src/com/google/gwt/user/client/ui/SuggestBox.java b/user/src/com/google/gwt/user/client/ui/SuggestBox.java
index a3e4be7..fd24c48 100644
--- a/user/src/com/google/gwt/user/client/ui/SuggestBox.java
+++ b/user/src/com/google/gwt/user/client/ui/SuggestBox.java
@@ -35,7 +35,6 @@
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.PopupPanel.AnimationType;
 import com.google.gwt.user.client.ui.SuggestOracle.Callback;
 import com.google.gwt.user.client.ui.SuggestOracle.Request;
@@ -616,7 +615,7 @@
       // menu. If the window is resized and the suggestion cannot fit on a
       // single row, it should be clipped (instead of wrapping around and
       // taking up a second row).
-      DOM.setStyleAttribute(getElement(), "whiteSpace", "nowrap");
+      getElement().getStyle().setProperty("whiteSpace", "nowrap");
       setStyleName(STYLENAME_DEFAULT);
       setSuggestion(suggestion);
     }
diff --git a/user/src/com/google/gwt/user/client/ui/TabBar.java b/user/src/com/google/gwt/user/client/ui/TabBar.java
index c2c6d39..d57cb6d 100644
--- a/user/src/com/google/gwt/user/client/ui/TabBar.java
+++ b/user/src/com/google/gwt/user/client/ui/TabBar.java
@@ -163,7 +163,7 @@
           break;
 
         case Event.ONKEYDOWN:
-          if (((char) DOM.eventGetKeyCode(event)) == KeyCodes.KEY_ENTER) {
+          if (((char) event.getKeyCode()) == KeyCodes.KEY_ENTER) {
             TabBar.this.selectTabByTabWidget(this);
           }
           TabBar.this.onKeyDown(this, (char) event.getKeyCode(),
diff --git a/user/src/com/google/gwt/user/client/ui/Tree.java b/user/src/com/google/gwt/user/client/ui/Tree.java
index 724cf3f..46120df 100644
--- a/user/src/com/google/gwt/user/client/ui/Tree.java
+++ b/user/src/com/google/gwt/user/client/ui/Tree.java
@@ -595,7 +595,7 @@
       case Event.ONKEYPRESS:
       case Event.ONKEYUP:
         // Issue 1890: Do not block history navigation via alt+left/right
-        if (DOM.eventGetAltKey(event) || DOM.eventGetMetaKey(event)) {
+        if (event.getAltKey() || event.getMetaKey()) {
           super.onBrowserEvent(event);
           return;
         }
@@ -641,7 +641,7 @@
       }
 
       case Event.ONKEYUP: {
-        if (DOM.eventGetKeyCode(event) == KeyCodes.KEY_TAB) {
+        if (event.getKeyCode() == KeyCodes.KEY_TAB) {
           ArrayList<Element> chain = new ArrayList<Element>();
           collectElementChain(chain, getElement(), DOM.eventGetTarget(event));
           TreeItem item = findItemByChain(chain, 0, root);
@@ -657,9 +657,9 @@
     switch (eventType) {
       case Event.ONKEYDOWN:
       case Event.ONKEYUP: {
-        if (KeyCodes.isArrowKey(DOM.eventGetKeyCode(event))) {
-          DOM.eventCancelBubble(event, true);
-          DOM.eventPreventDefault(event);
+        if (KeyCodes.isArrowKey(event.getKeyCode())) {
+          event.stopPropagation();
+          event.preventDefault();
           return;
         }
       }
@@ -965,9 +965,9 @@
     if (useLeafImages || treeItem.isFullNode()) {
       showImage(treeItem, images.treeLeaf());
     } else if (LocaleInfo.getCurrentLocale().isRTL()) {
-      DOM.setStyleAttribute(treeItem.getElement(), "paddingRight", indentValue);
+      treeItem.getElement().getStyle().setProperty("paddingRight", indentValue);
     } else {
-      DOM.setStyleAttribute(treeItem.getElement(), "paddingLeft", indentValue);
+      treeItem.getElement().getStyle().setProperty("paddingLeft", indentValue);
     }
   }
 
@@ -1000,10 +1000,10 @@
     TreeItem item = findItemByChain(chain, 0, root);
     if (item != null && item != root) {
       if (item.getChildCount() > 0
-          && DOM.isOrHasChild(item.getImageElement(), hElem)) {
+          && item.getImageElement().isOrHasChild(hElem)) {
         item.setState(!item.getState(), true);
         return true;
-      } else if (DOM.isOrHasChild(item.getElement(), hElem)) {
+      } else if (item.getElement().isOrHasChild(hElem)) {
         onSelection(item, true, !shouldTreeDelegateFocusToElement(hElem));
         return true;
       }
@@ -1063,22 +1063,22 @@
     setImages(images, useLeafImages);
     setElement(DOM.createDiv());
 
-    DOM.setStyleAttribute(getElement(), "position", "relative");
+    getElement().getStyle().setProperty("position", "relative");
 
     // Fix rendering problem with relatively-positioned elements and their
     // children by
     // forcing the element that is positioned relatively to 'have layout'
-    DOM.setStyleAttribute(getElement(), "zoom", "1");
+    getElement().getStyle().setProperty("zoom", "1");
 
     focusable = FocusPanel.impl.createFocusable();
-    DOM.setStyleAttribute(focusable, "fontSize", "0");
-    DOM.setStyleAttribute(focusable, "position", "absolute");
+    focusable.getStyle().setProperty("fontSize", "0");
+    focusable.getStyle().setProperty("position", "absolute");
 
     // Hide focus outline in Mozilla/Webkit/Opera
-    DOM.setStyleAttribute(focusable, "outline", "0px");
+    focusable.getStyle().setProperty("outline", "0px");
 
     // Hide focus outline in IE 6/7
-    DOM.setElementAttribute(focusable, "hideFocus", "true");
+    focusable.setAttribute("hideFocus", "true");
 
     DOM.setIntStyleAttribute(focusable, "zIndex", -1);
     DOM.appendChild(getElement(), focusable);
@@ -1099,7 +1099,7 @@
   private void keyboardNavigation(Event event) {
     // Handle keyboard events if keyboard navigation is enabled
     if (isKeyboardNavigationEnabled(curSelection)) {
-      int code = DOM.eventGetKeyCode(event);
+      int code = event.getKeyCode();
 
       switch (KeyCodes.maybeSwapArrowKeysForRtl(code, LocaleInfo.getCurrentLocale().isRTL())) {
         case KeyCodes.KEY_UP: {
@@ -1162,7 +1162,7 @@
     if (focusableWidget != null) {
       focusableWidget.setFocus(true);
       if (scrollOnSelectEnabled) {
-        DOM.scrollIntoView(((Widget) focusableWidget).getElement());
+        ((Widget) focusableWidget).getElement().scrollIntoView();
       }
     } else {
       if (scrollOnSelectEnabled) {
@@ -1172,10 +1172,10 @@
         int containerLeft = getAbsoluteLeft();
         int containerTop = getAbsoluteTop();
   
-        int left = DOM.getAbsoluteLeft(selectedElem) - containerLeft;
-        int top = DOM.getAbsoluteTop(selectedElem) - containerTop;
-        int width = DOM.getElementPropertyInt(selectedElem, "offsetWidth");
-        int height = DOM.getElementPropertyInt(selectedElem, "offsetHeight");
+        int left = selectedElem.getAbsoluteLeft() - containerLeft;
+        int top = selectedElem.getAbsoluteTop() - containerTop;
+        int width = selectedElem.getPropertyInt("offsetWidth");
+        int height = selectedElem.getPropertyInt("offsetHeight");
 
         // If the item is not visible, quite here
         if (width == 0 || height == 0) {
@@ -1186,13 +1186,13 @@
   
         // Set the focusable element's position and size to exactly underlap the
         // item's content element.
-        DOM.setStyleAttribute(focusable, "left", left + "px");
-        DOM.setStyleAttribute(focusable, "top", top + "px");
-        DOM.setStyleAttribute(focusable, "width", width + "px");
-        DOM.setStyleAttribute(focusable, "height", height + "px");
+        focusable.getStyle().setProperty("left", left + "px");
+        focusable.getStyle().setProperty("top", top + "px");
+        focusable.getStyle().setProperty("width", width + "px");
+        focusable.getStyle().setProperty("height", height + "px");
   
         // Scroll it into view.
-        DOM.scrollIntoView(focusable);
+        focusable.scrollIntoView();
       }
 
       // Update ARIA attributes to reflect the information from the
@@ -1292,7 +1292,7 @@
 
     if (!useLeafImages) {
       Image image = images.treeLeaf().createImage();
-      DOM.setStyleAttribute(image.getElement(), "visibility", "hidden");
+      image.getElement().getStyle().setProperty("visibility", "hidden");
       RootPanel.get().add(image);
       int size = image.getWidth() + TreeItem.IMAGE_PAD;
       image.removeFromParent();
diff --git a/user/src/com/google/gwt/user/client/ui/TreeItem.java b/user/src/com/google/gwt/user/client/ui/TreeItem.java
index 949967b..10c916a 100644
--- a/user/src/com/google/gwt/user/client/ui/TreeItem.java
+++ b/user/src/com/google/gwt/user/client/ui/TreeItem.java
@@ -71,7 +71,7 @@
         Element tdContent = DOM.getNextSibling(tdImg);
 
         // Undoes padding from table element.
-        DOM.setStyleAttribute(item.getElement(), "padding", "0px");
+        item.getElement().getStyle().setProperty("padding", "0px");
         DOM.appendChild(tdContent, item.contentElem);
         item.imageHolder = tdImg;
       }
@@ -91,18 +91,18 @@
         DOM.appendChild(tbody, tr);
         DOM.appendChild(tr, tdImg);
         DOM.appendChild(tr, tdContent);
-        DOM.setStyleAttribute(tdImg, "verticalAlign", "middle");
-        DOM.setStyleAttribute(tdContent, "verticalAlign", "middle");
+        tdImg.getStyle().setProperty("verticalAlign", "middle");
+        tdContent.getStyle().setProperty("verticalAlign", "middle");
         DOM.appendChild(tdContent, contentElem);
-        DOM.setStyleAttribute(contentElem, "display", "inline");
+        contentElem.getStyle().setProperty("display", "inline");
         setStyleName(contentElem, "gwt-TreeItem");
-        DOM.setStyleAttribute(BASE_INTERNAL_ELEM, "whiteSpace", "nowrap");
+        BASE_INTERNAL_ELEM.getStyle().setProperty("whiteSpace", "nowrap");
 
         // Create the base element that will be cloned
         BASE_BARE_ELEM = DOM.createDiv();
 
         // Simulates padding from table element.
-        DOM.setStyleAttribute(BASE_BARE_ELEM, "padding", "3px");
+        BASE_BARE_ELEM.getStyle().setProperty("padding", "3px");
         DOM.appendChild(BASE_BARE_ELEM, contentElem);
         Roles.getTreeitemRole().set(contentElem);
       }
@@ -116,7 +116,7 @@
     @Override
     void convertToFullNode(TreeItem item) {
       super.convertToFullNode(item);
-      DOM.setStyleAttribute(item.getElement(), "marginBottom", "0px");
+      item.getElement().getStyle().setProperty("marginBottom", "0px");
     }
   }
 
@@ -169,12 +169,12 @@
         if (opening) {
           UIObject.setVisible(curItem.childSpanElem, true);
           onUpdate(1.0);
-          DOM.setStyleAttribute(curItem.childSpanElem, "height", "auto");
+          curItem.childSpanElem.getStyle().setProperty("height", "auto");
         } else {
           UIObject.setVisible(curItem.childSpanElem, false);
         }
-        DOM.setStyleAttribute(curItem.childSpanElem, "overflow", "visible");
-        DOM.setStyleAttribute(curItem.childSpanElem, "width", "auto");
+        curItem.childSpanElem.getStyle().setProperty("overflow", "visible");
+        curItem.childSpanElem.getStyle().setProperty("width", "auto");
         curItem = null;
       }
     }
@@ -188,7 +188,7 @@
       if (!opening) {
         scrollHeight = curItem.childSpanElem.getScrollHeight();
       }
-      DOM.setStyleAttribute(curItem.childSpanElem, "overflow", "hidden");
+      curItem.childSpanElem.getStyle().setProperty("overflow", "hidden");
 
       // If the TreeItem is already open, onStart will set its height to its
       // natural height. If the TreeItem is currently closed, onStart will set
@@ -215,12 +215,11 @@
       // instead of hiding them completely.
       height = Math.max(height, 1);
 
-      DOM.setStyleAttribute(curItem.childSpanElem, "height", height + "px");
+      curItem.childSpanElem.getStyle().setProperty("height", height + "px");
 
       // We need to set the width explicitly of the item might be cropped
-      int scrollWidth = DOM.getElementPropertyInt(curItem.childSpanElem,
-          "scrollWidth");
-      DOM.setStyleAttribute(curItem.childSpanElem, "width", scrollWidth + "px");
+      int scrollWidth = curItem.childSpanElem.getPropertyInt("scrollWidth");
+      curItem.childSpanElem.getStyle().setProperty("width", scrollWidth + "px");
     }
   }
 
@@ -315,7 +314,7 @@
     Element elem = DOM.clone(BASE_BARE_ELEM, true);
     setElement(elem);
     contentElem = DOM.getFirstChild(elem);
-    DOM.setElementAttribute(contentElem, "id", DOM.createUniqueId());
+    contentElem.setAttribute("id", DOM.createUniqueId());
 
     // The root item always has children.
     if (isRoot) {
@@ -436,7 +435,7 @@
 
   @Override
   public String getHTML() {
-    return DOM.getInnerHTML(contentElem);
+    return contentElem.getInnerHTML();
   }
 
   /**
@@ -459,7 +458,7 @@
 
   @Override
   public String getText() {
-    return DOM.getInnerText(contentElem);
+    return contentElem.getInnerText();
   }
 
   /**
@@ -671,7 +670,7 @@
   @Override
   public void setHTML(String html) {
     setWidget(null);
-    DOM.setInnerHTML(contentElem, html);
+    contentElem.setInnerHTML(html);
   }
 
   @Override
@@ -727,7 +726,7 @@
   @Override
   public void setText(String text) {
     setWidget(null);
-    DOM.setInnerText(contentElem, text);
+    contentElem.setInnerText(text);
   }
 
   /**
@@ -764,7 +763,7 @@
     }
 
     // Clear out any existing content before adding a widget.
-    DOM.setInnerHTML(contentElem, "");
+    contentElem.setInnerHTML("");
 
     // Logical detach old/attach new.
     widget = newWidget;
@@ -782,7 +781,7 @@
       // order of the entire tree
 
       if (Tree.shouldTreeDelegateFocusToElement(widget.getElement())) {
-        DOM.setElementAttribute(widget.getElement(), "tabIndex", "-1");
+        widget.getElement().setAttribute("tabIndex", "-1");
       }
     }
   }
@@ -885,7 +884,7 @@
     convertToFullNode();
     childSpanElem = DOM.createDiv();
     DOM.appendChild(getElement(), childSpanElem);
-    DOM.setStyleAttribute(childSpanElem, "whiteSpace", "nowrap");
+    childSpanElem.getStyle().setProperty("whiteSpace", "nowrap");
     children = new ArrayList<TreeItem>();
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/UIObject.java b/user/src/com/google/gwt/user/client/ui/UIObject.java
index 6946edc..6f69f26 100644
--- a/user/src/com/google/gwt/user/client/ui/UIObject.java
+++ b/user/src/com/google/gwt/user/client/ui/UIObject.java
@@ -276,8 +276,7 @@
    * @return the objects's space-separated style names
    */
   protected static String getStyleName(Element elem) {
-    return DOM.getElementProperty(
-        elem.<com.google.gwt.user.client.Element> cast(), "className");
+    return elem.<com.google.gwt.user.client.Element>cast().getPropertyString("className");
   }
 
   /**
@@ -306,8 +305,7 @@
    * @param styleName the new style name
    */
   protected static void setStyleName(Element elem, String styleName) {
-    DOM.setElementProperty(elem.<com.google.gwt.user.client.Element> cast(),
-        "className", styleName);
+    elem.<com.google.gwt.user.client.Element>cast().setPropertyString("className", styleName);
   }
 
   /**
@@ -533,7 +531,7 @@
    * @return the object's absolute left position
    */
   public int getAbsoluteLeft() {
-    return DOM.getAbsoluteLeft(getElement());
+    return getElement().getAbsoluteLeft();
   }
 
   /**
@@ -543,7 +541,7 @@
    * @return the object's absolute top position
    */
   public int getAbsoluteTop() {
-    return DOM.getAbsoluteTop(getElement());
+    return getElement().getAbsoluteTop();
   }
 
   /**
@@ -569,7 +567,7 @@
    * @return the object's offset height
    */
   public int getOffsetHeight() {
-    return DOM.getElementPropertyInt(getElement(), "offsetHeight");
+    return getElement().getPropertyInt("offsetHeight");
   }
 
   /**
@@ -579,7 +577,7 @@
    * @return the object's offset width
    */
   public int getOffsetWidth() {
-    return DOM.getElementPropertyInt(getElement(), "offsetWidth");
+    return getElement().getPropertyInt("offsetWidth");
   }
 
   /**
@@ -613,7 +611,7 @@
    * @return the object's title
    */
   public String getTitle() {
-    return DOM.getElementProperty(getElement(), "title");
+    return getElement().getPropertyString("title");
   }
 
   @Override
@@ -656,7 +654,7 @@
     // This exists to deal with an inconsistency in IE's implementation where
     // it won't accept negative numbers in length measurements
     assert extractLengthValue(height.trim().toLowerCase()) >= 0 : "CSS heights should not be negative";
-    DOM.setStyleAttribute(getElement(), "height", height);
+    getElement().getStyle().setProperty("height", height);
   }
 
   /**
@@ -753,9 +751,9 @@
    */
   public void setTitle(String title) {
     if (title == null || title.length() == 0) {
-      DOM.removeElementAttribute(getElement(), "title");
+      getElement().removeAttribute("title");
     } else {
-      DOM.setElementAttribute(getElement(), "title", title);
+      getElement().setAttribute("title", title);
     }
   }
 
@@ -774,7 +772,7 @@
     // This exists to deal with an inconsistency in IE's implementation where
     // it won't accept negative numbers in length measurements
     assert extractLengthValue(width.trim().toLowerCase()) >= 0 : "CSS widths should not be negative";
-    DOM.setStyleAttribute(getElement(), "width", width);
+    getElement().getStyle().setProperty("width", width);
   }
 
   /**
@@ -814,7 +812,7 @@
     if (element == null) {
       return "(null handle)";
     }
-    return DOM.toString(getElement());
+    return getElement().getString();
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/ui/ValueBoxBase.java b/user/src/com/google/gwt/user/client/ui/ValueBoxBase.java
index 6b79675..e5c1390 100644
--- a/user/src/com/google/gwt/user/client/ui/ValueBoxBase.java
+++ b/user/src/com/google/gwt/user/client/ui/ValueBoxBase.java
@@ -142,7 +142,7 @@
    */
   public void cancelKey() {
     if (currentEvent != null) {
-      DOM.eventPreventDefault(currentEvent);
+      currentEvent.preventDefault();
     }
   }
 
@@ -168,7 +168,7 @@
   }
 
   public String getName() {
-    return DOM.getElementProperty(getElement(), "name");
+    return getElement().getPropertyString("name");
   }
 
   /**
@@ -195,7 +195,7 @@
   }
 
   public String getText() {
-    return DOM.getElementProperty(getElement(), "value");
+    return getElement().getPropertyString("value");
   }
 
   /**
@@ -233,7 +233,7 @@
    *         <code>false</code> if the widget is currently editable
    */
   public boolean isReadOnly() {
-    return DOM.getElementPropertyBoolean(getElement(), "readOnly");
+    return getElement().getPropertyBoolean("readOnly");
   }
 
   @Override
@@ -276,7 +276,7 @@
   }
 
   public void setAlignment(TextAlignment align) {
-    DOM.setStyleAttribute(getElement(), "textAlign", align.getTextAlignString());
+    getElement().getStyle().setProperty("textAlign", align.getTextAlignString());
   }
 
   /**
@@ -326,7 +326,7 @@
   }
 
   public void setName(String name) {
-    DOM.setElementProperty(getElement(), "name", name);
+    getElement().setPropertyString("name", name);
   }
 
   /**
@@ -336,7 +336,7 @@
    *          <code>false</code> the widget becomes editable
    */
   public void setReadOnly(boolean readOnly) {
-    DOM.setElementPropertyBoolean(getElement(), "readOnly", readOnly);
+    getElement().setPropertyBoolean("readOnly", readOnly);
     String readOnlyStyle = "readonly";
     if (readOnly) {
       addStyleDependentName(readOnlyStyle);
@@ -381,7 +381,7 @@
    * @param text the object's new text
    */
   public void setText(String text) {
-    DOM.setElementProperty(getElement(), "value", text != null ? text : "");
+    getElement().setPropertyString("value", text != null ? text : "");
     autoDirHandler.refreshDirection();
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/VerticalPanel.java b/user/src/com/google/gwt/user/client/ui/VerticalPanel.java
index 3f12866..593de88 100644
--- a/user/src/com/google/gwt/user/client/ui/VerticalPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/VerticalPanel.java
@@ -35,8 +35,8 @@
    * Creates an empty vertical panel.
    */
   public VerticalPanel() {
-    DOM.setElementProperty(getTable(), "cellSpacing", "0");
-    DOM.setElementProperty(getTable(), "cellPadding", "0");
+    getTable().setPropertyString("cellSpacing", "0");
+    getTable().setPropertyString("cellPadding", "0");
   }
 
   @Override
@@ -88,7 +88,7 @@
     Element td = DOM.getParent(w.getElement());
     boolean removed = super.remove(w);
     if (removed) {
-      DOM.removeChild(getBody(), DOM.getParent(td));
+      getBody().removeChild(DOM.getParent(td));
     }
     return removed;
   }
diff --git a/user/src/com/google/gwt/user/client/ui/VerticalSplitPanel.java b/user/src/com/google/gwt/user/client/ui/VerticalSplitPanel.java
index b0a7846..2c0112c 100644
--- a/user/src/com/google/gwt/user/client/ui/VerticalSplitPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/VerticalSplitPanel.java
@@ -75,8 +75,8 @@
   private static class Impl {
     private static void expandToFitParentHorizontally(Element elem) {
       addAbsolutePositoning(elem);
-      DOM.setStyleAttribute(elem, "left", "0");
-      DOM.setStyleAttribute(elem, "right", "0");
+      elem.getStyle().setProperty("left", "0");
+      elem.getStyle().setProperty("right", "0");
     }
 
     protected VerticalSplitPanel panel;
@@ -84,7 +84,7 @@
     public void init(VerticalSplitPanel panel) {
       this.panel = panel;
 
-      DOM.setStyleAttribute(panel.getElement(), "position", "relative");
+      panel.getElement().getStyle().setProperty("position", "relative");
 
       final Element topElem = panel.getElement(TOP);
       final Element bottomElem = panel.getElement(BOTTOM);
@@ -96,7 +96,7 @@
       expandToFitParentUsingCssOffsets(panel.container);
 
       // Snap the bottom wrapper to the bottom side.
-      DOM.setStyleAttribute(bottomElem, "bottom", "0");
+      bottomElem.getStyle().setProperty("bottom", "0");
     }
 
     public void onAttach() {
@@ -180,7 +180,7 @@
       // Prevents inherited text-align settings from interfering with the
       // panel's layout.
       elem.getStyle().setTextAlign(TextAlign.LEFT);
-      DOM.setStyleAttribute(elem, "position", "relative");
+      elem.getStyle().setProperty("position", "relative");
 
       final Element topElem = panel.getElement(TOP);
       final Element bottomElem = panel.getElement(BOTTOM);
@@ -200,7 +200,7 @@
 
     @Override
     public void onDetach() {
-      DOM.setElementProperty(panel.container, "onresize", null);
+      panel.container.setPropertyString("onresize", null);
     }
 
     @Override
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java
index a25051b..a18da4b 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImpl.java
@@ -44,11 +44,11 @@
   }
 
   public String getHTML() {
-    return DOM.getElementProperty(elem, "value");
+    return elem.getPropertyString("value");
   }
 
   public String getText() {
-    return DOM.getElementProperty(elem, "value");
+    return elem.getPropertyString("value");
   }
 
   public void initElement() {
@@ -72,7 +72,7 @@
   }-*/;
 
   public void setHTML(String html) {
-    DOM.setElementProperty(elem, "value", html);
+    elem.setPropertyString("value", html);
   }
 
   public void setOwner(HasInitializeHandlers owner) {
@@ -80,7 +80,7 @@
   }
 
   public void setText(String text) {
-    DOM.setElementProperty(elem, "value", text);
+    elem.setPropertyString("value", text);
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java
index 2dd3e80..f641c13 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplIE6.java
@@ -16,7 +16,6 @@
 package com.google.gwt.user.client.ui.impl;
 
 import com.google.gwt.dom.client.Node;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
 /**
@@ -35,7 +34,7 @@
   @Override
   public Element createElement() {
     Element elem = super.createElement();
-    DOM.setElementProperty(elem, "src", "javascript:''");
+    elem.setPropertyString("src", "javascript:''");
     return elem;
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java
index 1ef2250..ba1b704 100644
--- a/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java
+++ b/user/src/com/google/gwt/user/client/ui/impl/RichTextAreaImplStandard.java
@@ -79,12 +79,12 @@
 
   @Override
   public final String getHTML() {
-    return beforeInitPlaceholder == null ? getHTMLImpl() : DOM.getInnerHTML(beforeInitPlaceholder);
+    return beforeInitPlaceholder == null ? getHTMLImpl() : beforeInitPlaceholder.getInnerHTML();
   }
 
   @Override
   public final String getText() {
-    return beforeInitPlaceholder == null ? getTextImpl() : DOM.getInnerText(beforeInitPlaceholder);
+    return beforeInitPlaceholder == null ? getTextImpl() : beforeInitPlaceholder.getInnerText();
   }
 
   @Override
@@ -222,7 +222,7 @@
     if (beforeInitPlaceholder == null) {
       setHTMLImpl(html);
     } else {
-      DOM.setInnerHTML(beforeInitPlaceholder, html);
+      beforeInitPlaceholder.setInnerHTML(html);
     }
   }
 
@@ -243,7 +243,7 @@
     if (beforeInitPlaceholder == null) {
       setTextImpl(text);
     } else {
-      DOM.setInnerText(beforeInitPlaceholder, text);
+      beforeInitPlaceholder.setInnerText(text);
     }
   }
 
@@ -296,7 +296,7 @@
     String html = getHTML();
     boolean enabled = isEnabled();
     beforeInitPlaceholder = DOM.createDiv();
-    DOM.setInnerHTML(beforeInitPlaceholder, html);
+    beforeInitPlaceholder.setInnerHTML(html);
     setEnabled(enabled);
   }
 
@@ -366,7 +366,7 @@
 
     // When the iframe is ready, ensure cached content is set.
     if (beforeInitPlaceholder != null) {
-      setHTMLImpl(DOM.getInnerHTML(beforeInitPlaceholder));
+      setHTMLImpl(beforeInitPlaceholder.getInnerHTML());
       setEnabledImpl(isEnabled());
       beforeInitPlaceholder = null;
     }
diff --git a/user/src/com/google/gwt/user/datepicker/client/DefaultCalendarView.java b/user/src/com/google/gwt/user/datepicker/client/DefaultCalendarView.java
index b9fdd8b..9bef396 100644
--- a/user/src/com/google/gwt/user/datepicker/client/DefaultCalendarView.java
+++ b/user/src/com/google/gwt/user/datepicker/client/DefaultCalendarView.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.aria.client.Roles;
 import com.google.gwt.aria.client.SelectedValue;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
 import com.google.gwt.user.datepicker.client.DefaultCalendarView.CellGrid.DateCell;
 
@@ -134,7 +133,7 @@
       }
 
       private void setText(String value) {
-        DOM.setInnerText(getElement(), value);
+        getElement().setInnerText(value);
       }
     }
 
diff --git a/user/test/com/google/gwt/uibinder/test/client/ClickyLink.java b/user/test/com/google/gwt/uibinder/test/client/ClickyLink.java
index 236f444..26e16cb 100644
--- a/user/test/com/google/gwt/uibinder/test/client/ClickyLink.java
+++ b/user/test/com/google/gwt/uibinder/test/client/ClickyLink.java
@@ -45,7 +45,7 @@
    */
   public ClickyLink() {
     setElement(DOM.createAnchor());
-    DOM.setElementAttribute(getElement(), "href", "#");
+    getElement().setAttribute("href", "#");
     sinkEvents(Event.ONCLICK);
 
     addDomHandler(new ClickHandler() {
@@ -73,7 +73,7 @@
   }
 
   public String getText() {
-    return DOM.getInnerText(getElement());
+    return getElement().getInnerText();
   }
 
   public void setPopupText(String text) {
@@ -81,6 +81,6 @@
   }
 
   public void setText(String text) {
-    DOM.setInnerText(getElement(), text);
+    getElement().setInnerText(text);
   }
 }
diff --git a/user/test/com/google/gwt/user/client/WindowTest.java b/user/test/com/google/gwt/user/client/WindowTest.java
index 10d1e8a..977be95 100644
--- a/user/test/com/google/gwt/user/client/WindowTest.java
+++ b/user/test/com/google/gwt/user/client/WindowTest.java
@@ -61,7 +61,7 @@
     }
 
     for (int i = 0, n = toRemove.size(); i < n; ++i) {
-      DOM.removeChild(bodyElem, toRemove.get(i));
+      bodyElem.removeChild(toRemove.get(i));
     }
   }
 
diff --git a/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java b/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
index f44d04a..c4dfad5 100644
--- a/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
+++ b/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
@@ -75,10 +75,10 @@
     cb.setText("test Text");
     assertEquals(cb.getText(), "test Text");
 
-    cb.setChecked(true);
-    assertTrue(cb.isChecked());
-    cb.setChecked(false);
-    assertFalse(cb.isChecked());
+    cb.setValue(true);
+    assertTrue(cb.getValue());
+    cb.setValue(false);
+    assertFalse(cb.getValue());
 
     cb.setValue(true);
     assertTrue(cb.getValue());
@@ -241,9 +241,9 @@
   public void testValueChangeEvent() {
     Handler h = new Handler();
     cb.addValueChangeHandler(h);
-    cb.setChecked(false);
+    cb.setValue(false);
     assertNull(h.received);
-    cb.setChecked(true);
+    cb.setValue(true);
     assertNull(h.received);
 
     cb.setValue(false);
diff --git a/user/test/com/google/gwt/user/client/ui/CustomButtonTest.java b/user/test/com/google/gwt/user/client/ui/CustomButtonTest.java
index 9f0b8e2..18e2c23 100644
--- a/user/test/com/google/gwt/user/client/ui/CustomButtonTest.java
+++ b/user/test/com/google/gwt/user/client/ui/CustomButtonTest.java
@@ -23,7 +23,6 @@
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.junit.client.GWTTestCase;
 import com.google.gwt.safehtml.shared.SafeHtmlUtils;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.CustomButton.Face;
 
@@ -102,8 +101,7 @@
     for (Map.Entry<String, Face> entry : faces.entrySet()) {
       Face f = entry.getValue();
       b.setCurrentFace(f);
-      String computedStyleName = DOM.getElementProperty(b.getElement(),
-          "className");
+      String computedStyleName = b.getElement().getPropertyString("className");
       assertTrue(computedStyleName.indexOf("random") == 0);
       assertTrue(computedStyleName.indexOf("random-" + f.getName()) >= 0);
       assertTrue(computedStyleName.indexOf("fobar") >= 0);
diff --git a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
index b37d6bb..b79d4cc 100644
--- a/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DeckPanelTest.java
@@ -16,8 +16,6 @@
 
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.user.client.DOM;
-
 /**
  * Test for {@link DeckPanel}.
  */
@@ -131,15 +129,15 @@
     
     // Prepare widget, with width/height
     Label content = new Label("content");
-    DOM.setStyleAttribute(content.getElement(), "width", "5cm");
-    DOM.setStyleAttribute(content.getElement(), "height", "30mm");
+    content.getElement().getStyle().setProperty("width", "5cm");
+    content.getElement().getStyle().setProperty("height", "30mm");
     
     // Add a widget to the DeckPanel
     deck.add(content);
     
     // Verify width/height
-    assertEquals("5cm", DOM.getStyleAttribute(content.getElement(), "width"));
-    assertEquals("30mm", DOM.getStyleAttribute(content.getElement(), "height"));
+    assertEquals("5cm", content.getElement().getStyle().getProperty("width"));
+    assertEquals("30mm", content.getElement().getStyle().getProperty("height"));
   }
 
   @Override
diff --git a/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java b/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java
index d7b5c23..f913425 100644
--- a/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DecoratorPanelTest.java
@@ -31,7 +31,7 @@
    * @param styleName the style name the element should have
    */
   private static void assertStyleName(Element elem, String styleName) {
-    assertEquals(styleName, DOM.getElementProperty(elem, "className"));
+    assertEquals(styleName, elem.getPropertyString("className"));
   }
 
   /**
diff --git a/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java b/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java
index aac9f35..92ad196 100644
--- a/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DisclosurePanelTest.java
@@ -42,9 +42,8 @@
    */
   public void testCoreFunctionality() {
     final DisclosurePanel panel = createTestPanel();
-    assertTrue(DOM.getStyleAttribute(
-        DOM.getParent(panel.getContent().getElement()), "display").equalsIgnoreCase(
-        "none"));
+    assertTrue(DOM.getParent(panel.getContent().getElement())
+        .getStyle().getProperty("display").equalsIgnoreCase("none"));
 
     panel.setOpen(true);
 
@@ -53,9 +52,8 @@
     Timer t = new Timer() {
       @Override
       public void run() {
-        assertTrue(DOM.getStyleAttribute(
-            DOM.getParent(panel.getContent().getElement()), "display").trim().equals(
-            ""));
+        assertTrue(DOM.getParent(panel.getContent().getElement())
+            .getStyle().getProperty("display").trim().equals(""));
         finishTest();
       }
     };
diff --git a/user/test/com/google/gwt/user/client/ui/DockPanelTest.java b/user/test/com/google/gwt/user/client/ui/DockPanelTest.java
index b271f60..f5497f8 100644
--- a/user/test/com/google/gwt/user/client/ui/DockPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DockPanelTest.java
@@ -196,7 +196,8 @@
       Widget expectedChild) {
     Element panelElement = parent.getElement();
     Element childElement = expectedChild.getElement();
-    assertTrue("The parent's Element of the child must be the panel's Element", DOM.isOrHasChild(panelElement, childElement));
+    assertTrue("The parent's Element of the child must be the panel's Element", 
+        panelElement.isOrHasChild(childElement));
   }
 
   private DockPanel createDockPanel() {
diff --git a/user/test/com/google/gwt/user/client/ui/FlexTableTest.java b/user/test/com/google/gwt/user/client/ui/FlexTableTest.java
index 548d6a0..de1626c 100644
--- a/user/test/com/google/gwt/user/client/ui/FlexTableTest.java
+++ b/user/test/com/google/gwt/user/client/ui/FlexTableTest.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
 
 /**
@@ -58,7 +57,7 @@
         } else {
           if (widget != null) {
             System.err.println("row: " + row + ", col: " + col + ", widget: "
-                + DOM.toString(widget.getElement()));
+                + widget.getElement().getString());
           }
           assertNull(widget);
         }
diff --git a/user/test/com/google/gwt/user/client/ui/HasWidgetsTester.java b/user/test/com/google/gwt/user/client/ui/HasWidgetsTester.java
index 78fc776..3fb5e53 100644
--- a/user/test/com/google/gwt/user/client/ui/HasWidgetsTester.java
+++ b/user/test/com/google/gwt/user/client/ui/HasWidgetsTester.java
@@ -62,16 +62,14 @@
       // During onLoad, isAttached must be true, and the element be a descendant
       // of the body element.
       Assert.assertTrue(isAttached());
-      Assert.assertTrue(DOM.isOrHasChild(RootPanel.getBodyElement(),
-          getElement()));
+      Assert.assertTrue(RootPanel.getBodyElement().isOrHasChild(getElement()));
     }
 
     @Override
     protected void onUnload() {
       // During onUnload, everything must *still* be attached.
       Assert.assertTrue(isAttached());
-      Assert.assertTrue(DOM.isOrHasChild(RootPanel.getBodyElement(),
-          getElement()));
+      Assert.assertTrue(RootPanel.getBodyElement().isOrHasChild(getElement()));
     }
   }
 
@@ -147,14 +145,12 @@
     TestWidget widget = new TestWidget();
     adder.addChild(container, widget);
     Assert.assertTrue(widget.isAttached());
-    Assert.assertTrue(DOM.isOrHasChild(RootPanel.getBodyElement(),
-        widget.getElement()));
+    Assert.assertTrue(RootPanel.getBodyElement().isOrHasChild(widget.getElement()));
     container.remove(widget);
 
     // After removal, the widget should be detached.
     Assert.assertFalse(widget.isAttached());
-    Assert.assertFalse(DOM.isOrHasChild(RootPanel.getBodyElement(),
-        widget.getElement()));
+    Assert.assertFalse(RootPanel.getBodyElement().isOrHasChild(widget.getElement()));
   }
 
   /**
diff --git a/user/test/com/google/gwt/user/client/ui/HyperlinkTest.java b/user/test/com/google/gwt/user/client/ui/HyperlinkTest.java
index 6d2c5dc..9459c47 100644
--- a/user/test/com/google/gwt/user/client/ui/HyperlinkTest.java
+++ b/user/test/com/google/gwt/user/client/ui/HyperlinkTest.java
@@ -66,7 +66,7 @@
     Hyperlink link = new Hyperlink("foobar", TEST_HISTORY_TOKEN);
     Element element = link.getElement();
     Element anchorElement = (Element)element.getFirstChildElement();
-    String propertyString = DOM.getElementProperty(anchorElement, "href");
+    String propertyString = anchorElement.getPropertyString("href");
     int index = propertyString.indexOf('#');
     assertFalse(index == -1);
     String fragment = propertyString.substring(index + 1);
diff --git a/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java b/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java
index d1e288a..a1cf423 100644
--- a/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java
+++ b/user/test/com/google/gwt/user/client/ui/RadioButtonTest.java
@@ -182,24 +182,24 @@
     RootPanel.get().add(r3);
 
     // Check one button in each group
-    r2.setChecked(true);
-    r3.setChecked(true);
+    r2.setValue(true);
+    r3.setValue(true);
 
     // Move a button over
     r2.setName("group2");
 
     // Check that the correct buttons are checked
-    assertTrue(r2.isChecked());
-    assertFalse(r3.isChecked());
+    assertTrue(r2.getValue());
+    assertFalse(r3.getValue());
 
-    r1.setChecked(true);
-    assertTrue(r1.isChecked());
-    assertTrue(r2.isChecked());
+    r1.setValue(true);
+    assertTrue(r1.getValue());
+    assertTrue(r2.getValue());
 
-    r3.setChecked(true);
-    assertTrue(r1.isChecked());
-    assertFalse(r2.isChecked());
-    assertTrue(r3.isChecked());
+    r3.setValue(true);
+    assertTrue(r1.getValue());
+    assertFalse(r2.getValue());
+    assertTrue(r3.getValue());
   }
 
   /**
diff --git a/user/test/com/google/gwt/user/client/ui/SplitPanelTestBase.java b/user/test/com/google/gwt/user/client/ui/SplitPanelTestBase.java
index 72f0172..aa8809b 100644
--- a/user/test/com/google/gwt/user/client/ui/SplitPanelTestBase.java
+++ b/user/test/com/google/gwt/user/client/ui/SplitPanelTestBase.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.junit.DoNotRunWith;
 import com.google.gwt.junit.Platform;
-import com.google.gwt.user.client.DOM;
 
 /**
  * Tests both {@link HorizontalSplitPanel} and {@link VerticalSplitPanel}.
@@ -30,7 +29,7 @@
   private static Widget createMockWidget() {
     final Label label = new Label();
     label.setText("Testing 1, 2, 3");
-    DOM.setStyleAttribute(label.getElement(), "fontSize", "72pt");
+    label.getElement().getStyle().setProperty("fontSize", "72pt");
     return label;
   }
 
diff --git a/user/test/com/google/gwt/user/client/ui/TreeTest.java b/user/test/com/google/gwt/user/client/ui/TreeTest.java
index 8d170e6..ea3d8e6 100644
--- a/user/test/com/google/gwt/user/client/ui/TreeTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TreeTest.java
@@ -401,21 +401,21 @@
 
     // Start with html.
     TreeItem item = t.addItem(SafeHtmlUtils.fromSafeConstant("hello"));
-    String inner = DOM.getInnerHTML(item.getContentElem());
+    String inner = item.getContentElem().getInnerHTML();
     assertTrue(inner.indexOf("hello") >= 0);
     t.addItem(item);
     Widget goodbyeWidget = new Label("goodbye");
     item.setWidget(goodbyeWidget);
-    String innerWidget = DOM.getInnerHTML(item.getContentElem());
+    String innerWidget = item.getContentElem().getInnerHTML();
     assertFalse(innerWidget.indexOf("hello") >= 0);
 
     // Start with widget.
     Widget hello = new Label("hello");
     TreeItem widgetItem = t.addItem(hello);
-    assertTrue(DOM.getInnerHTML(widgetItem.getContentElem()).indexOf("hello") >= 0);
+    assertTrue(widgetItem.getContentElem().getInnerHTML().indexOf("hello") >= 0);
     widgetItem.setText("goodbye");
-    assertFalse(DOM.getInnerHTML(widgetItem.getContentElem()).indexOf("hello") >= 0);
-    assertTrue(DOM.getInnerHTML(widgetItem.getContentElem()).indexOf("goodbye") >= 0);
+    assertFalse(widgetItem.getContentElem().getInnerHTML().indexOf("hello") >= 0);
+    assertTrue(widgetItem.getContentElem().getInnerHTML().indexOf("goodbye") >= 0);
     assertNull(hello.getParent());
 
     // Move widget.
@@ -425,7 +425,7 @@
 
     // Set back to text.
     item.setText("aloha");
-    assertEquals("aloha", DOM.getInnerHTML(item.getContentElem()));
+    assertEquals("aloha", item.getContentElem().getInnerHTML());
     assertNull(goodbyeWidget.getParent());
     assertNull(item.getWidget());
   }
diff --git a/user/test/com/google/gwt/user/client/ui/UIObjectTest.java b/user/test/com/google/gwt/user/client/ui/UIObjectTest.java
index 96a5666..dfa2f23 100644
--- a/user/test/com/google/gwt/user/client/ui/UIObjectTest.java
+++ b/user/test/com/google/gwt/user/client/ui/UIObjectTest.java
@@ -51,7 +51,7 @@
    */
   public static void assertDebugId(String debugID, Element elem) {
     debugID = UIObject.DEBUG_ID_PREFIX + debugID;
-    assertEquals(debugID, DOM.getElementProperty(elem, "id"));
+    assertEquals(debugID, elem.getPropertyString("id"));
   }
 
   /**
@@ -68,7 +68,7 @@
   public static void assertDebugIdContents(String debugID, String contents) {
     debugID = UIObject.DEBUG_ID_PREFIX + debugID;
     Element elem = DOM.getElementById(debugID);
-    assertEquals(contents, DOM.getInnerHTML(elem));
+    assertEquals(contents, elem.getInnerHTML());
   }
 
   @Override
@@ -151,8 +151,8 @@
     assertDebugId("test2", oElem);
 
     // Test setting actual id
-    DOM.setElementProperty(oElem, "id", "mytest");
-    assertEquals("mytest", DOM.getElementProperty(oElem, "id"));
+    oElem.setPropertyString("id", "mytest");
+    assertEquals("mytest", oElem.getPropertyString("id"));
 
     // Test overriding with debug ID succeeds if ID present
     UIObject.ensureDebugId(oElem, "test3");
@@ -173,12 +173,12 @@
     assertDebugId("test2-subElem", o.subElement);
 
     // Test setting actual id
-    DOM.setElementProperty(oElem, "id", "mytest");
-    assertEquals("mytest", DOM.getElementProperty(oElem, "id"));
+    oElem.setPropertyString("id", "mytest");
+    assertEquals("mytest", oElem.getPropertyString("id"));
     assertDebugId("test2-subElem", o.subElement);
 
     // Test overriding with debug ID succeeds if ID present
-    assertEquals("mytest", DOM.getElementProperty(oElem, "id"));
+    assertEquals("mytest", oElem.getPropertyString("id"));
     o.ensureDebugId("test3");
     assertDebugId("test3", oElem);
     assertDebugId("test3-subElem", o.subElement);
@@ -363,14 +363,14 @@
   }
 
   private void assertPrimaryStyleNameEquals(UIObject o, String className) {
-    String attr = DOM.getElementProperty(o.getElement(), "className");
+    String attr = o.getElement().getPropertyString("className");
     assertTrue(attr.indexOf(className) == 0);
     assertTrue(attr.length() == className.length()
         || attr.charAt(className.length()) == ' ');
   }
 
   private boolean containsClass(UIObject o, String className) {
-    String[] classes = DOM.getElementProperty(o.getElement(), "className").split(
+    String[] classes = o.getElement().getPropertyString("className").split(
         "\\s+");
     for (int i = 0; i < classes.length; i++) {
       if (className.equals(classes[i])) {
diff --git a/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java b/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java
index dc6170f..6d0e951 100644
--- a/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java
+++ b/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.event.logical.shared.AttachEvent;
 import com.google.gwt.junit.client.GWTTestCase;
-import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
 /**
@@ -98,7 +97,7 @@
   static int orderIndex;
 
   static boolean isElementAttached(Element elem) {
-    return DOM.isOrHasChild(RootPanel.getBodyElement(), elem);
+    return RootPanel.getBodyElement().isOrHasChild(elem);
   }
 
   @Override