Merge remote-tracking branch 'upstream/master' into pubsub
diff --git a/.travis.yml b/.travis.yml
index d770e72..de320b5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,14 +1,23 @@
 language: cpp
 before_install:
   - sudo add-apt-repository ppa:yjwong/gflags -y
+  - sudo add-apt-repository ppa:h-rayflood/llvm -y
   - sudo apt-get update -qq
-  - sudo apt-get install -qq libgtest-dev libgflags-dev python-virtualenv
+  - sudo apt-get install -qq libgtest-dev libgflags-dev python-virtualenv clang-3.5
+env:
+  global:
+    - RUBY_VERSION=2.1
+  matrix:
+    - CONFIG=dbg TEST=c
+    - CONFIG=dbg TEST=c++
+    - CONFIG=opt TEST=c
+    - CONFIG=opt TEST=c++
+    - CONFIG=opt TEST=node
+    - CONFIG=opt TEST=ruby
+    - CONFIG=opt TEST=python
 script:
-  - ./tools/run_tests/run_tests.py -l c -t -j 16 -c dbg -s 2.0
-  - ./tools/run_tests/run_tests.py -l c++ -t -j 16 -c dbg -s 2.0
-  - make clean
-  - ./tools/run_tests/run_tests.py -l c -t -j 16 -c opt -s 2.0
-  - ./tools/run_tests/run_tests.py -l c++ -t -j 16 -c opt -s 2.0
-  - ./tools/run_tests/run_tests.py -l node -t -j 16 -c opt
+  - rvm use $RUBY_VERSION
+  - gem install bundler
+  - ./tools/run_tests/run_tests.py -l $TEST -t -j 16 -c $CONFIG -s 4.0
 notifications:
-  email: false
+  email: false
\ No newline at end of file
diff --git a/Makefile b/Makefile
index c850ec7..ace93ea 100644
--- a/Makefile
+++ b/Makefile
@@ -545,7 +545,9 @@
 pubsub_publisher_test: $(BINDIR)/$(CONFIG)/pubsub_publisher_test
 pubsub_subscriber_test: $(BINDIR)/$(CONFIG)/pubsub_subscriber_test
 qps_client: $(BINDIR)/$(CONFIG)/qps_client
+qps_client_async: $(BINDIR)/$(CONFIG)/qps_client_async
 qps_server: $(BINDIR)/$(CONFIG)/qps_server
+qps_server_async: $(BINDIR)/$(CONFIG)/qps_server_async
 status_test: $(BINDIR)/$(CONFIG)/status_test
 thread_pool_test: $(BINDIR)/$(CONFIG)/thread_pool_test
 chttp2_fake_security_cancel_after_accept_test: $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test
@@ -958,7 +960,7 @@
 
 buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/census_hash_table_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_circular_buffer_test $(BINDIR)/$(CONFIG)/census_statistics_multiple_writers_test $(BINDIR)/$(CONFIG)/census_statistics_performance_test $(BINDIR)/$(CONFIG)/census_statistics_quick_test $(BINDIR)/$(CONFIG)/census_statistics_small_log_test $(BINDIR)/$(CONFIG)/census_stub_test $(BINDIR)/$(CONFIG)/census_window_stats_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/chttp2_transport_end2end_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/echo_client $(BINDIR)/$(CONFIG)/echo_server $(BINDIR)/$(CONFIG)/echo_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cancellable_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/metadata_buffer_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/poll_kick_posix_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/time_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_writes_done_hangs_with_pending_read_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_disappearing_server_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_delayed_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_thread_stress_legacy_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_writes_done_hangs_with_pending_read_legacy_test
 
-buildtests_cxx: privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/pubsub_client $(BINDIR)/$(CONFIG)/pubsub_publisher_test $(BINDIR)/$(CONFIG)/pubsub_subscriber_test $(BINDIR)/$(CONFIG)/qps_client $(BINDIR)/$(CONFIG)/qps_server $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/thread_pool_test
+buildtests_cxx: privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/pubsub_client $(BINDIR)/$(CONFIG)/pubsub_publisher_test $(BINDIR)/$(CONFIG)/pubsub_subscriber_test $(BINDIR)/$(CONFIG)/qps_client $(BINDIR)/$(CONFIG)/qps_client_async $(BINDIR)/$(CONFIG)/qps_server $(BINDIR)/$(CONFIG)/qps_server_async $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/thread_pool_test
 
 test: test_c test_cxx
 
@@ -2113,7 +2115,7 @@
 	@echo "Your system looks ready to go."
 	@echo
 else
-	@echo "Your system doesn't have protoc 3.0.0+ installed. While this"
+	@echo "We couldn't find protoc 3.0.0+ installed on your system. While this"
 	@echo "won't prevent grpc from working, you won't be able to compile"
 	@echo "and run any meaningful code with it."
 	@echo
@@ -2122,7 +2124,8 @@
 	@echo
 	@echo "   https://github.com/google/protobuf/releases"
 	@echo
-	@echo "Once you've done so, you can re-run this check by doing:"
+	@echo "Once you've done so, or if you think this message is in error,"
+	@echo "you can re-run this check by doing:"
 	@echo
 	@echo "   make verify-install"
 endif
@@ -2201,7 +2204,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBGPR_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr.a
 endif
 
 
@@ -2292,7 +2295,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgpr_test_util.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBGPR_TEST_UTIL_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr_test_util.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgpr_test_util.a
 endif
 
 
@@ -2326,6 +2329,7 @@
     src/core/security/secure_transport_setup.c \
     src/core/security/security_context.c \
     src/core/security/server_secure_chttp2.c \
+    src/core/surface/init_secure.c \
     src/core/surface/secure_channel_create.c \
     src/core/surface/secure_server_create.c \
     src/core/tsi/fake_transport_security.c \
@@ -2405,6 +2409,7 @@
     src/core/surface/server.c \
     src/core/surface/server_chttp2.c \
     src/core/surface/server_create.c \
+    src/core/surface/surface_trace.c \
     src/core/transport/chttp2/alpn.c \
     src/core/transport/chttp2/bin_encoder.c \
     src/core/transport/chttp2/frame_data.c \
@@ -2470,6 +2475,7 @@
 src/core/security/secure_transport_setup.c: $(OPENSSL_DEP)
 src/core/security/security_context.c: $(OPENSSL_DEP)
 src/core/security/server_secure_chttp2.c: $(OPENSSL_DEP)
+src/core/surface/init_secure.c: $(OPENSSL_DEP)
 src/core/surface/secure_channel_create.c: $(OPENSSL_DEP)
 src/core/surface/secure_server_create.c: $(OPENSSL_DEP)
 src/core/tsi/fake_transport_security.c: $(OPENSSL_DEP)
@@ -2549,6 +2555,7 @@
 src/core/surface/server.c: $(OPENSSL_DEP)
 src/core/surface/server_chttp2.c: $(OPENSSL_DEP)
 src/core/surface/server_create.c: $(OPENSSL_DEP)
+src/core/surface/surface_trace.c: $(OPENSSL_DEP)
 src/core/transport/chttp2/alpn.c: $(OPENSSL_DEP)
 src/core/transport/chttp2/bin_encoder.c: $(OPENSSL_DEP)
 src/core/transport/chttp2/frame_data.c: $(OPENSSL_DEP)
@@ -2584,7 +2591,7 @@
 	$(Q) ar rcs $(LIBDIR)/$(CONFIG)/libgrpc.a tmp-merge/*
 	$(Q) rm -rf tmp-merge
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc.a
 endif
 
 
@@ -2631,6 +2638,7 @@
 $(OBJDIR)/$(CONFIG)/src/core/security/secure_transport_setup.o: 
 $(OBJDIR)/$(CONFIG)/src/core/security/security_context.o: 
 $(OBJDIR)/$(CONFIG)/src/core/security/server_secure_chttp2.o: 
+$(OBJDIR)/$(CONFIG)/src/core/surface/init_secure.o: 
 $(OBJDIR)/$(CONFIG)/src/core/surface/secure_channel_create.o: 
 $(OBJDIR)/$(CONFIG)/src/core/surface/secure_server_create.o: 
 $(OBJDIR)/$(CONFIG)/src/core/tsi/fake_transport_security.o: 
@@ -2710,6 +2718,7 @@
 $(OBJDIR)/$(CONFIG)/src/core/surface/server.o: 
 $(OBJDIR)/$(CONFIG)/src/core/surface/server_chttp2.o: 
 $(OBJDIR)/$(CONFIG)/src/core/surface/server_create.o: 
+$(OBJDIR)/$(CONFIG)/src/core/surface/surface_trace.o: 
 $(OBJDIR)/$(CONFIG)/src/core/transport/chttp2/alpn.o: 
 $(OBJDIR)/$(CONFIG)/src/core/transport/chttp2/bin_encoder.o: 
 $(OBJDIR)/$(CONFIG)/src/core/transport/chttp2/frame_data.o: 
@@ -2781,7 +2790,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBGRPC_TEST_UTIL_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a
 endif
 
 
@@ -2809,6 +2818,7 @@
 
 
 LIBGRPC_UNSECURE_SRC = \
+    src/core/surface/init_unsecure.c \
     src/core/channel/call_op_string.c \
     src/core/channel/census_filter.c \
     src/core/channel/channel_args.c \
@@ -2883,6 +2893,7 @@
     src/core/surface/server.c \
     src/core/surface/server_chttp2.c \
     src/core/surface/server_create.c \
+    src/core/surface/surface_trace.c \
     src/core/transport/chttp2/alpn.c \
     src/core/transport/chttp2/bin_encoder.c \
     src/core/transport/chttp2/frame_data.c \
@@ -2918,7 +2929,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a $(LIBGRPC_UNSECURE_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_unsecure.a
 endif
 
 
@@ -2945,6 +2956,7 @@
 -include $(LIBGRPC_UNSECURE_OBJS:.o=.dep)
 endif
 
+$(OBJDIR)/$(CONFIG)/src/core/surface/init_unsecure.o: 
 $(OBJDIR)/$(CONFIG)/src/core/channel/call_op_string.o: 
 $(OBJDIR)/$(CONFIG)/src/core/channel/census_filter.o: 
 $(OBJDIR)/$(CONFIG)/src/core/channel/channel_args.o: 
@@ -3019,6 +3031,7 @@
 $(OBJDIR)/$(CONFIG)/src/core/surface/server.o: 
 $(OBJDIR)/$(CONFIG)/src/core/surface/server_chttp2.o: 
 $(OBJDIR)/$(CONFIG)/src/core/surface/server_create.o: 
+$(OBJDIR)/$(CONFIG)/src/core/surface/surface_trace.o: 
 $(OBJDIR)/$(CONFIG)/src/core/transport/chttp2/alpn.o: 
 $(OBJDIR)/$(CONFIG)/src/core/transport/chttp2/bin_encoder.o: 
 $(OBJDIR)/$(CONFIG)/src/core/transport/chttp2/frame_data.o: 
@@ -3145,7 +3158,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBGRPC++_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++.a
 endif
 
 
@@ -3241,7 +3254,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBGRPC++_TEST_UTIL_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a
 endif
 
 
@@ -3308,7 +3321,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBPUBSUB_CLIENT_LIB_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a
 endif
 
 
@@ -3365,7 +3378,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a $(LIBGRPC_CSHARP_EXT_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.a
 endif
 
 
@@ -3428,7 +3441,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a $(LIBEND2END_FIXTURE_CHTTP2_FAKE_SECURITY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fake_security.a
 endif
 
 
@@ -3474,7 +3487,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack.a
 endif
 
 
@@ -3520,7 +3533,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack_uds.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack_uds.a $(LIBEND2END_FIXTURE_CHTTP2_FULLSTACK_UDS_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack_uds.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_fullstack_uds.a
 endif
 
 
@@ -3566,7 +3579,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_FULLSTACK_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_fullstack.a
 endif
 
 
@@ -3612,7 +3625,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a $(LIBEND2END_FIXTURE_CHTTP2_SIMPLE_SSL_WITH_OAUTH2_FULLSTACK_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.a
 endif
 
 
@@ -3658,7 +3671,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair.a
 endif
 
 
@@ -3704,7 +3717,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a $(LIBEND2END_FIXTURE_CHTTP2_SOCKET_PAIR_ONE_BYTE_AT_A_TIME_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_fixture_chttp2_socket_pair_one_byte_at_a_time.a
 endif
 
 
@@ -3733,7 +3746,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept.a $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept.a
 endif
 
 
@@ -3758,7 +3771,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed.a
 endif
 
 
@@ -3783,7 +3796,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke.a $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke.a
 endif
 
 
@@ -3808,7 +3821,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke.a $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke.a
 endif
 
 
@@ -3833,7 +3846,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum.a
 endif
 
 
@@ -3858,7 +3871,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request.a $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request.a
 endif
 
 
@@ -3883,7 +3896,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server.a $(LIBEND2END_TEST_DISAPPEARING_SERVER_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server.a
 endif
 
 
@@ -3908,7 +3921,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls.a
 endif
 
 
@@ -3933,7 +3946,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags.a
 endif
 
 
@@ -3958,7 +3971,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_empty_batch.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_empty_batch.a $(LIBEND2END_TEST_EMPTY_BATCH_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_empty_batch.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_empty_batch.a
 endif
 
 
@@ -3983,7 +3996,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown.a $(LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown.a
 endif
 
 
@@ -4008,7 +4021,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request.a $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request.a
 endif
 
 
@@ -4033,7 +4046,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams.a $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams.a
 endif
 
 
@@ -4058,7 +4071,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_no_op.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_no_op.a $(LIBEND2END_TEST_NO_OP_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_no_op.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_no_op.a
 endif
 
 
@@ -4083,7 +4096,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming.a $(LIBEND2END_TEST_PING_PONG_STREAMING_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming.a
 endif
 
 
@@ -4108,7 +4121,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload.a
 endif
 
 
@@ -4133,7 +4146,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload.a
 endif
 
 
@@ -4158,7 +4171,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload.a
 endif
 
 
@@ -4183,7 +4196,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata.a $(LIBEND2END_TEST_REQUEST_WITH_LARGE_METADATA_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata.a
 endif
 
 
@@ -4208,7 +4221,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload.a $(LIBEND2END_TEST_REQUEST_WITH_PAYLOAD_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload.a
 endif
 
 
@@ -4233,7 +4246,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request.a $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request.a
 endif
 
 
@@ -4258,7 +4271,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request.a $(LIBEND2END_TEST_SIMPLE_REQUEST_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request.a
 endif
 
 
@@ -4283,7 +4296,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress.a $(LIBEND2END_TEST_THREAD_STRESS_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress.a
 endif
 
 
@@ -4308,7 +4321,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read.a
 endif
 
 
@@ -4333,7 +4346,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_legacy.a $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_legacy.a
 endif
 
 
@@ -4358,7 +4371,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed_legacy.a $(LIBEND2END_TEST_CANCEL_AFTER_ACCEPT_AND_WRITES_CLOSED_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_accept_and_writes_closed_legacy.a
 endif
 
 
@@ -4383,7 +4396,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke_legacy.a $(LIBEND2END_TEST_CANCEL_AFTER_INVOKE_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_after_invoke_legacy.a
 endif
 
 
@@ -4408,7 +4421,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke_legacy.a $(LIBEND2END_TEST_CANCEL_BEFORE_INVOKE_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_before_invoke_legacy.a
 endif
 
 
@@ -4433,7 +4446,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum_legacy.a $(LIBEND2END_TEST_CANCEL_IN_A_VACUUM_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_cancel_in_a_vacuum_legacy.a
 endif
 
 
@@ -4458,7 +4471,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request_legacy.a $(LIBEND2END_TEST_CENSUS_SIMPLE_REQUEST_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_census_simple_request_legacy.a
 endif
 
 
@@ -4483,7 +4496,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server_legacy.a $(LIBEND2END_TEST_DISAPPEARING_SERVER_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_disappearing_server_legacy.a
 endif
 
 
@@ -4508,7 +4521,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls_legacy.a $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_INFLIGHT_CALLS_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_inflight_calls_legacy.a
 endif
 
 
@@ -4533,7 +4546,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags_legacy.a $(LIBEND2END_TEST_EARLY_SERVER_SHUTDOWN_FINISHES_TAGS_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_early_server_shutdown_finishes_tags_legacy.a
 endif
 
 
@@ -4558,7 +4571,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown_legacy.a $(LIBEND2END_TEST_GRACEFUL_SERVER_SHUTDOWN_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_graceful_server_shutdown_legacy.a
 endif
 
 
@@ -4583,7 +4596,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request_legacy.a $(LIBEND2END_TEST_INVOKE_LARGE_REQUEST_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_invoke_large_request_legacy.a
 endif
 
 
@@ -4608,7 +4621,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams_legacy.a $(LIBEND2END_TEST_MAX_CONCURRENT_STREAMS_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_max_concurrent_streams_legacy.a
 endif
 
 
@@ -4633,7 +4646,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_no_op_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_no_op_legacy.a $(LIBEND2END_TEST_NO_OP_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_no_op_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_no_op_legacy.a
 endif
 
 
@@ -4658,7 +4671,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming_legacy.a $(LIBEND2END_TEST_PING_PONG_STREAMING_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_ping_pong_streaming_legacy.a
 endif
 
 
@@ -4683,7 +4696,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload_legacy.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_BINARY_METADATA_AND_PAYLOAD_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_binary_metadata_and_payload_legacy.a
 endif
 
 
@@ -4708,7 +4721,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload_legacy.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_METADATA_AND_PAYLOAD_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_metadata_and_payload_legacy.a
 endif
 
 
@@ -4733,7 +4746,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload_legacy.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_PAYLOAD_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_payload_legacy.a
 endif
 
 
@@ -4758,7 +4771,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload_legacy.a $(LIBEND2END_TEST_REQUEST_RESPONSE_WITH_TRAILING_METADATA_AND_PAYLOAD_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_response_with_trailing_metadata_and_payload_legacy.a
 endif
 
 
@@ -4783,7 +4796,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata_legacy.a $(LIBEND2END_TEST_REQUEST_WITH_LARGE_METADATA_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_large_metadata_legacy.a
 endif
 
 
@@ -4808,7 +4821,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload_legacy.a $(LIBEND2END_TEST_REQUEST_WITH_PAYLOAD_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_request_with_payload_legacy.a
 endif
 
 
@@ -4833,7 +4846,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request_legacy.a $(LIBEND2END_TEST_SIMPLE_DELAYED_REQUEST_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_delayed_request_legacy.a
 endif
 
 
@@ -4858,7 +4871,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request_legacy.a $(LIBEND2END_TEST_SIMPLE_REQUEST_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_simple_request_legacy.a
 endif
 
 
@@ -4883,7 +4896,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress_legacy.a $(LIBEND2END_TEST_THREAD_STRESS_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_thread_stress_legacy.a
 endif
 
 
@@ -4908,7 +4921,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read_legacy.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read_legacy.a $(LIBEND2END_TEST_WRITES_DONE_HANGS_WITH_PENDING_READ_LEGACY_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read_legacy.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_test_writes_done_hangs_with_pending_read_legacy.a
 endif
 
 
@@ -4954,7 +4967,7 @@
 	$(Q) rm -f $(LIBDIR)/$(CONFIG)/libend2end_certs.a
 	$(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libend2end_certs.a $(LIBEND2END_CERTS_OBJS)
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_certs.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/libend2end_certs.a
 endif
 
 
@@ -8060,6 +8073,50 @@
 endif
 
 
+QPS_CLIENT_ASYNC_SRC = \
+    $(GENDIR)/test/cpp/qps/qpstest.pb.cc \
+    test/cpp/qps/client_async.cc \
+
+QPS_CLIENT_ASYNC_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_CLIENT_ASYNC_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/qps_client_async: openssl_dep_error
+
+else
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/qps_client_async: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/qps_client_async: $(PROTOBUF_DEP) $(QPS_CLIENT_ASYNC_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LDXX) $(LDFLAGS) $(QPS_CLIENT_ASYNC_OBJS) $(GTEST_LIB) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/qps_client_async
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/qpstest.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/client_async.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_qps_client_async: $(QPS_CLIENT_ASYNC_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(QPS_CLIENT_ASYNC_OBJS:.o=.dep)
+endif
+endif
+
+
 QPS_SERVER_SRC = \
     $(GENDIR)/test/cpp/qps/qpstest.pb.cc \
     test/cpp/qps/server.cc \
@@ -8104,6 +8161,50 @@
 endif
 
 
+QPS_SERVER_ASYNC_SRC = \
+    $(GENDIR)/test/cpp/qps/qpstest.pb.cc \
+    test/cpp/qps/server_async.cc \
+
+QPS_SERVER_ASYNC_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(QPS_SERVER_ASYNC_SRC))))
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL with ALPN.
+
+$(BINDIR)/$(CONFIG)/qps_server_async: openssl_dep_error
+
+else
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/qps_server_async: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/qps_server_async: $(PROTOBUF_DEP) $(QPS_SERVER_ASYNC_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+	$(E) "[LD]      Linking $@"
+	$(Q) mkdir -p `dirname $@`
+	$(Q) $(LDXX) $(LDFLAGS) $(QPS_SERVER_ASYNC_OBJS) $(GTEST_LIB) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/qps_server_async
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/qpstest.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/qps/server_async.o:  $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_qps_server_async: $(QPS_SERVER_ASYNC_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(QPS_SERVER_ASYNC_OBJS:.o=.dep)
+endif
+endif
+
+
 STATUS_TEST_SRC = \
     test/cpp/util/status_test.cc \
 
@@ -17937,4 +18038,3 @@
 
 
 .PHONY: all strip tools dep_error openssl_dep_error openssl_dep_message git_update stop buildtests buildtests_c buildtests_cxx test test_c test_cxx install install_c install_cxx install-headers install-headers_c install-headers_cxx install-shared install-shared_c install-shared_cxx install-static install-static_c install-static_cxx strip strip-shared strip-static strip_c strip-shared_c strip-static_c strip_cxx strip-shared_cxx strip-static_cxx dep_c dep_cxx bins_dep_c bins_dep_cxx clean
-
diff --git a/build.json b/build.json
index e9096a2..a25241c 100644
--- a/build.json
+++ b/build.json
@@ -79,6 +79,7 @@
         "src/core/surface/client.h",
         "src/core/surface/completion_queue.h",
         "src/core/surface/event_string.h",
+        "src/core/surface/init.h",
         "src/core/surface/lame_client.h",
         "src/core/surface/server.h",
         "src/core/surface/surface_trace.h",
@@ -180,6 +181,7 @@
         "src/core/surface/server.c",
         "src/core/surface/server_chttp2.c",
         "src/core/surface/server_create.c",
+        "src/core/surface/surface_trace.c",
         "src/core/transport/chttp2/alpn.c",
         "src/core/transport/chttp2/bin_encoder.c",
         "src/core/transport/chttp2/frame_data.c",
@@ -329,6 +331,7 @@
         "src/core/security/secure_transport_setup.c",
         "src/core/security/security_context.c",
         "src/core/security/server_secure_chttp2.c",
+        "src/core/surface/init_secure.c",
         "src/core/surface/secure_channel_create.c",
         "src/core/surface/secure_server_create.c",
         "src/core/tsi/fake_transport_security.c",
@@ -372,6 +375,9 @@
       "name": "grpc_unsecure",
       "build": "all",
       "language": "c",
+      "src": [
+        "src/core/surface/init_unsecure.c"
+      ],
       "deps": [
         "gpr"
       ],
@@ -572,6 +578,7 @@
     },
     {
       "name": "census_statistics_multiple_writers_circular_buffer_test",
+      "flaky": true,
       "build": "test",
       "language": "c",
       "src": [
@@ -628,6 +635,7 @@
     },
     {
       "name": "census_statistics_small_log_test",
+      "flaky": true,
       "build": "test",
       "language": "c",
       "src": [
@@ -866,8 +874,7 @@
         "grpc",
         "gpr_test_util",
         "gpr"
-      ],
-      "flaky": true
+      ]
     },
     {
       "name": "fling_test",
@@ -881,8 +888,7 @@
         "grpc",
         "gpr_test_util",
         "gpr"
-      ],
-      "flaky": true
+      ]
     },
     {
       "name": "gen_hpack_tables",
@@ -1817,6 +1823,24 @@
       ]
     },
     {
+      "name": "qps_client_async",
+      "build": "test",
+      "run": false,
+      "language": "c++",
+      "src": [
+        "test/cpp/qps/qpstest.proto",
+        "test/cpp/qps/client_async.cc"
+      ],
+      "deps": [
+        "grpc++_test_util",
+        "grpc_test_util",
+        "grpc++",
+        "grpc",
+        "gpr_test_util",
+        "gpr"
+      ]
+    },
+    {
       "name": "qps_server",
       "build": "test",
       "run": false,
@@ -1835,6 +1859,24 @@
       ]
     },
     {
+      "name": "qps_server_async",
+      "build": "test",
+      "run": false,
+      "language": "c++",
+      "src": [
+        "test/cpp/qps/qpstest.proto",
+        "test/cpp/qps/server_async.cc"
+      ],
+      "deps": [
+        "grpc++_test_util",
+        "grpc_test_util",
+        "grpc++",
+        "grpc",
+        "gpr_test_util",
+        "gpr"
+      ]
+    },
+    {
       "name": "status_test",
       "build": "test",
       "language": "c++",
diff --git a/examples/pubsub/publisher.h b/examples/pubsub/publisher.h
index 2d64a2a..c90406f 100644
--- a/examples/pubsub/publisher.h
+++ b/examples/pubsub/publisher.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_EXAMPLES_PUBSUB_PUBLISHER_H_
-#define __GRPCPP_EXAMPLES_PUBSUB_PUBLISHER_H_
+#ifndef GRPC_EXAMPLES_PUBSUB_PUBLISHER_H
+#define GRPC_EXAMPLES_PUBSUB_PUBLISHER_H
 
 #include <grpc++/channel_interface.h>
 #include <grpc++/status.h>
@@ -64,4 +64,4 @@
 }  // namespace examples
 }  // namespace grpc
 
-#endif  // __GRPCPP_EXAMPLES_PUBSUB_PUBLISHER_H_
+#endif  // GRPC_EXAMPLES_PUBSUB_PUBLISHER_H
diff --git a/examples/pubsub/subscriber.h b/examples/pubsub/subscriber.h
index a973cd7..c587c01 100644
--- a/examples/pubsub/subscriber.h
+++ b/examples/pubsub/subscriber.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_EXAMPLES_PUBSUB_SUBSCRIBER_H_
-#define __GRPCPP_EXAMPLES_PUBSUB_SUBSCRIBER_H_
+#ifndef GRPC_EXAMPLES_PUBSUB_SUBSCRIBER_H
+#define GRPC_EXAMPLES_PUBSUB_SUBSCRIBER_H
 
 #include <grpc++/channel_interface.h>
 #include <grpc++/status.h>
@@ -65,4 +65,4 @@
 }  // namespace examples
 }  // namespace grpc
 
-#endif  // __GRPCPP_EXAMPLES_PUBSUB_SUBSCRIBER_H_
+#endif  // GRPC_EXAMPLES_PUBSUB_SUBSCRIBER_H
diff --git a/include/grpc++/async_unary_call.h b/include/grpc++/async_unary_call.h
index ccd0806..71b7d3f 100644
--- a/include/grpc++/async_unary_call.h
+++ b/include/grpc++/async_unary_call.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_ASYNC_UNARY_CALL_H__
-#define __GRPCPP_ASYNC_UNARY_CALL_H__
+#ifndef GRPCXX_ASYNC_UNARY_CALL_H
+#define GRPCXX_ASYNC_UNARY_CALL_H
 
 #include <grpc++/channel_interface.h>
 #include <grpc++/client_context.h>
@@ -138,4 +138,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_ASYNC_UNARY_CALL_H__
+#endif  // GRPCXX_ASYNC_UNARY_CALL_H
diff --git a/include/grpc++/channel_arguments.h b/include/grpc++/channel_arguments.h
index 75c3cf4..ad96ef1 100644
--- a/include/grpc++/channel_arguments.h
+++ b/include/grpc++/channel_arguments.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CHANNEL_ARGUMENTS_H_
-#define __GRPCPP_CHANNEL_ARGUMENTS_H_
+#ifndef GRPCXX_CHANNEL_ARGUMENTS_H
+#define GRPCXX_CHANNEL_ARGUMENTS_H
 
 #include <vector>
 #include <list>
@@ -82,4 +82,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CHANNEL_ARGUMENTS_H_
+#endif  // GRPCXX_CHANNEL_ARGUMENTS_H
diff --git a/include/grpc++/channel_interface.h b/include/grpc++/channel_interface.h
index 890fd04..77d1363 100644
--- a/include/grpc++/channel_interface.h
+++ b/include/grpc++/channel_interface.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CHANNEL_INTERFACE_H__
-#define __GRPCPP_CHANNEL_INTERFACE_H__
+#ifndef GRPCXX_CHANNEL_INTERFACE_H
+#define GRPCXX_CHANNEL_INTERFACE_H
 
 #include <grpc++/status.h>
 #include <grpc++/impl/call.h>
@@ -63,4 +63,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CHANNEL_INTERFACE_H__
+#endif  // GRPCXX_CHANNEL_INTERFACE_H
diff --git a/include/grpc++/client_context.h b/include/grpc++/client_context.h
index c5a213e..87e5e9a 100644
--- a/include/grpc++/client_context.h
+++ b/include/grpc++/client_context.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CLIENT_CONTEXT_H__
-#define __GRPCPP_CLIENT_CONTEXT_H__
+#ifndef GRPCXX_CLIENT_CONTEXT_H
+#define GRPCXX_CLIENT_CONTEXT_H
 
 #include <chrono>
 #include <map>
@@ -151,4 +151,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CLIENT_CONTEXT_H__
+#endif  // GRPCXX_CLIENT_CONTEXT_H
diff --git a/include/grpc++/completion_queue.h b/include/grpc++/completion_queue.h
index 0075482..0ca1260 100644
--- a/include/grpc++/completion_queue.h
+++ b/include/grpc++/completion_queue.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_COMPLETION_QUEUE_H__
-#define __GRPCPP_COMPLETION_QUEUE_H__
+#ifndef GRPCXX_COMPLETION_QUEUE_H
+#define GRPCXX_COMPLETION_QUEUE_H
 
 #include <grpc++/impl/client_unary_call.h>
 
@@ -121,4 +121,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_COMPLETION_QUEUE_H__
+#endif  // GRPCXX_COMPLETION_QUEUE_H
diff --git a/include/grpc++/config.h b/include/grpc++/config.h
index 323ea28..cfa8d3b 100644
--- a/include/grpc++/config.h
+++ b/include/grpc++/config.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CONFIG_H__
-#define __GRPCPP_CONFIG_H__
+#ifndef GRPCXX_CONFIG_H
+#define GRPCXX_CONFIG_H
 
 #include <string>
 
@@ -50,4 +50,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CONFIG_H__
+#endif  // GRPCXX_CONFIG_H
diff --git a/include/grpc++/create_channel.h b/include/grpc++/create_channel.h
index 80ca0c4..3f13188 100644
--- a/include/grpc++/create_channel.h
+++ b/include/grpc++/create_channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CREATE_CHANNEL_H__
-#define __GRPCPP_CREATE_CHANNEL_H__
+#ifndef GRPCXX_CREATE_CHANNEL_H
+#define GRPCXX_CREATE_CHANNEL_H
 
 #include <memory>
 
@@ -55,4 +55,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CREATE_CHANNEL_H__
+#endif  // GRPCXX_CREATE_CHANNEL_H
diff --git a/include/grpc++/credentials.h b/include/grpc++/credentials.h
index b75755d..12c1a2f 100644
--- a/include/grpc++/credentials.h
+++ b/include/grpc++/credentials.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CREDENTIALS_H_
-#define __GRPCPP_CREDENTIALS_H_
+#ifndef GRPCXX_CREDENTIALS_H
+#define GRPCXX_CREDENTIALS_H
 
 #include <chrono>
 #include <memory>
@@ -133,4 +133,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CREDENTIALS_H_
+#endif  // GRPCXX_CREDENTIALS_H
diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h
index 92ad0c7..3e199e3 100644
--- a/include/grpc++/impl/call.h
+++ b/include/grpc++/impl/call.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CALL_H__
-#define __GRPCPP_CALL_H__
+#ifndef GRPCXX_IMPL_CALL_H
+#define GRPCXX_IMPL_CALL_H
 
 #include <grpc/grpc.h>
 #include <grpc++/config.h>
@@ -143,4 +143,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_CALL_INTERFACE_H__
+#endif  // GRPCXX_IMPL_CALL_H
diff --git a/include/grpc++/impl/client_unary_call.h b/include/grpc++/impl/client_unary_call.h
index f25ded7..d870326 100644
--- a/include/grpc++/impl/client_unary_call.h
+++ b/include/grpc++/impl/client_unary_call.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_CLIENT_UNARY_CALL_H__
-#define __GRPCPP_CLIENT_UNARY_CALL_H__
+#ifndef GRPCXX_IMPL_CLIENT_UNARY_CALL_H
+#define GRPCXX_IMPL_CLIENT_UNARY_CALL_H
 
 namespace google {
 namespace protobuf {
@@ -56,4 +56,4 @@
 
 }  // namespace grpc
 
-#endif
+#endif  // GRPCXX_IMPL_CLIENT_UNARY_CALL_H
diff --git a/include/grpc++/impl/internal_stub.h b/include/grpc++/impl/internal_stub.h
index 2529012..2cbf1d9 100644
--- a/include/grpc++/impl/internal_stub.h
+++ b/include/grpc++/impl/internal_stub.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_IMPL_INTERNAL_STUB_H__
-#define __GRPCPP_IMPL_INTERNAL_STUB_H__
+#ifndef GRPCXX_IMPL_INTERNAL_STUB_H
+#define GRPCXX_IMPL_INTERNAL_STUB_H
 
 #include <memory>
 
@@ -57,4 +57,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_IMPL_INTERNAL_STUB_H__
+#endif  // GRPCXX_IMPL_INTERNAL_STUB_H
diff --git a/include/grpc++/impl/rpc_method.h b/include/grpc++/impl/rpc_method.h
index 0236b11..ab407f5 100644
--- a/include/grpc++/impl/rpc_method.h
+++ b/include/grpc++/impl/rpc_method.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_IMPL_RPC_METHOD_H__
-#define __GRPCPP_IMPL_RPC_METHOD_H__
+#ifndef GRPCXX_IMPL_RPC_METHOD_H
+#define GRPCXX_IMPL_RPC_METHOD_H
 
 namespace google {
 namespace protobuf {
@@ -66,4 +66,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_IMPL_RPC_METHOD_H__
+#endif  // GRPCXX_IMPL_RPC_METHOD_H
diff --git a/include/grpc++/impl/rpc_service_method.h b/include/grpc++/impl/rpc_service_method.h
index a8794bc..ff94c7e 100644
--- a/include/grpc++/impl/rpc_service_method.h
+++ b/include/grpc++/impl/rpc_service_method.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_IMPL_RPC_SERVICE_METHOD_H__
-#define __GRPCPP_IMPL_RPC_SERVICE_METHOD_H__
+#ifndef GRPCXX_IMPL_RPC_SERVICE_METHOD_H
+#define GRPCXX_IMPL_RPC_SERVICE_METHOD_H
 
 #include <functional>
 #include <map>
@@ -203,4 +203,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_IMPL_RPC_SERVICE_METHOD_H__
+#endif  // GRPCXX_IMPL_RPC_SERVICE_METHOD_H
diff --git a/include/grpc++/impl/service_type.h b/include/grpc++/impl/service_type.h
index e54c3c2..7481d64 100644
--- a/include/grpc++/impl/service_type.h
+++ b/include/grpc++/impl/service_type.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_IMPL_SERVICE_TYPE_H__
-#define __GRPCPP_IMPL_SERVICE_TYPE_H__
+#ifndef GRPCXX_IMPL_SERVICE_TYPE_H
+#define GRPCXX_IMPL_SERVICE_TYPE_H
 
 namespace google {
 namespace protobuf {
@@ -128,4 +128,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_IMPL_SERVICE_TYPE_H__
+#endif  // GRPCXX_IMPL_SERVICE_TYPE_H
diff --git a/include/grpc++/server.h b/include/grpc++/server.h
index 46c4a62..3282b82 100644
--- a/include/grpc++/server.h
+++ b/include/grpc++/server.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_SERVER_H__
-#define __GRPCPP_SERVER_H__
+#ifndef GRPCXX_SERVER_H
+#define GRPCXX_SERVER_H
 
 #include <condition_variable>
 #include <list>
@@ -130,4 +130,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_SERVER_H__
+#endif  // GRPCXX_SERVER_H
diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h
index b672eb3..5566002 100644
--- a/include/grpc++/server_builder.h
+++ b/include/grpc++/server_builder.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_SERVER_BUILDER_H__
-#define __GRPCPP_SERVER_BUILDER_H__
+#ifndef GRPCXX_SERVER_BUILDER_H
+#define GRPCXX_SERVER_BUILDER_H
 
 #include <memory>
 #include <vector>
@@ -88,4 +88,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_SERVER_BUILDER_H__
+#endif  // GRPCXX_SERVER_BUILDER_H
diff --git a/include/grpc++/server_context.h b/include/grpc++/server_context.h
index 6db767f..9387f4a 100644
--- a/include/grpc++/server_context.h
+++ b/include/grpc++/server_context.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_SERVER_CONTEXT_H_
-#define __GRPCPP_SERVER_CONTEXT_H_
+#ifndef GRPCXX_SERVER_CONTEXT_H
+#define GRPCXX_SERVER_CONTEXT_H
 
 #include <chrono>
 #include <map>
@@ -121,4 +121,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_SERVER_CONTEXT_H_
+#endif  // GRPCXX_SERVER_CONTEXT_H
diff --git a/include/grpc++/server_credentials.h b/include/grpc++/server_credentials.h
index 8af4159..45cd279 100644
--- a/include/grpc++/server_credentials.h
+++ b/include/grpc++/server_credentials.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_SERVER_CREDENTIALS_H_
-#define __GRPCPP_SERVER_CREDENTIALS_H_
+#ifndef GRPCXX_SERVER_CREDENTIALS_H
+#define GRPCXX_SERVER_CREDENTIALS_H
 
 #include <memory>
 #include <vector>
@@ -79,4 +79,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_SERVER_CREDENTIALS_H_
+#endif  // GRPCXX_SERVER_CREDENTIALS_H
diff --git a/include/grpc++/status.h b/include/grpc++/status.h
index 1dfb0c9..8073319 100644
--- a/include/grpc++/status.h
+++ b/include/grpc++/status.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_STATUS_H__
-#define __GRPCPP_STATUS_H__
+#ifndef GRPCXX_STATUS_H
+#define GRPCXX_STATUS_H
 
 #include <grpc++/status_code_enum.h>
 #include <grpc++/config.h>
@@ -62,4 +62,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_STATUS_H__
+#endif  // GRPCXX_STATUS_H
diff --git a/include/grpc++/status_code_enum.h b/include/grpc++/status_code_enum.h
index 0ec0a97..2211c96 100644
--- a/include/grpc++/status_code_enum.h
+++ b/include/grpc++/status_code_enum.h
@@ -31,57 +31,43 @@
  *
  */
 
