diff --git a/examples/src/main/java/com/google/net/stubby/examples/MathClient.java b/examples/src/main/java/com/google/net/stubby/examples/MathClient.java
index 588186b..a62747b 100644
--- a/examples/src/main/java/com/google/net/stubby/examples/MathClient.java
+++ b/examples/src/main/java/com/google/net/stubby/examples/MathClient.java
@@ -13,10 +13,9 @@
 import com.google.protos.net.stubby.examples.Math.FibArgs;
 import com.google.protos.net.stubby.examples.Math.Num;
 
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Random;
-import java.util.Set;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.logging.Level;
@@ -144,26 +143,41 @@
   }
 
   /**
-   * This example shows how to make a blocking client streaming call.
-   *
-   * <p> The asynchronous usage is similar to {@link #divMany}.
+   * This example shows how to make a client streaming call.
    */
-  public void blockingSum() {
-    logger.info("*** Blocking Sum");
+  public void sum() throws Exception {
+    final CountDownLatch completed = new CountDownLatch(1);
+    logger.info("*** Sum");
     int count = 5;
-    Set<Num> numSet = new HashSet<Num>();
+    StreamObserver<Num> responseObserver = new StreamObserver<Num>() {
+      @Override
+      public void onValue(Num value) {
+        logger.info("Sum=" + value);
+      }
+
+      @Override
+      public void onError(Throwable t) {
+        logger.log(Level.SEVERE, "Error receiving response", t);
+      }
+
+      @Override
+      public void onCompleted() {
+        completed.countDown();
+      }
+    };
+    StreamObserver<Num> requestObserver = asyncStub.sum(responseObserver);
     StringBuilder numMsg = new StringBuilder();
     for (int i = 0; i < count; i++) {
       int value = rand.nextInt();
-      numSet.add(Num.newBuilder().setNum(value).build());
+      requestObserver.onValue(Num.newBuilder().setNum(value).build());
       numMsg.append(value);
       if (i != count - 1) {
         numMsg.append(" + ");
       }
     }
     logger.info(numMsg.toString());
-    Num reply = blockingStub.sum(numSet.iterator());
-    logger.info("Result: " + numMsg.toString() + " = " + reply.getNum());
+    requestObserver.onCompleted();
+    completed.await();
   }
 
   /**
@@ -196,7 +210,7 @@
       client.blockingDiv(73, 0);
       client.asyncDiv(1986, 12);
       client.divMany();
-      client.blockingSum();
+      client.sum();
       client.blockingFib();
     } finally {
       client.shutdown();
diff --git a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java b/integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java
index effdaf9..d2189e1 100644
--- a/integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java
+++ b/integration-testing/src/main/java/com/google/net/stubby/testing/integration/AbstractTransportTest.java
@@ -189,7 +189,14 @@
         .setAggregatedPayloadSize(74922)
         .build();
 
-    assertEquals(goldenResponse, blockingStub.streamingInputCall(requests.iterator()));
+    StreamRecorder<StreamingInputCallResponse> responseObserver = StreamRecorder.create();
+    StreamObserver<StreamingInputCallRequest> requestObserver =
+        asyncStub.streamingInputCall(responseObserver);
+    for (StreamingInputCallRequest request : requests) {
+      requestObserver.onValue(request);
+    }
+    requestObserver.onCompleted();
+    assertEquals(goldenResponse, responseObserver.firstValue().get());
   }
 
   @Test(timeout=5000)
@@ -303,7 +310,7 @@
 
     StreamRecorder<StreamingOutputCallResponse> recorder = StreamRecorder.create();
     StreamObserver<StreamingOutputCallRequest> requestStream =
-        blockingStub.fullDuplexCall(recorder);
+        asyncStub.fullDuplexCall(recorder);
 
     final int numRequests = 10;
     for (int ix = numRequests; ix > 0; --ix) {
@@ -465,8 +472,7 @@
   @org.junit.Test
   public void exchangeContextStreamingCall() throws Exception {
     Assume.assumeTrue(AbstractStream.GRPC_V2_PROTOCOL);
-    TestServiceGrpc.TestServiceBlockingStub stub =
-        TestServiceGrpc.newBlockingStub(channel);
+    TestServiceGrpc.TestServiceStub stub = TestServiceGrpc.newStub(channel);
 
     // Capture the context exchange
     Metadata.Headers fixedHeaders = new Metadata.Headers();
diff --git a/lib/libtest_proto_grpc.jar b/lib/libtest_proto_grpc.jar
index 9bccc61..a6cecec 100644
--- a/lib/libtest_proto_grpc.jar
+++ b/lib/libtest_proto_grpc.jar
Binary files differ
