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 95fb16c..3f9a6f9 100644
--- a/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
+++ b/user/test/com/google/gwt/user/client/ui/CheckBoxTest.java
@@ -96,6 +96,14 @@
     assertEquals("valuable", cb.getFormValue());
   }
 
+  public void testConstructorInputElement() {
+    InputElement elm = DOM.createInputCheck().cast();
+    CheckBox box = new CheckBox(elm.<Element> cast());
+    assertFalse(box.getValue());
+    elm.setDefaultChecked(true);
+    assertTrue(box.getValue());
+  }
+
   public void testDebugId() {
     CheckBox check = new CheckBox("myLabel");
 
@@ -111,44 +119,6 @@
     UIObjectTest.assertDebugIdContents("myCheck-label", "myLabel");
   }
 
-  public void testConstructorInputElement() {
-    InputElement elm = DOM.createInputCheck().cast();
-    CheckBox box = new CheckBox(elm.<Element> cast());
-    assertFalse(box.getValue());
-    elm.setDefaultChecked(true);
-    assertTrue(box.getValue());
-  }
-
-  public void testReplaceInputElement() {
-    cb.setValue(true);
-    cb.setTabIndex(1234);
-    cb.setEnabled(false);
-    cb.setAccessKey('k');
-    cb.setFormValue("valuable");
-
-    InputElement elm = Document.get().createCheckInputElement();
-    assertFalse(elm.isChecked());
-
-    Element asOldElement = elm.cast();
-    cb.replaceInputElement(asOldElement);
-
-    // The values should be preserved
-    assertTrue(cb.getValue());
-    assertEquals(1234, cb.getTabIndex());
-    assertFalse(cb.isEnabled());
-    assertEquals("k", elm.getAccessKey());
-    assertEquals("valuable", cb.getFormValue());
-
-    assertTrue(elm.isChecked());
-    cb.setValue(false);
-    assertFalse(elm.isChecked());
-
-    elm.setChecked(true);
-    assertTrue(cb.getValue());
-
-    // TODO: When event creation is in, test that click on the new element works
-  }
-
   public void testFormValue() {
     InputElement elm = Document.get().createCheckInputElement();
     Element asOldElement = elm.cast();
@@ -182,6 +152,36 @@
     assertEquals(ListenerTester.fired, 0);
   }
 
+  public void testReplaceInputElement() {
+    cb.setValue(true);
+    cb.setTabIndex(1234);
+    cb.setEnabled(false);
+    cb.setAccessKey('k');
+    cb.setFormValue("valuable");
+
+    InputElement elm = Document.get().createCheckInputElement();
+    assertFalse(elm.isChecked());
+
+    Element asOldElement = elm.cast();
+    cb.replaceInputElement(asOldElement);
+
+    // The values should be preserved
+    assertTrue(cb.getValue());
+    assertEquals(1234, cb.getTabIndex());
+    assertFalse(cb.isEnabled());
+    assertEquals("k", elm.getAccessKey());
+    assertEquals("valuable", cb.getFormValue());
+
+    assertTrue(elm.isChecked());
+    cb.setValue(false);
+    assertFalse(elm.isChecked());
+
+    elm.setChecked(true);
+    assertTrue(cb.getValue());
+
+    // TODO: When event creation is in, test that click on the new element works
+  }
+
   @SuppressWarnings("deprecation")
   public void testValueChangeEvent() {
     Handler h = new Handler();