-#ifndef __GRPCPP_STATUS_CODE_ENUM_H__
-#define __GRPCPP_STATUS_CODE_ENUM_H__
+#ifndef GRPCXX_STATUS_CODE_ENUM_H
+#define GRPCXX_STATUS_CODE_ENUM_H
 
 namespace grpc {
 
 enum StatusCode {
-  /* Not an error; returned on success
-
-     HTTP Mapping: 200 OK */
+  /* Not an error; returned on success */
   OK = 0,
 
-  /* The operation was cancelled (typically by the caller).
-
-     HTTP Mapping: 499 Client Closed Request */
+  /* The operation was cancelled (typically by the caller). */
   CANCELLED = 1,
 
   /* Unknown error.  An example of where this error may be returned is
      if a Status value received from another address space belongs to
      an error-space that is not known in this address space.  Also
      errors raised by APIs that do not return enough error information
-     may be converted to this error.
-
-     HTTP Mapping: 500 Internal Server Error */
+     may be converted to this error. */
   UNKNOWN = 2,
 
   /* Client specified an invalid argument.  Note that this differs
      from FAILED_PRECONDITION.  INVALID_ARGUMENT indicates arguments
      that are problematic regardless of the state of the system
-     (e.g., a malformed file name).
-
-     HTTP Mapping: 400 Bad Request */
+     (e.g., a malformed file name). */
   INVALID_ARGUMENT = 3,
 
   /* Deadline expired before operation could complete.  For operations
      that change the state of the system, this error may be returned
      even if the operation has completed successfully.  For example, a
      successful response from a server could have been delayed long
-     enough for the deadline to expire.
-
-     HTTP Mapping: 504 Gateway Timeout */
+     enough for the deadline to expire. */
   DEADLINE_EXCEEDED = 4,
 
-  /* Some requested entity (e.g., file or directory) was not found.
-
-     HTTP Mapping: 404 Not Found */
+  /* Some requested entity (e.g., file or directory) was not found. */
   NOT_FOUND = 5,
 
   /* Some entity that we attempted to create (e.g., file or directory)
-     already exists.
-
-     HTTP Mapping: 409 Conflict */
+     already exists. */
   ALREADY_EXISTS = 6,
 
   /* The caller does not have permission to execute the specified
@@ -89,21 +75,15 @@
      caused by exhausting some resource (use RESOURCE_EXHAUSTED
      instead for those errors).  PERMISSION_DENIED must not be
      used if the caller can not be identified (use UNAUTHENTICATED
-     instead for those errors).
-
-     HTTP Mapping: 403 Forbidden */
+     instead for those errors). */
   PERMISSION_DENIED = 7,
 
   /* The request does not have valid authentication credentials for the
-     operation.
-
-     HTTP Mapping: 401 Unauthorized */
+     operation. */
   UNAUTHENTICATED = 16,
 
   /* Some resource has been exhausted, perhaps a per-user quota, or
-     perhaps the entire file system is out of space.
-
-     HTTP Mapping: 429 Too Many Requests */
+     perhaps the entire file system is out of space. */
   RESOURCE_EXHAUSTED = 8,
 
   /* Operation was rejected because the system is not in a state
@@ -124,23 +104,14 @@
       (d) Use FAILED_PRECONDITION if the client performs conditional
           REST Get/Update/Delete on a resource and the resource on the
           server does not match the condition. E.g., conflicting
-          read-modify-write on the same resource.
-
-     HTTP Mapping: 400 Bad Request
-
-     NOTE: HTTP spec says 412 Precondition Failed should only be used if
-     the request contains Etag related headers. So if the server does see
-     Etag related headers in the request, it may choose to return 412
-     instead of 400 for this error code. */
+          read-modify-write on the same resource. */
   FAILED_PRECONDITION = 9,
 
   /* The operation was aborted, typically due to a concurrency issue
      like sequencer check failures, transaction aborts, etc.
 
      See litmus test above for deciding between FAILED_PRECONDITION,
-     ABORTED, and UNAVAILABLE.
-
-     HTTP Mapping: 409 Conflict */
+     ABORTED, and UNAVAILABLE. */
   ABORTED = 10,
 
   /* Operation was attempted past the valid range.  E.g., seeking or
@@ -157,21 +128,15 @@
      OUT_OF_RANGE.  We recommend using OUT_OF_RANGE (the more specific
      error) when it applies so that callers who are iterating through
      a space can easily look for an OUT_OF_RANGE error to detect when
-     they are done.
-
-     HTTP Mapping: 400 Bad Request */
+     they are done. */
   OUT_OF_RANGE = 11,
 
-  /* Operation is not implemented or not supported/enabled in this service.
-
-     HTTP Mapping: 501 Not Implemented */
+  /* Operation is not implemented or not supported/enabled in this service. */
   UNIMPLEMENTED = 12,
 
   /* Internal errors.  Means some invariants expected by underlying
      system has been broken.  If you see one of these errors,
-     something is very broken.
-
-     HTTP Mapping: 500 Internal Server Error */
+     something is very broken. */
   INTERNAL = 13,
 
   /* The service is currently unavailable.  This is a most likely a
@@ -179,14 +144,10 @@
      a backoff.
 
      See litmus test above for deciding between FAILED_PRECONDITION,
-     ABORTED, and UNAVAILABLE.
-
-     HTTP Mapping: 503 Service Unavailable */
+     ABORTED, and UNAVAILABLE. */
   UNAVAILABLE = 14,
 
-  /* Unrecoverable data loss or corruption.
-
-     HTTP Mapping: 500 Internal Server Error */
+  /* Unrecoverable data loss or corruption. */
   DATA_LOSS = 15,
 
   /* Force users to include a default branch: */
@@ -195,4 +156,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_STATUS_CODE_ENUM_H_
+#endif  // GRPCXX_STATUS_CODE_ENUM_H
diff --git a/include/grpc++/stream.h b/include/grpc++/stream.h
index 8bcc75b..d95a379 100644
--- a/include/grpc++/stream.h
+++ b/include/grpc++/stream.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_STREAM_H__
-#define __GRPCPP_STREAM_H__
+#ifndef GRPCXX_STREAM_H
+#define GRPCXX_STREAM_H
 
 #include <grpc++/channel_interface.h>
 #include <grpc++/client_context.h>
@@ -710,4 +710,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_STREAM_H__
+#endif  // GRPCXX_STREAM_H
diff --git a/include/grpc++/thread_pool_interface.h b/include/grpc++/thread_pool_interface.h
index c839249..ead307f 100644
--- a/include/grpc++/thread_pool_interface.h
+++ b/include/grpc++/thread_pool_interface.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_THREAD_POOL_INTERFACE_H__
-#define __GRPCPP_THREAD_POOL_INTERFACE_H__
+#ifndef GRPCXX_THREAD_POOL_INTERFACE_H
+#define GRPCXX_THREAD_POOL_INTERFACE_H
 
 #include <functional>
 
@@ -49,4 +49,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_THREAD_POOL_INTERFACE_H__
+#endif  // GRPCXX_THREAD_POOL_INTERFACE_H
diff --git a/include/grpc/byte_buffer.h b/include/grpc/byte_buffer.h
index 89d8557e..0ff494c 100644
--- a/include/grpc/byte_buffer.h
+++ b/include/grpc/byte_buffer.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_BYTE_BUFFER_H__
-#define __GRPC_BYTE_BUFFER_H__
+#ifndef GRPC_BYTE_BUFFER_H
+#define GRPC_BYTE_BUFFER_H
 
 #include <grpc/grpc.h>
 #include <grpc/support/slice_buffer.h>
@@ -47,4 +47,4 @@
   } data;
 };
 
-#endif /* __GRPC_BYTE_BUFFER_H__ */
+#endif  /* GRPC_BYTE_BUFFER_H */
diff --git a/include/grpc/byte_buffer_reader.h b/include/grpc/byte_buffer_reader.h
index 4446e0c..cb757cf 100644
--- a/include/grpc/byte_buffer_reader.h
+++ b/include/grpc/byte_buffer_reader.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_BYTE_BUFFER_READER_H__
-#define __GRPC_BYTE_BUFFER_READER_H__
+#ifndef GRPC_BYTE_BUFFER_READER_H
+#define GRPC_BYTE_BUFFER_READER_H
 
 #include <grpc/grpc.h>
 #include <grpc/byte_buffer.h>
@@ -46,4 +46,4 @@
   } current;
 };
 
-#endif /* __GRPC_BYTE_BUFFER_READER_H__ */
+#endif  /* GRPC_BYTE_BUFFER_READER_H */
diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h
index 4a720d1..bb16531 100644
--- a/include/grpc/grpc.h
+++ b/include/grpc/grpc.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_GRPC_H__
-#define __GRPC_GRPC_H__
+#ifndef GRPC_GRPC_H
+#define GRPC_GRPC_H
 
 #include <grpc/status.h>
 
@@ -632,4 +632,4 @@
 }
 #endif
 
-#endif /* __GRPC_GRPC_H__ */
+#endif  /* GRPC_GRPC_H */
diff --git a/include/grpc/grpc_http.h b/include/grpc/grpc_http.h
index 757f53f..c41e874 100644
--- a/include/grpc/grpc_http.h
+++ b/include/grpc/grpc_http.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_GRPC_HTTP_H__
-#define __GRPC_GRPC_HTTP_H__
+#ifndef GRPC_GRPC_HTTP_H
+#define GRPC_GRPC_HTTP_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -64,4 +64,4 @@
 }
 #endif
 
-#endif /* __GRPC_GRPC_HTTP_H__ */
+#endif  /* GRPC_GRPC_HTTP_H */
diff --git a/include/grpc/grpc_security.h b/include/grpc/grpc_security.h
index 4ba4ffc..577f03e 100644
--- a/include/grpc/grpc_security.h
+++ b/include/grpc/grpc_security.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef GRPC_SECURITY_H_
-#define GRPC_SECURITY_H_
+#ifndef GRPC_GRPC_SECURITY_H
+#define GRPC_GRPC_SECURITY_H
 
 #include "grpc.h"
 #include "status.h"
@@ -185,4 +185,4 @@
 }
 #endif
 
-#endif /* GRPC_SECURITY_H_ */
+#endif  /* GRPC_GRPC_SECURITY_H */
diff --git a/include/grpc/status.h b/include/grpc/status.h
index 76a71ed..456b900 100644
--- a/include/grpc/status.h
+++ b/include/grpc/status.h
@@ -31,59 +31,45 @@
  *
  */
 
-#ifndef __GRPC_STATUS_H__
-#define __GRPC_STATUS_H__
+#ifndef GRPC_STATUS_H
+#define GRPC_STATUS_H
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 typedef enum {
-  /* Not an error; returned on success
-
-     HTTP Mapping: 200 OK */
+  /* Not an error; returned on success */
   GRPC_STATUS_OK = 0,
 
-  /* The operation was cancelled (typically by the caller).
-
-     HTTP Mapping: 499 Client Closed Request */
+  /* The operation was cancelled (typically by the caller). */
   GRPC_STATUS_CANCELLED = 1,
 
   /* Unknown error.  An example of where this error may be returned is
      if a Status value received from another address space belongs to
      an error-space that is not known in this address space.  Also
      errors raised by APIs that do not return enough error information
-     may be converted to this error.
-
-     HTTP Mapping: 500 Internal Server Error */
+     may be converted to this error. */
   GRPC_STATUS_UNKNOWN = 2,
 
   /* Client specified an invalid argument.  Note that this differs
      from FAILED_PRECONDITION.  INVALID_ARGUMENT indicates arguments
      that are problematic regardless of the state of the system
-     (e.g., a malformed file name).
-
-     HTTP Mapping: 400 Bad Request */
+     (e.g., a malformed file name). */
   GRPC_STATUS_INVALID_ARGUMENT = 3,
 
   /* Deadline expired before operation could complete.  For operations
      that change the state of the system, this error may be returned
      even if the operation has completed successfully.  For example, a
      successful response from a server could have been delayed long
-     enough for the deadline to expire.
-
-     HTTP Mapping: 504 Gateway Timeout */
+     enough for the deadline to expire. */
   GRPC_STATUS_DEADLINE_EXCEEDED = 4,
 
-  /* Some requested entity (e.g., file or directory) was not found.
-
-     HTTP Mapping: 404 Not Found */
+  /* Some requested entity (e.g., file or directory) was not found. */
   GRPC_STATUS_NOT_FOUND = 5,
 
   /* Some entity that we attempted to create (e.g., file or directory)
-     already exists.
-
-     HTTP Mapping: 409 Conflict */
+     already exists. */
   GRPC_STATUS_ALREADY_EXISTS = 6,
 
   /* The caller does not have permission to execute the specified
@@ -91,21 +77,15 @@
      caused by exhausting some resource (use RESOURCE_EXHAUSTED
      instead for those errors).  PERMISSION_DENIED must not be
      used if the caller can not be identified (use UNAUTHENTICATED
-     instead for those errors).
-
-     HTTP Mapping: 403 Forbidden */
+     instead for those errors). */
   GRPC_STATUS_PERMISSION_DENIED = 7,
 
   /* The request does not have valid authentication credentials for the
-     operation.
-
-     HTTP Mapping: 401 Unauthorized */
+     operation. */
   GRPC_STATUS_UNAUTHENTICATED = 16,
 
   /* Some resource has been exhausted, perhaps a per-user quota, or
-     perhaps the entire file system is out of space.
-
-     HTTP Mapping: 429 Too Many Requests */
+     perhaps the entire file system is out of space. */
   GRPC_STATUS_RESOURCE_EXHAUSTED = 8,
 
   /* Operation was rejected because the system is not in a state
@@ -126,23 +106,14 @@
       (d) Use FAILED_PRECONDITION if the client performs conditional
           REST Get/Update/Delete on a resource and the resource on the
           server does not match the condition. E.g., conflicting
-          read-modify-write on the same resource.
-
-     HTTP Mapping: 400 Bad Request
-
-     NOTE: HTTP spec says 412 Precondition Failed should only be used if
-     the request contains Etag related headers. So if the server does see
-     Etag related headers in the request, it may choose to return 412
-     instead of 400 for this error code. */
+          read-modify-write on the same resource. */
   GRPC_STATUS_FAILED_PRECONDITION = 9,
 
   /* The operation was aborted, typically due to a concurrency issue
      like sequencer check failures, transaction aborts, etc.
 
      See litmus test above for deciding between FAILED_PRECONDITION,
-     ABORTED, and UNAVAILABLE.
-
-     HTTP Mapping: 409 Conflict */
+     ABORTED, and UNAVAILABLE. */
   GRPC_STATUS_ABORTED = 10,
 
   /* Operation was attempted past the valid range.  E.g., seeking or
@@ -159,21 +130,15 @@
      OUT_OF_RANGE.  We recommend using OUT_OF_RANGE (the more specific
      error) when it applies so that callers who are iterating through
      a space can easily look for an OUT_OF_RANGE error to detect when
-     they are done.
-
-     HTTP Mapping: 400 Bad Request */
+     they are done. */
   GRPC_STATUS_OUT_OF_RANGE = 11,
 
-  /* Operation is not implemented or not supported/enabled in this service.
-
-     HTTP Mapping: 501 Not Implemented */
+  /* Operation is not implemented or not supported/enabled in this service. */
   GRPC_STATUS_UNIMPLEMENTED = 12,
 
   /* Internal errors.  Means some invariants expected by underlying
      system has been broken.  If you see one of these errors,
-     something is very broken.
-
-     HTTP Mapping: 500 Internal Server Error */
+     something is very broken. */
   GRPC_STATUS_INTERNAL = 13,
 
   /* The service is currently unavailable.  This is a most likely a
@@ -181,14 +146,10 @@
      a backoff.
 
      See litmus test above for deciding between FAILED_PRECONDITION,
-     ABORTED, and UNAVAILABLE.
-
-     HTTP Mapping: 503 Service Unavailable */
+     ABORTED, and UNAVAILABLE. */
   GRPC_STATUS_UNAVAILABLE = 14,
 
-  /* Unrecoverable data loss or corruption.
-
-     HTTP Mapping: 500 Internal Server Error */
+  /* Unrecoverable data loss or corruption. */
   GRPC_STATUS_DATA_LOSS = 15,
 
   /* Force users to include a default branch: */
@@ -199,4 +160,4 @@
 }
 #endif
 
-#endif /* __GRPC_STATUS_H__ */
+#endif  /* GRPC_STATUS_H */
diff --git a/include/grpc/support/alloc.h b/include/grpc/support/alloc.h
index 09ea975..509870f 100644
--- a/include/grpc/support/alloc.h
+++ b/include/grpc/support/alloc.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_ALLOC_H__
-#define __GRPC_SUPPORT_ALLOC_H__
+#ifndef GRPC_SUPPORT_ALLOC_H
+#define GRPC_SUPPORT_ALLOC_H
 
 #include <stddef.h>
 
@@ -55,4 +55,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_ALLOC_H__ */
+#endif  /* GRPC_SUPPORT_ALLOC_H */
diff --git a/include/grpc/support/atm.h b/include/grpc/support/atm.h
index f1e30d3..feca6b3 100644
--- a/include/grpc/support/atm.h
+++ b/include/grpc/support/atm.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_ATM_H__
-#define __GRPC_SUPPORT_ATM_H__
+#ifndef GRPC_SUPPORT_ATM_H
+#define GRPC_SUPPORT_ATM_H
 
 /* This interface provides atomic operations and barriers.
    It is internal to gpr support code and should not be used outside it.
@@ -89,4 +89,4 @@
 #error could not determine platform for atm
 #endif
 
-#endif /* __GRPC_SUPPORT_ATM_H__ */
+#endif  /* GRPC_SUPPORT_ATM_H */
diff --git a/include/grpc/support/atm_gcc_atomic.h b/include/grpc/support/atm_gcc_atomic.h
index 2ae24ae..11d78b4 100644
--- a/include/grpc/support/atm_gcc_atomic.h
+++ b/include/grpc/support/atm_gcc_atomic.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_ATM_GCC_ATOMIC_H__
-#define __GRPC_SUPPORT_ATM_GCC_ATOMIC_H__
+#ifndef GRPC_SUPPORT_ATM_GCC_ATOMIC_H
+#define GRPC_SUPPORT_ATM_GCC_ATOMIC_H
 
 /* atm_platform.h for gcc and gcc-like compilers with the
    __atomic_* interface.  */
@@ -66,4 +66,4 @@
                                      __ATOMIC_RELAXED);
 }
 
-#endif /* __GRPC_SUPPORT_ATM_GCC_ATOMIC_H__ */
+#endif  /* GRPC_SUPPORT_ATM_GCC_ATOMIC_H */
diff --git a/include/grpc/support/atm_gcc_sync.h b/include/grpc/support/atm_gcc_sync.h
index cec62e1..e863bfd 100644
--- a/include/grpc/support/atm_gcc_sync.h
+++ b/include/grpc/support/atm_gcc_sync.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_ATM_GCC_SYNC_H__
-#define __GRPC_SUPPORT_ATM_GCC_SYNC_H__
+#ifndef GRPC_SUPPORT_ATM_GCC_SYNC_H
+#define GRPC_SUPPORT_ATM_GCC_SYNC_H
 
 /* variant of atm_platform.h for gcc and gcc-like compiers with __sync_*
    interface */
@@ -70,4 +70,4 @@
 #define gpr_atm_acq_cas(p, o, n) (__sync_bool_compare_and_swap((p), (o), (n)))
 #define gpr_atm_rel_cas(p, o, n) gpr_atm_acq_cas((p), (o), (n))
 
-#endif /* __GRPC_SUPPORT_ATM_GCC_SYNC_H__ */
+#endif  /* GRPC_SUPPORT_ATM_GCC_SYNC_H */
diff --git a/include/grpc/support/atm_win32.h b/include/grpc/support/atm_win32.h
index 9bb1cfe..3b9113c 100644
--- a/include/grpc/support/atm_win32.h
+++ b/include/grpc/support/atm_win32.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_ATM_WIN32_H__
-#define __GRPC_SUPPORT_ATM_WIN32_H__
+#ifndef GRPC_SUPPORT_ATM_WIN32_H
+#define GRPC_SUPPORT_ATM_WIN32_H
 
 /* Win32 variant of atm_platform.h */
 #include <grpc/support/port_platform.h>
@@ -105,4 +105,4 @@
   return old;
 }
 
-#endif /* __GRPC_SUPPORT_ATM_WIN32_H__ */
+#endif  /* GRPC_SUPPORT_ATM_WIN32_H */
diff --git a/include/grpc/support/cancellable_platform.h b/include/grpc/support/cancellable_platform.h
index e77f9f1..e8e4b84 100644
--- a/include/grpc/support/cancellable_platform.h
+++ b/include/grpc/support/cancellable_platform.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_CANCELLABLE_PLATFORM_H__
-#define __GRPC_SUPPORT_CANCELLABLE_PLATFORM_H__
+#ifndef GRPC_SUPPORT_CANCELLABLE_PLATFORM_H
+#define GRPC_SUPPORT_CANCELLABLE_PLATFORM_H
 
 #include <grpc/support/atm.h>
 #include <grpc/support/sync.h>
@@ -53,4 +53,4 @@
   struct gpr_cancellable_list_ waiters;
 } gpr_cancellable;
 
-#endif /* __GRPC_SUPPORT_CANCELLABLE_PLATFORM_H__ */
+#endif  /* GRPC_SUPPORT_CANCELLABLE_PLATFORM_H */
diff --git a/include/grpc/support/cmdline.h b/include/grpc/support/cmdline.h
index 20de122..c2350a0 100644
--- a/include/grpc/support/cmdline.h
+++ b/include/grpc/support/cmdline.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_CMDLINE_H__
-#define __GRPC_SUPPORT_CMDLINE_H__
+#ifndef GRPC_SUPPORT_CMDLINE_H
+#define GRPC_SUPPORT_CMDLINE_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -92,4 +92,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_CMDLINE_H__ */
+#endif  /* GRPC_SUPPORT_CMDLINE_H */
diff --git a/include/grpc/support/cpu.h b/include/grpc/support/cpu.h
index 580f12d..005c3c7 100644
--- a/include/grpc/support/cpu.h
+++ b/include/grpc/support/cpu.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SUPPORT_CPU_H__
-#define __GRPC_INTERNAL_SUPPORT_CPU_H__
+#ifndef GRPC_SUPPORT_CPU_H
+#define GRPC_SUPPORT_CPU_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -54,4 +54,4 @@
 }  // extern "C"
 #endif
 
-#endif /* __GRPC_INTERNAL_SUPPORT_CPU_H__ */
+#endif  /* GRPC_SUPPORT_CPU_H */
diff --git a/include/grpc/support/histogram.h b/include/grpc/support/histogram.h
index fb9d3d1..31f7fed 100644
--- a/include/grpc/support/histogram.h
+++ b/include/grpc/support/histogram.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_HISTOGRAM_H__
-#define __GRPC_SUPPORT_HISTOGRAM_H__
+#ifndef GRPC_SUPPORT_HISTOGRAM_H
+#define GRPC_SUPPORT_HISTOGRAM_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -63,4 +63,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_HISTOGRAM_H__ */
+#endif  /* GRPC_SUPPORT_HISTOGRAM_H */
diff --git a/include/grpc/support/host_port.h b/include/grpc/support/host_port.h
index 2dac38a..3cc2f49 100644
--- a/include/grpc/support/host_port.h
+++ b/include/grpc/support/host_port.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_HOST_PORT_H__
-#define __GRPC_SUPPORT_HOST_PORT_H__
+#ifndef GRPC_SUPPORT_HOST_PORT_H
+#define GRPC_SUPPORT_HOST_PORT_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -59,4 +59,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_HOST_PORT_H__ */
+#endif  /* GRPC_SUPPORT_HOST_PORT_H */
diff --git a/include/grpc/support/log.h b/include/grpc/support/log.h
index c142949..aad4f23 100644
--- a/include/grpc/support/log.h
+++ b/include/grpc/support/log.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_LOG_H__
-#define __GRPC_SUPPORT_LOG_H__
+#ifndef GRPC_SUPPORT_LOG_H
+#define GRPC_SUPPORT_LOG_H
 
 #include <stdlib.h> /* for abort() */
 #include <stdarg.h>
@@ -105,4 +105,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_LOG_H__ */
+#endif  /* GRPC_SUPPORT_LOG_H */
diff --git a/include/grpc/support/log_win32.h b/include/grpc/support/log_win32.h
index 52d6a70..ad0edcd 100644
--- a/include/grpc/support/log_win32.h
+++ b/include/grpc/support/log_win32.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_LOG_WIN32_H__
-#define __GRPC_SUPPORT_LOG_WIN32_H__
+#ifndef GRPC_SUPPORT_LOG_WIN32_H
+#define GRPC_SUPPORT_LOG_WIN32_H
 
 #include <windows.h>
 
@@ -50,4 +50,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_LOG_H__ */
+#endif  /* GRPC_SUPPORT_LOG_WIN32_H */
diff --git a/include/grpc/support/port_platform.h b/include/grpc/support/port_platform.h
index 0a65175..f04c2e7 100644
--- a/include/grpc/support/port_platform.h
+++ b/include/grpc/support/port_platform.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_PORT_PLATFORM_H__
-#define __GRPC_SUPPORT_PORT_PLATFORM_H__
+#ifndef GRPC_SUPPORT_PORT_PLATFORM_H
+#define GRPC_SUPPORT_PORT_PLATFORM_H
 
 /* Override this file with one for your platform if you need to redefine
    things.  */
@@ -206,4 +206,4 @@
    power of two */
 #define GPR_MAX_ALIGNMENT 16
 
-#endif /* __GRPC_SUPPORT_PORT_PLATFORM_H__ */
+#endif  /* GRPC_SUPPORT_PORT_PLATFORM_H */
diff --git a/include/grpc/support/slice.h b/include/grpc/support/slice.h
index 8a21290..9026602 100644
--- a/include/grpc/support/slice.h
+++ b/include/grpc/support/slice.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_SLICE_H__
-#define __GRPC_SUPPORT_SLICE_H__
+#ifndef GRPC_SUPPORT_SLICE_H
+#define GRPC_SUPPORT_SLICE_H
 
 #include <grpc/support/sync.h>
 
@@ -175,4 +175,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_SLICE_H__ */
+#endif  /* GRPC_SUPPORT_SLICE_H */
diff --git a/include/grpc/support/slice_buffer.h b/include/grpc/support/slice_buffer.h
index 8b57f9f..56f71ef 100644
--- a/include/grpc/support/slice_buffer.h
+++ b/include/grpc/support/slice_buffer.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_SLICE_BUFFER_H__
-#define __GRPC_SUPPORT_SLICE_BUFFER_H__
+#ifndef GRPC_SUPPORT_SLICE_BUFFER_H
+#define GRPC_SUPPORT_SLICE_BUFFER_H
 
 #include <grpc/support/slice.h>
 
@@ -81,4 +81,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_SLICE_BUFFER_H__ */
+#endif  /* GRPC_SUPPORT_SLICE_BUFFER_H */
diff --git a/include/grpc/support/sync.h b/include/grpc/support/sync.h
index bc99317..35b2d12 100644
--- a/include/grpc/support/sync.h
+++ b/include/grpc/support/sync.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_SYNC_H__
-#define __GRPC_SUPPORT_SYNC_H__
+#ifndef GRPC_SUPPORT_SYNC_H
+#define GRPC_SUPPORT_SYNC_H
 /* Synchronization primitives for GPR.
 
    The type  gpr_mu              provides a non-reentrant mutex (lock).
@@ -345,4 +345,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_SYNC_H__ */
+#endif  /* GRPC_SUPPORT_SYNC_H */
diff --git a/include/grpc/support/sync_generic.h b/include/grpc/support/sync_generic.h
index 3bae222..bbd1b3e 100644
--- a/include/grpc/support/sync_generic.h
+++ b/include/grpc/support/sync_generic.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_SYNC_GENERIC_H__
-#define __GRPC_SUPPORT_SYNC_GENERIC_H__
+#ifndef GRPC_SUPPORT_SYNC_GENERIC_H
+#define GRPC_SUPPORT_SYNC_GENERIC_H
 /* Generic type defintions for gpr_sync. */
 
 #include <grpc/support/atm.h>
@@ -58,4 +58,4 @@
 #define GPR_STATS_INIT \
   { 0 }
 
-#endif /* __GRPC_SUPPORT_SYNC_GENERIC_H__ */
+#endif  /* GRPC_SUPPORT_SYNC_GENERIC_H */
diff --git a/include/grpc/support/sync_posix.h b/include/grpc/support/sync_posix.h
index 8ba2c5b..762d9eb 100644
--- a/include/grpc/support/sync_posix.h
+++ b/include/grpc/support/sync_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_SYNC_POSIX_H__
-#define __GRPC_SUPPORT_SYNC_POSIX_H__
+#ifndef GRPC_SUPPORT_SYNC_POSIX_H
+#define GRPC_SUPPORT_SYNC_POSIX_H
 
 #include <grpc/support/sync_generic.h>
 
@@ -44,4 +44,4 @@
 
 #define GPR_ONCE_INIT PTHREAD_ONCE_INIT
 
-#endif /* __GRPC_SUPPORT_SYNC_POSIX_H__ */
+#endif  /* GRPC_SUPPORT_SYNC_POSIX_H */
diff --git a/include/grpc/support/sync_win32.h b/include/grpc/support/sync_win32.h
index 13823b8..cb2a866 100644
--- a/include/grpc/support/sync_win32.h
+++ b/include/grpc/support/sync_win32.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_SYNC_WIN32_H__
-#define __GRPC_SUPPORT_SYNC_WIN32_H__
+#ifndef GRPC_SUPPORT_SYNC_WIN32_H
+#define GRPC_SUPPORT_SYNC_WIN32_H
 
 #include <grpc/support/sync_generic.h>
 
@@ -48,4 +48,4 @@
 typedef INIT_ONCE gpr_once;
 #define GPR_ONCE_INIT INIT_ONCE_STATIC_INIT
 
-#endif /* __GRPC_SUPPORT_SYNC_WIN32_H__ */
+#endif  /* GRPC_SUPPORT_SYNC_WIN32_H */
diff --git a/include/grpc/support/thd.h b/include/grpc/support/thd.h
index a81e6cd..64d5bed 100644
--- a/include/grpc/support/thd.h
+++ b/include/grpc/support/thd.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_THD_H__
-#define __GRPC_SUPPORT_THD_H__
+#ifndef GRPC_SUPPORT_THD_H
+#define GRPC_SUPPORT_THD_H
 /* Thread interface for GPR.
 
    Types
@@ -73,4 +73,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_THD_H__ */
+#endif  /* GRPC_SUPPORT_THD_H */
diff --git a/include/grpc/support/time.h b/include/grpc/support/time.h
index 150b7ac..1fd3181 100644
--- a/include/grpc/support/time.h
+++ b/include/grpc/support/time.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_TIME_H__
-#define __GRPC_SUPPORT_TIME_H__
+#ifndef GRPC_SUPPORT_TIME_H
+#define GRPC_SUPPORT_TIME_H
 /* Time support.
    We use gpr_timespec, which is analogous to struct timespec.  On some
    machines, absolute times may be in local time.  */
@@ -100,4 +100,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_TIME_H__ */
+#endif  /* GRPC_SUPPORT_TIME_H */
diff --git a/include/grpc/support/useful.h b/include/grpc/support/useful.h
index 8d756c3..979f3d0 100644
--- a/include/grpc/support/useful.h
+++ b/include/grpc/support/useful.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_USEFUL_H__
-#define __GRPC_SUPPORT_USEFUL_H__
+#ifndef GRPC_SUPPORT_USEFUL_H
+#define GRPC_SUPPORT_USEFUL_H
 
 /* useful macros that don't belong anywhere else */
 
@@ -45,4 +45,4 @@
 
 #define GPR_ARRAY_SIZE(array) (sizeof(array) / sizeof(*(array)))
 
