diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
index 762c9dd..a8f599d 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProxyCreator.java
@@ -233,7 +233,7 @@
     rpcLog.setPrivate(true);
 
     TypeSerializerCreator tsc = new TypeSerializerCreator(logger, sto, context,
-        serviceIntf);
+        sto.getTypeSerializerQualifiedName(serviceIntf));
     tsc.realize(logger);
 
     enforceTypeVersioning = Shared.shouldEnforceTypeVersioning(logger,
diff --git a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
index 9e70229..d5d04db 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/TypeSerializerCreator.java
@@ -21,7 +21,6 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.typeinfo.JClassType;
 import com.google.gwt.core.ext.typeinfo.JMethod;
-import com.google.gwt.core.ext.typeinfo.JPackage;
 import com.google.gwt.core.ext.typeinfo.JParameterizedType;
 import com.google.gwt.core.ext.typeinfo.JType;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
@@ -35,8 +34,9 @@
 import java.io.PrintWriter;
 
 /**
- * This class generates a class that is able to serialize and deserialize a set
- * of types into or out of a stream.
+ * This class generates a class with name 'typeSerializerClassName' that is able
+ * to serialize and deserialize a set of types into or out of a stream. The set
+ * of types is obtained from the SerializableTypeOracle object.
  */
 public class TypeSerializerCreator {
 
@@ -56,8 +56,6 @@
 
   private final boolean enforceTypeVersioning;
 
-  private final JClassType remoteService;
-
   private final JType[] serializableTypes;
 
   private final SerializableTypeOracle serializationOracle;
@@ -66,11 +64,13 @@
 
   private final TypeOracle typeOracle;
 
+  private final String typeSerializerClassName;
+
   public TypeSerializerCreator(TreeLogger logger,
       SerializableTypeOracle serializationOracle, GeneratorContext context,
-      JClassType remoteService) {
+      String typeSerializerClassName) {
     this.context = context;
-    this.remoteService = remoteService;
+    this.typeSerializerClassName = typeSerializerClassName;
     this.serializationOracle = serializationOracle;
     this.typeOracle = context.getTypeOracle();
 
@@ -85,8 +85,8 @@
   public String realize(TreeLogger logger) {
     logger = logger.branch(TreeLogger.DEBUG,
         "Generating TypeSerializer for service interface '"
-            + getServiceInterface().getQualifiedSourceName() + "'", null);
-    String typeSerializerName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+            + getTypeSerializerClassName() + "'", null);
+    String typeSerializerName = getTypeSerializerClassName();
     if (srcWriter == null) {
       return typeSerializerName;
     }
@@ -172,20 +172,25 @@
         + serializationOracle.getFieldSerializerName(type).replace('.', '_');
   }
 
+  private String[] getPackageAndClassName(String fullClassName) {
+    String className = fullClassName;
+    String packageName = "";
+    int index = -1;
+    if ((index = className.lastIndexOf('.')) >= 0) {
+      packageName = className.substring(0, index);
+      className = className.substring(index + 1, className.length());
+    }
+    return new String[]{packageName, className};
+  }
+  
   private JType[] getSerializableTypes() {
     return serializableTypes;
   }
-
-  private JClassType getServiceInterface() {
-    return remoteService;
-  }
-
+  
   private SourceWriter getSourceWriter(TreeLogger logger, GeneratorContext ctx) {
-    JClassType serviceIntf = getServiceInterface();
-    JPackage serviceIntfPackage = serviceIntf.getPackage();
-    String packageName = serviceIntfPackage != null
-        ? serviceIntfPackage.getName() : "";
-    String className = serializationOracle.getTypeSerializerSimpleName(getServiceInterface());
+    String name[] = getPackageAndClassName(getTypeSerializerClassName());
+    String packageName = name[0];
+    String className = name[1];
     PrintWriter printWriter = ctx.tryCreate(logger, packageName, className);
     if (printWriter == null) {
       return null;
@@ -204,6 +209,10 @@
     return composerFactory.createSourceWriter(ctx, printWriter);
   }
 
+  private String getTypeSerializerClassName() {
+    return typeSerializerClassName;
+  }
+
   /**
    * Return <code>true</code> if this type is concrete and has a custom field
    * serializer that does not declare an instantiate method.
@@ -279,7 +288,7 @@
           {
             srcWriter.print("@");
             if (needsCreateMethod(type)) {
-              srcWriter.print(serializationOracle.getTypeSerializerQualifiedName(getServiceInterface()));
+              srcWriter.print(getTypeSerializerClassName());
               srcWriter.print("::");
               srcWriter.print(getCreateMethodName(type));
             } else {
@@ -402,7 +411,7 @@
     srcWriter.print(DESERIALIZE_METHOD_SIGNATURE);
     srcWriter.println(" /*-" + '{');
     {
-      String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+      String serializerTypeName = getTypeSerializerClassName();
       srcWriter.indent();
       srcWriter.println("var methodTable = @" + serializerTypeName
           + "::methodMap[typeSignature];");
@@ -423,7 +432,7 @@
       srcWriter.indentln("return null;");
       srcWriter.println("};");
     } else {
-      String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+      String serializerTypeName = getTypeSerializerClassName();
       srcWriter.println("public native String getSerializationSignature(String typeName) /*-" + '{');
       srcWriter.indent();
       srcWriter.println("return @" + serializerTypeName
@@ -438,7 +447,7 @@
     srcWriter.print(INSTANTIATE_METHOD_SIGNATURE);
     srcWriter.println(" /*-" + '{');
     {
-      String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+      String serializerTypeName = getTypeSerializerClassName();
       srcWriter.indent();
       srcWriter.println("var methodTable = @" + serializerTypeName
           + "::methodMap[typeSignature];");
@@ -464,7 +473,7 @@
     srcWriter.print(SERIALIZE_METHOD_SIGNATURE);
     srcWriter.println(" /*-" + '{');
     {
-      String serializerTypeName = serializationOracle.getTypeSerializerQualifiedName(getServiceInterface());
+      String serializerTypeName = getTypeSerializerClassName();
       srcWriter.indent();
       srcWriter.println("var methodTable = @" + serializerTypeName
           + "::methodMap[typeSignature];");
