diff --git a/android-interop-testing/app/build.gradle b/android-interop-testing/app/build.gradle
index f0f95db..b51cc98 100644
--- a/android-interop-testing/app/build.gradle
+++ b/android-interop-testing/app/build.gradle
@@ -33,7 +33,7 @@
     }
     plugins {
         grpc {
-            artifact = 'io.grpc:protoc-gen-grpc-java:0.9.0-SNAPSHOT'
+            artifact = 'io.grpc:protoc-gen-grpc-java:0.10.0-SNAPSHOT'
         }
     }
     generateProtoTasks {
@@ -64,10 +64,10 @@
     compile 'com.squareup.okhttp:okhttp:2.2.0'
     testCompile 'junit:junit:4.12'
     // You need to build grpc-java to obtain these libraries below.
-    compile 'io.grpc:grpc-core:0.9.0-SNAPSHOT'
-    compile 'io.grpc:grpc-protobuf-nano:0.9.0-SNAPSHOT'
-    compile 'io.grpc:grpc-okhttp:0.9.0-SNAPSHOT'
-    compile 'io.grpc:grpc-stub:0.9.0-SNAPSHOT'
-    compile 'io.grpc:grpc-testing:0.9.0-SNAPSHOT'
+    compile 'io.grpc:grpc-core:0.10.0-SNAPSHOT'
+    compile 'io.grpc:grpc-protobuf-nano:0.10.0-SNAPSHOT'
+    compile 'io.grpc:grpc-okhttp:0.10.0-SNAPSHOT'
+    compile 'io.grpc:grpc-stub:0.10.0-SNAPSHOT'
+    compile 'io.grpc:grpc-testing:0.10.0-SNAPSHOT'
     compile 'javax.annotation:javax.annotation-api:1.2'
 }
diff --git a/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java b/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java
index 3824617..b887d33 100644
--- a/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java
+++ b/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java
@@ -60,6 +60,8 @@
 import io.grpc.android.integrationtest.nano.Messages.StreamingInputCallResponse;
 import io.grpc.android.integrationtest.nano.Messages.StreamingOutputCallRequest;
 import io.grpc.android.integrationtest.nano.Messages.StreamingOutputCallResponse;
+import io.grpc.android.integrationtest.nano.TestServiceGrpc;
+import io.grpc.android.integrationtest.nano.UnimplementedServiceGrpc;
 import io.grpc.okhttp.OkHttpChannelBuilder;
 import io.grpc.stub.StreamObserver;
 import io.grpc.testing.StreamRecorder;
diff --git a/compiler/build.gradle b/compiler/build.gradle
index 3af17a6..4625292 100644
--- a/compiler/build.gradle
+++ b/compiler/build.gradle
@@ -208,7 +208,7 @@
 
 test.dependsOn('testGolden', 'testNanoGolden')
 