-#endif /* __GRPC_SUPPORT_USEFUL_H__ */
+#endif  /* GRPC_SUPPORT_USEFUL_H */
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index 1139dfc..eade70d 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -186,7 +186,7 @@
     printer->Print(
         *vars,
         "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
-        "$Method$(::grpc::ClientContext* context, "
+        "Async$Method$(::grpc::ClientContext* context, "
         "const $Request$& request, "
         "::grpc::CompletionQueue* cq, void* tag);\n");
   } else if (ClientOnlyStreaming(method)) {
@@ -196,7 +196,7 @@
         "::grpc::ClientContext* context, $Response$* response);\n");
     printer->Print(
         *vars,
-        "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>> $Method$("
+        "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>> Async$Method$("
         "::grpc::ClientContext* context, $Response$* response, "
         "::grpc::CompletionQueue* cq, void* tag);\n");
   } else if (ServerOnlyStreaming(method)) {
@@ -206,7 +206,7 @@
         "::grpc::ClientContext* context, const $Request$& request);\n");
     printer->Print(
         *vars,
-        "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> $Method$("
+        "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> Async$Method$("
         "::grpc::ClientContext* context, const $Request$& request, "
         "::grpc::CompletionQueue* cq, void* tag);\n");
   } else if (BidiStreaming(method)) {
@@ -217,7 +217,7 @@
     printer->Print(*vars,
                    "std::unique_ptr<  ::grpc::ClientAsyncReaderWriter< "
                    "$Request$, $Response$>> "
-                   "$Method$(::grpc::ClientContext* context, "
+                   "Async$Method$(::grpc::ClientContext* context, "
                    "::grpc::CompletionQueue* cq, void* tag);\n");
   }
 }
@@ -390,7 +390,7 @@
     printer->Print(
         *vars,
         "std::unique_ptr< ::grpc::ClientAsyncResponseReader< $Response$>> "
-        "$Service$::Stub::$Method$(::grpc::ClientContext* context, "
+        "$Service$::Stub::Async$Method$(::grpc::ClientContext* context, "
         "const $Request$& request, "
         "::grpc::CompletionQueue* cq, void* tag) {\n");
     printer->Print(*vars,
@@ -416,7 +416,7 @@
                    "}\n\n");
     printer->Print(*vars,
                    "std::unique_ptr< ::grpc::ClientAsyncWriter< $Request$>> "
-                   "$Service$::Stub::$Method$("
+                   "$Service$::Stub::Async$Method$("
                    "::grpc::ClientContext* context, $Response$* response, "
                    "::grpc::CompletionQueue* cq, void* tag) {\n");
     printer->Print(*vars,
@@ -443,7 +443,7 @@
                    "}\n\n");
     printer->Print(*vars,
                    "std::unique_ptr< ::grpc::ClientAsyncReader< $Response$>> "
-                   "$Service$::Stub::$Method$("
+                   "$Service$::Stub::Async$Method$("
                    "::grpc::ClientContext* context, const $Request$& request, "
                    "::grpc::CompletionQueue* cq, void* tag) {\n");
     printer->Print(*vars,
@@ -471,7 +471,7 @@
     printer->Print(*vars,
                    "std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
                    "$Request$, $Response$>> "
-                   "$Service$::Stub::$Method$(::grpc::ClientContext* context, "
+                   "$Service$::Stub::Async$Method$(::grpc::ClientContext* context, "
                    "::grpc::CompletionQueue* cq, void* tag) {\n");
     printer->Print(*vars,
                    "  return std::unique_ptr< ::grpc::ClientAsyncReaderWriter< "
diff --git a/src/compiler/cpp_generator.h b/src/compiler/cpp_generator.h
index f5b1ad2..1bfe5a8 100644
--- a/src/compiler/cpp_generator.h
+++ b/src/compiler/cpp_generator.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_CPP_GENERATOR_H_
-#define NET_GRPC_COMPILER_CPP_GENERATOR_H_
+#ifndef GRPC_INTERNAL_COMPILER_CPP_GENERATOR_H
+#define GRPC_INTERNAL_COMPILER_CPP_GENERATOR_H
 
 #include <string>
 
@@ -58,4 +58,4 @@
 
 }  // namespace grpc_cpp_generator
 
-#endif  // NET_GRPC_COMPILER_CPP_GENERATOR_H_
+#endif  // GRPC_INTERNAL_COMPILER_CPP_GENERATOR_H
diff --git a/src/compiler/cpp_generator_helpers.h b/src/compiler/cpp_generator_helpers.h
index 632ff3c..16abbde 100644
--- a/src/compiler/cpp_generator_helpers.h
+++ b/src/compiler/cpp_generator_helpers.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_CPP_GENERATOR_HELPERS_H__
-#define NET_GRPC_COMPILER_CPP_GENERATOR_HELPERS_H__
+#ifndef GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H
+#define GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H
 
 #include <map>
 #include <string>
@@ -69,4 +69,4 @@
 
 }  // namespace grpc_cpp_generator
 
-#endif  // NET_GRPC_COMPILER_CPP_GENERATOR_HELPERS_H__
+#endif  // GRPC_INTERNAL_COMPILER_CPP_GENERATOR_HELPERS_H
diff --git a/src/compiler/generator_helpers.h b/src/compiler/generator_helpers.h
index 0c14bb8..2035820 100644
--- a/src/compiler/generator_helpers.h
+++ b/src/compiler/generator_helpers.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_GENERATOR_HELPERS_H__
-#define NET_GRPC_COMPILER_GENERATOR_HELPERS_H__
+#ifndef GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
+#define GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
 
 #include <map>
 #include <string>
@@ -76,4 +76,4 @@
 
 }  // namespace grpc_generator
 
-#endif  // NET_GRPC_COMPILER_GENERATOR_HELPERS_H__
+#endif  // GRPC_INTERNAL_COMPILER_GENERATOR_HELPERS_H
diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc
index b8d4aa5..b217c0d 100644
--- a/src/compiler/python_generator.cc
+++ b/src/compiler/python_generator.cc
@@ -237,54 +237,70 @@
              "Service", service->name());
   {
     IndentScope raii_create_server_indent(out);
-    map<string, pair<string, string>> method_to_module_and_message;
-    out->Print("method_implementations = {\n");
+    map<string, string> method_description_constructors;
+    map<string, pair<string, string>> input_message_modules_and_classes;
+    map<string, pair<string, string>> output_message_modules_and_classes;
     for (int i = 0; i < service->method_count(); ++i) {
-      IndentScope raii_implementations_indent(out);
-      const MethodDescriptor* meth = service->method(i);
-      string meth_type =
-          string(meth->client_streaming() ? "stream" : "unary") +
-          string(meth->server_streaming() ? "_stream" : "_unary") + "_inline";
-      out->Print("\"$Method$\": utilities.$Type$(servicer.$Method$),\n",
-                 "Method", meth->name(),
-                 "Type", meth_type);
-      // Maintain information on the input type of the service method for later
-      // use in constructing the service assembly's activated fore link.
-      const Descriptor* input_type = meth->input_type();
-      pair<string, string> module_and_message;
-      if (!GetModuleAndMessagePath(input_type, &module_and_message)) {
+      const MethodDescriptor* method = service->method(i);
+      const string method_description_constructor =
+          string(method->client_streaming() ? "stream_" : "unary_") +
+          string(method->server_streaming() ? "stream_" : "unary_") +
+          "service_description";
+      pair<string, string> input_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->input_type(),
+                                   &input_message_module_and_class)) {
         return false;
       }
-      method_to_module_and_message.insert(
-          make_pair(meth->name(), module_and_message));
+      pair<string, string> output_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->output_type(),
+                                   &output_message_module_and_class)) {
+        return false;
+      }
+      // Import the modules that define the messages used in RPCs.
+      out->Print("import $Module$\n", "Module",
+                 input_message_module_and_class.first);
+      out->Print("import $Module$\n", "Module",
+                 output_message_module_and_class.first);
+      method_description_constructors.insert(
+          make_pair(method->name(), method_description_constructor));
+      input_message_modules_and_classes.insert(
+          make_pair(method->name(), input_message_module_and_class));
+      output_message_modules_and_classes.insert(
+          make_pair(method->name(), output_message_module_and_class));
+    }
+    out->Print("method_service_descriptions = {\n");
+    for (auto& name_and_description_constructor :
+         method_description_constructors) {
+      IndentScope raii_descriptions_indent(out);
+      const string method_name = name_and_description_constructor.first;
+      auto input_message_module_and_class =
+          input_message_modules_and_classes.find(method_name);
+      auto output_message_module_and_class =
+          output_message_modules_and_classes.find(method_name);
+      out->Print("\"$Method$\": utilities.$Constructor$(\n", "Method",
+                 method_name, "Constructor",
+                 name_and_description_constructor.second);
+      {
+        IndentScope raii_description_arguments_indent(out);
+        out->Print("servicer.$Method$,\n", "Method", method_name);
+        out->Print(
+            "$InputTypeModule$.$InputTypeClass$.FromString,\n",
+            "InputTypeModule", input_message_module_and_class->second.first,
+            "InputTypeClass", input_message_module_and_class->second.second);
+        out->Print(
+            "$OutputTypeModule$.$OutputTypeClass$.SerializeToString,\n",
+            "OutputTypeModule", output_message_module_and_class->second.first,
+            "OutputTypeClass", output_message_module_and_class->second.second);
+      }
+      out->Print("),\n");
     }
     out->Print("}\n");
-    // Ensure that we've imported all of the relevant messages.
-    for (auto& meth_vals : method_to_module_and_message) {
-      out->Print("import $Module$\n",
-                 "Module", meth_vals.second.first);
-    }
-    out->Print("request_deserializers = {\n");
-    for (auto& meth_vals : method_to_module_and_message) {
-      IndentScope raii_serializers_indent(out);
-      string full_input_type_path = meth_vals.second.first + "." +
-          meth_vals.second.second;
-      out->Print("\"$Method$\": $Type$.FromString,\n",
-                 "Method", meth_vals.first,
-                 "Type", full_input_type_path);
-    }
-    out->Print("}\n");
-    out->Print("response_serializers = {\n");
-    for (auto& meth_vals : method_to_module_and_message) {
-      IndentScope raii_serializers_indent(out);
-      out->Print("\"$Method$\": lambda x: x.SerializeToString(),\n",
-                 "Method", meth_vals.first);
-    }
-    out->Print("}\n");
-    out->Print("link = fore.activated_fore_link(port, request_deserializers, "
-               "response_serializers, root_certificates, key_chain_pairs)\n");
-    out->Print("return implementations.assemble_service("
-               "method_implementations, link)\n");
+    // out->Print("return implementations.insecure_server("
+    //            "method_service_descriptions, port)\n");
+    out->Print(
+        "return implementations.secure_server("
+        "method_service_descriptions, port, root_certificates,"
+        " key_chain_pairs)\n");
   }
   return true;
 }
@@ -296,66 +312,74 @@
   out->Print(dict, "def early_adopter_create_$Service$_stub(host, port):\n");
   {
     IndentScope raii_create_server_indent(out);
-    map<string, pair<string, string>> method_to_module_and_message;
-    out->Print("method_implementations = {\n");
+    map<string, string> method_description_constructors;
+    map<string, pair<string, string>> input_message_modules_and_classes;
+    map<string, pair<string, string>> output_message_modules_and_classes;
     for (int i = 0; i < service->method_count(); ++i) {
-      IndentScope raii_implementations_indent(out);
-      const MethodDescriptor* meth = service->method(i);
-      string meth_type =
-          string(meth->client_streaming() ? "stream" : "unary") +
-          string(meth->server_streaming() ? "_stream" : "_unary") + "_inline";
-      // TODO(atash): once the expected input to assemble_dynamic_inline_stub is
-      // cleaned up, change this to the expected argument's dictionary values.
-      out->Print("\"$Method$\": utilities.$Type$(None),\n",
-                 "Method", meth->name(),
-                 "Type", meth_type);
-      // Maintain information on the input type of the service method for later
-      // use in constructing the service assembly's activated fore link.
-      const Descriptor* output_type = meth->output_type();
-      pair<string, string> module_and_message;
-      if (!GetModuleAndMessagePath(output_type, &module_and_message)) {
+      const MethodDescriptor* method = service->method(i);
+      const string method_description_constructor =
+          string(method->client_streaming() ? "stream_" : "unary_") +
+          string(method->server_streaming() ? "stream_" : "unary_") +
+          "invocation_description";
+      pair<string, string> input_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->input_type(),
+                                   &input_message_module_and_class)) {
         return false;
       }
-      method_to_module_and_message.insert(
-          make_pair(meth->name(), module_and_message));
+      pair<string, string> output_message_module_and_class;
+      if (!GetModuleAndMessagePath(method->output_type(),
+                                   &output_message_module_and_class)) {
+        return false;
+      }
+      // Import the modules that define the messages used in RPCs.
+      out->Print("import $Module$\n", "Module",
+                 input_message_module_and_class.first);
+      out->Print("import $Module$\n", "Module",
+                 output_message_module_and_class.first);
+      method_description_constructors.insert(
+          make_pair(method->name(), method_description_constructor));
+      input_message_modules_and_classes.insert(
+          make_pair(method->name(), input_message_module_and_class));
+      output_message_modules_and_classes.insert(
+          make_pair(method->name(), output_message_module_and_class));
+    }
+    out->Print("method_invocation_descriptions = {\n");
+    for (auto& name_and_description_constructor :
+         method_description_constructors) {
+      IndentScope raii_descriptions_indent(out);
+      const string method_name = name_and_description_constructor.first;
+      auto input_message_module_and_class =
+          input_message_modules_and_classes.find(method_name);
+      auto output_message_module_and_class =
+          output_message_modules_and_classes.find(method_name);
+      out->Print("\"$Method$\": utilities.$Constructor$(\n", "Method",
+                 method_name, "Constructor",
+                 name_and_description_constructor.second);
+      {
+        IndentScope raii_description_arguments_indent(out);
+        out->Print(
+            "$InputTypeModule$.$InputTypeClass$.SerializeToString,\n",
+            "InputTypeModule", input_message_module_and_class->second.first,
+            "InputTypeClass", input_message_module_and_class->second.second);
+        out->Print(
+            "$OutputTypeModule$.$OutputTypeClass$.FromString,\n",
+            "OutputTypeModule", output_message_module_and_class->second.first,
+            "OutputTypeClass", output_message_module_and_class->second.second);
+      }
+      out->Print("),\n");
     }
     out->Print("}\n");
-    // Ensure that we've imported all of the relevant messages.
-    for (auto& meth_vals : method_to_module_and_message) {
-      out->Print("import $Module$\n",
-                 "Module", meth_vals.second.first);
-    }
-    out->Print("response_deserializers = {\n");
-    for (auto& meth_vals : method_to_module_and_message) {
-      IndentScope raii_serializers_indent(out);
-      string full_output_type_path = meth_vals.second.first + "." +
-          meth_vals.second.second;
-      out->Print("\"$Method$\": $Type$.FromString,\n",
-                 "Method", meth_vals.first,
-                 "Type", full_output_type_path);
-    }
-    out->Print("}\n");
-    out->Print("request_serializers = {\n");
-    for (auto& meth_vals : method_to_module_and_message) {
-      IndentScope raii_serializers_indent(out);
-      out->Print("\"$Method$\": lambda x: x.SerializeToString(),\n",
-                 "Method", meth_vals.first);
-    }
-    out->Print("}\n");
-    out->Print("link = rear.activated_rear_link("
-               "host, port, request_serializers, response_deserializers)\n");
-    out->Print("return implementations.assemble_dynamic_inline_stub("
-               "method_implementations, link)\n");
+    out->Print(
+        "return implementations.insecure_stub("
+        "method_invocation_descriptions, host, port)\n");
   }
   return true;
 }
 
 bool PrintPreamble(const FileDescriptor* file, Printer* out) {
   out->Print("import abc\n");
-  out->Print("from grpc._adapter import fore\n");
-  out->Print("from grpc._adapter import rear\n");
-  out->Print("from grpc.framework.assembly import implementations\n");
-  out->Print("from grpc.framework.assembly import utilities\n");
+  out->Print("from grpc.early_adopter import implementations\n");
+  out->Print("from grpc.early_adopter import utilities\n");
   return true;
 }
 
diff --git a/src/compiler/python_generator.h b/src/compiler/python_generator.h
index 773dfa3..df29ca1 100644
--- a/src/compiler/python_generator.h
+++ b/src/compiler/python_generator.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_COMPILER_PYTHON_GENERATOR_H__
-#define __GRPC_COMPILER_PYTHON_GENERATOR_H__
+#ifndef GRPC_INTERNAL_COMPILER_PYTHON_GENERATOR_H
+#define GRPC_INTERNAL_COMPILER_PYTHON_GENERATOR_H
 
 #include <string>
 #include <utility>
@@ -49,4 +49,4 @@
 
 }  // namespace grpc_python_generator
 
-#endif  // __GRPC_COMPILER_PYTHON_GENERATOR_H__
+#endif  // GRPC_INTERNAL_COMPILER_PYTHON_GENERATOR_H
diff --git a/src/compiler/ruby_generator.h b/src/compiler/ruby_generator.h
index d0c568f..4dd38e0 100644
--- a/src/compiler/ruby_generator.h
+++ b/src/compiler/ruby_generator.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_RUBY_GENERATOR_H_
-#define NET_GRPC_COMPILER_RUBY_GENERATOR_H_
+#ifndef GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_H
+#define GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_H
 
 #include <string>
 
@@ -48,4 +48,4 @@
 
 }  // namespace grpc_ruby_generator
 
-#endif  // NET_GRPC_COMPILER_RUBY_GENERATOR_H_
+#endif  // GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_H
diff --git a/src/compiler/ruby_generator_helpers-inl.h b/src/compiler/ruby_generator_helpers-inl.h
index 61d887b..f3a087b 100644
--- a/src/compiler/ruby_generator_helpers-inl.h
+++ b/src/compiler/ruby_generator_helpers-inl.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_RUBY_GENERATOR_HELPERS_INL_H_
-#define NET_GRPC_COMPILER_RUBY_GENERATOR_HELPERS_INL_H_
+#ifndef GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_HELPERS_INL_H
+#define GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_HELPERS_INL_H
 
 #include <string>
 
@@ -64,4 +64,4 @@
 
 }  // namespace grpc_ruby_generator
 
-#endif  // NET_GRPC_COMPILER_RUBY_GENERATOR_HELPERS_INL_H_
+#endif  // GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_HELPERS_INL_H
diff --git a/src/compiler/ruby_generator_map-inl.h b/src/compiler/ruby_generator_map-inl.h
index a86342e..f902b6d 100644
--- a/src/compiler/ruby_generator_map-inl.h
+++ b/src/compiler/ruby_generator_map-inl.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_RUBY_GENERATOR_MAP_INL_H_
-#define NET_GRPC_COMPILER_RUBY_GENERATOR_MAP_INL_H_
+#ifndef GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_MAP_INL_H
+#define GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_MAP_INL_H
 
 #include <iostream>
 #include <initializer_list>
@@ -69,4 +69,4 @@
 
 }  // namespace grpc_ruby_generator
 
-#endif  // NET_GRPC_COMPILER_RUBY_GENERATOR_MAP_INL_H_
+#endif  // GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_MAP_INL_H
diff --git a/src/compiler/ruby_generator_string-inl.h b/src/compiler/ruby_generator_string-inl.h
index 7c2e4e5..bdd314c 100644
--- a/src/compiler/ruby_generator_string-inl.h
+++ b/src/compiler/ruby_generator_string-inl.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef NET_GRPC_COMPILER_RUBY_GENERATOR_STRING_INL_H_
-#define NET_GRPC_COMPILER_RUBY_GENERATOR_STRING_INL_H_
+#ifndef GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_STRING_INL_H
+#define GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_STRING_INL_H
 
 #include <algorithm>
 #include <string>
@@ -130,4 +130,4 @@
 
 }  // namespace grpc_ruby_generator
 
-#endif  // NET_GRPC_COMPILER_RUBY_GENERATOR_STRING_INL_H_
+#endif  // GRPC_INTERNAL_COMPILER_RUBY_GENERATOR_STRING_INL_H
diff --git a/src/core/channel/census_filter.h b/src/core/channel/census_filter.h
index 6acf969..4f9759f 100644
--- a/src/core/channel/census_filter.h
+++ b/src/core/channel/census_filter.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CENSUS_FILTER_H__
-#define __GRPC_INTERNAL_CHANNEL_CENSUS_FILTER_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -41,4 +41,4 @@
 extern const grpc_channel_filter grpc_client_census_filter;
 extern const grpc_channel_filter grpc_server_census_filter;
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CENSUS_FILTER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H */
diff --git a/src/core/channel/channel_args.h b/src/core/channel/channel_args.h
index 640bbd8..eb5bf63 100644
--- a/src/core/channel/channel_args.h
+++ b/src/core/channel/channel_args.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CHANNEL_ARGS_H__
-#define __GRPC_INTERNAL_CHANNEL_CHANNEL_ARGS_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H
 
 #include <grpc/grpc.h>
 
@@ -51,4 +51,4 @@
    is specified in channel args, otherwise returns 0. */
 int grpc_channel_args_is_census_enabled(const grpc_channel_args *a);
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CHANNEL_ARGS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H */
diff --git a/src/core/channel/channel_stack.c b/src/core/channel/channel_stack.c
index 0382a7a..21df977 100644
--- a/src/core/channel/channel_stack.c
+++ b/src/core/channel/channel_stack.c
@@ -36,6 +36,8 @@
 
 #include <stdlib.h>
 
+int grpc_trace_channel = 0;
+
 /* Memory layouts.
 
    Channel stack is laid out as: {
diff --git a/src/core/channel/channel_stack.h b/src/core/channel/channel_stack.h
index 1ca95e7..ef1da7b 100644
--- a/src/core/channel/channel_stack.h
+++ b/src/core/channel/channel_stack.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CHANNEL_STACK_H__
-#define __GRPC_INTERNAL_CHANNEL_CHANNEL_STACK_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H
 
 /* A channel filter defines how operations on a channel are implemented.
    Channel filters are chained together to create full channels, and if those
@@ -298,7 +298,9 @@
 void grpc_call_element_send_cancel(grpc_call_element *cur_elem);
 void grpc_call_element_send_finish(grpc_call_element *cur_elem);
 
-#define GRPC_CALL_LOG_OP(sev, elem, op) \
-  if (grpc_trace_bits & GRPC_TRACE_CHANNEL) grpc_call_log_op(sev, elem, op)
+extern int grpc_trace_channel;
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CHANNEL_STACK_H__ */
+#define GRPC_CALL_LOG_OP(sev, elem, op) \
+  if (grpc_trace_channel) grpc_call_log_op(sev, elem, op)
+
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_STACK_H */
diff --git a/src/core/channel/child_channel.h b/src/core/channel/child_channel.h
index 84a1106..3869540 100644
--- a/src/core/channel/child_channel.h
+++ b/src/core/channel/child_channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CHILD_CHANNEL_H_
-#define __GRPC_INTERNAL_CHANNEL_CHILD_CHANNEL_H_
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CHILD_CHANNEL_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CHILD_CHANNEL_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -61,4 +61,4 @@
 grpc_call_element *grpc_child_call_get_top_element(grpc_child_call *call);
 void grpc_child_call_destroy(grpc_child_call *call);
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CHILD_CHANNEL_H_ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CHILD_CHANNEL_H */
diff --git a/src/core/channel/client_channel.h b/src/core/channel/client_channel.h
index 7da4fc9..7a67a9f 100644
--- a/src/core/channel/client_channel.h
+++ b/src/core/channel/client_channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CLIENT_CHANNEL_H__
-#define __GRPC_INTERNAL_CHANNEL_CLIENT_CHANNEL_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CLIENT_CHANNEL_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CLIENT_CHANNEL_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -59,4 +59,4 @@
     grpc_channel_filter const **channel_filters, size_t num_channel_filters,
     grpc_mdctx *mdctx);
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CLIENT_CHANNEL_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CLIENT_CHANNEL_H */
diff --git a/src/core/channel/client_setup.h b/src/core/channel/client_setup.h
index f2b6426..70137e1 100644
--- a/src/core/channel/client_setup.h
+++ b/src/core/channel/client_setup.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CLIENT_SETUP_H__
-#define __GRPC_INTERNAL_CHANNEL_CLIENT_SETUP_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CLIENT_SETUP_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CLIENT_SETUP_H
 
 #include "src/core/channel/client_channel.h"
 #include "src/core/transport/metadata.h"
@@ -70,4 +70,4 @@
 
 grpc_mdctx *grpc_client_setup_get_mdctx(grpc_client_setup_request *r);
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CLIENT_SETUP_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CLIENT_SETUP_H */
diff --git a/src/core/channel/connected_channel.c b/src/core/channel/connected_channel.c
index fa18655..62611e0 100644
--- a/src/core/channel/connected_channel.c
+++ b/src/core/channel/connected_channel.c
@@ -48,12 +48,12 @@
 /* the protobuf library will (by default) start warning at 100megs */
 #define DEFAULT_MAX_MESSAGE_LENGTH (100 * 1024 * 1024)
 
