Merge pull request #3328 from nathanielmanistaatgoogle/future-callbacks

Test coverage for callbacks added to Face futures
diff --git a/BUILD b/BUILD
index 7511320..7ee8438 100644
--- a/BUILD
+++ b/BUILD
@@ -729,6 +729,7 @@
     "include/grpc++/create_channel.h",
     "include/grpc++/generic/async_generic_service.h",
     "include/grpc++/generic/generic_stub.h",
+    "include/grpc++/grpc++.h",
     "include/grpc++/impl/call.h",
     "include/grpc++/impl/client_unary_call.h",
     "include/grpc++/impl/grpc_library.h",
@@ -820,6 +821,7 @@
     "include/grpc++/create_channel.h",
     "include/grpc++/generic/async_generic_service.h",
     "include/grpc++/generic/generic_stub.h",
+    "include/grpc++/grpc++.h",
     "include/grpc++/impl/call.h",
     "include/grpc++/impl/client_unary_call.h",
     "include/grpc++/impl/grpc_library.h",
diff --git a/Makefile b/Makefile
index 4359f78..2986692 100644
--- a/Makefile
+++ b/Makefile
@@ -4597,6 +4597,7 @@
     include/grpc++/create_channel.h \
     include/grpc++/generic/async_generic_service.h \
     include/grpc++/generic/generic_stub.h \
+    include/grpc++/grpc++.h \
     include/grpc++/impl/call.h \
     include/grpc++/impl/client_unary_call.h \
     include/grpc++/impl/grpc_library.h \
@@ -4842,6 +4843,7 @@
     include/grpc++/create_channel.h \
     include/grpc++/generic/async_generic_service.h \
     include/grpc++/generic/generic_stub.h \
+    include/grpc++/grpc++.h \
     include/grpc++/impl/call.h \
     include/grpc++/impl/client_unary_call.h \
     include/grpc++/impl/grpc_library.h \
