diff --git a/README.md b/README.md
index d937b3a..97f4f02 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
 
 #### Key Interfaces
 
-[Stream Observer](https://github.com/google/grpc-java/blob/master/stub/src/main/java/com/google/net/stubby/stub/StreamObserver.java)
+[Stream Observer](https://github.com/google/grpc-java/blob/master/stub/src/main/java/io/grpc/stub/StreamObserver.java)
 
 
 ## Channel
@@ -20,17 +20,17 @@
 
 #### Common
 
-* [Metadata - headers & trailers](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/Metadata.java)
-* [Status - error code namespace & handling](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/Status.java)
+* [Metadata - headers & trailers](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/Metadata.java)
+* [Status - error code namespace & handling](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/Status.java)
 
 #### Client
-* [Channel - client side binding](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/Channel.java)
-* [Call](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/Call.java)
-* [Client Interceptor](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/ClientInterceptor.java)
+* [Channel - client side binding](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/Channel.java)
+* [Call](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/Call.java)
+* [Client Interceptor](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/ClientInterceptor.java)
 
 #### Server
-* [Server call handler - analog to Channel on server](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/ServerCallHandler.java)
-* [Server Call](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/ServerCall.java)
+* [Server call handler - analog to Channel on server](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/ServerCallHandler.java)
+* [Server Call](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/ServerCall.java)
 
 
 ## Transport
@@ -39,20 +39,20 @@
 
 #### Common
 
-* [Stream](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/transport/Stream.java)
-* [Stream Listener](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/transport/StreamListener.java)
+* [Stream](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/transport/Stream.java)
+* [Stream Listener](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/transport/StreamListener.java)
 
 #### Client
 
-* [Client Stream](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/transport/ClientStream.java)
-* [Client Stream Listener](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/transport/ClientStreamListener.java)
+* [Client Stream](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/transport/ClientStream.java)
+* [Client Stream Listener](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/transport/ClientStreamListener.java)
 
 #### Server
 
-* [Server Stream](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/transport/ServerStream.java)
-* [Server Stream Listener](https://github.com/google/grpc-java/blob/master/core/src/main/java/com/google/net/stubby/transport/ServerStreamListener.java)
+* [Server Stream](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/transport/ServerStream.java)
+* [Server Stream Listener](https://github.com/google/grpc-java/blob/master/core/src/main/java/io/grpc/transport/ServerStreamListener.java)
 
 
 # Examples
 
-Tests showing how these layers are composed to execute calls using protobuf messages can be found here https://github.com/google/grpc-java/tree/master/integration-testing/src/main/java/com/google/net/stubby/testing/integration
+Tests showing how these layers are composed to execute calls using protobuf messages can be found here https://github.com/google/grpc-java/tree/master/integration-testing/src/main/java/io/grpc/testing/integration
diff --git a/all/build.gradle b/all/build.gradle
index a55e2cd..fb7e2fb 100644
--- a/all/build.gradle
+++ b/all/build.gradle
@@ -1,14 +1,14 @@
-description = "Stubby: All"
+description = "gRPC: All"
 
 // Make sure that no transitive dependencies are included.
 configurations.compile.transitive = false
 
 dependencies {
-    compile project(':stubby-core'),
-            project(':stubby-stub'),
-            project(':stubby-auth'),
-            project(':stubby-netty'),
-            project(':stubby-okhttp')
+    compile project(':grpc-core'),
+            project(':grpc-stub'),
+            project(':grpc-auth'),
+            project(':grpc-netty'),
+            project(':grpc-okhttp')
 }
 
 // Create a fat jar containing only the direct dependencies
diff --git a/auth/build.gradle b/auth/build.gradle
index 22a3fe3..52a3f12 100644
--- a/auth/build.gradle
+++ b/auth/build.gradle
@@ -2,9 +2,9 @@
     id "be.insaneprogramming.gradle.animalsniffer" version "1.4.0"
 }
 
-description = "Stubby: Auth"
+description = "gRpc: Auth"
 dependencies {
-    compile project(':stubby-core'),
+    compile project(':grpc-core'),
             libraries.oauth_client,
             libraries.javaee_api
 }
diff --git a/auth/src/main/java/com/google/net/stubby/auth/OAuth2AccessTokenProvider.java b/auth/src/main/java/io/grpc/auth/OAuth2AccessTokenProvider.java
similarity index 98%
rename from auth/src/main/java/com/google/net/stubby/auth/OAuth2AccessTokenProvider.java
rename to auth/src/main/java/io/grpc/auth/OAuth2AccessTokenProvider.java
index d22ed64..aac2706 100644
--- a/auth/src/main/java/com/google/net/stubby/auth/OAuth2AccessTokenProvider.java
+++ b/auth/src/main/java/io/grpc/auth/OAuth2AccessTokenProvider.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.auth;
+package io.grpc.auth;
 
 import com.google.api.client.auth.oauth2.Credential;
 import com.google.common.base.Preconditions;
diff --git a/auth/src/main/java/com/google/net/stubby/auth/OAuth2ChannelInterceptor.java b/auth/src/main/java/io/grpc/auth/OAuth2ChannelInterceptor.java
similarity index 90%
rename from auth/src/main/java/com/google/net/stubby/auth/OAuth2ChannelInterceptor.java
rename to auth/src/main/java/io/grpc/auth/OAuth2ChannelInterceptor.java
index c0c6a38..f3efd6b 100644
--- a/auth/src/main/java/com/google/net/stubby/auth/OAuth2ChannelInterceptor.java
+++ b/auth/src/main/java/io/grpc/auth/OAuth2ChannelInterceptor.java
@@ -29,15 +29,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.auth;
+package io.grpc.auth;
 
 import com.google.api.client.auth.oauth2.Credential;
-import com.google.net.stubby.Call;
-import com.google.net.stubby.Channel;
-import com.google.net.stubby.ClientInterceptor;
-import com.google.net.stubby.ClientInterceptors.ForwardingCall;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
+
+import io.grpc.Call;
+import io.grpc.Channel;
+import io.grpc.ClientInterceptor;
+import io.grpc.ClientInterceptors.ForwardingCall;
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
 
 import java.util.concurrent.Executor;
 
diff --git a/build.gradle b/build.gradle
index 5bb44ea..f4c9860 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@
     apply plugin: "maven"
     apply plugin: "idea"
 
-    group = "com.google.net.stubby"
+    group = "io.grpc"
     version = "0.1.0-SNAPSHOT"
 
     sourceCompatibility = 1.6
diff --git a/compiler/run_test.sh b/compiler/run_test.sh
index 02d24c6..5f311ba 100755
--- a/compiler/run_test.sh
+++ b/compiler/run_test.sh
@@ -15,6 +15,6 @@
 protoc --plugin=protoc-gen-java_rpc=build/binaries/java_pluginExecutable/java_plugin \
   --java_rpc_out="$OUTPUT_FILE" --proto_path="$TEST_SRC_DIR" "$INPUT_FILE" && \
   unzip -o -d "$TEST_TMP_DIR" "$OUTPUT_FILE" && \
-  diff "$TEST_TMP_DIR/com/google/net/stubby/testing/integration/TestServiceGrpc.java" \
+  diff "$TEST_TMP_DIR/io/grpc/testing/integration/TestServiceGrpc.java" \
     "$GOLDEN_FILE" && \
   echo "PASS"
diff --git a/compiler/src/java_generator.cc b/compiler/src/java_generator.cc
index 43ea5a0..814bab0 100644
--- a/compiler/src/java_generator.cc
+++ b/compiler/src/java_generator.cc
@@ -470,11 +470,11 @@
     if (client_streaming) {
       (*vars)["calls_method"] = "asyncStreamingRequestCall";
       (*vars)["invocation_class"] =
-          "com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod";
+          "io.grpc.stub.ServerCalls.StreamingRequestMethod";
     } else {
       (*vars)["calls_method"] = "asyncUnaryRequestCall";
       (*vars)["invocation_class"] =
-          "com.google.net.stubby.stub.ServerCalls.UnaryRequestMethod";
+          "io.grpc.stub.ServerCalls.UnaryRequestMethod";
     }
     p->Print(*vars, ".addMethod(createMethodDefinition(\n");
     p->Indent();
@@ -586,27 +586,27 @@
 void PrintImports(Printer* p) {
   p->Print(
       "import static "
-      "com.google.net.stubby.stub.Calls.createMethodDescriptor;\n"
+      "io.grpc.stub.Calls.createMethodDescriptor;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.asyncUnaryCall;\n"
+      "io.grpc.stub.Calls.asyncUnaryCall;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.asyncServerStreamingCall;\n"
+      "io.grpc.stub.Calls.asyncServerStreamingCall;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.asyncClientStreamingCall;\n"
+      "io.grpc.stub.Calls.asyncClientStreamingCall;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.duplexStreamingCall;\n"
+      "io.grpc.stub.Calls.duplexStreamingCall;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.blockingUnaryCall;\n"
+      "io.grpc.stub.Calls.blockingUnaryCall;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.blockingServerStreamingCall;\n"
+      "io.grpc.stub.Calls.blockingServerStreamingCall;\n"
       "import static "
-      "com.google.net.stubby.stub.Calls.unaryFutureCall;\n"
+      "io.grpc.stub.Calls.unaryFutureCall;\n"
       "import static "
-      "com.google.net.stubby.stub.ServerCalls.createMethodDefinition;\n"
+      "io.grpc.stub.ServerCalls.createMethodDefinition;\n"
       "import static "
-      "com.google.net.stubby.stub.ServerCalls.asyncUnaryRequestCall;\n"
+      "io.grpc.stub.ServerCalls.asyncUnaryRequestCall;\n"
       "import static "
-      "com.google.net.stubby.stub.ServerCalls.asyncStreamingRequestCall;\n\n");
+      "io.grpc.stub.ServerCalls.asyncStreamingRequestCall;\n\n");
 }
 
 void GenerateService(const ServiceDescriptor* service,
@@ -616,18 +616,18 @@
   map<string, string> vars;
   vars["String"] = "java.lang.String";
   vars["Override"] = "java.lang.Override";
-  vars["Channel"] = "com.google.net.stubby.Channel";
-  vars["MethodType"] = "com.google.net.stubby.MethodType";
+  vars["Channel"] = "io.grpc.Channel";
+  vars["MethodType"] = "io.grpc.MethodType";
   vars["ServerServiceDefinition"] =
-      "com.google.net.stubby.ServerServiceDefinition";
-  vars["AbstractStub"] = "com.google.net.stubby.stub.AbstractStub";
-  vars["Method"] = "com.google.net.stubby.stub.Method";
+      "io.grpc.ServerServiceDefinition";
+  vars["AbstractStub"] = "io.grpc.stub.AbstractStub";
+  vars["Method"] = "io.grpc.stub.Method";
   vars["AbstractServiceDescriptor"] =
-      "com.google.net.stubby.stub.AbstractServiceDescriptor";
+      "io.grpc.stub.AbstractServiceDescriptor";
   vars["ImmutableList"] = "com.google.common.collect.ImmutableList";
-  vars["MethodDescriptor"] = "com.google.net.stubby.MethodDescriptor";
-  vars["ProtoUtils"] = "com.google.net.stubby.proto.ProtoUtils";
-  vars["StreamObserver"] = "com.google.net.stubby.stub.StreamObserver";
+  vars["MethodDescriptor"] = "io.grpc.MethodDescriptor";
+  vars["ProtoUtils"] = "io.grpc.proto.ProtoUtils";
+  vars["StreamObserver"] = "io.grpc.stub.StreamObserver";
   vars["Iterator"] = "java.util.Iterator";
   vars["Map"] = "java.util.Map";
   vars["TimeUnit"] = "java.util.concurrent.TimeUnit";
diff --git a/compiler/test/TestService.java.txt b/compiler/test/TestService.java.txt
index 3ff993c..46f7116 100644
--- a/compiler/test/TestService.java.txt
+++ b/compiler/test/TestService.java.txt
@@ -1,62 +1,62 @@
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
-import static com.google.net.stubby.stub.Calls.createMethodDescriptor;
-import static com.google.net.stubby.stub.Calls.asyncUnaryCall;
-import static com.google.net.stubby.stub.Calls.asyncServerStreamingCall;
-import static com.google.net.stubby.stub.Calls.asyncClientStreamingCall;
-import static com.google.net.stubby.stub.Calls.duplexStreamingCall;
-import static com.google.net.stubby.stub.Calls.blockingUnaryCall;
-import static com.google.net.stubby.stub.Calls.blockingServerStreamingCall;
-import static com.google.net.stubby.stub.Calls.unaryFutureCall;
-import static com.google.net.stubby.stub.ServerCalls.createMethodDefinition;
-import static com.google.net.stubby.stub.ServerCalls.asyncUnaryRequestCall;
-import static com.google.net.stubby.stub.ServerCalls.asyncStreamingRequestCall;
+import static io.grpc.stub.Calls.createMethodDescriptor;
+import static io.grpc.stub.Calls.asyncUnaryCall;
+import static io.grpc.stub.Calls.asyncServerStreamingCall;
+import static io.grpc.stub.Calls.asyncClientStreamingCall;
+import static io.grpc.stub.Calls.duplexStreamingCall;
+import static io.grpc.stub.Calls.blockingUnaryCall;
+import static io.grpc.stub.Calls.blockingServerStreamingCall;
+import static io.grpc.stub.Calls.unaryFutureCall;
+import static io.grpc.stub.ServerCalls.createMethodDefinition;
+import static io.grpc.stub.ServerCalls.asyncUnaryRequestCall;
+import static io.grpc.stub.ServerCalls.asyncStreamingRequestCall;
 
 @javax.annotation.Generated("by gRPC proto compiler")
 public class TestServiceGrpc {
 
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Test.SimpleRequest,
-      com.google.net.stubby.testing.integration.Test.SimpleResponse> METHOD_UNARY_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.UNARY, "UnaryCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.SimpleRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.SimpleResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-      com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> METHOD_STREAMING_OUTPUT_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.SERVER_STREAMING, "StreamingOutputCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest,
-      com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse> METHOD_STREAMING_INPUT_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.CLIENT_STREAMING, "StreamingInputCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-      com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_DUPLEX_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.DUPLEX_STREAMING, "FullDuplexCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-      com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_DUPLEX_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.DUPLEX_STREAMING, "HalfDuplexCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Test.SimpleRequest,
+      io.grpc.testing.integration.Test.SimpleResponse> METHOD_UNARY_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.UNARY, "UnaryCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.SimpleRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.SimpleResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_STREAMING_OUTPUT_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.SERVER_STREAMING, "StreamingOutputCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Test.StreamingInputCallRequest,
+      io.grpc.testing.integration.Test.StreamingInputCallResponse> METHOD_STREAMING_INPUT_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.CLIENT_STREAMING, "StreamingInputCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingInputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingInputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_DUPLEX_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.DUPLEX_STREAMING, "FullDuplexCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_DUPLEX_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.DUPLEX_STREAMING, "HalfDuplexCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Test.StreamingOutputCallResponse.PARSER));
 
-  public static TestServiceStub newStub(com.google.net.stubby.Channel channel) {
+  public static TestServiceStub newStub(io.grpc.Channel channel) {
     return new TestServiceStub(channel, CONFIG);
   }
 
   public static TestServiceBlockingStub newBlockingStub(
-      com.google.net.stubby.Channel channel) {
+      io.grpc.Channel channel) {
     return new TestServiceBlockingStub(channel, CONFIG);
   }
 
   public static TestServiceFutureStub newFutureStub(
-      com.google.net.stubby.Channel channel) {
+      io.grpc.Channel channel) {
     return new TestServiceFutureStub(channel, CONFIG);
   }
 
@@ -65,17 +65,17 @@
 
   @javax.annotation.concurrent.Immutable
   public static class TestServiceServiceDescriptor extends
-      com.google.net.stubby.stub.AbstractServiceDescriptor<TestServiceServiceDescriptor> {
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.SimpleRequest,
-        com.google.net.stubby.testing.integration.Test.SimpleResponse> unaryCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-        com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest,
-        com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse> streamingInputCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-        com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> fullDuplexCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-        com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> halfDuplexCall;
+      io.grpc.stub.AbstractServiceDescriptor<TestServiceServiceDescriptor> {
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.SimpleRequest,
+        io.grpc.testing.integration.Test.SimpleResponse> unaryCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+        io.grpc.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingInputCallRequest,
+        io.grpc.testing.integration.Test.StreamingInputCallResponse> streamingInputCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+        io.grpc.testing.integration.Test.StreamingOutputCallResponse> fullDuplexCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+        io.grpc.testing.integration.Test.StreamingOutputCallResponse> halfDuplexCall;
 
     private TestServiceServiceDescriptor() {
       unaryCall = createMethodDescriptor(
@@ -91,33 +91,33 @@
     }
 
     private TestServiceServiceDescriptor(
-        java.util.Map<java.lang.String, com.google.net.stubby.MethodDescriptor<?, ?>> methodMap) {
-      unaryCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.SimpleRequest,
-          com.google.net.stubby.testing.integration.Test.SimpleResponse>) methodMap.get(
+        java.util.Map<java.lang.String, io.grpc.MethodDescriptor<?, ?>> methodMap) {
+      unaryCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.SimpleRequest,
+          io.grpc.testing.integration.Test.SimpleResponse>) methodMap.get(
           CONFIG.unaryCall.getName());
-      streamingOutputCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-          com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse>) methodMap.get(
+      streamingOutputCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+          io.grpc.testing.integration.Test.StreamingOutputCallResponse>) methodMap.get(
           CONFIG.streamingOutputCall.getName());
-      streamingInputCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest,
-          com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse>) methodMap.get(
+      streamingInputCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingInputCallRequest,
+          io.grpc.testing.integration.Test.StreamingInputCallResponse>) methodMap.get(
           CONFIG.streamingInputCall.getName());
-      fullDuplexCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-          com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse>) methodMap.get(
+      fullDuplexCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+          io.grpc.testing.integration.Test.StreamingOutputCallResponse>) methodMap.get(
           CONFIG.fullDuplexCall.getName());
-      halfDuplexCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-          com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse>) methodMap.get(
+      halfDuplexCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+          io.grpc.testing.integration.Test.StreamingOutputCallResponse>) methodMap.get(
           CONFIG.halfDuplexCall.getName());
     }
 
     @java.lang.Override
     protected TestServiceServiceDescriptor build(
-        java.util.Map<java.lang.String, com.google.net.stubby.MethodDescriptor<?, ?>> methodMap) {
+        java.util.Map<java.lang.String, io.grpc.MethodDescriptor<?, ?>> methodMap) {
       return new TestServiceServiceDescriptor(methodMap);
     }
 
     @java.lang.Override
-    public com.google.common.collect.ImmutableList<com.google.net.stubby.MethodDescriptor<?, ?>> methods() {
-      return com.google.common.collect.ImmutableList.<com.google.net.stubby.MethodDescriptor<?, ?>>of(
+    public com.google.common.collect.ImmutableList<io.grpc.MethodDescriptor<?, ?>> methods() {
+      return com.google.common.collect.ImmutableList.<io.grpc.MethodDescriptor<?, ?>>of(
           unaryCall,
           streamingOutputCall,
           streamingInputCall,
@@ -128,198 +128,198 @@
 
   public static interface TestService {
 
-    public void unaryCall(com.google.net.stubby.testing.integration.Test.SimpleRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.SimpleResponse> responseObserver);
+    public void unaryCall(io.grpc.testing.integration.Test.SimpleRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.SimpleResponse> responseObserver);
 
-    public void streamingOutputCall(com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
+    public void streamingOutputCall(io.grpc.testing.integration.Test.StreamingOutputCallRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
 
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse> responseObserver);
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver);
 
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
 
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
   }
 
   public static interface TestServiceBlockingClient {
 
-    public com.google.net.stubby.testing.integration.Test.SimpleResponse unaryCall(com.google.net.stubby.testing.integration.Test.SimpleRequest request);
+    public io.grpc.testing.integration.Test.SimpleResponse unaryCall(io.grpc.testing.integration.Test.SimpleRequest request);
 
-    public java.util.Iterator<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall(
-        com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest request);
+    public java.util.Iterator<io.grpc.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall(
+        io.grpc.testing.integration.Test.StreamingOutputCallRequest request);
   }
 
   public static interface TestServiceFutureClient {
 
-    public com.google.common.util.concurrent.ListenableFuture<com.google.net.stubby.testing.integration.Test.SimpleResponse> unaryCall(
-        com.google.net.stubby.testing.integration.Test.SimpleRequest request);
+    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.Test.SimpleResponse> unaryCall(
+        io.grpc.testing.integration.Test.SimpleRequest request);
   }
 
   public static class TestServiceStub extends
-      com.google.net.stubby.stub.AbstractStub<TestServiceStub, TestServiceServiceDescriptor>
+      io.grpc.stub.AbstractStub<TestServiceStub, TestServiceServiceDescriptor>
       implements TestService {
-    private TestServiceStub(com.google.net.stubby.Channel channel,
+    private TestServiceStub(io.grpc.Channel channel,
         TestServiceServiceDescriptor config) {
       super(channel, config);
     }
 
     @java.lang.Override
-    protected TestServiceStub build(com.google.net.stubby.Channel channel,
+    protected TestServiceStub build(io.grpc.Channel channel,
         TestServiceServiceDescriptor config) {
       return new TestServiceStub(channel, config);
     }
 
     @java.lang.Override
-    public void unaryCall(com.google.net.stubby.testing.integration.Test.SimpleRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.SimpleResponse> responseObserver) {
+    public void unaryCall(io.grpc.testing.integration.Test.SimpleRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.SimpleResponse> responseObserver) {
       asyncUnaryCall(
           channel.newCall(config.unaryCall), request, responseObserver);
     }
 
     @java.lang.Override
-    public void streamingOutputCall(com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+    public void streamingOutputCall(io.grpc.testing.integration.Test.StreamingOutputCallRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
       asyncServerStreamingCall(
           channel.newCall(config.streamingOutputCall), request, responseObserver);
     }
 
     @java.lang.Override
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse> responseObserver) {
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver) {
       return asyncClientStreamingCall(
           channel.newCall(config.streamingInputCall), responseObserver);
     }
 
     @java.lang.Override
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
       return duplexStreamingCall(
           channel.newCall(config.fullDuplexCall), responseObserver);
     }
 
     @java.lang.Override
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
       return duplexStreamingCall(
           channel.newCall(config.halfDuplexCall), responseObserver);
     }
   }
 
   public static class TestServiceBlockingStub extends
-      com.google.net.stubby.stub.AbstractStub<TestServiceBlockingStub, TestServiceServiceDescriptor>
+      io.grpc.stub.AbstractStub<TestServiceBlockingStub, TestServiceServiceDescriptor>
       implements TestServiceBlockingClient {
-    private TestServiceBlockingStub(com.google.net.stubby.Channel channel,
+    private TestServiceBlockingStub(io.grpc.Channel channel,
         TestServiceServiceDescriptor config) {
       super(channel, config);
     }
 
     @java.lang.Override
-    protected TestServiceBlockingStub build(com.google.net.stubby.Channel channel,
+    protected TestServiceBlockingStub build(io.grpc.Channel channel,
         TestServiceServiceDescriptor config) {
       return new TestServiceBlockingStub(channel, config);
     }
 
     @java.lang.Override
-    public com.google.net.stubby.testing.integration.Test.SimpleResponse unaryCall(com.google.net.stubby.testing.integration.Test.SimpleRequest request) {
+    public io.grpc.testing.integration.Test.SimpleResponse unaryCall(io.grpc.testing.integration.Test.SimpleRequest request) {
       return blockingUnaryCall(
           channel.newCall(config.unaryCall), request);
     }
 
     @java.lang.Override
-    public java.util.Iterator<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall(
-        com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest request) {
+    public java.util.Iterator<io.grpc.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall(
+        io.grpc.testing.integration.Test.StreamingOutputCallRequest request) {
       return blockingServerStreamingCall(
           channel.newCall(config.streamingOutputCall), request);
     }
   }
 
   public static class TestServiceFutureStub extends
-      com.google.net.stubby.stub.AbstractStub<TestServiceFutureStub, TestServiceServiceDescriptor>
+      io.grpc.stub.AbstractStub<TestServiceFutureStub, TestServiceServiceDescriptor>
       implements TestServiceFutureClient {
-    private TestServiceFutureStub(com.google.net.stubby.Channel channel,
+    private TestServiceFutureStub(io.grpc.Channel channel,
         TestServiceServiceDescriptor config) {
       super(channel, config);
     }
 
     @java.lang.Override
-    protected TestServiceFutureStub build(com.google.net.stubby.Channel channel,
+    protected TestServiceFutureStub build(io.grpc.Channel channel,
         TestServiceServiceDescriptor config) {
       return new TestServiceFutureStub(channel, config);
     }
 
     @java.lang.Override
-    public com.google.common.util.concurrent.ListenableFuture<com.google.net.stubby.testing.integration.Test.SimpleResponse> unaryCall(
-        com.google.net.stubby.testing.integration.Test.SimpleRequest request) {
+    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.Test.SimpleResponse> unaryCall(
+        io.grpc.testing.integration.Test.SimpleRequest request) {
       return unaryFutureCall(
           channel.newCall(config.unaryCall), request);
     }
   }
 
-  public static com.google.net.stubby.ServerServiceDefinition bindService(
+  public static io.grpc.ServerServiceDefinition bindService(
       final TestService serviceImpl) {
-    return com.google.net.stubby.ServerServiceDefinition.builder("grpc.testing.TestService")
+    return io.grpc.ServerServiceDefinition.builder("grpc.testing.TestService")
       .addMethod(createMethodDefinition(
           METHOD_UNARY_CALL,
           asyncUnaryRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.UnaryRequestMethod<
-                com.google.net.stubby.testing.integration.Test.SimpleRequest,
-                com.google.net.stubby.testing.integration.Test.SimpleResponse>() {
+            new io.grpc.stub.ServerCalls.UnaryRequestMethod<
+                io.grpc.testing.integration.Test.SimpleRequest,
+                io.grpc.testing.integration.Test.SimpleResponse>() {
               @java.lang.Override
               public void invoke(
-                  com.google.net.stubby.testing.integration.Test.SimpleRequest request,
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.SimpleResponse> responseObserver) {
+                  io.grpc.testing.integration.Test.SimpleRequest request,
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.SimpleResponse> responseObserver) {
                 serviceImpl.unaryCall(request, responseObserver);
               }
             })))
       .addMethod(createMethodDefinition(
           METHOD_STREAMING_OUTPUT_CALL,
           asyncUnaryRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.UnaryRequestMethod<
-                com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-                com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse>() {
+            new io.grpc.stub.ServerCalls.UnaryRequestMethod<
+                io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+                io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
               public void invoke(
-                  com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest request,
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+                  io.grpc.testing.integration.Test.StreamingOutputCallRequest request,
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
                 serviceImpl.streamingOutputCall(request, responseObserver);
               }
             })))
       .addMethod(createMethodDefinition(
           METHOD_STREAMING_INPUT_CALL,
           asyncStreamingRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod<
-                com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest,
-                com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse>() {
+            new io.grpc.stub.ServerCalls.StreamingRequestMethod<
+                io.grpc.testing.integration.Test.StreamingInputCallRequest,
+                io.grpc.testing.integration.Test.StreamingInputCallResponse>() {
               @java.lang.Override
-              public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingInputCallRequest> invoke(
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingInputCallResponse> responseObserver) {
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver) {
                 return serviceImpl.streamingInputCall(responseObserver);
               }
             })))
       .addMethod(createMethodDefinition(
           METHOD_FULL_DUPLEX_CALL,
           asyncStreamingRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod<
-                com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-                com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse>() {
+            new io.grpc.stub.ServerCalls.StreamingRequestMethod<
+                io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+                io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
-              public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest> invoke(
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
                 return serviceImpl.fullDuplexCall(responseObserver);
               }
             })))
       .addMethod(createMethodDefinition(
           METHOD_HALF_DUPLEX_CALL,
           asyncStreamingRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod<
-                com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest,
-                com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse>() {
+            new io.grpc.stub.ServerCalls.StreamingRequestMethod<
+                io.grpc.testing.integration.Test.StreamingOutputCallRequest,
+                io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
-              public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallRequest> invoke(
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
                 return serviceImpl.halfDuplexCall(responseObserver);
               }
             }))).build();
diff --git a/compiler/test/test.proto b/compiler/test/test.proto
index 1df34a5..c448036 100644
--- a/compiler/test/test.proto
+++ b/compiler/test/test.proto
@@ -3,7 +3,7 @@
 
 package grpc.testing;
 
-option java_package = "com.google.net.stubby.testing.integration";
+option java_package = "io.grpc.testing.integration";
 
 message SimpleRequest {
 }
diff --git a/core/build.gradle b/core/build.gradle
index 46948c8..4b2e196 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -2,7 +2,7 @@
     id "be.insaneprogramming.gradle.animalsniffer" version "1.4.0"
 }
 
-description = 'Stubby: Core'
+description = 'gRPC: Core'
 
 dependencies {
     compile libraries.protobuf,
diff --git a/core/src/main/java/com/google/net/stubby/AbstractChannelBuilder.java b/core/src/main/java/io/grpc/AbstractChannelBuilder.java
similarity index 96%
rename from core/src/main/java/com/google/net/stubby/AbstractChannelBuilder.java
rename to core/src/main/java/io/grpc/AbstractChannelBuilder.java
index 16b9d52..070a157 100644
--- a/core/src/main/java/com/google/net/stubby/AbstractChannelBuilder.java
+++ b/core/src/main/java/io/grpc/AbstractChannelBuilder.java
@@ -29,12 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.google.net.stubby.SharedResourceHolder.Resource;
-import com.google.net.stubby.transport.ClientTransportFactory;
+
+import io.grpc.SharedResourceHolder.Resource;
+import io.grpc.transport.ClientTransportFactory;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
diff --git a/core/src/main/java/com/google/net/stubby/AbstractServerBuilder.java b/core/src/main/java/io/grpc/AbstractServerBuilder.java
similarity index 96%
rename from core/src/main/java/com/google/net/stubby/AbstractServerBuilder.java
rename to core/src/main/java/io/grpc/AbstractServerBuilder.java
index 09d9346..4f592bb 100644
--- a/core/src/main/java/com/google/net/stubby/AbstractServerBuilder.java
+++ b/core/src/main/java/io/grpc/AbstractServerBuilder.java
@@ -29,13 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
-import static com.google.net.stubby.AbstractChannelBuilder.DEFAULT_EXECUTOR;
+import static io.grpc.AbstractChannelBuilder.DEFAULT_EXECUTOR;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Service;
-import com.google.net.stubby.transport.ServerListener;
+
+import io.grpc.transport.ServerListener;
 
 import java.util.concurrent.ExecutorService;
 
diff --git a/core/src/main/java/com/google/net/stubby/Call.java b/core/src/main/java/io/grpc/Call.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/Call.java
rename to core/src/main/java/io/grpc/Call.java
index 61ba2a8..7ea5d3b 100644
--- a/core/src/main/java/com/google/net/stubby/Call.java
+++ b/core/src/main/java/io/grpc/Call.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 
 /**
diff --git a/core/src/main/java/com/google/net/stubby/Channel.java b/core/src/main/java/io/grpc/Channel.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/Channel.java
rename to core/src/main/java/io/grpc/Channel.java
index 19cc935..34d05a8 100644
--- a/core/src/main/java/com/google/net/stubby/Channel.java
+++ b/core/src/main/java/io/grpc/Channel.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import javax.annotation.concurrent.ThreadSafe;
 
diff --git a/core/src/main/java/com/google/net/stubby/ChannelImpl.java b/core/src/main/java/io/grpc/ChannelImpl.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/ChannelImpl.java
rename to core/src/main/java/io/grpc/ChannelImpl.java
index d6a17c2..b8a654f 100644
--- a/core/src/main/java/com/google/net/stubby/ChannelImpl.java
+++ b/core/src/main/java/io/grpc/ChannelImpl.java
@@ -29,17 +29,18 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.Service.Listener;
 import com.google.common.util.concurrent.Service.State;
-import com.google.net.stubby.transport.ClientStream;
-import com.google.net.stubby.transport.ClientStreamListener;
-import com.google.net.stubby.transport.ClientTransport;
-import com.google.net.stubby.transport.ClientTransportFactory;
+
+import io.grpc.transport.ClientStream;
+import io.grpc.transport.ClientStreamListener;
+import io.grpc.transport.ClientTransport;
+import io.grpc.transport.ClientTransportFactory;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/core/src/main/java/com/google/net/stubby/ClientInterceptor.java b/core/src/main/java/io/grpc/ClientInterceptor.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/ClientInterceptor.java
rename to core/src/main/java/io/grpc/ClientInterceptor.java
index a51c3f7..1a44a51 100644
--- a/core/src/main/java/com/google/net/stubby/ClientInterceptor.java
+++ b/core/src/main/java/io/grpc/ClientInterceptor.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import javax.annotation.concurrent.ThreadSafe;
 
diff --git a/core/src/main/java/com/google/net/stubby/ClientInterceptors.java b/core/src/main/java/io/grpc/ClientInterceptors.java
similarity index 96%
rename from core/src/main/java/com/google/net/stubby/ClientInterceptors.java
rename to core/src/main/java/io/grpc/ClientInterceptors.java
index 1e0248b..787c464 100644
--- a/core/src/main/java/com/google/net/stubby/ClientInterceptors.java
+++ b/core/src/main/java/io/grpc/ClientInterceptors.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -142,8 +142,8 @@
   }
 
   /**
-   * A {@link com.google.net.stubby.Call.Listener} which forwards all of its methods to another
-   * {@link com.google.net.stubby.Call.Listener}.
+   * A {@link io.grpc.Call.Listener} which forwards all of its methods to another
+   * {@link io.grpc.Call.Listener}.
    */
   public static class ForwardingListener<T> extends Call.Listener<T> {
 
diff --git a/core/src/main/java/com/google/net/stubby/DeferredInputStream.java b/core/src/main/java/io/grpc/DeferredInputStream.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/DeferredInputStream.java
rename to core/src/main/java/io/grpc/DeferredInputStream.java
index f58023e..152bb73 100644
--- a/core/src/main/java/com/google/net/stubby/DeferredInputStream.java
+++ b/core/src/main/java/io/grpc/DeferredInputStream.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/core/src/main/java/com/google/net/stubby/GrpcFramingUtil.java b/core/src/main/java/io/grpc/GrpcFramingUtil.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/GrpcFramingUtil.java
rename to core/src/main/java/io/grpc/GrpcFramingUtil.java
index bdf2a99..cd80566 100644
--- a/core/src/main/java/com/google/net/stubby/GrpcFramingUtil.java
+++ b/core/src/main/java/io/grpc/GrpcFramingUtil.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 /**
  * Common constants and utilities for GRPC protocol framing.
diff --git a/core/src/main/java/com/google/net/stubby/HandlerRegistry.java b/core/src/main/java/io/grpc/HandlerRegistry.java
similarity index 94%
rename from core/src/main/java/com/google/net/stubby/HandlerRegistry.java
rename to core/src/main/java/io/grpc/HandlerRegistry.java
index 9a4f2e8..c49d709 100644
--- a/core/src/main/java/com/google/net/stubby/HandlerRegistry.java
+++ b/core/src/main/java/io/grpc/HandlerRegistry.java
@@ -29,10 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
-
-import com.google.net.stubby.ServerMethodDefinition;
-import com.google.net.stubby.ServerServiceDefinition;
+package io.grpc;
 
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
diff --git a/core/src/main/java/com/google/net/stubby/Marshaller.java b/core/src/main/java/io/grpc/Marshaller.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/Marshaller.java
rename to core/src/main/java/io/grpc/Marshaller.java
index 12c8166..707560c 100644
--- a/core/src/main/java/com/google/net/stubby/Marshaller.java
+++ b/core/src/main/java/io/grpc/Marshaller.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import java.io.InputStream;
 
diff --git a/core/src/main/java/com/google/net/stubby/Metadata.java b/core/src/main/java/io/grpc/Metadata.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/Metadata.java
rename to core/src/main/java/io/grpc/Metadata.java
index 6883adb..41ad08e 100644
--- a/core/src/main/java/com/google/net/stubby/Metadata.java
+++ b/core/src/main/java/io/grpc/Metadata.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static com.google.common.base.Charsets.US_ASCII;
 
diff --git a/core/src/main/java/com/google/net/stubby/MethodDescriptor.java b/core/src/main/java/io/grpc/MethodDescriptor.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/MethodDescriptor.java
rename to core/src/main/java/io/grpc/MethodDescriptor.java
index 5a7759b..8acba1d 100644
--- a/core/src/main/java/com/google/net/stubby/MethodDescriptor.java
+++ b/core/src/main/java/io/grpc/MethodDescriptor.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 
diff --git a/core/src/main/java/com/google/net/stubby/MethodType.java b/core/src/main/java/io/grpc/MethodType.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/MethodType.java
rename to core/src/main/java/io/grpc/MethodType.java
index 85c04ff..396c872 100644
--- a/core/src/main/java/com/google/net/stubby/MethodType.java
+++ b/core/src/main/java/io/grpc/MethodType.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 /**
  * The call type of a method.
diff --git a/core/src/main/java/com/google/net/stubby/MutableHandlerRegistry.java b/core/src/main/java/io/grpc/MutableHandlerRegistry.java
similarity index 95%
rename from core/src/main/java/com/google/net/stubby/MutableHandlerRegistry.java
rename to core/src/main/java/io/grpc/MutableHandlerRegistry.java
index 57a581f..9e58e12 100644
--- a/core/src/main/java/com/google/net/stubby/MutableHandlerRegistry.java
+++ b/core/src/main/java/io/grpc/MutableHandlerRegistry.java
@@ -29,9 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
-
-import com.google.net.stubby.ServerServiceDefinition;
+package io.grpc;
 
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
diff --git a/core/src/main/java/com/google/net/stubby/MutableHandlerRegistryImpl.java b/core/src/main/java/io/grpc/MutableHandlerRegistryImpl.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/MutableHandlerRegistryImpl.java
rename to core/src/main/java/io/grpc/MutableHandlerRegistryImpl.java
index 217b1c0..6412093 100644
--- a/core/src/main/java/com/google/net/stubby/MutableHandlerRegistryImpl.java
+++ b/core/src/main/java/io/grpc/MutableHandlerRegistryImpl.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
diff --git a/core/src/main/java/com/google/net/stubby/SerializingExecutor.java b/core/src/main/java/io/grpc/SerializingExecutor.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/SerializingExecutor.java
rename to core/src/main/java/io/grpc/SerializingExecutor.java
index d70a217..17f1c2f 100644
--- a/core/src/main/java/com/google/net/stubby/SerializingExecutor.java
+++ b/core/src/main/java/io/grpc/SerializingExecutor.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 
diff --git a/core/src/main/java/com/google/net/stubby/Server.java b/core/src/main/java/io/grpc/Server.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/Server.java
rename to core/src/main/java/io/grpc/Server.java
index fbc2e94..34f70b0 100644
--- a/core/src/main/java/com/google/net/stubby/Server.java
+++ b/core/src/main/java/io/grpc/Server.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import javax.annotation.concurrent.ThreadSafe;
 
diff --git a/core/src/main/java/com/google/net/stubby/ServerCall.java b/core/src/main/java/io/grpc/ServerCall.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/ServerCall.java
rename to core/src/main/java/io/grpc/ServerCall.java
index 8efdb2b..185cb1f 100644
--- a/core/src/main/java/com/google/net/stubby/ServerCall.java
+++ b/core/src/main/java/io/grpc/ServerCall.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 
 /**
diff --git a/core/src/main/java/com/google/net/stubby/ServerCallHandler.java b/core/src/main/java/io/grpc/ServerCallHandler.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/ServerCallHandler.java
rename to core/src/main/java/io/grpc/ServerCallHandler.java
index ca1759d..ab767cb 100644
--- a/core/src/main/java/com/google/net/stubby/ServerCallHandler.java
+++ b/core/src/main/java/io/grpc/ServerCallHandler.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import javax.annotation.concurrent.ThreadSafe;
 
diff --git a/core/src/main/java/com/google/net/stubby/ServerImpl.java b/core/src/main/java/io/grpc/ServerImpl.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/ServerImpl.java
rename to core/src/main/java/io/grpc/ServerImpl.java
index 5883d48..3288f62 100644
--- a/core/src/main/java/com/google/net/stubby/ServerImpl.java
+++ b/core/src/main/java/io/grpc/ServerImpl.java
@@ -29,21 +29,21 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.Service;
-import com.google.net.stubby.transport.ServerListener;
-import com.google.net.stubby.transport.ServerStream;
-import com.google.net.stubby.transport.ServerStreamListener;
-import com.google.net.stubby.transport.ServerTransportListener;
+
+import io.grpc.transport.ServerListener;
+import io.grpc.transport.ServerStream;
+import io.grpc.transport.ServerStreamListener;
+import io.grpc.transport.ServerTransportListener;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
diff --git a/core/src/main/java/com/google/net/stubby/ServerInterceptor.java b/core/src/main/java/io/grpc/ServerInterceptor.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/ServerInterceptor.java
rename to core/src/main/java/io/grpc/ServerInterceptor.java
index 7232162..7f9cb37 100644
--- a/core/src/main/java/com/google/net/stubby/ServerInterceptor.java
+++ b/core/src/main/java/io/grpc/ServerInterceptor.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import javax.annotation.concurrent.ThreadSafe;
 
diff --git a/core/src/main/java/com/google/net/stubby/ServerInterceptors.java b/core/src/main/java/io/grpc/ServerInterceptors.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/ServerInterceptors.java
rename to core/src/main/java/io/grpc/ServerInterceptors.java
index 8401c09..ad74fce 100644
--- a/core/src/main/java/com/google/net/stubby/ServerInterceptors.java
+++ b/core/src/main/java/io/grpc/ServerInterceptors.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
diff --git a/core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java b/core/src/main/java/io/grpc/ServerMethodDefinition.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java
rename to core/src/main/java/io/grpc/ServerMethodDefinition.java
index 0ad91b6..be94639 100644
--- a/core/src/main/java/com/google/net/stubby/ServerMethodDefinition.java
+++ b/core/src/main/java/io/grpc/ServerMethodDefinition.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import java.io.InputStream;
 
diff --git a/core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java b/core/src/main/java/io/grpc/ServerServiceDefinition.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java
rename to core/src/main/java/io/grpc/ServerServiceDefinition.java
index 1920930..280ee51 100644
--- a/core/src/main/java/com/google/net/stubby/ServerServiceDefinition.java
+++ b/core/src/main/java/io/grpc/ServerServiceDefinition.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
diff --git a/core/src/main/java/com/google/net/stubby/SharedResourceHolder.java b/core/src/main/java/io/grpc/SharedResourceHolder.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/SharedResourceHolder.java
rename to core/src/main/java/io/grpc/SharedResourceHolder.java
index af4834e..504e18a 100644
--- a/core/src/main/java/com/google/net/stubby/SharedResourceHolder.java
+++ b/core/src/main/java/io/grpc/SharedResourceHolder.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.Preconditions;
 
diff --git a/core/src/main/java/com/google/net/stubby/Status.java b/core/src/main/java/io/grpc/Status.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/Status.java
rename to core/src/main/java/io/grpc/Status.java
index 6ad880d..5566ba1 100644
--- a/core/src/main/java/com/google/net/stubby/Status.java
+++ b/core/src/main/java/io/grpc/Status.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
diff --git a/core/src/main/java/com/google/net/stubby/proto/DeferredProtoInputStream.java b/core/src/main/java/io/grpc/proto/DeferredProtoInputStream.java
similarity index 95%
rename from core/src/main/java/com/google/net/stubby/proto/DeferredProtoInputStream.java
rename to core/src/main/java/io/grpc/proto/DeferredProtoInputStream.java
index 2776d5b..dbdc829 100644
--- a/core/src/main/java/com/google/net/stubby/proto/DeferredProtoInputStream.java
+++ b/core/src/main/java/io/grpc/proto/DeferredProtoInputStream.java
@@ -29,13 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.proto;
+package io.grpc.proto;
 
 import com.google.common.io.ByteStreams;
-import com.google.net.stubby.DeferredInputStream;
 import com.google.protobuf.CodedOutputStream;
 import com.google.protobuf.MessageLite;
 
+import io.grpc.DeferredInputStream;
+
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -43,7 +44,7 @@
 import javax.annotation.Nullable;
 
 /**
- * Implementation of {@link com.google.net.stubby.DeferredInputStream} backed by a protobuf.
+ * Implementation of {@link io.grpc.DeferredInputStream} backed by a protobuf.
  */
 public class DeferredProtoInputStream extends DeferredInputStream<MessageLite> {
 
diff --git a/core/src/main/java/com/google/net/stubby/proto/ProtoUtils.java b/core/src/main/java/io/grpc/proto/ProtoUtils.java
similarity index 95%
rename from core/src/main/java/com/google/net/stubby/proto/ProtoUtils.java
rename to core/src/main/java/io/grpc/proto/ProtoUtils.java
index 0fdc58b..a6498bb 100644
--- a/core/src/main/java/com/google/net/stubby/proto/ProtoUtils.java
+++ b/core/src/main/java/io/grpc/proto/ProtoUtils.java
@@ -29,16 +29,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.proto;
+package io.grpc.proto;
 
-import com.google.net.stubby.Marshaller;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
 import com.google.protobuf.InvalidProtocolBufferException;
 import com.google.protobuf.Message;
 import com.google.protobuf.MessageLite;
 import com.google.protobuf.Parser;
 
+import io.grpc.Marshaller;
+import io.grpc.Metadata;
+import io.grpc.Status;
+
 import java.io.InputStream;
 
 /**
diff --git a/core/src/main/java/com/google/net/stubby/transport/AbstractBuffer.java b/core/src/main/java/io/grpc/transport/AbstractBuffer.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/AbstractBuffer.java
rename to core/src/main/java/io/grpc/transport/AbstractBuffer.java
index ddf234b..c7c9039 100644
--- a/core/src/main/java/com/google/net/stubby/transport/AbstractBuffer.java
+++ b/core/src/main/java/io/grpc/transport/AbstractBuffer.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 /**
  * Abstract base class for {@link Buffer} implementations.
diff --git a/core/src/main/java/com/google/net/stubby/transport/AbstractClientStream.java b/core/src/main/java/io/grpc/transport/AbstractClientStream.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/transport/AbstractClientStream.java
rename to core/src/main/java/io/grpc/transport/AbstractClientStream.java
index 3cf17ef..40b366c 100644
--- a/core/src/main/java/com/google/net/stubby/transport/AbstractClientStream.java
+++ b/core/src/main/java/io/grpc/transport/AbstractClientStream.java
@@ -29,12 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
+
+import io.grpc.Metadata;
+import io.grpc.Status;
 
 import java.io.InputStream;
 import java.nio.ByteBuffer;
@@ -98,7 +99,7 @@
    * Called by transport implementations when they receive headers. When receiving headers
    * a transport may determine that there is an error in the protocol at this phase which is
    * why this method takes an error {@link Status}. If a transport reports an
-   * {@link com.google.net.stubby.Status.Code#INTERNAL} error
+   * {@link io.grpc.Status.Code#INTERNAL} error
    *
    * @param headers the parsed headers
    */
diff --git a/core/src/main/java/com/google/net/stubby/transport/AbstractClientTransport.java b/core/src/main/java/io/grpc/transport/AbstractClientTransport.java
similarity index 95%
rename from core/src/main/java/com/google/net/stubby/transport/AbstractClientTransport.java
rename to core/src/main/java/io/grpc/transport/AbstractClientTransport.java
index 0a1b076..d26f75e 100644
--- a/core/src/main/java/com/google/net/stubby/transport/AbstractClientTransport.java
+++ b/core/src/main/java/io/grpc/transport/AbstractClientTransport.java
@@ -29,12 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.AbstractService;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
+
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
 
 /**
  * Abstract base class for all {@link ClientTransport} implementations. Implements the
diff --git a/core/src/main/java/com/google/net/stubby/transport/AbstractServerStream.java b/core/src/main/java/io/grpc/transport/AbstractServerStream.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/AbstractServerStream.java
rename to core/src/main/java/io/grpc/transport/AbstractServerStream.java
index ab1c9a6..62a3902 100644
--- a/core/src/main/java/com/google/net/stubby/transport/AbstractServerStream.java
+++ b/core/src/main/java/io/grpc/transport/AbstractServerStream.java
@@ -29,11 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
+
+import io.grpc.Metadata;
+import io.grpc.Status;
 
 import java.io.InputStream;
 import java.nio.ByteBuffer;
diff --git a/core/src/main/java/com/google/net/stubby/transport/AbstractStream.java b/core/src/main/java/io/grpc/transport/AbstractStream.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/transport/AbstractStream.java
rename to core/src/main/java/io/grpc/transport/AbstractStream.java
index 8959408..3c0d794 100644
--- a/core/src/main/java/com/google/net/stubby/transport/AbstractStream.java
+++ b/core/src/main/java/io/grpc/transport/AbstractStream.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
diff --git a/core/src/main/java/com/google/net/stubby/transport/Buffer.java b/core/src/main/java/io/grpc/transport/Buffer.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/Buffer.java
rename to core/src/main/java/io/grpc/transport/Buffer.java
index d387988..211de4e 100644
--- a/core/src/main/java/com/google/net/stubby/transport/Buffer.java
+++ b/core/src/main/java/io/grpc/transport/Buffer.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import java.io.Closeable;
 import java.io.IOException;
diff --git a/core/src/main/java/com/google/net/stubby/transport/Buffers.java b/core/src/main/java/io/grpc/transport/Buffers.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/transport/Buffers.java
rename to core/src/main/java/io/grpc/transport/Buffers.java
index bd8a487..7655d00 100644
--- a/core/src/main/java/com/google/net/stubby/transport/Buffers.java
+++ b/core/src/main/java/io/grpc/transport/Buffers.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.UTF_8;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/ClientStream.java b/core/src/main/java/io/grpc/transport/ClientStream.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/transport/ClientStream.java
rename to core/src/main/java/io/grpc/transport/ClientStream.java
index 188fc84..c3cddc2 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ClientStream.java
+++ b/core/src/main/java/io/grpc/transport/ClientStream.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 /**
  * Extension of {@link Stream} to support client-side termination semantics.
diff --git a/core/src/main/java/com/google/net/stubby/transport/ClientStreamListener.java b/core/src/main/java/io/grpc/transport/ClientStreamListener.java
similarity index 90%
rename from core/src/main/java/com/google/net/stubby/transport/ClientStreamListener.java
rename to core/src/main/java/io/grpc/transport/ClientStreamListener.java
index 0ec84ce..62fb956 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ClientStreamListener.java
+++ b/core/src/main/java/io/grpc/transport/ClientStreamListener.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
+import io.grpc.Metadata;
+import io.grpc.Status;
 
 /** An observer of client-side stream events. */
 public interface ClientStreamListener extends StreamListener {
@@ -40,7 +40,7 @@
    * Called upon receiving all header information from the remote end-point. Note that transports
    * are not required to call this method if no header information is received, this would occur
    * when a stream immediately terminates with an error and only
-   * {@link #closed(com.google.net.stubby.Status, Metadata.Trailers)} is called.
+   * {@link #closed(io.grpc.Status, Metadata.Trailers)} is called.
    *
    * <p>This method should return quickly, as the same thread may be used to process other streams.
    *
@@ -50,7 +50,7 @@
 
   /**
    * Called when the stream is fully closed. {@link
-   * com.google.net.stubby.Status.Code#OK} is the only status code that is guaranteed
+   * io.grpc.Status.Code#OK} is the only status code that is guaranteed
    * to have been sent from the remote server. Any other status code may have been caused by
    * abnormal stream termination. This is guaranteed to always be the final call on a listener. No
    * further callbacks will be issued.
diff --git a/core/src/main/java/com/google/net/stubby/transport/ClientTransport.java b/core/src/main/java/io/grpc/transport/ClientTransport.java
similarity index 95%
rename from core/src/main/java/com/google/net/stubby/transport/ClientTransport.java
rename to core/src/main/java/io/grpc/transport/ClientTransport.java
index 09cb5bc..3ee98b1 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ClientTransport.java
+++ b/core/src/main/java/io/grpc/transport/ClientTransport.java
@@ -29,11 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.util.concurrent.Service;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
+
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
 
 /**
  * The client-side transport encapsulating a single connection to a remote server. Allows creation
diff --git a/core/src/main/java/com/google/net/stubby/transport/ClientTransportFactory.java b/core/src/main/java/io/grpc/transport/ClientTransportFactory.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/transport/ClientTransportFactory.java
rename to core/src/main/java/io/grpc/transport/ClientTransportFactory.java
index 7a341ab..f7853c8 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ClientTransportFactory.java
+++ b/core/src/main/java/io/grpc/transport/ClientTransportFactory.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 /** Pre-configured factory for creating {@link ClientTransport} instances. */
 public interface ClientTransportFactory {
diff --git a/core/src/main/java/com/google/net/stubby/transport/CompositeBuffer.java b/core/src/main/java/io/grpc/transport/CompositeBuffer.java
similarity index 99%
rename from core/src/main/java/com/google/net/stubby/transport/CompositeBuffer.java
rename to core/src/main/java/io/grpc/transport/CompositeBuffer.java
index a2ad9c1..1923d7b 100644
--- a/core/src/main/java/com/google/net/stubby/transport/CompositeBuffer.java
+++ b/core/src/main/java/io/grpc/transport/CompositeBuffer.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import java.io.IOException;
 import java.io.OutputStream;
diff --git a/core/src/main/java/com/google/net/stubby/transport/ForwardingBuffer.java b/core/src/main/java/io/grpc/transport/ForwardingBuffer.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/ForwardingBuffer.java
rename to core/src/main/java/io/grpc/transport/ForwardingBuffer.java
index 0296535..133b771 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ForwardingBuffer.java
+++ b/core/src/main/java/io/grpc/transport/ForwardingBuffer.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.Preconditions;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/Http2ClientStream.java b/core/src/main/java/io/grpc/transport/Http2ClientStream.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/Http2ClientStream.java
rename to core/src/main/java/io/grpc/transport/Http2ClientStream.java
index 9c8cdb1..711aa9b 100644
--- a/core/src/main/java/com/google/net/stubby/transport/Http2ClientStream.java
+++ b/core/src/main/java/io/grpc/transport/Http2ClientStream.java
@@ -29,12 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
+
+import io.grpc.Metadata;
+import io.grpc.Status;
 
 import java.nio.charset.Charset;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/HttpUtil.java b/core/src/main/java/io/grpc/transport/HttpUtil.java
similarity index 96%
rename from core/src/main/java/com/google/net/stubby/transport/HttpUtil.java
rename to core/src/main/java/io/grpc/transport/HttpUtil.java
index c60e79f..5c303a1 100644
--- a/core/src/main/java/com/google/net/stubby/transport/HttpUtil.java
+++ b/core/src/main/java/io/grpc/transport/HttpUtil.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
+import io.grpc.Metadata;
+import io.grpc.Status;
 
 import java.net.HttpURLConnection;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/MessageDeframer.java b/core/src/main/java/io/grpc/transport/MessageDeframer.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/MessageDeframer.java
rename to core/src/main/java/io/grpc/transport/MessageDeframer.java
index 42b5865..6a03f8d 100644
--- a/core/src/main/java/com/google/net/stubby/transport/MessageDeframer.java
+++ b/core/src/main/java/io/grpc/transport/MessageDeframer.java
@@ -29,11 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.Preconditions;
 import com.google.common.io.ByteStreams;
-import com.google.net.stubby.Status;
+
+import io.grpc.Status;
 
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
diff --git a/core/src/main/java/com/google/net/stubby/transport/MessageFramer.java b/core/src/main/java/io/grpc/transport/MessageFramer.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/MessageFramer.java
rename to core/src/main/java/io/grpc/transport/MessageFramer.java
index 66647de..6bc6683 100644
--- a/core/src/main/java/com/google/net/stubby/transport/MessageFramer.java
+++ b/core/src/main/java/io/grpc/transport/MessageFramer.java
@@ -29,11 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.base.Preconditions;
 import com.google.common.io.ByteStreams;
-import com.google.net.stubby.DeferredInputStream;
+
+import io.grpc.DeferredInputStream;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/core/src/main/java/com/google/net/stubby/transport/ServerListener.java b/core/src/main/java/io/grpc/transport/ServerListener.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/transport/ServerListener.java
rename to core/src/main/java/io/grpc/transport/ServerListener.java
index 05f02f3..43d793f 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ServerListener.java
+++ b/core/src/main/java/io/grpc/transport/ServerListener.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import com.google.common.util.concurrent.Service;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/ServerStream.java b/core/src/main/java/io/grpc/transport/ServerStream.java
similarity index 91%
rename from core/src/main/java/com/google/net/stubby/transport/ServerStream.java
rename to core/src/main/java/io/grpc/transport/ServerStream.java
index 858dee3..28f4a3e 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ServerStream.java
+++ b/core/src/main/java/io/grpc/transport/ServerStream.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
+import io.grpc.Metadata;
+import io.grpc.Status;
 
 /**
  * Extension of {@link Stream} to support server-side termination semantics.
@@ -50,7 +50,7 @@
 
   /**
    * Closes the stream for both reading and writing. A status code of
-   * {@link com.google.net.stubby.Status.Code#OK} implies normal termination of the
+   * {@link io.grpc.Status.Code#OK} implies normal termination of the
    * stream. Any other value implies abnormal termination.
    *
    * @param status details of the closure
diff --git a/core/src/main/java/com/google/net/stubby/transport/ServerStreamListener.java b/core/src/main/java/io/grpc/transport/ServerStreamListener.java
similarity index 94%
rename from core/src/main/java/com/google/net/stubby/transport/ServerStreamListener.java
rename to core/src/main/java/io/grpc/transport/ServerStreamListener.java
index a524e50..63c69ea 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ServerStreamListener.java
+++ b/core/src/main/java/io/grpc/transport/ServerStreamListener.java
@@ -29,9 +29,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
-import com.google.net.stubby.Status;
+import io.grpc.Status;
 
 /** An observer of server-side stream events. */
 public interface ServerStreamListener extends StreamListener {
@@ -45,7 +45,7 @@
 
   /**
    * Called when the stream is fully closed. A status code of {@link
-   * com.google.net.stubby.Status.Code#OK} implies normal termination of the stream.
+   * io.grpc.Status.Code#OK} implies normal termination of the stream.
    * Any other value implies abnormal termination. Since clients cannot send status, the passed
    * status is always library-generated and only is concerned with transport-level stream shutdown
    * (the call itself may have had a failing status, but if the stream terminated cleanly with the
diff --git a/core/src/main/java/com/google/net/stubby/transport/ServerTransportListener.java b/core/src/main/java/io/grpc/transport/ServerTransportListener.java
similarity index 95%
rename from core/src/main/java/com/google/net/stubby/transport/ServerTransportListener.java
rename to core/src/main/java/io/grpc/transport/ServerTransportListener.java
index 8485fef..9292422 100644
--- a/core/src/main/java/com/google/net/stubby/transport/ServerTransportListener.java
+++ b/core/src/main/java/io/grpc/transport/ServerTransportListener.java
@@ -29,9 +29,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
-import com.google.net.stubby.Metadata;
+import io.grpc.Metadata;
 
 /**
  * A observer of a server-side transport for stream creation events.
diff --git a/core/src/main/java/com/google/net/stubby/transport/Stream.java b/core/src/main/java/io/grpc/transport/Stream.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/Stream.java
rename to core/src/main/java/io/grpc/transport/Stream.java
index 85c32cd..8253721 100644
--- a/core/src/main/java/com/google/net/stubby/transport/Stream.java
+++ b/core/src/main/java/io/grpc/transport/Stream.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import java.io.InputStream;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/StreamListener.java b/core/src/main/java/io/grpc/transport/StreamListener.java
similarity index 97%
rename from core/src/main/java/com/google/net/stubby/transport/StreamListener.java
rename to core/src/main/java/io/grpc/transport/StreamListener.java
index a38b51d..22513a7 100644
--- a/core/src/main/java/com/google/net/stubby/transport/StreamListener.java
+++ b/core/src/main/java/io/grpc/transport/StreamListener.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import java.io.InputStream;
 
diff --git a/core/src/main/java/com/google/net/stubby/transport/TransportFrameUtil.java b/core/src/main/java/io/grpc/transport/TransportFrameUtil.java
similarity index 98%
rename from core/src/main/java/com/google/net/stubby/transport/TransportFrameUtil.java
rename to core/src/main/java/io/grpc/transport/TransportFrameUtil.java
index 0f3d96e..e00fa3b 100644
--- a/core/src/main/java/com/google/net/stubby/transport/TransportFrameUtil.java
+++ b/core/src/main/java/io/grpc/transport/TransportFrameUtil.java
@@ -29,12 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.US_ASCII;
 
 import com.google.common.io.BaseEncoding;
-import com.google.net.stubby.Metadata;
+
+import io.grpc.Metadata;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/core/src/test/java/com/google/net/stubby/ClientInterceptorsTest.java b/core/src/test/java/io/grpc/ClientInterceptorsTest.java
similarity index 96%
rename from core/src/test/java/com/google/net/stubby/ClientInterceptorsTest.java
rename to core/src/test/java/io/grpc/ClientInterceptorsTest.java
index 22ce6d1..1bd2a26 100644
--- a/core/src/test/java/com/google/net/stubby/ClientInterceptorsTest.java
+++ b/core/src/test/java/io/grpc/ClientInterceptorsTest.java
@@ -29,21 +29,20 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
+import static org.mockito.Matchers.same;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.same;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.net.stubby.ClientInterceptors.ForwardingCall;
-import com.google.net.stubby.ClientInterceptors.ForwardingListener;
+import io.grpc.ClientInterceptors.ForwardingCall;
+import io.grpc.ClientInterceptors.ForwardingListener;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/core/src/test/java/com/google/net/stubby/MetadataTest.java b/core/src/test/java/io/grpc/MetadataTest.java
similarity index 99%
rename from core/src/test/java/com/google/net/stubby/MetadataTest.java
rename to core/src/test/java/io/grpc/MetadataTest.java
index 538c797..0febbb3 100644
--- a/core/src/test/java/com/google/net/stubby/MetadataTest.java
+++ b/core/src/test/java/io/grpc/MetadataTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static com.google.common.base.Charsets.US_ASCII;
 import static com.google.common.base.Charsets.UTF_8;
diff --git a/core/src/test/java/com/google/net/stubby/MutableHandlerRegistryImplTest.java b/core/src/test/java/io/grpc/MutableHandlerRegistryImplTest.java
similarity index 96%
rename from core/src/test/java/com/google/net/stubby/MutableHandlerRegistryImplTest.java
rename to core/src/test/java/io/grpc/MutableHandlerRegistryImplTest.java
index 98df01a..1ad9dae 100644
--- a/core/src/test/java/com/google/net/stubby/MutableHandlerRegistryImplTest.java
+++ b/core/src/test/java/io/grpc/MutableHandlerRegistryImplTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -38,10 +38,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
-import com.google.net.stubby.ServerMethodDefinition;
-import com.google.net.stubby.ServerCallHandler;
-import com.google.net.stubby.ServerServiceDefinition;
-import com.google.net.stubby.HandlerRegistry.Method;
+import io.grpc.HandlerRegistry.Method;
 
 import org.junit.After;
 import org.junit.Test;
diff --git a/core/src/test/java/com/google/net/stubby/ServerImplTest.java b/core/src/test/java/io/grpc/ServerImplTest.java
similarity index 97%
rename from core/src/test/java/com/google/net/stubby/ServerImplTest.java
rename to core/src/test/java/io/grpc/ServerImplTest.java
index e99e328..9f2ee53 100644
--- a/core/src/test/java/com/google/net/stubby/ServerImplTest.java
+++ b/core/src/test/java/io/grpc/ServerImplTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static com.google.common.base.Charsets.UTF_8;
 import static org.junit.Assert.assertEquals;
@@ -49,9 +49,10 @@
 import com.google.common.io.ByteStreams;
 import com.google.common.util.concurrent.AbstractService;
 import com.google.common.util.concurrent.Service;
-import com.google.net.stubby.transport.ServerStream;
-import com.google.net.stubby.transport.ServerStreamListener;
-import com.google.net.stubby.transport.ServerTransportListener;
+
+import io.grpc.transport.ServerStream;
+import io.grpc.transport.ServerStreamListener;
+import io.grpc.transport.ServerTransportListener;
 
 import org.junit.After;
 import org.junit.Before;
@@ -60,7 +61,6 @@
 import org.junit.runners.JUnit4;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 
 import java.io.ByteArrayInputStream;
diff --git a/core/src/test/java/com/google/net/stubby/ServerInterceptorsTest.java b/core/src/test/java/io/grpc/ServerInterceptorsTest.java
similarity index 98%
rename from core/src/test/java/com/google/net/stubby/ServerInterceptorsTest.java
rename to core/src/test/java/io/grpc/ServerInterceptorsTest.java
index 3248973..f3d7ba0 100644
--- a/core/src/test/java/com/google/net/stubby/ServerInterceptorsTest.java
+++ b/core/src/test/java/io/grpc/ServerInterceptorsTest.java
@@ -29,18 +29,18 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
+import static org.mockito.Matchers.same;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.same;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.verifyZeroInteractions;
 
-import com.google.net.stubby.Metadata.Headers;
+import io.grpc.Metadata.Headers;
 
 import org.junit.After;
 import org.junit.Before;
@@ -51,8 +51,8 @@
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
 
-import java.util.Arrays;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /** Unit tests for {@link ServerInterceptors}. */
diff --git a/core/src/test/java/com/google/net/stubby/SharedResourceHolderTest.java b/core/src/test/java/io/grpc/SharedResourceHolderTest.java
similarity index 97%
rename from core/src/test/java/com/google/net/stubby/SharedResourceHolderTest.java
rename to core/src/test/java/io/grpc/SharedResourceHolderTest.java
index 4edf84f..0cb5873 100644
--- a/core/src/test/java/com/google/net/stubby/SharedResourceHolderTest.java
+++ b/core/src/test/java/io/grpc/SharedResourceHolderTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby;
+package io.grpc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -38,13 +38,12 @@
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.anyLong;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyLong;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.when;
 
-import com.google.net.stubby.SharedResourceHolder.Resource;
+import io.grpc.SharedResourceHolder.Resource;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/core/src/test/java/com/google/net/stubby/transport/AbstractBufferTest.java b/core/src/test/java/io/grpc/transport/AbstractBufferTest.java
similarity index 98%
rename from core/src/test/java/com/google/net/stubby/transport/AbstractBufferTest.java
rename to core/src/test/java/io/grpc/transport/AbstractBufferTest.java
index 9912bbf..c3c74a2 100644
--- a/core/src/test/java/com/google/net/stubby/transport/AbstractBufferTest.java
+++ b/core/src/test/java/io/grpc/transport/AbstractBufferTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
diff --git a/core/src/test/java/com/google/net/stubby/transport/BufferTestBase.java b/core/src/test/java/io/grpc/transport/BufferTestBase.java
similarity index 98%
rename from core/src/test/java/com/google/net/stubby/transport/BufferTestBase.java
rename to core/src/test/java/io/grpc/transport/BufferTestBase.java
index 30db10c..2695839 100644
--- a/core/src/test/java/com/google/net/stubby/transport/BufferTestBase.java
+++ b/core/src/test/java/io/grpc/transport/BufferTestBase.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.UTF_8;
 import static org.junit.Assert.assertEquals;
diff --git a/core/src/test/java/com/google/net/stubby/transport/BuffersArrayTest.java b/core/src/test/java/io/grpc/transport/BuffersArrayTest.java
similarity index 95%
rename from core/src/test/java/com/google/net/stubby/transport/BuffersArrayTest.java
rename to core/src/test/java/io/grpc/transport/BuffersArrayTest.java
index 17ba156..12fd859 100644
--- a/core/src/test/java/com/google/net/stubby/transport/BuffersArrayTest.java
+++ b/core/src/test/java/io/grpc/transport/BuffersArrayTest.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.UTF_8;
-import static com.google.net.stubby.transport.Buffers.wrap;
+import static io.grpc.transport.Buffers.wrap;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
diff --git a/core/src/test/java/com/google/net/stubby/transport/BuffersByteBufferTest.java b/core/src/test/java/io/grpc/transport/BuffersByteBufferTest.java
similarity index 97%
rename from core/src/test/java/com/google/net/stubby/transport/BuffersByteBufferTest.java
rename to core/src/test/java/io/grpc/transport/BuffersByteBufferTest.java
index 4126b9c..9486c0f 100644
--- a/core/src/test/java/com/google/net/stubby/transport/BuffersByteBufferTest.java
+++ b/core/src/test/java/io/grpc/transport/BuffersByteBufferTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.UTF_8;
 
diff --git a/core/src/test/java/com/google/net/stubby/transport/CompositeBufferTest.java b/core/src/test/java/io/grpc/transport/CompositeBufferTest.java
similarity index 98%
rename from core/src/test/java/com/google/net/stubby/transport/CompositeBufferTest.java
rename to core/src/test/java/io/grpc/transport/CompositeBufferTest.java
index b63f00f..ba5d185 100644
--- a/core/src/test/java/com/google/net/stubby/transport/CompositeBufferTest.java
+++ b/core/src/test/java/io/grpc/transport/CompositeBufferTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.UTF_8;
 import static org.junit.Assert.assertEquals;
diff --git a/core/src/test/java/com/google/net/stubby/transport/MessageDeframerTest.java b/core/src/test/java/io/grpc/transport/MessageDeframerTest.java
similarity index 98%
rename from core/src/test/java/com/google/net/stubby/transport/MessageDeframerTest.java
rename to core/src/test/java/io/grpc/transport/MessageDeframerTest.java
index bab8f59..5baeef9 100644
--- a/core/src/test/java/com/google/net/stubby/transport/MessageDeframerTest.java
+++ b/core/src/test/java/io/grpc/transport/MessageDeframerTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -42,7 +42,8 @@
 
 import com.google.common.io.ByteStreams;
 import com.google.common.primitives.Bytes;
-import com.google.net.stubby.transport.MessageDeframer.Listener;
+
+import io.grpc.transport.MessageDeframer.Listener;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/core/src/test/java/com/google/net/stubby/transport/MessageFramerTest.java b/core/src/test/java/io/grpc/transport/MessageFramerTest.java
similarity index 99%
rename from core/src/test/java/com/google/net/stubby/transport/MessageFramerTest.java
rename to core/src/test/java/io/grpc/transport/MessageFramerTest.java
index a3812c5..801165e 100644
--- a/core/src/test/java/com/google/net/stubby/transport/MessageFramerTest.java
+++ b/core/src/test/java/io/grpc/transport/MessageFramerTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/core/src/test/java/com/google/net/stubby/transport/TransportFrameUtilTest.java b/core/src/test/java/io/grpc/transport/TransportFrameUtilTest.java
similarity index 95%
rename from core/src/test/java/com/google/net/stubby/transport/TransportFrameUtilTest.java
rename to core/src/test/java/io/grpc/transport/TransportFrameUtilTest.java
index dced747..0a9162d 100644
--- a/core/src/test/java/com/google/net/stubby/transport/TransportFrameUtilTest.java
+++ b/core/src/test/java/io/grpc/transport/TransportFrameUtilTest.java
@@ -29,20 +29,21 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport;
+package io.grpc.transport;
 
 import static com.google.common.base.Charsets.US_ASCII;
 import static com.google.common.base.Charsets.UTF_8;
-import static com.google.net.stubby.Metadata.ASCII_STRING_MARSHALLER;
+import static io.grpc.Metadata.ASCII_STRING_MARSHALLER;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
 import com.google.common.io.BaseEncoding;
-import com.google.net.stubby.Metadata.BinaryMarshaller;
-import com.google.net.stubby.Metadata.Headers;
-import com.google.net.stubby.Metadata.Key;
+
+import io.grpc.Metadata.BinaryMarshaller;
+import io.grpc.Metadata.Headers;
+import io.grpc.Metadata.Key;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/examples/src/main/java/com/google/net/stubby/examples/MathClient.java b/examples/src/main/java/io/grpc/examples/MathClient.java
similarity index 96%
rename from examples/src/main/java/com/google/net/stubby/examples/MathClient.java
rename to examples/src/main/java/io/grpc/examples/MathClient.java
index aa4c7d8..a67469d 100644
--- a/examples/src/main/java/com/google/net/stubby/examples/MathClient.java
+++ b/examples/src/main/java/io/grpc/examples/MathClient.java
@@ -29,13 +29,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.examples;
+package io.grpc.examples;
 
 import com.google.common.util.concurrent.SettableFuture;
-import com.google.net.stubby.ChannelImpl;
-import com.google.net.stubby.stub.StreamObserver;
-import com.google.net.stubby.transport.netty.NegotiationType;
-import com.google.net.stubby.transport.netty.NettyChannelBuilder;
 import com.google.protos.net.stubby.examples.CalcGrpc;
 import com.google.protos.net.stubby.examples.CalcGrpc.CalcBlockingStub;
 import com.google.protos.net.stubby.examples.CalcGrpc.CalcStub;
@@ -44,6 +40,11 @@
 import com.google.protos.net.stubby.examples.Math.FibArgs;
 import com.google.protos.net.stubby.examples.Math.Num;
 
+import io.grpc.ChannelImpl;
+import io.grpc.stub.StreamObserver;
+import io.grpc.transport.netty.NegotiationType;
+import io.grpc.transport.netty.NettyChannelBuilder;
+
 import java.util.Iterator;
 import java.util.Random;
 import java.util.concurrent.CountDownLatch;
diff --git a/examples/src/main/java/com/google/net/stubby/examples/MathServer.java b/examples/src/main/java/io/grpc/examples/MathServer.java
similarity index 96%
rename from examples/src/main/java/com/google/net/stubby/examples/MathServer.java
rename to examples/src/main/java/io/grpc/examples/MathServer.java
index 8d71d35..49e1191 100644
--- a/examples/src/main/java/com/google/net/stubby/examples/MathServer.java
+++ b/examples/src/main/java/io/grpc/examples/MathServer.java
@@ -29,17 +29,18 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.examples;
+package io.grpc.examples;
 
-import com.google.net.stubby.ServerImpl;
-import com.google.net.stubby.stub.StreamObserver;
-import com.google.net.stubby.transport.netty.NettyServerBuilder;
 import com.google.protos.net.stubby.examples.CalcGrpc;
 import com.google.protos.net.stubby.examples.Math.DivArgs;
 import com.google.protos.net.stubby.examples.Math.DivReply;
 import com.google.protos.net.stubby.examples.Math.FibArgs;
 import com.google.protos.net.stubby.examples.Math.Num;
 
+import io.grpc.ServerImpl;
+import io.grpc.stub.StreamObserver;
+import io.grpc.transport.netty.NettyServerBuilder;
+
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
diff --git a/examples/src/main/java/com/google/net/stubby/examples/StockClient.java b/examples/src/main/java/io/grpc/examples/StockClient.java
similarity index 96%
rename from examples/src/main/java/com/google/net/stubby/examples/StockClient.java
rename to examples/src/main/java/io/grpc/examples/StockClient.java
index e984d12..e63c81a 100644
--- a/examples/src/main/java/com/google/net/stubby/examples/StockClient.java
+++ b/examples/src/main/java/io/grpc/examples/StockClient.java
@@ -29,18 +29,19 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.examples;
+package io.grpc.examples;
 
-import com.google.net.stubby.ChannelImpl;
-import com.google.net.stubby.stub.StreamObserver;
-import com.google.net.stubby.transport.netty.NegotiationType;
-import com.google.net.stubby.transport.netty.NettyChannelBuilder;
 import com.google.protos.net.stubby.examples.StockGrpc;
 import com.google.protos.net.stubby.examples.StockGrpc.StockBlockingStub;
 import com.google.protos.net.stubby.examples.StockGrpc.StockStub;
 import com.google.protos.net.stubby.examples.StockOuterClass.StockReply;
 import com.google.protos.net.stubby.examples.StockOuterClass.StockRequest;
 
+import io.grpc.ChannelImpl;
+import io.grpc.stub.StreamObserver;
+import io.grpc.transport.netty.NegotiationType;
+import io.grpc.transport.netty.NettyChannelBuilder;
+
 import java.util.Iterator;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
diff --git a/examples/src/main/java/com/google/net/stubby/examples/StockServer.java b/examples/src/main/java/io/grpc/examples/StockServer.java
similarity index 95%
rename from examples/src/main/java/com/google/net/stubby/examples/StockServer.java
rename to examples/src/main/java/io/grpc/examples/StockServer.java
index 445d0dd..4844f68 100644
--- a/examples/src/main/java/com/google/net/stubby/examples/StockServer.java
+++ b/examples/src/main/java/io/grpc/examples/StockServer.java
@@ -29,15 +29,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.examples;
+package io.grpc.examples;
 
-import com.google.net.stubby.ServerImpl;
-import com.google.net.stubby.stub.StreamObserver;
-import com.google.net.stubby.transport.netty.NettyServerBuilder;
 import com.google.protos.net.stubby.examples.StockGrpc;
 import com.google.protos.net.stubby.examples.StockOuterClass.StockReply;
 import com.google.protos.net.stubby.examples.StockOuterClass.StockRequest;
 
+import io.grpc.ServerImpl;
+import io.grpc.stub.StreamObserver;
+import io.grpc.transport.netty.NettyServerBuilder;
+
 import java.util.Random;
 
 /**
diff --git a/examples/src/main/proto/math.proto b/examples/src/main/proto/math.proto
index 6f821e0..264e312 100644
--- a/examples/src/main/proto/math.proto
+++ b/examples/src/main/proto/math.proto
@@ -1,6 +1,6 @@
 syntax = "proto2";
 
-package net.stubby.examples;
+package io.grpc.examples;
 option java_outer_classname = "Math";
 
 message DivArgs {
diff --git a/examples/src/main/proto/stock.proto b/examples/src/main/proto/stock.proto
index 4adafef..3b8d336 100644
--- a/examples/src/main/proto/stock.proto
+++ b/examples/src/main/proto/stock.proto
@@ -1,6 +1,6 @@
 syntax = "proto2";
 
-package net.stubby.examples;
+package io.grpc.examples;
 
 // Protocol type definitions
 message StockRequest {
diff --git a/integration-testing/build.gradle b/integration-testing/build.gradle
index 51d916a..9d8d00c 100644
--- a/integration-testing/build.gradle
+++ b/integration-testing/build.gradle
@@ -1,7 +1,7 @@
 apply plugin: 'protobuf'
 apply plugin:'application'
 
-description = "Stubby: Integration Testing"
+description = "gRPC: Integration Testing"
 
 // Add dependency on the protobuf plugin
 buildscript {
@@ -18,11 +18,11 @@
 }
 
 dependencies {
-    compile project(':stubby-core'),
-            project(':stubby-netty'),
-            project(':stubby-okhttp'),
-            project(':stubby-stub'),
-            project(':stubby-testing'),
+    compile project(':grpc-core'),
+            project(':grpc-netty'),
+            project(':grpc-okhttp'),
+            project(':grpc-stub'),
+            project(':grpc-testing'),
             libraries.junit,
             libraries.mockito
 
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceGrpc.java b/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceGrpc.java
deleted file mode 100644
index c60cce2..0000000
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceGrpc.java
+++ /dev/null
@@ -1,382 +0,0 @@
-package com.google.net.stubby.testing.integration;
-
-import static com.google.net.stubby.stub.Calls.createMethodDescriptor;
-import static com.google.net.stubby.stub.Calls.asyncUnaryCall;
-import static com.google.net.stubby.stub.Calls.asyncServerStreamingCall;
-import static com.google.net.stubby.stub.Calls.asyncClientStreamingCall;
-import static com.google.net.stubby.stub.Calls.duplexStreamingCall;
-import static com.google.net.stubby.stub.Calls.blockingUnaryCall;
-import static com.google.net.stubby.stub.Calls.blockingServerStreamingCall;
-import static com.google.net.stubby.stub.Calls.unaryFutureCall;
-import static com.google.net.stubby.stub.ServerCalls.createMethodDefinition;
-import static com.google.net.stubby.stub.ServerCalls.asyncUnaryRequestCall;
-import static com.google.net.stubby.stub.ServerCalls.asyncStreamingRequestCall;
-
-@javax.annotation.Generated("by gRPC proto compiler")
-public class TestServiceGrpc {
-
-  private static final com.google.net.stubby.stub.Method<com.google.protobuf.EmptyProtos.Empty,
-      com.google.protobuf.EmptyProtos.Empty> METHOD_EMPTY_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.UNARY, "EmptyCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.protobuf.EmptyProtos.Empty.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.protobuf.EmptyProtos.Empty.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Messages.SimpleRequest,
-      com.google.net.stubby.testing.integration.Messages.SimpleResponse> METHOD_UNARY_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.UNARY, "UnaryCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.SimpleRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.SimpleResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-      com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> METHOD_STREAMING_OUTPUT_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.SERVER_STREAMING, "StreamingOutputCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest,
-      com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse> METHOD_STREAMING_INPUT_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.CLIENT_STREAMING, "StreamingInputCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-      com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> METHOD_FULL_DUPLEX_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.DUPLEX_STREAMING, "FullDuplexCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse.PARSER));
-  private static final com.google.net.stubby.stub.Method<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-      com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> METHOD_HALF_DUPLEX_CALL =
-      com.google.net.stubby.stub.Method.create(
-          com.google.net.stubby.MethodType.DUPLEX_STREAMING, "HalfDuplexCall",
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest.PARSER),
-          com.google.net.stubby.proto.ProtoUtils.marshaller(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse.PARSER));
-
-  public static TestServiceStub newStub(com.google.net.stubby.Channel channel) {
-    return new TestServiceStub(channel, CONFIG);
-  }
-
-  public static TestServiceBlockingStub newBlockingStub(
-      com.google.net.stubby.Channel channel) {
-    return new TestServiceBlockingStub(channel, CONFIG);
-  }
-
-  public static TestServiceFutureStub newFutureStub(
-      com.google.net.stubby.Channel channel) {
-    return new TestServiceFutureStub(channel, CONFIG);
-  }
-
-  public static final TestServiceServiceDescriptor CONFIG =
-      new TestServiceServiceDescriptor();
-
-  @javax.annotation.concurrent.Immutable
-  public static class TestServiceServiceDescriptor extends
-      com.google.net.stubby.stub.AbstractServiceDescriptor<TestServiceServiceDescriptor> {
-    public final com.google.net.stubby.MethodDescriptor<com.google.protobuf.EmptyProtos.Empty,
-        com.google.protobuf.EmptyProtos.Empty> emptyCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.SimpleRequest,
-        com.google.net.stubby.testing.integration.Messages.SimpleResponse> unaryCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-        com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> streamingOutputCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest,
-        com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse> streamingInputCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-        com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> fullDuplexCall;
-    public final com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-        com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> halfDuplexCall;
-
-    private TestServiceServiceDescriptor() {
-      emptyCall = createMethodDescriptor(
-          "grpc.testing.TestService", METHOD_EMPTY_CALL);
-      unaryCall = createMethodDescriptor(
-          "grpc.testing.TestService", METHOD_UNARY_CALL);
-      streamingOutputCall = createMethodDescriptor(
-          "grpc.testing.TestService", METHOD_STREAMING_OUTPUT_CALL);
-      streamingInputCall = createMethodDescriptor(
-          "grpc.testing.TestService", METHOD_STREAMING_INPUT_CALL);
-      fullDuplexCall = createMethodDescriptor(
-          "grpc.testing.TestService", METHOD_FULL_DUPLEX_CALL);
-      halfDuplexCall = createMethodDescriptor(
-          "grpc.testing.TestService", METHOD_HALF_DUPLEX_CALL);
-    }
-
-    private TestServiceServiceDescriptor(
-        java.util.Map<java.lang.String, com.google.net.stubby.MethodDescriptor<?, ?>> methodMap) {
-      emptyCall = (com.google.net.stubby.MethodDescriptor<com.google.protobuf.EmptyProtos.Empty,
-          com.google.protobuf.EmptyProtos.Empty>) methodMap.get(
-          CONFIG.emptyCall.getName());
-      unaryCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.SimpleRequest,
-          com.google.net.stubby.testing.integration.Messages.SimpleResponse>) methodMap.get(
-          CONFIG.unaryCall.getName());
-      streamingOutputCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-          com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse>) methodMap.get(
-          CONFIG.streamingOutputCall.getName());
-      streamingInputCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest,
-          com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse>) methodMap.get(
-          CONFIG.streamingInputCall.getName());
-      fullDuplexCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-          com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse>) methodMap.get(
-          CONFIG.fullDuplexCall.getName());
-      halfDuplexCall = (com.google.net.stubby.MethodDescriptor<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-          com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse>) methodMap.get(
-          CONFIG.halfDuplexCall.getName());
-    }
-
-    @java.lang.Override
-    protected TestServiceServiceDescriptor build(
-        java.util.Map<java.lang.String, com.google.net.stubby.MethodDescriptor<?, ?>> methodMap) {
-      return new TestServiceServiceDescriptor(methodMap);
-    }
-
-    @java.lang.Override
-    public com.google.common.collect.ImmutableList<com.google.net.stubby.MethodDescriptor<?, ?>> methods() {
-      return com.google.common.collect.ImmutableList.<com.google.net.stubby.MethodDescriptor<?, ?>>of(
-          emptyCall,
-          unaryCall,
-          streamingOutputCall,
-          streamingInputCall,
-          fullDuplexCall,
-          halfDuplexCall);
-    }
-  }
-
-  public static interface TestService {
-
-    public void emptyCall(com.google.protobuf.EmptyProtos.Empty request,
-        com.google.net.stubby.stub.StreamObserver<com.google.protobuf.EmptyProtos.Empty> responseObserver);
-
-    public void unaryCall(com.google.net.stubby.testing.integration.Messages.SimpleRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.SimpleResponse> responseObserver);
-
-    public void streamingOutputCall(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver);
-
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest> streamingInputCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse> responseObserver);
-
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest> fullDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver);
-
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest> halfDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver);
-  }
-
-  public static interface TestServiceBlockingClient {
-
-    public com.google.protobuf.EmptyProtos.Empty emptyCall(com.google.protobuf.EmptyProtos.Empty request);
-
-    public com.google.net.stubby.testing.integration.Messages.SimpleResponse unaryCall(com.google.net.stubby.testing.integration.Messages.SimpleRequest request);
-
-    public java.util.Iterator<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> streamingOutputCall(
-        com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest request);
-  }
-
-  public static interface TestServiceFutureClient {
-
-    public com.google.common.util.concurrent.ListenableFuture<com.google.protobuf.EmptyProtos.Empty> emptyCall(
-        com.google.protobuf.EmptyProtos.Empty request);
-
-    public com.google.common.util.concurrent.ListenableFuture<com.google.net.stubby.testing.integration.Messages.SimpleResponse> unaryCall(
-        com.google.net.stubby.testing.integration.Messages.SimpleRequest request);
-  }
-
-  public static class TestServiceStub extends
-      com.google.net.stubby.stub.AbstractStub<TestServiceStub, TestServiceServiceDescriptor>
-      implements TestService {
-    private TestServiceStub(com.google.net.stubby.Channel channel,
-        TestServiceServiceDescriptor config) {
-      super(channel, config);
-    }
-
-    @java.lang.Override
-    protected TestServiceStub build(com.google.net.stubby.Channel channel,
-        TestServiceServiceDescriptor config) {
-      return new TestServiceStub(channel, config);
-    }
-
-    @java.lang.Override
-    public void emptyCall(com.google.protobuf.EmptyProtos.Empty request,
-        com.google.net.stubby.stub.StreamObserver<com.google.protobuf.EmptyProtos.Empty> responseObserver) {
-      asyncUnaryCall(
-          channel.newCall(config.emptyCall), request, responseObserver);
-    }
-
-    @java.lang.Override
-    public void unaryCall(com.google.net.stubby.testing.integration.Messages.SimpleRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.SimpleResponse> responseObserver) {
-      asyncUnaryCall(
-          channel.newCall(config.unaryCall), request, responseObserver);
-    }
-
-    @java.lang.Override
-    public void streamingOutputCall(com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest request,
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
-      asyncServerStreamingCall(
-          channel.newCall(config.streamingOutputCall), request, responseObserver);
-    }
-
-    @java.lang.Override
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest> streamingInputCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse> responseObserver) {
-      return asyncClientStreamingCall(
-          channel.newCall(config.streamingInputCall), responseObserver);
-    }
-
-    @java.lang.Override
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest> fullDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
-      return duplexStreamingCall(
-          channel.newCall(config.fullDuplexCall), responseObserver);
-    }
-
-    @java.lang.Override
-    public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest> halfDuplexCall(
-        com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
-      return duplexStreamingCall(
-          channel.newCall(config.halfDuplexCall), responseObserver);
-    }
-  }
-
-  public static class TestServiceBlockingStub extends
-      com.google.net.stubby.stub.AbstractStub<TestServiceBlockingStub, TestServiceServiceDescriptor>
-      implements TestServiceBlockingClient {
-    private TestServiceBlockingStub(com.google.net.stubby.Channel channel,
-        TestServiceServiceDescriptor config) {
-      super(channel, config);
-    }
-
-    @java.lang.Override
-    protected TestServiceBlockingStub build(com.google.net.stubby.Channel channel,
-        TestServiceServiceDescriptor config) {
-      return new TestServiceBlockingStub(channel, config);
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.EmptyProtos.Empty emptyCall(com.google.protobuf.EmptyProtos.Empty request) {
-      return blockingUnaryCall(
-          channel.newCall(config.emptyCall), request);
-    }
-
-    @java.lang.Override
-    public com.google.net.stubby.testing.integration.Messages.SimpleResponse unaryCall(com.google.net.stubby.testing.integration.Messages.SimpleRequest request) {
-      return blockingUnaryCall(
-          channel.newCall(config.unaryCall), request);
-    }
-
-    @java.lang.Override
-    public java.util.Iterator<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> streamingOutputCall(
-        com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest request) {
-      return blockingServerStreamingCall(
-          channel.newCall(config.streamingOutputCall), request);
-    }
-  }
-
-  public static class TestServiceFutureStub extends
-      com.google.net.stubby.stub.AbstractStub<TestServiceFutureStub, TestServiceServiceDescriptor>
-      implements TestServiceFutureClient {
-    private TestServiceFutureStub(com.google.net.stubby.Channel channel,
-        TestServiceServiceDescriptor config) {
-      super(channel, config);
-    }
-
-    @java.lang.Override
-    protected TestServiceFutureStub build(com.google.net.stubby.Channel channel,
-        TestServiceServiceDescriptor config) {
-      return new TestServiceFutureStub(channel, config);
-    }
-
-    @java.lang.Override
-    public com.google.common.util.concurrent.ListenableFuture<com.google.protobuf.EmptyProtos.Empty> emptyCall(
-        com.google.protobuf.EmptyProtos.Empty request) {
-      return unaryFutureCall(
-          channel.newCall(config.emptyCall), request);
-    }
-
-    @java.lang.Override
-    public com.google.common.util.concurrent.ListenableFuture<com.google.net.stubby.testing.integration.Messages.SimpleResponse> unaryCall(
-        com.google.net.stubby.testing.integration.Messages.SimpleRequest request) {
-      return unaryFutureCall(
-          channel.newCall(config.unaryCall), request);
-    }
-  }
-
-  public static com.google.net.stubby.ServerServiceDefinition bindService(
-      final TestService serviceImpl) {
-    return com.google.net.stubby.ServerServiceDefinition.builder("grpc.testing.TestService")
-      .addMethod(createMethodDefinition(
-          METHOD_EMPTY_CALL,
-          asyncUnaryRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.UnaryRequestMethod<
-                com.google.protobuf.EmptyProtos.Empty,
-                com.google.protobuf.EmptyProtos.Empty>() {
-              @java.lang.Override
-              public void invoke(
-                  com.google.protobuf.EmptyProtos.Empty request,
-                  com.google.net.stubby.stub.StreamObserver<com.google.protobuf.EmptyProtos.Empty> responseObserver) {
-                serviceImpl.emptyCall(request, responseObserver);
-              }
-            })))
-      .addMethod(createMethodDefinition(
-          METHOD_UNARY_CALL,
-          asyncUnaryRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.UnaryRequestMethod<
-                com.google.net.stubby.testing.integration.Messages.SimpleRequest,
-                com.google.net.stubby.testing.integration.Messages.SimpleResponse>() {
-              @java.lang.Override
-              public void invoke(
-                  com.google.net.stubby.testing.integration.Messages.SimpleRequest request,
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.SimpleResponse> responseObserver) {
-                serviceImpl.unaryCall(request, responseObserver);
-              }
-            })))
-      .addMethod(createMethodDefinition(
-          METHOD_STREAMING_OUTPUT_CALL,
-          asyncUnaryRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.UnaryRequestMethod<
-                com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-                com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse>() {
-              @java.lang.Override
-              public void invoke(
-                  com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest request,
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
-                serviceImpl.streamingOutputCall(request, responseObserver);
-              }
-            })))
-      .addMethod(createMethodDefinition(
-          METHOD_STREAMING_INPUT_CALL,
-          asyncStreamingRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod<
-                com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest,
-                com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse>() {
-              @java.lang.Override
-              public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest> invoke(
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse> responseObserver) {
-                return serviceImpl.streamingInputCall(responseObserver);
-              }
-            })))
-      .addMethod(createMethodDefinition(
-          METHOD_FULL_DUPLEX_CALL,
-          asyncStreamingRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod<
-                com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-                com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse>() {
-              @java.lang.Override
-              public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest> invoke(
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
-                return serviceImpl.fullDuplexCall(responseObserver);
-              }
-            })))
-      .addMethod(createMethodDefinition(
-          METHOD_HALF_DUPLEX_CALL,
-          asyncStreamingRequestCall(
-            new com.google.net.stubby.stub.ServerCalls.StreamingRequestMethod<
-                com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest,
-                com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse>() {
-              @java.lang.Override
-              public com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest> invoke(
-                  com.google.net.stubby.stub.StreamObserver<com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
-                return serviceImpl.halfDuplexCall(responseObserver);
-              }
-            }))).build();
-  }
-}
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java b/integration-testing/src/main/java/io/grpc/testing/integration/AbstractTransportTest.java
similarity index 93%
rename from integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java
rename to integration-testing/src/main/java/io/grpc/testing/integration/AbstractTransportTest.java
index 0b4d983..6559fdc 100644
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java
+++ b/integration-testing/src/main/java/io/grpc/testing/integration/AbstractTransportTest.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
-import static com.google.net.stubby.testing.integration.Messages.PayloadType.COMPRESSABLE;
-import static com.google.net.stubby.testing.integration.Util.assertEquals;
+import static io.grpc.testing.integration.Messages.PayloadType.COMPRESSABLE;
+import static io.grpc.testing.integration.Util.assertEquals;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.timeout;
@@ -41,30 +41,31 @@
 
 import com.google.common.util.concurrent.SettableFuture;
 import com.google.common.util.concurrent.Uninterruptibles;
-import com.google.net.stubby.AbstractServerBuilder;
-import com.google.net.stubby.Call;
-import com.google.net.stubby.ChannelImpl;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.ServerImpl;
-import com.google.net.stubby.ServerInterceptors;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.proto.ProtoUtils;
-import com.google.net.stubby.stub.MetadataUtils;
-import com.google.net.stubby.stub.StreamObserver;
-import com.google.net.stubby.stub.StreamRecorder;
-import com.google.net.stubby.testing.TestUtils;
-import com.google.net.stubby.testing.integration.Messages.Payload;
-import com.google.net.stubby.testing.integration.Messages.PayloadType;
-import com.google.net.stubby.testing.integration.Messages.ResponseParameters;
-import com.google.net.stubby.testing.integration.Messages.SimpleRequest;
-import com.google.net.stubby.testing.integration.Messages.SimpleResponse;
-import com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest;
-import com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse;
-import com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest;
-import com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse;
 import com.google.protobuf.ByteString;
 import com.google.protobuf.EmptyProtos.Empty;
 
+import io.grpc.AbstractServerBuilder;
+import io.grpc.Call;
+import io.grpc.ChannelImpl;
+import io.grpc.Metadata;
+import io.grpc.ServerImpl;
+import io.grpc.ServerInterceptors;
+import io.grpc.Status;
+import io.grpc.proto.ProtoUtils;
+import io.grpc.stub.MetadataUtils;
+import io.grpc.stub.StreamObserver;
+import io.grpc.stub.StreamRecorder;
+import io.grpc.testing.TestUtils;
+import io.grpc.testing.integration.Messages.Payload;
+import io.grpc.testing.integration.Messages.PayloadType;
+import io.grpc.testing.integration.Messages.ResponseParameters;
+import io.grpc.testing.integration.Messages.SimpleRequest;
+import io.grpc.testing.integration.Messages.SimpleResponse;
+import io.grpc.testing.integration.Messages.StreamingInputCallRequest;
+import io.grpc.testing.integration.Messages.StreamingInputCallResponse;
+import io.grpc.testing.integration.Messages.StreamingOutputCallRequest;
+import io.grpc.testing.integration.Messages.StreamingOutputCallResponse;
+
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceClient.java b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java
similarity index 96%
rename from integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceClient.java
rename to integration-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java
index bbfc298..02601f1 100644
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceClient.java
+++ b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceClient.java
@@ -29,13 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
-import com.google.net.stubby.ChannelImpl;
-import com.google.net.stubby.transport.netty.NegotiationType;
-import com.google.net.stubby.transport.netty.NettyChannelBuilder;
-import com.google.net.stubby.transport.okhttp.OkHttpChannelBuilder;
-
+import io.grpc.ChannelImpl;
+import io.grpc.transport.netty.NegotiationType;
+import io.grpc.transport.netty.NettyChannelBuilder;
+import io.grpc.transport.okhttp.OkHttpChannelBuilder;
 import io.netty.handler.ssl.SslContext;
 
 import java.io.File;
diff --git a/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceGrpc.java b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceGrpc.java
new file mode 100644
index 0000000..d016f7d
--- /dev/null
+++ b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceGrpc.java
@@ -0,0 +1,382 @@
+package io.grpc.testing.integration;
+
+import static io.grpc.stub.Calls.asyncClientStreamingCall;
+import static io.grpc.stub.Calls.asyncServerStreamingCall;
+import static io.grpc.stub.Calls.asyncUnaryCall;
+import static io.grpc.stub.Calls.blockingServerStreamingCall;
+import static io.grpc.stub.Calls.blockingUnaryCall;
+import static io.grpc.stub.Calls.createMethodDescriptor;
+import static io.grpc.stub.Calls.duplexStreamingCall;
+import static io.grpc.stub.Calls.unaryFutureCall;
+import static io.grpc.stub.ServerCalls.asyncStreamingRequestCall;
+import static io.grpc.stub.ServerCalls.asyncUnaryRequestCall;
+import static io.grpc.stub.ServerCalls.createMethodDefinition;
+
+@javax.annotation.Generated("by gRPC proto compiler")
+public class TestServiceGrpc {
+
+  private static final io.grpc.stub.Method<com.google.protobuf.EmptyProtos.Empty,
+      com.google.protobuf.EmptyProtos.Empty> METHOD_EMPTY_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.UNARY, "EmptyCall",
+          io.grpc.proto.ProtoUtils.marshaller(com.google.protobuf.EmptyProtos.Empty.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(com.google.protobuf.EmptyProtos.Empty.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Messages.SimpleRequest,
+      io.grpc.testing.integration.Messages.SimpleResponse> METHOD_UNARY_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.UNARY, "UnaryCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.SimpleRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.SimpleResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+      io.grpc.testing.integration.Messages.StreamingOutputCallResponse> METHOD_STREAMING_OUTPUT_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.SERVER_STREAMING, "StreamingOutputCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingOutputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingOutputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Messages.StreamingInputCallRequest,
+      io.grpc.testing.integration.Messages.StreamingInputCallResponse> METHOD_STREAMING_INPUT_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.CLIENT_STREAMING, "StreamingInputCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingInputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingInputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+      io.grpc.testing.integration.Messages.StreamingOutputCallResponse> METHOD_FULL_DUPLEX_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.DUPLEX_STREAMING, "FullDuplexCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingOutputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingOutputCallResponse.PARSER));
+  private static final io.grpc.stub.Method<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+      io.grpc.testing.integration.Messages.StreamingOutputCallResponse> METHOD_HALF_DUPLEX_CALL =
+      io.grpc.stub.Method.create(
+          io.grpc.MethodType.DUPLEX_STREAMING, "HalfDuplexCall",
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingOutputCallRequest.PARSER),
+          io.grpc.proto.ProtoUtils.marshaller(io.grpc.testing.integration.Messages.StreamingOutputCallResponse.PARSER));
+
+  public static TestServiceStub newStub(io.grpc.Channel channel) {
+    return new TestServiceStub(channel, CONFIG);
+  }
+
+  public static TestServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    return new TestServiceBlockingStub(channel, CONFIG);
+  }
+
+  public static TestServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    return new TestServiceFutureStub(channel, CONFIG);
+  }
+
+  public static final TestServiceServiceDescriptor CONFIG =
+      new TestServiceServiceDescriptor();
+
+  @javax.annotation.concurrent.Immutable
+  public static class TestServiceServiceDescriptor extends
+      io.grpc.stub.AbstractServiceDescriptor<TestServiceServiceDescriptor> {
+    public final io.grpc.MethodDescriptor<com.google.protobuf.EmptyProtos.Empty,
+        com.google.protobuf.EmptyProtos.Empty> emptyCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.SimpleRequest,
+        io.grpc.testing.integration.Messages.SimpleResponse> unaryCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+        io.grpc.testing.integration.Messages.StreamingOutputCallResponse> streamingOutputCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingInputCallRequest,
+        io.grpc.testing.integration.Messages.StreamingInputCallResponse> streamingInputCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+        io.grpc.testing.integration.Messages.StreamingOutputCallResponse> fullDuplexCall;
+    public final io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+        io.grpc.testing.integration.Messages.StreamingOutputCallResponse> halfDuplexCall;
+
+    private TestServiceServiceDescriptor() {
+      emptyCall = createMethodDescriptor(
+          "grpc.testing.TestService", METHOD_EMPTY_CALL);
+      unaryCall = createMethodDescriptor(
+          "grpc.testing.TestService", METHOD_UNARY_CALL);
+      streamingOutputCall = createMethodDescriptor(
+          "grpc.testing.TestService", METHOD_STREAMING_OUTPUT_CALL);
+      streamingInputCall = createMethodDescriptor(
+          "grpc.testing.TestService", METHOD_STREAMING_INPUT_CALL);
+      fullDuplexCall = createMethodDescriptor(
+          "grpc.testing.TestService", METHOD_FULL_DUPLEX_CALL);
+      halfDuplexCall = createMethodDescriptor(
+          "grpc.testing.TestService", METHOD_HALF_DUPLEX_CALL);
+    }
+
+    private TestServiceServiceDescriptor(
+        java.util.Map<java.lang.String, io.grpc.MethodDescriptor<?, ?>> methodMap) {
+      emptyCall = (io.grpc.MethodDescriptor<com.google.protobuf.EmptyProtos.Empty,
+          com.google.protobuf.EmptyProtos.Empty>) methodMap.get(
+          CONFIG.emptyCall.getName());
+      unaryCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.SimpleRequest,
+          io.grpc.testing.integration.Messages.SimpleResponse>) methodMap.get(
+          CONFIG.unaryCall.getName());
+      streamingOutputCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+          io.grpc.testing.integration.Messages.StreamingOutputCallResponse>) methodMap.get(
+          CONFIG.streamingOutputCall.getName());
+      streamingInputCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingInputCallRequest,
+          io.grpc.testing.integration.Messages.StreamingInputCallResponse>) methodMap.get(
+          CONFIG.streamingInputCall.getName());
+      fullDuplexCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+          io.grpc.testing.integration.Messages.StreamingOutputCallResponse>) methodMap.get(
+          CONFIG.fullDuplexCall.getName());
+      halfDuplexCall = (io.grpc.MethodDescriptor<io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+          io.grpc.testing.integration.Messages.StreamingOutputCallResponse>) methodMap.get(
+          CONFIG.halfDuplexCall.getName());
+    }
+
+    @java.lang.Override
+    protected TestServiceServiceDescriptor build(
+        java.util.Map<java.lang.String, io.grpc.MethodDescriptor<?, ?>> methodMap) {
+      return new TestServiceServiceDescriptor(methodMap);
+    }
+
+    @java.lang.Override
+    public com.google.common.collect.ImmutableList<io.grpc.MethodDescriptor<?, ?>> methods() {
+      return com.google.common.collect.ImmutableList.<io.grpc.MethodDescriptor<?, ?>>of(
+          emptyCall,
+          unaryCall,
+          streamingOutputCall,
+          streamingInputCall,
+          fullDuplexCall,
+          halfDuplexCall);
+    }
+  }
+
+  public static interface TestService {
+
+    public void emptyCall(com.google.protobuf.EmptyProtos.Empty request,
+        io.grpc.stub.StreamObserver<com.google.protobuf.EmptyProtos.Empty> responseObserver);
+
+    public void unaryCall(io.grpc.testing.integration.Messages.SimpleRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.SimpleResponse> responseObserver);
+
+    public void streamingOutputCall(io.grpc.testing.integration.Messages.StreamingOutputCallRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver);
+
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingInputCallRequest> streamingInputCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingInputCallResponse> responseObserver);
+
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallRequest> fullDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver);
+
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallRequest> halfDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver);
+  }
+
+  public static interface TestServiceBlockingClient {
+
+    public com.google.protobuf.EmptyProtos.Empty emptyCall(com.google.protobuf.EmptyProtos.Empty request);
+
+    public io.grpc.testing.integration.Messages.SimpleResponse unaryCall(io.grpc.testing.integration.Messages.SimpleRequest request);
+
+    public java.util.Iterator<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> streamingOutputCall(
+        io.grpc.testing.integration.Messages.StreamingOutputCallRequest request);
+  }
+
+  public static interface TestServiceFutureClient {
+
+    public com.google.common.util.concurrent.ListenableFuture<com.google.protobuf.EmptyProtos.Empty> emptyCall(
+        com.google.protobuf.EmptyProtos.Empty request);
+
+    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.Messages.SimpleResponse> unaryCall(
+        io.grpc.testing.integration.Messages.SimpleRequest request);
+  }
+
+  public static class TestServiceStub extends
+      io.grpc.stub.AbstractStub<TestServiceStub, TestServiceServiceDescriptor>
+      implements TestService {
+    private TestServiceStub(io.grpc.Channel channel,
+        TestServiceServiceDescriptor config) {
+      super(channel, config);
+    }
+
+    @java.lang.Override
+    protected TestServiceStub build(io.grpc.Channel channel,
+        TestServiceServiceDescriptor config) {
+      return new TestServiceStub(channel, config);
+    }
+
+    @java.lang.Override
+    public void emptyCall(com.google.protobuf.EmptyProtos.Empty request,
+        io.grpc.stub.StreamObserver<com.google.protobuf.EmptyProtos.Empty> responseObserver) {
+      asyncUnaryCall(
+          channel.newCall(config.emptyCall), request, responseObserver);
+    }
+
+    @java.lang.Override
+    public void unaryCall(io.grpc.testing.integration.Messages.SimpleRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.SimpleResponse> responseObserver) {
+      asyncUnaryCall(
+          channel.newCall(config.unaryCall), request, responseObserver);
+    }
+
+    @java.lang.Override
+    public void streamingOutputCall(io.grpc.testing.integration.Messages.StreamingOutputCallRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
+      asyncServerStreamingCall(
+          channel.newCall(config.streamingOutputCall), request, responseObserver);
+    }
+
+    @java.lang.Override
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingInputCallRequest> streamingInputCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingInputCallResponse> responseObserver) {
+      return asyncClientStreamingCall(
+          channel.newCall(config.streamingInputCall), responseObserver);
+    }
+
+    @java.lang.Override
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallRequest> fullDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
+      return duplexStreamingCall(
+          channel.newCall(config.fullDuplexCall), responseObserver);
+    }
+
+    @java.lang.Override
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallRequest> halfDuplexCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
+      return duplexStreamingCall(
+          channel.newCall(config.halfDuplexCall), responseObserver);
+    }
+  }
+
+  public static class TestServiceBlockingStub extends
+      io.grpc.stub.AbstractStub<TestServiceBlockingStub, TestServiceServiceDescriptor>
+      implements TestServiceBlockingClient {
+    private TestServiceBlockingStub(io.grpc.Channel channel,
+        TestServiceServiceDescriptor config) {
+      super(channel, config);
+    }
+
+    @java.lang.Override
+    protected TestServiceBlockingStub build(io.grpc.Channel channel,
+        TestServiceServiceDescriptor config) {
+      return new TestServiceBlockingStub(channel, config);
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.EmptyProtos.Empty emptyCall(com.google.protobuf.EmptyProtos.Empty request) {
+      return blockingUnaryCall(
+          channel.newCall(config.emptyCall), request);
+    }
+
+    @java.lang.Override
+    public io.grpc.testing.integration.Messages.SimpleResponse unaryCall(io.grpc.testing.integration.Messages.SimpleRequest request) {
+      return blockingUnaryCall(
+          channel.newCall(config.unaryCall), request);
+    }
+
+    @java.lang.Override
+    public java.util.Iterator<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> streamingOutputCall(
+        io.grpc.testing.integration.Messages.StreamingOutputCallRequest request) {
+      return blockingServerStreamingCall(
+          channel.newCall(config.streamingOutputCall), request);
+    }
+  }
+
+  public static class TestServiceFutureStub extends
+      io.grpc.stub.AbstractStub<TestServiceFutureStub, TestServiceServiceDescriptor>
+      implements TestServiceFutureClient {
+    private TestServiceFutureStub(io.grpc.Channel channel,
+        TestServiceServiceDescriptor config) {
+      super(channel, config);
+    }
+
+    @java.lang.Override
+    protected TestServiceFutureStub build(io.grpc.Channel channel,
+        TestServiceServiceDescriptor config) {
+      return new TestServiceFutureStub(channel, config);
+    }
+
+    @java.lang.Override
+    public com.google.common.util.concurrent.ListenableFuture<com.google.protobuf.EmptyProtos.Empty> emptyCall(
+        com.google.protobuf.EmptyProtos.Empty request) {
+      return unaryFutureCall(
+          channel.newCall(config.emptyCall), request);
+    }
+
+    @java.lang.Override
+    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.Messages.SimpleResponse> unaryCall(
+        io.grpc.testing.integration.Messages.SimpleRequest request) {
+      return unaryFutureCall(
+          channel.newCall(config.unaryCall), request);
+    }
+  }
+
+  public static io.grpc.ServerServiceDefinition bindService(
+      final TestService serviceImpl) {
+    return io.grpc.ServerServiceDefinition.builder("grpc.testing.TestService")
+      .addMethod(createMethodDefinition(
+          METHOD_EMPTY_CALL,
+          asyncUnaryRequestCall(
+            new io.grpc.stub.ServerCalls.UnaryRequestMethod<
+                com.google.protobuf.EmptyProtos.Empty,
+                com.google.protobuf.EmptyProtos.Empty>() {
+              @java.lang.Override
+              public void invoke(
+                  com.google.protobuf.EmptyProtos.Empty request,
+                  io.grpc.stub.StreamObserver<com.google.protobuf.EmptyProtos.Empty> responseObserver) {
+                serviceImpl.emptyCall(request, responseObserver);
+              }
+            })))
+      .addMethod(createMethodDefinition(
+          METHOD_UNARY_CALL,
+          asyncUnaryRequestCall(
+            new io.grpc.stub.ServerCalls.UnaryRequestMethod<
+                io.grpc.testing.integration.Messages.SimpleRequest,
+                io.grpc.testing.integration.Messages.SimpleResponse>() {
+              @java.lang.Override
+              public void invoke(
+                  io.grpc.testing.integration.Messages.SimpleRequest request,
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.SimpleResponse> responseObserver) {
+                serviceImpl.unaryCall(request, responseObserver);
+              }
+            })))
+      .addMethod(createMethodDefinition(
+          METHOD_STREAMING_OUTPUT_CALL,
+          asyncUnaryRequestCall(
+            new io.grpc.stub.ServerCalls.UnaryRequestMethod<
+                io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+                io.grpc.testing.integration.Messages.StreamingOutputCallResponse>() {
+              @java.lang.Override
+              public void invoke(
+                  io.grpc.testing.integration.Messages.StreamingOutputCallRequest request,
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
+                serviceImpl.streamingOutputCall(request, responseObserver);
+              }
+            })))
+      .addMethod(createMethodDefinition(
+          METHOD_STREAMING_INPUT_CALL,
+          asyncStreamingRequestCall(
+            new io.grpc.stub.ServerCalls.StreamingRequestMethod<
+                io.grpc.testing.integration.Messages.StreamingInputCallRequest,
+                io.grpc.testing.integration.Messages.StreamingInputCallResponse>() {
+              @java.lang.Override
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingInputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingInputCallResponse> responseObserver) {
+                return serviceImpl.streamingInputCall(responseObserver);
+              }
+            })))
+      .addMethod(createMethodDefinition(
+          METHOD_FULL_DUPLEX_CALL,
+          asyncStreamingRequestCall(
+            new io.grpc.stub.ServerCalls.StreamingRequestMethod<
+                io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+                io.grpc.testing.integration.Messages.StreamingOutputCallResponse>() {
+              @java.lang.Override
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
+                return serviceImpl.fullDuplexCall(responseObserver);
+              }
+            })))
+      .addMethod(createMethodDefinition(
+          METHOD_HALF_DUPLEX_CALL,
+          asyncStreamingRequestCall(
+            new io.grpc.stub.ServerCalls.StreamingRequestMethod<
+                io.grpc.testing.integration.Messages.StreamingOutputCallRequest,
+                io.grpc.testing.integration.Messages.StreamingOutputCallResponse>() {
+              @java.lang.Override
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Messages.StreamingOutputCallResponse> responseObserver) {
+                return serviceImpl.halfDuplexCall(responseObserver);
+              }
+            }))).build();
+  }
+}
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceImpl.java b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java
similarity index 94%
rename from integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceImpl.java
rename to integration-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java
index 60996fa..ed89eb8 100644
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceImpl.java
+++ b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceImpl.java
@@ -29,22 +29,23 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
 import com.google.common.collect.Queues;
-import com.google.net.stubby.stub.StreamObserver;
-import com.google.net.stubby.testing.integration.Messages.Payload;
-import com.google.net.stubby.testing.integration.Messages.PayloadType;
-import com.google.net.stubby.testing.integration.Messages.ResponseParameters;
-import com.google.net.stubby.testing.integration.Messages.SimpleRequest;
-import com.google.net.stubby.testing.integration.Messages.SimpleResponse;
-import com.google.net.stubby.testing.integration.Messages.StreamingInputCallRequest;
-import com.google.net.stubby.testing.integration.Messages.StreamingInputCallResponse;
-import com.google.net.stubby.testing.integration.Messages.StreamingOutputCallRequest;
-import com.google.net.stubby.testing.integration.Messages.StreamingOutputCallResponse;
 import com.google.protobuf.ByteString;
 import com.google.protobuf.EmptyProtos;
 
+import io.grpc.stub.StreamObserver;
+import io.grpc.testing.integration.Messages.Payload;
+import io.grpc.testing.integration.Messages.PayloadType;
+import io.grpc.testing.integration.Messages.ResponseParameters;
+import io.grpc.testing.integration.Messages.SimpleRequest;
+import io.grpc.testing.integration.Messages.SimpleResponse;
+import io.grpc.testing.integration.Messages.StreamingInputCallRequest;
+import io.grpc.testing.integration.Messages.StreamingInputCallResponse;
+import io.grpc.testing.integration.Messages.StreamingOutputCallRequest;
+import io.grpc.testing.integration.Messages.StreamingOutputCallResponse;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.LinkedList;
@@ -59,7 +60,7 @@
  */
 public class TestServiceImpl implements TestServiceGrpc.TestService {
   private static final String UNCOMPRESSABLE_FILE =
-      "/com/google/net/stubby/testing/integration/testdata/uncompressable.bin";
+      "/io/grpc/testing/integration/testdata/uncompressable.bin";
   private final Random random = new Random();
 
   private final ScheduledExecutorService executor;
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceServer.java b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java
similarity index 94%
rename from integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceServer.java
rename to integration-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java
index 726930a..810ea47 100644
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/TestServiceServer.java
+++ b/integration-testing/src/main/java/io/grpc/testing/integration/TestServiceServer.java
@@ -29,14 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
 import com.google.common.util.concurrent.MoreExecutors;
-import com.google.net.stubby.ServerImpl;
-import com.google.net.stubby.ServerInterceptors;
-import com.google.net.stubby.testing.TestUtils;
-import com.google.net.stubby.transport.netty.NettyServerBuilder;
 
+import io.grpc.ServerImpl;
+import io.grpc.ServerInterceptors;
+import io.grpc.testing.TestUtils;
+import io.grpc.transport.netty.NettyServerBuilder;
 import io.netty.handler.ssl.SslContext;
 
 import java.io.File;
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/Util.java b/integration-testing/src/main/java/io/grpc/testing/integration/Util.java
similarity index 95%
rename from integration-testing/src/main/java/com/google/net/stubby/testing/integration/Util.java
rename to integration-testing/src/main/java/io/grpc/testing/integration/Util.java
index b42b07e..82dea3a 100644
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/Util.java
+++ b/integration-testing/src/main/java/io/grpc/testing/integration/Util.java
@@ -29,12 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.proto.ProtoUtils;
 import com.google.protobuf.MessageLite;
 
+import io.grpc.Metadata;
+import io.grpc.proto.ProtoUtils;
+
 import org.junit.Assert;
 
 import java.io.IOException;
diff --git a/integration-testing/src/main/proto/stubby/testing/integration/empty.proto b/integration-testing/src/main/proto/io/grpc/testing/integration/empty.proto
similarity index 100%
rename from integration-testing/src/main/proto/stubby/testing/integration/empty.proto
rename to integration-testing/src/main/proto/io/grpc/testing/integration/empty.proto
diff --git a/integration-testing/src/main/proto/stubby/testing/integration/message_set.proto b/integration-testing/src/main/proto/io/grpc/testing/integration/message_set.proto
similarity index 100%
rename from integration-testing/src/main/proto/stubby/testing/integration/message_set.proto
rename to integration-testing/src/main/proto/io/grpc/testing/integration/message_set.proto
diff --git a/integration-testing/src/main/proto/stubby/testing/integration/messages.proto b/integration-testing/src/main/proto/io/grpc/testing/integration/messages.proto
similarity index 96%
rename from integration-testing/src/main/proto/stubby/testing/integration/messages.proto
rename to integration-testing/src/main/proto/io/grpc/testing/integration/messages.proto
index 4299537..52e2e53 100644
--- a/integration-testing/src/main/proto/stubby/testing/integration/messages.proto
+++ b/integration-testing/src/main/proto/io/grpc/testing/integration/messages.proto
@@ -8,9 +8,9 @@
 
 package stubby.testing;
 
-import "stubby/testing/integration/message_set.proto";
+import "io/grpc/testing/integration/message_set.proto";
 
-option java_package = "com.google.net.stubby.testing.integration";
+option java_package = "io.grpc.testing.integration";
 
 // The type of payload that should be returned.
 enum PayloadType {
diff --git a/integration-testing/src/main/resources/com/google/net/stubby/testing/integration/testdata/uncompressable.bin b/integration-testing/src/main/resources/io/grpc/testing/integration/testdata/uncompressable.bin
similarity index 100%
rename from integration-testing/src/main/resources/com/google/net/stubby/testing/integration/testdata/uncompressable.bin
rename to integration-testing/src/main/resources/io/grpc/testing/integration/testdata/uncompressable.bin
Binary files differ
diff --git a/integration-testing/src/test/java/com/google/net/stubby/stub/StubConfigTest.java b/integration-testing/src/test/java/io/grpc/stub/StubConfigTest.java
similarity index 92%
rename from integration-testing/src/test/java/com/google/net/stubby/stub/StubConfigTest.java
rename to integration-testing/src/test/java/io/grpc/stub/StubConfigTest.java
index e9c7bae..1456c55 100644
--- a/integration-testing/src/test/java/com/google/net/stubby/stub/StubConfigTest.java
+++ b/integration-testing/src/test/java/io/grpc/stub/StubConfigTest.java
@@ -29,14 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
 import static org.junit.Assert.assertEquals;
 
-import com.google.net.stubby.Call;
-import com.google.net.stubby.Channel;
-import com.google.net.stubby.MethodDescriptor;
-import com.google.net.stubby.testing.integration.TestServiceGrpc;
+import io.grpc.Call;
+import io.grpc.Channel;
+import io.grpc.MethodDescriptor;
+import io.grpc.testing.integration.TestServiceGrpc;
 
 import org.junit.Test;
 import org.junit.runner.RunWith;
diff --git a/integration-testing/src/test/java/com/google/net/stubby/testing/integration/Http2NettyTest.java b/integration-testing/src/test/java/io/grpc/testing/integration/Http2NettyTest.java
similarity index 88%
rename from integration-testing/src/test/java/com/google/net/stubby/testing/integration/Http2NettyTest.java
rename to integration-testing/src/test/java/io/grpc/testing/integration/Http2NettyTest.java
index e64377c..755532b 100644
--- a/integration-testing/src/test/java/com/google/net/stubby/testing/integration/Http2NettyTest.java
+++ b/integration-testing/src/test/java/io/grpc/testing/integration/Http2NettyTest.java
@@ -29,12 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
-import com.google.net.stubby.ChannelImpl;
-import com.google.net.stubby.transport.netty.NegotiationType;
-import com.google.net.stubby.transport.netty.NettyChannelBuilder;
-import com.google.net.stubby.transport.netty.NettyServerBuilder;
+import io.grpc.ChannelImpl;
+import io.grpc.transport.netty.NegotiationType;
+import io.grpc.transport.netty.NettyChannelBuilder;
+import io.grpc.transport.netty.NettyServerBuilder;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/integration-testing/src/test/java/com/google/net/stubby/testing/integration/Http2OkHttpTest.java b/integration-testing/src/test/java/io/grpc/testing/integration/Http2OkHttpTest.java
similarity index 90%
rename from integration-testing/src/test/java/com/google/net/stubby/testing/integration/Http2OkHttpTest.java
rename to integration-testing/src/test/java/io/grpc/testing/integration/Http2OkHttpTest.java
index 49bc023..2257338 100644
--- a/integration-testing/src/test/java/com/google/net/stubby/testing/integration/Http2OkHttpTest.java
+++ b/integration-testing/src/test/java/io/grpc/testing/integration/Http2OkHttpTest.java
@@ -29,11 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing.integration;
+package io.grpc.testing.integration;
 
-import com.google.net.stubby.ChannelImpl;
-import com.google.net.stubby.transport.netty.NettyServerBuilder;
-import com.google.net.stubby.transport.okhttp.OkHttpChannelBuilder;
+import io.grpc.ChannelImpl;
+import io.grpc.transport.netty.NettyServerBuilder;
+import io.grpc.transport.okhttp.OkHttpChannelBuilder;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
diff --git a/netty/build.gradle b/netty/build.gradle
index 14e877e..8c6eedc 100644
--- a/netty/build.gradle
+++ b/netty/build.gradle
@@ -1,9 +1,9 @@
-description = "Stubby: Netty"
+description = "gRPC: Netty"
 dependencies {
-    compile project(':stubby-core'),
+    compile project(':grpc-core'),
             libraries.hpack,
             libraries.netty
 
     // Tests depend on base class defined by core module.
-    testCompile project(':stubby-core').sourceSets.test.output
+    testCompile project(':grpc-core').sourceSets.test.output
 }
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/CancelStreamCommand.java b/netty/src/main/java/io/grpc/transport/netty/CancelStreamCommand.java
similarity index 97%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/CancelStreamCommand.java
rename to netty/src/main/java/io/grpc/transport/netty/CancelStreamCommand.java
index b31968c..ab40526 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/CancelStreamCommand.java
+++ b/netty/src/main/java/io/grpc/transport/netty/CancelStreamCommand.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/CreateStreamCommand.java b/netty/src/main/java/io/grpc/transport/netty/CreateStreamCommand.java
similarity index 97%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/CreateStreamCommand.java
rename to netty/src/main/java/io/grpc/transport/netty/CreateStreamCommand.java
index 1b21249..794fc8e 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/CreateStreamCommand.java
+++ b/netty/src/main/java/io/grpc/transport/netty/CreateStreamCommand.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/Http2Negotiator.java b/netty/src/main/java/io/grpc/transport/netty/Http2Negotiator.java
similarity index 99%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/Http2Negotiator.java
rename to netty/src/main/java/io/grpc/transport/netty/Http2Negotiator.java
index 2d5c258..841a47c 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/Http2Negotiator.java
+++ b/netty/src/main/java/io/grpc/transport/netty/Http2Negotiator.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ListenableFuture;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NegotiationType.java b/netty/src/main/java/io/grpc/transport/netty/NegotiationType.java
similarity index 97%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NegotiationType.java
rename to netty/src/main/java/io/grpc/transport/netty/NegotiationType.java
index 312566d..c05e1d4 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NegotiationType.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NegotiationType.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 /**
  * Identifies the negotiation used for starting up HTTP/2.
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyBuffer.java b/netty/src/main/java/io/grpc/transport/netty/NettyBuffer.java
similarity index 96%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyBuffer.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyBuffer.java
index 11bb404..c6a165d 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyBuffer.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyBuffer.java
@@ -29,12 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
-import com.google.net.stubby.transport.AbstractBuffer;
 
+import io.grpc.transport.AbstractBuffer;
 import io.netty.buffer.ByteBuf;
 
 import java.io.IOException;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyChannelBuilder.java b/netty/src/main/java/io/grpc/transport/netty/NettyChannelBuilder.java
similarity index 94%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyChannelBuilder.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyChannelBuilder.java
index ae98fce..6353366 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyChannelBuilder.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyChannelBuilder.java
@@ -29,12 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
-import com.google.net.stubby.AbstractChannelBuilder;
-import com.google.net.stubby.SharedResourceHolder;
-import com.google.net.stubby.transport.ClientTransportFactory;
-
+import io.grpc.AbstractChannelBuilder;
+import io.grpc.SharedResourceHolder;
+import io.grpc.transport.ClientTransportFactory;
 import io.netty.channel.EventLoopGroup;
 import io.netty.handler.ssl.SslContext;
 
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientHandler.java b/netty/src/main/java/io/grpc/transport/netty/NettyClientHandler.java
similarity index 98%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientHandler.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyClientHandler.java
index ad660dd..e90d185 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientHandler.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyClientHandler.java
@@ -29,12 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
 
+import io.grpc.Metadata;
+import io.grpc.Status;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelFutureListener;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientStream.java b/netty/src/main/java/io/grpc/transport/netty/NettyClientStream.java
similarity index 94%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientStream.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyClientStream.java
index d9e3c30..5e6bd79 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientStream.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyClientStream.java
@@ -29,13 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import com.google.net.stubby.transport.ClientStreamListener;
-import com.google.net.stubby.transport.Http2ClientStream;
-
+import io.grpc.transport.ClientStreamListener;
+import io.grpc.transport.Http2ClientStream;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
 import io.netty.handler.codec.http2.Http2Headers;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientTransport.java b/netty/src/main/java/io/grpc/transport/netty/NettyClientTransport.java
similarity index 96%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientTransport.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyClientTransport.java
index 8aca3a0..d1e9141 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientTransport.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyClientTransport.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static io.netty.channel.ChannelOption.SO_KEEPALIVE;
 
@@ -37,12 +37,13 @@
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
-import com.google.net.stubby.transport.AbstractClientTransport;
-import com.google.net.stubby.transport.ClientStream;
-import com.google.net.stubby.transport.ClientStreamListener;
 
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
+import io.grpc.transport.AbstractClientTransport;
+import io.grpc.transport.ClientStream;
+import io.grpc.transport.ClientStreamListener;
+import io.grpc.transport.ClientTransport;
 import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientTransportFactory.java b/netty/src/main/java/io/grpc/transport/netty/NettyClientTransportFactory.java
similarity index 95%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientTransportFactory.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyClientTransportFactory.java
index b173e4c..15f2320 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyClientTransportFactory.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyClientTransportFactory.java
@@ -29,11 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.transport.ClientTransportFactory;
 
+import io.grpc.transport.ClientTransportFactory;
 import io.netty.channel.EventLoopGroup;
 import io.netty.handler.ssl.SslContext;
 
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServer.java b/netty/src/main/java/io/grpc/transport/netty/NettyServer.java
similarity index 97%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyServer.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyServer.java
index 7ac1eb5..f227f7b 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServer.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyServer.java
@@ -29,17 +29,15 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static io.netty.channel.ChannelOption.SO_BACKLOG;
 import static io.netty.channel.ChannelOption.SO_KEEPALIVE;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.AbstractService;
-import com.google.net.stubby.transport.ServerListener;
 
-import java.net.SocketAddress;
-
+import io.grpc.transport.ServerListener;
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
@@ -51,6 +49,8 @@
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.handler.ssl.SslContext;
 
+import java.net.SocketAddress;
+
 import javax.annotation.Nullable;
 
 /**
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerBuilder.java b/netty/src/main/java/io/grpc/transport/netty/NettyServerBuilder.java
similarity index 95%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerBuilder.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyServerBuilder.java
index 6c30959..2200e72 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerBuilder.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyServerBuilder.java
@@ -29,21 +29,21 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.Service;
-import com.google.net.stubby.AbstractServerBuilder;
-import com.google.net.stubby.HandlerRegistry;
-import com.google.net.stubby.SharedResourceHolder;
-import com.google.net.stubby.transport.ServerListener;
+
+import io.grpc.AbstractServerBuilder;
+import io.grpc.HandlerRegistry;
+import io.grpc.SharedResourceHolder;
+import io.grpc.transport.ServerListener;
+import io.netty.channel.EventLoopGroup;
+import io.netty.handler.ssl.SslContext;
 
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
 
-import io.netty.channel.EventLoopGroup;
-import io.netty.handler.ssl.SslContext;
-
 /**
  * The convenient builder for a netty-based GRPC server.
  */
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerHandler.java b/netty/src/main/java/io/grpc/transport/netty/NettyServerHandler.java
similarity index 95%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerHandler.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyServerHandler.java
index 5cc3721..37b8582 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerHandler.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyServerHandler.java
@@ -29,23 +29,23 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_GRPC;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.HTTP_METHOD;
-import static com.google.net.stubby.transport.netty.Utils.TE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.TE_TRAILERS;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_GRPC;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_HEADER;
+import static io.grpc.transport.netty.Utils.HTTP_METHOD;
+import static io.grpc.transport.netty.Utils.TE_HEADER;
+import static io.grpc.transport.netty.Utils.TE_TRAILERS;
 import static io.netty.buffer.Unpooled.EMPTY_BUFFER;
 import static io.netty.handler.codec.http2.Http2CodecUtil.toByteBuf;
 import static io.netty.handler.codec.http2.Http2Error.NO_ERROR;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.transport.ServerStreamListener;
-import com.google.net.stubby.transport.ServerTransportListener;
-import com.google.net.stubby.transport.TransportFrameUtil;
 
+import io.grpc.Status;
+import io.grpc.transport.ServerStreamListener;
+import io.grpc.transport.ServerTransportListener;
+import io.grpc.transport.TransportFrameUtil;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelFutureListener;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerStream.java b/netty/src/main/java/io/grpc/transport/netty/NettyServerStream.java
similarity index 95%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerStream.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyServerStream.java
index a5ef06e..c839e42 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerStream.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyServerStream.java
@@ -29,13 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.transport.AbstractServerStream;
-
+import io.grpc.Metadata;
+import io.grpc.transport.AbstractServerStream;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
 import io.netty.handler.codec.http2.Http2Headers;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerTransport.java b/netty/src/main/java/io/grpc/transport/netty/NettyServerTransport.java
similarity index 96%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerTransport.java
rename to netty/src/main/java/io/grpc/transport/netty/NettyServerTransport.java
index ba4eea1..5fef9e9 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/NettyServerTransport.java
+++ b/netty/src/main/java/io/grpc/transport/netty/NettyServerTransport.java
@@ -29,13 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.AbstractService;
-import com.google.net.stubby.transport.ServerListener;
-import com.google.net.stubby.transport.ServerTransportListener;
 
+import io.grpc.transport.ServerListener;
+import io.grpc.transport.ServerTransportListener;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelFutureListener;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/SendGrpcFrameCommand.java b/netty/src/main/java/io/grpc/transport/netty/SendGrpcFrameCommand.java
similarity index 98%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/SendGrpcFrameCommand.java
rename to netty/src/main/java/io/grpc/transport/netty/SendGrpcFrameCommand.java
index 38aaed8..2f83b4f 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/SendGrpcFrameCommand.java
+++ b/netty/src/main/java/io/grpc/transport/netty/SendGrpcFrameCommand.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufHolder;
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/SendResponseHeadersCommand.java b/netty/src/main/java/io/grpc/transport/netty/SendResponseHeadersCommand.java
similarity index 98%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/SendResponseHeadersCommand.java
rename to netty/src/main/java/io/grpc/transport/netty/SendResponseHeadersCommand.java
index d1ac540..784d9f9 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/SendResponseHeadersCommand.java
+++ b/netty/src/main/java/io/grpc/transport/netty/SendResponseHeadersCommand.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 
diff --git a/netty/src/main/java/com/google/net/stubby/transport/netty/Utils.java b/netty/src/main/java/io/grpc/transport/netty/Utils.java
similarity index 96%
rename from netty/src/main/java/com/google/net/stubby/transport/netty/Utils.java
rename to netty/src/main/java/io/grpc/transport/netty/Utils.java
index 88e5517..4122940 100644
--- a/netty/src/main/java/com/google/net/stubby/transport/netty/Utils.java
+++ b/netty/src/main/java/io/grpc/transport/netty/Utils.java
@@ -29,15 +29,15 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.SharedResourceHolder.Resource;
-import com.google.net.stubby.transport.HttpUtil;
-import com.google.net.stubby.transport.TransportFrameUtil;
 
+import io.grpc.Metadata;
+import io.grpc.SharedResourceHolder.Resource;
+import io.grpc.transport.HttpUtil;
+import io.grpc.transport.TransportFrameUtil;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufAllocator;
 import io.netty.channel.EventLoopGroup;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyBufferTest.java b/netty/src/test/java/io/grpc/transport/netty/NettyBufferTest.java
similarity index 93%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyBufferTest.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyBufferTest.java
index d094f7c..1d0f04e 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyBufferTest.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyBufferTest.java
@@ -29,14 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static com.google.common.base.Charsets.UTF_8;
 import static org.junit.Assert.assertEquals;
 
-import com.google.net.stubby.transport.Buffer;
-import com.google.net.stubby.transport.BufferTestBase;
-
+import io.grpc.transport.Buffer;
+import io.grpc.transport.BufferTestBase;
 import io.netty.buffer.Unpooled;
 
 import org.junit.Before;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyClientHandlerTest.java b/netty/src/test/java/io/grpc/transport/netty/NettyClientHandlerTest.java
similarity index 94%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyClientHandlerTest.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyClientHandlerTest.java
index b896186..e15c857 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyClientHandlerTest.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyClientHandlerTest.java
@@ -29,16 +29,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static com.google.common.base.Charsets.UTF_8;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_GRPC;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.HTTPS;
-import static com.google.net.stubby.transport.netty.Utils.HTTP_METHOD;
-import static com.google.net.stubby.transport.netty.Utils.STATUS_OK;
-import static com.google.net.stubby.transport.netty.Utils.TE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.TE_TRAILERS;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_GRPC;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_HEADER;
+import static io.grpc.transport.netty.Utils.HTTPS;
+import static io.grpc.transport.netty.Utils.HTTP_METHOD;
+import static io.grpc.transport.netty.Utils.STATUS_OK;
+import static io.grpc.transport.netty.Utils.TE_HEADER;
+import static io.grpc.transport.netty.Utils.TE_TRAILERS;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
@@ -49,9 +49,8 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
-
+import io.grpc.Metadata;
+import io.grpc.Status;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyClientStreamTest.java b/netty/src/test/java/io/grpc/transport/netty/NettyClientStreamTest.java
similarity index 94%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyClientStreamTest.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyClientStreamTest.java
index 1c49854..c83c8af 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyClientStreamTest.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyClientStreamTest.java
@@ -29,12 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
-import static com.google.net.stubby.transport.netty.NettyTestUtil.messageFrame;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_GRPC;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.STATUS_OK;
+import static io.grpc.transport.netty.NettyTestUtil.messageFrame;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_GRPC;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_HEADER;
+import static io.grpc.transport.netty.Utils.STATUS_OK;
 import static io.netty.util.CharsetUtil.UTF_8;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -46,11 +46,10 @@
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.transport.AbstractStream;
-import com.google.net.stubby.transport.ClientStreamListener;
-
+import io.grpc.Metadata;
+import io.grpc.Status;
+import io.grpc.transport.AbstractStream;
+import io.grpc.transport.ClientStreamListener;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.handler.codec.AsciiString;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyHandlerTestBase.java b/netty/src/test/java/io/grpc/transport/netty/NettyHandlerTestBase.java
similarity index 98%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyHandlerTestBase.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyHandlerTestBase.java
index 6a76cb4..a71ee26 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyHandlerTestBase.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyHandlerTestBase.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.eq;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyServerHandlerTest.java b/netty/src/test/java/io/grpc/transport/netty/NettyServerHandlerTest.java
similarity index 93%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyServerHandlerTest.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyServerHandlerTest.java
index 6332714..7ce4466 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyServerHandlerTest.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyServerHandlerTest.java
@@ -29,14 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
 import static com.google.common.base.Charsets.UTF_8;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_GRPC;
-import static com.google.net.stubby.transport.netty.Utils.CONTENT_TYPE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.HTTP_METHOD;
-import static com.google.net.stubby.transport.netty.Utils.TE_HEADER;
-import static com.google.net.stubby.transport.netty.Utils.TE_TRAILERS;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_GRPC;
+import static io.grpc.transport.netty.Utils.CONTENT_TYPE_HEADER;
+import static io.grpc.transport.netty.Utils.HTTP_METHOD;
+import static io.grpc.transport.netty.Utils.TE_HEADER;
+import static io.grpc.transport.netty.Utils.TE_TRAILERS;
 import static io.netty.handler.codec.http2.Http2CodecUtil.toByteBuf;
 import static io.netty.handler.codec.http2.Http2Exception.connectionError;
 import static org.junit.Assert.assertArrayEquals;
@@ -51,14 +51,14 @@
 import static org.mockito.Mockito.when;
 
 import com.google.common.io.ByteStreams;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.Status.Code;
-import com.google.net.stubby.transport.MessageFramer;
-import com.google.net.stubby.transport.ServerStream;
-import com.google.net.stubby.transport.ServerStreamListener;
-import com.google.net.stubby.transport.ServerTransportListener;
 
+import io.grpc.Metadata;
+import io.grpc.Status;
+import io.grpc.Status.Code;
+import io.grpc.transport.MessageFramer;
+import io.grpc.transport.ServerStream;
+import io.grpc.transport.ServerStreamListener;
+import io.grpc.transport.ServerTransportListener;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.buffer.UnpooledByteBufAllocator;
@@ -72,7 +72,6 @@
 import io.netty.handler.codec.http2.Http2CodecUtil;
 import io.netty.handler.codec.http2.Http2Connection;
 import io.netty.handler.codec.http2.Http2Error;
-import io.netty.handler.codec.http2.Http2Exception;
 import io.netty.handler.codec.http2.Http2FrameReader;
 import io.netty.handler.codec.http2.Http2FrameWriter;
 import io.netty.handler.codec.http2.Http2Headers;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyServerStreamTest.java b/netty/src/test/java/io/grpc/transport/netty/NettyServerStreamTest.java
similarity index 96%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyServerStreamTest.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyServerStreamTest.java
index c109a69..b4193ae 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyServerStreamTest.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyServerStreamTest.java
@@ -29,9 +29,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
-import static com.google.net.stubby.transport.netty.NettyTestUtil.messageFrame;
+import static io.grpc.transport.netty.NettyTestUtil.messageFrame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.any;
@@ -41,11 +41,10 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.verifyZeroInteractions;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.transport.AbstractStream;
-import com.google.net.stubby.transport.ServerStreamListener;
-
+import io.grpc.Metadata;
+import io.grpc.Status;
+import io.grpc.transport.AbstractStream;
+import io.grpc.transport.ServerStreamListener;
 import io.netty.buffer.EmptyByteBuf;
 import io.netty.buffer.UnpooledByteBufAllocator;
 import io.netty.handler.codec.AsciiString;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyStreamTestBase.java b/netty/src/test/java/io/grpc/transport/netty/NettyStreamTestBase.java
similarity index 95%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyStreamTestBase.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyStreamTestBase.java
index ad04847..75b888d 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyStreamTestBase.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyStreamTestBase.java
@@ -29,9 +29,9 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
-import static com.google.net.stubby.transport.netty.NettyTestUtil.messageFrame;
+import static io.grpc.transport.netty.NettyTestUtil.messageFrame;
 import static io.netty.util.CharsetUtil.UTF_8;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Matchers.any;
@@ -41,9 +41,8 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import com.google.net.stubby.transport.AbstractStream;
-import com.google.net.stubby.transport.StreamListener;
-
+import io.grpc.transport.AbstractStream;
+import io.grpc.transport.StreamListener;
 import io.netty.buffer.UnpooledByteBufAllocator;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelFuture;
diff --git a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyTestUtil.java b/netty/src/test/java/io/grpc/transport/netty/NettyTestUtil.java
similarity index 95%
rename from netty/src/test/java/com/google/net/stubby/transport/netty/NettyTestUtil.java
rename to netty/src/test/java/io/grpc/transport/netty/NettyTestUtil.java
index 7782715..1671dc2 100644
--- a/netty/src/test/java/com/google/net/stubby/transport/netty/NettyTestUtil.java
+++ b/netty/src/test/java/io/grpc/transport/netty/NettyTestUtil.java
@@ -29,14 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.netty;
+package io.grpc.transport.netty;
 
-import static com.google.net.stubby.GrpcFramingUtil.STATUS_FRAME;
+import static io.grpc.GrpcFramingUtil.STATUS_FRAME;
 import static io.netty.util.CharsetUtil.UTF_8;
 
 import com.google.common.io.ByteStreams;
-import com.google.net.stubby.Status;
 
+import io.grpc.Status;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 
diff --git a/okhttp/build.gradle b/okhttp/build.gradle
index 29be36e..e4050c9 100644
--- a/okhttp/build.gradle
+++ b/okhttp/build.gradle
@@ -2,9 +2,9 @@
     id "be.insaneprogramming.gradle.animalsniffer" version "1.4.0"
 }
 
-description = "Stubby: OkHttp"
+description = "gRPC: OkHttp"
 dependencies {
-    compile project(':stubby-core'),
+    compile project(':grpc-core'),
             libraries.okio,
             libraries.okhttp
 }
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/AsyncFrameWriter.java b/okhttp/src/main/java/io/grpc/transport/okhttp/AsyncFrameWriter.java
similarity index 98%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/AsyncFrameWriter.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/AsyncFrameWriter.java
index 5431308..8d8ec60 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/AsyncFrameWriter.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/AsyncFrameWriter.java
@@ -29,16 +29,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import com.google.common.util.concurrent.SettableFuture;
-import com.google.net.stubby.SerializingExecutor;
 
 import com.squareup.okhttp.internal.spdy.ErrorCode;
 import com.squareup.okhttp.internal.spdy.FrameWriter;
 import com.squareup.okhttp.internal.spdy.Header;
 import com.squareup.okhttp.internal.spdy.Settings;
 
+import io.grpc.SerializingExecutor;
+
 import okio.Buffer;
 
 import java.io.IOException;
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/Headers.java b/okhttp/src/main/java/io/grpc/transport/okhttp/Headers.java
similarity index 95%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/Headers.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/Headers.java
index 84384d9..857fb29 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/Headers.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/Headers.java
@@ -29,15 +29,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.transport.HttpUtil;
-import com.google.net.stubby.transport.TransportFrameUtil;
 
 import com.squareup.okhttp.internal.spdy.Header;
 
+import io.grpc.Metadata;
+import io.grpc.transport.HttpUtil;
+import io.grpc.transport.TransportFrameUtil;
+
 import okio.ByteString;
 
 import java.util.ArrayList;
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpBuffer.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpBuffer.java
similarity index 94%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpBuffer.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpBuffer.java
index d27fcb5..40bfe92 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpBuffer.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpBuffer.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
-import com.google.net.stubby.transport.AbstractBuffer;
-import com.google.net.stubby.transport.Buffer;
+import io.grpc.transport.AbstractBuffer;
+import io.grpc.transport.Buffer;
 
 import java.io.EOFException;
 import java.io.IOException;
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpChannelBuilder.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpChannelBuilder.java
similarity index 94%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpChannelBuilder.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpChannelBuilder.java
index eb217f6..1a62f7b 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpChannelBuilder.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpChannelBuilder.java
@@ -29,18 +29,19 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.google.net.stubby.AbstractChannelBuilder;
-import com.google.net.stubby.SharedResourceHolder;
-import com.google.net.stubby.SharedResourceHolder.Resource;
-import com.google.net.stubby.transport.ClientTransportFactory;
+
+import io.grpc.AbstractChannelBuilder;
+import io.grpc.SharedResourceHolder;
+import io.grpc.SharedResourceHolder.Resource;
+import io.grpc.transport.ClientTransportFactory;
 
 import java.net.InetSocketAddress;
-import java.util.concurrent.Executors;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import javax.net.ssl.SSLSocketFactory;
 
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientStream.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java
similarity index 95%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientStream.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java
index fb91939..922ac9a 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientStream.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientStream.java
@@ -29,17 +29,18 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.transport.ClientStreamListener;
-import com.google.net.stubby.transport.Http2ClientStream;
 
 import com.squareup.okhttp.internal.spdy.ErrorCode;
 import com.squareup.okhttp.internal.spdy.Header;
 
+import io.grpc.Metadata;
+import io.grpc.Status;
+import io.grpc.transport.ClientStreamListener;
+import io.grpc.transport.Http2ClientStream;
+
 import java.nio.ByteBuffer;
 import java.util.List;
 
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransport.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientTransport.java
similarity index 97%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransport.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientTransport.java
index 0681af1..a2d5e30 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransport.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientTransport.java
@@ -29,17 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.Status.Code;
-import com.google.net.stubby.transport.AbstractClientTransport;
-import com.google.net.stubby.transport.ClientStream;
-import com.google.net.stubby.transport.ClientStreamListener;
 
 import com.squareup.okhttp.internal.spdy.ErrorCode;
 import com.squareup.okhttp.internal.spdy.FrameReader;
@@ -49,6 +42,15 @@
 import com.squareup.okhttp.internal.spdy.Settings;
 import com.squareup.okhttp.internal.spdy.Variant;
 
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
+import io.grpc.Status;
+import io.grpc.Status.Code;
+import io.grpc.transport.AbstractClientTransport;
+import io.grpc.transport.ClientStream;
+import io.grpc.transport.ClientStreamListener;
+import io.grpc.transport.ClientTransport;
+
 import okio.Buffer;
 import okio.BufferedSink;
 import okio.BufferedSource;
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransportFactory.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientTransportFactory.java
similarity index 93%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransportFactory.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientTransportFactory.java
index b6024a4..8f4dbca 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransportFactory.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OkHttpClientTransportFactory.java
@@ -29,11 +29,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import com.google.common.base.Preconditions;
-import com.google.net.stubby.transport.ClientTransport;
-import com.google.net.stubby.transport.ClientTransportFactory;
+
+import io.grpc.transport.ClientTransport;
+import io.grpc.transport.ClientTransportFactory;
 
 import java.net.InetSocketAddress;
 import java.util.concurrent.ExecutorService;
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OutboundFlowController.java b/okhttp/src/main/java/io/grpc/transport/okhttp/OutboundFlowController.java
similarity index 97%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OutboundFlowController.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/OutboundFlowController.java
index bc4bba2..2603472 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/OutboundFlowController.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/OutboundFlowController.java
@@ -29,11 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
-import static com.google.net.stubby.transport.okhttp.Utils.CONNECTION_STREAM_ID;
-import static com.google.net.stubby.transport.okhttp.Utils.DEFAULT_WINDOW_SIZE;
-import static com.google.net.stubby.transport.okhttp.Utils.MAX_FRAME_SIZE;
+import static io.grpc.transport.okhttp.Utils.CONNECTION_STREAM_ID;
+import static io.grpc.transport.okhttp.Utils.DEFAULT_WINDOW_SIZE;
+import static io.grpc.transport.okhttp.Utils.MAX_FRAME_SIZE;
 import static java.lang.Math.ceil;
 import static java.lang.Math.max;
 import static java.lang.Math.min;
diff --git a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/Utils.java b/okhttp/src/main/java/io/grpc/transport/okhttp/Utils.java
similarity index 94%
rename from okhttp/src/main/java/com/google/net/stubby/transport/okhttp/Utils.java
rename to okhttp/src/main/java/io/grpc/transport/okhttp/Utils.java
index 4e65613..d4fb782 100644
--- a/okhttp/src/main/java/com/google/net/stubby/transport/okhttp/Utils.java
+++ b/okhttp/src/main/java/io/grpc/transport/okhttp/Utils.java
@@ -29,13 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
-
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.transport.TransportFrameUtil;
+package io.grpc.transport.okhttp;
 
 import com.squareup.okhttp.internal.spdy.Header;
 
+import io.grpc.Metadata;
+import io.grpc.transport.TransportFrameUtil;
+
 import java.util.List;
 
 /**
diff --git a/okhttp/src/test/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransportTest.java b/okhttp/src/test/java/io/grpc/transport/okhttp/OkHttpClientTransportTest.java
similarity index 98%
rename from okhttp/src/test/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransportTest.java
rename to okhttp/src/test/java/io/grpc/transport/okhttp/OkHttpClientTransportTest.java
index 90828c1..4207b5d 100644
--- a/okhttp/src/test/java/com/google/net/stubby/transport/okhttp/OkHttpClientTransportTest.java
+++ b/okhttp/src/test/java/io/grpc/transport/okhttp/OkHttpClientTransportTest.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.transport.okhttp;
+package io.grpc.transport.okhttp;
 
 import static com.google.common.base.Charsets.UTF_8;
 import static org.junit.Assert.assertEquals;
@@ -47,17 +47,18 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.Service;
 import com.google.common.util.concurrent.Service.State;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
-import com.google.net.stubby.Status;
-import com.google.net.stubby.transport.ClientStreamListener;
-import com.google.net.stubby.transport.okhttp.OkHttpClientTransport.ClientFrameHandler;
 
 import com.squareup.okhttp.internal.spdy.ErrorCode;
 import com.squareup.okhttp.internal.spdy.FrameReader;
 import com.squareup.okhttp.internal.spdy.Header;
 import com.squareup.okhttp.internal.spdy.HeadersMode;
 
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
+import io.grpc.Status;
+import io.grpc.transport.ClientStreamListener;
+import io.grpc.transport.okhttp.OkHttpClientTransport.ClientFrameHandler;
+
 import okio.Buffer;
 
 import org.junit.After;
diff --git a/run-test-client.sh b/run-test-client.sh
index c897d5e..9b8915c 100755
--- a/run-test-client.sh
+++ b/run-test-client.sh
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 TARGET='Test Service Client'
-TARGET_CLASS='com.google.net.stubby.testing.integration.TestServiceClient'
+TARGET_CLASS='io.grpc.testing.integration.TestServiceClient'
 
 TARGET_ARGS=''
 for i in "$@"; do 
@@ -9,4 +9,4 @@
 TARGET_ARGS="${TARGET_ARGS:2}"
 
 echo "[INFO] Running: $TARGET ($TARGET_CLASS $TARGET_ARGS)"
-gradle -PmainClass="$TARGET_CLASS" -PappArgs="[$TARGET_ARGS]" :stubby-integration-testing:execute
+gradle -PmainClass="$TARGET_CLASS" -PappArgs="[$TARGET_ARGS]" :grpc-integration-testing:execute
diff --git a/run-test-server.sh b/run-test-server.sh
index b84bd3f..9912ad9 100755
--- a/run-test-server.sh
+++ b/run-test-server.sh
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 TARGET='Test Service Server'
-TARGET_CLASS='com.google.net.stubby.testing.integration.TestServiceServer'
+TARGET_CLASS='io.grpc.testing.integration.TestServiceServer'
 
 TARGET_ARGS=''
 for i in "$@"; do 
@@ -9,4 +9,4 @@
 TARGET_ARGS="${TARGET_ARGS:2}"
 
 echo "[INFO] Running: $TARGET ($TARGET_CLASS $TARGET_ARGS)"
-gradle -PmainClass="$TARGET_CLASS" -PappArgs="[$TARGET_ARGS]" :stubby-integration-testing:execute
+gradle -PmainClass="$TARGET_CLASS" -PappArgs="[$TARGET_ARGS]" :grpc-integration-testing:execute
diff --git a/settings.gradle b/settings.gradle
index 2d5320a..ccf44c5 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,18 +1,18 @@
-rootProject.name = "stubby"
-include ":stubby-core"
-include ":stubby-stub"
-include ":stubby-auth"
-include ":stubby-okhttp"
-include ":stubby-netty"
-include ":stubby-testing"
-include ":stubby-integration-testing"
-include ":stubby-all"
+rootProject.name = "grpc"
+include ":grpc-core"
+include ":grpc-stub"
+include ":grpc-auth"
+include ":grpc-okhttp"
+include ":grpc-netty"
+include ":grpc-testing"
+include ":grpc-integration-testing"
+include ":grpc-all"
 
-project(':stubby-core').projectDir = "$rootDir/core" as File
-project(':stubby-stub').projectDir = "$rootDir/stub" as File
-project(':stubby-auth').projectDir = "$rootDir/auth" as File
-project(':stubby-okhttp').projectDir = "$rootDir/okhttp" as File
-project(':stubby-netty').projectDir = "$rootDir/netty" as File
-project(':stubby-testing').projectDir = "$rootDir/testing" as File
-project(':stubby-integration-testing').projectDir = "$rootDir/integration-testing" as File
-project(':stubby-all').projectDir = "$rootDir/all" as File
+project(':grpc-core').projectDir = "$rootDir/core" as File
+project(':grpc-stub').projectDir = "$rootDir/stub" as File
+project(':grpc-auth').projectDir = "$rootDir/auth" as File
+project(':grpc-okhttp').projectDir = "$rootDir/okhttp" as File
+project(':grpc-netty').projectDir = "$rootDir/netty" as File
+project(':grpc-testing').projectDir = "$rootDir/testing" as File
+project(':grpc-integration-testing').projectDir = "$rootDir/integration-testing" as File
+project(':grpc-all').projectDir = "$rootDir/all" as File
diff --git a/stub/build.gradle b/stub/build.gradle
index f7e6a5b..d242393 100644
--- a/stub/build.gradle
+++ b/stub/build.gradle
@@ -2,9 +2,9 @@
     id "be.insaneprogramming.gradle.animalsniffer" version "1.4.0"
 }
 
-description = "Stubby: Stub"
+description = "gRPC: Stub"
 dependencies {
-    compile project(':stubby-core')
+    compile project(':grpc-core')
 }
 
 // Configure the animal sniffer plugin
diff --git a/stub/src/main/java/com/google/net/stubby/stub/AbstractServiceDescriptor.java b/stub/src/main/java/io/grpc/stub/AbstractServiceDescriptor.java
similarity index 95%
rename from stub/src/main/java/com/google/net/stubby/stub/AbstractServiceDescriptor.java
rename to stub/src/main/java/io/grpc/stub/AbstractServiceDescriptor.java
index e851a03..b917ad8 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/AbstractServiceDescriptor.java
+++ b/stub/src/main/java/io/grpc/stub/AbstractServiceDescriptor.java
@@ -29,10 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
 import com.google.common.collect.ImmutableList;
-import com.google.net.stubby.MethodDescriptor;
+
+import io.grpc.MethodDescriptor;
 
 import java.util.Map;
 
diff --git a/stub/src/main/java/com/google/net/stubby/stub/AbstractStub.java b/stub/src/main/java/io/grpc/stub/AbstractStub.java
similarity index 94%
rename from stub/src/main/java/com/google/net/stubby/stub/AbstractStub.java
rename to stub/src/main/java/io/grpc/stub/AbstractStub.java
index 6a39889..21cafe0 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/AbstractStub.java
+++ b/stub/src/main/java/io/grpc/stub/AbstractStub.java
@@ -29,13 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
 import com.google.common.collect.Maps;
-import com.google.net.stubby.Channel;
-import com.google.net.stubby.ClientInterceptor;
-import com.google.net.stubby.ClientInterceptors;
-import com.google.net.stubby.MethodDescriptor;
+
+import io.grpc.Channel;
+import io.grpc.ClientInterceptor;
+import io.grpc.ClientInterceptors;
+import io.grpc.MethodDescriptor;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/stub/src/main/java/com/google/net/stubby/stub/Calls.java b/stub/src/main/java/io/grpc/stub/Calls.java
similarity index 97%
rename from stub/src/main/java/com/google/net/stubby/stub/Calls.java
rename to stub/src/main/java/io/grpc/stub/Calls.java
index f47a9ea..2459bb6 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/Calls.java
+++ b/stub/src/main/java/io/grpc/stub/Calls.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
@@ -37,10 +37,11 @@
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import com.google.common.util.concurrent.UncheckedExecutionException;
-import com.google.net.stubby.Call;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
-import com.google.net.stubby.Status;
+
+import io.grpc.Call;
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
+import io.grpc.Status;
 
 import java.util.Iterator;
 import java.util.NoSuchElementException;
@@ -322,7 +323,7 @@
   }
 
   /**
-   * Convert events on a {@link com.google.net.stubby.Call.Listener} into a blocking
+   * Convert events on a {@link io.grpc.Call.Listener} into a blocking
    * {@link Iterator}.
    *
    * <p>The class is not thread-safe, but it does permit Call.Listener calls in a separate thread
diff --git a/stub/src/main/java/com/google/net/stubby/stub/MetadataUtils.java b/stub/src/main/java/io/grpc/stub/MetadataUtils.java
similarity index 92%
rename from stub/src/main/java/com/google/net/stubby/stub/MetadataUtils.java
rename to stub/src/main/java/io/grpc/stub/MetadataUtils.java
index c382aca..9c303b8 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/MetadataUtils.java
+++ b/stub/src/main/java/io/grpc/stub/MetadataUtils.java
@@ -29,16 +29,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
-import com.google.net.stubby.Call;
-import com.google.net.stubby.Channel;
-import com.google.net.stubby.ClientInterceptor;
-import com.google.net.stubby.ClientInterceptors.ForwardingCall;
-import com.google.net.stubby.ClientInterceptors.ForwardingListener;
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.MethodDescriptor;
-import com.google.net.stubby.Status;
+import io.grpc.Call;
+import io.grpc.Channel;
+import io.grpc.ClientInterceptor;
+import io.grpc.ClientInterceptors.ForwardingCall;
+import io.grpc.ClientInterceptors.ForwardingListener;
+import io.grpc.Metadata;
+import io.grpc.MethodDescriptor;
+import io.grpc.Status;
 
 import java.util.concurrent.atomic.AtomicReference;
 
diff --git a/stub/src/main/java/com/google/net/stubby/stub/Method.java b/stub/src/main/java/io/grpc/stub/Method.java
similarity index 96%
rename from stub/src/main/java/com/google/net/stubby/stub/Method.java
rename to stub/src/main/java/io/grpc/stub/Method.java
index b2297ea..21e2300 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/Method.java
+++ b/stub/src/main/java/io/grpc/stub/Method.java
@@ -29,10 +29,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
-import com.google.net.stubby.Marshaller;
-import com.google.net.stubby.MethodType;
+import io.grpc.Marshaller;
+import io.grpc.MethodType;
 
 import javax.annotation.concurrent.Immutable;
 
diff --git a/stub/src/main/java/com/google/net/stubby/stub/ServerCalls.java b/stub/src/main/java/io/grpc/stub/ServerCalls.java
similarity index 95%
rename from stub/src/main/java/com/google/net/stubby/stub/ServerCalls.java
rename to stub/src/main/java/io/grpc/stub/ServerCalls.java
index c68ef14..4def475 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/ServerCalls.java
+++ b/stub/src/main/java/io/grpc/stub/ServerCalls.java
@@ -29,13 +29,13 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.ServerCall;
-import com.google.net.stubby.ServerCallHandler;
-import com.google.net.stubby.ServerMethodDefinition;
-import com.google.net.stubby.Status;
+import io.grpc.Metadata;
+import io.grpc.ServerCall;
+import io.grpc.ServerCallHandler;
+import io.grpc.ServerMethodDefinition;
+import io.grpc.Status;
 
 /**
  * Utility functions for adapting ServerCallHandlers to application service implementation.
diff --git a/stub/src/main/java/com/google/net/stubby/stub/StreamObserver.java b/stub/src/main/java/io/grpc/stub/StreamObserver.java
similarity index 98%
rename from stub/src/main/java/com/google/net/stubby/stub/StreamObserver.java
rename to stub/src/main/java/io/grpc/stub/StreamObserver.java
index 7f5a3c8..58e3559 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/StreamObserver.java
+++ b/stub/src/main/java/io/grpc/stub/StreamObserver.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
 /**
  * Receives notifications from an observable stream of messages.
diff --git a/stub/src/main/java/com/google/net/stubby/stub/StreamRecorder.java b/stub/src/main/java/io/grpc/stub/StreamRecorder.java
similarity index 98%
rename from stub/src/main/java/com/google/net/stubby/stub/StreamRecorder.java
rename to stub/src/main/java/io/grpc/stub/StreamRecorder.java
index b8f7af8..cfd5c07 100644
--- a/stub/src/main/java/com/google/net/stubby/stub/StreamRecorder.java
+++ b/stub/src/main/java/io/grpc/stub/StreamRecorder.java
@@ -29,7 +29,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.stub;
+package io.grpc.stub;
 
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
diff --git a/testing/build.gradle b/testing/build.gradle
index 0bc4cde..2858075 100644
--- a/testing/build.gradle
+++ b/testing/build.gradle
@@ -1,4 +1,4 @@
-description = "Stubby: Testing"
+description = "gRPC: Testing"
 dependencies {
-    compile project(':stubby-core')
+    compile project(':grpc-core')
 }
diff --git a/testing/src/main/java/com/google/net/stubby/testing/TestUtils.java b/testing/src/main/java/io/grpc/testing/TestUtils.java
similarity index 91%
rename from testing/src/main/java/com/google/net/stubby/testing/TestUtils.java
rename to testing/src/main/java/io/grpc/testing/TestUtils.java
index e89da7e..45fa92c 100644
--- a/testing/src/main/java/com/google/net/stubby/testing/TestUtils.java
+++ b/testing/src/main/java/io/grpc/testing/TestUtils.java
@@ -29,14 +29,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-package com.google.net.stubby.testing;
+package io.grpc.testing;
 
-import com.google.net.stubby.Metadata;
-import com.google.net.stubby.ServerCall;
-import com.google.net.stubby.ServerCallHandler;
-import com.google.net.stubby.ServerInterceptor;
-import com.google.net.stubby.ServerInterceptors;
-import com.google.net.stubby.Status;
+import io.grpc.Metadata;
+import io.grpc.ServerCall;
+import io.grpc.ServerCallHandler;
+import io.grpc.ServerInterceptor;
+import io.grpc.ServerInterceptors;
+import io.grpc.Status;
 
 import java.util.Arrays;
 import java.util.HashSet;