-typedef struct {
+typedef struct connected_channel_channel_data {
   grpc_transport *transport;
   gpr_uint32 max_message_length;
 } channel_data;
 
-typedef struct {
+typedef struct connected_channel_call_data {
   grpc_call_element *elem;
   grpc_stream_op_buffer outgoing_sopb;
 
diff --git a/src/core/channel/connected_channel.h b/src/core/channel/connected_channel.h
index e19de62..8b35f69 100644
--- a/src/core/channel/connected_channel.h
+++ b/src/core/channel/connected_channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_CONNECTED_CHANNEL_H__
-#define __GRPC_INTERNAL_CHANNEL_CONNECTED_CHANNEL_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_CONNECTED_CHANNEL_H
+#define GRPC_INTERNAL_CORE_CHANNEL_CONNECTED_CHANNEL_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -46,4 +46,4 @@
 grpc_transport_setup_result grpc_connected_channel_bind_transport(
     grpc_channel_stack *channel_stack, grpc_transport *transport);
 
-#endif /* __GRPC_INTERNAL_CHANNEL_CONNECTED_CHANNEL_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_CONNECTED_CHANNEL_H */
diff --git a/src/core/channel/http_client_filter.h b/src/core/channel/http_client_filter.h
index 5882f8f..04eb839 100644
--- a/src/core/channel/http_client_filter.h
+++ b/src/core/channel/http_client_filter.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_HTTP_CLIENT_FILTER_H__
-#define __GRPC_INTERNAL_CHANNEL_HTTP_CLIENT_FILTER_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_HTTP_CLIENT_FILTER_H
+#define GRPC_INTERNAL_CORE_CHANNEL_HTTP_CLIENT_FILTER_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -41,4 +41,4 @@
 
 #define GRPC_ARG_HTTP2_SCHEME "grpc.http2_scheme"
 
-#endif /* __GRPC_INTERNAL_CHANNEL_HTTP_CLIENT_FILTER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_HTTP_CLIENT_FILTER_H */
diff --git a/src/core/channel/http_filter.h b/src/core/channel/http_filter.h
index b85cd39..1b116ad 100644
--- a/src/core/channel/http_filter.h
+++ b/src/core/channel/http_filter.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_HTTP_FILTER_H__
-#define __GRPC_INTERNAL_CHANNEL_HTTP_FILTER_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_HTTP_FILTER_H
+#define GRPC_INTERNAL_CORE_CHANNEL_HTTP_FILTER_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -40,4 +40,4 @@
    transports. */
 extern const grpc_channel_filter grpc_http_filter;
 
-#endif /* __GRPC_INTERNAL_CHANNEL_HTTP_FILTER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_HTTP_FILTER_H */
diff --git a/src/core/channel/http_server_filter.h b/src/core/channel/http_server_filter.h
index 0643c7b..42f76ed 100644
--- a/src/core/channel/http_server_filter.h
+++ b/src/core/channel/http_server_filter.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_HTTP_SERVER_FILTER_H__
-#define __GRPC_INTERNAL_CHANNEL_HTTP_SERVER_FILTER_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_HTTP_SERVER_FILTER_H
+#define GRPC_INTERNAL_CORE_CHANNEL_HTTP_SERVER_FILTER_H
 
 #include "src/core/channel/channel_stack.h"
 
 /* Processes metadata on the client side for HTTP2 transports */
 extern const grpc_channel_filter grpc_http_server_filter;
 
-#endif /* __GRPC_INTERNAL_CHANNEL_HTTP_SERVER_FILTER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_HTTP_SERVER_FILTER_H */
diff --git a/src/core/channel/metadata_buffer.h b/src/core/channel/metadata_buffer.h
index 701d69d..b7cc517 100644
--- a/src/core/channel/metadata_buffer.h
+++ b/src/core/channel/metadata_buffer.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_METADATA_BUFFER_H__
-#define __GRPC_INTERNAL_CHANNEL_METADATA_BUFFER_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_METADATA_BUFFER_H
+#define GRPC_INTERNAL_CORE_CHANNEL_METADATA_BUFFER_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -67,4 +67,4 @@
     grpc_metadata_buffer *buffer);
 void grpc_metadata_buffer_cleanup_elements(void *elements, grpc_op_error error);
 
-#endif /* __GRPC_INTERNAL_CHANNEL_METADATA_BUFFER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_METADATA_BUFFER_H */
diff --git a/src/core/channel/noop_filter.h b/src/core/channel/noop_filter.h
index 93c2bff..96463e5 100644
--- a/src/core/channel/noop_filter.h
+++ b/src/core/channel/noop_filter.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_CHANNEL_NOOP_FILTER_H__
-#define __GRPC_INTERNAL_CHANNEL_NOOP_FILTER_H__
+#ifndef GRPC_INTERNAL_CORE_CHANNEL_NOOP_FILTER_H
+#define GRPC_INTERNAL_CORE_CHANNEL_NOOP_FILTER_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -41,4 +41,4 @@
    customize for their own filters */
 extern const grpc_channel_filter grpc_no_op_filter;
 
-#endif /* __GRPC_INTERNAL_CHANNEL_NOOP_FILTER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_CHANNEL_NOOP_FILTER_H */
diff --git a/src/core/compression/algorithm.h b/src/core/compression/algorithm.h
index e398ae3..9dd9f57 100644
--- a/src/core/compression/algorithm.h
+++ b/src/core/compression/algorithm.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_COMPRESSION_ALGORITHM_H__
-#define __GRPC_INTERNAL_COMPRESSION_ALGORITHM_H__
+#ifndef GRPC_INTERNAL_CORE_COMPRESSION_ALGORITHM_H
+#define GRPC_INTERNAL_CORE_COMPRESSION_ALGORITHM_H
 
 /* The various compression algorithms supported by GRPC */
 typedef enum {
@@ -46,4 +46,4 @@
 const char *grpc_compression_algorithm_name(
     grpc_compression_algorithm algorithm);
 
-#endif /* __GRPC_INTERNAL_COMPRESSION_ALGORITHM_H__ */
+#endif  /* GRPC_INTERNAL_CORE_COMPRESSION_ALGORITHM_H */
diff --git a/src/core/compression/message_compress.h b/src/core/compression/message_compress.h
index 666da2e..e8aef1a 100644
--- a/src/core/compression/message_compress.h
+++ b/src/core/compression/message_compress.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_COMPRESSION_MESSAGE_COMPRESS_H__
-#define __GRPC_INTERNAL_COMPRESSION_MESSAGE_COMPRESS_H__
+#ifndef GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H
+#define GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H
 
 #include "src/core/compression/algorithm.h"
 #include <grpc/support/slice_buffer.h>
@@ -49,4 +49,4 @@
 int grpc_msg_decompress(grpc_compression_algorithm algorithm,
                         gpr_slice_buffer *input, gpr_slice_buffer *output);
 
-#endif /* __GRPC_INTERNAL_COMPRESSION_MESSAGE_COMPRESS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_COMPRESSION_MESSAGE_COMPRESS_H */
diff --git a/src/core/debug/trace.c b/src/core/debug/trace.c
index b8eb755..32c35e7 100644
--- a/src/core/debug/trace.c
+++ b/src/core/debug/trace.c
@@ -39,8 +39,21 @@
 #include <grpc/support/log.h>
 #include "src/core/support/env.h"
 
-#if GRPC_ENABLE_TRACING
-gpr_uint32 grpc_trace_bits = 0;
+typedef struct tracer {
+  const char *name;
+  int *flag;
+  struct tracer *next;
+} tracer;
+static tracer *tracers;
+
+void grpc_register_tracer(const char *name, int *flag) {
+  tracer *t = gpr_malloc(sizeof(*t));
+  t->name = name;
+  t->flag = flag;
+  t->next = tracers;
+  *flag = 0;
+  tracers = t;
+}
 
 static void add(const char *beg, const char *end, char ***ss, size_t *ns) {
   size_t n = *ns;
@@ -67,26 +80,26 @@
   char **strings = NULL;
   size_t nstrings = 0;
   size_t i;
+  tracer *t;
   split(s, &strings, &nstrings);
 
-  grpc_trace_bits = 0;
-
   for (i = 0; i < nstrings; i++) {
     const char *s = strings[i];
-    if (0 == strcmp(s, "surface")) {
-      grpc_trace_bits |= GRPC_TRACE_SURFACE;
-    } else if (0 == strcmp(s, "channel")) {
-      grpc_trace_bits |= GRPC_TRACE_CHANNEL;
-    } else if (0 == strcmp(s, "tcp")) {
-      grpc_trace_bits |= GRPC_TRACE_TCP;
-    } else if (0 == strcmp(s, "secure_endpoint")) {
-      grpc_trace_bits |= GRPC_TRACE_SECURE_ENDPOINT;
-    } else if (0 == strcmp(s, "http")) {
-      grpc_trace_bits |= GRPC_TRACE_HTTP;
-    } else if (0 == strcmp(s, "all")) {
-      grpc_trace_bits = -1;
+    if (0 == strcmp(s, "all")) {
+      for (t = tracers; t; t = t->next) {
+        *t->flag = 1;
+      }
     } else {
-      gpr_log(GPR_ERROR, "Unknown trace var: '%s'", s);
+      int found = 0;
+      for (t = tracers; t; t = t->next) {
+        if (0 == strcmp(s, t->name)) {
+          *t->flag = 1;
+          found = 1;
+        }
+      }
+      if (!found) {
+        gpr_log(GPR_ERROR, "Unknown trace var: '%s'", s);
+      }
     }
   }
 
@@ -96,17 +109,15 @@
   gpr_free(strings);
 }
 
-void grpc_init_trace_bits() {
-  char *e = gpr_getenv("GRPC_TRACE");
-  if (e == NULL) {
-    grpc_trace_bits = 0;
-  } else {
+void grpc_tracer_init(const char *env_var) {
+  char *e = gpr_getenv(env_var);
+  if (e != NULL) {
     parse(e);
     gpr_free(e);
   }
+  while (tracers) {
+    tracer *t = tracers;
+    tracers = t->next;
+    gpr_free(t);
+  }
 }
-#else
-void grpc_init_trace_bits() {
-}
-#endif
-
diff --git a/src/core/debug/trace.h b/src/core/debug/trace.h
index bf9b8a3..c02f14b 100644
--- a/src/core/debug/trace.h
+++ b/src/core/debug/trace.h
@@ -31,31 +31,12 @@
  *
  */
 
-#ifndef GRPC_CORE_DEBUG_TRACE_H
-#define GRPC_CORE_DEBUG_TRACE_H
+#ifndef GRPC_INTERNAL_CORE_DEBUG_TRACE_H
+#define GRPC_INTERNAL_CORE_DEBUG_TRACE_H
 
 #include <grpc/support/port_platform.h>
 
-/* set to zero to remove all debug trace code */
-#ifndef GRPC_ENABLE_TRACING
-# define GRPC_ENABLE_TRACING 1
-#endif
+void grpc_register_tracer(const char *name, int *flag);
+void grpc_tracer_init(const char *env_var_name);
 
-typedef enum {
-  GRPC_TRACE_SURFACE = 1 << 0,
-  GRPC_TRACE_CHANNEL = 1 << 1,
-  GRPC_TRACE_TCP = 1 << 2,
-  GRPC_TRACE_SECURE_ENDPOINT = 1 << 3,
-  GRPC_TRACE_HTTP = 1 << 4
-} grpc_trace_bit_value;
-
-#if GRPC_ENABLE_TRACING
-extern gpr_uint32 grpc_trace_bits;
-#else
-# define grpc_trace_bits 0
-#endif
-
-void grpc_init_trace_bits();
-
-#endif
-
+#endif  /* GRPC_INTERNAL_CORE_DEBUG_TRACE_H */
diff --git a/src/core/httpcli/format_request.h b/src/core/httpcli/format_request.h
index e06b632..8bfb20b 100644
--- a/src/core/httpcli/format_request.h
+++ b/src/core/httpcli/format_request.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_HTTPCLI_FORMAT_REQUEST_H__
-#define __GRPC_INTERNAL_HTTPCLI_FORMAT_REQUEST_H__
+#ifndef GRPC_INTERNAL_CORE_HTTPCLI_FORMAT_REQUEST_H
+#define GRPC_INTERNAL_CORE_HTTPCLI_FORMAT_REQUEST_H
 
 #include "src/core/httpcli/httpcli.h"
 #include <grpc/support/slice.h>
@@ -42,4 +42,4 @@
                                            const char *body_bytes,
                                            size_t body_size);
 
-#endif /* __GRPC_INTERNAL_HTTPCLI_FORMAT_REQUEST_H__ */
+#endif  /* GRPC_INTERNAL_CORE_HTTPCLI_FORMAT_REQUEST_H */
diff --git a/src/core/httpcli/httpcli.h b/src/core/httpcli/httpcli.h
index f620987..255c5ed 100644
--- a/src/core/httpcli/httpcli.h
+++ b/src/core/httpcli/httpcli.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_HTTPCLI_HTTPCLI_H__
-#define __GRPC_INTERNAL_HTTPCLI_HTTPCLI_H__
+#ifndef GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_H
+#define GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_H
 
 #include <stddef.h>
 
@@ -115,4 +115,4 @@
 void grpc_httpcli_set_override(grpc_httpcli_get_override get,
                                grpc_httpcli_post_override post);
 
-#endif /* __GRPC_INTERNAL_HTTPCLI_HTTPCLI_H__ */
+#endif  /* GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_H */
diff --git a/src/core/httpcli/httpcli_security_context.h b/src/core/httpcli/httpcli_security_context.h
index 5a1311e..a776828 100644
--- a/src/core/httpcli/httpcli_security_context.h
+++ b/src/core/httpcli/httpcli_security_context.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_HTTPCLI_HTTPCLI_SECURITY_CONTEXT_H__
-#define __GRPC_INTERNAL_HTTPCLI_HTTPCLI_SECURITY_CONTEXT_H__
+#ifndef GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_SECURITY_CONTEXT_H
+#define GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_SECURITY_CONTEXT_H
 
 #include "src/core/security/security_context.h"
 
@@ -40,4 +40,4 @@
     const unsigned char *pem_root_certs, size_t pem_root_certs_size,
     const char *secure_peer_name, grpc_channel_security_context **ctx);
 
-#endif /* __GRPC_INTERNAL_HTTPCLI_HTTPCLI_SECURITY_CONTEXT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_HTTPCLI_HTTPCLI_SECURITY_CONTEXT_H */
diff --git a/src/core/httpcli/parser.h b/src/core/httpcli/parser.h
index db1fa0a..71280e7 100644
--- a/src/core/httpcli/parser.h
+++ b/src/core/httpcli/parser.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_HTTPCLI_PARSER_H__
-#define __GRPC_INTERNAL_HTTPCLI_PARSER_H__
+#ifndef GRPC_INTERNAL_CORE_HTTPCLI_PARSER_H
+#define GRPC_INTERNAL_CORE_HTTPCLI_PARSER_H
 
 #include "src/core/httpcli/httpcli.h"
 #include <grpc/support/port_platform.h>
@@ -61,4 +61,4 @@
 int grpc_httpcli_parser_parse(grpc_httpcli_parser *parser, gpr_slice slice);
 int grpc_httpcli_parser_eof(grpc_httpcli_parser *parser);
 
-#endif /* __GRPC_INTERNAL_HTTPCLI_PARSER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_HTTPCLI_PARSER_H */
diff --git a/src/core/iomgr/alarm.h b/src/core/iomgr/alarm.h
index 6dcc63a..e5262e2 100644
--- a/src/core/iomgr/alarm.h
+++ b/src/core/iomgr/alarm.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_ALARM_H__
-#define __GRPC_INTERNAL_IOMGR_ALARM_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_ALARM_H
+#define GRPC_INTERNAL_CORE_IOMGR_ALARM_H
 
 #include "src/core/iomgr/iomgr.h"
 #include <grpc/support/port_platform.h>
@@ -86,4 +86,4 @@
    Requires:  cancel() must happen after add() on a given alarm */
 void grpc_alarm_cancel(grpc_alarm *alarm);
 
-#endif /* __GRPC_INTERNAL_IOMGR_ALARM_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_ALARM_H */
diff --git a/src/core/iomgr/alarm_heap.h b/src/core/iomgr/alarm_heap.h
index bb6e5e3..c5adfc6 100644
--- a/src/core/iomgr/alarm_heap.h
+++ b/src/core/iomgr/alarm_heap.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_ALARM_HEAP_H_
-#define __GRPC_INTERNAL_IOMGR_ALARM_HEAP_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_ALARM_HEAP_H
+#define GRPC_INTERNAL_CORE_IOMGR_ALARM_HEAP_H
 
 #include "src/core/iomgr/alarm.h"
 
@@ -54,4 +54,4 @@
 
 int grpc_alarm_heap_is_empty(grpc_alarm_heap *heap);
 
-#endif /* __GRPC_INTERNAL_IOMGR_ALARM_HEAP_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_ALARM_HEAP_H */
diff --git a/src/core/iomgr/alarm_internal.h b/src/core/iomgr/alarm_internal.h
index cbd8fa9..0268a01 100644
--- a/src/core/iomgr/alarm_internal.h
+++ b/src/core/iomgr/alarm_internal.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_ALARM_INTERNAL_H_
-#define __GRPC_INTERNAL_IOMGR_ALARM_INTERNAL_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_ALARM_INTERNAL_H
+#define GRPC_INTERNAL_CORE_IOMGR_ALARM_INTERNAL_H
 
 #include <grpc/support/sync.h>
 #include <grpc/support/time.h>
@@ -59,4 +59,4 @@
 
 void grpc_kick_poller(void);
 
-#endif /* __GRPC_INTERNAL_IOMGR_ALARM_INTERNAL_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_ALARM_INTERNAL_H */
diff --git a/src/core/iomgr/endpoint.h b/src/core/iomgr/endpoint.h
index e89cf66..881e851 100644
--- a/src/core/iomgr/endpoint.h
+++ b/src/core/iomgr/endpoint.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_ENDPOINT_H__
-#define __GRPC_INTERNAL_IOMGR_ENDPOINT_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_ENDPOINT_H
+#define GRPC_INTERNAL_CORE_IOMGR_ENDPOINT_H
 
 #include "src/core/iomgr/pollset.h"
 #include <grpc/support/slice.h>
@@ -103,4 +103,4 @@
   const grpc_endpoint_vtable *vtable;
 };
 
-#endif /* __GRPC_INTERNAL_IOMGR_ENDPOINT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_ENDPOINT_H */
diff --git a/src/core/iomgr/endpoint_pair.h b/src/core/iomgr/endpoint_pair.h
index 2e46aab..dffbd36 100644
--- a/src/core/iomgr/endpoint_pair.h
+++ b/src/core/iomgr/endpoint_pair.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_ENDPOINT_PAIR_H_
-#define __GRPC_INTERNAL_IOMGR_ENDPOINT_PAIR_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_ENDPOINT_PAIR_H
+#define GRPC_INTERNAL_CORE_IOMGR_ENDPOINT_PAIR_H
 
 #include "src/core/iomgr/endpoint.h"
 
@@ -43,4 +43,4 @@
 
 grpc_endpoint_pair grpc_iomgr_create_endpoint_pair(size_t read_slice_size);
 
-#endif /* __GRPC_INTERNAL_IOMGR_ENDPOINT_PAIR_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_ENDPOINT_PAIR_H */
diff --git a/src/core/iomgr/fd_posix.h b/src/core/iomgr/fd_posix.h
index 2a308c8..be21f2b 100644
--- a/src/core/iomgr/fd_posix.h
+++ b/src/core/iomgr/fd_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_FD_POSIX_H_
-#define __GRPC_INTERNAL_IOMGR_FD_POSIX_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_FD_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_FD_POSIX_H
 
 #include "src/core/iomgr/iomgr.h"
 #include "src/core/iomgr/pollset.h"
@@ -143,4 +143,4 @@
 void grpc_fd_global_init(void);
 void grpc_fd_global_shutdown(void);
 
-#endif /* __GRPC_INTERNAL_IOMGR_FD_POSIX_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_FD_POSIX_H */
diff --git a/src/core/iomgr/iocp_windows.h b/src/core/iomgr/iocp_windows.h
index d023170..3313319 100644
--- a/src/core/iomgr/iocp_windows.h
+++ b/src/core/iomgr/iocp_windows.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_IOCP_WINDOWS_H_
-#define __GRPC_INTERNAL_IOMGR_IOCP_WINDOWS_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_IOCP_WINDOWS_H
+#define GRPC_INTERNAL_CORE_IOMGR_IOCP_WINDOWS_H
 
 #include <windows.h>
 #include <grpc/support/sync.h>
@@ -49,4 +49,4 @@
 void grpc_socket_notify_on_read(grpc_winsocket *, void(*cb)(void *, int success),
                                 void *opaque);
 
-#endif /* __GRPC_INTERNAL_IOMGR_IOCP_WINDOWS_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_IOCP_WINDOWS_H */
diff --git a/src/core/iomgr/iomgr.h b/src/core/iomgr/iomgr.h
index 18a7d15..1f5d23f 100644
--- a/src/core/iomgr/iomgr.h
+++ b/src/core/iomgr/iomgr.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_IOMGR_H__
-#define __GRPC_INTERNAL_IOMGR_IOMGR_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_IOMGR_H
+#define GRPC_INTERNAL_CORE_IOMGR_IOMGR_H
 
 /* gRPC Callback definition */
 typedef void (*grpc_iomgr_cb_func)(void *arg, int success);
@@ -44,4 +44,4 @@
    and causes the invocation of a callback at some point in the future */
 void grpc_iomgr_add_callback(grpc_iomgr_cb_func cb, void *cb_arg);
 
-#endif /* __GRPC_INTERNAL_IOMGR_IOMGR_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_IOMGR_H */
diff --git a/src/core/iomgr/iomgr_internal.h b/src/core/iomgr/iomgr_internal.h
index 7f29f44..0792325 100644
--- a/src/core/iomgr/iomgr_internal.h
+++ b/src/core/iomgr/iomgr_internal.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_IOMGR_INTERNAL_H_
-#define __GRPC_INTERNAL_IOMGR_IOMGR_INTERNAL_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_IOMGR_INTERNAL_H
+#define GRPC_INTERNAL_CORE_IOMGR_IOMGR_INTERNAL_H
 
 #include "src/core/iomgr/iomgr.h"
 #include "src/core/iomgr/iomgr_internal.h"
@@ -48,4 +48,4 @@
 void grpc_iomgr_platform_init(void);
 void grpc_iomgr_platform_shutdown(void);
 
-#endif /* __GRPC_INTERNAL_IOMGR_IOMGR_INTERNAL_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_IOMGR_INTERNAL_H */
diff --git a/src/core/iomgr/iomgr_posix.c b/src/core/iomgr/iomgr_posix.c
index 14e3d18..758ae77 100644
--- a/src/core/iomgr/iomgr_posix.c
+++ b/src/core/iomgr/iomgr_posix.c
@@ -36,11 +36,14 @@
 #ifdef GPR_POSIX_SOCKET
 
 #include "src/core/iomgr/iomgr_posix.h"
+#include "src/core/debug/trace.h"
 #include "src/core/iomgr/fd_posix.h"
+#include "src/core/iomgr/tcp_posix.h"
 
 void grpc_iomgr_platform_init(void) {
   grpc_fd_global_init();
   grpc_pollset_global_init();
+  grpc_register_tracer("tcp", &grpc_tcp_trace);
 }
 
 void grpc_iomgr_platform_shutdown(void) {
diff --git a/src/core/iomgr/iomgr_posix.h b/src/core/iomgr/iomgr_posix.h
index f9e9b3d..a404f64 100644
--- a/src/core/iomgr/iomgr_posix.h
+++ b/src/core/iomgr/iomgr_posix.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_IOMGR_POSIX_H_
-#define __GRPC_INTERNAL_IOMGR_IOMGR_POSIX_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_IOMGR_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_IOMGR_POSIX_H
 
 #include "src/core/iomgr/iomgr_internal.h"
 
 void grpc_pollset_global_init(void);
 void grpc_pollset_global_shutdown(void);
 
-#endif /* __GRPC_INTERNAL_IOMGR_IOMGR_POSIX_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_IOMGR_POSIX_H */
diff --git a/src/core/iomgr/pollset.h b/src/core/iomgr/pollset.h
index c26947f..067af87 100644
--- a/src/core/iomgr/pollset.h
+++ b/src/core/iomgr/pollset.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_H_
-#define __GRPC_INTERNAL_IOMGR_POLLSET_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_H
+#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_H
 
 #include <grpc/support/port_platform.h>
 #include <grpc/support/time.h>
@@ -71,4 +71,4 @@
    Requires GRPC_POLLSET_MU(pollset) locked. */
 void grpc_pollset_kick(grpc_pollset *pollset);
 
-#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_H */
diff --git a/src/core/iomgr/pollset_kick.h b/src/core/iomgr/pollset_kick.h
index b224177..cc9357d 100644
--- a/src/core/iomgr/pollset_kick.h
+++ b/src/core/iomgr/pollset_kick.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_
-#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_H
+#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_H
 
 #include <grpc/support/port_platform.h>
 
@@ -71,4 +71,4 @@
 
 void grpc_pollset_kick_kick(grpc_pollset_kick_state *kick_state);
 
-#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_KICK_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_H */
diff --git a/src/core/iomgr/pollset_kick_posix.h b/src/core/iomgr/pollset_kick_posix.h
index 162ae5b..4276991 100644
--- a/src/core/iomgr/pollset_kick_posix.h
+++ b/src/core/iomgr/pollset_kick_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_
-#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_POSIX_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_POSIX_H
 
 #include "src/core/iomgr/wakeup_fd_posix.h"
 #include <grpc/support/sync.h>
@@ -48,4 +48,4 @@
   struct grpc_kick_fd_info *fd_info;
 } grpc_pollset_kick_state;
 
-#endif  /* __GRPC_INTERNALIOMGR_POLLSET_KICK_POSIX_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_POSIX_H */
diff --git a/src/core/iomgr/pollset_kick_windows.h b/src/core/iomgr/pollset_kick_windows.h
index 1053230..3836aa0 100644
--- a/src/core/iomgr/pollset_kick_windows.h
+++ b/src/core/iomgr/pollset_kick_windows.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_KICK_WINDOWS_H_
-#define __GRPC_INTERNAL_IOMGR_POLLSET_KICK_WINDOWS_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_WINDOWS_H
+#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_WINDOWS_H
 
 #include <grpc/support/sync.h>
 
@@ -42,4 +42,4 @@
   int unused;
 } grpc_pollset_kick_state;
 
-#endif  /* __GRPC_INTERNALIOMGR_POLLSET_KICK_WINDOWS_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_KICK_WINDOWS_H */
diff --git a/src/core/iomgr/pollset_posix.h b/src/core/iomgr/pollset_posix.h
index 86b6c9f..da843f7 100644
--- a/src/core/iomgr/pollset_posix.h
+++ b/src/core/iomgr/pollset_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_POSIX_H_
-#define __GRPC_INTERNAL_IOMGR_POLLSET_POSIX_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_POSIX_H
 
 #include <grpc/support/sync.h>
 
@@ -104,4 +104,4 @@
 void grpc_platform_become_multipoller(grpc_pollset *pollset,
                                       struct grpc_fd **fds, size_t fd_count);
 
-#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_POSIX_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_POSIX_H */
diff --git a/src/core/iomgr/pollset_windows.h b/src/core/iomgr/pollset_windows.h
index 41c193f..266175a 100644
--- a/src/core/iomgr/pollset_windows.h
+++ b/src/core/iomgr/pollset_windows.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_POLLSET_WINDOWS_H_
-#define __GRPC_INTERNAL_IOMGR_POLLSET_WINDOWS_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_WINDOWS_H
+#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_WINDOWS_H
 
 #include <windows.h>
 #include <grpc/support/sync.h>
@@ -53,4 +53,4 @@
 #define GRPC_POLLSET_MU(pollset) (&(pollset)->mu)
 #define GRPC_POLLSET_CV(pollset) (&(pollset)->cv)
 
-#endif /* __GRPC_INTERNAL_IOMGR_POLLSET_WINDOWS_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_WINDOWS_H */
diff --git a/src/core/iomgr/resolve_address.h b/src/core/iomgr/resolve_address.h
index 65432ec..8f1d7a2 100644
--- a/src/core/iomgr/resolve_address.h
+++ b/src/core/iomgr/resolve_address.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_RESOLVE_ADDRESS_H__
-#define __GRPC_INTERNAL_IOMGR_RESOLVE_ADDRESS_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_RESOLVE_ADDRESS_H
+#define GRPC_INTERNAL_CORE_IOMGR_RESOLVE_ADDRESS_H
 
 #include <stddef.h>
 
@@ -66,4 +66,4 @@
 grpc_resolved_addresses *grpc_blocking_resolve_address(
     const char *addr, const char *default_port);
 
-#endif /* __GRPC_INTERNAL_IOMGR_RESOLVE_ADDRESS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_RESOLVE_ADDRESS_H */
diff --git a/src/core/iomgr/sockaddr.h b/src/core/iomgr/sockaddr.h
index a5f7c54..7528db7 100644
--- a/src/core/iomgr/sockaddr.h
+++ b/src/core/iomgr/sockaddr.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_SOCKADDR_H_
-#define __GRPC_INTERNAL_IOMGR_SOCKADDR_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_H
+#define GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_H
 
 #include <grpc/support/port_platform.h>
 
@@ -44,4 +44,4 @@
 #include "src/core/iomgr/sockaddr_posix.h"
 #endif
 
-#endif /* __GRPC_INTERNAL_IOMGR_SOCKADDR_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_H */
diff --git a/src/core/iomgr/sockaddr_posix.h b/src/core/iomgr/sockaddr_posix.h
index 00115e2..2a3d932 100644
--- a/src/core/iomgr/sockaddr_posix.h
+++ b/src/core/iomgr/sockaddr_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_SOCKADDR_POSIX_H_
-#define __GRPC_INTERNAL_IOMGR_SOCKADDR_POSIX_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_POSIX_H
 
 #include <arpa/inet.h>
 #include <sys/socket.h>
@@ -41,4 +41,4 @@
 #include <netdb.h>
 #include <unistd.h>
 
-#endif /* __GRPC_INTERNAL_IOMGR_SOCKADDR_POSIX_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_POSIX_H */
diff --git a/src/core/iomgr/sockaddr_utils.h b/src/core/iomgr/sockaddr_utils.h
index d3a25ad..bdfb834 100644
--- a/src/core/iomgr/sockaddr_utils.h
+++ b/src/core/iomgr/sockaddr_utils.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_SOCKADDR_UTILS_H__
-#define __GRPC_INTERNAL_IOMGR_SOCKADDR_UTILS_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_UTILS_H
+#define GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_UTILS_H
 
 #include "src/core/iomgr/sockaddr.h"
 
@@ -84,4 +84,4 @@
 int grpc_sockaddr_to_string(char **out, const struct sockaddr *addr,
                             int normalize);
 
-#endif /* __GRPC_INTERNAL_IOMGR_SOCKADDR_UTILS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_UTILS_H */
diff --git a/src/core/iomgr/sockaddr_win32.h b/src/core/iomgr/sockaddr_win32.h
index 6ed164c..3a5f27b 100644
--- a/src/core/iomgr/sockaddr_win32.h
+++ b/src/core/iomgr/sockaddr_win32.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_SOCKADDR_WIN32_H_
-#define __GRPC_INTERNAL_IOMGR_SOCKADDR_WIN32_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_WIN32_H
+#define GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_WIN32_H
 
 #include <ws2tcpip.h>
 #include <winsock2.h>
 #include <mswsock.h>
 
-#endif  /* __GRPC_INTERNAL_IOMGR_SOCKADDR_WIN32_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_SOCKADDR_WIN32_H */
diff --git a/src/core/iomgr/socket_utils_posix.h b/src/core/iomgr/socket_utils_posix.h
index b35fe78..c161082 100644
--- a/src/core/iomgr/socket_utils_posix.h
+++ b/src/core/iomgr/socket_utils_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_SOCKET_UTILS_POSIX_H__
-#define __GRPC_INTERNAL_IOMGR_SOCKET_UTILS_POSIX_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_SOCKET_UTILS_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_SOCKET_UTILS_POSIX_H
 
 #include <unistd.h>
 #include <sys/socket.h>
@@ -105,4 +105,4 @@
 int grpc_create_dualstack_socket(const struct sockaddr *addr, int type,
                                  int protocol, grpc_dualstack_mode *dsmode);
 
-#endif /* __GRPC_INTERNAL_IOMGR_SOCKET_UTILS_POSIX_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_SOCKET_UTILS_POSIX_H */
diff --git a/src/core/iomgr/socket_windows.h b/src/core/iomgr/socket_windows.h
index de80e97..d4776ab 100644
--- a/src/core/iomgr/socket_windows.h
+++ b/src/core/iomgr/socket_windows.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_HANDLE_WINDOWS_H__
-#define __GRPC_INTERNAL_IOMGR_HANDLE_WINDOWS_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_SOCKET_WINDOWS_H
+#define GRPC_INTERNAL_CORE_IOMGR_SOCKET_WINDOWS_H
 
 #include <windows.h>
 
@@ -72,4 +72,4 @@
 void grpc_winsocket_shutdown(grpc_winsocket *socket);
 void grpc_winsocket_orphan(grpc_winsocket *socket);
 
-#endif /* __GRPC_INTERNAL_IOMGR_HANDLE_WINDOWS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_SOCKET_WINDOWS_H */
diff --git a/src/core/iomgr/tcp_client.h b/src/core/iomgr/tcp_client.h
index c919c02..2e91497 100644
--- a/src/core/iomgr/tcp_client.h
+++ b/src/core/iomgr/tcp_client.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_TCP_CLIENT_H__
-#define __GRPC_INTERNAL_IOMGR_TCP_CLIENT_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_TCP_CLIENT_H
+#define GRPC_INTERNAL_CORE_IOMGR_TCP_CLIENT_H
 
 #include "src/core/iomgr/endpoint.h"
 #include "src/core/iomgr/sockaddr.h"
@@ -45,4 +45,4 @@
                              void *arg, const struct sockaddr *addr,
                              int addr_len, gpr_timespec deadline);
 
-#endif /* __GRPC_INTERNAL_IOMGR_TCP_CLIENT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_TCP_CLIENT_H */
diff --git a/src/core/iomgr/tcp_posix.c b/src/core/iomgr/tcp_posix.c
index eceb0fe..597a2a6 100644
--- a/src/core/iomgr/tcp_posix.c
+++ b/src/core/iomgr/tcp_posix.c
@@ -63,6 +63,8 @@
   int memory_owned;        /* True if slices array is owned */
 } grpc_tcp_slice_state;
 