-def configureTestTask(Task task, String suffix) {
+def configureTestTask(Task task, String suffix, String extraPackage) {
   task.dependsOn "generateTest${suffix}Proto"
   if (osdetector.os != 'windows') {
     task.executable "diff"
@@ -217,11 +217,11 @@
   }
   // File isn't found on Windows if last slash is forward-slash
   def slash = System.getProperty("file.separator")
-  task.args "$buildDir/generated/source/proto/test${suffix}/grpc/io/grpc/testing/integration${slash}TestServiceGrpc.java",
+  task.args "$buildDir/generated/source/proto/test${suffix}/grpc/io/grpc/testing/integration${extraPackage}${slash}TestServiceGrpc.java",
        "$projectDir/src/test/golden/TestService${suffix}.java.txt"
 }
 
 task testGolden(type: Exec)
 task testNanoGolden(type: Exec)
-configureTestTask(testGolden, '')
-configureTestTask(testNanoGolden, 'Nano')
+configureTestTask(testGolden, '', '')
+configureTestTask(testNanoGolden, 'Nano', '/nano')
diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp
index e8f3e7c..bda2f12 100644
--- a/compiler/src/java_plugin/cpp/java_generator.cpp
+++ b/compiler/src/java_plugin/cpp/java_generator.cpp
@@ -61,6 +61,10 @@
   if (nano && !desc->file()->options().javanano_use_deprecated_package()) {
     // XXX: Add "nano" to the original package
     // (https://github.com/grpc/grpc-java/issues/900)
+    if (isupper(name[0])) {
+      // No java package specified.
+      return "nano." + name;
+    }
     for (int i = 0; i < name.size(); ++i) {
       if ((name[i] == '.') && (i < (name.size() - 1)) && isupper(name[i + 1])) {
         return name.substr(0, i + 1) + "nano." + name.substr(i + 1);
@@ -624,10 +628,12 @@
   vars["ExperimentalApi"] = "io.grpc.ExperimentalApi";
 
   Printer printer(out, '$');
-  string package_name = ServiceJavaPackage(service->file());
-  printer.Print(
-      "package $package_name$;\n\n",
-      "package_name", package_name);
+  string package_name = ServiceJavaPackage(service->file(), generate_nano);
+  if (!package_name.empty()) {
+    printer.Print(
+        "package $package_name$;\n\n",
+        "package_name", package_name);
+  }
   PrintImports(&printer, generate_nano);
 
   // Package string is used to fully qualify method names.
@@ -638,11 +644,19 @@
   PrintService(service, &vars, &printer, generate_nano);
 }
 
-string ServiceJavaPackage(const FileDescriptor* file) {
+string ServiceJavaPackage(const FileDescriptor* file, bool nano) {
   string result = google::protobuf::compiler::java::ClassName(file);
   size_t last_dot_pos = result.find_last_of('.');
   if (last_dot_pos != string::npos) {
     result.resize(last_dot_pos);
+  } else {
+    result = "";
+  }
+  if (nano && !file->options().javanano_use_deprecated_package()) {
+    if (!result.empty()) {
+      result += ".";
+    }
+    result += "nano";
   }
   return result;
 }
diff --git a/compiler/src/java_plugin/cpp/java_generator.h b/compiler/src/java_plugin/cpp/java_generator.h
index f75376e..96b3b8a 100644
--- a/compiler/src/java_plugin/cpp/java_generator.h
+++ b/compiler/src/java_plugin/cpp/java_generator.h
@@ -39,7 +39,7 @@
 namespace java_grpc_generator {
 
 // Returns the package name of the gRPC services defined in the given file.
-string ServiceJavaPackage(const google::protobuf::FileDescriptor* file);
+string ServiceJavaPackage(const google::protobuf::FileDescriptor* file, bool nano);
 
 // Returns the name of the outer class that wraps in all the generated code for
 // the given service.
diff --git a/compiler/src/java_plugin/cpp/java_plugin.cpp b/compiler/src/java_plugin/cpp/java_plugin.cpp
index 41c8999..8f9a2e8 100644
--- a/compiler/src/java_plugin/cpp/java_plugin.cpp
+++ b/compiler/src/java_plugin/cpp/java_plugin.cpp
@@ -8,8 +8,8 @@
 #include "java_generator.h"
 #include <google/protobuf/compiler/code_generator.h>
 #include <google/protobuf/compiler/plugin.h>
-#include <google/protobuf/io/zero_copy_stream.h>
 #include <google/protobuf/descriptor.h>
+#include <google/protobuf/io/zero_copy_stream.h>
 
 static string JavaPackageToDir(const string& package_name) {
   string package_dir = package_name;
@@ -41,7 +41,7 @@
       }
     }
 
-    string package_name = java_grpc_generator::ServiceJavaPackage(file);
+    string package_name = java_grpc_generator::ServiceJavaPackage(file, generate_nano);
     string package_filename = JavaPackageToDir(package_name);
     for (int i = 0; i < file->service_count(); ++i) {
       const google::protobuf::ServiceDescriptor* service = file->service(i);
diff --git a/compiler/src/test/golden/TestServiceNano.java.txt b/compiler/src/test/golden/TestServiceNano.java.txt
index 4012e40..0314a8d 100644
--- a/compiler/src/test/golden/TestServiceNano.java.txt
+++ b/compiler/src/test/golden/TestServiceNano.java.txt
@@ -1,4 +1,4 @@
-package io.grpc.testing.integration;
+package io.grpc.testing.integration.nano;
 
 import static io.grpc.stub.ClientCalls.asyncUnaryCall;
 import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
