diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java
index a3ff614..8e3305a 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JClassLiteral.java
@@ -101,9 +101,9 @@
               continue;
             }
             valuesMethod = methodIt;
-          }
-          if ("valueOf".equals(methodIt.getName())) {
-            if (methodIt.getParams().size() != 1) {
+          } else if ("valueOf".equals(methodIt.getName())) {
+            if (methodIt.getParams().size() != 1 ||
+                methodIt.getParams().get(0).getType() != program.getTypeJavaLangString()) {
               continue;
             }
             valueOfMethod = methodIt;
diff --git a/user/test/com/google/gwt/dev/jjs/test/EnumsTest.java b/user/test/com/google/gwt/dev/jjs/test/EnumsTest.java
index 13eb765..5eda6ce 100644
--- a/user/test/com/google/gwt/dev/jjs/test/EnumsTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/EnumsTest.java
@@ -63,6 +63,25 @@
 
     public abstract String value();
   }
+  
+  enum BasicWithOverloadedValueOf {
+    A(1), B(2), C(3);
+    
+    private final int id;
+    
+    private BasicWithOverloadedValueOf(int id) {
+      this.id = id;
+    }
+    
+    public static BasicWithOverloadedValueOf valueOf(Integer id) {
+      for (BasicWithOverloadedValueOf val : BasicWithOverloadedValueOf.values()) {
+        if (val.id == id) {
+          return val;
+        }
+      }
+      throw new IllegalArgumentException();
+    }
+  }
 
   public String getModuleName() {
     return "com.google.gwt.dev.jjs.CompilerSuite";
@@ -234,6 +253,15 @@
     } catch (NullPointerException e) {
     }
   }
+  
+  public void testValueOfOverload() {
+    BasicWithOverloadedValueOf val1 = Enum.valueOf(BasicWithOverloadedValueOf.class,"A");
+    BasicWithOverloadedValueOf val2 = BasicWithOverloadedValueOf.valueOf("B");
+    BasicWithOverloadedValueOf valById1 = BasicWithOverloadedValueOf.valueOf(1);
+    BasicWithOverloadedValueOf valById2 = BasicWithOverloadedValueOf.valueOf(2);
+    assertEquals(val1, valById1);
+    assertEquals(val2, valById2);
+  }
 
   public void testValues() {
     Basic[] simples = Basic.values();
diff --git a/user/test/com/google/gwt/dev/jjs/test/EnumsWithNameObfuscationTest.java b/user/test/com/google/gwt/dev/jjs/test/EnumsWithNameObfuscationTest.java
index d669efc..936e0b5 100644
--- a/user/test/com/google/gwt/dev/jjs/test/EnumsWithNameObfuscationTest.java
+++ b/user/test/com/google/gwt/dev/jjs/test/EnumsWithNameObfuscationTest.java
@@ -16,6 +16,7 @@
 package com.google.gwt.dev.jjs.test;
 
 import com.google.gwt.core.client.JavaScriptException;
+import com.google.gwt.dev.jjs.test.EnumsTest.BasicWithOverloadedValueOf;
 import com.google.gwt.junit.DoNotRunWith;
 import com.google.gwt.junit.Platform;
 
@@ -182,6 +183,14 @@
     }
   }
   
+  @Override
+  public void testValueOfOverload() {
+    BasicWithOverloadedValueOf valById1 = BasicWithOverloadedValueOf.valueOf(1);
+    BasicWithOverloadedValueOf valById2 = BasicWithOverloadedValueOf.valueOf(2);
+    assertEquals(valById1.ordinal(),0);
+    assertEquals(valById2.ordinal(),1);
+  }
+  
   private <T extends Enum<T>> void enumValuesTest(Class<T> enumClass) {
     T[] constants = enumClass.getEnumConstants();
     for (T constant : constants) {