+int grpc_tcp_trace = 0;
+
 static void slice_state_init(grpc_tcp_slice_state *state, gpr_slice *slices,
                              size_t nslices, size_t valid_slices) {
   state->slices = slices;
@@ -294,7 +296,7 @@
                          grpc_endpoint_cb_status status) {
   grpc_endpoint_read_cb cb = tcp->read_cb;
 
-  if (grpc_trace_bits & GRPC_TRACE_TCP) {
+  if (grpc_tcp_trace) {
     size_t i;
     gpr_log(GPR_DEBUG, "read: status=%d", status);
     for (i = 0; i < nslices; i++) {
@@ -495,7 +497,7 @@
   grpc_tcp *tcp = (grpc_tcp *)ep;
   grpc_endpoint_write_status status;
 
-  if (grpc_trace_bits & GRPC_TRACE_TCP) {
+  if (grpc_tcp_trace) {
     size_t i;
 
     for (i = 0; i < nslices; i++) {
diff --git a/src/core/iomgr/tcp_posix.h b/src/core/iomgr/tcp_posix.h
index 6ff8770..44279d5 100644
--- a/src/core/iomgr/tcp_posix.h
+++ b/src/core/iomgr/tcp_posix.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_TCP_POSIX_H__
-#define __GRPC_INTERNAL_IOMGR_TCP_POSIX_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_TCP_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_TCP_POSIX_H
 /*
    Low level TCP "bottom half" implementation, for use by transports built on
    top of a TCP connection.
@@ -49,8 +49,10 @@
 
 #define GRPC_TCP_DEFAULT_READ_SLICE_SIZE 8192
 
+extern int grpc_tcp_trace;
+
 /* Create a tcp endpoint given a file desciptor and a read slice size.
    Takes ownership of fd. */
 grpc_endpoint *grpc_tcp_create(grpc_fd *fd, size_t read_slice_size);
 
-#endif /* __GRPC_INTERNAL_IOMGR_TCP_POSIX_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_TCP_POSIX_H */
diff --git a/src/core/iomgr/tcp_server.h b/src/core/iomgr/tcp_server.h
index c1e5f45..68ee85c 100644
--- a/src/core/iomgr/tcp_server.h
+++ b/src/core/iomgr/tcp_server.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_TCP_SERVER_H__
-#define __GRPC_INTERNAL_IOMGR_TCP_SERVER_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_TCP_SERVER_H
+#define GRPC_INTERNAL_CORE_IOMGR_TCP_SERVER_H
 
 #include "src/core/iomgr/endpoint.h"
 
@@ -73,4 +73,4 @@
 
 void grpc_tcp_server_destroy(grpc_tcp_server *server);
 
-#endif /* __GRPC_INTERNAL_IOMGR_TCP_SERVER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_TCP_SERVER_H */
diff --git a/src/core/iomgr/tcp_windows.h b/src/core/iomgr/tcp_windows.h
index 565d42e..4cbc12c 100644
--- a/src/core/iomgr/tcp_windows.h
+++ b/src/core/iomgr/tcp_windows.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_TCP_WINDOWS_H__
-#define __GRPC_INTERNAL_IOMGR_TCP_WINDOWS_H__
+#ifndef GRPC_INTERNAL_CORE_IOMGR_TCP_WINDOWS_H
+#define GRPC_INTERNAL_CORE_IOMGR_TCP_WINDOWS_H
 /*
    Low level TCP "bottom half" implementation, for use by transports built on
    top of a TCP connection.
@@ -54,4 +54,4 @@
 
 int grpc_tcp_prepare_socket(SOCKET sock);
 
-#endif /* __GRPC_INTERNAL_IOMGR_TCP_WINDOWS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_TCP_WINDOWS_H */
diff --git a/src/core/iomgr/time_averaged_stats.h b/src/core/iomgr/time_averaged_stats.h
index e901f3c..13894b2 100644
--- a/src/core/iomgr/time_averaged_stats.h
+++ b/src/core/iomgr/time_averaged_stats.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_TIME_AVERAGED_STATS_H_
-#define __GRPC_INTERNAL_IOMGR_TIME_AVERAGED_STATS_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_TIME_AVERAGED_STATS_H
+#define GRPC_INTERNAL_CORE_IOMGR_TIME_AVERAGED_STATS_H
 
 /* This tracks a time-decaying weighted average.  It works by collecting
    batches of samples and then mixing their average into a time-decaying
@@ -85,4 +85,4 @@
    value. */
 double grpc_time_averaged_stats_update_average(grpc_time_averaged_stats *stats);
 
-#endif /* __GRPC_INTERNAL_IOMGR_TIME_AVERAGED_STATS_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_TIME_AVERAGED_STATS_H */
diff --git a/src/core/iomgr/wakeup_fd_pipe.h b/src/core/iomgr/wakeup_fd_pipe.h
index a2fcde5..aa8f977 100644
--- a/src/core/iomgr/wakeup_fd_pipe.h
+++ b/src/core/iomgr/wakeup_fd_pipe.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_IOMGR_WAKEUP_FD_PIPE_H_
-#define __GRPC_INTERNAL_IOMGR_WAKEUP_FD_PIPE_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_WAKEUP_FD_PIPE_H
+#define GRPC_INTERNAL_CORE_IOMGR_WAKEUP_FD_PIPE_H
 
 #include "src/core/iomgr/wakeup_fd_posix.h"
 
 extern grpc_wakeup_fd_vtable grpc_pipe_wakeup_fd_vtable;
 
-#endif  /* __GRPC_INTERNAL_IOMGR_WAKEUP_FD_PIPE_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_WAKEUP_FD_PIPE_H */
diff --git a/src/core/iomgr/wakeup_fd_posix.h b/src/core/iomgr/wakeup_fd_posix.h
index 75bb9fc..1b0ff70 100644
--- a/src/core/iomgr/wakeup_fd_posix.h
+++ b/src/core/iomgr/wakeup_fd_posix.h
@@ -59,8 +59,8 @@
  * 2. If the polling thread was awakened by a wakeup_fd event, call
  *    grpc_wakeup_fd_consume_wakeup() on it.
  */
-#ifndef __GRPC_INTERNAL_IOMGR_WAKEUP_FD_POSIX_H_
-#define __GRPC_INTERNAL_IOMGR_WAKEUP_FD_POSIX_H_
+#ifndef GRPC_INTERNAL_CORE_IOMGR_WAKEUP_FD_POSIX_H
+#define GRPC_INTERNAL_CORE_IOMGR_WAKEUP_FD_POSIX_H
 
 void grpc_wakeup_fd_global_init(void);
 void grpc_wakeup_fd_global_destroy(void);
@@ -96,4 +96,4 @@
  * wakeup_fd_nospecial.c if no such implementation exists. */
 extern const grpc_wakeup_fd_vtable grpc_specialized_wakeup_fd_vtable;
 
-#endif /* __GRPC_INTERNAL_IOMGR_WAKEUP_FD_POSIX_H_ */
+#endif  /* GRPC_INTERNAL_CORE_IOMGR_WAKEUP_FD_POSIX_H */
diff --git a/src/core/json/json.h b/src/core/json/json.h
index dc519e9..69cbac1 100644
--- a/src/core/json/json.h
+++ b/src/core/json/json.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SRC_CORE_JSON_JSON_H__
-#define __GRPC_SRC_CORE_JSON_JSON_H__
+#ifndef GRPC_INTERNAL_CORE_JSON_JSON_H
+#define GRPC_INTERNAL_CORE_JSON_JSON_H
 
 #include <stdlib.h>
 
@@ -85,4 +85,4 @@
 grpc_json* grpc_json_create(grpc_json_type type);
 void grpc_json_destroy(grpc_json* json);
 
-#endif /* __GRPC_SRC_CORE_JSON_JSON_H__ */
+#endif  /* GRPC_INTERNAL_CORE_JSON_JSON_H */
diff --git a/src/core/json/json_common.h b/src/core/json/json_common.h
index 60763cc..84bf375 100644
--- a/src/core/json/json_common.h
+++ b/src/core/json/json_common.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SRC_CORE_JSON_JSON_COMMON_H__
-#define __GRPC_SRC_CORE_JSON_JSON_COMMON_H__
+#ifndef GRPC_INTERNAL_CORE_JSON_JSON_COMMON_H
+#define GRPC_INTERNAL_CORE_JSON_JSON_COMMON_H
 
 /* The various json types. */
 typedef enum {
@@ -46,4 +46,4 @@
   GRPC_JSON_TOP_LEVEL
 } grpc_json_type;
 
-#endif /* __GRPC_SRC_CORE_JSON_JSON_COMMON_H__ */
+#endif  /* GRPC_INTERNAL_CORE_JSON_JSON_COMMON_H */
diff --git a/src/core/json/json_reader.h b/src/core/json/json_reader.h
index f7f5912..b1a5ace 100644
--- a/src/core/json/json_reader.h
+++ b/src/core/json/json_reader.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SRC_CORE_JSON_JSON_READER_H__
-#define __GRPC_SRC_CORE_JSON_JSON_READER_H__
+#ifndef GRPC_INTERNAL_CORE_JSON_JSON_READER_H
+#define GRPC_INTERNAL_CORE_JSON_JSON_READER_H
 
 #include <grpc/support/port_platform.h>
 #include "src/core/json/json_common.h"
@@ -157,4 +157,4 @@
  */
 int grpc_json_reader_is_complete(grpc_json_reader* reader);
 
-#endif /* __GRPC_SRC_CORE_JSON_JSON_READER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_JSON_JSON_READER_H */
diff --git a/src/core/json/json_writer.h b/src/core/json/json_writer.h
index 5d5d089..dfa61a5 100644
--- a/src/core/json/json_writer.h
+++ b/src/core/json/json_writer.h
@@ -43,8 +43,8 @@
  * a valid UTF-8 string overall.
  */
 
-#ifndef __GRPC_SRC_CORE_JSON_JSON_WRITER_H__
-#define __GRPC_SRC_CORE_JSON_JSON_WRITER_H__
+#ifndef GRPC_INTERNAL_CORE_JSON_JSON_WRITER_H
+#define GRPC_INTERNAL_CORE_JSON_JSON_WRITER_H
 
 #include <stdlib.h>
 
@@ -90,4 +90,4 @@
 /* Sets a string value. It'll be escaped, and utf-8 validated. */
 void grpc_json_writer_value_string(grpc_json_writer* writer, const char* string);
 
-#endif /* __GRPC_SRC_CORE_JSON_JSON_WRITER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_JSON_JSON_WRITER_H */
diff --git a/src/core/security/auth.h b/src/core/security/auth.h
index fee75c4..08dc415 100644
--- a/src/core/security/auth.h
+++ b/src/core/security/auth.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SECURITY_AUTH_H__
-#define __GRPC_INTERNAL_SECURITY_AUTH_H__
+#ifndef GRPC_INTERNAL_CORE_SECURITY_AUTH_H
+#define GRPC_INTERNAL_CORE_SECURITY_AUTH_H
 
 #include "src/core/channel/channel_stack.h"
 
 extern const grpc_channel_filter grpc_client_auth_filter;
 
-#endif /* __GRPC_INTERNAL_SECURITY_AUTH_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_AUTH_H */
diff --git a/src/core/security/base64.h b/src/core/security/base64.h
index 0eb69d0..6a7cd8e 100644
--- a/src/core/security/base64.h
+++ b/src/core/security/base64.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SECURITY_BASE64_H_
-#define __GRPC_INTERNAL_SECURITY_BASE64_H_
+#ifndef GRPC_INTERNAL_CORE_SECURITY_BASE64_H
+#define GRPC_INTERNAL_CORE_SECURITY_BASE64_H
 
 #include <grpc/support/slice.h>
 
@@ -45,4 +45,4 @@
    slice in case of failure. */
 gpr_slice grpc_base64_decode(const char *b64, int url_safe);
 
-#endif /* __GRPC_INTERNAL_SECURITY_BASE64_H_ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_BASE64_H */
diff --git a/src/core/security/credentials.h b/src/core/security/credentials.h
index 0a0074c..454e668 100644
--- a/src/core/security/credentials.h
+++ b/src/core/security/credentials.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SECURITY_CREDENTIALS_H__
-#define __GRPC_INTERNAL_SECURITY_CREDENTIALS_H__
+#ifndef GRPC_INTERNAL_CORE_SECURITY_CREDENTIALS_H
+#define GRPC_INTERNAL_CORE_SECURITY_CREDENTIALS_H
 
 #include "src/core/transport/stream_op.h"
 #include <grpc/grpc.h>
@@ -160,4 +160,4 @@
 const grpc_ssl_server_config *grpc_ssl_server_credentials_get_config(
     const grpc_server_credentials *ssl_creds);
 
-#endif /* __GRPC_INTERNAL_SECURITY_CREDENTIALS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_CREDENTIALS_H */
diff --git a/src/core/security/json_token.h b/src/core/security/json_token.h
index 1ef9682..029ede3 100644
--- a/src/core/security/json_token.h
+++ b/src/core/security/json_token.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SECURITY_JSON_TOKEN_H_
-#define __GRPC_INTERNAL_SECURITY_JSON_TOKEN_H_
+#ifndef GRPC_INTERNAL_CORE_SECURITY_JSON_TOKEN_H
+#define GRPC_INTERNAL_CORE_SECURITY_JSON_TOKEN_H
 
 #include <grpc/support/slice.h>
 #include <openssl/rsa.h>
@@ -79,4 +79,4 @@
 void grpc_jwt_encode_and_sign_set_override(
     grpc_jwt_encode_and_sign_override func);
 
-#endif /* __GRPC_INTERNAL_SECURITY_JSON_TOKEN_H_ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_JSON_TOKEN_H */
diff --git a/src/core/security/secure_endpoint.c b/src/core/security/secure_endpoint.c
index d6bdf5a..7bb1de4 100644
--- a/src/core/security/secure_endpoint.c
+++ b/src/core/security/secure_endpoint.c
@@ -65,6 +65,8 @@
   gpr_refcount ref;
 } secure_endpoint;
 
+int grpc_trace_secure_endpoint = 0;
+
 static void secure_endpoint_ref(secure_endpoint *ep) { gpr_ref(&ep->ref); }
 
 static void destroy(secure_endpoint *secure_ep) {
@@ -96,7 +98,7 @@
 
 static void call_read_cb(secure_endpoint *ep, gpr_slice *slices, size_t nslices,
                          grpc_endpoint_cb_status error) {
-  if (grpc_trace_bits & GRPC_TRACE_SECURE_ENDPOINT) {
+  if (grpc_trace_secure_endpoint) {
     size_t i;
     for (i = 0; i < nslices; i++) {
       char *data =
@@ -231,7 +233,7 @@
   grpc_endpoint_write_status status;
   GPR_ASSERT(ep->output_buffer.count == 0);
 
-  if (grpc_trace_bits & GRPC_TRACE_SECURE_ENDPOINT) {
+  if (grpc_trace_secure_endpoint) {
     for (i = 0; i < nslices; i++) {
       char *data =
           gpr_hexdump((char *)GPR_SLICE_START_PTR(slices[i]),
diff --git a/src/core/security/secure_endpoint.h b/src/core/security/secure_endpoint.h
index 82ba408..93c29b5 100644
--- a/src/core/security/secure_endpoint.h
+++ b/src/core/security/secure_endpoint.h
@@ -31,17 +31,19 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_ENDPOINT_SECURE_ENDPOINT_H__
-#define __GRPC_INTERNAL_ENDPOINT_SECURE_ENDPOINT_H__
+#ifndef GRPC_INTERNAL_CORE_SECURITY_SECURE_ENDPOINT_H
+#define GRPC_INTERNAL_CORE_SECURITY_SECURE_ENDPOINT_H
 
 #include "src/core/iomgr/endpoint.h"
 #include <grpc/support/slice.h>
 
 struct tsi_frame_protector;
 
+extern int grpc_trace_secure_endpoint;
+
 /* Takes ownership of protector and to_wrap, and refs leftover_slices. */
 grpc_endpoint *grpc_secure_endpoint_create(
     struct tsi_frame_protector *protector, grpc_endpoint *to_wrap,
     gpr_slice *leftover_slices, size_t leftover_nslices);
 
-#endif /* __GRPC_INTERNAL_ENDPOINT_SECURE_ENDPOINT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_SECURE_ENDPOINT_H */
diff --git a/src/core/security/secure_transport_setup.h b/src/core/security/secure_transport_setup.h
index 21f41fd..e1f8ed7 100644
--- a/src/core/security/secure_transport_setup.h
+++ b/src/core/security/secure_transport_setup.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SECURITY_SECURE_TRANSPORT_SETUP_H__
-#define __GRPC_INTERNAL_SECURITY_SECURE_TRANSPORT_SETUP_H__
+#ifndef GRPC_INTERNAL_CORE_SECURITY_SECURE_TRANSPORT_SETUP_H
+#define GRPC_INTERNAL_CORE_SECURITY_SECURE_TRANSPORT_SETUP_H
 
 #include "src/core/iomgr/endpoint.h"
 #include "src/core/security/security_context.h"
@@ -50,4 +50,4 @@
                                  grpc_secure_transport_setup_done_cb cb,
                                  void *user_data);
 
-#endif /* __GRPC_INTERNAL_SECURITY_SECURE_TRANSPORT_SETUP_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_SECURE_TRANSPORT_SETUP_H */
diff --git a/src/core/security/security_context.h b/src/core/security/security_context.h
index 40e2dac..0b5821c 100644
--- a/src/core/security/security_context.h
+++ b/src/core/security/security_context.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SECURITY_SECURITY_CONTEXT_H__
-#define __GRPC_INTERNAL_SECURITY_SECURITY_CONTEXT_H__
+#ifndef GRPC_INTERNAL_CORE_SECURITY_SECURITY_CONTEXT_H
+#define GRPC_INTERNAL_CORE_SECURITY_SECURITY_CONTEXT_H
 
 #include <grpc/grpc_security.h>
 #include "src/core/iomgr/endpoint.h"
@@ -212,4 +212,4 @@
                                                 const grpc_channel_args *args,
                                                 grpc_security_context *ctx);
 
-#endif /* __GRPC_INTERNAL_SECURITY_SECURITY_CONTEXT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SECURITY_SECURITY_CONTEXT_H */
diff --git a/src/core/statistics/census_interface.h b/src/core/statistics/census_interface.h
index 0bb0a9f..eb4349c 100644
--- a/src/core/statistics/census_interface.h
+++ b/src/core/statistics/census_interface.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_STATISTICS_CENSUS_INTERFACE_H__
-#define __GRPC_INTERNAL_STATISTICS_CENSUS_INTERFACE_H__
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_CENSUS_INTERFACE_H
+#define GRPC_INTERNAL_CORE_STATISTICS_CENSUS_INTERFACE_H
 
 #include <grpc/support/port_platform.h>
 
@@ -73,4 +73,4 @@
 /* Ends tracing. Calling this function will invalidate the input op_id. */
 void census_tracing_end_op(census_op_id op_id);
 
-#endif /* __GRPC_INTERNAL_STATISTICS_CENSUS_INTERFACE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_STATISTICS_CENSUS_INTERFACE_H */
diff --git a/src/core/statistics/census_log.h b/src/core/statistics/census_log.h
index 01fd63a..06869b7 100644
--- a/src/core/statistics/census_log.h
+++ b/src/core/statistics/census_log.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_STATISTICS_LOG_H__
-#define __GRPC_INTERNAL_STATISTICS_LOG_H__
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_CENSUS_LOG_H
+#define GRPC_INTERNAL_CORE_STATISTICS_CENSUS_LOG_H
 
 #include <stddef.h>
 
@@ -88,4 +88,4 @@
    out-of-space. */
 int census_log_out_of_space_count(void);
 
-#endif /* __GRPC_INTERNAL_STATISTICS_LOG_H__ */
+#endif  /* GRPC_INTERNAL_CORE_STATISTICS_CENSUS_LOG_H */
diff --git a/src/core/statistics/census_rpc_stats.h b/src/core/statistics/census_rpc_stats.h
index 942de81..9336dce 100644
--- a/src/core/statistics/census_rpc_stats.h
+++ b/src/core/statistics/census_rpc_stats.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_STATISTICS_CENSUS_RPC_STATS_H__
-#define __GRPC_INTERNAL_STATISTICS_CENSUS_RPC_STATS_H__
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_CENSUS_RPC_STATS_H
+#define GRPC_INTERNAL_CORE_STATISTICS_CENSUS_RPC_STATS_H
 
 #include "src/core/statistics/census_interface.h"
 #include <grpc/support/port_platform.h>
@@ -98,4 +98,4 @@
 }
 #endif
 
-#endif /* __GRPC_INTERNAL_STATISTICS_CENSUS_RPC_STATS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_STATISTICS_CENSUS_RPC_STATS_H */
diff --git a/src/core/statistics/census_tracing.h b/src/core/statistics/census_tracing.h
index 51aa578..a4494b5 100644
--- a/src/core/statistics/census_tracing.h
+++ b/src/core/statistics/census_tracing.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_STATISTICS_CENSUS_TRACING_H_
-#define __GRPC_INTERNAL_STATISTICS_CENSUS_TRACING_H_
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_CENSUS_TRACING_H
+#define GRPC_INTERNAL_CORE_STATISTICS_CENSUS_TRACING_H
 
 #include <grpc/support/time.h>
 #include "src/core/statistics/census_rpc_stats.h"
@@ -93,4 +93,4 @@
 }
 #endif
 
-#endif /* __GRPC_INTERNAL_STATISTICS_CENSUS_TRACING_H_ */
+#endif  /* GRPC_INTERNAL_CORE_STATISTICS_CENSUS_TRACING_H */
diff --git a/src/core/statistics/hash_table.h b/src/core/statistics/hash_table.h
index 2c2386d..7bcb4bc 100644
--- a/src/core/statistics/hash_table.h
+++ b/src/core/statistics/hash_table.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_STATISTICS_HASH_TABLE_H_
-#define __GRPC_INTERNAL_STATISTICS_HASH_TABLE_H_
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_HASH_TABLE_H
+#define GRPC_INTERNAL_CORE_STATISTICS_HASH_TABLE_H
 
 #include <stddef.h>
 
@@ -128,4 +128,4 @@
    should not invalidate data entries. */
 gpr_uint64 census_ht_for_all(const census_ht* ht, census_ht_itr_cb);
 
-#endif /* __GRPC_INTERNAL_STATISTICS_HASH_TABLE_H_ */
+#endif  /* GRPC_INTERNAL_CORE_STATISTICS_HASH_TABLE_H */
diff --git a/src/core/statistics/window_stats.h b/src/core/statistics/window_stats.h
index 98f8dac..d733d8d 100644
--- a/src/core/statistics/window_stats.h
+++ b/src/core/statistics/window_stats.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_STATISTICS_WINDOW_STATS_H_
-#define __GRPC_INTERNAL_STATISTICS_WINDOW_STATS_H_
+#ifndef GRPC_INTERNAL_CORE_STATISTICS_WINDOW_STATS_H
+#define GRPC_INTERNAL_CORE_STATISTICS_WINDOW_STATS_H
 
 #include <grpc/support/time.h>
 
@@ -170,4 +170,4 @@
    assertion failure). This function is thread-compatible. */
 void census_window_stats_destroy(struct census_window_stats* wstats);
 
-#endif /* __GRPC_INTERNAL_STATISTICS_WINDOW_STATS_H_ */
+#endif  /* GRPC_INTERNAL_CORE_STATISTICS_WINDOW_STATS_H */
diff --git a/src/core/support/env.h b/src/core/support/env.h
index 0c6091b..4f2e394 100644
--- a/src/core/support/env.h
+++ b/src/core/support/env.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_ENV_H__
-#define __GRPC_SUPPORT_ENV_H__
+#ifndef GRPC_INTERNAL_CORE_SUPPORT_ENV_H
+#define GRPC_INTERNAL_CORE_SUPPORT_ENV_H
 
 #include <stdio.h>
 
@@ -57,4 +57,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_ENV_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SUPPORT_ENV_H */
diff --git a/src/core/support/file.h b/src/core/support/file.h
index 600850e..ee6ca7b 100644
--- a/src/core/support/file.h
+++ b/src/core/support/file.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_FILE_H__
-#define __GRPC_SUPPORT_FILE_H__
+#ifndef GRPC_INTERNAL_CORE_SUPPORT_FILE_H
+#define GRPC_INTERNAL_CORE_SUPPORT_FILE_H
 
 #include <stdio.h>
 
@@ -58,4 +58,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_FILE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SUPPORT_FILE_H */
diff --git a/src/core/support/log_posix.c b/src/core/support/log_posix.c
index 8f85791..afca792 100644
--- a/src/core/support/log_posix.c
+++ b/src/core/support/log_posix.c
@@ -64,7 +64,7 @@
   } else {
     message = allocated = gpr_malloc(ret + 1);
     va_start(args, format);
-    vsnprintf(message, ret, format, args);
+    vsnprintf(message, ret + 1, format, args);
     va_end(args);
   }
   gpr_log_message(file, line, severity, message);
diff --git a/src/core/support/murmur_hash.h b/src/core/support/murmur_hash.h
index 06c0c56..85ab2fe 100644
--- a/src/core/support/murmur_hash.h
+++ b/src/core/support/murmur_hash.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SUPPORT_MURMUR_HASH_H__
-#define __GRPC_INTERNAL_SUPPORT_MURMUR_HASH_H__
+#ifndef GRPC_INTERNAL_CORE_SUPPORT_MURMUR_HASH_H
+#define GRPC_INTERNAL_CORE_SUPPORT_MURMUR_HASH_H
 
 #include <grpc/support/port_platform.h>
 
@@ -41,4 +41,4 @@
 /* compute the hash of key (length len) */
 gpr_uint32 gpr_murmur_hash3(const void *key, size_t len, gpr_uint32 seed);
 
-#endif /* __GRPC_INTERNAL_SUPPORT_MURMUR_HASH_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SUPPORT_MURMUR_HASH_H */
diff --git a/src/core/support/string.h b/src/core/support/string.h
index eaa1826..faf3342 100644
--- a/src/core/support/string.h
+++ b/src/core/support/string.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_STRING_H__
-#define __GRPC_SUPPORT_STRING_H__
+#ifndef GRPC_INTERNAL_CORE_SUPPORT_STRING_H
+#define GRPC_INTERNAL_CORE_SUPPORT_STRING_H
 
 #include <stddef.h>
 
@@ -106,4 +106,4 @@
 }
 #endif
 
-#endif /* __GRPC_SUPPORT_STRING_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SUPPORT_STRING_H */
diff --git a/src/core/support/string_win32.h b/src/core/support/string_win32.h
index 5dbb40d..0bc3247 100644
--- a/src/core/support/string_win32.h
+++ b/src/core/support/string_win32.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_SUPPORT_STRING_WIN32_H__
-#define __GRPC_SUPPORT_STRING_WIN32_H__
+#ifndef GRPC_INTERNAL_CORE_SUPPORT_STRING_WIN32_H
+#define GRPC_INTERNAL_CORE_SUPPORT_STRING_WIN32_H
 
 #include <grpc/support/port_platform.h>
 
@@ -46,4 +46,4 @@
 
 #endif  /* GPR_WIN32 */
 
-#endif /* __GRPC_SUPPORT_STRING_WIN32_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SUPPORT_STRING_WIN32_H */
diff --git a/src/core/support/thd_internal.h b/src/core/support/thd_internal.h
index 0fb1447..4683c37 100644
--- a/src/core/support/thd_internal.h
+++ b/src/core/support/thd_internal.h
@@ -31,9 +31,9 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SUPPORT_THD_INTERNAL_H__
-#define __GRPC_INTERNAL_SUPPORT_THD_INTERNAL_H__
+#ifndef GRPC_INTERNAL_CORE_SUPPORT_THD_INTERNAL_H
+#define GRPC_INTERNAL_CORE_SUPPORT_THD_INTERNAL_H
 
 /* Internal interfaces between modules within the gpr support library.  */
 
-#endif /* __GRPC_INTERNAL_SUPPORT_THD_INTERNAL_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SUPPORT_THD_INTERNAL_H */
diff --git a/src/core/surface/byte_buffer_queue.h b/src/core/surface/byte_buffer_queue.h
index 9d3b525..32c57f8 100644
--- a/src/core/surface/byte_buffer_queue.h
+++ b/src/core/surface/byte_buffer_queue.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_BYTE_BUFFER_QUEUE_H__
-#define __GRPC_INTERNAL_SURFACE_BYTE_BUFFER_QUEUE_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_BYTE_BUFFER_QUEUE_H
+#define GRPC_INTERNAL_CORE_SURFACE_BYTE_BUFFER_QUEUE_H
 
 #include <grpc/byte_buffer.h>
 
@@ -57,4 +57,4 @@
 int grpc_bbq_empty(grpc_byte_buffer_queue *q);
 void grpc_bbq_push(grpc_byte_buffer_queue *q, grpc_byte_buffer *bb);
 
-#endif  /* __GRPC_INTERNAL_SURFACE_BYTE_BUFFER_QUEUE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_BYTE_BUFFER_QUEUE_H */
diff --git a/src/core/surface/call.h b/src/core/surface/call.h
index dd3ad12..cb81cb5 100644
--- a/src/core/surface/call.h
+++ b/src/core/surface/call.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_CALL_H__
-#define __GRPC_INTERNAL_SURFACE_CALL_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_CALL_H
+#define GRPC_INTERNAL_CORE_SURFACE_CALL_H
 
 #include "src/core/channel/channel_stack.h"
 #include "src/core/channel/metadata_buffer.h"
@@ -119,4 +119,4 @@
 /* Given the top call_element, get the call object. */
 grpc_call *grpc_call_from_top_element(grpc_call_element *surface_element);
 
-#endif /* __GRPC_INTERNAL_SURFACE_CALL_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_CALL_H */
diff --git a/src/core/surface/channel.h b/src/core/surface/channel.h
index 6bdfd47..d3e5118 100644
--- a/src/core/surface/channel.h
+++ b/src/core/surface/channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_CHANNEL_H__
-#define __GRPC_INTERNAL_SURFACE_CHANNEL_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H
+#define GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H
 
 #include "src/core/channel/channel_stack.h"
 
@@ -50,4 +50,4 @@
 void grpc_channel_internal_ref(grpc_channel *channel);
 void grpc_channel_internal_unref(grpc_channel *channel);
 
-#endif /* __GRPC_INTERNAL_SURFACE_CHANNEL_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_CHANNEL_H */
diff --git a/src/core/surface/client.h b/src/core/surface/client.h
index 06ce8f6..9db2ccf 100644
--- a/src/core/surface/client.h
+++ b/src/core/surface/client.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_CLIENT_H__
-#define __GRPC_INTERNAL_SURFACE_CLIENT_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_CLIENT_H
+#define GRPC_INTERNAL_CORE_SURFACE_CLIENT_H
 
 #include "src/core/channel/channel_stack.h"
 
 extern const grpc_channel_filter grpc_client_surface_filter;
 
-#endif /* __GRPC_INTERNAL_SURFACE_CLIENT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_CLIENT_H */
diff --git a/src/core/surface/completion_queue.c b/src/core/surface/completion_queue.c
index c4b8d60..6a1d83c 100644
--- a/src/core/surface/completion_queue.c
+++ b/src/core/surface/completion_queue.c
@@ -71,6 +71,7 @@
   grpc_pollset pollset;
   /* 0 initially, 1 once we've begun shutting down */
   int shutdown;
+  int shutdown_called;
   /* Head of a linked list of queued events (prev points to the last element) */
   event *queue;
   /* Fixed size chained hash table of events for pluck() */
@@ -107,7 +108,6 @@
                          grpc_event_finish_func on_finish, void *user_data) {
   event *ev = gpr_malloc(sizeof(event));
   gpr_uintptr bucket = ((gpr_uintptr)tag) % NUM_TAG_BUCKETS;
-  GPR_ASSERT(!cc->shutdown);
   ev->base.type = type;
   ev->base.tag = tag;
   ev->base.call = call;
@@ -150,6 +150,7 @@
 #endif
   if (gpr_unref(&cc->refs)) {
     GPR_ASSERT(!cc->shutdown);
+    GPR_ASSERT(cc->shutdown_called);
     cc->shutdown = 1;
     gpr_cv_broadcast(GRPC_POLLSET_CV(&cc->pollset));
   }
@@ -380,6 +381,10 @@
 /* Shutdown simply drops a ref that we reserved at creation time; if we drop
    to zero here, then enter shutdown mode and wake up any waiters */
 void grpc_completion_queue_shutdown(grpc_completion_queue *cc) {
+  gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
+  cc->shutdown_called = 1;
+  gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset));
+
   if (gpr_unref(&cc->refs)) {
     gpr_mu_lock(GRPC_POLLSET_MU(&cc->pollset));
     GPR_ASSERT(!cc->shutdown);
diff --git a/src/core/surface/completion_queue.h b/src/core/surface/completion_queue.h
index a7688b8..3054264 100644
--- a/src/core/surface/completion_queue.h
+++ b/src/core/surface/completion_queue.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_COMPLETION_QUEUE_H__
-#define __GRPC_INTERNAL_SURFACE_COMPLETION_QUEUE_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_COMPLETION_QUEUE_H
+#define GRPC_INTERNAL_CORE_SURFACE_COMPLETION_QUEUE_H
 
 /* Internal API for completion channels */
 
@@ -114,4 +114,4 @@
 
 grpc_pollset *grpc_cq_pollset(grpc_completion_queue *cc);
 
-#endif /* __GRPC_INTERNAL_SURFACE_COMPLETION_QUEUE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_COMPLETION_QUEUE_H */
diff --git a/src/core/surface/event_string.h b/src/core/surface/event_string.h
index d9b1e4e..e8a8f93 100644
--- a/src/core/surface/event_string.h
+++ b/src/core/surface/event_string.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_EVENT_STRING_H__
-#define __GRPC_INTERNAL_SURFACE_EVENT_STRING_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_EVENT_STRING_H
+#define GRPC_INTERNAL_CORE_SURFACE_EVENT_STRING_H
 
 #include <grpc/grpc.h>
 
 /* Returns a string describing an event. Must be later freed with gpr_free() */
 char *grpc_event_string(grpc_event *ev);
 
-#endif /* __GRPC_INTERNAL_SURFACE_EVENT_STRING_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_EVENT_STRING_H */
diff --git a/src/core/surface/init.c b/src/core/surface/init.c
index 2d8f36e..4db66fb 100644
--- a/src/core/surface/init.c
+++ b/src/core/surface/init.c
@@ -35,6 +35,10 @@
 #include "src/core/iomgr/iomgr.h"
 #include "src/core/debug/trace.h"
 #include "src/core/statistics/census_interface.h"
+#include "src/core/channel/channel_stack.h"
+#include "src/core/surface/init.h"
+#include "src/core/surface/surface_trace.h"
+#include "src/core/transport/chttp2_transport.h"
 
 static gpr_once g_init = GPR_ONCE_INIT;
 static gpr_mu g_init_mu;
@@ -50,7 +54,11 @@
 
   gpr_mu_lock(&g_init_mu);
   if (++g_initializations == 1) {
-    grpc_init_trace_bits();
+    grpc_register_tracer("channel", &grpc_trace_channel);
+    grpc_register_tracer("surface", &grpc_surface_trace);
+    grpc_register_tracer("http", &grpc_http_trace);
+    grpc_security_pre_init();
+    grpc_tracer_init("GRPC_TRACE");
     grpc_iomgr_init();
     census_init();
   }
diff --git a/src/core/surface/init.h b/src/core/surface/init.h
new file mode 100644
index 0000000..ab40bed
--- /dev/null
+++ b/src/core/surface/init.h
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_INTERNAL_CORE_SURFACE_INIT_H
+#define GRPC_INTERNAL_CORE_SURFACE_INIT_H
+
+void grpc_security_pre_init(void);
+
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_INIT_H */
diff --git a/src/core/surface/init_secure.c b/src/core/surface/init_secure.c
new file mode 100644
index 0000000..fa20e91
--- /dev/null
+++ b/src/core/surface/init_secure.c
@@ -0,0 +1,42 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/surface/init.h"
+#include "src/core/debug/trace.h"
+#include "src/core/security/secure_endpoint.h"
+#include "src/core/tsi/transport_security_interface.h"
+
+void grpc_security_pre_init(void) {
+  grpc_register_tracer("secure_endpoint", &grpc_trace_secure_endpoint);
+  grpc_register_tracer("transport_security", &tsi_tracing_enabled);
+}
diff --git a/src/core/surface/init_unsecure.c b/src/core/surface/init_unsecure.c
new file mode 100644
index 0000000..ddb70ce
--- /dev/null
+++ b/src/core/surface/init_unsecure.c
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/surface/init.h"
+
+void grpc_security_pre_init(void) {
+}
diff --git a/src/core/surface/lame_client.h b/src/core/surface/lame_client.h
index 2bd97b9..b13e8cb 100644
--- a/src/core/surface/lame_client.h
+++ b/src/core/surface/lame_client.h
@@ -31,12 +31,12 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_LAME_CLIENT_H_
-#define __GRPC_INTERNAL_SURFACE_LAME_CLIENT_H_
+#ifndef GRPC_INTERNAL_CORE_SURFACE_LAME_CLIENT_H
+#define GRPC_INTERNAL_CORE_SURFACE_LAME_CLIENT_H
 
 #include <grpc/grpc.h>
 
 /* Create a lame client: this client fails every operation attempted on it. */
 grpc_channel *grpc_lame_client_channel_create(void);
 
-#endif /* __GRPC_INTERNAL_SURFACE_LAME_CLIENT_H_ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_LAME_CLIENT_H */
diff --git a/src/core/surface/server.h b/src/core/surface/server.h
index 5ae59b2..e33f69b 100644
--- a/src/core/surface/server.h
+++ b/src/core/surface/server.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_SERVER_H__
-#define __GRPC_INTERNAL_SURFACE_SERVER_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_SERVER_H
+#define GRPC_INTERNAL_CORE_SURFACE_SERVER_H
 
 #include "src/core/channel/channel_stack.h"
 #include <grpc/grpc.h>
@@ -60,4 +60,4 @@
 
 const grpc_channel_args *grpc_server_get_channel_args(grpc_server *server);
 
-#endif /* __GRPC_INTERNAL_SURFACE_SERVER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_SERVER_H */
diff --git a/src/core/surface/surface_trace.c b/src/core/surface/surface_trace.c
new file mode 100644
index 0000000..57a0053
--- /dev/null
+++ b/src/core/surface/surface_trace.c
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/surface/surface_trace.h"
+
+int grpc_surface_trace = 0;
diff --git a/src/core/surface/surface_trace.h b/src/core/surface/surface_trace.h
index 4d478d6..01302bb 100644
--- a/src/core/surface/surface_trace.h
+++ b/src/core/surface/surface_trace.h
@@ -31,17 +31,19 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_SURFACE_SURFACE_TRACE_H__
-#define __GRPC_INTERNAL_SURFACE_SURFACE_TRACE_H__
+#ifndef GRPC_INTERNAL_CORE_SURFACE_SURFACE_TRACE_H
+#define GRPC_INTERNAL_CORE_SURFACE_SURFACE_TRACE_H
 
 #include "src/core/debug/trace.h"
 #include <grpc/support/log.h>
 
+extern int grpc_surface_trace;
+
 #define GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, event)    \
-  if (grpc_trace_bits & GRPC_TRACE_SURFACE) {           \
+  if (grpc_surface_trace) {           \
     char *_ev = grpc_event_string(event);               \
     gpr_log(GPR_INFO, "RETURN_EVENT[%p]: %s", cq, _ev); \
     gpr_free(_ev);                                      \
   }
 
-#endif /* __GRPC_INTERNAL_SURFACE_SURFACE_TRACE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_SURFACE_SURFACE_TRACE_H */
diff --git a/src/core/transport/chttp2/alpn.h b/src/core/transport/chttp2/alpn.h
index 796f514..fcbefc0 100644
--- a/src/core/transport/chttp2/alpn.h
+++ b/src/core/transport/chttp2/alpn.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_ALPN_H_
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_ALPN_H_
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_ALPN_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_ALPN_H
 
 #include <string.h>
 
@@ -46,4 +46,4 @@
  * grpc_chttp2_num_alpn_versions()) */
 const char *grpc_chttp2_get_alpn_version_index(size_t i);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_ALPN_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_ALPN_H */
diff --git a/src/core/transport/chttp2/bin_encoder.h b/src/core/transport/chttp2/bin_encoder.h
index 2368fdd..9c88ac9 100644
--- a/src/core/transport/chttp2/bin_encoder.h
+++ b/src/core/transport/chttp2/bin_encoder.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_BIN_ENCODER_H_
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_BIN_ENCODER_H_
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_BIN_ENCODER_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_BIN_ENCODER_H
 
 #include <grpc/support/slice.h>
 
@@ -53,4 +53,4 @@
 
 int grpc_is_binary_header(const char *key, size_t length);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_BIN_ENCODER_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_BIN_ENCODER_H */
diff --git a/src/core/transport/chttp2/frame.h b/src/core/transport/chttp2/frame.h
index 733dd5e..fbb9419 100644
--- a/src/core/transport/chttp2/frame.h
+++ b/src/core/transport/chttp2/frame.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_H
 
 #include <grpc/support/port_platform.h>
 #include <grpc/support/slice.h>
@@ -77,4 +77,4 @@
 #define GRPC_CHTTP2_DATA_FLAG_PADDED 8
 #define GRPC_CHTTP2_FLAG_HAS_PRIORITY 0x20
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_H */
diff --git a/src/core/transport/chttp2/frame_data.h b/src/core/transport/chttp2/frame_data.h
index 4d05a5f..24e557a 100644
--- a/src/core/transport/chttp2/frame_data.h
+++ b/src/core/transport/chttp2/frame_data.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_DATA_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_DATA_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_DATA_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_DATA_H
 
 /* Parser for GRPC streams embedded in DATA frames */
 
@@ -77,4 +77,4 @@
 /* create a slice with an empty data frame and is_last set */
 gpr_slice grpc_chttp2_data_frame_create_empty_close(gpr_uint32 id);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_DATA_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_DATA_H */
diff --git a/src/core/transport/chttp2/frame_goaway.h b/src/core/transport/chttp2/frame_goaway.h
index 9ccef27..7638891 100644
--- a/src/core/transport/chttp2/frame_goaway.h
+++ b/src/core/transport/chttp2/frame_goaway.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_GOAWAY_H_
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_GOAWAY_H_
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_GOAWAY_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_GOAWAY_H
 
 #include "src/core/transport/chttp2/frame.h"
 #include <grpc/support/port_platform.h>
@@ -71,4 +71,4 @@
                                gpr_slice debug_data,
                                gpr_slice_buffer *slice_buffer);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_GOAWAY_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_GOAWAY_H */
diff --git a/src/core/transport/chttp2/frame_ping.h b/src/core/transport/chttp2/frame_ping.h
index d9d6f7e..11d38b8 100644
--- a/src/core/transport/chttp2/frame_ping.h
+++ b/src/core/transport/chttp2/frame_ping.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_PING_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_PING_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_PING_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_PING_H
 
 #include <grpc/support/slice.h>
 #include "src/core/transport/chttp2/frame.h"
@@ -50,4 +50,4 @@
 grpc_chttp2_parse_error grpc_chttp2_ping_parser_parse(
     void *parser, grpc_chttp2_parse_state *state, gpr_slice slice, int is_last);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_PING_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_PING_H */
diff --git a/src/core/transport/chttp2/frame_rst_stream.h b/src/core/transport/chttp2/frame_rst_stream.h
index 83fc380..2d3ee18 100644
--- a/src/core/transport/chttp2/frame_rst_stream.h
+++ b/src/core/transport/chttp2/frame_rst_stream.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_RST_STREAM_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_RST_STREAM_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_RST_STREAM_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_RST_STREAM_H
 
 #include <grpc/support/slice.h>
 
 gpr_slice grpc_chttp2_rst_stream_create(gpr_uint32 stream_id, gpr_uint32 code);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_RST_STREAM_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_RST_STREAM_H */
diff --git a/src/core/transport/chttp2/frame_settings.c b/src/core/transport/chttp2/frame_settings.c
index e6c4b7e..8d3250c 100644
--- a/src/core/transport/chttp2/frame_settings.c
+++ b/src/core/transport/chttp2/frame_settings.c
@@ -37,6 +37,7 @@
 
 #include "src/core/debug/trace.h"
 #include "src/core/transport/chttp2/frame.h"
+#include "src/core/transport/chttp2_transport.h"
 #include <grpc/support/log.h>
 #include <grpc/support/useful.h>
 
@@ -218,7 +219,7 @@
             }
           }
           parser->incoming_settings[parser->id] = parser->value;
-          if (grpc_trace_bits & GRPC_TRACE_HTTP) {
+          if (grpc_http_trace) {
             gpr_log(GPR_DEBUG, "CHTTP2: got setting %d = %d", parser->id,
                     parser->value);
           }
diff --git a/src/core/transport/chttp2/frame_settings.h b/src/core/transport/chttp2/frame_settings.h
index 6cde2c6..1876563 100644
--- a/src/core/transport/chttp2/frame_settings.h
+++ b/src/core/transport/chttp2/frame_settings.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_SETTINGS_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_SETTINGS_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_SETTINGS_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_SETTINGS_H
 
 #include <grpc/support/port_platform.h>
 #include <grpc/support/slice.h>
@@ -96,4 +96,4 @@
 grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse(
     void *parser, grpc_chttp2_parse_state *state, gpr_slice slice, int is_last);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_SETTINGS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_SETTINGS_H */
diff --git a/src/core/transport/chttp2/frame_window_update.h b/src/core/transport/chttp2/frame_window_update.h
index 093263d..85475a8 100644
--- a/src/core/transport/chttp2/frame_window_update.h
+++ b/src/core/transport/chttp2/frame_window_update.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_WINDOW_UPDATE_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_WINDOW_UPDATE_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_WINDOW_UPDATE_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_WINDOW_UPDATE_H
 
 #include <grpc/support/slice.h>
 #include "src/core/transport/chttp2/frame.h"
@@ -52,4 +52,4 @@
 grpc_chttp2_parse_error grpc_chttp2_window_update_parser_parse(
     void *parser, grpc_chttp2_parse_state *state, gpr_slice slice, int is_last);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_FRAME_WINDOW_UPDATE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_FRAME_WINDOW_UPDATE_H */
diff --git a/src/core/transport/chttp2/hpack_parser.h b/src/core/transport/chttp2/hpack_parser.h
index 94acc88..bb4c1a1 100644
--- a/src/core/transport/chttp2/hpack_parser.h
+++ b/src/core/transport/chttp2/hpack_parser.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_HPACK_PARSER_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_HPACK_PARSER_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HPACK_PARSER_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HPACK_PARSER_H
 
 #include <stddef.h>
 
@@ -108,4 +108,4 @@
     void *hpack_parser, grpc_chttp2_parse_state *state, gpr_slice slice,
     int is_last);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_HPACK_PARSER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HPACK_PARSER_H */
diff --git a/src/core/transport/chttp2/hpack_table.h b/src/core/transport/chttp2/hpack_table.h
index ea0fc1d..d3bf41b 100644
--- a/src/core/transport/chttp2/hpack_table.h
+++ b/src/core/transport/chttp2/hpack_table.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_HPACK_TABLE_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_HPACK_TABLE_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HPACK_TABLE_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HPACK_TABLE_H
 
 #include "src/core/transport/metadata.h"
 #include <grpc/support/port_platform.h>
@@ -94,4 +94,4 @@
 grpc_chttp2_hptbl_find_result grpc_chttp2_hptbl_find(
     const grpc_chttp2_hptbl *tbl, grpc_mdelem *md);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_HPACK_TABLE_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HPACK_TABLE_H */
diff --git a/src/core/transport/chttp2/http2_errors.h b/src/core/transport/chttp2/http2_errors.h
index 1eecd17..4ab2ec0 100644
--- a/src/core/transport/chttp2/http2_errors.h
+++ b/src/core/transport/chttp2/http2_errors.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_HTTP2_ERRORS_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_HTTP2_ERRORS_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HTTP2_ERRORS_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HTTP2_ERRORS_H
 
 /* error codes for RST_STREAM from http2 draft 14 section 7 */
 typedef enum {
@@ -53,4 +53,4 @@
   GRPC_CHTTP2__ERROR_DO_NOT_USE = -1
 } grpc_chttp2_error_code;
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_HTTP2_ERRORS_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HTTP2_ERRORS_H */
diff --git a/src/core/transport/chttp2/huffsyms.h b/src/core/transport/chttp2/huffsyms.h
index 131c4ac..f9c1447 100644
--- a/src/core/transport/chttp2/huffsyms.h
+++ b/src/core/transport/chttp2/huffsyms.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_HUFFSYMS_H_
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_HUFFSYMS_H_
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HUFFSYMS_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HUFFSYMS_H
 
 /* HPACK static huffman table */
 
@@ -45,4 +45,4 @@
 
 extern const grpc_chttp2_huffsym grpc_chttp2_huffsyms[GRPC_CHTTP2_NUM_HUFFSYMS];
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_HUFFSYMS_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_HUFFSYMS_H */
diff --git a/src/core/transport/chttp2/status_conversion.h b/src/core/transport/chttp2/status_conversion.h
index 8e26720..cf06c35 100644
--- a/src/core/transport/chttp2/status_conversion.h
+++ b/src/core/transport/chttp2/status_conversion.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_STATUS_CONVERSION_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_STATUS_CONVERSION_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STATUS_CONVERSION_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STATUS_CONVERSION_H
 
 #include <grpc/grpc.h>
 #include "src/core/transport/chttp2/http2_errors.h"
@@ -47,4 +47,4 @@
 grpc_status_code grpc_chttp2_http2_status_to_grpc_status(int status);
 int grpc_chttp2_grpc_status_to_http2_status(grpc_status_code status);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_STATUS_CONVERSION_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STATUS_CONVERSION_H */
diff --git a/src/core/transport/chttp2/stream_encoder.h b/src/core/transport/chttp2/stream_encoder.h
index a99d61a..50c58ad 100644
--- a/src/core/transport/chttp2/stream_encoder.h
+++ b/src/core/transport/chttp2/stream_encoder.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_STREAM_ENCODER_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_STREAM_ENCODER_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STREAM_ENCODER_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STREAM_ENCODER_H
 
 #include "src/core/transport/chttp2/frame.h"
 #include "src/core/transport/metadata.h"
@@ -90,4 +90,4 @@
                         grpc_chttp2_hpack_compressor *compressor,
                         gpr_slice_buffer *output);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_STREAM_ENCODER_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STREAM_ENCODER_H */
diff --git a/src/core/transport/chttp2/stream_map.h b/src/core/transport/chttp2/stream_map.h
index 3fb91fc..d338d2f 100644
--- a/src/core/transport/chttp2/stream_map.h
+++ b/src/core/transport/chttp2/stream_map.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_STREAM_MAP_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_STREAM_MAP_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STREAM_MAP_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STREAM_MAP_H
 
 #include <grpc/support/port_platform.h>
 
@@ -78,4 +78,4 @@
                                                void *value),
                                      void *user_data);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_STREAM_MAP_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_STREAM_MAP_H */
diff --git a/src/core/transport/chttp2/timeout_encoding.h b/src/core/transport/chttp2/timeout_encoding.h
index 2bef8ba..e6664c6 100644
--- a/src/core/transport/chttp2/timeout_encoding.h
+++ b/src/core/transport/chttp2/timeout_encoding.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_TIMEOUT_ENCODING_H_
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_TIMEOUT_ENCODING_H_
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_TIMEOUT_ENCODING_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_TIMEOUT_ENCODING_H
 
 #include "src/core/support/string.h"
 #include <grpc/support/time.h>
@@ -44,4 +44,4 @@
 void grpc_chttp2_encode_timeout(gpr_timespec timeout, char *buffer);
 int grpc_chttp2_decode_timeout(const char *buffer, gpr_timespec *timeout);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_TIMEOUT_ENCODING_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_TIMEOUT_ENCODING_H */
diff --git a/src/core/transport/chttp2/varint.h b/src/core/transport/chttp2/varint.h
index 8c353c6..ee04ed7 100644
--- a/src/core/transport/chttp2/varint.h
+++ b/src/core/transport/chttp2/varint.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_VARINT_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_VARINT_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_VARINT_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_VARINT_H
 
 #include <grpc/support/port_platform.h>
 
@@ -71,4 +71,4 @@
     }                                                                       \
   } while (0)
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_VARINT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_VARINT_H */
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 476cc4b..0d01a37 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -37,7 +37,6 @@
 #include <stdio.h>
 #include <string.h>
 
