New failing test for RuntimeTypeAdapters!
diff --git a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java
index 7ffee94..ea98361 100644
--- a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java
+++ b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapter.java
@@ -49,16 +49,17 @@
     return new RuntimeTypeAdapter<T>(c, typeFieldName);
   }
 
-  public void registerSubtype(Class<? extends T> type, String label) {
+  public RuntimeTypeAdapter<T> registerSubtype(Class<? extends T> type, String label) {
     if (subtypeToLabel.containsKey(type) || labelToSubtype.containsKey(label)) {
       throw new IllegalArgumentException("types and labels must be unique");
     }
     labelToSubtype.put(label, type);
     subtypeToLabel.put(type, label);
+    return this;
   }
 
-  public void registerSubtype(Class<? extends T> type) {
-    registerSubtype(type, type.getSimpleName());
+  public RuntimeTypeAdapter<T> registerSubtype(Class<? extends T> type) {
+    return registerSubtype(type, type.getSimpleName());
   }
 
   public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
diff --git a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java
index 6353c98..033ccd1 100644
--- a/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java
+++ b/extras/src/test/java/com/google/gson/typeadapters/RuntimeTypeAdapterTest.java
@@ -23,19 +23,34 @@
 public final class RuntimeTypeAdapterTest extends TestCase {
 
   public void testRuntimeTypeAdapter() {
-    RuntimeTypeAdapter<BillingInstrument> rta = RuntimeTypeAdapter.create(BillingInstrument.class);
-    rta.registerSubtype(CreditCard.class);
-
-    CreditCard cc = new CreditCard("Jesse", 234);
+    RuntimeTypeAdapter<BillingInstrument> rta = RuntimeTypeAdapter.create(BillingInstrument.class)
+        .registerSubtype(CreditCard.class);
     Gson gson = new GsonBuilder()
         .registerTypeAdapter(BillingInstrument.class, rta)
         .create();
-    String ccJson = gson.toJson(cc, BillingInstrument.class);
-    assertEquals("{\"type\":\"CreditCard\",\"cvv\":234,\"ownerName\":\"Jesse\"}", ccJson);
 
-    BillingInstrument creditCard = gson.fromJson(
+    CreditCard original = new CreditCard("Jesse", 234);
+    assertEquals("{\"type\":\"CreditCard\",\"cvv\":234,\"ownerName\":\"Jesse\"}",
+        gson.toJson(original, BillingInstrument.class));
+    BillingInstrument deserialized = gson.fromJson(
         "{type:'CreditCard',cvv:234,ownerName:'Jesse'}", BillingInstrument.class);
-    assertTrue(creditCard instanceof CreditCard);
+    assertEquals("Jesse", deserialized.ownerName);
+    assertTrue(deserialized instanceof CreditCard);
+  }
+
+  public void testRuntimeTypeIsBaseType() {
+    RuntimeTypeAdapter<BillingInstrument> rta = RuntimeTypeAdapter.create(BillingInstrument.class)
+        .registerSubtype(BillingInstrument.class);
+    Gson gson = new GsonBuilder()
+        .registerTypeAdapter(BillingInstrument.class, rta)
+        .create();
+
+    BillingInstrument original = new BillingInstrument("Jesse");
+    assertEquals("{\"type\":\"BillingInstrument\",\"ownerName\":\"Jesse\"}",
+        gson.toJson(original, BillingInstrument.class));
+    BillingInstrument deserialized = gson.fromJson(
+        "{type:'CreditCard',ownerName:'Jesse'}", BillingInstrument.class);
+    assertEquals("Jesse", deserialized.ownerName);
   }
 
   static class CreditCard extends BillingInstrument {