diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java
index 2502013..d595bd5 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/DelegateMembers.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -16,7 +16,7 @@
 package com.google.gwt.core.ext.typeinfo;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -70,7 +70,7 @@
        */
       return lazyFields;
     }
-    lazyFields = new HashMap<String, JField>();
+    lazyFields = new LinkedHashMap<String, JField>();
 
     JField[] baseFields = baseType.getFields();
     for (JField baseField : baseFields) {
@@ -91,7 +91,7 @@
        */
       return lazyMethods;
     }
-    lazyMethods = new HashMap<String, List<JMethod>>();
+    lazyMethods = new LinkedHashMap<String, List<JMethod>>();
 
     JMethod[] baseMethods = baseType.getMethods();
     for (JMethod baseMethod : baseMethods) {
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java
index 7ff2d8b..a4cc289 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/Members.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -16,7 +16,7 @@
 package com.google.gwt.core.ext.typeinfo;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -25,8 +25,8 @@
  */
 class Members extends AbstractMembers {
   private final List<JConstructor> constructors = new ArrayList<JConstructor>();
-  private final Map<String, JField> fields = new HashMap<String, JField>();
-  private final Map<String, List<JMethod>> methods = new HashMap<String, List<JMethod>>();
+  private final Map<String, JField> fields = new LinkedHashMap<String, JField>();
+  private final Map<String, List<JMethod>> methods = new LinkedHashMap<String, List<JMethod>>();
 
   public Members(JClassType classType) {
     super(classType);
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
index fdc1b38..7ec4612 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/JEnumTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -53,10 +53,15 @@
     JEnumConstant[] enumConstants = enumType.getEnumConstants();
     assertEquals(3, enumConstants.length);
 
-    for (JEnumConstant enumConstant : enumConstants) {
-      assertEquals(
-          Integer.parseInt(enumConstant.getName().substring(3)),
-          enumConstant.getOrdinal());
+    for (int i = 0; i < enumConstants.length; ++i) {
+      JEnumConstant enumConstant = enumConstants[i];
+      // Check the ordinal
+      assertEquals(i, enumConstant.getOrdinal());
+
+      // Check that the name matches what reflection expects at the current
+      // ordinal.
+      assertEquals(MyEnum.class.getEnumConstants()[i].name(),
+          enumConstant.getName());
     }
   }
 
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java
index d703461..9ee5a1b 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/MyEnum.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -18,18 +18,16 @@
 /**
  * Enumerated type used in the
  * {@link com.google.gwt.core.ext.typeinfo.JEnumTypeTest}.
- * 
- * NOTE: do not reorder the enumerated values
  */
 public enum MyEnum {
-  @Deprecated
-  VAL0(-1) {
+  
+  VAL2(-3) {
     @Override
     public int getId() {
       return instanceField;
     }
   },
-  
+
   VAL1(-2) {
     @Override
     public int getId() {
@@ -37,7 +35,8 @@
     }
   },
 
-  VAL2(-3) {
+  @Deprecated
+  VAL0(-1) {
     @Override
     public int getId() {
       return instanceField;