-#include "src/core/debug/trace.h"
 #include "src/core/support/string.h"
 #include "src/core/transport/chttp2/frame_data.h"
 #include "src/core/transport/chttp2/frame_goaway.h"
@@ -64,11 +63,13 @@
 #define CLIENT_CONNECT_STRING "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
 #define CLIENT_CONNECT_STRLEN 24
 
+int grpc_http_trace = 0;
+
 typedef struct transport transport;
 typedef struct stream stream;
 
 #define IF_TRACING(stmt)                    \
-  if (!(grpc_trace_bits & GRPC_TRACE_HTTP)) \
+  if (!(grpc_http_trace))                   \
     ;                                       \
   else                                      \
   stmt
@@ -309,6 +310,7 @@
 
 static int prepare_callbacks(transport *t);
 static void run_callbacks(transport *t, const grpc_transport_callbacks *cb);
+static void call_cb_closed(transport *t, const grpc_transport_callbacks *cb);
 
 static int prepare_write(transport *t);
 static void perform_write(transport *t, grpc_endpoint *ep);
@@ -516,13 +518,29 @@
 static void destroy_transport(grpc_transport *gt) {
   transport *t = (transport *)gt;
 
-  gpr_mu_lock(&t->mu);
+  lock(t);
   t->destroying = 1;
-  while (t->calling_back) {
+  /* Wait for pending stuff to finish.
+     We need to be not calling back to ensure that closed() gets a chance to
+     trigger if needed during unlock() before we die.
+     We need to be not writing as cancellation finalization may produce some
+     callbacks that NEED to be made to close out some streams when t->writing
+     becomes 0. */
+  while (t->calling_back || t->writing) {
     gpr_cv_wait(&t->cv, &t->mu, gpr_inf_future);
   }
-  t->cb = NULL;
-  gpr_mu_unlock(&t->mu);
+  drop_connection(t);
+  unlock(t);
+
+  /* The drop_connection() above puts the transport into an error state, and
+     the follow-up unlock should then (as part of the cleanup work it does)
+     ensure that cb is NULL, and therefore not call back anything further.
+     This check validates this very subtle behavior.
+     It's shutdown path, so I don't believe an extra lock pair is going to be
+     problematic for performance. */
+  lock(t);
+  GPR_ASSERT(!t->cb);
+  unlock(t);
 
   unref_transport(t);
 }
@@ -680,6 +698,7 @@
 }
 
 static void stream_list_join(transport *t, stream *s, stream_list_id id) {
+  if (id == PENDING_CALLBACKS) GPR_ASSERT(t->cb != NULL || t->error_state == ERROR_STATE_NONE);
   if (s->included[id]) {
     return;
   }
@@ -738,7 +757,7 @@
     if (perform_callbacks) {
       t->calling_back = 1;
     }
-    if (t->error_state == ERROR_STATE_SEEN) {
+    if (t->error_state == ERROR_STATE_SEEN && !t->writing) {
       call_closed = 1;
       t->calling_back = 1;
       t->cb = NULL;  /* no more callbacks */
@@ -772,7 +791,7 @@
   }
 
   if (call_closed) {
-    cb->closed(t->cb_user_data, &t->base);
+    call_cb_closed(t, cb);
   }
 
   /* write some bytes if necessary */
@@ -903,13 +922,16 @@
   }
   while ((s = stream_list_remove_head(t, WRITTEN_CLOSED))) {
     s->sent_write_closed = 1;
-    stream_list_join(t, s, PENDING_CALLBACKS);
+    if (!s->cancelled) stream_list_join(t, s, PENDING_CALLBACKS);
   }
   t->outbuf.count = 0;
   t->outbuf.length = 0;
   /* leave the writing flag up on shutdown to prevent further writes in unlock()
      from starting */
   t->writing = 0;
+  if (t->destroying) {
+    gpr_cv_signal(&t->cv);
+  }
   if (!t->reading) {
     grpc_endpoint_destroy(t->ep);
     t->ep = NULL;
@@ -979,7 +1001,8 @@
   } else {
     grpc_sopb_append(&t->nuke_later_sopb, ops, ops_count);
   }
-  if (is_last && s->outgoing_sopb.nops == 0 && s->read_closed) {
+  if (is_last && s->outgoing_sopb.nops == 0 && s->read_closed &&
+      !s->published_close) {
     stream_list_join(t, s, PENDING_CALLBACKS);
   }
 
@@ -1765,6 +1788,10 @@
   }
 }
 
+static void call_cb_closed(transport *t, const grpc_transport_callbacks *cb) {
+  cb->closed(t->cb_user_data, &t->base);
+}
+
 static void add_to_pollset(grpc_transport *gt, grpc_pollset *pollset) {
   transport *t = (transport *)gt;
   lock(t);
diff --git a/src/core/transport/chttp2_transport.h b/src/core/transport/chttp2_transport.h
index 6fbc596..a7f1b9a 100644
--- a/src/core/transport/chttp2_transport.h
+++ b/src/core/transport/chttp2_transport.h
@@ -31,12 +31,14 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_CHTTP2_TRANSPORT_H__
-#define __GRPC_INTERNAL_TRANSPORT_CHTTP2_TRANSPORT_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_TRANSPORT_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_TRANSPORT_H
 
 #include "src/core/iomgr/endpoint.h"
 #include "src/core/transport/transport.h"
 
+extern int grpc_http_trace;
+
 void grpc_create_chttp2_transport(grpc_transport_setup_callback setup,
                                   void *arg,
                                   const grpc_channel_args *channel_args,
@@ -44,4 +46,4 @@
                                   size_t nslices, grpc_mdctx *metadata_context,
                                   int is_client);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_TRANSPORT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_TRANSPORT_H */
diff --git a/src/core/transport/metadata.h b/src/core/transport/metadata.h
index 7a56e34..b8afbeb 100644
--- a/src/core/transport/metadata.h
+++ b/src/core/transport/metadata.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_METADATA_H__
-#define __GRPC_INTERNAL_TRANSPORT_METADATA_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_METADATA_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_METADATA_H
 
 #include <grpc/support/slice.h>
 #include <grpc/support/useful.h>
@@ -137,4 +137,4 @@
 
 #define GRPC_MDSTR_KV_HASH(k_hash, v_hash) (GPR_ROTL((k_hash), 2) ^ (v_hash))
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_METADATA_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_METADATA_H */
diff --git a/src/core/transport/stream_op.h b/src/core/transport/stream_op.h
index 828a7f7..2ffbcce 100644
--- a/src/core/transport/stream_op.h
+++ b/src/core/transport/stream_op.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_STREAM_OP_H__
-#define __GRPC_INTERNAL_TRANSPORT_STREAM_OP_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_STREAM_OP_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_STREAM_OP_H
 
 #include <grpc/grpc.h>
 #include <grpc/support/port_platform.h>
@@ -131,4 +131,4 @@
 void grpc_sopb_append(grpc_stream_op_buffer *sopb, grpc_stream_op *ops,
                       size_t nops);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_STREAM_OP_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_STREAM_OP_H */
diff --git a/src/core/transport/transport.h b/src/core/transport/transport.h
index 60193b1..ce8c17c 100644
--- a/src/core/transport/transport.h
+++ b/src/core/transport/transport.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_TRANSPORT_H__
-#define __GRPC_INTERNAL_TRANSPORT_TRANSPORT_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_TRANSPORT_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_TRANSPORT_H
 
 #include <stddef.h>
 
@@ -254,4 +254,4 @@
    used as a destruction call by setup). */
 void grpc_transport_setup_cancel(grpc_transport_setup *setup);
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_TRANSPORT_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_TRANSPORT_H */
diff --git a/src/core/transport/transport_impl.h b/src/core/transport/transport_impl.h
index d1e0b19..ac275c7 100644
--- a/src/core/transport/transport_impl.h
+++ b/src/core/transport/transport_impl.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_INTERNAL_TRANSPORT_TRANSPORT_IMPL_H__
-#define __GRPC_INTERNAL_TRANSPORT_TRANSPORT_IMPL_H__
+#ifndef GRPC_INTERNAL_CORE_TRANSPORT_TRANSPORT_IMPL_H
+#define GRPC_INTERNAL_CORE_TRANSPORT_TRANSPORT_IMPL_H
 
 #include "src/core/transport/transport.h"
 
@@ -84,4 +84,4 @@
   const grpc_transport_vtable *vtable;
 };
 
-#endif /* __GRPC_INTERNAL_TRANSPORT_TRANSPORT_IMPL_H__ */
+#endif  /* GRPC_INTERNAL_CORE_TRANSPORT_TRANSPORT_IMPL_H */
diff --git a/src/core/tsi/fake_transport_security.c b/src/core/tsi/fake_transport_security.c
index e8af200..f58f04e 100644
--- a/src/core/tsi/fake_transport_security.c
+++ b/src/core/tsi/fake_transport_security.c
@@ -392,8 +392,10 @@
     if (next_message_to_send > TSI_FAKE_HANDSHAKE_MESSAGE_MAX) {
       next_message_to_send = TSI_FAKE_HANDSHAKE_MESSAGE_MAX;
     }
-    gpr_log(GPR_INFO, "%s prepared %s.", impl->is_client ? "Client" : "Server",
-            tsi_fake_handshake_message_to_string(impl->next_message_to_send));
+    if (tsi_tracing_enabled) {
+      gpr_log(GPR_INFO, "%s prepared %s.", impl->is_client ? "Client" : "Server",
+              tsi_fake_handshake_message_to_string(impl->next_message_to_send));
+    }
     impl->next_message_to_send = next_message_to_send;
   }
   result = drain_frame_to_bytes(bytes, bytes_size, &impl->outgoing);
@@ -401,7 +403,9 @@
   if (!impl->is_client &&
       impl->next_message_to_send == TSI_FAKE_HANDSHAKE_MESSAGE_MAX) {
     /* We're done. */
-    gpr_log(GPR_INFO, "Server is done.");
+    if (tsi_tracing_enabled) {
+      gpr_log(GPR_INFO, "Server is done.");
+    }
     impl->result = TSI_OK;
   } else {
     impl->needs_incoming_message = 1;
@@ -436,13 +440,17 @@
             tsi_fake_handshake_message_to_string(received_msg),
             tsi_fake_handshake_message_to_string(expected_msg));
   }
-  gpr_log(GPR_INFO, "%s received %s.", impl->is_client ? "Client" : "Server",
-          tsi_fake_handshake_message_to_string(received_msg));
+  if (tsi_tracing_enabled) {
+    gpr_log(GPR_INFO, "%s received %s.", impl->is_client ? "Client" : "Server",
+            tsi_fake_handshake_message_to_string(received_msg));
+  }
   tsi_fake_frame_reset(&impl->incoming, 0 /* needs_draining */);
   impl->needs_incoming_message = 0;
   if (impl->next_message_to_send == TSI_FAKE_HANDSHAKE_MESSAGE_MAX) {
     /* We're done. */
-    gpr_log(GPR_INFO, "%s is done.", impl->is_client ? "Client" : "Server");
+    if (tsi_tracing_enabled) {
+      gpr_log(GPR_INFO, "%s is done.", impl->is_client ? "Client" : "Server");
+    }
     impl->result = TSI_OK;
   }
   return TSI_OK;
diff --git a/src/core/tsi/fake_transport_security.h b/src/core/tsi/fake_transport_security.h
index 36e62bc..af9730b 100644
--- a/src/core/tsi/fake_transport_security.h
+++ b/src/core/tsi/fake_transport_security.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __FAKE_TRANSPORT_SECURITY_H_
-#define __FAKE_TRANSPORT_SECURITY_H_
+#ifndef GRPC_INTERNAL_CORE_TSI_FAKE_TRANSPORT_SECURITY_H
+#define GRPC_INTERNAL_CORE_TSI_FAKE_TRANSPORT_SECURITY_H
 
 #include "src/core/tsi/transport_security_interface.h"
 
@@ -58,4 +58,4 @@
 }
 #endif
 
-#endif /* __FAKE_TRANSPORT_SECURITY_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TSI_FAKE_TRANSPORT_SECURITY_H */
diff --git a/src/core/tsi/ssl_transport_security.c b/src/core/tsi/ssl_transport_security.c
index 8446cc4..dc43f7e 100644
--- a/src/core/tsi/ssl_transport_security.c
+++ b/src/core/tsi/ssl_transport_security.c
@@ -162,7 +162,7 @@
 /* TODO(jboeuf): Remove when we are past the debugging phase with this code. */
 static void ssl_log_where_info(const SSL* ssl, int where, int flag,
                                const char* msg) {
-  if (where & flag) {
+  if ((where & flag) && tsi_tracing_enabled) {
     gpr_log(GPR_INFO, "%20.20s - %30.30s  - %5.10s", msg,
             SSL_state_string_long(ssl), SSL_state_string(ssl));
   }
diff --git a/src/core/tsi/ssl_transport_security.h b/src/core/tsi/ssl_transport_security.h
index eecf2d7..192f7ac 100644
--- a/src/core/tsi/ssl_transport_security.h
+++ b/src/core/tsi/ssl_transport_security.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __SSL_TRANSPORT_SECURITY_H_
-#define __SSL_TRANSPORT_SECURITY_H_
+#ifndef GRPC_INTERNAL_CORE_TSI_SSL_TRANSPORT_SECURITY_H
+#define GRPC_INTERNAL_CORE_TSI_SSL_TRANSPORT_SECURITY_H
 
 #include "src/core/tsi/transport_security_interface.h"
 
@@ -170,4 +170,4 @@
 }
 #endif
 
-#endif /* __SSL_TRANSPORT_SECURITY_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TSI_SSL_TRANSPORT_SECURITY_H */
diff --git a/src/core/tsi/transport_security.c b/src/core/tsi/transport_security.c
index aeb9b3f..c8c74c5 100644
--- a/src/core/tsi/transport_security.c
+++ b/src/core/tsi/transport_security.c
@@ -36,6 +36,10 @@
 #include <stdlib.h>
 #include <string.h>
 
+/* --- Tracing. --- */
+
+int tsi_tracing_enabled = 0;
+
 /* --- Utils. --- */
 
 char* tsi_strdup(const char* src) {
diff --git a/src/core/tsi/transport_security.h b/src/core/tsi/transport_security.h
index 432da07..59e5dcf 100644
--- a/src/core/tsi/transport_security.h
+++ b/src/core/tsi/transport_security.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __TRANSPORT_SECURITY_H_
-#define __TRANSPORT_SECURITY_H_
+#ifndef GRPC_INTERNAL_CORE_TSI_TRANSPORT_SECURITY_H
+#define GRPC_INTERNAL_CORE_TSI_TRANSPORT_SECURITY_H
 
 #include "src/core/tsi/transport_security_interface.h"
 
@@ -40,6 +40,8 @@
 extern "C" {
 #endif
 
+extern int tsi_tracing_enabled;
+
 /* Base for tsi_frame_protector implementations.
    See transport_security_interface.h for documentation. */
 typedef struct {
@@ -115,4 +117,4 @@
 }
 #endif
 
-#endif /* __TRANSPORT_SECURITY_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TSI_TRANSPORT_SECURITY_H */
diff --git a/src/core/tsi/transport_security_interface.h b/src/core/tsi/transport_security_interface.h
index 90e119c..0edff54 100644
--- a/src/core/tsi/transport_security_interface.h
+++ b/src/core/tsi/transport_security_interface.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __TRANSPORT_SECURITY_INTERFACE_H_
-#define __TRANSPORT_SECURITY_INTERFACE_H_
+#ifndef GRPC_INTERNAL_CORE_TSI_TRANSPORT_SECURITY_INTERFACE_H
+#define GRPC_INTERNAL_CORE_TSI_TRANSPORT_SECURITY_INTERFACE_H
 
 #include <stdint.h>
 #include <stdlib.h>
@@ -61,6 +61,11 @@
 
 const char* tsi_result_to_string(tsi_result result);
 
+/* --- tsi tracing --- */
+
+/* Set this early to avoid races */
+extern int tsi_tracing_enabled;
+
 /* --- tsi_frame_protector object ---
 
   This object protects and unprotects buffers once the handshake is done.
@@ -361,4 +366,4 @@
 }
 #endif
 
-#endif /* __TRANSPORT_SECURITY_INTERFACE_H_ */
+#endif  /* GRPC_INTERNAL_CORE_TSI_TRANSPORT_SECURITY_INTERFACE_H */
diff --git a/src/cpp/client/channel.h b/src/cpp/client/channel.h
index e3edcf7..63c6e2b 100644
--- a/src/cpp/client/channel.h
+++ b/src/cpp/client/channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_INTERNAL_CLIENT_CHANNEL_H__
-#define __GRPCPP_INTERNAL_CLIENT_CHANNEL_H__
+#ifndef GRPC_INTERNAL_CPP_CLIENT_CHANNEL_H
+#define GRPC_INTERNAL_CPP_CLIENT_CHANNEL_H
 
 #include <memory>
 
@@ -68,4 +68,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_INTERNAL_CLIENT_CHANNEL_H__
+#endif  // GRPC_INTERNAL_CPP_CLIENT_CHANNEL_H
diff --git a/src/cpp/proto/proto_utils.h b/src/cpp/proto/proto_utils.h
index 834884d..a0af4d6 100644
--- a/src/cpp/proto/proto_utils.h
+++ b/src/cpp/proto/proto_utils.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_INTERNAL_PROTO_PROTO_UTILS_H__
-#define __GRPCPP_INTERNAL_PROTO_PROTO_UTILS_H__
+#ifndef GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H
+#define GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H
 
 struct grpc_byte_buffer;
 namespace google {
@@ -54,4 +54,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_INTERNAL_PROTO_PROTO_UTILS_H__
+#endif  // GRPC_INTERNAL_CPP_PROTO_PROTO_UTILS_H
diff --git a/src/cpp/server/thread_pool.h b/src/cpp/server/thread_pool.h
index 9c1df0b..6157e40 100644
--- a/src/cpp/server/thread_pool.h
+++ b/src/cpp/server/thread_pool.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_INTERNAL_SERVER_THREAD_POOL_H__
-#define __GRPCPP_INTERNAL_SERVER_THREAD_POOL_H__
+#ifndef GRPC_INTERNAL_CPP_SERVER_THREAD_POOL_H
+#define GRPC_INTERNAL_CPP_SERVER_THREAD_POOL_H
 
 #include <grpc++/config.h>
 #include <grpc++/thread_pool_interface.h>
@@ -62,4 +62,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_INTERNAL_SERVER_THREAD_POOL_H__
+#endif  // GRPC_INTERNAL_CPP_SERVER_THREAD_POOL_H
diff --git a/src/cpp/util/time.h b/src/cpp/util/time.h
index 9f9e582..1994848 100644
--- a/src/cpp/util/time.h
+++ b/src/cpp/util/time.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_INTERNAL_UTIL_TIME_H__
-#define __GRPCPP_INTERNAL_UTIL_TIME_H__
+#ifndef GRPC_INTERNAL_CPP_UTIL_TIME_H
+#define GRPC_INTERNAL_CPP_UTIL_TIME_H
 
 #include <chrono>
 
@@ -48,4 +48,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_INTERNAL_UTIL_TIME_H__
+#endif  // GRPC_INTERNAL_CPP_UTIL_TIME_H
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index de742f9..05d40d4 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -67,9 +67,9 @@
     <Compile Include="Utils\ExceptionHelper.cs" />
   </ItemGroup>
   <Choose>
-    <!-- Under Windows, automatically copy the C core library to output dir.
-         Under Monodevelop it's not supported so it has no effect. -->
-    <When Condition=" '$(Platform)' == 'AnyCPU' ">
+    <!-- Under older versions of Monodevelop, Choose is not supported and is just
+         ignored, which gives us the desired effect. -->
+    <When Condition=" '$(OS)' != 'Unix' ">
       <ItemGroup>
         <Content Include="..\..\..\vsprojects\vs2013\Debug\grpc_csharp_ext.dll">
           <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
diff --git a/src/csharp/Grpc.Core/StatusCode.cs b/src/csharp/Grpc.Core/StatusCode.cs
index 1fbf9c1..1987e52 100644
--- a/src/csharp/Grpc.Core/StatusCode.cs
+++ b/src/csharp/Grpc.Core/StatusCode.cs
@@ -41,64 +41,44 @@
     /// </summary>
     public enum StatusCode
     {
-        /* Not an error; returned on success
-
-     HTTP Mapping: 200 OK */
+        /* Not an error; returned on success */
         OK = 0,
-        /* The operation was cancelled (typically by the caller).
-
-     HTTP Mapping: 499 Client Closed Request */
+        /* The operation was cancelled (typically by the caller). */
         Cancelled = 1,
         /* Unknown error.  An example of where this error may be returned is
      if a Status value received from another address space belongs to
      an error-space that is not known in this address space.  Also
      errors raised by APIs that do not return enough error information
-     may be converted to this error.
-
-     HTTP Mapping: 500 Internal Server Error */
+     may be converted to this error. */
         Unknown = 2,
         /* Client specified an invalid argument.  Note that this differs
      from FAILED_PRECONDITION.  INVALID_ARGUMENT indicates arguments
      that are problematic regardless of the state of the system
-     (e.g., a malformed file name).
-
-     HTTP Mapping: 400 Bad Request */
+     (e.g., a malformed file name). */
         InvalidArgument = 3,
         /* Deadline expired before operation could complete.  For operations
      that change the state of the system, this error may be returned
      even if the operation has completed successfully.  For example, a
      successful response from a server could have been delayed long
-     enough for the deadline to expire.
-
-     HTTP Mapping: 504 Gateway Timeout */
+     enough for the deadline to expire. */
         DeadlineExceeded = 4,
-        /* Some requested entity (e.g., file or directory) was not found.
-
-     HTTP Mapping: 404 Not Found */
+        /* Some requested entity (e.g., file or directory) was not found. */
         NotFound = 5,
         /* Some entity that we attempted to create (e.g., file or directory)
-     already exists.
-
-     HTTP Mapping: 409 Conflict */
+     already exists. */
         AlreadyExists = 6,
         /* The caller does not have permission to execute the specified
      operation.  PERMISSION_DENIED must not be used for rejections
      caused by exhausting some resource (use RESOURCE_EXHAUSTED
      instead for those errors).  PERMISSION_DENIED must not be
      used if the caller can not be identified (use UNAUTHENTICATED
-     instead for those errors).
-
-     HTTP Mapping: 403 Forbidden */
+     instead for those errors). */
         PermissionDenied = 7,
         /* The request does not have valid authentication credentials for the
-     operation.
-
-     HTTP Mapping: 401 Unauthorized */
+     operation. */
         Unauthenticated = 16,
         /* Some resource has been exhausted, perhaps a per-user quota, or
-     perhaps the entire file system is out of space.
-
-     HTTP Mapping: 429 Too Many Requests */
+     perhaps the entire file system is out of space. */
         ResourceExhausted = 8,
         /* Operation was rejected because the system is not in a state
      required for the operation's execution.  For example, directory
@@ -118,22 +98,13 @@
       (d) Use FAILED_PRECONDITION if the client performs conditional
           REST Get/Update/Delete on a resource and the resource on the
           server does not match the condition. E.g., conflicting
-          read-modify-write on the same resource.
-
-     HTTP Mapping: 400 Bad Request
-
-     NOTE: HTTP spec says 412 Precondition Failed should only be used if
-     the request contains Etag related headers. So if the server does see
-     Etag related headers in the request, it may choose to return 412
-     instead of 400 for this error code. */
+          read-modify-write on the same resource. */
         FailedPrecondition = 9,
         /* The operation was aborted, typically due to a concurrency issue
      like sequencer check failures, transaction aborts, etc.
 
      See litmus test above for deciding between FAILED_PRECONDITION,
-     ABORTED, and UNAVAILABLE.
-
-     HTTP Mapping: 409 Conflict */
+     ABORTED, and UNAVAILABLE. */
         Aborted = 10,
         /* Operation was attempted past the valid range.  E.g., seeking or
      reading past end of file.
@@ -149,32 +120,22 @@
      OUT_OF_RANGE.  We recommend using OUT_OF_RANGE (the more specific
      error) when it applies so that callers who are iterating through
      a space can easily look for an OUT_OF_RANGE error to detect when
-     they are done.
-
-     HTTP Mapping: 400 Bad Request */
+     they are done. */
         OutOfRange = 11,
-        /* Operation is not implemented or not supported/enabled in this service.
-
-     HTTP Mapping: 501 Not Implemented */
+        /* Operation is not implemented or not supported/enabled in this service. */
         Unimplemented = 12,
         /* Internal errors.  Means some invariants expected by underlying
      system has been broken.  If you see one of these errors,
-     something is very broken.
-
-     HTTP Mapping: 500 Internal Server Error */
+     something is very broken. */
         Internal = 13,
         /* The service is currently unavailable.  This is a most likely a
      transient condition and may be corrected by retrying with
      a backoff.
 
      See litmus test above for deciding between FAILED_PRECONDITION,
-     ABORTED, and UNAVAILABLE.
-
-     HTTP Mapping: 503 Service Unavailable */
+     ABORTED, and UNAVAILABLE. */
         Unavailable = 14,
-        /* Unrecoverable data loss or corruption.
-
-     HTTP Mapping: 500 Internal Server Error */
+        /* Unrecoverable data loss or corruption. */
         DataLoss = 15
     }
 }
diff --git a/src/csharp/README.md b/src/csharp/README.md
old mode 100755
new mode 100644
diff --git a/src/php/README.md b/src/php/README.md
old mode 100755
new mode 100644
diff --git a/src/php/tests/data/README b/src/php/tests/data/README
old mode 100755
new mode 100644
diff --git a/src/python/README.md b/src/python/README.md
old mode 100755
new mode 100644
index 06ef1a0..490a229
--- a/src/python/README.md
+++ b/src/python/README.md
@@ -46,7 +46,7 @@
 
 - Install gRPC Python's dependencies
 ```
-$ pip install enum34==1.0.4 futures==2.2.0 protobuf==3.0.0-alpha-1
+$ pip install -r requirements.txt
 ```
 
 - Install gRPC Python
diff --git a/src/python/interop/interop/credentials/README b/src/python/interop/interop/credentials/README
old mode 100755
new mode 100644
diff --git a/src/python/requirements.txt b/src/python/requirements.txt
new file mode 100644
index 0000000..06a42e1
--- /dev/null
+++ b/src/python/requirements.txt
@@ -0,0 +1,3 @@
+enum34==1.0.4
+futures==2.2.0
+protobuf==3.0.0-alpha-1
diff --git a/src/python/src/setup.py b/src/python/src/setup.py
index 26121dc..cdb82a9 100644
--- a/src/python/src/setup.py
+++ b/src/python/src/setup.py
@@ -47,8 +47,9 @@
 )
 
 _EXTENSION_LIBRARIES = (
-    'gpr',
     'grpc',
+    'gpr',
+    'rt',
 )
 
 _EXTENSION_MODULE = _core.Extension(
diff --git a/src/ruby/README.md b/src/ruby/README.md
old mode 100755
new mode 100644
diff --git a/src/ruby/bin/interop/README.md b/src/ruby/bin/interop/README.md
old mode 100755
new mode 100644
diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb
index 96c92e2..483a31f 100644
--- a/src/ruby/ext/grpc/extconf.rb
+++ b/src/ruby/ext/grpc/extconf.rb
@@ -32,6 +32,17 @@
 LIBDIR = RbConfig::CONFIG['libdir']
 INCLUDEDIR = RbConfig::CONFIG['includedir']
 
+if ENV.key? 'GRPC_ROOT'
+  GRPC_ROOT = ENV['GRPC_ROOT']
+  if ENV.key? 'GRPC_LIB_DIR'
+    GRPC_LIB_DIR = ENV['GRPC_LIB_DIR']
+  else
+    GRPC_LIB_DIR = 'libs/opt'
+  end
+else
+  GRPC_ROOT = nil
+end
+
 HEADER_DIRS = [
   # Search /opt/local (Mac source install)
   '/opt/local/include',
@@ -54,6 +65,11 @@
   LIBDIR
 ]
 
+unless GRPC_ROOT.nil?
+  HEADER_DIRS.unshift File.join(GRPC_ROOT, 'include')
+  LIB_DIRS.unshift File.join(GRPC_ROOT, GRPC_LIB_DIR)
+end
+
 def crash(msg)
   print(" extconf failure: #{msg}\n")
   exit 1
diff --git a/src/ruby/spec/testdata/README b/src/ruby/spec/testdata/README
old mode 100755
new mode 100644
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 0413f19..24fd450 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -196,7 +196,7 @@
 LDFLAGS += $(LDFLAGS_$(CONFIG))
 
 ifdef EXTRA_DEFINES
-DEFINES += EXTRA_DEFINES
+DEFINES += $(EXTRA_DEFINES)
 endif
 
 CFLAGS += -std=c89 -pedantic
@@ -859,7 +859,7 @@
 	@echo "Your system looks ready to go."
 	@echo
 else
-	@echo "Your system doesn't have protoc 3.0.0+ installed. While this"
+	@echo "We couldn't find protoc 3.0.0+ installed on your system. While this"
 	@echo "won't prevent grpc from working, you won't be able to compile"
 	@echo "and run any meaningful code with it."
 	@echo
@@ -868,7 +868,8 @@
 	@echo
 	@echo "   https://github.com/google/protobuf/releases"
 	@echo
-	@echo "Once you've done so, you can re-run this check by doing:"
+	@echo "Once you've done so, or if you think this message is in error,"
+	@echo "you can re-run this check by doing:"
 	@echo
 	@echo "   make verify-install"
 endif
@@ -1003,7 +1004,7 @@
 % endif
 % endif
 ifeq ($(SYSTEM),Darwin)
-	$(Q) ranlib $(LIBDIR)/$(CONFIG)/lib${lib.name}.a 
+	$(Q) ranlib $(LIBDIR)/$(CONFIG)/lib${lib.name}.a
 endif
 
 <%
@@ -1222,4 +1223,3 @@
 strip_cxx strip-shared_cxx strip-static_cxx \
 dep_c dep_cxx bins_dep_c bins_dep_cxx \
 clean
-
diff --git a/test/compiler/python_plugin_test.py b/test/compiler/python_plugin_test.py
index 1981f49..f166828 100644
--- a/test/compiler/python_plugin_test.py
+++ b/test/compiler/python_plugin_test.py
@@ -37,7 +37,7 @@
 import time
 import unittest
 
-from grpc.framework.face import exceptions
+from grpc.early_adopter import exceptions
 from grpc.framework.foundation import future
 
 # Identifiers of entities we expect to find in the generated module.
diff --git a/test/core/end2end/cq_verifier.h b/test/core/end2end/cq_verifier.h
index 8f14710..c1e25d8 100644
--- a/test/core/end2end/cq_verifier.h
+++ b/test/core/end2end/cq_verifier.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_END2END_CQ_VERIFIER_H__
-#define __GRPC_TEST_END2END_CQ_VERIFIER_H__
+#ifndef GRPC_TEST_CORE_END2END_CQ_VERIFIER_H
+#define GRPC_TEST_CORE_END2END_CQ_VERIFIER_H
 
 #include <grpc/grpc.h>
 #include "test/core/util/test_config.h"
@@ -76,4 +76,4 @@
 int byte_buffer_eq_string(grpc_byte_buffer *byte_buffer, const char *string);
 int contains_metadata(grpc_metadata_array *array, const char *key, const char *value);
 
-#endif /* __GRPC_TEST_END2END_CQ_VERIFIER_H__ */
+#endif  /* GRPC_TEST_CORE_END2END_CQ_VERIFIER_H */
diff --git a/test/core/end2end/data/ssl_test_data.h b/test/core/end2end/data/ssl_test_data.h
index 4124867..4f4b30e 100644
--- a/test/core/end2end/data/ssl_test_data.h
+++ b/test/core/end2end/data/ssl_test_data.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_TEST_END2END_DATA_SSL_TEST_DATA_H__
-#define __GRPC_TEST_END2END_DATA_SSL_TEST_DATA_H__
+#ifndef GRPC_TEST_CORE_END2END_DATA_SSL_TEST_DATA_H
+#define GRPC_TEST_CORE_END2END_DATA_SSL_TEST_DATA_H
 
 extern const char test_root_cert[];
 extern const char test_server1_cert[];
 extern const char test_server1_key[];
 
-#endif /* __GRPC_TEST_END2END_DATA_SSL_TEST_DATA_H__ */
+#endif  /* GRPC_TEST_CORE_END2END_DATA_SSL_TEST_DATA_H */
diff --git a/test/core/end2end/end2end_tests.h b/test/core/end2end/end2end_tests.h
index 8f2cd0f..b6d9325 100644
--- a/test/core/end2end/end2end_tests.h
+++ b/test/core/end2end/end2end_tests.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_END2END_END2END_TESTS_H__
-#define __GRPC_TEST_END2END_END2END_TESTS_H__
+#ifndef GRPC_TEST_CORE_END2END_END2END_TESTS_H
+#define GRPC_TEST_CORE_END2END_END2END_TESTS_H
 
 #include <grpc/grpc.h>
 
@@ -63,4 +63,4 @@
 
 void grpc_end2end_tests(grpc_end2end_test_config config);
 
-#endif /* __GRPC_TEST_END2END_END2END_TESTS_H__ */
+#endif  /* GRPC_TEST_CORE_END2END_END2END_TESTS_H */
diff --git a/test/core/end2end/no_server_test.c b/test/core/end2end/no_server_test.c
index d953552..ffc651a 100644
--- a/test/core/end2end/no_server_test.c
+++ b/test/core/end2end/no_server_test.c
@@ -41,7 +41,7 @@
 int main(int argc, char **argv) {
   grpc_channel *chan;
   grpc_call *call;
-  gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5);
+  gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(2);
   grpc_completion_queue *cq;
   cq_verifier *cqv;
   grpc_event *ev;
diff --git a/test/core/end2end/tests/cancel_test_helpers.h b/test/core/end2end/tests/cancel_test_helpers.h
index 3dd7437..f2581dc 100644
--- a/test/core/end2end/tests/cancel_test_helpers.h
+++ b/test/core/end2end/tests/cancel_test_helpers.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_END2END_TESTS_CANCEL_TEST_HELPERS_H__
-#define __GRPC_TEST_END2END_TESTS_CANCEL_TEST_HELPERS_H__
+#ifndef GRPC_TEST_CORE_END2END_TESTS_CANCEL_TEST_HELPERS_H
+#define GRPC_TEST_CORE_END2END_TESTS_CANCEL_TEST_HELPERS_H
 
 typedef struct {
   grpc_call_error (*initiate_cancel)(grpc_call *call);
@@ -48,4 +48,4 @@
     {grpc_call_cancel, GRPC_STATUS_CANCELLED, ""},
     {wait_for_deadline, GRPC_STATUS_DEADLINE_EXCEEDED, "Deadline Exceeded"}, };
 
-#endif
+#endif  /* GRPC_TEST_CORE_END2END_TESTS_CANCEL_TEST_HELPERS_H */
diff --git a/test/core/fling/server.c b/test/core/fling/server.c
index 59c3030..5c1ab14 100644
--- a/test/core/fling/server.c
+++ b/test/core/fling/server.c
@@ -275,7 +275,7 @@
           case FLING_SERVER_SEND_STATUS_FOR_STREAMING:
             /* Send status and close completed at server */
             grpc_call_destroy(call);
-            request_call();
+            if (!shutdown_started) request_call();
             break;
           case FLING_SERVER_READ_FOR_UNARY:
             /* Finished payload read for unary. Start all reamaining
@@ -288,7 +288,7 @@
             grpc_byte_buffer_destroy(payload_buffer);
             payload_buffer = NULL;
             grpc_call_destroy(call);
-            request_call();
+            if (!shutdown_started) request_call();
             break;
         }
         break;
diff --git a/test/core/iomgr/endpoint_tests.h b/test/core/iomgr/endpoint_tests.h
index 3be377c..1679d7b 100644
--- a/test/core/iomgr/endpoint_tests.h
+++ b/test/core/iomgr/endpoint_tests.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_IOMGR_ENDPOINT_TESTS_H__
-#define __GRPC_TEST_IOMGR_ENDPOINT_TESTS_H__
+#ifndef GRPC_TEST_CORE_IOMGR_ENDPOINT_TESTS_H
+#define GRPC_TEST_CORE_IOMGR_ENDPOINT_TESTS_H
 
 #include <sys/types.h>
 
@@ -54,4 +54,4 @@
 
 void grpc_endpoint_tests(grpc_endpoint_test_config config);
 
-#endif /* __GRPC_TEST_IOMGR_ENDPOINT_TESTS_H__ */
+#endif  /* GRPC_TEST_CORE_IOMGR_ENDPOINT_TESTS_H */
diff --git a/test/core/statistics/census_log_tests.h b/test/core/statistics/census_log_tests.h
index f829ab3..28bde08 100644
--- a/test/core/statistics/census_log_tests.h
+++ b/test/core/statistics/census_log_tests.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_STATISTICS_LOG_TESTS_H__
-#define __GRPC_TEST_STATISTICS_LOG_TESTS_H__
+#ifndef GRPC_TEST_CORE_STATISTICS_CENSUS_LOG_TESTS_H
+#define GRPC_TEST_CORE_STATISTICS_CENSUS_LOG_TESTS_H
 
 void test_invalid_record_size();
 void test_end_write_with_different_size();
@@ -48,4 +48,4 @@
 void test_performance();
 void test_small_log();
 
-#endif /* __GRPC_TEST_STATISTICS_LOG_TESTS_H__ */
+#endif  /* GRPC_TEST_CORE_STATISTICS_CENSUS_LOG_TESTS_H */
diff --git a/test/core/transport/chttp2/stream_map_test.c b/test/core/transport/chttp2/stream_map_test.c
index 6b91bdf..d678e0a 100644
--- a/test/core/transport/chttp2/stream_map_test.c
+++ b/test/core/transport/chttp2/stream_map_test.c
@@ -213,7 +213,7 @@
   test_empty_find();
   test_double_deletion();
 
-  while (n < 10000000) {
+  while (n < 100000) {
     test_basic_add_find(n);
     test_delete_evens_sweep(n);
     test_delete_evens_incremental(n);
diff --git a/test/core/transport/transport_end2end_tests.h b/test/core/transport/transport_end2end_tests.h
index 3dc2b9b..1edffe9 100644
--- a/test/core/transport/transport_end2end_tests.h
+++ b/test/core/transport/transport_end2end_tests.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_TRANSPORT_TRANSPORT_END2END_TESTS_H__
-#define __GRPC_TEST_TRANSPORT_TRANSPORT_END2END_TESTS_H__
+#ifndef GRPC_TEST_CORE_TRANSPORT_TRANSPORT_END2END_TESTS_H
+#define GRPC_TEST_CORE_TRANSPORT_TRANSPORT_END2END_TESTS_H
 
 #include "src/core/transport/transport.h"
 
@@ -65,4 +65,4 @@
 /* Run the test suite on one configuration */
 void grpc_transport_end2end_tests(grpc_transport_test_config *config);
 
-#endif /* __GRPC_TEST_TRANSPORT_TRANSPORT_END2END_TESTS_H__ */
+#endif  /* GRPC_TEST_CORE_TRANSPORT_TRANSPORT_END2END_TESTS_H */
diff --git a/test/core/util/grpc_profiler.h b/test/core/util/grpc_profiler.h
index a31fcc1..347a1d3 100644
--- a/test/core/util/grpc_profiler.h
+++ b/test/core/util/grpc_profiler.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_UTIL_GRPC_PROFILER_H__
-#define __GRPC_TEST_UTIL_GRPC_PROFILER_H__
+#ifndef GRPC_TEST_CORE_UTIL_GRPC_PROFILER_H
+#define GRPC_TEST_CORE_UTIL_GRPC_PROFILER_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -45,4 +45,4 @@
 }
 #endif /*  __cplusplus */
 
-#endif /* __GRPC_TEST_UTIL_GRPC_PROFILER_H__ */
+#endif  /* GRPC_TEST_CORE_UTIL_GRPC_PROFILER_H */
diff --git a/test/core/util/parse_hexstring.h b/test/core/util/parse_hexstring.h
index 3fce0c9..22bbd17 100644
--- a/test/core/util/parse_hexstring.h
+++ b/test/core/util/parse_hexstring.h
@@ -31,11 +31,11 @@
  *
  */
 
-#ifndef __GRPC_TEST_UTIL_PARSE_HEXSTRING_H_
-#define __GRPC_TEST_UTIL_PARSE_HEXSTRING_H_
+#ifndef GRPC_TEST_CORE_UTIL_PARSE_HEXSTRING_H
+#define GRPC_TEST_CORE_UTIL_PARSE_HEXSTRING_H
 
 #include <grpc/support/slice.h>
 
 gpr_slice parse_hexstring(const char *hexstring);
 
-#endif /* __GRPC_TEST_UTIL_PARSE_HEXSTRING_H_ */
+#endif  /* GRPC_TEST_CORE_UTIL_PARSE_HEXSTRING_H */
diff --git a/test/core/util/port.h b/test/core/util/port.h
index 2a12ab9..b516ec5 100644
--- a/test/core/util/port.h
+++ b/test/core/util/port.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_UTIL_PORT_H__
-#define __GRPC_TEST_UTIL_PORT_H__
+#ifndef GRPC_TEST_CORE_UTIL_PORT_H
+#define GRPC_TEST_CORE_UTIL_PORT_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -49,4 +49,4 @@
 }
 #endif
 
-#endif /* __GRPC_TEST_UTIL_PORT_H__ */
+#endif  /* GRPC_TEST_CORE_UTIL_PORT_H */
diff --git a/test/core/util/slice_splitter.h b/test/core/util/slice_splitter.h
index b67fe73..1ce1c09 100644
--- a/test/core/util/slice_splitter.h
+++ b/test/core/util/slice_splitter.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_UTIL_SLICE_SPLITTER_H__
-#define __GRPC_TEST_UTIL_SLICE_SPLITTER_H__
+#ifndef GRPC_TEST_CORE_UTIL_SLICE_SPLITTER_H
+#define GRPC_TEST_CORE_UTIL_SLICE_SPLITTER_H
 
 /* utility function to split/merge slices together to help create test
    cases */
@@ -65,4 +65,4 @@
 
 const char *grpc_slice_split_mode_name(grpc_slice_split_mode mode);
 
-#endif /* __GRPC_TEST_UTIL_SLICE_SPLITTER_H__ */
+#endif  /* GRPC_TEST_CORE_UTIL_SLICE_SPLITTER_H */
diff --git a/test/core/util/test_config.h b/test/core/util/test_config.h
index 5292c7b..668a069 100644
--- a/test/core/util/test_config.h
+++ b/test/core/util/test_config.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPC_TEST_UTIL_TEST_CONFIG_H__
-#define __GRPC_TEST_UTIL_TEST_CONFIG_H__
+#ifndef GRPC_TEST_CORE_UTIL_TEST_CONFIG_H
+#define GRPC_TEST_CORE_UTIL_TEST_CONFIG_H
 
 #include <grpc/support/time.h>
 
@@ -65,4 +65,4 @@
 }
 #endif /*  __cplusplus */
 
-#endif /* __GRPC_TEST_UTIL_TEST_CONFIG_H__ */
+#endif  /* GRPC_TEST_CORE_UTIL_TEST_CONFIG_H */
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index 5a2762d..331a5ef 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -65,9 +65,7 @@
 
 namespace {
 
-void* tag(int i) {
-  return (void*)(gpr_intptr)i;
-}
+void* tag(int i) { return (void*)(gpr_intptr)i; }
 
 void verify_ok(CompletionQueue* cq, int i, bool expect_ok) {
   bool ok;
@@ -109,18 +107,10 @@
     stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel));
   }
 
