diff --git a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java
index 88c45d8..43d7e6a 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/ServerSerializableTypeOracleImpl.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.util.ArrayList;
@@ -213,7 +214,8 @@
     if (instanceType.isPrimitive()) {
       return true;
     }
-    if (IsSerializable.class.isAssignableFrom(instanceType)) {
+    if (IsSerializable.class.isAssignableFrom(instanceType) ||
+        Serializable.class.isAssignableFrom(instanceType)) {
       return true;
     }
     return hasCustomFieldSerializer(instanceType) != null;
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java
index d08d122..8f180af 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTest.java
@@ -29,6 +29,8 @@
   // private static final int TEST_DELAY = Integer.MAX_VALUE;
   private static final int TEST_DELAY = 5000;
 
+  private InheritanceTestServiceAsync inheritanceTestService;
+
   public String getModuleName() {
     return "com.google.gwt.user.RPCSuite";
   }
@@ -88,6 +90,26 @@
   }
 
   /**
+   * Tests that transient fields do not prevent serializability.
+   */
+  public void testJavaSerializableClass() {
+    delayTestFinish(TEST_DELAY);
+
+    InheritanceTestServiceAsync service = getServiceAsync();
+    service.echo(new InheritanceTestSetFactory.JavaSerializableClass(3),
+        new AsyncCallback() {
+          public void onFailure(Throwable caught) {
+            fail(caught.toString());
+          }
+
+          public void onSuccess(Object result) {
+            assertNotNull(result);
+            finishTest();
+          }
+        });
+  }
+
+  /**
    * Test that non-static inner classes are not serializable.
    */
   public void testNonStaticInnerClass() {
@@ -197,6 +219,4 @@
     }
     return inheritanceTestService;
   }
-
-  private InheritanceTestServiceAsync inheritanceTestService;
 }
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java
index c3790ed..8e4f309 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTestService.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.AnonymousClassInterface;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.Circle;
+import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.JavaSerializableClass;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClass;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClassWithTransientField;
 
@@ -28,6 +29,8 @@
 
   Circle echo(Circle circle);
 
+  JavaSerializableClass echo(JavaSerializableClass javaSerializableClass);
+  
   SerializableClass echo(SerializableClass serializableClass);
 
   SerializableClassWithTransientField echo(
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java
index 2c5926d..f19010f 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTestServiceAsync.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.AnonymousClassInterface;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.Circle;
+import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.JavaSerializableClass;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClass;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClassWithTransientField;
 
@@ -28,6 +29,8 @@
 
   void echo(Circle circle, AsyncCallback callback);
   
+  void echo(JavaSerializableClass javaSerializableClass, AsyncCallback callback);
+  
   void echo(SerializableClass serializableClass, AsyncCallback callback);
 
   void echo(SerializableClassWithTransientField serializableClass,
diff --git a/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java b/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java
index 0c8b78c..4c1b448 100644
--- a/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java
+++ b/user/test/com/google/gwt/user/client/rpc/InheritanceTestSetFactory.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.user.client.rpc;
 
+import java.io.Serializable;
+
 /**
  * TODO: document me.
  */
@@ -23,16 +25,8 @@
   /**
    * TODO: document me.
    */
-  public static class Shape implements IsSerializable {
-    private String name;
-
-    public String getName() {
-      return name;
-    }
-
-    public void setName(String name) {
-      this.name = name;
-    }
+  public static interface AnonymousClassInterface extends IsSerializable {
+    void foo();
   }
 
   /**
@@ -40,16 +34,38 @@
    */
   public static class Circle extends Shape {
     private String name;
+
     public native void doStuff() /*-{
-      alert("foo");
-    }-*/;
+     alert("foo");
+     }-*/;
+  }
+
+  /**
+   * TODO: document me.
+   */  
+  public static class JavaSerializableBaseClass implements Serializable {
+    private int field1 = -1;
+
+    public JavaSerializableBaseClass() {
+    }
+
+    public JavaSerializableBaseClass(int field1) {
+      this.field1 = field1;
+    }
   }
 
   /**
    * TODO: document me.
    */
-  public static interface AnonymousClassInterface extends IsSerializable {
-    void foo();
+  public static class JavaSerializableClass extends JavaSerializableBaseClass {
+    private int field2 = -2;
+
+    public JavaSerializableClass() {
+    }
+
+    public JavaSerializableClass(int field2) {
+      this.field2 = field2;
+    }
   }
 
   /**
@@ -65,6 +81,16 @@
    * TODO: document me.
    */
   public static class SerializableClass implements IsSerializable {
+    protected int d = 4;
+
+    int e = 5;
+
+    private int a = 1;
+
+    private int b = 2;
+
+    private int c = 3;
+
     public int getA() {
       return a;
     }
@@ -88,16 +114,6 @@
     public void setC(int c) {
       this.c = c;
     }
-
-    private int a = 1;
-
-    private int b = 2;
-
-    private int c = 3;
-
-    protected int d = 4;
-
-    int e = 5;
   }
 
   /**
@@ -105,6 +121,8 @@
    */
   public static class SerializableClassWithTransientField extends
       SerializableClass {
+    private transient Object obj;
+
     public Object getObj() {
       return obj;
     }
@@ -112,14 +130,14 @@
     public void setObj(Object obj) {
       this.obj = obj;
     }
-
-    private transient Object obj;
   }
 
   /**
    * TODO: document me.
    */
   public static class SerializableSubclass extends SerializableClass {
+    private int d = 4;
+
     public int getD() {
       return d;
     }
@@ -127,8 +145,21 @@
     public void setD(int d) {
       this.d = d;
     }
+  }
 
-    private int d = 4;
+  /**
+   * TODO: document me.
+   */
+  public static class Shape implements IsSerializable {
+    private String name;
+
+    public String getName() {
+      return name;
+    }
+
+    public void setName(String name) {
+      this.name = name;
+    }
   }
 
   public static Circle createCircle() {
@@ -137,6 +168,14 @@
     return circle;
   }
 
+  public static SerializableClass createNonStaticInnerClass() {
+    return new SerializableClass() {
+      public String toString() {
+        return "foo";
+      }
+    };
+  }
+
   public static SerializableClass createSerializableClass() {
     return new SerializableClass();
   }
@@ -147,14 +186,6 @@
     return cls;
   }
 
-  public static SerializableClass createNonStaticInnerClass() {
-    return new SerializableClass() {
-      public String toString() {
-        return "foo";
-      }
-    };
-  }
-
   public static SerializableClass createSerializableSubclass() {
     return new SerializableSubclass();
   }
diff --git a/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java b/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
index bba012e..ec64347 100644
--- a/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
+++ b/user/test/com/google/gwt/user/server/rpc/InheritanceTestServiceImpl.java
@@ -20,6 +20,7 @@
 import com.google.gwt.user.client.rpc.InheritanceTestServiceSubtype;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.AnonymousClassInterface;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.Circle;
+import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.JavaSerializableClass;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClass;
 import com.google.gwt.user.client.rpc.InheritanceTestSetFactory.SerializableClassWithTransientField;
 
@@ -37,6 +38,10 @@
     return circle;
   }
 
+  public JavaSerializableClass echo(JavaSerializableClass javaSerializableClass) {
+    return javaSerializableClass;
+  }
+
   public SerializableClass echo(SerializableClass serializableClass) {
     if (!InheritanceTestSetValidator.isValid(serializableClass)) {
       throw new RuntimeException();
@@ -64,4 +69,4 @@
   public SerializableClass getUnserializableClass() {
     return InheritanceTestSetFactory.createNonStaticInnerClass();
   }
-}
+}
\ No newline at end of file
