diff --git a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/OperationTypeSpecBuilder.kt b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/OperationTypeSpecBuilder.kt
index 0cdc04b7187..ddb5ba043cf 100644
--- a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/OperationTypeSpecBuilder.kt
+++ b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/OperationTypeSpecBuilder.kt
@@ -12,15 +12,16 @@ class OperationTypeSpecBuilder(
   private val OPERATION_VARIABLES_CLASS_NAME = ClassName.get("", "$OPERATION_TYPE_NAME.Variables")
 
   override fun toTypeSpec(context: CodeGenerationContext): TypeSpec {
+    val newContext = context.plusReservedTypes(OPERATION_TYPE_NAME)
     return TypeSpec.classBuilder(OPERATION_TYPE_NAME)
         .addAnnotation(Annotations.GENERATED_BY_APOLLO)
         .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
         .addQuerySuperInterface(operation.variables.isNotEmpty())
         .addOperationDefinition(operation)
-        .addQueryDocumentDefinition(fragments, context)
+        .addQueryDocumentDefinition(fragments, newContext)
         .addQueryConstructor(operation.variables.isNotEmpty())
-        .addVariablesDefinition(operation.variables, context.typesPackage, context.customTypeMap)
-        .addType(operation.toTypeSpec(context))
+        .addVariablesDefinition(operation.variables, newContext.typesPackage, newContext.customTypeMap)
+        .addType(operation.toTypeSpec(newContext))
         .build()
   }
 
diff --git a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/SchemaTypeSpecBuilder.kt b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/SchemaTypeSpecBuilder.kt
index 5a40a74db87..ddb02126159 100644
--- a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/SchemaTypeSpecBuilder.kt
+++ b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/SchemaTypeSpecBuilder.kt
@@ -71,9 +71,8 @@ class SchemaTypeSpecBuilder(
   private fun TypeSpec.Builder.addInnerTypes(fields: List<Field>): TypeSpec.Builder {
     val reservedTypeNames = context.reservedTypeNames + typeName + fields.filter(Field::isNonScalar).map(
         Field::normalizedName)
-    val typeSpecs = fields.filter(Field::isNonScalar).map {
-      it.toTypeSpec(CodeGenerationContext(context.abstractType, reservedTypeNames.minus(it.normalizedName()),
-          context.typeDeclarations, context.fragmentsPackage, context.typesPackage, context.customTypeMap))
+    val typeSpecs = fields.filter(Field::isNonScalar).map { field ->
+      field.toTypeSpec(context.withReservedTypeNames(reservedTypeNames.minus(field.normalizedName())))
     }
     return addTypes(typeSpecs)
   }
@@ -81,10 +80,7 @@ class SchemaTypeSpecBuilder(
   private fun TypeSpec.Builder.addInlineFragments(fragments: List<InlineFragment>): TypeSpec.Builder {
     val reservedTypeNames = context.reservedTypeNames + typeName + fields.filter(Field::isNonScalar).map(
         Field::normalizedName)
-    val typeSpecs = fragments.map {
-      it.toTypeSpec(CodeGenerationContext(context.abstractType, reservedTypeNames, context.typeDeclarations,
-          context.fragmentsPackage, context.typesPackage, context.customTypeMap))
-    }
+    val typeSpecs = fragments.map { it.toTypeSpec(context.withReservedTypeNames(reservedTypeNames)) }
     val methodSpecs = fragments.map { it.accessorMethodSpec(context.abstractType) }
     val fieldSpecs = if (context.abstractType) emptyList() else fragments.map { it.fieldSpec() }
     return addTypes(typeSpecs)
@@ -172,7 +168,7 @@ class SchemaTypeSpecBuilder(
       }
 
   private fun formatUniqueTypeName(typeName: String, reservedTypeNames: List<String>): String {
-    val suffix = reservedTypeNames.count { it == typeName }.let { if (it > 0) "$".repeat(it) else "" }
+    val suffix = reservedTypeNames.count { it == typeName }.let { if (it > 0) "$it" else "" }
     return "$typeName$suffix"
   }
 
diff --git a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/CodeGenerationContext.kt b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/CodeGenerationContext.kt
index 4e462cd063a..af608a9e976 100644
--- a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/CodeGenerationContext.kt
+++ b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/CodeGenerationContext.kt
@@ -7,4 +7,28 @@ data class CodeGenerationContext(
     val fragmentsPackage: String = "",
     val typesPackage: String = "",
     val customTypeMap: Map<String, String>
-)
\ No newline at end of file
+) {
+  fun plusReservedTypes(vararg typeName: String): CodeGenerationContext = plusReservedTypes(typeName.toList())
+
+  fun plusReservedTypes(typeNames: List<String>): CodeGenerationContext =
+      CodeGenerationContext(
+          abstractType = abstractType,
+          reservedTypeNames = reservedTypeNames.plus(typeNames),
+          typeDeclarations = typeDeclarations,
+          fragmentsPackage = fragmentsPackage,
+          typesPackage = typesPackage,
+          customTypeMap = customTypeMap
+      )
+
+  fun withReservedTypeNames(vararg typeName: String): CodeGenerationContext = withReservedTypeNames(typeName.asList())
+
+  fun withReservedTypeNames(reservedTypeNames: List<String>): CodeGenerationContext =
+      CodeGenerationContext(
+          abstractType = abstractType,
+          reservedTypeNames = reservedTypeNames,
+          typeDeclarations = typeDeclarations,
+          fragmentsPackage = fragmentsPackage,
+          typesPackage = typesPackage,
+          customTypeMap = customTypeMap
+      )
+}
\ No newline at end of file
diff --git a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/Operation.kt b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/Operation.kt
index ffe10d748a7..bea89fa0e6d 100644
--- a/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/Operation.kt
+++ b/apollo-compiler/src/main/kotlin/com/apollographql/android/compiler/ir/Operation.kt
@@ -2,7 +2,6 @@ package com.apollographql.android.compiler.ir
 
 import com.apollographql.android.api.graphql.Operation
 import com.apollographql.android.compiler.SchemaTypeSpecBuilder
-import com.squareup.javapoet.ClassName
 import com.squareup.javapoet.TypeSpec
 import javax.lang.model.element.Modifier
 
@@ -19,7 +18,7 @@ data class Operation(
       SchemaTypeSpecBuilder(INTERFACE_TYPE_SPEC_NAME, fields, emptyList(), emptyList(), context)
           .build(Modifier.PUBLIC, Modifier.STATIC)
           .toBuilder()
-          .addSuperinterface(ClassName.get(Operation.Data::class.java))
+          .addSuperinterface(Operation.Data::class.java)
           .build()
 
   companion object {
diff --git a/apollo-compiler/src/test/graphql/com/example/fragment_with_inline_fragment/HeroDetailsExpected.java b/apollo-compiler/src/test/graphql/com/example/fragment_with_inline_fragment/HeroDetailsExpected.java
index 09902f79ce7..77306f12485 100644
--- a/apollo-compiler/src/test/graphql/com/example/fragment_with_inline_fragment/HeroDetailsExpected.java
+++ b/apollo-compiler/src/test/graphql/com/example/fragment_with_inline_fragment/HeroDetailsExpected.java
@@ -201,11 +201,11 @@ interface Creator {
   interface AsDroid {
     @Nonnull String name();
 
-    @Nonnull FriendsConnection$ friendsConnection();
+    @Nonnull FriendsConnection1 friendsConnection();
 
     @Nullable String primaryFunction();
 
-    interface FriendsConnection$ {
+    interface FriendsConnection1 {
       @Nullable Integer totalCount();
 
       @Nullable List<? extends Edge> edges();
@@ -306,7 +306,7 @@ interface Creator {
         }
       }
 
-      final class Mapper implements ResponseFieldMapper<FriendsConnection$> {
+      final class Mapper implements ResponseFieldMapper<FriendsConnection1> {
         final Factory factory;
 
         final Field[] fields = {
@@ -323,7 +323,7 @@ public Mapper(@Nonnull Factory factory) {
         }
 
         @Override
-        public FriendsConnection$ map(ResponseReader reader) throws IOException {
+        public FriendsConnection1 map(ResponseReader reader) throws IOException {
           final __ContentValues contentValues = new __ContentValues();
           reader.read(new ResponseReader.ValueHandler() {
             @Override
@@ -357,7 +357,7 @@ interface Factory {
       }
 
       interface Creator {
-        @Nonnull FriendsConnection$ create(@Nullable Integer totalCount,
+        @Nonnull FriendsConnection1 create(@Nullable Integer totalCount,
             @Nullable List<? extends Edge> edges);
       }
     }
@@ -367,9 +367,9 @@ final class Mapper implements ResponseFieldMapper<AsDroid> {
 
       final Field[] fields = {
         Field.forString("name", "name", null, false),
-        Field.forObject("friendsConnection", "friendsConnection", null, false, new Field.ObjectReader<FriendsConnection$>() {
-          @Override public FriendsConnection$ read(final ResponseReader reader) throws IOException {
-            return new FriendsConnection$.Mapper(factory.friendsConnection$Factory()).map(reader);
+        Field.forObject("friendsConnection", "friendsConnection", null, false, new Field.ObjectReader<FriendsConnection1>() {
+          @Override public FriendsConnection1 read(final ResponseReader reader) throws IOException {
+            return new FriendsConnection1.Mapper(factory.friendsConnection1Factory()).map(reader);
           }
         }),
         Field.forString("primaryFunction", "primaryFunction", null, true)
@@ -391,7 +391,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
                 break;
               }
               case 1: {
-                contentValues.friendsConnection = (FriendsConnection$) value;
+                contentValues.friendsConnection = (FriendsConnection1) value;
                 break;
               }
               case 2: {
@@ -407,7 +407,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
       static final class __ContentValues {
         String name;
 
-        FriendsConnection$ friendsConnection;
+        FriendsConnection1 friendsConnection;
 
         String primaryFunction;
       }
@@ -416,11 +416,11 @@ static final class __ContentValues {
     interface Factory {
       @Nonnull Creator creator();
 
-      @Nonnull FriendsConnection$.Factory friendsConnection$Factory();
+      @Nonnull FriendsConnection1.Factory friendsConnection1Factory();
     }
 
     interface Creator {
-      @Nonnull AsDroid create(@Nonnull String name, @Nonnull FriendsConnection$ friendsConnection,
+      @Nonnull AsDroid create(@Nonnull String name, @Nonnull FriendsConnection1 friendsConnection,
           @Nullable String primaryFunction);
     }
   }
diff --git a/apollo-compiler/src/test/graphql/com/example/pojo_fragment_with_inline_fragment/HeroDetailsExpected.java b/apollo-compiler/src/test/graphql/com/example/pojo_fragment_with_inline_fragment/HeroDetailsExpected.java
index bb58794a884..fa0506a24db 100644
--- a/apollo-compiler/src/test/graphql/com/example/pojo_fragment_with_inline_fragment/HeroDetailsExpected.java
+++ b/apollo-compiler/src/test/graphql/com/example/pojo_fragment_with_inline_fragment/HeroDetailsExpected.java
@@ -448,7 +448,7 @@ public static class AsDroid {
     public static final Creator CREATOR = new Creator() {
       @Override
       public @Nonnull AsDroid create(@Nonnull String name,
-          @Nonnull FriendsConnection$ friendsConnection, @Nullable String primaryFunction) {
+          @Nonnull FriendsConnection1 friendsConnection, @Nullable String primaryFunction) {
         return new AsDroid(name, friendsConnection, primaryFunction);
       }
     };
@@ -460,18 +460,18 @@ public static class AsDroid {
       }
 
       @Override
-      public @Nonnull FriendsConnection$.Factory friendsConnection$Factory() {
-        return FriendsConnection$.FACTORY;
+      public @Nonnull FriendsConnection1.Factory friendsConnection1Factory() {
+        return FriendsConnection1.FACTORY;
       }
     };
 
     private final @Nonnull String name;
 
-    private final @Nonnull FriendsConnection$ friendsConnection;
+    private final @Nonnull FriendsConnection1 friendsConnection;
 
     private final @Nullable String primaryFunction;
 
-    public AsDroid(@Nonnull String name, @Nonnull FriendsConnection$ friendsConnection,
+    public AsDroid(@Nonnull String name, @Nonnull FriendsConnection1 friendsConnection,
         @Nullable String primaryFunction) {
       this.name = name;
       this.friendsConnection = friendsConnection;
@@ -482,7 +482,7 @@ public AsDroid(@Nonnull String name, @Nonnull FriendsConnection$ friendsConnecti
       return this.name;
     }
 
-    public @Nonnull FriendsConnection$ friendsConnection() {
+    public @Nonnull FriendsConnection1 friendsConnection() {
       return this.friendsConnection;
     }
 
@@ -525,12 +525,12 @@ public int hashCode() {
       return h;
     }
 
-    public static class FriendsConnection$ {
+    public static class FriendsConnection1 {
       public static final Creator CREATOR = new Creator() {
         @Override
-        public @Nonnull FriendsConnection$ create(int totalCount,
+        public @Nonnull FriendsConnection1 create(int totalCount,
             @Nullable List<? extends Edge> edges) {
-          return new FriendsConnection$(totalCount, edges);
+          return new FriendsConnection1(totalCount, edges);
         }
       };
 
@@ -550,7 +550,7 @@ public static class FriendsConnection$ {
 
       private final @Nullable List<? extends Edge> edges;
 
-      public FriendsConnection$(int totalCount, @Nullable List<? extends Edge> edges) {
+      public FriendsConnection1(int totalCount, @Nullable List<? extends Edge> edges) {
         this.totalCount = totalCount;
         this.edges = edges;
       }
@@ -565,7 +565,7 @@ public int totalCount() {
 
       @Override
       public String toString() {
-        return "FriendsConnection${"
+        return "FriendsConnection1{"
           + "totalCount=" + totalCount + ", "
           + "edges=" + edges
           + "}";
@@ -576,8 +576,8 @@ public boolean equals(Object o) {
         if (o == this) {
           return true;
         }
-        if (o instanceof FriendsConnection$) {
-          FriendsConnection$ that = (FriendsConnection$) o;
+        if (o instanceof FriendsConnection1) {
+          FriendsConnection1 that = (FriendsConnection1) o;
           return this.totalCount == that.totalCount
            && ((this.edges == null) ? (that.edges == null) : this.edges.equals(that.edges));
         }
@@ -793,7 +793,7 @@ public interface Creator {
         }
       }
 
-      public static final class Mapper implements ResponseFieldMapper<FriendsConnection$> {
+      public static final class Mapper implements ResponseFieldMapper<FriendsConnection1> {
         final Factory factory;
 
         final Field[] fields = {
@@ -810,7 +810,7 @@ public Mapper(@Nonnull Factory factory) {
         }
 
         @Override
-        public FriendsConnection$ map(ResponseReader reader) throws IOException {
+        public FriendsConnection1 map(ResponseReader reader) throws IOException {
           final __ContentValues contentValues = new __ContentValues();
           reader.read(new ResponseReader.ValueHandler() {
             @Override
@@ -844,7 +844,7 @@ public interface Factory {
       }
 
       public interface Creator {
-        @Nonnull FriendsConnection$ create(int totalCount, @Nullable List<? extends Edge> edges);
+        @Nonnull FriendsConnection1 create(int totalCount, @Nullable List<? extends Edge> edges);
       }
     }
 
@@ -853,9 +853,9 @@ public static final class Mapper implements ResponseFieldMapper<AsDroid> {
 
       final Field[] fields = {
         Field.forString("name", "name", null, false),
-        Field.forObject("friendsConnection", "friendsConnection", null, false, new Field.ObjectReader<FriendsConnection$>() {
-          @Override public FriendsConnection$ read(final ResponseReader reader) throws IOException {
-            return new FriendsConnection$.Mapper(factory.friendsConnection$Factory()).map(reader);
+        Field.forObject("friendsConnection", "friendsConnection", null, false, new Field.ObjectReader<FriendsConnection1>() {
+          @Override public FriendsConnection1 read(final ResponseReader reader) throws IOException {
+            return new FriendsConnection1.Mapper(factory.friendsConnection1Factory()).map(reader);
           }
         }),
         Field.forString("primaryFunction", "primaryFunction", null, true)
@@ -877,7 +877,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
                 break;
               }
               case 1: {
-                contentValues.friendsConnection = (FriendsConnection$) value;
+                contentValues.friendsConnection = (FriendsConnection1) value;
                 break;
               }
               case 2: {
@@ -893,7 +893,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
       static final class __ContentValues {
         String name;
 
-        FriendsConnection$ friendsConnection;
+        FriendsConnection1 friendsConnection;
 
         String primaryFunction;
       }
@@ -902,11 +902,11 @@ static final class __ContentValues {
     public interface Factory {
       @Nonnull Creator creator();
 
-      @Nonnull FriendsConnection$.Factory friendsConnection$Factory();
+      @Nonnull FriendsConnection1.Factory friendsConnection1Factory();
     }
 
     public interface Creator {
-      @Nonnull AsDroid create(@Nonnull String name, @Nonnull FriendsConnection$ friendsConnection,
+      @Nonnull AsDroid create(@Nonnull String name, @Nonnull FriendsConnection1 friendsConnection,
           @Nullable String primaryFunction);
     }
   }
diff --git a/apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQueryExpected.java b/apollo-compiler/src/test/graphql/com/example/unique_type_name/HeroDetailQueryExpected.java
similarity index 84%
rename from apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQueryExpected.java
rename to apollo-compiler/src/test/graphql/com/example/unique_type_name/HeroDetailQueryExpected.java
index 3cf21e39bce..feabcd92499 100644
--- a/apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQueryExpected.java
+++ b/apollo-compiler/src/test/graphql/com/example/unique_type_name/HeroDetailQueryExpected.java
@@ -18,9 +18,9 @@
 import javax.annotation.Nullable;
 
 @Generated("Apollo GraphQL")
-public final class TestQuery implements Query<Operation.Variables> {
-  public static final String OPERATION_DEFINITION = "query TestQuery {\n"
-      + "  hero {\n"
+public final class HeroDetailQuery implements Query<Operation.Variables> {
+  public static final String OPERATION_DEFINITION = "query HeroDetailQuery {\n"
+      + "  heroDetailQuery {\n"
       + "    __typename\n"
       + "    name\n"
       + "    friends {\n"
@@ -46,7 +46,7 @@ public final class TestQuery implements Query<Operation.Variables> {
 
   private final Operation.Variables variables;
 
-  public TestQuery() {
+  public HeroDetailQuery() {
     this.variables = Operation.EMPTY_VARIABLES;
   }
 
@@ -61,9 +61,9 @@ public Operation.Variables variables() {
   }
 
   public interface Data extends Operation.Data {
-    @Nullable Hero hero();
+    @Nullable HeroDetailQuery1 heroDetailQuery();
 
-    interface Hero {
+    interface HeroDetailQuery1 {
       @Nonnull String name();
 
       @Nullable List<? extends Friend> friends();
@@ -118,18 +118,18 @@ interface Creator {
       interface AsHuman {
         @Nonnull String name();
 
-        @Nullable List<? extends Friend$> friends();
+        @Nullable List<? extends Friend1> friends();
 
         @Nullable Double height();
 
-        interface Friend$ {
+        interface Friend1 {
           @Nonnull String name();
 
           @Nonnull List<? extends Episode> appearsIn();
 
-          @Nullable List<? extends Friend$$> friends();
+          @Nullable List<? extends Friend2> friends();
 
-          interface Friend$$ {
+          interface Friend2 {
             @Nonnull Fragments fragments();
 
             interface Fragments {
@@ -166,7 +166,7 @@ interface Creator {
               }
             }
 
-            final class Mapper implements ResponseFieldMapper<Friend$$> {
+            final class Mapper implements ResponseFieldMapper<Friend2> {
               final Factory factory;
 
               final Field[] fields = {
@@ -184,7 +184,7 @@ public Mapper(@Nonnull Factory factory) {
               }
 
               @Override
-              public Friend$$ map(ResponseReader reader) throws IOException {
+              public Friend2 map(ResponseReader reader) throws IOException {
                 final __ContentValues contentValues = new __ContentValues();
                 reader.toBufferedReader().read(new ResponseReader.ValueHandler() {
                   @Override
@@ -212,11 +212,11 @@ interface Factory {
             }
 
             interface Creator {
-              @Nonnull Friend$$ create(@Nonnull Fragments fragments);
+              @Nonnull Friend2 create(@Nonnull Fragments fragments);
             }
           }
 
-          final class Mapper implements ResponseFieldMapper<Friend$> {
+          final class Mapper implements ResponseFieldMapper<Friend1> {
             final Factory factory;
 
             final Field[] fields = {
@@ -226,9 +226,9 @@ final class Mapper implements ResponseFieldMapper<Friend$> {
                   return Episode.valueOf(reader.readString());
                 }
               }),
-              Field.forList("friends", "friends", null, true, new Field.ObjectReader<Friend$$>() {
-                @Override public Friend$$ read(final ResponseReader reader) throws IOException {
-                  return new Friend$$.Mapper(factory.friend$$Factory()).map(reader);
+              Field.forList("friends", "friends", null, true, new Field.ObjectReader<Friend2>() {
+                @Override public Friend2 read(final ResponseReader reader) throws IOException {
+                  return new Friend2.Mapper(factory.friend2Factory()).map(reader);
                 }
               })
             };
@@ -238,7 +238,7 @@ public Mapper(@Nonnull Factory factory) {
             }
 
             @Override
-            public Friend$ map(ResponseReader reader) throws IOException {
+            public Friend1 map(ResponseReader reader) throws IOException {
               final __ContentValues contentValues = new __ContentValues();
               reader.read(new ResponseReader.ValueHandler() {
                 @Override
@@ -253,7 +253,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
                       break;
                     }
                     case 2: {
-                      contentValues.friends = (List<? extends Friend$$>) value;
+                      contentValues.friends = (List<? extends Friend2>) value;
                       break;
                     }
                   }
@@ -267,20 +267,20 @@ static final class __ContentValues {
 
               List<? extends Episode> appearsIn;
 
-              List<? extends Friend$$> friends;
+              List<? extends Friend2> friends;
             }
           }
 
           interface Factory {
             @Nonnull Creator creator();
 
-            @Nonnull Friend$$.Factory friend$$Factory();
+            @Nonnull Friend2.Factory friend2Factory();
           }
 
           interface Creator {
-            @Nonnull Friend$ create(@Nonnull String name,
+            @Nonnull Friend1 create(@Nonnull String name,
                 @Nonnull List<? extends Episode> appearsIn,
-                @Nullable List<? extends Friend$$> friends);
+                @Nullable List<? extends Friend2> friends);
           }
         }
 
@@ -289,9 +289,9 @@ final class Mapper implements ResponseFieldMapper<AsHuman> {
 
           final Field[] fields = {
             Field.forString("name", "name", null, false),
-            Field.forList("friends", "friends", null, true, new Field.ObjectReader<Friend$>() {
-              @Override public Friend$ read(final ResponseReader reader) throws IOException {
-                return new Friend$.Mapper(factory.friend$Factory()).map(reader);
+            Field.forList("friends", "friends", null, true, new Field.ObjectReader<Friend1>() {
+              @Override public Friend1 read(final ResponseReader reader) throws IOException {
+                return new Friend1.Mapper(factory.friend1Factory()).map(reader);
               }
             }),
             Field.forDouble("height", "height", null, true)
@@ -313,7 +313,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
                     break;
                   }
                   case 1: {
-                    contentValues.friends = (List<? extends Friend$>) value;
+                    contentValues.friends = (List<? extends Friend1>) value;
                     break;
                   }
                   case 2: {
@@ -329,7 +329,7 @@ public void handle(final int fieldIndex, final Object value) throws IOException
           static final class __ContentValues {
             String name;
 
-            List<? extends Friend$> friends;
+            List<? extends Friend1> friends;
 
             Double height;
           }
@@ -338,16 +338,16 @@ static final class __ContentValues {
         interface Factory {
           @Nonnull Creator creator();
 
-          @Nonnull Friend$.Factory friend$Factory();
+          @Nonnull Friend1.Factory friend1Factory();
         }
 
         interface Creator {
-          @Nonnull AsHuman create(@Nonnull String name, @Nullable List<? extends Friend$> friends,
+          @Nonnull AsHuman create(@Nonnull String name, @Nullable List<? extends Friend1> friends,
               @Nullable Double height);
         }
       }
 
-      final class Mapper implements ResponseFieldMapper<Hero> {
+      final class Mapper implements ResponseFieldMapper<HeroDetailQuery1> {
         final Factory factory;
 
         final Field[] fields = {
@@ -374,7 +374,7 @@ public Mapper(@Nonnull Factory factory) {
         }
 
         @Override
-        public Hero map(ResponseReader reader) throws IOException {
+        public HeroDetailQuery1 map(ResponseReader reader) throws IOException {
           final __ContentValues contentValues = new __ContentValues();
           reader.toBufferedReader().read(new ResponseReader.ValueHandler() {
             @Override
@@ -416,8 +416,8 @@ interface Factory {
       }
 
       interface Creator {
-        @Nonnull Hero create(@Nonnull String name, @Nullable List<? extends Friend> friends,
-            @Nullable AsHuman asHuman);
+        @Nonnull HeroDetailQuery1 create(@Nonnull String name,
+            @Nullable List<? extends Friend> friends, @Nullable AsHuman asHuman);
       }
     }
 
@@ -425,9 +425,9 @@ final class Mapper implements ResponseFieldMapper<Data> {
       final Factory factory;
 
       final Field[] fields = {
-        Field.forObject("hero", "hero", null, true, new Field.ObjectReader<Hero>() {
-          @Override public Hero read(final ResponseReader reader) throws IOException {
-            return new Hero.Mapper(factory.heroFactory()).map(reader);
+        Field.forObject("heroDetailQuery", "heroDetail", null, true, new Field.ObjectReader<HeroDetailQuery1>() {
+          @Override public HeroDetailQuery1 read(final ResponseReader reader) throws IOException {
+            return new HeroDetailQuery1.Mapper(factory.heroDetailQuery1Factory()).map(reader);
           }
         })
       };
@@ -444,28 +444,28 @@ public Data map(ResponseReader reader) throws IOException {
           public void handle(final int fieldIndex, final Object value) throws IOException {
             switch (fieldIndex) {
               case 0: {
-                contentValues.hero = (Hero) value;
+                contentValues.heroDetailQuery = (HeroDetailQuery1) value;
                 break;
               }
             }
           }
         }, fields);
-        return factory.creator().create(contentValues.hero);
+        return factory.creator().create(contentValues.heroDetailQuery);
       }
 
       static final class __ContentValues {
-        Hero hero;
+        HeroDetailQuery1 heroDetailQuery;
       }
     }
 
     interface Factory {
       @Nonnull Creator creator();
 
-      @Nonnull Hero.Factory heroFactory();
+      @Nonnull HeroDetailQuery1.Factory heroDetailQuery1Factory();
     }
 
     interface Creator {
-      @Nonnull Data create(@Nullable Hero hero);
+      @Nonnull Data create(@Nullable HeroDetailQuery1 heroDetailQuery);
     }
   }
 }
diff --git a/apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQuery.json b/apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQuery.json
index 89bec587bb8..d80c4750844 100644
--- a/apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQuery.json
+++ b/apollo-compiler/src/test/graphql/com/example/unique_type_name/TestQuery.json
@@ -1,14 +1,14 @@
 {
   "operations": [
     {
-      "operationName": "TestQuery",
+      "operationName": "HeroDetailQuery",
       "operationType": "query",
       "variables": [],
-      "source": "query TestQuery {\n  hero {\n    __typename\n    name\n    friends {\n      __typename\n      name\n    }\n    ... on Human {\n      height\n      friends {\n        __typename\n        appearsIn\n        friends {\n          __typename\n          ...HeroDetails\n        }\n      }\n    }\n  }\n}",
+      "source": "query HeroDetailQuery {\n  heroDetailQuery {\n    __typename\n    name\n    friends {\n      __typename\n      name\n    }\n    ... on Human {\n      height\n      friends {\n        __typename\n        appearsIn\n        friends {\n          __typename\n          ...HeroDetails\n        }\n      }\n    }\n  }\n}",
       "fields": [
         {
-          "responseName": "hero",
-          "fieldName": "hero",
+          "responseName": "heroDetailQuery",
+          "fieldName": "heroDetail",
           "type": "Character",
           "fields": [
             {