-  void server_ok(int i) {
-    verify_ok(&srv_cq_, i, true);
-  }
-  void client_ok(int i) {
-    verify_ok(&cli_cq_, i , true);
-  }
-  void server_fail(int i) {
-    verify_ok(&srv_cq_, i, false);
-  }
-  void client_fail(int i) {
-    verify_ok(&cli_cq_, i, false);
-  }
+  void server_ok(int i) { verify_ok(&srv_cq_, i, true); }
+  void client_ok(int i) { verify_ok(&cli_cq_, i, true); }
+  void server_fail(int i) { verify_ok(&srv_cq_, i, false); }
+  void client_fail(int i) { verify_ok(&cli_cq_, i, false); }
 
   void SendRpc(int num_rpcs) {
     for (int i = 0; i < num_rpcs; i++) {
@@ -135,12 +125,11 @@
       grpc::ServerAsyncResponseWriter<EchoResponse> response_writer(&srv_ctx);
 
       send_request.set_message("Hello");
-      std::unique_ptr<ClientAsyncResponseReader<EchoResponse> >
-          response_reader(stub_->Echo(
-              &cli_ctx, send_request, &cli_cq_, tag(1)));
+      std::unique_ptr<ClientAsyncResponseReader<EchoResponse> > response_reader(
+          stub_->AsyncEcho(&cli_ctx, send_request, &cli_cq_, tag(1)));
 
-      service_.RequestEcho(
-          &srv_ctx, &recv_request, &response_writer, &srv_cq_, tag(2));
+      service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, &srv_cq_,
+                           tag(2));
 
       server_ok(2);
       EXPECT_EQ(send_request.message(), recv_request.message());
@@ -191,10 +180,9 @@
 
   send_request.set_message("Hello");
   std::unique_ptr<ClientAsyncWriter<EchoRequest> > cli_stream(
-      stub_->RequestStream(&cli_ctx, &recv_response, &cli_cq_, tag(1)));
+      stub_->AsyncRequestStream(&cli_ctx, &recv_response, &cli_cq_, tag(1)));
 
-  service_.RequestRequestStream(
-      &srv_ctx, &srv_stream, &srv_cq_, tag(2));
+  service_.RequestRequestStream(&srv_ctx, &srv_stream, &srv_cq_, tag(2));
 
   server_ok(2);
   client_ok(1);
@@ -245,10 +233,10 @@
 
   send_request.set_message("Hello");
   std::unique_ptr<ClientAsyncReader<EchoResponse> > cli_stream(
-      stub_->ResponseStream(&cli_ctx, send_request, &cli_cq_, tag(1)));
+      stub_->AsyncResponseStream(&cli_ctx, send_request, &cli_cq_, tag(1)));
 
-  service_.RequestResponseStream(
-      &srv_ctx, &recv_request, &srv_stream, &srv_cq_, tag(2));
+  service_.RequestResponseStream(&srv_ctx, &recv_request, &srv_stream, &srv_cq_,
+                                 tag(2));
 
   server_ok(2);
   client_ok(1);
@@ -296,10 +284,9 @@
 
   send_request.set_message("Hello");
   std::unique_ptr<ClientAsyncReaderWriter<EchoRequest, EchoResponse> >
-      cli_stream(stub_->BidiStream(&cli_ctx, &cli_cq_, tag(1)));
+      cli_stream(stub_->AsyncBidiStream(&cli_ctx, &cli_cq_, tag(1)));
 
-  service_.RequestBidiStream(
-      &srv_ctx, &srv_stream, &srv_cq_, tag(2));
+  service_.RequestBidiStream(&srv_ctx, &srv_stream, &srv_cq_, tag(2));
 
   server_ok(2);
   client_ok(1);
@@ -355,10 +342,10 @@
   cli_ctx.AddMetadata(meta2.first, meta2.second);
 
   std::unique_ptr<ClientAsyncResponseReader<EchoResponse> > response_reader(
-      stub_->Echo(&cli_ctx, send_request, &cli_cq_, tag(1)));
+      stub_->AsyncEcho(&cli_ctx, send_request, &cli_cq_, tag(1)));
 
-  service_.RequestEcho(
-      &srv_ctx, &recv_request, &response_writer, &srv_cq_, tag(2));
+  service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, &srv_cq_,
+                       tag(2));
   server_ok(2);
   EXPECT_EQ(send_request.message(), recv_request.message());
   auto client_initial_metadata = srv_ctx.client_metadata();
@@ -397,10 +384,10 @@
   std::pair<grpc::string, grpc::string> meta2("key2", "val2");
 
   std::unique_ptr<ClientAsyncResponseReader<EchoResponse> > response_reader(
-      stub_->Echo(&cli_ctx, send_request, &cli_cq_, tag(1)));
+      stub_->AsyncEcho(&cli_ctx, send_request, &cli_cq_, tag(1)));
 
-  service_.RequestEcho(
-      &srv_ctx, &recv_request, &response_writer, &srv_cq_, tag(2));
+  service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, &srv_cq_,
+                       tag(2));
   server_ok(2);
   EXPECT_EQ(send_request.message(), recv_request.message());
   srv_ctx.AddInitialMetadata(meta1.first, meta1.second);
@@ -445,10 +432,10 @@
   std::pair<grpc::string, grpc::string> meta2("key2", "val2");
 
   std::unique_ptr<ClientAsyncResponseReader<EchoResponse> > response_reader(
-      stub_->Echo(&cli_ctx, send_request, &cli_cq_, tag(1)));
+      stub_->AsyncEcho(&cli_ctx, send_request, &cli_cq_, tag(1)));
 
-  service_.RequestEcho(
-      &srv_ctx, &recv_request, &response_writer, &srv_cq_, tag(2));
+  service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, &srv_cq_,
+                       tag(2));
   server_ok(2);
   EXPECT_EQ(send_request.message(), recv_request.message());
   response_writer.SendInitialMetadata(tag(3));
@@ -462,7 +449,6 @@
 
   server_ok(4);
 
-
   response_reader->Finish(&recv_response, &recv_status, tag(5));
   client_ok(5);
   EXPECT_EQ(send_response.message(), recv_response.message());
@@ -491,20 +477,22 @@
   std::pair<grpc::string, grpc::string> meta2(
       "key2-bin", {"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc", 13});
   std::pair<grpc::string, grpc::string> meta3("key3", "val3");
-  std::pair<grpc::string, grpc::string> meta6("key4-bin",
+  std::pair<grpc::string, grpc::string> meta6(
+      "key4-bin",
       {"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d", 14});
   std::pair<grpc::string, grpc::string> meta5("key5", "val5");
-  std::pair<grpc::string, grpc::string> meta4("key6-bin",
+  std::pair<grpc::string, grpc::string> meta4(
+      "key6-bin",
       {"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee", 15});
 
   cli_ctx.AddMetadata(meta1.first, meta1.second);
   cli_ctx.AddMetadata(meta2.first, meta2.second);
 
   std::unique_ptr<ClientAsyncResponseReader<EchoResponse> > response_reader(
-      stub_->Echo(&cli_ctx, send_request, &cli_cq_, tag(1)));
+      stub_->AsyncEcho(&cli_ctx, send_request, &cli_cq_, tag(1)));
 
-  service_.RequestEcho(
-      &srv_ctx, &recv_request, &response_writer, &srv_cq_, tag(2));
+  service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, &srv_cq_,
+                       tag(2));
   server_ok(2);
   EXPECT_EQ(send_request.message(), recv_request.message());
   auto client_initial_metadata = srv_ctx.client_metadata();
@@ -531,7 +519,6 @@
 
   server_ok(5);
 
-
   response_reader->Finish(&recv_response, &recv_status, tag(6));
   client_ok(6);
   EXPECT_EQ(send_response.message(), recv_response.message());
diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
new file mode 100644
index 0000000..9ea9cfe
--- /dev/null
+++ b/test/cpp/qps/client_async.cc
@@ -0,0 +1,341 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <cassert>
+#include <functional>
+#include <memory>
+#include <string>
+#include <thread>
+#include <vector>
+#include <sstream>
+
+#include <grpc/grpc.h>
+#include <grpc/support/histogram.h>
+#include <grpc/support/log.h>
+#include <gflags/gflags.h>
+#include <grpc++/async_unary_call.h>
+#include <grpc++/client_context.h>
+#include <grpc++/status.h>
+#include "test/core/util/grpc_profiler.h"
+#include "test/cpp/util/create_test_channel.h"
+#include "test/cpp/qps/qpstest.pb.h"
+
+DEFINE_bool(enable_ssl, false, "Whether to use ssl/tls.");
+DEFINE_int32(server_port, 0, "Server port.");
+DEFINE_string(server_host, "127.0.0.1", "Server host.");
+DEFINE_int32(client_threads, 4, "Number of client threads.");
+
+// We have a configurable number of channels for sending RPCs.
+// RPCs are sent round-robin on the available channels by the
+// various threads. Interesting cases are 1 global channel or
+// 1 per-thread channel, but we can support any number.
+// The channels are assigned round-robin on an RPC by RPC basis
+// rather than just at initialization time in order to also measure the
+// impact of cache thrashing caused by channel changes. This is an issue
+// if you are not in one of the above "interesting cases"
+DEFINE_int32(client_channels, 4, "Number of client channels.");
+
+DEFINE_int32(num_rpcs, 1000, "Number of RPCs per thread.");
+DEFINE_int32(payload_size, 1, "Payload size in bytes");
+
+// Alternatively, specify parameters for test as a workload so that multiple
+// tests are initiated back-to-back. This is convenient for keeping a borg
+// allocation consistent. This is a space-separated list of
+// [threads channels num_rpcs payload_size ]*
+DEFINE_string(workload, "", "Workload parameters");
+
+using grpc::ChannelInterface;
+using grpc::CreateTestChannel;
+using grpc::testing::ServerStats;
+using grpc::testing::SimpleRequest;
+using grpc::testing::SimpleResponse;
+using grpc::testing::StatsRequest;
+using grpc::testing::TestService;
+
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google {}
+namespace gflags {}
+using namespace google;
+using namespace gflags;
+
+static double now() {
+  gpr_timespec tv = gpr_now();
+  return 1e9 * tv.tv_sec + tv.tv_nsec;
+}
+
+class ClientRpcContext {
+ public:
+  ClientRpcContext() {}
+  virtual ~ClientRpcContext() {}
+  virtual bool RunNextState() = 0;  // do next state, return false if steps done
+  static void *tag(ClientRpcContext *c) { return reinterpret_cast<void *>(c); }
+  static ClientRpcContext *detag(void *t) {
+    return reinterpret_cast<ClientRpcContext *>(t);
+  }
+  virtual void report_stats(gpr_histogram *hist) = 0;
+};
+template <class RequestType, class ResponseType>
+class ClientRpcContextUnaryImpl : public ClientRpcContext {
+ public:
+  ClientRpcContextUnaryImpl(
+      TestService::Stub *stub,
+      const RequestType &req,
+      std::function<
+          std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>>(
+	      TestService::Stub *, grpc::ClientContext *, const RequestType &,
+	      void *)> start_req,
+      std::function<void(grpc::Status, ResponseType *)> on_done)
+      : context_(),
+	stub_(stub),
+        req_(req),
+        response_(),
+        next_state_(&ClientRpcContextUnaryImpl::ReqSent),
+        callback_(on_done),
+        start_(now()),
+        response_reader_(
+	    start_req(stub_, &context_, req_, ClientRpcContext::tag(this))) {}
+  ~ClientRpcContextUnaryImpl() GRPC_OVERRIDE {}
+  bool RunNextState() GRPC_OVERRIDE { return (this->*next_state_)(); }
+  void report_stats(gpr_histogram *hist) GRPC_OVERRIDE {
+    gpr_histogram_add(hist, now() - start_);
+  }
+
+ private:
+  bool ReqSent() {
+    next_state_ = &ClientRpcContextUnaryImpl::RespDone;
+    response_reader_->Finish(&response_, &status_, ClientRpcContext::tag(this));
+    return true;
+  }
+  bool RespDone() {
+    next_state_ = &ClientRpcContextUnaryImpl::DoCallBack;
+    return false;
+  }
+  bool DoCallBack() {
+    callback_(status_, &response_);
+    return false;
+  }
+  grpc::ClientContext context_;
+  TestService::Stub *stub_;
+  RequestType req_;
+  ResponseType response_;
+  bool (ClientRpcContextUnaryImpl::*next_state_)();
+  std::function<void(grpc::Status, ResponseType *)> callback_;
+  grpc::Status status_;
+  double start_;
+  std::unique_ptr<grpc::ClientAsyncResponseReader<ResponseType>>
+      response_reader_;
+};
+
+static void RunTest(const int client_threads, const int client_channels,
+                    const int num_rpcs, const int payload_size) {
+  gpr_log(GPR_INFO,
+          "QPS test with parameters\n"
+          "enable_ssl = %d\n"
+          "client_channels = %d\n"
+          "client_threads = %d\n"
+          "num_rpcs = %d\n"
+          "payload_size = %d\n"
+          "server_host:server_port = %s:%d\n\n",
+          FLAGS_enable_ssl, client_channels, client_threads, num_rpcs,
+          payload_size, FLAGS_server_host.c_str(), FLAGS_server_port);
+
+  std::ostringstream oss;
+  oss << FLAGS_server_host << ":" << FLAGS_server_port;
+
+  class ClientChannelInfo {
+   public:
+    explicit ClientChannelInfo(const grpc::string &server)
+        : channel_(CreateTestChannel(server, FLAGS_enable_ssl)),
+          stub_(TestService::NewStub(channel_)) {}
+    ChannelInterface *get_channel() { return channel_.get(); }
+    TestService::Stub *get_stub() { return stub_.get(); }
+
+   private:
+    std::shared_ptr<ChannelInterface> channel_;
+    std::unique_ptr<TestService::Stub> stub_;
+  };
+
+  std::vector<ClientChannelInfo> channels;
+  for (int i = 0; i < client_channels; i++) {
+    channels.push_back(ClientChannelInfo(oss.str()));
+  }
+
+  std::vector<std::thread> threads;  // Will add threads when ready to execute
+  std::vector< ::gpr_histogram *> thread_stats(client_threads);
+
+  TestService::Stub *stub_stats = channels[0].get_stub();
+  grpc::ClientContext context_stats_begin;
+  StatsRequest stats_request;
+  ServerStats server_stats_begin;
+  stats_request.set_test_num(0);
+  grpc::Status status_beg = stub_stats->CollectServerStats(
+      &context_stats_begin, stats_request, &server_stats_begin);
+
+  grpc_profiler_start("qps_client_async.prof");
+
+  auto CheckDone = [=](grpc::Status s, SimpleResponse *response) {
+    GPR_ASSERT(s.IsOk() && (response->payload().type() ==
+                            grpc::testing::PayloadType::COMPRESSABLE) &&
+               (response->payload().body().length() ==
+                static_cast<size_t>(payload_size)));
+  };
+
+  for (int i = 0; i < client_threads; i++) {
+    gpr_histogram *hist = gpr_histogram_create(0.01, 60e9);
+    GPR_ASSERT(hist != NULL);
+    thread_stats[i] = hist;
+
+    threads.push_back(std::thread(
+        [hist, client_threads, client_channels, num_rpcs, payload_size,
+         &channels, &CheckDone](int channel_num) {
+          using namespace std::placeholders;
+          SimpleRequest request;
+          request.set_response_type(grpc::testing::PayloadType::COMPRESSABLE);
+          request.set_response_size(payload_size);
+
+          grpc::CompletionQueue cli_cq;
+	  auto start_req = std::bind(&TestService::Stub::AsyncUnaryCall, _1,
+				     _2, _3, &cli_cq, _4);
+
+          int rpcs_sent = 0;
+          while (rpcs_sent < num_rpcs) {
+            rpcs_sent++;
+            TestService::Stub *stub = channels[channel_num].get_stub();
+            new ClientRpcContextUnaryImpl<SimpleRequest, SimpleResponse>(stub,
+                request, start_req, CheckDone);
+            void *got_tag;
+            bool ok;
+
+            // Need to call 2 next for every 1 RPC (1 for req done, 1 for resp
+            // done)
+            cli_cq.Next(&got_tag, &ok);
+            if (!ok) break;
+            ClientRpcContext *ctx = ClientRpcContext::detag(got_tag);
+            if (ctx->RunNextState() == false) {
+              // call the callback and then delete it
+              ctx->report_stats(hist);
+              ctx->RunNextState();
+              delete ctx;
+            }
+            cli_cq.Next(&got_tag, &ok);
+            if (!ok) break;
+            ctx = ClientRpcContext::detag(got_tag);
+            if (ctx->RunNextState() == false) {
+              // call the callback and then delete it
+              ctx->report_stats(hist);
+	      ctx->RunNextState();
+              delete ctx;
+            }
+            // Now do runtime round-robin assignment of the next
+            // channel number
+            channel_num += client_threads;
+            channel_num %= client_channels;
+          }
+        },
+        i % client_channels));
+  }
+
+  gpr_histogram *hist = gpr_histogram_create(0.01, 60e9);
+  GPR_ASSERT(hist != NULL);
+  for (auto &t : threads) {
+    t.join();
+  }
+
+  grpc_profiler_stop();
+
+  for (int i = 0; i < client_threads; i++) {
+    gpr_histogram *h = thread_stats[i];
+    gpr_log(GPR_INFO, "latency at thread %d (50/90/95/99/99.9): %f/%f/%f/%f/%f",
+            i, gpr_histogram_percentile(h, 50), gpr_histogram_percentile(h, 90),
+            gpr_histogram_percentile(h, 95), gpr_histogram_percentile(h, 99),
+            gpr_histogram_percentile(h, 99.9));
+    gpr_histogram_merge(hist, h);
+    gpr_histogram_destroy(h);
+  }
+
+  gpr_log(
+      GPR_INFO,
+      "latency across %d threads with %d channels and %d payload "
+      "(50/90/95/99/99.9): %f / %f / %f / %f / %f",
+      client_threads, client_channels, payload_size,
+      gpr_histogram_percentile(hist, 50), gpr_histogram_percentile(hist, 90),
+      gpr_histogram_percentile(hist, 95), gpr_histogram_percentile(hist, 99),
+      gpr_histogram_percentile(hist, 99.9));
+  gpr_histogram_destroy(hist);
+
+  grpc::ClientContext context_stats_end;
+  ServerStats server_stats_end;
+  grpc::Status status_end = stub_stats->CollectServerStats(
+      &context_stats_end, stats_request, &server_stats_end);
+
+  double elapsed = server_stats_end.time_now() - server_stats_begin.time_now();
+  int total_rpcs = client_threads * num_rpcs;
+  double utime = server_stats_end.time_user() - server_stats_begin.time_user();
+  double stime =
+      server_stats_end.time_system() - server_stats_begin.time_system();
+  gpr_log(GPR_INFO,
+          "Elapsed time: %.3f\n"
+          "RPC Count: %d\n"
+          "QPS: %.3f\n"
+          "System time: %.3f\n"
+          "User time: %.3f\n"
+          "Resource usage: %.1f%%\n",
+          elapsed, total_rpcs, total_rpcs / elapsed, stime, utime,
+          (stime + utime) / elapsed * 100.0);
+}
+
+int main(int argc, char **argv) {
+  grpc_init();
+  ParseCommandLineFlags(&argc, &argv, true);
+
+  GPR_ASSERT(FLAGS_server_port);
+
+  if (FLAGS_workload.length() == 0) {
+    RunTest(FLAGS_client_threads, FLAGS_client_channels, FLAGS_num_rpcs,
+            FLAGS_payload_size);
+  } else {
+    std::istringstream workload(FLAGS_workload);
+    int client_threads, client_channels, num_rpcs, payload_size;
+    workload >> client_threads;
+    while (!workload.eof()) {
+      workload >> client_channels >> num_rpcs >> payload_size;
+      RunTest(client_threads, client_channels, num_rpcs, payload_size);
+      workload >> client_threads;
+    }
+    gpr_log(GPR_INFO, "Done with specified workload.");
+  }
+
+  grpc_shutdown();
+  return 0;
+}
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
new file mode 100644
index 0000000..c797d8a
--- /dev/null
+++ b/test/cpp/qps/server_async.cc
@@ -0,0 +1,299 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <forward_list>
+#include <functional>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <sys/signal.h>
+#include <thread>
+
+#include <gflags/gflags.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/host_port.h>
+#include <grpc++/async_unary_call.h>
+#include <grpc++/config.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_context.h>
+#include <grpc++/status.h>
+#include <gtest/gtest.h>
+#include "src/cpp/server/thread_pool.h"
+#include "test/core/util/grpc_profiler.h"
+#include "test/cpp/qps/qpstest.pb.h"
+
+#include <grpc/grpc.h>
+#include <grpc/support/log.h>
+
+DEFINE_bool(enable_ssl, false, "Whether to use ssl/tls.");
+DEFINE_int32(port, 0, "Server port.");
+DEFINE_int32(server_threads, 4, "Number of server threads.");
+
+using grpc::CompletionQueue;
+using grpc::Server;
+using grpc::ServerBuilder;
+using grpc::ServerContext;
+using grpc::ThreadPool;
+using grpc::testing::Payload;
+using grpc::testing::PayloadType;
+using grpc::testing::ServerStats;
+using grpc::testing::SimpleRequest;
+using grpc::testing::SimpleResponse;
+using grpc::testing::StatsRequest;
+using grpc::testing::TestService;
+using grpc::Status;
+
+// In some distros, gflags is in the namespace google, and in some others,
+// in gflags. This hack is enabling us to find both.
+namespace google {}
+namespace gflags {}
+using namespace google;
+using namespace gflags;
+
+static bool got_sigint = false;
+
+static void sigint_handler(int x) { got_sigint = 1; }
+
+static double time_double(struct timeval *tv) {
+  return tv->tv_sec + 1e-6 * tv->tv_usec;
+}
+
+static bool SetPayload(PayloadType type, int size, Payload *payload) {
+  PayloadType response_type = type;
+  // TODO(yangg): Support UNCOMPRESSABLE payload.
+  if (type != PayloadType::COMPRESSABLE) {
+    return false;
+  }
+  payload->set_type(response_type);
+  std::unique_ptr<char[]> body(new char[size]());
+  payload->set_body(body.get(), size);
+  return true;
+}
+
+namespace {
+
+class AsyncQpsServerTest {
+ public:
+  AsyncQpsServerTest() : srv_cq_(), async_service_(&srv_cq_), server_(nullptr) {
+    char *server_address = NULL;
+    gpr_join_host_port(&server_address, "::", FLAGS_port);
+
+    ServerBuilder builder;
+    builder.AddPort(server_address);
+
+    builder.RegisterAsyncService(&async_service_);
+
+    server_ = builder.BuildAndStart();
+    gpr_log(GPR_INFO, "Server listening on %s\n", server_address);
+    gpr_free(server_address);
+
+    using namespace std::placeholders;
+    request_unary_ = std::bind(&TestService::AsyncService::RequestUnaryCall,
+                               &async_service_, _1, _2, _3, &srv_cq_, _4);
+    request_stats_ =
+        std::bind(&TestService::AsyncService::RequestCollectServerStats,
+                  &async_service_, _1, _2, _3, &srv_cq_, _4);
+    for (int i = 0; i < 100; i++) {
+      contexts_.push_front(
+          new ServerRpcContextUnaryImpl<SimpleRequest, SimpleResponse>(
+              request_unary_, UnaryCall));
+      contexts_.push_front(
+          new ServerRpcContextUnaryImpl<StatsRequest, ServerStats>(
+              request_stats_, CollectServerStats));
+    }
+  }
+  ~AsyncQpsServerTest() {
+    server_->Shutdown();
+    void *ignored_tag;
+    bool ignored_ok;
+    srv_cq_.Shutdown();
+    while (srv_cq_.Next(&ignored_tag, &ignored_ok)) {
+    }
+    while (!contexts_.empty()) {
+      delete contexts_.front();
+      contexts_.pop_front();
+    }
+  }
+  void ServeRpcs(int num_threads) {
+    std::vector<std::thread> threads;
+    for (int i = 0; i < num_threads; i++) {
+      threads.push_back(std::thread([=]() {
+        // Wait until work is available or we are shutting down
+        bool ok;
+        void *got_tag;
+        while (srv_cq_.Next(&got_tag, &ok)) {
+          EXPECT_EQ(ok, true);
+          ServerRpcContext *ctx = detag(got_tag);
+          // The tag is a pointer to an RPC context to invoke
+          if (ctx->RunNextState() == false) {
+            // this RPC context is done, so refresh it
+            ctx->Reset();
+          }
+        }
+        return;
+      }));
+    }
+    while (!got_sigint) {
+      std::this_thread::sleep_for(std::chrono::seconds(5));
+    }
+  }
+
+ private:
+  class ServerRpcContext {
+   public:
+    ServerRpcContext() {}
+    virtual ~ServerRpcContext(){};
+    virtual bool RunNextState() = 0;// do next state, return false if all done
+    virtual void Reset() = 0;     // start this back at a clean state
+  };
+  static void *tag(ServerRpcContext *func) {
+    return reinterpret_cast<void *>(func);
+  }
+  static ServerRpcContext *detag(void *tag) {
+    return reinterpret_cast<ServerRpcContext *>(tag);
+  }
+
+  template <class RequestType, class ResponseType>
+  class ServerRpcContextUnaryImpl : public ServerRpcContext {
+   public:
+    ServerRpcContextUnaryImpl(
+        std::function<void(ServerContext *, RequestType *,
+                           grpc::ServerAsyncResponseWriter<ResponseType> *,
+                           void *)> request_method,
+        std::function<grpc::Status(const RequestType *, ResponseType *)>
+            invoke_method)
+        : next_state_(&ServerRpcContextUnaryImpl::invoker),
+          request_method_(request_method),
+          invoke_method_(invoke_method),
+          response_writer_(&srv_ctx_) {
+      request_method_(&srv_ctx_, &req_, &response_writer_,
+                      AsyncQpsServerTest::tag(this));
+    }
+    ~ServerRpcContextUnaryImpl() GRPC_OVERRIDE {}
+    bool RunNextState() GRPC_OVERRIDE { return (this->*next_state_)(); }
+    void Reset() GRPC_OVERRIDE {
+      srv_ctx_ = ServerContext();
+      req_ = RequestType();
+      response_writer_ =
+          grpc::ServerAsyncResponseWriter<ResponseType>(&srv_ctx_);
+
+      // Then request the method
+      next_state_ = &ServerRpcContextUnaryImpl::invoker;
+      request_method_(&srv_ctx_, &req_, &response_writer_,
+                      AsyncQpsServerTest::tag(this));
+    }
+
+   private:
+    bool finisher() { return false; }
+    bool invoker() {
+      ResponseType response;
+
+      // Call the RPC processing function
+      grpc::Status status = invoke_method_(&req_, &response);
+
+      // Have the response writer work and invoke on_finish when done
+      next_state_ = &ServerRpcContextUnaryImpl::finisher;
+      response_writer_.Finish(response, status, AsyncQpsServerTest::tag(this));
+      return true;
+    }
+    ServerContext srv_ctx_;
+    RequestType req_;
+    bool (ServerRpcContextUnaryImpl::*next_state_)();
+    std::function<void(ServerContext *, RequestType *,
+                       grpc::ServerAsyncResponseWriter<ResponseType> *, void *)>
+        request_method_;
+    std::function<grpc::Status(const RequestType *, ResponseType *)>
+        invoke_method_;
+    grpc::ServerAsyncResponseWriter<ResponseType> response_writer_;
+  };
+
+  static Status CollectServerStats(const StatsRequest *,
+                                   ServerStats *response) {
+    struct rusage usage;
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    getrusage(RUSAGE_SELF, &usage);
+    response->set_time_now(time_double(&tv));
+    response->set_time_user(time_double(&usage.ru_utime));
+    response->set_time_system(time_double(&usage.ru_stime));
+    return Status::OK;
+  }
+  static Status UnaryCall(const SimpleRequest *request,
+                          SimpleResponse *response) {
+    if (request->has_response_size() && request->response_size() > 0) {
+      if (!SetPayload(request->response_type(), request->response_size(),
+                      response->mutable_payload())) {
+        return Status(grpc::StatusCode::INTERNAL, "Error creating payload.");
+      }
+    }
+    return Status::OK;
+  }
+  CompletionQueue srv_cq_;
+  TestService::AsyncService async_service_;
+  std::unique_ptr<Server> server_;
+  std::function<void(ServerContext *, SimpleRequest *,
+                     grpc::ServerAsyncResponseWriter<SimpleResponse> *, void *)>
+      request_unary_;
+  std::function<void(ServerContext *, StatsRequest *,
+                     grpc::ServerAsyncResponseWriter<ServerStats> *, void *)>
+      request_stats_;
+  std::forward_list<ServerRpcContext *> contexts_;
+};
+
+}  // namespace
+
+static void RunServer() {
+  AsyncQpsServerTest server;
+
+  grpc_profiler_start("qps_server_async.prof");
+
+  server.ServeRpcs(FLAGS_server_threads);
+
+  grpc_profiler_stop();
+}
+
+int main(int argc, char **argv) {
+  grpc_init();
+  ParseCommandLineFlags(&argc, &argv, true);
+  GPR_ASSERT(FLAGS_port != 0);
+  GPR_ASSERT(!FLAGS_enable_ssl);
+
+  signal(SIGINT, sigint_handler);
+
+  RunServer();
+
+  grpc_shutdown();
+  google::protobuf::ShutdownProtobufLibrary();
+
+  return 0;
+}
diff --git a/test/cpp/util/create_test_channel.h b/test/cpp/util/create_test_channel.h
index 3476b83..5c298ce 100644
--- a/test/cpp/util/create_test_channel.h
+++ b/test/cpp/util/create_test_channel.h
@@ -31,8 +31,8 @@
  *
  */
 