diff --git a/build.yaml b/build.yaml
index 757ba13..5eb7b22 100644
--- a/build.yaml
+++ b/build.yaml
@@ -13,9 +13,9 @@
 - name: grpc++_base
   public_headers: [include/grpc++/channel.h, include/grpc++/client_context.h, include/grpc++/completion_queue.h,
     include/grpc++/create_channel.h, include/grpc++/generic/async_generic_service.h,
-    include/grpc++/generic/generic_stub.h, include/grpc++/impl/call.h, include/grpc++/impl/client_unary_call.h,
-    include/grpc++/impl/grpc_library.h, include/grpc++/impl/proto_utils.h, include/grpc++/impl/rpc_method.h,
-    include/grpc++/impl/rpc_service_method.h, include/grpc++/impl/serialization_traits.h,
+    include/grpc++/generic/generic_stub.h, include/grpc++/grpc++.h, include/grpc++/impl/call.h,
+    include/grpc++/impl/client_unary_call.h, include/grpc++/impl/grpc_library.h, include/grpc++/impl/proto_utils.h,
+    include/grpc++/impl/rpc_method.h, include/grpc++/impl/rpc_service_method.h, include/grpc++/impl/serialization_traits.h,
     include/grpc++/impl/service_type.h, include/grpc++/impl/sync.h, include/grpc++/impl/sync_cxx11.h,
     include/grpc++/impl/sync_no_cxx11.h, include/grpc++/impl/thd.h, include/grpc++/impl/thd_cxx11.h,
     include/grpc++/impl/thd_no_cxx11.h, include/grpc++/security/auth_context.h, include/grpc++/security/auth_metadata_processor.h,
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuide.cs b/examples/csharp/route_guide/RouteGuide/RouteGuide.cs
index 9bc6f30..deb97e1 100644
--- a/examples/csharp/route_guide/RouteGuide/RouteGuide.cs
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuide.cs
@@ -7,7 +7,7 @@
 using pbc = global::Google.Protobuf.Collections;
 using pbr = global::Google.Protobuf.Reflection;
 using scg = global::System.Collections.Generic;
-namespace Examples {
+namespace Routeguide {
 
   namespace Proto {
 
@@ -23,29 +23,29 @@
       static RouteGuide() {
         byte[] descriptorData = global::System.Convert.FromBase64String(
             string.Concat(
-              "ChFyb3V0ZV9ndWlkZS5wcm90bxIIZXhhbXBsZXMiLAoFUG9pbnQSEAoIbGF0", 
-              "aXR1ZGUYASABKAUSEQoJbG9uZ2l0dWRlGAIgASgFIkUKCVJlY3RhbmdsZRIb", 
-              "CgJsbxgBIAEoCzIPLmV4YW1wbGVzLlBvaW50EhsKAmhpGAIgASgLMg8uZXhh", 
-              "bXBsZXMuUG9pbnQiOgoHRmVhdHVyZRIMCgRuYW1lGAEgASgJEiEKCGxvY2F0", 
-              "aW9uGAIgASgLMg8uZXhhbXBsZXMuUG9pbnQiPwoJUm91dGVOb3RlEiEKCGxv", 
-              "Y2F0aW9uGAEgASgLMg8uZXhhbXBsZXMuUG9pbnQSDwoHbWVzc2FnZRgCIAEo", 
-              "CSJiCgxSb3V0ZVN1bW1hcnkSEwoLcG9pbnRfY291bnQYASABKAUSFQoNZmVh", 
-              "dHVyZV9jb3VudBgCIAEoBRIQCghkaXN0YW5jZRgDIAEoBRIUCgxlbGFwc2Vk", 
-              "X3RpbWUYBCABKAUy9QEKClJvdXRlR3VpZGUSMgoKR2V0RmVhdHVyZRIPLmV4", 
-              "YW1wbGVzLlBvaW50GhEuZXhhbXBsZXMuRmVhdHVyZSIAEjoKDExpc3RGZWF0", 
-              "dXJlcxITLmV4YW1wbGVzLlJlY3RhbmdsZRoRLmV4YW1wbGVzLkZlYXR1cmUi", 
-              "ADABEjoKC1JlY29yZFJvdXRlEg8uZXhhbXBsZXMuUG9pbnQaFi5leGFtcGxl", 
-              "cy5Sb3V0ZVN1bW1hcnkiACgBEjsKCVJvdXRlQ2hhdBITLmV4YW1wbGVzLlJv", 
-              "dXRlTm90ZRoTLmV4YW1wbGVzLlJvdXRlTm90ZSIAKAEwAUIPCgdleC5ncnBj", 
-              "ogIDUlRHYgZwcm90bzM="));
+              "ChFyb3V0ZV9ndWlkZS5wcm90bxIKcm91dGVndWlkZSIsCgVQb2ludBIQCghs", 
+              "YXRpdHVkZRgBIAEoBRIRCglsb25naXR1ZGUYAiABKAUiSQoJUmVjdGFuZ2xl", 
+              "Eh0KAmxvGAEgASgLMhEucm91dGVndWlkZS5Qb2ludBIdCgJoaRgCIAEoCzIR", 
+              "LnJvdXRlZ3VpZGUuUG9pbnQiPAoHRmVhdHVyZRIMCgRuYW1lGAEgASgJEiMK", 
+              "CGxvY2F0aW9uGAIgASgLMhEucm91dGVndWlkZS5Qb2ludCJBCglSb3V0ZU5v", 
+              "dGUSIwoIbG9jYXRpb24YASABKAsyES5yb3V0ZWd1aWRlLlBvaW50Eg8KB21l", 
+              "c3NhZ2UYAiABKAkiYgoMUm91dGVTdW1tYXJ5EhMKC3BvaW50X2NvdW50GAEg", 
+              "ASgFEhUKDWZlYXR1cmVfY291bnQYAiABKAUSEAoIZGlzdGFuY2UYAyABKAUS", 
+              "FAoMZWxhcHNlZF90aW1lGAQgASgFMoUCCgpSb3V0ZUd1aWRlEjYKCkdldEZl", 
+              "YXR1cmUSES5yb3V0ZWd1aWRlLlBvaW50GhMucm91dGVndWlkZS5GZWF0dXJl", 
+              "IgASPgoMTGlzdEZlYXR1cmVzEhUucm91dGVndWlkZS5SZWN0YW5nbGUaEy5y", 
+              "b3V0ZWd1aWRlLkZlYXR1cmUiADABEj4KC1JlY29yZFJvdXRlEhEucm91dGVn", 
+              "dWlkZS5Qb2ludBoYLnJvdXRlZ3VpZGUuUm91dGVTdW1tYXJ5IgAoARI/CglS", 
+              "b3V0ZUNoYXQSFS5yb3V0ZWd1aWRlLlJvdXRlTm90ZRoVLnJvdXRlZ3VpZGUu", 
+              "Um91dGVOb3RlIgAoATABQg8KB2V4LmdycGOiAgNSVEdiBnByb3RvMw=="));
         descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
             new pbr::FileDescriptor[] { },
             new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] {
-              new pbr::GeneratedCodeInfo(typeof(global::Examples.Point), new[]{ "Latitude", "Longitude" }, null, null, null),
-              new pbr::GeneratedCodeInfo(typeof(global::Examples.Rectangle), new[]{ "Lo", "Hi" }, null, null, null),
-              new pbr::GeneratedCodeInfo(typeof(global::Examples.Feature), new[]{ "Name", "Location" }, null, null, null),
-              new pbr::GeneratedCodeInfo(typeof(global::Examples.RouteNote), new[]{ "Location", "Message" }, null, null, null),
-              new pbr::GeneratedCodeInfo(typeof(global::Examples.RouteSummary), new[]{ "PointCount", "FeatureCount", "Distance", "ElapsedTime" }, null, null, null)
+              new pbr::GeneratedCodeInfo(typeof(global::Routeguide.Point), new[]{ "Latitude", "Longitude" }, null, null, null),
+              new pbr::GeneratedCodeInfo(typeof(global::Routeguide.Rectangle), new[]{ "Lo", "Hi" }, null, null, null),
+              new pbr::GeneratedCodeInfo(typeof(global::Routeguide.Feature), new[]{ "Name", "Location" }, null, null, null),
+              new pbr::GeneratedCodeInfo(typeof(global::Routeguide.RouteNote), new[]{ "Location", "Message" }, null, null, null),
+              new pbr::GeneratedCodeInfo(typeof(global::Routeguide.RouteSummary), new[]{ "PointCount", "FeatureCount", "Distance", "ElapsedTime" }, null, null, null)
             }));
       }
       #endregion
@@ -59,7 +59,7 @@
     public static pb::MessageParser<Point> Parser { get { return _parser; } }
 
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::Examples.Proto.RouteGuide.Descriptor.MessageTypes[0]; }
+      get { return global::Routeguide.Proto.RouteGuide.Descriptor.MessageTypes[0]; }
     }
 
     pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -187,7 +187,7 @@
     public static pb::MessageParser<Rectangle> Parser { get { return _parser; } }
 
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::Examples.Proto.RouteGuide.Descriptor.MessageTypes[1]; }
+      get { return global::Routeguide.Proto.RouteGuide.Descriptor.MessageTypes[1]; }
     }
 
     pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -210,8 +210,8 @@
     }
 
     public const int LoFieldNumber = 1;