-#ifndef __GRPCPP_TEST_UTIL_CREATE_TEST_CHANNEL_H_
-#define __GRPCPP_TEST_UTIL_CREATE_TEST_CHANNEL_H_
+#ifndef GRPC_TEST_CPP_UTIL_CREATE_TEST_CHANNEL_H
+#define GRPC_TEST_CPP_UTIL_CREATE_TEST_CHANNEL_H
 
 #include <memory>
 
@@ -56,4 +56,4 @@
 
 }  // namespace grpc
 
-#endif  // __GRPCPP_TEST_UTIL_CREATE_TEST_CHANNEL_H_
+#endif  // GRPC_TEST_CPP_UTIL_CREATE_TEST_CHANNEL_H
diff --git a/tools/buildgen/build-cleaner.py b/tools/buildgen/build-cleaner.py
index 880f3e2..1d9157a 100755
--- a/tools/buildgen/build-cleaner.py
+++ b/tools/buildgen/build-cleaner.py
@@ -41,6 +41,7 @@
 _VERSION_KEYS = ['major', 'minor', 'micro', 'build']
 _ELEM_KEYS = [
     'name',
+    'flaky',
     'build',
     'run',
     'language',
diff --git a/tools/distrib/guard_headers.sh b/tools/distrib/guard_headers.sh
new file mode 100755
index 0000000..2a54cf8
--- /dev/null
+++ b/tools/distrib/guard_headers.sh
@@ -0,0 +1,90 @@
+#!/bin/bash
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+set -e
+
+cd `dirname $0`/../..
+
+function process_dir {
+  base_dir=$1
+  prefix=$2
+  comment_language=$3
+  (
+    cd $base_dir
+    find . -name "*.h" | while read f ; do
+      guard=${prefix}_`echo ${f#*/} | tr '[:lower:]/.-' '[:upper:]___'`
+      if [ "$comment_language" = "c++" ] ; then
+        comment="// $guard"
+      else
+        comment="/* $guard */"
+      fi
+      awk '
+        BEGIN {
+          guard = "'${guard}'";
+          comment_language = "'${comment_language}'";
+        }
+        prev ~ /^#ifndef/ && !got_first_ifndef {
+          got_first_ifndef = 1;
+          prev = "#ifndef " guard;
+        }
+        prev ~ /^#define/ && !got_first_define {
+          got_first_define = 1;
+          prev = "#define " guard;
+        }
+        NR > 1 { print prev; }
+        { prev = $0; }
+        END {
+          if (prev ~ /^#endif/) {
+            if (comment_language ~ /^c$/) {
+              print "#endif  /* " guard " */";
+            } else if (comment_language ~ /^c\+\+$/) {
+              print "#endif  // " guard;
+            } else {
+              print "ERROR: unknown comment language: " comment_language;
+            }
+          } else {
+            print "ERROR: file does not end with #endif";
+          }
+        }
+      ' "${f}" > "${f}.rewritten"
+      mv "${f}.rewritten" "${f}"
+    done
+  )
+}
+
+process_dir include/grpc GRPC c
+process_dir include/grpc++ GRPCXX c++
+process_dir src/core GRPC_INTERNAL_CORE c
+process_dir src/cpp GRPC_INTERNAL_CPP c++
+process_dir src/compiler GRPC_INTERNAL_COMPILER c++
+process_dir test/core GRPC_TEST_CORE c
+process_dir test/cpp GRPC_TEST_CPP c++
+process_dir examples GRPC_EXAMPLES c++
diff --git a/tools/dockerfile/grpc_base/Dockerfile b/tools/dockerfile/grpc_base/Dockerfile
index d2b5569..9186277 100644
--- a/tools/dockerfile/grpc_base/Dockerfile
+++ b/tools/dockerfile/grpc_base/Dockerfile
@@ -64,13 +64,5 @@
 RUN $CLOUD_SDK/install.sh --usage-reporting=true --path-update=true --bash-completion=true --rc-path=/.bashrc --disable-installation-options
 ENV PATH $CLOUD_SDK/bin:$PATH
 
-# Install a GitHub SSH service credential that gives access to the GitHub repo while it's private
-# TODO: remove this once the repo is public
-ADD .ssh .ssh
-RUN chmod 600 .ssh/github.rsa
-RUN mkdir -p $HOME/.ssh && echo 'Host github.com' > $HOME/.ssh/config
-RUN echo "    IdentityFile /.ssh/github.rsa" >> $HOME/.ssh/config
-RUN echo 'StrictHostKeyChecking no' >> $HOME/.ssh/config
-
 # Define the default command.
 CMD ["bash"]
diff --git a/tools/dockerfile/grpc_build_deb/Dockerfile b/tools/dockerfile/grpc_build_deb/Dockerfile
index 6cba74e..24ffc73 100644
--- a/tools/dockerfile/grpc_build_deb/Dockerfile
+++ b/tools/dockerfile/grpc_build_deb/Dockerfile
@@ -34,7 +34,7 @@
 RUN apt-get update && apt-get install -y lintian
 
 # Get the source from GitHub
-RUN git clone git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN git clone https://github.com/grpc/grpc.git /var/local/git/grpc
 RUN cd /var/local/git/grpc && \
   git pull --recurse-submodules && \
   git submodule update --init --recursive
diff --git a/tools/dockerfile/grpc_csharp_mono/Dockerfile b/tools/dockerfile/grpc_csharp_mono/Dockerfile
new file mode 100644
index 0000000..d0e2d2b
--- /dev/null
+++ b/tools/dockerfile/grpc_csharp_mono/Dockerfile
@@ -0,0 +1,59 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Dockerfile for gRPC C# (on Mono).
+FROM grpc/csharp_mono_base
+
+# Pull the latest sources
+RUN cd /var/local/git/grpc \
+  && git pull --recurse-submodules \
+  && git submodule update --init --recursive
+
+# Install the gRPC C# extension library
+RUN make install_grpc_csharp_ext -j12 -C /var/local/git/grpc
+
+# TODO: download NuGet from web. The problem is there seems to be no direct link
+# we could use :-)
+ADD NuGet.exe NuGet.exe
+
+# Restore the NuGet dependencies
+RUN cd /var/local/git/grpc/src/csharp && mono /NuGet.exe restore Grpc.sln
+
+# Build gRPC solution
+RUN cd /var/local/git/grpc/src/csharp && xbuild Grpc.sln
+
+# Add a cacerts directory containing the Google root pem file, allowing the
+# ruby client to access the production test instance
+ADD cacerts cacerts
+
+# Add a service_account directory containing the auth creds file
+ADD service_account service_account
+
+# TODO: add command to run the interop server
+CMD ["/bin/bash", "-l"]
diff --git a/tools/dockerfile/grpc_csharp_mono_base/Dockerfile b/tools/dockerfile/grpc_csharp_mono_base/Dockerfile
new file mode 100644
index 0000000..74919a7
--- /dev/null
+++ b/tools/dockerfile/grpc_csharp_mono_base/Dockerfile
@@ -0,0 +1,53 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Base Dockerfile for gRPC C# (on Mono).
+#
+# Includes gRPC C# installation dependencies, things that are unlikely to vary.
+FROM grpc/base
+
+# Update to a newer version of mono
+RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
+RUN echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list
+
+# Install dependencies
+RUN apt-get update && apt-get install -y \
+    mono-devel \
+    nunit \
+    nunit-console \
+    monodevelop
+
+# Get the source from GitHub
+RUN git clone git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN cd /var/local/git/grpc && \
+  git pull --recurse-submodules && \
+  git submodule update --init --recursive
+
+# Define the default command.
+CMD ["bash","-l"]
diff --git a/tools/dockerfile/grpc_cxx/Dockerfile b/tools/dockerfile/grpc_cxx/Dockerfile
index 18c6732..ac09e25 100644
--- a/tools/dockerfile/grpc_cxx/Dockerfile
+++ b/tools/dockerfile/grpc_cxx/Dockerfile
@@ -33,7 +33,7 @@
 RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev
 
 # Get the source from GitHub
-RUN git clone git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN git clone https://github.com/grpc/grpc.git /var/local/git/grpc
 RUN cd /var/local/git/grpc && \
   git pull --recurse-submodules && \
   git submodule update --init --recursive
diff --git a/tools/dockerfile/grpc_go/Dockerfile b/tools/dockerfile/grpc_go/Dockerfile
index e1671ea..ada2208 100644
--- a/tools/dockerfile/grpc_go/Dockerfile
+++ b/tools/dockerfile/grpc_go/Dockerfile
@@ -30,21 +30,6 @@
 # Dockerfile for gRPC Go
 FROM golang:1.4
 
-# Install SSH to that Go source can be pulled securely.
-RUN apt-get update && apt-get install -y ssh
-
-# Install a GitHub SSH service credential that gives access to the GitHub repo while it's private
-#
-# TODO: remove this once the repo is public
-ADD .ssh .ssh
-RUN chmod 600 /.ssh/github.rsa
-RUN mkdir -p $HOME/.ssh && echo 'Host github.com' > $HOME/.ssh/config
-RUN echo "    IdentityFile /.ssh/github.rsa" >> $HOME/.ssh/config
-RUN echo 'StrictHostKeyChecking no' >> $HOME/.ssh/config
-
-# Force go get to use the GitHub ssh url instead of https, and use the SSH creds
-RUN git config --global url."git@github.com:".insteadOf "https://github.com/"
-
 # Get the source from GitHub
 RUN go get google.golang.org/grpc
 
@@ -52,8 +37,8 @@
 ADD service_account service_account
 
 # Build the interop client and server
-RUN cd src/google.golang.org/grpc/interop/client && go install
-RUN cd src/google.golang.org/grpc/interop/server && go install
+RUN go install google.golang.org/grpc/interop/client
+RUN go install google.golang.org/grpc/interop/server
 
 # Specify the default command such that the interop server runs on its known testing port
-CMD ["/bin/bash", "-c", "cd src/google.golang.org/grpc/interop/server && go run server.go --use_tls=true --port=8020"]
+CMD ["server", "--use_tls=true", "--port=8020"]
diff --git a/tools/dockerfile/grpc_java/Dockerfile b/tools/dockerfile/grpc_java/Dockerfile
index affbec9..6b2612b 100644
--- a/tools/dockerfile/grpc_java/Dockerfile
+++ b/tools/dockerfile/grpc_java/Dockerfile
@@ -30,7 +30,7 @@
 # Dockerfile for the gRPC Java dev image
 FROM grpc/java_base
 
-RUN git clone --recursive --depth 1 git@github.com:grpc/grpc-java.git /var/local/git/grpc-java
+RUN git clone --recursive --depth 1 https://github.com/grpc/grpc-java.git /var/local/git/grpc-java
 RUN cd /var/local/git/grpc-java/lib/netty && \
   mvn -pl codec-http2 -am -DskipTests install clean
 RUN cd /var/local/git/grpc-java && \
diff --git a/tools/dockerfile/grpc_java_base/Dockerfile b/tools/dockerfile/grpc_java_base/Dockerfile
index 3eebc2b..2ee0a62 100644
--- a/tools/dockerfile/grpc_java_base/Dockerfile
+++ b/tools/dockerfile/grpc_java_base/Dockerfile
@@ -61,15 +61,9 @@
   cd javanano && mvn install && cd .. && \
   rm -r "$(pwd)"
 
-# Install a GitHub SSH service credential that gives access to the GitHub repo while it's private
-# TODO: remove this once the repo is public
-COPY .ssh/github.rsa /root/.ssh/id_rsa
-RUN chmod 600 /root/.ssh/id_rsa
-RUN echo 'Host github.com\nStrictHostKeyChecking no' > /root/.ssh/config
-
 # Trigger download of as many Maven and Gradle artifacts as possible. We don't build grpc-java
 # because we don't want to install netty
-RUN git clone --recursive --depth 1 git@github.com:grpc/grpc-java.git && \
+RUN git clone --recursive --depth 1 https://github.com/grpc/grpc-java.git && \
   cd grpc-java/lib/netty && \
   mvn -pl codec-http2 -am -DskipTests verify && \
   cd ../.. && \
diff --git a/tools/dockerfile/grpc_node_base/Dockerfile b/tools/dockerfile/grpc_node_base/Dockerfile
index 20ed4cf..1f3a236 100644
--- a/tools/dockerfile/grpc_node_base/Dockerfile
+++ b/tools/dockerfile/grpc_node_base/Dockerfile
@@ -39,7 +39,7 @@
 RUN npm install -g node-gyp
 
 # Get the source from GitHub, this gets the protobuf library as well
-RUN git clone git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN git clone https://github.com/grpc/grpc.git /var/local/git/grpc
 RUN cd /var/local/git/grpc && \
   git pull --recurse-submodules && \
   git submodule update --init --recursive
diff --git a/tools/dockerfile/grpc_php_base/Dockerfile b/tools/dockerfile/grpc_php_base/Dockerfile
index 49f5da8..cc874fd 100644
--- a/tools/dockerfile/grpc_php_base/Dockerfile
+++ b/tools/dockerfile/grpc_php_base/Dockerfile
@@ -76,7 +76,7 @@
 
 # Download the patched PHP protobuf so that PHP gRPC clients can be generated
 # from proto3 schemas.
-RUN git clone git@github.com:murgatroid99/Protobuf-PHP.git /var/local/git/protobuf-php
+RUN git clone https://github.com/murgatroid99/Protobuf-PHP.git /var/local/git/protobuf-php
 
 # Install ruby (via RVM) as ruby tools are dependencies for building Protobuf
 # PHP extensions.
@@ -91,7 +91,7 @@
 RUN rvm all do gem install ronn rake
 
 # Get the source from GitHub, this gets the protobuf library as well
-RUN git clone git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN git clone https://github.com/grpc/grpc.git /var/local/git/grpc
 RUN cd /var/local/git/grpc && \
   git pull --recurse-submodules && \
   git submodule update --init --recursive
diff --git a/tools/dockerfile/grpc_python_base/Dockerfile b/tools/dockerfile/grpc_python_base/Dockerfile
index 18dd40a..0d45f40 100644
--- a/tools/dockerfile/grpc_python_base/Dockerfile
+++ b/tools/dockerfile/grpc_python_base/Dockerfile
@@ -46,4 +46,4 @@
 RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0-alpha-1
 
 # Get the GRPC source from GitHub
-RUN git clone --recursive git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN git clone --recursive https://github.com/grpc/grpc.git /var/local/git/grpc
diff --git a/tools/dockerfile/grpc_ruby_base/Dockerfile b/tools/dockerfile/grpc_ruby_base/Dockerfile
index f3c7289..d58eeaa 100644
--- a/tools/dockerfile/grpc_ruby_base/Dockerfile
+++ b/tools/dockerfile/grpc_ruby_base/Dockerfile
@@ -72,7 +72,7 @@
 RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc"
 
 # Get the source from GitHub
-RUN git clone git@github.com:grpc/grpc.git /var/local/git/grpc
+RUN git clone https://github.com/grpc/grpc.git /var/local/git/grpc
 RUN cd /var/local/git/grpc && \
   git pull --recurse-submodules && \
   git submodule update --init --recursive
diff --git a/tools/gce_setup/grpc_docker.sh b/tools/gce_setup/grpc_docker.sh
index df8605b..0203926 100755
--- a/tools/gce_setup/grpc_docker.sh
+++ b/tools/gce_setup/grpc_docker.sh
@@ -1094,6 +1094,21 @@
   echo $the_cmd
 }
 
+# constructs the full dockerized node gce auth interop test cmd.
+#
+# call-seq:
+#   flags= .... # generic flags to include the command
+#   cmd=$($grpc_gen_test_cmd $flags)
+grpc_cloud_prod_auth_compute_engine_creds_gen_node_cmd() {
+  local env_flag="-e SSL_CERT_FILE=/cacerts/roots.pem "
+  local cmd_prefix="sudo docker run $env_flag grpc/node";
+  local test_script="/usr/bin/nodejs /var/local/git/grpc/src/node/interop/interop_client.js --use_tls=true";
+  local gfe_flags=$(_grpc_prod_gfe_flags)
+  local added_gfe_flags=$(_grpc_gce_test_flags)
+  local the_cmd="$cmd_prefix $test_script $gfe_flags $added_gfe_flags $@";
+  echo $the_cmd
+}
+
 # constructs the full dockerized cpp interop test cmd.
 #
 # call-seq:
diff --git a/tools/run_tests/build_python.sh b/tools/run_tests/build_python.sh
index 5a3c720..de63308 100755
--- a/tools/run_tests/build_python.sh
+++ b/tools/run_tests/build_python.sh
@@ -33,10 +33,9 @@
 # change to grpc repo root
 cd $(dirname $0)/../..
 
-make -j6
-
 root=`pwd`
-virtualenv python2.7_virtual_environment
+rm -rf python2.7_virtual_environment
+virtualenv -p /usr/bin/python2.7 python2.7_virtual_environment
 source python2.7_virtual_environment/bin/activate
 pip install enum34==1.0.4 futures==2.2.0 protobuf==3.0.0-alpha-1
 CFLAGS=-I$root/include LDFLAGS=-L$root/libs/opt pip install src/python/src
diff --git a/tools/run_tests/build_ruby.sh b/tools/run_tests/build_ruby.sh
new file mode 100755
index 0000000..53a69cf
--- /dev/null
+++ b/tools/run_tests/build_ruby.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -ex
+
+CONFIG=${CONFIG:-opt}
+
+# change to grpc repo root
+cd $(dirname $0)/../..
+
+# tells npm install to look for files in that directory
+export GRPC_ROOT=`pwd`
+# tells npm install the subdirectory with library files
+export GRPC_LIB_SUBDIR=libs/$CONFIG
+
+cd src/ruby
+
+bundle install
+rake compile:grpc
diff --git a/tools/run_tests/run_lcov.sh b/tools/run_tests/run_lcov.sh
index 292aec4..69b1de6 100755
--- a/tools/run_tests/run_lcov.sh
+++ b/tools/run_tests/run_lcov.sh
@@ -35,7 +35,7 @@
 root=`realpath $(dirname $0)/../..`
 tmp=`mktemp`
 cd $root
-tools/run_tests/run_tests.py -c gcov -l c c++
+tools/run_tests/run_tests.py -c gcov -l c c++ || true
 lcov --capture --directory . --output-file $tmp
 genhtml $tmp --output-directory $out
 rm $tmp
diff --git a/tools/run_tests/run_python.sh b/tools/run_tests/run_python.sh
index 06ddb8e..9c7dea0 100755
--- a/tools/run_tests/run_python.sh
+++ b/tools/run_tests/run_python.sh
@@ -38,7 +38,8 @@
 source python2.7_virtual_environment/bin/activate
 # TODO(issue 215): Properly itemize these in run_tests.py so that they can be parallelized.
 # TODO(atash): Enable dynamic unused port discovery for this test.
-python2.7 -B test/compiler/python_plugin_test.py --build_mode=opt
+# TODO(mlumish): Re-enable this test when we can install protoc
+# python2.7 -B test/compiler/python_plugin_test.py --build_mode=opt
 python2.7 -B -m grpc._adapter._blocking_invocation_inline_service_test
 python2.7 -B -m grpc._adapter._c_test
 python2.7 -B -m grpc._adapter._event_invocation_synchronous_event_service_test
diff --git a/tools/run_tests/run_ruby.sh b/tools/run_tests/run_ruby.sh
new file mode 100755
index 0000000..b82ce52
--- /dev/null
+++ b/tools/run_tests/run_ruby.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -ex
+
+# change to grpc repo root
+cd $(dirname $0)/../../src/ruby
+
+rake
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 372321c..e949670 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -135,11 +135,22 @@
     return [config.job_spec('tools/run_tests/run_python.sh', None)]
 
   def make_targets(self):
-    return[]
+    return ['static_c']
 
   def build_steps(self):
     return [['tools/run_tests/build_python.sh']]
 
+class RubyLanguage(object):
+
+  def test_specs(self, config, travis):
+    return [config.job_spec('tools/run_tests/run_ruby.sh', None)]
+
+  def make_targets(self):
+    return ['static_c']
+
+  def build_steps(self):
+    return [['tools/run_tests/build_ruby.sh']]
+
 
 # different configurations we can run under
 _CONFIGS = {
@@ -164,6 +175,7 @@
     'node': NodeLanguage(),
     'php': PhpLanguage(),
     'python': PythonLanguage(),
+    'ruby': RubyLanguage()
     }
 
 # parse command line
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index f84bd9d..06bf58f 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -32,7 +32,7 @@
     "name": "census_hash_table_test"
   }, 
   {
-    "flaky": false, 
+    "flaky": true, 
     "language": "c", 
     "name": "census_statistics_multiple_writers_circular_buffer_test"
   }, 
@@ -52,7 +52,7 @@
     "name": "census_statistics_quick_test"
   }, 
   {
-    "flaky": false, 
+    "flaky": true, 
     "language": "c", 
     "name": "census_statistics_small_log_test"
   }, 
@@ -102,12 +102,12 @@
     "name": "fd_posix_test"
   }, 
   {
-    "flaky": true, 
+    "flaky": false, 
     "language": "c", 
     "name": "fling_stream_test"
   }, 
   {
-    "flaky": true, 
+    "flaky": false, 
     "language": "c", 
     "name": "fling_test"
   }, 
diff --git a/tools/tsan_suppressions.txt b/tools/tsan_suppressions.txt
index 23d57f9..65e7e2e 100644
--- a/tools/tsan_suppressions.txt
+++ b/tools/tsan_suppressions.txt
@@ -1,2 +1,8 @@
 # OPENSSL_cleanse does racy access to a global
 race:OPENSSL_cleanse
+race:cleanse_ctr
+# these are legitimate races in OpenSSL, and it appears those folks are looking at it
+# https://www.mail-archive.com/openssl-dev@openssl.org/msg09019.html
+race:ssleay_rand_add
+race:ssleay_rand_bytes
+
diff --git a/vsprojects/vs2013/grpc.vcxproj b/vsprojects/vs2013/grpc.vcxproj
index 48f975f..60dc980 100644
--- a/vsprojects/vs2013/grpc.vcxproj
+++ b/vsprojects/vs2013/grpc.vcxproj
@@ -160,6 +160,7 @@
     <ClInclude Include="..\..\src\core\surface\client.h" />
     <ClInclude Include="..\..\src\core\surface\completion_queue.h" />
     <ClInclude Include="..\..\src\core\surface\event_string.h" />
+    <ClInclude Include="..\..\src\core\surface\init.h" />
     <ClInclude Include="..\..\src\core\surface\lame_client.h" />
     <ClInclude Include="..\..\src\core\surface\server.h" />
     <ClInclude Include="..\..\src\core\surface\surface_trace.h" />
@@ -219,6 +220,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\security\server_secure_chttp2.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\init_secure.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\surface\secure_channel_create.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\surface\secure_server_create.c">
@@ -377,6 +380,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\surface\server_create.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\surface_trace.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\alpn.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\bin_encoder.c">
diff --git a/vsprojects/vs2013/grpc.vcxproj.filters b/vsprojects/vs2013/grpc.vcxproj.filters
index 867e545..9fc70e7 100644
--- a/vsprojects/vs2013/grpc.vcxproj.filters
+++ b/vsprojects/vs2013/grpc.vcxproj.filters
@@ -49,6 +49,9 @@
     <ClCompile Include="..\..\src\core\security\server_secure_chttp2.c">
       <Filter>src\core\security</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\init_secure.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\surface\secure_channel_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
@@ -286,6 +289,9 @@
     <ClCompile Include="..\..\src\core\surface\server_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\surface_trace.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\alpn.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -590,6 +596,9 @@
     <ClInclude Include="..\..\src\core\surface\event_string.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\surface\init.h">
+      <Filter>src\core\surface</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\surface\lame_client.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
diff --git a/vsprojects/vs2013/grpc_shared.vcxproj b/vsprojects/vs2013/grpc_shared.vcxproj
index 4b2f1e7..5c2e23b 100644
--- a/vsprojects/vs2013/grpc_shared.vcxproj
+++ b/vsprojects/vs2013/grpc_shared.vcxproj
@@ -164,6 +164,7 @@
     <ClInclude Include="..\..\src\core\surface\client.h" />
     <ClInclude Include="..\..\src\core\surface\completion_queue.h" />
     <ClInclude Include="..\..\src\core\surface\event_string.h" />
+    <ClInclude Include="..\..\src\core\surface\init.h" />
     <ClInclude Include="..\..\src\core\surface\lame_client.h" />
     <ClInclude Include="..\..\src\core\surface\server.h" />
     <ClInclude Include="..\..\src\core\surface\surface_trace.h" />
@@ -223,6 +224,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\security\server_secure_chttp2.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\init_secure.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\surface\secure_channel_create.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\surface\secure_server_create.c">
@@ -381,6 +384,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\surface\server_create.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\surface_trace.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\alpn.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\bin_encoder.c">
diff --git a/vsprojects/vs2013/grpc_shared.vcxproj.filters b/vsprojects/vs2013/grpc_shared.vcxproj.filters
index 867e545..9fc70e7 100644
--- a/vsprojects/vs2013/grpc_shared.vcxproj.filters
+++ b/vsprojects/vs2013/grpc_shared.vcxproj.filters
@@ -49,6 +49,9 @@
     <ClCompile Include="..\..\src\core\security\server_secure_chttp2.c">
       <Filter>src\core\security</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\init_secure.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\surface\secure_channel_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
@@ -286,6 +289,9 @@
     <ClCompile Include="..\..\src\core\surface\server_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\surface_trace.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\alpn.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -590,6 +596,9 @@
     <ClInclude Include="..\..\src\core\surface\event_string.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\surface\init.h">
+      <Filter>src\core\surface</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\surface\lame_client.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj b/vsprojects/vs2013/grpc_unsecure.vcxproj
index 0c81ec4..9181db0 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj
@@ -145,6 +145,7 @@
     <ClInclude Include="..\..\src\core\surface\client.h" />
     <ClInclude Include="..\..\src\core\surface\completion_queue.h" />
     <ClInclude Include="..\..\src\core\surface\event_string.h" />
+    <ClInclude Include="..\..\src\core\surface\init.h" />
     <ClInclude Include="..\..\src\core\surface\lame_client.h" />
     <ClInclude Include="..\..\src\core\surface\server.h" />
     <ClInclude Include="..\..\src\core\surface\surface_trace.h" />
@@ -172,6 +173,8 @@
     <ClInclude Include="..\..\src\core\transport\transport_impl.h" />
   </ItemGroup>
   <ItemGroup>
+    <ClCompile Include="..\..\src\core\surface\init_unsecure.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\channel\call_op_string.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\channel\census_filter.c">
@@ -320,6 +323,8 @@
     </ClCompile>
     <ClCompile Include="..\..\src\core\surface\server_create.c">
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\surface_trace.c">
+    </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\alpn.c">
     </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\bin_encoder.c">
diff --git a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
index 4b5370a..4583fa4 100644
--- a/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vs2013/grpc_unsecure.vcxproj.filters
@@ -1,6 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
+    <ClCompile Include="..\..\src\core\surface\init_unsecure.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\channel\call_op_string.c">
       <Filter>src\core\channel</Filter>
     </ClCompile>
@@ -223,6 +226,9 @@
     <ClCompile Include="..\..\src\core\surface\server_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\src\core\surface\surface_trace.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\src\core\transport\chttp2\alpn.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -482,6 +488,9 @@
     <ClInclude Include="..\..\src\core\surface\event_string.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\src\core\surface\init.h">
+      <Filter>src\core\surface</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\src\core\surface\lame_client.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>