-    private global::Examples.Point lo_;
-    public global::Examples.Point Lo {
+    private global::Routeguide.Point lo_;
+    public global::Routeguide.Point Lo {
       get { return lo_; }
       set {
         lo_ = value;
@@ -219,8 +219,8 @@
     }
 
     public const int HiFieldNumber = 2;
-    private global::Examples.Point hi_;
-    public global::Examples.Point Hi {
+    private global::Routeguide.Point hi_;
+    public global::Routeguide.Point Hi {
       get { return hi_; }
       set {
         hi_ = value;
@@ -282,13 +282,13 @@
       }
       if (other.lo_ != null) {
         if (lo_ == null) {
-          lo_ = new global::Examples.Point();
+          lo_ = new global::Routeguide.Point();
         }
         Lo.MergeFrom(other.Lo);
       }
       if (other.hi_ != null) {
         if (hi_ == null) {
-          hi_ = new global::Examples.Point();
+          hi_ = new global::Routeguide.Point();
         }
         Hi.MergeFrom(other.Hi);
       }
@@ -303,14 +303,14 @@
             break;
           case 10: {
             if (lo_ == null) {
-              lo_ = new global::Examples.Point();
+              lo_ = new global::Routeguide.Point();
             }
             input.ReadMessage(lo_);
             break;
           }
           case 18: {
             if (hi_ == null) {
-              hi_ = new global::Examples.Point();
+              hi_ = new global::Routeguide.Point();
             }
             input.ReadMessage(hi_);
             break;
@@ -327,7 +327,7 @@
     public static pb::MessageParser<Feature> Parser { get { return _parser; } }
 
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::Examples.Proto.RouteGuide.Descriptor.MessageTypes[2]; }
+      get { return global::Routeguide.Proto.RouteGuide.Descriptor.MessageTypes[2]; }
     }
 
     pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -359,8 +359,8 @@
     }
 
     public const int LocationFieldNumber = 2;
-    private global::Examples.Point location_;
-    public global::Examples.Point Location {
+    private global::Routeguide.Point location_;
+    public global::Routeguide.Point Location {
       get { return location_; }
       set {
         location_ = value;
@@ -425,7 +425,7 @@
       }
       if (other.location_ != null) {
         if (location_ == null) {
-          location_ = new global::Examples.Point();
+          location_ = new global::Routeguide.Point();
         }
         Location.MergeFrom(other.Location);
       }
@@ -444,7 +444,7 @@
           }
           case 18: {
             if (location_ == null) {
-              location_ = new global::Examples.Point();
+              location_ = new global::Routeguide.Point();
             }
             input.ReadMessage(location_);
             break;
@@ -461,7 +461,7 @@
     public static pb::MessageParser<RouteNote> Parser { get { return _parser; } }
 
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::Examples.Proto.RouteGuide.Descriptor.MessageTypes[3]; }
+      get { return global::Routeguide.Proto.RouteGuide.Descriptor.MessageTypes[3]; }
     }
 
     pbr::MessageDescriptor pb::IMessage.Descriptor {
@@ -484,8 +484,8 @@
     }
 
     public const int LocationFieldNumber = 1;
-    private global::Examples.Point location_;
-    public global::Examples.Point Location {
+    private global::Routeguide.Point location_;
+    public global::Routeguide.Point Location {
       get { return location_; }
       set {
         location_ = value;
@@ -556,7 +556,7 @@
       }
       if (other.location_ != null) {
         if (location_ == null) {
-          location_ = new global::Examples.Point();
+          location_ = new global::Routeguide.Point();
         }
         Location.MergeFrom(other.Location);
       }
@@ -574,7 +574,7 @@
             break;
           case 10: {
             if (location_ == null) {
-              location_ = new global::Examples.Point();
+              location_ = new global::Routeguide.Point();
             }
             input.ReadMessage(location_);
             break;
@@ -595,7 +595,7 @@
     public static pb::MessageParser<RouteSummary> Parser { get { return _parser; } }
 
     public static pbr::MessageDescriptor Descriptor {
-      get { return global::Examples.Proto.RouteGuide.Descriptor.MessageTypes[4]; }
+      get { return global::Routeguide.Proto.RouteGuide.Descriptor.MessageTypes[4]; }
     }
 
     pbr::MessageDescriptor pb::IMessage.Descriptor {
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs b/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs
index f2dc1c2..d60256f 100644
--- a/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs
@@ -7,39 +7,39 @@
 using System.Threading.Tasks;
 using Grpc.Core;
 
-namespace Examples {
+namespace Routeguide {
   public static class RouteGuide
   {
-    static readonly string __ServiceName = "examples.RouteGuide";
+    static readonly string __ServiceName = "routeguide.RouteGuide";
 
-    static readonly Marshaller<global::Examples.Point> __Marshaller_Point = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Examples.Point.Parser.ParseFrom);
-    static readonly Marshaller<global::Examples.Feature> __Marshaller_Feature = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Examples.Feature.Parser.ParseFrom);
-    static readonly Marshaller<global::Examples.Rectangle> __Marshaller_Rectangle = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Examples.Rectangle.Parser.ParseFrom);
-    static readonly Marshaller<global::Examples.RouteSummary> __Marshaller_RouteSummary = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Examples.RouteSummary.Parser.ParseFrom);
-    static readonly Marshaller<global::Examples.RouteNote> __Marshaller_RouteNote = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Examples.RouteNote.Parser.ParseFrom);
+    static readonly Marshaller<global::Routeguide.Point> __Marshaller_Point = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Routeguide.Point.Parser.ParseFrom);
+    static readonly Marshaller<global::Routeguide.Feature> __Marshaller_Feature = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Routeguide.Feature.Parser.ParseFrom);
+    static readonly Marshaller<global::Routeguide.Rectangle> __Marshaller_Rectangle = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Routeguide.Rectangle.Parser.ParseFrom);
+    static readonly Marshaller<global::Routeguide.RouteSummary> __Marshaller_RouteSummary = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Routeguide.RouteSummary.Parser.ParseFrom);
+    static readonly Marshaller<global::Routeguide.RouteNote> __Marshaller_RouteNote = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Routeguide.RouteNote.Parser.ParseFrom);
 
-    static readonly Method<global::Examples.Point, global::Examples.Feature> __Method_GetFeature = new Method<global::Examples.Point, global::Examples.Feature>(
+    static readonly Method<global::Routeguide.Point, global::Routeguide.Feature> __Method_GetFeature = new Method<global::Routeguide.Point, global::Routeguide.Feature>(
         MethodType.Unary,
         __ServiceName,
         "GetFeature",
         __Marshaller_Point,
         __Marshaller_Feature);
 
-    static readonly Method<global::Examples.Rectangle, global::Examples.Feature> __Method_ListFeatures = new Method<global::Examples.Rectangle, global::Examples.Feature>(
+    static readonly Method<global::Routeguide.Rectangle, global::Routeguide.Feature> __Method_ListFeatures = new Method<global::Routeguide.Rectangle, global::Routeguide.Feature>(
         MethodType.ServerStreaming,
         __ServiceName,
         "ListFeatures",
         __Marshaller_Rectangle,
         __Marshaller_Feature);
 
-    static readonly Method<global::Examples.Point, global::Examples.RouteSummary> __Method_RecordRoute = new Method<global::Examples.Point, global::Examples.RouteSummary>(
+    static readonly Method<global::Routeguide.Point, global::Routeguide.RouteSummary> __Method_RecordRoute = new Method<global::Routeguide.Point, global::Routeguide.RouteSummary>(
         MethodType.ClientStreaming,
         __ServiceName,
         "RecordRoute",
         __Marshaller_Point,
         __Marshaller_RouteSummary);
 
-    static readonly Method<global::Examples.RouteNote, global::Examples.RouteNote> __Method_RouteChat = new Method<global::Examples.RouteNote, global::Examples.RouteNote>(
+    static readonly Method<global::Routeguide.RouteNote, global::Routeguide.RouteNote> __Method_RouteChat = new Method<global::Routeguide.RouteNote, global::Routeguide.RouteNote>(
         MethodType.DuplexStreaming,
         __ServiceName,
         "RouteChat",
@@ -49,31 +49,31 @@
     // service descriptor
     public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
     {
-      get { return global::Examples.Proto.RouteGuide.Descriptor.Services[0]; }
+      get { return global::Routeguide.Proto.RouteGuide.Descriptor.Services[0]; }
     }
 
     // client interface
     public interface IRouteGuideClient
     {
-      global::Examples.Feature GetFeature(global::Examples.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
-      global::Examples.Feature GetFeature(global::Examples.Point request, CallOptions options);
-      AsyncUnaryCall<global::Examples.Feature> GetFeatureAsync(global::Examples.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
-      AsyncUnaryCall<global::Examples.Feature> GetFeatureAsync(global::Examples.Point request, CallOptions options);
-      AsyncServerStreamingCall<global::Examples.Feature> ListFeatures(global::Examples.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
-      AsyncServerStreamingCall<global::Examples.Feature> ListFeatures(global::Examples.Rectangle request, CallOptions options);
-      AsyncClientStreamingCall<global::Examples.Point, global::Examples.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
-      AsyncClientStreamingCall<global::Examples.Point, global::Examples.RouteSummary> RecordRoute(CallOptions options);
-      AsyncDuplexStreamingCall<global::Examples.RouteNote, global::Examples.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
-      AsyncDuplexStreamingCall<global::Examples.RouteNote, global::Examples.RouteNote> RouteChat(CallOptions options);
+      global::Routeguide.Feature GetFeature(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+      global::Routeguide.Feature GetFeature(global::Routeguide.Point request, CallOptions options);
+      AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+      AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, CallOptions options);
+      AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+      AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, CallOptions options);
+      AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+      AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(CallOptions options);
+      AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+      AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(CallOptions options);
     }
 
     // server-side interface
     public interface IRouteGuide
     {
-      Task<global::Examples.Feature> GetFeature(global::Examples.Point request, ServerCallContext context);
-      Task ListFeatures(global::Examples.Rectangle request, IServerStreamWriter<global::Examples.Feature> responseStream, ServerCallContext context);
-      Task<global::Examples.RouteSummary> RecordRoute(IAsyncStreamReader<global::Examples.Point> requestStream, ServerCallContext context);
-      Task RouteChat(IAsyncStreamReader<global::Examples.RouteNote> requestStream, IServerStreamWriter<global::Examples.RouteNote> responseStream, ServerCallContext context);
+      Task<global::Routeguide.Feature> GetFeature(global::Routeguide.Point request, ServerCallContext context);
+      Task ListFeatures(global::Routeguide.Rectangle request, IServerStreamWriter<global::Routeguide.Feature> responseStream, ServerCallContext context);
+      Task<global::Routeguide.RouteSummary> RecordRoute(IAsyncStreamReader<global::Routeguide.Point> requestStream, ServerCallContext context);
+      Task RouteChat(IAsyncStreamReader<global::Routeguide.RouteNote> requestStream, IServerStreamWriter<global::Routeguide.RouteNote> responseStream, ServerCallContext context);
     }
 
     // client stub
@@ -82,52 +82,52 @@
       public RouteGuideClient(Channel channel) : base(channel)
       {
       }
-      public global::Examples.Feature GetFeature(global::Examples.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      public global::Routeguide.Feature GetFeature(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
       {
         var call = CreateCall(__Method_GetFeature, new CallOptions(headers, deadline, cancellationToken));
         return Calls.BlockingUnaryCall(call, request);
       }
-      public global::Examples.Feature GetFeature(global::Examples.Point request, CallOptions options)
+      public global::Routeguide.Feature GetFeature(global::Routeguide.Point request, CallOptions options)
       {
         var call = CreateCall(__Method_GetFeature, options);
         return Calls.BlockingUnaryCall(call, request);
       }
-      public AsyncUnaryCall<global::Examples.Feature> GetFeatureAsync(global::Examples.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      public AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
       {
         var call = CreateCall(__Method_GetFeature, new CallOptions(headers, deadline, cancellationToken));
         return Calls.AsyncUnaryCall(call, request);
       }
-      public AsyncUnaryCall<global::Examples.Feature> GetFeatureAsync(global::Examples.Point request, CallOptions options)
+      public AsyncUnaryCall<global::Routeguide.Feature> GetFeatureAsync(global::Routeguide.Point request, CallOptions options)
       {
         var call = CreateCall(__Method_GetFeature, options);
         return Calls.AsyncUnaryCall(call, request);
       }
-      public AsyncServerStreamingCall<global::Examples.Feature> ListFeatures(global::Examples.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      public AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
       {
         var call = CreateCall(__Method_ListFeatures, new CallOptions(headers, deadline, cancellationToken));
         return Calls.AsyncServerStreamingCall(call, request);
       }
-      public AsyncServerStreamingCall<global::Examples.Feature> ListFeatures(global::Examples.Rectangle request, CallOptions options)
+      public AsyncServerStreamingCall<global::Routeguide.Feature> ListFeatures(global::Routeguide.Rectangle request, CallOptions options)
       {
         var call = CreateCall(__Method_ListFeatures, options);
         return Calls.AsyncServerStreamingCall(call, request);
       }
-      public AsyncClientStreamingCall<global::Examples.Point, global::Examples.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      public AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
       {
         var call = CreateCall(__Method_RecordRoute, new CallOptions(headers, deadline, cancellationToken));
         return Calls.AsyncClientStreamingCall(call);
       }
-      public AsyncClientStreamingCall<global::Examples.Point, global::Examples.RouteSummary> RecordRoute(CallOptions options)
+      public AsyncClientStreamingCall<global::Routeguide.Point, global::Routeguide.RouteSummary> RecordRoute(CallOptions options)
       {
         var call = CreateCall(__Method_RecordRoute, options);
         return Calls.AsyncClientStreamingCall(call);
       }
-      public AsyncDuplexStreamingCall<global::Examples.RouteNote, global::Examples.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+      public AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
       {
         var call = CreateCall(__Method_RouteChat, new CallOptions(headers, deadline, cancellationToken));
         return Calls.AsyncDuplexStreamingCall(call);
       }
-      public AsyncDuplexStreamingCall<global::Examples.RouteNote, global::Examples.RouteNote> RouteChat(CallOptions options)
+      public AsyncDuplexStreamingCall<global::Routeguide.RouteNote, global::Routeguide.RouteNote> RouteChat(CallOptions options)
       {
         var call = CreateCall(__Method_RouteChat, options);
         return Calls.AsyncDuplexStreamingCall(call);
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs b/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs
index 21a0be4..e898738 100644
--- a/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs
@@ -7,7 +7,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Examples
+namespace Routeguide
 {
     /// <summary>
     /// Utility methods for the route guide example.
diff --git a/examples/csharp/route_guide/RouteGuideClient/Program.cs b/examples/csharp/route_guide/RouteGuideClient/Program.cs
index 4ddb526..be65fc3 100644
--- a/examples/csharp/route_guide/RouteGuideClient/Program.cs
+++ b/examples/csharp/route_guide/RouteGuideClient/Program.cs
@@ -5,7 +5,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Examples
+namespace Routeguide
 {
     class Program
     {
diff --git a/examples/csharp/route_guide/RouteGuideServer/Program.cs b/examples/csharp/route_guide/RouteGuideServer/Program.cs
index 0a4d73f..baced0b 100644
--- a/examples/csharp/route_guide/RouteGuideServer/Program.cs
+++ b/examples/csharp/route_guide/RouteGuideServer/Program.cs
@@ -5,7 +5,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Examples
+namespace Routeguide
 {
     class Program
     {
diff --git a/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs b/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs
index fbe0f44..b828294 100644
--- a/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs
+++ b/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs
@@ -8,7 +8,7 @@
 
 using Grpc.Core.Utils;
 
-namespace Examples
+namespace Routeguide
 {
     /// <summary>
     /// Example implementation of RouteGuide server.
diff --git a/src/core/iomgr/pollset_posix.c b/src/core/iomgr/pollset_posix.c
index 6bd1b61..2a3ae4b 100644
--- a/src/core/iomgr/pollset_posix.c
+++ b/src/core/iomgr/pollset_posix.c
@@ -187,6 +187,12 @@
   if (pollset->shutting_down) {
     goto done;
   }
+  if (pollset->in_flight_cbs) {
+    /* Give do_promote priority so we don't starve it out */
+    gpr_mu_unlock(&pollset->mu);
+    gpr_mu_lock(&pollset->mu);
+    goto done;
+  }
   if (!pollset->kicked_without_pollers) {
     push_front_worker(pollset, worker);
     added_worker = 1;
@@ -422,12 +428,6 @@
   int r;
   int nfds;
 
-  if (pollset->in_flight_cbs) {
-    /* Give do_promote priority so we don't starve it out */
-    gpr_mu_unlock(&pollset->mu);
-    gpr_mu_lock(&pollset->mu);
-    return;
-  }
   fd = pollset->data.ptr;
   if (fd && grpc_fd_is_orphaned(fd)) {
     GRPC_FD_UNREF(fd, "basicpoll");
diff --git a/src/core/iomgr/tcp_windows.c b/src/core/iomgr/tcp_windows.c
index fe3673c..725c18e 100644
--- a/src/core/iomgr/tcp_windows.c
+++ b/src/core/iomgr/tcp_windows.c
@@ -144,7 +144,7 @@
   int do_abort = 0;
 
   if (success) {
-    if (socket->read_info.wsa_error != 0) {
+    if (socket->read_info.wsa_error != 0 && !tcp->shutting_down) {
       if (socket->read_info.wsa_error != WSAECONNRESET) {
         char *utf8_message = gpr_format_message(info->wsa_error);
         gpr_log(GPR_ERROR, "ReadFile overlapped error: %s", utf8_message);
@@ -153,7 +153,7 @@
       success = 0;
       gpr_slice_unref(tcp->read_slice);
     } else {
-      if (info->bytes_transfered != 0) {
+      if (info->bytes_transfered != 0 && !tcp->shutting_down) {
         sub = gpr_slice_sub_no_ref(tcp->read_slice, 0, info->bytes_transfered);
         gpr_slice_buffer_add(tcp->read_slices, sub);
         success = 1;
diff --git a/src/core/security/client_auth_filter.c b/src/core/security/client_auth_filter.c
index f3ecfd0..d15a967 100644
--- a/src/core/security/client_auth_filter.c
+++ b/src/core/security/client_auth_filter.c
@@ -203,7 +203,8 @@
   size_t i;
   grpc_client_security_context *sec_ctx = NULL;
 
-  if (calld->security_context_set == 0) {
+  if (calld->security_context_set == 0 &&
+      op->cancel_with_status == GRPC_STATUS_OK) {
     calld->security_context_set = 1;
     GPR_ASSERT(op->context);
     if (op->context[GRPC_CONTEXT_SECURITY].value == NULL) {
@@ -218,11 +219,11 @@
         chand->security_connector->base.auth_context, "client_auth_filter");
   }
 
-  if (op->bind_pollset) {
+  if (op->bind_pollset != NULL) {
     calld->pollset = op->bind_pollset;
   }
 
-  if (op->send_ops && !calld->sent_initial_metadata) {
+  if (op->send_ops != NULL && !calld->sent_initial_metadata) {
     size_t nops = op->send_ops->nops;
     grpc_stream_op *ops = op->send_ops->ops;
     for (i = 0; i < nops; i++) {
diff --git a/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs b/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs
index 35561d2..5c5b802 100644
--- a/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs
+++ b/src/csharp/Grpc.Core/Logging/ConsoleLogger.cs
@@ -79,48 +79,72 @@
         }
 
         /// <summary>Logs a message with severity Debug.</summary>
-        public void Debug(string message, params object[] formatArgs)
+        public void Debug(string message)
         {
-            Log("D", message, formatArgs);
+            Log("D", message);
+        }
+
+        /// <summary>Logs a formatted message with severity Debug.</summary>
+        public void Debug(string format, params object[] formatArgs)
+        {
+            Debug(string.Format(format, formatArgs));
         }
 
         /// <summary>Logs a message with severity Info.</summary>
-        public void Info(string message, params object[] formatArgs)
+        public void Info(string message)
         {
-            Log("I", message, formatArgs);
+            Log("I", message);
+        }
+
+        /// <summary>Logs a formatted message with severity Info.</summary>
+        public void Info(string format, params object[] formatArgs)
+        {
+            Info(string.Format(format, formatArgs));
         }
 
         /// <summary>Logs a message with severity Warning.</summary>
-        public void Warning(string message, params object[] formatArgs)
+        public void Warning(string message)
         {
-            Log("W", message, formatArgs);
+            Log("W", message);
+        }
+
+        /// <summary>Logs a formatted message with severity Warning.</summary>
+        public void Warning(string format, params object[] formatArgs)
+        {
+            Warning(string.Format(format, formatArgs));
         }
 
         /// <summary>Logs a message and an associated exception with severity Warning.</summary>
-        public void Warning(Exception exception, string message, params object[] formatArgs)
+        public void Warning(Exception exception, string message)
         {
-            Log("W", message + " " + exception, formatArgs);
+            Warning(message + " " + exception);
         }
 
         /// <summary>Logs a message with severity Error.</summary>
-        public void Error(string message, params object[] formatArgs)
+        public void Error(string message)
         {
-            Log("E", message, formatArgs);
+            Log("E", message);
+        }
+
+        /// <summary>Logs a formatted message with severity Error.</summary>
+        public void Error(string format, params object[] formatArgs)
+        {
+            Error(string.Format(format, formatArgs));
         }
 
         /// <summary>Logs a message and an associated exception with severity Error.</summary>
-        public void Error(Exception exception, string message, params object[] formatArgs)
+        public void Error(Exception exception, string message)
         {
-            Log("E", message + " " + exception, formatArgs);
+            Error(message + " " + exception);
         }
 
-        private void Log(string severityString, string message, object[] formatArgs)
+        private void Log(string severityString, string message)
         {
             Console.Error.WriteLine("{0}{1} {2}{3}",
                 severityString,
                 DateTime.Now,
                 forTypeString,
-                string.Format(message, formatArgs));
+                message);
         }
     }
 }
diff --git a/src/csharp/Grpc.Core/Logging/ILogger.cs b/src/csharp/Grpc.Core/Logging/ILogger.cs
index 61e0c91..7c03264 100644
--- a/src/csharp/Grpc.Core/Logging/ILogger.cs
+++ b/src/csharp/Grpc.Core/Logging/ILogger.cs
@@ -43,21 +43,33 @@
         ILogger ForType<T>();
 
         /// <summary>Logs a message with severity Debug.</summary>
-        void Debug(string message, params object[] formatArgs);
+        void Debug(string message);
+
+        /// <summary>Logs a formatted message with severity Debug.</summary>
+        void Debug(string format, params object[] formatArgs);
 
         /// <summary>Logs a message with severity Info.</summary>
-        void Info(string message, params object[] formatArgs);
+        void Info(string message);
+
+        /// <summary>Logs a formatted message with severity Info.</summary>
+        void Info(string format, params object[] formatArgs);
 
         /// <summary>Logs a message with severity Warning.</summary>
-        void Warning(string message, params object[] formatArgs);
+        void Warning(string message);
+
+        /// <summary>Logs a formatted message with severity Warning.</summary>
+        void Warning(string format, params object[] formatArgs);
 
         /// <summary>Logs a message and an associated exception with severity Warning.</summary>
-        void Warning(Exception exception, string message, params object[] formatArgs);
+        void Warning(Exception exception, string message);
 
         /// <summary>Logs a message with severity Error.</summary>
-        void Error(string message, params object[] formatArgs);
+        void Error(string message);
+
+        /// <summary>Logs a formatted message with severity Error.</summary>
+        void Error(string format, params object[] formatArgs);
 
         /// <summary>Logs a message and an associated exception with severity Error.</summary>
-        void Error(Exception exception, string message, params object[] formatArgs);
+        void Error(Exception exception, string message);
     }
 }
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
index 0884c6e..616093d 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
@@ -131,7 +131,7 @@
             var channel = new Channel(options.ServerHost, options.ServerPort, credentials, channelOptions);
             TestService.TestServiceClient client = new TestService.TestServiceClient(channel);
             await RunTestCaseAsync(client, options);
-            channel.ShutdownAsync().Wait();
+            await channel.ShutdownAsync();
         }
 
         private async Task RunTestCaseAsync(TestService.TestServiceClient client, ClientOptions options)
diff --git a/src/node/ext/byte_buffer.cc b/src/node/ext/byte_buffer.cc
index 7eff11c..fe7735d 100644
--- a/src/node/ext/byte_buffer.cc
+++ b/src/node/ext/byte_buffer.cc
@@ -77,7 +77,7 @@
     memcpy(result + offset, GPR_SLICE_START_PTR(next), GPR_SLICE_LENGTH(next));
     offset += GPR_SLICE_LENGTH(next);
   }
-  return NanEscapeScope(MakeFastBuffer(NanNewBufferHandle(result, length)));
+  return NanEscapeScope(MakeFastBuffer(NanBufferUse(result, length)));
 }
 
 Handle<Value> MakeFastBuffer(Handle<Value> slowBuffer) {
diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc
index 560869e..49b3062 100644
--- a/src/node/ext/call.cc
+++ b/src/node/ext/call.cc
@@ -172,6 +172,9 @@
   return NanEscapeScope(NanNew<String>(GetTypeString()));
 }
 
+Op::~Op() {
+}
+
 class SendMetadataOp : public Op {
  public:
   Handle<Value> GetNodeValue() const {
@@ -325,7 +328,7 @@
   }
   ~ReadMessageOp() {
     if (recv_message != NULL) {
-      gpr_free(recv_message);
+      grpc_byte_buffer_destroy(recv_message);
     }
   }
   Handle<Value> GetNodeValue() const {
diff --git a/src/node/ext/call.h b/src/node/ext/call.h
index 89f81dc..a01f034 100644
--- a/src/node/ext/call.h
+++ b/src/node/ext/call.h
@@ -88,6 +88,7 @@
 
 class Op {
  public:
+  virtual ~Op();
   virtual v8::Handle<v8::Value> GetNodeValue() const = 0;
   virtual bool ParseOp(v8::Handle<v8::Value> value, grpc_op *out,
                        shared_ptr<Resources> resources) = 0;
@@ -98,7 +99,6 @@
 };
 
 typedef std::vector<unique_ptr<Op>> OpVec;
-
 struct tag {
   tag(NanCallback *callback, OpVec *ops,
       shared_ptr<Resources> resources);
diff --git a/src/node/src/server.js b/src/node/src/server.js
index b6f162a..70b4a9d 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -276,6 +276,7 @@
 function _write(chunk, encoding, callback) {
   /* jshint validthis: true */
   var batch = {};
+  var self = this;
   if (!this.call.metadataSent) {
     batch[grpc.opType.SEND_INITIAL_METADATA] =
         (new Metadata())._getCoreRepresentation();
@@ -290,7 +291,7 @@
   batch[grpc.opType.SEND_MESSAGE] = message;
   this.call.startBatch(batch, function(err, value) {
     if (err) {
-      this.emit('error', err);
+      self.emit('error', err);
       return;
     }
     callback();
@@ -305,6 +306,7 @@
  */
 function sendMetadata(responseMetadata) {
   /* jshint validthis: true */
+  var self = this;
   if (!this.call.metadataSent) {
     this.call.metadataSent = true;
     var batch = [];
@@ -312,7 +314,7 @@
         responseMetadata._getCoreRepresentation();
     this.call.startBatch(batch, function(err) {
       if (err) {
-        this.emit('error', err);
+        self.emit('error', err);
         return;
       }
     });
diff --git a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.h b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.h
index 1391b57..cf5a1be 100644
--- a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.h
+++ b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.h
@@ -34,7 +34,7 @@
 #import <Foundation/Foundation.h>
 #include <grpc/grpc.h>
 
-#import "GRPCCall.h"
+#import "../GRPCCall.h"
 
 @interface GRPCRequestHeaders : NSObject<GRPCRequestHeaders>
 
diff --git a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m
index 761677c..d23f21c 100644
--- a/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m
+++ b/src/objective-c/GRPCClient/private/GRPCRequestHeaders.m
@@ -35,7 +35,6 @@
 
 #import <Foundation/Foundation.h>
 
-#import "../GRPCCall.h"
 #import "NSDictionary+GRPC.h"
 
 // Used by the setter.
diff --git a/src/python/grpcio/grpc/beta/implementations.py b/src/python/grpcio/grpc/beta/implementations.py
index 9b461fb..c9d64ad 100644
--- a/src/python/grpcio/grpc/beta/implementations.py
+++ b/src/python/grpcio/grpc/beta/implementations.py
@@ -147,7 +147,7 @@
     A secure Channel to the remote host through which RPCs may be conducted.
   """
   intermediary_low_channel = _intermediary_low.Channel(
-      '%s:%d' % (host, port), client_credentials.intermediary_low_credentials)
+      '%s:%d' % (host, port), client_credentials._intermediary_low_credentials)
   return Channel(intermediary_low_channel._internal, intermediary_low_channel)  # pylint: disable=protected-access
 
 
diff --git a/src/python/grpcio/requirements.txt b/src/python/grpcio/requirements.txt
index 608ba40..77356e0 100644
--- a/src/python/grpcio/requirements.txt
+++ b/src/python/grpcio/requirements.txt
@@ -1,2 +1,2 @@
-enum34==1.0.4
-futures==2.2.0
+enum34>=1.0.4
+futures>=2.2.0
diff --git a/src/python/grpcio/setup.py b/src/python/grpcio/setup.py
index 151b2bf..1288264 100644
--- a/src/python/grpcio/setup.py
+++ b/src/python/grpcio/setup.py
@@ -87,9 +87,8 @@
 }
 
 _INSTALL_REQUIRES = (
-    'enum34==1.0.4',
-    'futures==2.2.0',
-    'protobuf==3.0.0a3',
+    'enum34>=1.0.4',
+    'futures>=2.2.0',
 )
 
 _SETUP_REQUIRES = (
diff --git a/src/python/grpcio_test/setup.py b/src/python/grpcio_test/setup.py
index 216119f..fe36bc9 100644
--- a/src/python/grpcio_test/setup.py
+++ b/src/python/grpcio_test/setup.py
@@ -72,6 +72,8 @@
 _INSTALL_REQUIRES = (
     'oauth2client>=1.4.7',
     'grpcio>=0.11.0b0',
+    # TODO(issue 3321): Unpin protobuf dependency.
+    'protobuf==3.0.0a3',
 )
 
 _COMMAND_CLASS = {
diff --git a/templates/gRPC.podspec.template b/templates/gRPC.podspec.template
index 060961f..b1de0d7 100644
--- a/templates/gRPC.podspec.template
+++ b/templates/gRPC.podspec.template
@@ -63,17 +63,17 @@
   %>
   Pod::Spec.new do |s|
     s.name     = 'gRPC'
-    s.version  = '0.7.0'
+    s.version  = '0.11.0'
     s.summary  = 'gRPC client library for iOS/OSX'
     s.homepage = 'http://www.grpc.io'
     s.license  = 'New BSD'
     s.authors  = { 'The gRPC contributors' => 'grpc-packages@google.com' }
   
     # s.source = { :git => 'https://github.com/grpc/grpc.git',
-    #              :tag => 'release-0_10_0-objectivec-0.6.0' }
+    #              :tag => 'release-0_11_0-objectivec-0.11.0' }
   
-    s.ios.deployment_target = '6.0'
-    s.osx.deployment_target = '10.8'
+    s.ios.deployment_target = '7.1'
+    s.osx.deployment_target = '10.9'
     s.requires_arc = true
   
     objc_dir = 'src/objective-c'
@@ -152,6 +152,6 @@
   
       ss.dependency 'gRPC/GRPCClient'
       ss.dependency 'gRPC/RxLibrary'
-      ss.dependency 'Protobuf', '~> 3.0.0-alpha-3'
+      ss.dependency 'Protobuf', '~> 3.0.0-alpha-4'
     end
   end
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index a352341..5d592c8 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -766,6 +766,7 @@
 include/grpc++/create_channel.h \
 include/grpc++/generic/async_generic_service.h \
 include/grpc++/generic/generic_stub.h \
+include/grpc++/grpc++.h \
 include/grpc++/impl/call.h \
 include/grpc++/impl/client_unary_call.h \
 include/grpc++/impl/grpc_library.h \
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index dfaeb43..bbd1706 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -766,6 +766,7 @@
 include/grpc++/create_channel.h \
 include/grpc++/generic/async_generic_service.h \
 include/grpc++/generic/generic_stub.h \
+include/grpc++/grpc++.h \
 include/grpc++/impl/call.h \
 include/grpc++/impl/client_unary_call.h \
 include/grpc++/impl/grpc_library.h \
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 1774e56..c8a9c2d 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -13126,6 +13126,7 @@
       "include/grpc++/create_channel.h", 
       "include/grpc++/generic/async_generic_service.h", 
       "include/grpc++/generic/generic_stub.h", 
+      "include/grpc++/grpc++.h", 
       "include/grpc++/impl/call.h", 
       "include/grpc++/impl/client_unary_call.h", 
       "include/grpc++/impl/grpc_library.h", 
@@ -13178,6 +13179,7 @@
       "include/grpc++/create_channel.h", 
       "include/grpc++/generic/async_generic_service.h", 
       "include/grpc++/generic/generic_stub.h", 
+      "include/grpc++/grpc++.h", 
       "include/grpc++/impl/call.h", 
       "include/grpc++/impl/client_unary_call.h", 
       "include/grpc++/impl/grpc_library.h", 
@@ -13308,6 +13310,7 @@
       "include/grpc++/create_channel.h", 
       "include/grpc++/generic/async_generic_service.h", 
       "include/grpc++/generic/generic_stub.h", 
+      "include/grpc++/grpc++.h", 
       "include/grpc++/impl/call.h", 
       "include/grpc++/impl/client_unary_call.h", 
       "include/grpc++/impl/grpc_library.h", 
@@ -13357,6 +13360,7 @@
       "include/grpc++/create_channel.h", 
       "include/grpc++/generic/async_generic_service.h", 
       "include/grpc++/generic/generic_stub.h", 
+      "include/grpc++/grpc++.h", 
       "include/grpc++/impl/call.h", 
       "include/grpc++/impl/client_unary_call.h", 
       "include/grpc++/impl/grpc_library.h", 
diff --git a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj
index 7e8ed44..acb62ac 100644
--- a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj
+++ b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj
@@ -219,6 +219,7 @@
     <ClInclude Include="..\..\..\include\grpc++\create_channel.h" />
     <ClInclude Include="..\..\..\include\grpc++\generic\async_generic_service.h" />
     <ClInclude Include="..\..\..\include\grpc++\generic\generic_stub.h" />
+    <ClInclude Include="..\..\..\include\grpc++\grpc++.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\call.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\client_unary_call.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\grpc_library.h" />
diff --git a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
index 7ef391a..96effe2 100644
--- a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
+++ b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
@@ -102,6 +102,9 @@
     <ClInclude Include="..\..\..\include\grpc++\generic\generic_stub.h">
       <Filter>include\grpc++\generic</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\include\grpc++\grpc++.h">
+      <Filter>include\grpc++</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\include\grpc++\impl\call.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>
diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj
index 8b2d85d..3a7f559 100644
--- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj
+++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj
@@ -219,6 +219,7 @@
     <ClInclude Include="..\..\..\include\grpc++\create_channel.h" />
     <ClInclude Include="..\..\..\include\grpc++\generic\async_generic_service.h" />
     <ClInclude Include="..\..\..\include\grpc++\generic\generic_stub.h" />
+    <ClInclude Include="..\..\..\include\grpc++\grpc++.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\call.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\client_unary_call.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\grpc_library.h" />
diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
index 74712fe..7d9cd47 100644
--- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
@@ -117,6 +117,9 @@
     <ClInclude Include="..\..\..\include\grpc++\generic\generic_stub.h">
       <Filter>include\grpc++\generic</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\include\grpc++\grpc++.h">
+      <Filter>include\grpc++</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\include\grpc++\impl\call.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>
diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
index 7e8ed44..acb62ac 100644
--- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
@@ -219,6 +219,7 @@
     <ClInclude Include="..\..\..\include\grpc++\create_channel.h" />
     <ClInclude Include="..\..\..\include\grpc++\generic\async_generic_service.h" />
     <ClInclude Include="..\..\..\include\grpc++\generic\generic_stub.h" />
+    <ClInclude Include="..\..\..\include\grpc++\grpc++.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\call.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\client_unary_call.h" />
     <ClInclude Include="..\..\..\include\grpc++\impl\grpc_library.h" />
diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
index 7ef391a..96effe2 100644
--- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
@@ -102,6 +102,9 @@
     <ClInclude Include="..\..\..\include\grpc++\generic\generic_stub.h">
       <Filter>include\grpc++\generic</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\include\grpc++\grpc++.h">
+      <Filter>include\grpc++</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\include\grpc++\impl\call.h">
       <Filter>include\grpc++\impl</Filter>
     </ClInclude>