diff --git a/.rspec b/.rspec
new file mode 100755
index 0000000000000000000000000000000000000000..b94d663c9acfaed8a1aec0d26e69cde457f4f44b
--- /dev/null
+++ b/.rspec
@@ -0,0 +1,6 @@
+-Isrc/ruby
+-Isrc/ruby/pb
+--backtrace
+--require spec/spec_helper
+--format documentation
+--color
diff --git a/BUILD b/BUILD
index f8fbc70e5ac8ab2782b08665f23ae3f18e9d2e23..51b57e02e7c1bed75381d514e0cb0c9ed213deae 100644
--- a/BUILD
+++ b/BUILD
@@ -393,6 +393,7 @@ cc_library(
     "src/core/surface/server.c",
     "src/core/surface/server_chttp2.c",
     "src/core/surface/server_create.c",
+    "src/core/surface/validate_metadata.c",
     "src/core/surface/version.c",
     "src/core/transport/byte_stream.c",
     "src/core/transport/chttp2/alpn.c",
@@ -675,6 +676,7 @@ cc_library(
     "src/core/surface/server.c",
     "src/core/surface/server_chttp2.c",
     "src/core/surface/server_create.c",
+    "src/core/surface/validate_metadata.c",
     "src/core/surface/version.c",
     "src/core/transport/byte_stream.c",
     "src/core/transport/chttp2/alpn.c",
@@ -991,8 +993,8 @@ cc_library(
     ".",
   ],
   deps = [
-    ":gpr",
     ":grpc",
+    ":gpr",
   ],
 )
 
@@ -1214,6 +1216,7 @@ objc_library(
     "src/core/surface/server.c",
     "src/core/surface/server_chttp2.c",
     "src/core/surface/server_create.c",
+    "src/core/surface/validate_metadata.c",
     "src/core/surface/version.c",
     "src/core/transport/byte_stream.c",
     "src/core/transport/chttp2/alpn.c",
diff --git a/src/ruby/Gemfile b/Gemfile
similarity index 100%
rename from src/ruby/Gemfile
rename to Gemfile
diff --git a/Makefile b/Makefile
index cb7f02d00080e054a0f88ec8b18331bf7af3138d..34cacb77c83a2cbb482d2cacdd4e3c2733b1238f 100644
--- a/Makefile
+++ b/Makefile
@@ -147,9 +147,9 @@ CC_tsan = clang
 CXX_tsan = clang++
 LD_tsan = clang
 LDXX_tsan = clang++
-CFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE
-CXXFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE
-LDFLAGS_tsan = -fsanitize=thread -pie
+CFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie
+CXXFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie
+LDFLAGS_tsan = -fsanitize=thread -fPIE -pie -Wl,-Ttext-segment=0x7e0000000000
 DEFINES_tsan = NDEBUG GRPC_TEST_SLOWDOWN_BUILD_FACTOR=10
 
 VALID_CONFIG_asan = 1
@@ -169,9 +169,9 @@ CC_msan = clang
 CXX_msan = clang++-libc++
 LD_msan = clang
 LDXX_msan = clang++-libc++
-CFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE
-CXXFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE
-LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -pie
+CFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie
+CXXFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie
+LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie -Wl,-Ttext-segment=0x7e0000000000
 DEFINES_msan = NDEBUG GRPC_TEST_SLOWDOWN_BUILD_FACTOR=4
 
 VALID_CONFIG_ubsan = 1
@@ -2443,6 +2443,7 @@ LIBGRPC_SRC = \
     src/core/surface/server.c \
     src/core/surface/server_chttp2.c \
     src/core/surface/server_create.c \
+    src/core/surface/validate_metadata.c \
     src/core/surface/version.c \
     src/core/transport/byte_stream.c \
     src/core/transport/chttp2/alpn.c \
@@ -2750,6 +2751,7 @@ LIBGRPC_UNSECURE_SRC = \
     src/core/surface/server.c \
     src/core/surface/server_chttp2.c \
     src/core/surface/server_create.c \
+    src/core/surface/validate_metadata.c \
     src/core/surface/version.c \
     src/core/transport/byte_stream.c \
     src/core/transport/chttp2/alpn.c \
@@ -3727,18 +3729,18 @@ endif
 
 
 ifeq ($(SYSTEM),MINGW32)
-$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/gpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/grpc.$(SHARED_EXT) $(OPENSSL_DEP)
+$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext-imp.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) -lgpr-imp -lgrpc-imp
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,--output-def=$(LIBDIR)/$(CONFIG)/grpc_csharp_ext.def -Wl,--out-implib=$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext-imp.a -o $(LIBDIR)/$(CONFIG)/grpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
 else
-$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgpr.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc.$(SHARED_EXT) $(OPENSSL_DEP)
+$(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT): $(LIBGRPC_CSHARP_EXT_OBJS)  $(ZLIB_DEP) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(OPENSSL_DEP)
 	$(E) "[LD]      Linking $@"
 	$(Q) mkdir -p `dirname $@`
 ifeq ($(SYSTEM),Darwin)
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name libgrpc_csharp_ext.$(SHARED_EXT) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) -lgpr -lgrpc
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name libgrpc_csharp_ext.$(SHARED_EXT) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
 else
-	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(ZLIB_MERGE_LIBS) -lgpr -lgrpc
+	$(Q) $(LD) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc_csharp_ext.so.0 -o $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.$(SHARED_EXT) $(LIBGRPC_CSHARP_EXT_OBJS) $(LDLIBS) $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(ZLIB_MERGE_LIBS)
 	$(Q) ln -sf libgrpc_csharp_ext.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.so.0
 	$(Q) ln -sf libgrpc_csharp_ext.$(SHARED_EXT) $(LIBDIR)/$(CONFIG)/libgrpc_csharp_ext.so
 endif
diff --git a/src/ruby/Rakefile b/Rakefile
similarity index 66%
rename from src/ruby/Rakefile
rename to Rakefile
index cc7832b12d2e26e8c3dd23de637b2a4a6ec0b800..079df6799628d9f1d8147480c8e10c038822f3d0 100755
--- a/src/ruby/Rakefile
+++ b/Rakefile
@@ -5,23 +5,28 @@ require 'rubocop/rake_task'
 require 'bundler/gem_tasks'
 
 # Add rubocop style checking tasks
-RuboCop::RakeTask.new
+RuboCop::RakeTask.new(:rubocop) do |task|
+  task.options = ['-c', 'src/ruby/.rubocop.yml']
+  task.patterns = ['src/ruby/{lib,spec}/**/*.rb']
+end
 
 # Add the extension compiler task
 Rake::ExtensionTask.new 'grpc' do |ext|
-  ext.lib_dir = File.join('lib', 'grpc')
+  ext.source_pattern = '**/*.{c,h}'
+  ext.ext_dir = File.join('src', 'ruby', 'ext', 'grpc')
+  ext.lib_dir = File.join('src', 'ruby', 'lib', 'grpc')
 end
 
 # Define the test suites
 SPEC_SUITES = [
-  { id: :wrapper, title: 'wrapper layer', files: %w(spec/*.rb) },
-  { id: :idiomatic, title: 'idiomatic layer', dir: %w(spec/generic),
+  { id: :wrapper, title: 'wrapper layer', files: %w(src/ruby/spec/*.rb) },
+  { id: :idiomatic, title: 'idiomatic layer', dir: %w(src/ruby/spec/generic),
     tags: ['~bidi', '~server'] },
-  { id: :bidi, title: 'bidi tests', dir: %w(spec/generic),
+  { id: :bidi, title: 'bidi tests', dir: %w(src/ruby/spec/generic),
     tag: 'bidi' },
-  { id: :server, title: 'rpc server thread tests', dir: %w(spec/generic),
+  { id: :server, title: 'rpc server thread tests', dir: %w(src/ruby/spec/generic),
     tag: 'server' },
-  { id: :pb, title: 'protobuf service tests', dir: %w(spec/pb) }
+  { id: :pb, title: 'protobuf service tests', dir: %w(src/ruby/spec/pb) }
 ]
 namespace :suite do
   SPEC_SUITES.each do |suite|
@@ -34,7 +39,7 @@ namespace :suite do
       if suite[:dir]
         suite[:dir].each { |f| spec_files += Dir["#{f}/**/*_spec.rb"] }
       end
-      helper = 'spec/spec_helper.rb'
+      helper = 'src/ruby/spec/spec_helper.rb'
       spec_files << helper unless spec_files.include?(helper)
 
       t.pattern = spec_files
diff --git a/binding.gyp b/binding.gyp
index ad747803997f09571a4bd0785330af81a232fc1b..dab5cfe6fe9f7042489645ef5222de357be896cf 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -281,6 +281,7 @@
         'src/core/surface/server.c',
         'src/core/surface/server_chttp2.c',
         'src/core/surface/server_create.c',
+        'src/core/surface/validate_metadata.c',
         'src/core/surface/version.c',
         'src/core/transport/byte_stream.c',
         'src/core/transport/chttp2/alpn.c',
diff --git a/build.yaml b/build.yaml
index 8710003c05b4f0895b6f84988bcf4913b6c71840..056a0c86e78e65676724194f7b95bba7392cd82d 100644
--- a/build.yaml
+++ b/build.yaml
@@ -320,6 +320,7 @@ filegroups:
   - src/core/surface/server.c
   - src/core/surface/server_chttp2.c
   - src/core/surface/server_create.c
+  - src/core/surface/validate_metadata.c
   - src/core/surface/version.c
   - src/core/transport/byte_stream.c
   - src/core/transport/chttp2/alpn.c
@@ -813,8 +814,9 @@ libs:
   src:
   - src/csharp/ext/grpc_csharp_ext.c
   deps:
-  - gpr
   - grpc
+  - gpr
+  deps_linkage: static
   dll: only
   vs_config_type: DynamicLibrary
   vs_packages:
@@ -2473,7 +2475,8 @@ vspackages:
   props: false
   redist: true
   version: 1.2.8.10
-- name: grpc.dependencies.openssl
+- linkage: static
+  name: grpc.dependencies.openssl
   props: true
   redist: true
   version: 1.0.204.1
diff --git a/gRPC.podspec b/gRPC.podspec
index 2b67128d58b44ee41274f540b537987a9110d334..2ffa529ee5fa9dc8d7db3519928b3d5f88973274 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -404,6 +404,7 @@ Pod::Spec.new do |s|
                       'src/core/surface/server.c',
                       'src/core/surface/server_chttp2.c',
                       'src/core/surface/server_create.c',
+                      'src/core/surface/validate_metadata.c',
                       'src/core/surface/version.c',
                       'src/core/transport/byte_stream.c',
                       'src/core/transport/chttp2/alpn.c',
diff --git a/grpc.gemspec b/grpc.gemspec
new file mode 100755
index 0000000000000000000000000000000000000000..4f3a3f2dd91b037e37424477a1d7b8018c35e772
--- /dev/null
+++ b/grpc.gemspec
@@ -0,0 +1,416 @@
+# -*- ruby -*-
+# encoding: utf-8
+$LOAD_PATH.push File.expand_path('../src/ruby/lib', __FILE__)
+require 'grpc/version'
+
+Gem::Specification.new do |s|
+  s.name          = 'grpc'
+  s.version       = GRPC::VERSION
+  s.authors       = ['gRPC Authors']
+  s.email         = 'temiola@google.com'
+  s.homepage      = 'https://github.com/google/grpc/tree/master/src/ruby'
+  s.summary       = 'GRPC system in Ruby'
+  s.description   = 'Send RPCs from Ruby using GRPC'
+  s.license       = 'BSD-3-Clause'
+
+  s.required_ruby_version = '>= 2.0.0'
+  s.requirements << 'libgrpc ~> 0.11.0 needs to be installed'
+
+  s.files = %w( Rakefile Makefile )
+  s.files += %w( etc/roots.pem )
+  s.files += Dir.glob('src/ruby/bin/**/*')
+  s.files += Dir.glob('src/ruby/ext/**/*')
+  s.files += Dir.glob('src/ruby/lib/**/*')
+  s.files += Dir.glob('src/ruby/pb/**/*')
+  s.files += Dir.glob('include/grpc/**/*')
+  s.test_files = Dir.glob('src/ruby/spec/**/*')
+  s.bindir = 'src/ruby/bin'
+  %w(math noproto).each do |b|
+    s.executables += ["#{b}_client.rb", "#{b}_server.rb"]
+  end
+  s.executables += %w(grpc_ruby_interop_client grpc_ruby_interop_server)
+  s.require_paths = %w( src/ruby/bin src/ruby/lib src/ruby/pb )
+  s.platform      = Gem::Platform::RUBY
+
+  s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1'
+  s.add_dependency 'googleauth', '~> 0.5.1'
+
+  s.add_development_dependency 'bundler', '~> 1.9'
+  s.add_development_dependency 'logging', '~> 2.0'
+  s.add_development_dependency 'simplecov', '~> 0.9'
+  s.add_development_dependency 'rake', '~> 10.4'
+  s.add_development_dependency 'rake-compiler', '~> 0.9'
+  s.add_development_dependency 'rspec', '~> 3.2'
+  s.add_development_dependency 'rubocop', '~> 0.30.0'
+  s.add_development_dependency 'signet', '~>0.7.0'
+
+  s.extensions = %w(src/ruby/ext/grpc/extconf.rb)
+
+  s.files += %w( include/grpc/support/alloc.h )
+  s.files += %w( include/grpc/support/atm.h )
+  s.files += %w( include/grpc/support/atm_gcc_atomic.h )
+  s.files += %w( include/grpc/support/atm_gcc_sync.h )
+  s.files += %w( include/grpc/support/atm_win32.h )
+  s.files += %w( include/grpc/support/avl.h )
+  s.files += %w( include/grpc/support/cmdline.h )
+  s.files += %w( include/grpc/support/cpu.h )
+  s.files += %w( include/grpc/support/histogram.h )
+  s.files += %w( include/grpc/support/host_port.h )
+  s.files += %w( include/grpc/support/log.h )
+  s.files += %w( include/grpc/support/log_win32.h )
+  s.files += %w( include/grpc/support/port_platform.h )
+  s.files += %w( include/grpc/support/slice.h )
+  s.files += %w( include/grpc/support/slice_buffer.h )
+  s.files += %w( include/grpc/support/string_util.h )
+  s.files += %w( include/grpc/support/subprocess.h )
+  s.files += %w( include/grpc/support/sync.h )
+  s.files += %w( include/grpc/support/sync_generic.h )
+  s.files += %w( include/grpc/support/sync_posix.h )
+  s.files += %w( include/grpc/support/sync_win32.h )
+  s.files += %w( include/grpc/support/thd.h )
+  s.files += %w( include/grpc/support/time.h )
+  s.files += %w( include/grpc/support/tls.h )
+  s.files += %w( include/grpc/support/tls_gcc.h )
+  s.files += %w( include/grpc/support/tls_msvc.h )
+  s.files += %w( include/grpc/support/tls_pthread.h )
+  s.files += %w( include/grpc/support/useful.h )
+  s.files += %w( src/core/profiling/timers.h )
+  s.files += %w( src/core/support/block_annotate.h )
+  s.files += %w( src/core/support/env.h )
+  s.files += %w( src/core/support/file.h )
+  s.files += %w( src/core/support/murmur_hash.h )
+  s.files += %w( src/core/support/stack_lockfree.h )
+  s.files += %w( src/core/support/string.h )
+  s.files += %w( src/core/support/string_win32.h )
+  s.files += %w( src/core/support/thd_internal.h )
+  s.files += %w( src/core/support/time_precise.h )
+  s.files += %w( src/core/profiling/basic_timers.c )
+  s.files += %w( src/core/profiling/stap_timers.c )
+  s.files += %w( src/core/support/alloc.c )
+  s.files += %w( src/core/support/avl.c )
+  s.files += %w( src/core/support/cmdline.c )
+  s.files += %w( src/core/support/cpu_iphone.c )
+  s.files += %w( src/core/support/cpu_linux.c )
+  s.files += %w( src/core/support/cpu_posix.c )
+  s.files += %w( src/core/support/cpu_windows.c )
+  s.files += %w( src/core/support/env_linux.c )
+  s.files += %w( src/core/support/env_posix.c )
+  s.files += %w( src/core/support/env_win32.c )
+  s.files += %w( src/core/support/file.c )
+  s.files += %w( src/core/support/file_posix.c )
+  s.files += %w( src/core/support/file_win32.c )
+  s.files += %w( src/core/support/histogram.c )
+  s.files += %w( src/core/support/host_port.c )
+  s.files += %w( src/core/support/log.c )
+  s.files += %w( src/core/support/log_android.c )
+  s.files += %w( src/core/support/log_linux.c )
+  s.files += %w( src/core/support/log_posix.c )
+  s.files += %w( src/core/support/log_win32.c )
+  s.files += %w( src/core/support/murmur_hash.c )
+  s.files += %w( src/core/support/slice.c )
+  s.files += %w( src/core/support/slice_buffer.c )
+  s.files += %w( src/core/support/stack_lockfree.c )
+  s.files += %w( src/core/support/string.c )
+  s.files += %w( src/core/support/string_posix.c )
+  s.files += %w( src/core/support/string_win32.c )
+  s.files += %w( src/core/support/subprocess_posix.c )
+  s.files += %w( src/core/support/sync.c )
+  s.files += %w( src/core/support/sync_posix.c )
+  s.files += %w( src/core/support/sync_win32.c )
+  s.files += %w( src/core/support/thd.c )
+  s.files += %w( src/core/support/thd_posix.c )
+  s.files += %w( src/core/support/thd_win32.c )
+  s.files += %w( src/core/support/time.c )
+  s.files += %w( src/core/support/time_posix.c )
+  s.files += %w( src/core/support/time_precise.c )
+  s.files += %w( src/core/support/time_win32.c )
+  s.files += %w( src/core/support/tls_pthread.c )
+  s.files += %w( include/grpc/grpc_security.h )
+  s.files += %w( include/grpc/byte_buffer.h )
+  s.files += %w( include/grpc/byte_buffer_reader.h )
+  s.files += %w( include/grpc/compression.h )
+  s.files += %w( include/grpc/grpc.h )
+  s.files += %w( include/grpc/status.h )
+  s.files += %w( include/grpc/census.h )
+  s.files += %w( src/core/security/auth_filters.h )
+  s.files += %w( src/core/security/base64.h )
+  s.files += %w( src/core/security/credentials.h )
+  s.files += %w( src/core/security/handshake.h )
+  s.files += %w( src/core/security/json_token.h )
+  s.files += %w( src/core/security/jwt_verifier.h )
+  s.files += %w( src/core/security/secure_endpoint.h )
+  s.files += %w( src/core/security/security_connector.h )
+  s.files += %w( src/core/security/security_context.h )
+  s.files += %w( src/core/tsi/fake_transport_security.h )
+  s.files += %w( src/core/tsi/ssl_transport_security.h )
+  s.files += %w( src/core/tsi/ssl_types.h )
+  s.files += %w( src/core/tsi/transport_security.h )
+  s.files += %w( src/core/tsi/transport_security_interface.h )
+  s.files += %w( src/core/census/grpc_filter.h )
+  s.files += %w( src/core/channel/channel_args.h )
+  s.files += %w( src/core/channel/channel_stack.h )
+  s.files += %w( src/core/channel/client_channel.h )
+  s.files += %w( src/core/channel/client_uchannel.h )
+  s.files += %w( src/core/channel/compress_filter.h )
+  s.files += %w( src/core/channel/connected_channel.h )
+  s.files += %w( src/core/channel/context.h )
+  s.files += %w( src/core/channel/http_client_filter.h )
+  s.files += %w( src/core/channel/http_server_filter.h )
+  s.files += %w( src/core/channel/subchannel_call_holder.h )
+  s.files += %w( src/core/client_config/client_config.h )
+  s.files += %w( src/core/client_config/connector.h )
+  s.files += %w( src/core/client_config/initial_connect_string.h )
+  s.files += %w( src/core/client_config/lb_policies/pick_first.h )
+  s.files += %w( src/core/client_config/lb_policies/round_robin.h )
+  s.files += %w( src/core/client_config/lb_policy.h )
+  s.files += %w( src/core/client_config/lb_policy_factory.h )
+  s.files += %w( src/core/client_config/lb_policy_registry.h )
+  s.files += %w( src/core/client_config/resolver.h )
+  s.files += %w( src/core/client_config/resolver_factory.h )
+  s.files += %w( src/core/client_config/resolver_registry.h )
+  s.files += %w( src/core/client_config/resolvers/dns_resolver.h )
+  s.files += %w( src/core/client_config/resolvers/sockaddr_resolver.h )
+  s.files += %w( src/core/client_config/subchannel.h )
+  s.files += %w( src/core/client_config/subchannel_factory.h )
+  s.files += %w( src/core/client_config/uri_parser.h )
+  s.files += %w( src/core/compression/algorithm_metadata.h )
+  s.files += %w( src/core/compression/message_compress.h )
+  s.files += %w( src/core/debug/trace.h )
+  s.files += %w( src/core/httpcli/format_request.h )
+  s.files += %w( src/core/httpcli/httpcli.h )
+  s.files += %w( src/core/httpcli/parser.h )
+  s.files += %w( src/core/iomgr/closure.h )
+  s.files += %w( src/core/iomgr/endpoint.h )
+  s.files += %w( src/core/iomgr/endpoint_pair.h )
+  s.files += %w( src/core/iomgr/exec_ctx.h )
+  s.files += %w( src/core/iomgr/executor.h )
+  s.files += %w( src/core/iomgr/fd_posix.h )
+  s.files += %w( src/core/iomgr/iocp_windows.h )
+  s.files += %w( src/core/iomgr/iomgr.h )
+  s.files += %w( src/core/iomgr/iomgr_internal.h )
+  s.files += %w( src/core/iomgr/iomgr_posix.h )
+  s.files += %w( src/core/iomgr/pollset.h )
+  s.files += %w( src/core/iomgr/pollset_posix.h )
+  s.files += %w( src/core/iomgr/pollset_set.h )
+  s.files += %w( src/core/iomgr/pollset_set_posix.h )
+  s.files += %w( src/core/iomgr/pollset_set_windows.h )
+  s.files += %w( src/core/iomgr/pollset_windows.h )
+  s.files += %w( src/core/iomgr/resolve_address.h )
+  s.files += %w( src/core/iomgr/sockaddr.h )
+  s.files += %w( src/core/iomgr/sockaddr_posix.h )
+  s.files += %w( src/core/iomgr/sockaddr_utils.h )
+  s.files += %w( src/core/iomgr/sockaddr_win32.h )
+  s.files += %w( src/core/iomgr/socket_utils_posix.h )
+  s.files += %w( src/core/iomgr/socket_windows.h )
+  s.files += %w( src/core/iomgr/tcp_client.h )
+  s.files += %w( src/core/iomgr/tcp_posix.h )
+  s.files += %w( src/core/iomgr/tcp_server.h )
+  s.files += %w( src/core/iomgr/tcp_windows.h )
+  s.files += %w( src/core/iomgr/time_averaged_stats.h )
+  s.files += %w( src/core/iomgr/timer.h )
+  s.files += %w( src/core/iomgr/timer_heap.h )
+  s.files += %w( src/core/iomgr/timer_internal.h )
+  s.files += %w( src/core/iomgr/udp_server.h )
+  s.files += %w( src/core/iomgr/wakeup_fd_pipe.h )
+  s.files += %w( src/core/iomgr/wakeup_fd_posix.h )
+  s.files += %w( src/core/iomgr/workqueue.h )
+  s.files += %w( src/core/iomgr/workqueue_posix.h )
+  s.files += %w( src/core/iomgr/workqueue_windows.h )
+  s.files += %w( src/core/json/json.h )
+  s.files += %w( src/core/json/json_common.h )
+  s.files += %w( src/core/json/json_reader.h )
+  s.files += %w( src/core/json/json_writer.h )
+  s.files += %w( src/core/statistics/census_interface.h )
+  s.files += %w( src/core/statistics/census_rpc_stats.h )
+  s.files += %w( src/core/surface/api_trace.h )
+  s.files += %w( src/core/surface/call.h )
+  s.files += %w( src/core/surface/call_test_only.h )
+  s.files += %w( src/core/surface/channel.h )
+  s.files += %w( src/core/surface/completion_queue.h )
+  s.files += %w( src/core/surface/event_string.h )
+  s.files += %w( src/core/surface/init.h )
+  s.files += %w( src/core/surface/server.h )
+  s.files += %w( src/core/surface/surface_trace.h )
+  s.files += %w( src/core/transport/byte_stream.h )
+  s.files += %w( src/core/transport/chttp2/alpn.h )
+  s.files += %w( src/core/transport/chttp2/bin_encoder.h )
+  s.files += %w( src/core/transport/chttp2/frame.h )
+  s.files += %w( src/core/transport/chttp2/frame_data.h )
+  s.files += %w( src/core/transport/chttp2/frame_goaway.h )
+  s.files += %w( src/core/transport/chttp2/frame_ping.h )
+  s.files += %w( src/core/transport/chttp2/frame_rst_stream.h )
+  s.files += %w( src/core/transport/chttp2/frame_settings.h )
+  s.files += %w( src/core/transport/chttp2/frame_window_update.h )
+  s.files += %w( src/core/transport/chttp2/hpack_encoder.h )
+  s.files += %w( src/core/transport/chttp2/hpack_parser.h )
+  s.files += %w( src/core/transport/chttp2/hpack_table.h )
+  s.files += %w( src/core/transport/chttp2/http2_errors.h )
+  s.files += %w( src/core/transport/chttp2/huffsyms.h )
+  s.files += %w( src/core/transport/chttp2/incoming_metadata.h )
+  s.files += %w( src/core/transport/chttp2/internal.h )
+  s.files += %w( src/core/transport/chttp2/status_conversion.h )
+  s.files += %w( src/core/transport/chttp2/stream_map.h )
+  s.files += %w( src/core/transport/chttp2/timeout_encoding.h )
+  s.files += %w( src/core/transport/chttp2/varint.h )
+  s.files += %w( src/core/transport/chttp2_transport.h )
+  s.files += %w( src/core/transport/connectivity_state.h )
+  s.files += %w( src/core/transport/metadata.h )
+  s.files += %w( src/core/transport/metadata_batch.h )
+  s.files += %w( src/core/transport/static_metadata.h )
+  s.files += %w( src/core/transport/transport.h )
+  s.files += %w( src/core/transport/transport_impl.h )
+  s.files += %w( src/core/census/aggregation.h )
+  s.files += %w( src/core/census/context.h )
+  s.files += %w( src/core/census/rpc_metric_id.h )
+  s.files += %w( src/core/httpcli/httpcli_security_connector.c )
+  s.files += %w( src/core/security/base64.c )
+  s.files += %w( src/core/security/client_auth_filter.c )
+  s.files += %w( src/core/security/credentials.c )
+  s.files += %w( src/core/security/credentials_metadata.c )
+  s.files += %w( src/core/security/credentials_posix.c )
+  s.files += %w( src/core/security/credentials_win32.c )
+  s.files += %w( src/core/security/google_default_credentials.c )
+  s.files += %w( src/core/security/handshake.c )
+  s.files += %w( src/core/security/json_token.c )
+  s.files += %w( src/core/security/jwt_verifier.c )
+  s.files += %w( src/core/security/secure_endpoint.c )
+  s.files += %w( src/core/security/security_connector.c )
+  s.files += %w( src/core/security/security_context.c )
+  s.files += %w( src/core/security/server_auth_filter.c )
+  s.files += %w( src/core/security/server_secure_chttp2.c )
+  s.files += %w( src/core/surface/init_secure.c )
+  s.files += %w( src/core/surface/secure_channel_create.c )
+  s.files += %w( src/core/tsi/fake_transport_security.c )
+  s.files += %w( src/core/tsi/ssl_transport_security.c )
+  s.files += %w( src/core/tsi/transport_security.c )
+  s.files += %w( src/core/census/grpc_context.c )
+  s.files += %w( src/core/census/grpc_filter.c )
+  s.files += %w( src/core/channel/channel_args.c )
+  s.files += %w( src/core/channel/channel_stack.c )
+  s.files += %w( src/core/channel/client_channel.c )
+  s.files += %w( src/core/channel/client_uchannel.c )
+  s.files += %w( src/core/channel/compress_filter.c )
+  s.files += %w( src/core/channel/connected_channel.c )
+  s.files += %w( src/core/channel/http_client_filter.c )
+  s.files += %w( src/core/channel/http_server_filter.c )
+  s.files += %w( src/core/channel/subchannel_call_holder.c )
+  s.files += %w( src/core/client_config/client_config.c )
+  s.files += %w( src/core/client_config/connector.c )
+  s.files += %w( src/core/client_config/default_initial_connect_string.c )
+  s.files += %w( src/core/client_config/initial_connect_string.c )
+  s.files += %w( src/core/client_config/lb_policies/pick_first.c )
+  s.files += %w( src/core/client_config/lb_policies/round_robin.c )
+  s.files += %w( src/core/client_config/lb_policy.c )
+  s.files += %w( src/core/client_config/lb_policy_factory.c )
+  s.files += %w( src/core/client_config/lb_policy_registry.c )
+  s.files += %w( src/core/client_config/resolver.c )
+  s.files += %w( src/core/client_config/resolver_factory.c )
+  s.files += %w( src/core/client_config/resolver_registry.c )
+  s.files += %w( src/core/client_config/resolvers/dns_resolver.c )
+  s.files += %w( src/core/client_config/resolvers/sockaddr_resolver.c )
+  s.files += %w( src/core/client_config/subchannel.c )
+  s.files += %w( src/core/client_config/subchannel_factory.c )
+  s.files += %w( src/core/client_config/uri_parser.c )
+  s.files += %w( src/core/compression/algorithm.c )
+  s.files += %w( src/core/compression/message_compress.c )
+  s.files += %w( src/core/debug/trace.c )
+  s.files += %w( src/core/httpcli/format_request.c )
+  s.files += %w( src/core/httpcli/httpcli.c )
+  s.files += %w( src/core/httpcli/parser.c )
+  s.files += %w( src/core/iomgr/closure.c )
+  s.files += %w( src/core/iomgr/endpoint.c )
+  s.files += %w( src/core/iomgr/endpoint_pair_posix.c )
+  s.files += %w( src/core/iomgr/endpoint_pair_windows.c )
+  s.files += %w( src/core/iomgr/exec_ctx.c )
+  s.files += %w( src/core/iomgr/executor.c )
+  s.files += %w( src/core/iomgr/fd_posix.c )
+  s.files += %w( src/core/iomgr/iocp_windows.c )
+  s.files += %w( src/core/iomgr/iomgr.c )
+  s.files += %w( src/core/iomgr/iomgr_posix.c )
+  s.files += %w( src/core/iomgr/iomgr_windows.c )
+  s.files += %w( src/core/iomgr/pollset_multipoller_with_epoll.c )
+  s.files += %w( src/core/iomgr/pollset_multipoller_with_poll_posix.c )
+  s.files += %w( src/core/iomgr/pollset_posix.c )
+  s.files += %w( src/core/iomgr/pollset_set_posix.c )
+  s.files += %w( src/core/iomgr/pollset_set_windows.c )
+  s.files += %w( src/core/iomgr/pollset_windows.c )
+  s.files += %w( src/core/iomgr/resolve_address_posix.c )
+  s.files += %w( src/core/iomgr/resolve_address_windows.c )
+  s.files += %w( src/core/iomgr/sockaddr_utils.c )
+  s.files += %w( src/core/iomgr/socket_utils_common_posix.c )
+  s.files += %w( src/core/iomgr/socket_utils_linux.c )
+  s.files += %w( src/core/iomgr/socket_utils_posix.c )
+  s.files += %w( src/core/iomgr/socket_windows.c )
+  s.files += %w( src/core/iomgr/tcp_client_posix.c )
+  s.files += %w( src/core/iomgr/tcp_client_windows.c )
+  s.files += %w( src/core/iomgr/tcp_posix.c )
+  s.files += %w( src/core/iomgr/tcp_server_posix.c )
+  s.files += %w( src/core/iomgr/tcp_server_windows.c )
+  s.files += %w( src/core/iomgr/tcp_windows.c )
+  s.files += %w( src/core/iomgr/time_averaged_stats.c )
+  s.files += %w( src/core/iomgr/timer.c )
+  s.files += %w( src/core/iomgr/timer_heap.c )
+  s.files += %w( src/core/iomgr/udp_server.c )
+  s.files += %w( src/core/iomgr/wakeup_fd_eventfd.c )
+  s.files += %w( src/core/iomgr/wakeup_fd_nospecial.c )
+  s.files += %w( src/core/iomgr/wakeup_fd_pipe.c )
+  s.files += %w( src/core/iomgr/wakeup_fd_posix.c )
+  s.files += %w( src/core/iomgr/workqueue_posix.c )
+  s.files += %w( src/core/iomgr/workqueue_windows.c )
+  s.files += %w( src/core/json/json.c )
+  s.files += %w( src/core/json/json_reader.c )
+  s.files += %w( src/core/json/json_string.c )
+  s.files += %w( src/core/json/json_writer.c )
+  s.files += %w( src/core/surface/api_trace.c )
+  s.files += %w( src/core/surface/byte_buffer.c )
+  s.files += %w( src/core/surface/byte_buffer_reader.c )
+  s.files += %w( src/core/surface/call.c )
+  s.files += %w( src/core/surface/call_details.c )
+  s.files += %w( src/core/surface/call_log_batch.c )
+  s.files += %w( src/core/surface/channel.c )
+  s.files += %w( src/core/surface/channel_connectivity.c )
+  s.files += %w( src/core/surface/channel_create.c )
+  s.files += %w( src/core/surface/channel_ping.c )
+  s.files += %w( src/core/surface/completion_queue.c )
+  s.files += %w( src/core/surface/event_string.c )
+  s.files += %w( src/core/surface/init.c )
+  s.files += %w( src/core/surface/lame_client.c )
+  s.files += %w( src/core/surface/metadata_array.c )
+  s.files += %w( src/core/surface/server.c )
+  s.files += %w( src/core/surface/server_chttp2.c )
+  s.files += %w( src/core/surface/server_create.c )
+  s.files += %w( src/core/surface/validate_metadata.c )
+  s.files += %w( src/core/surface/version.c )
+  s.files += %w( src/core/transport/byte_stream.c )
+  s.files += %w( src/core/transport/chttp2/alpn.c )
+  s.files += %w( src/core/transport/chttp2/bin_encoder.c )
+  s.files += %w( src/core/transport/chttp2/frame_data.c )
+  s.files += %w( src/core/transport/chttp2/frame_goaway.c )
+  s.files += %w( src/core/transport/chttp2/frame_ping.c )
+  s.files += %w( src/core/transport/chttp2/frame_rst_stream.c )
+  s.files += %w( src/core/transport/chttp2/frame_settings.c )
+  s.files += %w( src/core/transport/chttp2/frame_window_update.c )
+  s.files += %w( src/core/transport/chttp2/hpack_encoder.c )
+  s.files += %w( src/core/transport/chttp2/hpack_parser.c )
+  s.files += %w( src/core/transport/chttp2/hpack_table.c )
+  s.files += %w( src/core/transport/chttp2/huffsyms.c )
+  s.files += %w( src/core/transport/chttp2/incoming_metadata.c )
+  s.files += %w( src/core/transport/chttp2/parsing.c )
+  s.files += %w( src/core/transport/chttp2/status_conversion.c )
+  s.files += %w( src/core/transport/chttp2/stream_lists.c )
+  s.files += %w( src/core/transport/chttp2/stream_map.c )
+  s.files += %w( src/core/transport/chttp2/timeout_encoding.c )
+  s.files += %w( src/core/transport/chttp2/varint.c )
+  s.files += %w( src/core/transport/chttp2/writing.c )
+  s.files += %w( src/core/transport/chttp2_transport.c )
+  s.files += %w( src/core/transport/connectivity_state.c )
+  s.files += %w( src/core/transport/metadata.c )
+  s.files += %w( src/core/transport/metadata_batch.c )
+  s.files += %w( src/core/transport/static_metadata.c )
+  s.files += %w( src/core/transport/transport.c )
+  s.files += %w( src/core/transport/transport_op_string.c )
+  s.files += %w( src/core/census/context.c )
+  s.files += %w( src/core/census/initialize.c )
+  s.files += %w( src/core/census/operation.c )
+  s.files += %w( src/core/census/tracing.c )
+end
diff --git a/include/grpc++/client_context.h b/include/grpc++/client_context.h
index a0d5c0e3c41757867c9a282e389b5cfe1cf0f524..25eeb3876fcb5181cc5ce9025e8819a2f42781cb 100644
--- a/include/grpc++/client_context.h
+++ b/include/grpc++/client_context.h
@@ -244,7 +244,7 @@ class ClientContext {
   /// client’s identity, role, or whether it is authorized to make a particular
   /// call.
   ///
-  /// \see  https://github.com/grpc/grpc/blob/master/doc/grpc-auth-support.md
+  /// \see  http://www.grpc.io/docs/guides/auth.html
   void set_credentials(const std::shared_ptr<CallCredentials>& creds) {
     creds_ = creds;
   }
diff --git a/include/grpc++/generic/async_generic_service.h b/include/grpc++/generic/async_generic_service.h
index 33045b8d85921a3734a909c5a4fecd08bd98880b..57a2696b3b4ace735fb0351e1df2c205dac6fd10 100644
--- a/include/grpc++/generic/async_generic_service.h
+++ b/include/grpc++/generic/async_generic_service.h
@@ -76,4 +76,4 @@ class AsyncGenericService GRPC_FINAL {
 
 }  // namespace grpc
 
-#endif  // GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
\ No newline at end of file
+#endif  // GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
diff --git a/include/grpc++/security/credentials.h b/include/grpc++/security/credentials.h
index a06dcf14ea564f09d81502d735f9684a708c1cc4..75945fd8e81e122f9192970e37172dfb9b873314 100644
--- a/include/grpc++/security/credentials.h
+++ b/include/grpc++/security/credentials.h
@@ -55,7 +55,7 @@ class SecureCallCredentials;
 /// It can make various assertions, e.g., about the client’s identity, role
 /// for all the calls on that channel.
 ///
-/// \see https://github.com/grpc/grpc/blob/master/doc/grpc-auth-support.md
+/// \see http://www.grpc.io/docs/guides/auth.html
 class ChannelCredentials : public GrpcLibrary {
  public:
   ~ChannelCredentials() GRPC_OVERRIDE;
diff --git a/include/grpc++/support/byte_buffer.h b/include/grpc++/support/byte_buffer.h
index 84042cbef80e58a214a8889b44ec5fba2fe5da23..82591a88ef2f4dd3cab659ac5a0cba3d71bcd2a6 100644
--- a/include/grpc++/support/byte_buffer.h
+++ b/include/grpc++/support/byte_buffer.h
@@ -107,4 +107,4 @@ class SerializationTraits<ByteBuffer, void> {
 
 }  // namespace grpc
 
-#endif  // GRPCXX_SUPPORT_BYTE_BUFFER_H
\ No newline at end of file
+#endif  // GRPCXX_SUPPORT_BYTE_BUFFER_H
diff --git a/include/grpc++/support/slice.h b/include/grpc++/support/slice.h
index 30325ef90bf59952e8dc3f278eceef35c3170ff7..724691a0333994f4d5d11119ae80e25cd0325cab 100644
--- a/include/grpc++/support/slice.h
+++ b/include/grpc++/support/slice.h
@@ -85,4 +85,4 @@ class Slice GRPC_FINAL {
 
 }  // namespace grpc
 
-#endif  // GRPCXX_SUPPORT_SLICE_H
\ No newline at end of file
+#endif  // GRPCXX_SUPPORT_SLICE_H
diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h
index be4c4d2b176a8700cdb5199bda2eedc1a75b6abb..952e86ea49d2904852e74d9ea9320c69ee5997e7 100644
--- a/include/grpc/grpc.h
+++ b/include/grpc/grpc.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -715,6 +715,16 @@ void grpc_server_destroy(grpc_server *server);
     thread-safety issues raised by it should not be of concern. */
 int grpc_tracer_set_enabled(const char *name, int enabled);
 
+/** Check whether a metadata key is legal (will be accepted by core) */
+int grpc_header_key_is_legal(const char *key, size_t length);
+
+/** Check whether a non-binary metadata value is legal (will be accepted by
+    core) */
+int grpc_header_nonbin_value_is_legal(const char *value, size_t length);
+
+/** Check whether a metadata key corresponds to a binary value */
+int grpc_is_binary_header(const char *key, size_t length);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/package.json b/package.json
index f39dfc4c7cc9e9b1700803fd2c9edec23c302aeb..e0bbb7d80ffe9c61583d911cde733e4b7e0c3c1d 100644
--- a/package.json
+++ b/package.json
@@ -31,13 +31,13 @@
     "protobufjs": "^4.0.0"
   },
   "devDependencies": {
-    "async": "^0.9.0",
+    "async": "^1.5.0",
     "google-auth-library": "^0.9.2",
     "istanbul": "^0.3.21",
     "jsdoc": "^3.3.2",
     "jshint": "^2.5.0",
     "minimist": "^1.1.0",
-    "mocha": "~1.21.0",
+    "mocha": "^2.3.4",
     "mocha-jenkins-reporter": "^0.1.9",
     "mustache": "^2.0.0",
     "poisson-process": "^0.2.1"
@@ -48,14 +48,401 @@
   "files": [
     "LICENSE",
     "src/node/README.md",
-    "src/node/index.js",
-    "src/node/ext",
     "src/node/health_check",
-    "src/node/src",
-    "src/core",
-    "test/proto",
-    "include",
+    "src/proto",
     "etc",
+    "src/node/ext/byte_buffer.h",
+    "src/node/ext/call.h",
+    "src/node/ext/call_credentials.h",
+    "src/node/ext/channel.h",
+    "src/node/ext/channel_credentials.h",
+    "src/node/ext/completion_queue_async_worker.h",
+    "src/node/ext/server.h",
+    "src/node/ext/server_credentials.h",
+    "src/node/ext/timeval.h",
+    "src/node/ext/byte_buffer.cc",
+    "src/node/ext/call.cc",
+    "src/node/ext/call_credentials.cc",
+    "src/node/ext/channel.cc",
+    "src/node/ext/channel_credentials.cc",
+    "src/node/ext/completion_queue_async_worker.cc",
+    "src/node/ext/node_grpc.cc",
+    "src/node/ext/server.cc",
+    "src/node/ext/server_credentials.cc",
+    "src/node/ext/timeval.cc",
+    "src/node/index.js",
+    "src/node/src/client.js",
+    "src/node/src/common.js",
+    "src/node/src/credentials.js",
+    "src/node/src/metadata.js",
+    "src/node/src/server.js",
+    "include/grpc/grpc_security.h",
+    "include/grpc/byte_buffer.h",
+    "include/grpc/byte_buffer_reader.h",
+    "include/grpc/compression.h",
+    "include/grpc/grpc.h",
+    "include/grpc/status.h",
+    "include/grpc/census.h",
+    "src/core/security/auth_filters.h",
+    "src/core/security/base64.h",
+    "src/core/security/credentials.h",
+    "src/core/security/handshake.h",
+    "src/core/security/json_token.h",
+    "src/core/security/jwt_verifier.h",
+    "src/core/security/secure_endpoint.h",
+    "src/core/security/security_connector.h",
+    "src/core/security/security_context.h",
+    "src/core/tsi/fake_transport_security.h",
+    "src/core/tsi/ssl_transport_security.h",
+    "src/core/tsi/ssl_types.h",
+    "src/core/tsi/transport_security.h",
+    "src/core/tsi/transport_security_interface.h",
+    "src/core/census/grpc_filter.h",
+    "src/core/channel/channel_args.h",
+    "src/core/channel/channel_stack.h",
+    "src/core/channel/client_channel.h",
+    "src/core/channel/client_uchannel.h",
+    "src/core/channel/compress_filter.h",
+    "src/core/channel/connected_channel.h",
+    "src/core/channel/context.h",
+    "src/core/channel/http_client_filter.h",
+    "src/core/channel/http_server_filter.h",
+    "src/core/channel/subchannel_call_holder.h",
+    "src/core/client_config/client_config.h",
+    "src/core/client_config/connector.h",
+    "src/core/client_config/initial_connect_string.h",
+    "src/core/client_config/lb_policies/pick_first.h",
+    "src/core/client_config/lb_policies/round_robin.h",
+    "src/core/client_config/lb_policy.h",
+    "src/core/client_config/lb_policy_factory.h",
+    "src/core/client_config/lb_policy_registry.h",
+    "src/core/client_config/resolver.h",
+    "src/core/client_config/resolver_factory.h",
+    "src/core/client_config/resolver_registry.h",
+    "src/core/client_config/resolvers/dns_resolver.h",
+    "src/core/client_config/resolvers/sockaddr_resolver.h",
+    "src/core/client_config/subchannel.h",
+    "src/core/client_config/subchannel_factory.h",
+    "src/core/client_config/uri_parser.h",
+    "src/core/compression/algorithm_metadata.h",
+    "src/core/compression/message_compress.h",
+    "src/core/debug/trace.h",
+    "src/core/httpcli/format_request.h",
+    "src/core/httpcli/httpcli.h",
+    "src/core/httpcli/parser.h",
+    "src/core/iomgr/closure.h",
+    "src/core/iomgr/endpoint.h",
+    "src/core/iomgr/endpoint_pair.h",
+    "src/core/iomgr/exec_ctx.h",
+    "src/core/iomgr/executor.h",
+    "src/core/iomgr/fd_posix.h",
+    "src/core/iomgr/iocp_windows.h",
+    "src/core/iomgr/iomgr.h",
+    "src/core/iomgr/iomgr_internal.h",
+    "src/core/iomgr/iomgr_posix.h",
+    "src/core/iomgr/pollset.h",
+    "src/core/iomgr/pollset_posix.h",
+    "src/core/iomgr/pollset_set.h",
+    "src/core/iomgr/pollset_set_posix.h",
+    "src/core/iomgr/pollset_set_windows.h",
+    "src/core/iomgr/pollset_windows.h",
+    "src/core/iomgr/resolve_address.h",
+    "src/core/iomgr/sockaddr.h",
+    "src/core/iomgr/sockaddr_posix.h",
+    "src/core/iomgr/sockaddr_utils.h",
+    "src/core/iomgr/sockaddr_win32.h",
+    "src/core/iomgr/socket_utils_posix.h",
+    "src/core/iomgr/socket_windows.h",
+    "src/core/iomgr/tcp_client.h",
+    "src/core/iomgr/tcp_posix.h",
+    "src/core/iomgr/tcp_server.h",
+    "src/core/iomgr/tcp_windows.h",
+    "src/core/iomgr/time_averaged_stats.h",
+    "src/core/iomgr/timer.h",
+    "src/core/iomgr/timer_heap.h",
+    "src/core/iomgr/timer_internal.h",
+    "src/core/iomgr/udp_server.h",
+    "src/core/iomgr/wakeup_fd_pipe.h",
+    "src/core/iomgr/wakeup_fd_posix.h",
+    "src/core/iomgr/workqueue.h",
+    "src/core/iomgr/workqueue_posix.h",
+    "src/core/iomgr/workqueue_windows.h",
+    "src/core/json/json.h",
+    "src/core/json/json_common.h",
+    "src/core/json/json_reader.h",
+    "src/core/json/json_writer.h",
+    "src/core/statistics/census_interface.h",
+    "src/core/statistics/census_rpc_stats.h",
+    "src/core/surface/api_trace.h",
+    "src/core/surface/call.h",
+    "src/core/surface/call_test_only.h",
+    "src/core/surface/channel.h",
+    "src/core/surface/completion_queue.h",
+    "src/core/surface/event_string.h",
+    "src/core/surface/init.h",
+    "src/core/surface/server.h",
+    "src/core/surface/surface_trace.h",
+    "src/core/transport/byte_stream.h",
+    "src/core/transport/chttp2/alpn.h",
+    "src/core/transport/chttp2/bin_encoder.h",
+    "src/core/transport/chttp2/frame.h",
+    "src/core/transport/chttp2/frame_data.h",
+    "src/core/transport/chttp2/frame_goaway.h",
+    "src/core/transport/chttp2/frame_ping.h",
+    "src/core/transport/chttp2/frame_rst_stream.h",
+    "src/core/transport/chttp2/frame_settings.h",
+    "src/core/transport/chttp2/frame_window_update.h",
+    "src/core/transport/chttp2/hpack_encoder.h",
+    "src/core/transport/chttp2/hpack_parser.h",
+    "src/core/transport/chttp2/hpack_table.h",
+    "src/core/transport/chttp2/http2_errors.h",
+    "src/core/transport/chttp2/huffsyms.h",
+    "src/core/transport/chttp2/incoming_metadata.h",
+    "src/core/transport/chttp2/internal.h",
+    "src/core/transport/chttp2/status_conversion.h",
+    "src/core/transport/chttp2/stream_map.h",
+    "src/core/transport/chttp2/timeout_encoding.h",
+    "src/core/transport/chttp2/varint.h",
+    "src/core/transport/chttp2_transport.h",
+    "src/core/transport/connectivity_state.h",
+    "src/core/transport/metadata.h",
+    "src/core/transport/metadata_batch.h",
+    "src/core/transport/static_metadata.h",
+    "src/core/transport/transport.h",
+    "src/core/transport/transport_impl.h",
+    "src/core/census/aggregation.h",
+    "src/core/census/context.h",
+    "src/core/census/rpc_metric_id.h",
+    "src/core/httpcli/httpcli_security_connector.c",
+    "src/core/security/base64.c",
+    "src/core/security/client_auth_filter.c",
+    "src/core/security/credentials.c",
+    "src/core/security/credentials_metadata.c",
+    "src/core/security/credentials_posix.c",
+    "src/core/security/credentials_win32.c",
+    "src/core/security/google_default_credentials.c",
+    "src/core/security/handshake.c",
+    "src/core/security/json_token.c",
+    "src/core/security/jwt_verifier.c",
+    "src/core/security/secure_endpoint.c",
+    "src/core/security/security_connector.c",
+    "src/core/security/security_context.c",
+    "src/core/security/server_auth_filter.c",
+    "src/core/security/server_secure_chttp2.c",
+    "src/core/surface/init_secure.c",
+    "src/core/surface/secure_channel_create.c",
+    "src/core/tsi/fake_transport_security.c",
+    "src/core/tsi/ssl_transport_security.c",
+    "src/core/tsi/transport_security.c",
+    "src/core/census/grpc_context.c",
+    "src/core/census/grpc_filter.c",
+    "src/core/channel/channel_args.c",
+    "src/core/channel/channel_stack.c",
+    "src/core/channel/client_channel.c",
+    "src/core/channel/client_uchannel.c",
+    "src/core/channel/compress_filter.c",
+    "src/core/channel/connected_channel.c",
+    "src/core/channel/http_client_filter.c",
+    "src/core/channel/http_server_filter.c",
+    "src/core/channel/subchannel_call_holder.c",
+    "src/core/client_config/client_config.c",
+    "src/core/client_config/connector.c",
+    "src/core/client_config/default_initial_connect_string.c",
+    "src/core/client_config/initial_connect_string.c",
+    "src/core/client_config/lb_policies/pick_first.c",
+    "src/core/client_config/lb_policies/round_robin.c",
+    "src/core/client_config/lb_policy.c",
+    "src/core/client_config/lb_policy_factory.c",
+    "src/core/client_config/lb_policy_registry.c",
+    "src/core/client_config/resolver.c",
+    "src/core/client_config/resolver_factory.c",
+    "src/core/client_config/resolver_registry.c",
+    "src/core/client_config/resolvers/dns_resolver.c",
+    "src/core/client_config/resolvers/sockaddr_resolver.c",
+    "src/core/client_config/subchannel.c",
+    "src/core/client_config/subchannel_factory.c",
+    "src/core/client_config/uri_parser.c",
+    "src/core/compression/algorithm.c",
+    "src/core/compression/message_compress.c",
+    "src/core/debug/trace.c",
+    "src/core/httpcli/format_request.c",
+    "src/core/httpcli/httpcli.c",
+    "src/core/httpcli/parser.c",
+    "src/core/iomgr/closure.c",
+    "src/core/iomgr/endpoint.c",
+    "src/core/iomgr/endpoint_pair_posix.c",
+    "src/core/iomgr/endpoint_pair_windows.c",
+    "src/core/iomgr/exec_ctx.c",
+    "src/core/iomgr/executor.c",
+    "src/core/iomgr/fd_posix.c",
+    "src/core/iomgr/iocp_windows.c",
+    "src/core/iomgr/iomgr.c",
+    "src/core/iomgr/iomgr_posix.c",
+    "src/core/iomgr/iomgr_windows.c",
+    "src/core/iomgr/pollset_multipoller_with_epoll.c",
+    "src/core/iomgr/pollset_multipoller_with_poll_posix.c",
+    "src/core/iomgr/pollset_posix.c",
+    "src/core/iomgr/pollset_set_posix.c",
+    "src/core/iomgr/pollset_set_windows.c",
+    "src/core/iomgr/pollset_windows.c",
+    "src/core/iomgr/resolve_address_posix.c",
+    "src/core/iomgr/resolve_address_windows.c",
+    "src/core/iomgr/sockaddr_utils.c",
+    "src/core/iomgr/socket_utils_common_posix.c",
+    "src/core/iomgr/socket_utils_linux.c",
+    "src/core/iomgr/socket_utils_posix.c",
+    "src/core/iomgr/socket_windows.c",
+    "src/core/iomgr/tcp_client_posix.c",
+    "src/core/iomgr/tcp_client_windows.c",
+    "src/core/iomgr/tcp_posix.c",
+    "src/core/iomgr/tcp_server_posix.c",
+    "src/core/iomgr/tcp_server_windows.c",
+    "src/core/iomgr/tcp_windows.c",
+    "src/core/iomgr/time_averaged_stats.c",
+    "src/core/iomgr/timer.c",
+    "src/core/iomgr/timer_heap.c",
+    "src/core/iomgr/udp_server.c",
+    "src/core/iomgr/wakeup_fd_eventfd.c",
+    "src/core/iomgr/wakeup_fd_nospecial.c",
+    "src/core/iomgr/wakeup_fd_pipe.c",
+    "src/core/iomgr/wakeup_fd_posix.c",
+    "src/core/iomgr/workqueue_posix.c",
+    "src/core/iomgr/workqueue_windows.c",
+    "src/core/json/json.c",
+    "src/core/json/json_reader.c",
+    "src/core/json/json_string.c",
+    "src/core/json/json_writer.c",
+    "src/core/surface/api_trace.c",
+    "src/core/surface/byte_buffer.c",
+    "src/core/surface/byte_buffer_reader.c",
+    "src/core/surface/call.c",
+    "src/core/surface/call_details.c",
+    "src/core/surface/call_log_batch.c",
+    "src/core/surface/channel.c",
+    "src/core/surface/channel_connectivity.c",
+    "src/core/surface/channel_create.c",
+    "src/core/surface/channel_ping.c",
+    "src/core/surface/completion_queue.c",
+    "src/core/surface/event_string.c",
+    "src/core/surface/init.c",
+    "src/core/surface/lame_client.c",
+    "src/core/surface/metadata_array.c",
+    "src/core/surface/server.c",
+    "src/core/surface/server_chttp2.c",
+    "src/core/surface/server_create.c",
+    "src/core/surface/validate_metadata.c",
+    "src/core/surface/version.c",
+    "src/core/transport/byte_stream.c",
+    "src/core/transport/chttp2/alpn.c",
+    "src/core/transport/chttp2/bin_encoder.c",
+    "src/core/transport/chttp2/frame_data.c",
+    "src/core/transport/chttp2/frame_goaway.c",
+    "src/core/transport/chttp2/frame_ping.c",
+    "src/core/transport/chttp2/frame_rst_stream.c",
+    "src/core/transport/chttp2/frame_settings.c",
+    "src/core/transport/chttp2/frame_window_update.c",
+    "src/core/transport/chttp2/hpack_encoder.c",
+    "src/core/transport/chttp2/hpack_parser.c",
+    "src/core/transport/chttp2/hpack_table.c",
+    "src/core/transport/chttp2/huffsyms.c",
+    "src/core/transport/chttp2/incoming_metadata.c",
+    "src/core/transport/chttp2/parsing.c",
+    "src/core/transport/chttp2/status_conversion.c",
+    "src/core/transport/chttp2/stream_lists.c",
+    "src/core/transport/chttp2/stream_map.c",
+    "src/core/transport/chttp2/timeout_encoding.c",
+    "src/core/transport/chttp2/varint.c",
+    "src/core/transport/chttp2/writing.c",
+    "src/core/transport/chttp2_transport.c",
+    "src/core/transport/connectivity_state.c",
+    "src/core/transport/metadata.c",
+    "src/core/transport/metadata_batch.c",
+    "src/core/transport/static_metadata.c",
+    "src/core/transport/transport.c",
+    "src/core/transport/transport_op_string.c",
+    "src/core/census/context.c",
+    "src/core/census/initialize.c",
+    "src/core/census/operation.c",
+    "src/core/census/tracing.c",
+    "include/grpc/support/alloc.h",
+    "include/grpc/support/atm.h",
+    "include/grpc/support/atm_gcc_atomic.h",
+    "include/grpc/support/atm_gcc_sync.h",
+    "include/grpc/support/atm_win32.h",
+    "include/grpc/support/avl.h",
+    "include/grpc/support/cmdline.h",
+    "include/grpc/support/cpu.h",
+    "include/grpc/support/histogram.h",
+    "include/grpc/support/host_port.h",
+    "include/grpc/support/log.h",
+    "include/grpc/support/log_win32.h",
+    "include/grpc/support/port_platform.h",
+    "include/grpc/support/slice.h",
+    "include/grpc/support/slice_buffer.h",
+    "include/grpc/support/string_util.h",
+    "include/grpc/support/subprocess.h",
+    "include/grpc/support/sync.h",
+    "include/grpc/support/sync_generic.h",
+    "include/grpc/support/sync_posix.h",
+    "include/grpc/support/sync_win32.h",
+    "include/grpc/support/thd.h",
+    "include/grpc/support/time.h",
+    "include/grpc/support/tls.h",
+    "include/grpc/support/tls_gcc.h",
+    "include/grpc/support/tls_msvc.h",
+    "include/grpc/support/tls_pthread.h",
+    "include/grpc/support/useful.h",
+    "src/core/profiling/timers.h",
+    "src/core/support/block_annotate.h",
+    "src/core/support/env.h",
+    "src/core/support/file.h",
+    "src/core/support/murmur_hash.h",
+    "src/core/support/stack_lockfree.h",
+    "src/core/support/string.h",
+    "src/core/support/string_win32.h",
+    "src/core/support/thd_internal.h",
+    "src/core/support/time_precise.h",
+    "src/core/profiling/basic_timers.c",
+    "src/core/profiling/stap_timers.c",
+    "src/core/support/alloc.c",
+    "src/core/support/avl.c",
+    "src/core/support/cmdline.c",
+    "src/core/support/cpu_iphone.c",
+    "src/core/support/cpu_linux.c",
+    "src/core/support/cpu_posix.c",
+    "src/core/support/cpu_windows.c",
+    "src/core/support/env_linux.c",
+    "src/core/support/env_posix.c",
+    "src/core/support/env_win32.c",
+    "src/core/support/file.c",
+    "src/core/support/file_posix.c",
+    "src/core/support/file_win32.c",
+    "src/core/support/histogram.c",
+    "src/core/support/host_port.c",
+    "src/core/support/log.c",
+    "src/core/support/log_android.c",
+    "src/core/support/log_linux.c",
+    "src/core/support/log_posix.c",
+    "src/core/support/log_win32.c",
+    "src/core/support/murmur_hash.c",
+    "src/core/support/slice.c",
+    "src/core/support/slice_buffer.c",
+    "src/core/support/stack_lockfree.c",
+    "src/core/support/string.c",
+    "src/core/support/string_posix.c",
+    "src/core/support/string_win32.c",
+    "src/core/support/subprocess_posix.c",
+    "src/core/support/sync.c",
+    "src/core/support/sync_posix.c",
+    "src/core/support/sync_win32.c",
+    "src/core/support/thd.c",
+    "src/core/support/thd_posix.c",
+    "src/core/support/thd_win32.c",
+    "src/core/support/time.c",
+    "src/core/support/time_posix.c",
+    "src/core/support/time_precise.c",
+    "src/core/support/time_win32.c",
+    "src/core/support/tls_pthread.c",
     "binding.gyp"
   ],
   "main": "src/node/index.js",
diff --git a/src/core/census/initialize.c b/src/core/census/initialize.c
index 8d60f790eb78813f75858e8e6ca772eaa7d5bea3..989708d42cd8a74fb15ba94ce4367114492a018b 100644
--- a/src/core/census/initialize.c
+++ b/src/core/census/initialize.c
@@ -39,12 +39,11 @@ int census_initialize(int features) {
   if (features_enabled != CENSUS_FEATURE_NONE) {
     return 1;
   }
-  if (features != CENSUS_FEATURE_NONE) {
+  if (features == CENSUS_FEATURE_NONE) {
     return 1;
-  } else {
-    features_enabled = features;
-    return 0;
   }
+  features_enabled = features;
+  return 0;
 }
 
 void census_shutdown(void) { features_enabled = CENSUS_FEATURE_NONE; }
diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index b1ba2afa8b4e3e4b85da145d27f3e30a6900cb64..880666bb386a567976e7bda0ffd5190ce32e7e22 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,6 +37,7 @@
 #include <string.h>
 
 #include <grpc/compression.h>
+#include <grpc/grpc.h>
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/string_util.h>
@@ -562,12 +563,16 @@ static int prepare_application_metadata(grpc_call *call, int count,
     GPR_ASSERT(sizeof(grpc_linked_mdelem) == sizeof(md->internal_data));
     l->md = grpc_mdelem_from_string_and_buffer(
         md->key, (const uint8_t *)md->value, md->value_length);
-    if (!grpc_mdstr_is_legal_header(l->md->key)) {
+    if (!grpc_header_key_is_legal(grpc_mdstr_as_c_string(l->md->key),
+                                  GRPC_MDSTR_LENGTH(l->md->key))) {
       gpr_log(GPR_ERROR, "attempt to send invalid metadata key: %s",
               grpc_mdstr_as_c_string(l->md->key));
       return 0;
-    } else if (!grpc_mdstr_is_bin_suffixed(l->md->key) &&
-               !grpc_mdstr_is_legal_nonbin_header(l->md->value)) {
+    } else if (!grpc_is_binary_header(grpc_mdstr_as_c_string(l->md->key),
+                                      GRPC_MDSTR_LENGTH(l->md->key)) &&
+               !grpc_header_nonbin_value_is_legal(
+                   grpc_mdstr_as_c_string(l->md->value),
+                   GRPC_MDSTR_LENGTH(l->md->value))) {
       gpr_log(GPR_ERROR, "attempt to send invalid metadata value");
       return 0;
     }
diff --git a/src/core/surface/validate_metadata.c b/src/core/surface/validate_metadata.c
new file mode 100644
index 0000000000000000000000000000000000000000..df2e80b4b78cdf35a401fd475bfd6f10ad182a77
--- /dev/null
+++ b/src/core/surface/validate_metadata.c
@@ -0,0 +1,73 @@
+/*
+ *
+ * Copyright 2016, 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 <stdlib.h>
+#include <string.h>
+
+#include <grpc/support/port_platform.h>
+
+static int conforms_to(const char *s, size_t len, const uint8_t *legal_bits) {
+  const char *p = s;
+  const char *e = s + len;
+  for (; p != e; p++) {
+    int idx = *p;
+    int byte = idx / 8;
+    int bit = idx % 8;
+    if ((legal_bits[byte] & (1 << bit)) == 0) return 0;
+  }
+  return 1;
+}
+
+int grpc_header_key_is_legal(const char *key, size_t length) {
+  static const uint8_t legal_header_bits[256 / 8] = {
+      0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff, 0x03, 0x00, 0x00, 0x00,
+      0x80, 0xfe, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+  if (length == 0) {
+    return 0;
+  }
+  return conforms_to(key, length, legal_header_bits);
+}
+
+int grpc_header_nonbin_value_is_legal(const char *value, size_t length) {
+  static const uint8_t legal_header_bits[256 / 8] = {
+      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+      0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+  return conforms_to(value, length, legal_header_bits);
+}
+
+int grpc_is_binary_header(const char *key, size_t length) {
+  if (length < 5) return 0;
+  return 0 == memcmp(key + length - 4, "-bin", 4);
+}
diff --git a/src/core/transport/chttp2/bin_encoder.c b/src/core/transport/chttp2/bin_encoder.c
index a6a8e3e03596c37a858c98ef329396fc6622a8c3..f26bc7e29b14727212872d8d4cb6527869bf25b4 100644
--- a/src/core/transport/chttp2/bin_encoder.c
+++ b/src/core/transport/chttp2/bin_encoder.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -283,8 +283,3 @@ gpr_slice grpc_chttp2_base64_encode_and_huffman_compress(gpr_slice input) {
   GPR_ASSERT(in == GPR_SLICE_END_PTR(input));
   return output;
 }
-
-int grpc_is_binary_header(const char *key, size_t length) {
-  if (length < 5) return 0;
-  return 0 == memcmp(key + length - 4, "-bin", 4);
-}
diff --git a/src/core/transport/chttp2/bin_encoder.h b/src/core/transport/chttp2/bin_encoder.h
index d3e5a855ddb05cef8380065deda028de8860d28d..036fddf9981e103297cc01ae5a7485051a5c2225 100644
--- a/src/core/transport/chttp2/bin_encoder.h
+++ b/src/core/transport/chttp2/bin_encoder.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -51,6 +51,4 @@ gpr_slice grpc_chttp2_huffman_compress(gpr_slice input);
    return y; */
 gpr_slice grpc_chttp2_base64_encode_and_huffman_compress(gpr_slice input);
 
-int grpc_is_binary_header(const char *key, size_t length);
-
 #endif /* GRPC_INTERNAL_CORE_TRANSPORT_CHTTP2_BIN_ENCODER_H */
diff --git a/src/core/transport/chttp2/hpack_encoder.c b/src/core/transport/chttp2/hpack_encoder.c
index d6a352afd58de9767f21d51b0d71afaf48168afd..89a80d896cd59ac47a9f4fde7c2e6df510eb2632 100644
--- a/src/core/transport/chttp2/hpack_encoder.c
+++ b/src/core/transport/chttp2/hpack_encoder.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,6 +36,11 @@
 #include <assert.h>
 #include <string.h>
 
+/* This is here for grpc_is_binary_header
+ * TODO(murgatroid99): Remove this
+ */
+#include <grpc/grpc.h>
+
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/useful.h>
diff --git a/src/core/transport/chttp2/hpack_parser.c b/src/core/transport/chttp2/hpack_parser.c
index 16395d6be165567cdeb8bbda1c68039401fd40e1..a63c7db1f6137114f86bca493179eb3339473f92 100644
--- a/src/core/transport/chttp2/hpack_parser.c
+++ b/src/core/transport/chttp2/hpack_parser.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,6 +38,11 @@
 #include <string.h>
 #include <assert.h>
 
+/* This is here for grpc_is_binary_header
+ * TODO(murgatroid99): Remove this
+ */
+#include <grpc/grpc.h>
+
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
 #include <grpc/support/port_platform.h>
diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c
index ada889983c28d11253e45ca51f581f566598daed..14912af7df1cafddded3581dac73f1ba57d74ed0 100644
--- a/src/core/transport/metadata.c
+++ b/src/core/transport/metadata.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -688,37 +688,3 @@ gpr_slice grpc_mdstr_as_base64_encoded_and_huffman_compressed(grpc_mdstr *gs) {
   gpr_mu_unlock(&shard->mu);
   return slice;
 }
-
-static int conforms_to(grpc_mdstr *s, const uint8_t *legal_bits) {
-  const uint8_t *p = GPR_SLICE_START_PTR(s->slice);
-  const uint8_t *e = GPR_SLICE_END_PTR(s->slice);
-  for (; p != e; p++) {
-    int idx = *p;
-    int byte = idx / 8;
-    int bit = idx % 8;
-    if ((legal_bits[byte] & (1 << bit)) == 0) return 0;
-  }
-  return 1;
-}
-
-int grpc_mdstr_is_legal_header(grpc_mdstr *s) {
-  static const uint8_t legal_header_bits[256 / 8] = {
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xff, 0x03, 0x00, 0x00, 0x00,
-      0x80, 0xfe, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-  return conforms_to(s, legal_header_bits);
-}
-
-int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s) {
-  static const uint8_t legal_header_bits[256 / 8] = {
-      0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-      0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-  return conforms_to(s, legal_header_bits);
-}
-
-int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s) {
-  /* TODO(ctiller): consider caching this */
-  return grpc_is_binary_header((const char *)GPR_SLICE_START_PTR(s->slice),
-                               GPR_SLICE_LENGTH(s->slice));
-}
diff --git a/src/core/transport/metadata.h b/src/core/transport/metadata.h
index a7c9fd6e84cf8e6613d882c61ba663226516318a..8742846be7e6250d7987b196bb7e4e2b500e6055 100644
--- a/src/core/transport/metadata.h
+++ b/src/core/transport/metadata.h
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -142,6 +142,8 @@ void grpc_mdelem_unref(grpc_mdelem *md);
    Does not promise that the returned string has no embedded nulls however. */
 const char *grpc_mdstr_as_c_string(grpc_mdstr *s);
 
+#define GRPC_MDSTR_LENGTH(s) (GPR_SLICE_LENGTH(s->slice))
+
 int grpc_mdstr_is_legal_header(grpc_mdstr *s);
 int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s);
 int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s);
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index 5b3da7c6c9948b4853a56e21e79333c882325344..852b2121143bb728e8b87e05373088d2a895a09a 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -8,7 +8,7 @@
     <RootNamespace>Grpc.Core</RootNamespace>
     <AssemblyName>Grpc.Core</AssemblyName>
     <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <NuGetPackageImportStamp>be3e9d03</NuGetPackageImportStamp>
+    <NuGetPackageImportStamp>c0512805</NuGetPackageImportStamp>
     <DocumentationFile>bin\$(Configuration)\Grpc.Core.Xml</DocumentationFile>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -19,6 +19,7 @@
     <DefineConstants>DEBUG;</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <NativeDependenciesConfiguration>Debug</NativeDependenciesConfiguration>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
@@ -26,6 +27,7 @@
     <OutputPath>bin\Release</OutputPath>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <NativeDependenciesConfiguration>Release</NativeDependenciesConfiguration>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseSigned|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
@@ -36,6 +38,7 @@
     <WarningLevel>4</WarningLevel>
     <SignAssembly>True</SignAssembly>
     <AssemblyOriginatorKeyFile>C:\keys\Grpc.snk</AssemblyOriginatorKeyFile>
+    <NativeDependenciesConfiguration>Release</NativeDependenciesConfiguration>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
@@ -133,7 +136,7 @@
          ignored, which gives us the desired effect. -->
     <When Condition=" '$(OS)' != 'Unix' ">
       <ItemGroup>
-        <Content Include="..\..\..\vsprojects\Debug\grpc_csharp_ext.dll">
+        <Content Include="..\..\..\vsprojects\$(NativeDependenciesConfiguration)\grpc_csharp_ext.dll">
           <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
         </Content>
       </ItemGroup>
@@ -142,15 +145,6 @@
   </Choose>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup />
-  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-    <PropertyGroup>
-      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
-    </PropertyGroup>
-    <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.openssl.redist.targets'))" />
-    <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.zlib.redist.targets'))" />
-  </Target>
-  <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.openssl.redist.targets')" />
-  <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\portable-net45+netcore45+wpa81+wp8\grpc.dependencies.zlib.redist.targets')" />
   <ItemGroup />
   <ItemGroup />
-</Project>
+</Project>
\ No newline at end of file
diff --git a/src/csharp/Grpc.Core/packages.config b/src/csharp/Grpc.Core/packages.config
index 89600744a76f3bd5f99aee7bcbad4a0405f375c7..86a48c512e6ace3cc8b94a1977ed210bd3d84871 100644
--- a/src/csharp/Grpc.Core/packages.config
+++ b/src/csharp/Grpc.Core/packages.config
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
-  <package id="grpc.dependencies.openssl.redist" version="1.0.204.1" targetFramework="net45" />
-  <package id="grpc.dependencies.zlib.redist" version="1.2.8.10" targetFramework="net45" />
   <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
 </packages>
\ No newline at end of file
diff --git a/src/csharp/buildall.bat b/src/csharp/buildall.bat
index d85896c255bcbc6e6aa6ef5e6921ca5fa38c0606..08d4bdb3355c0c062f469488b16dab98105acbc1 100644
--- a/src/csharp/buildall.bat
+++ b/src/csharp/buildall.bat
@@ -9,7 +9,8 @@ cd /d %~dp0
 @call "%VS120COMNTOOLS%\..\..\vc\vcvarsall.bat" x86
 
 @rem Build the C# native extension
-msbuild ..\..\vsprojects\grpc_csharp_ext.sln /p:PlatformToolset=v120 || goto :error
+msbuild ..\..\vsprojects\grpc_csharp_ext.sln /p:Configuration=Debug /p:PlatformToolset=v120 || goto :error
+msbuild ..\..\vsprojects\grpc_csharp_ext.sln /p:Configuration=Release /p:PlatformToolset=v120 || goto :error
 
 msbuild Grpc.sln /p:Configuration=Debug || goto :error
 msbuild Grpc.sln /p:Configuration=Release || goto :error
diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc
index c6e10bc1ffd5d88acc130eabde37d3dfa66ef905..da312886cea5beebc48fe8200c55206c7bd97d28 100644
--- a/src/node/ext/call.cc
+++ b/src/node/ext/call.cc
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -95,10 +95,6 @@ Local<Value> nanErrorWithCode(const char *msg, grpc_call_error code) {
   return scope.Escape(err);
 }
 
-bool EndsWith(const char *str, const char *substr) {
-  return strcmp(str+strlen(str)-strlen(substr), substr) == 0;
-}
-
 bool CreateMetadataArray(Local<Object> metadata, grpc_metadata_array *array,
                          shared_ptr<Resources> resources) {
   HandleScope scope;
@@ -126,7 +122,7 @@ bool CreateMetadataArray(Local<Object> metadata, grpc_metadata_array *array,
       grpc_metadata *current = &array->metadata[array->count];
       current->key = **utf8_key;
       // Only allow binary headers for "-bin" keys
-      if (EndsWith(current->key, "-bin")) {
+      if (grpc_is_binary_header(current->key, strlen(current->key))) {
         if (::node::Buffer::HasInstance(value)) {
           current->value = ::node::Buffer::Data(value);
           current->value_length = ::node::Buffer::Length(value);
@@ -180,7 +176,7 @@ Local<Value> ParseMetadata(const grpc_metadata_array *metadata_array) {
     } else {
       array = Local<Array>::Cast(maybe_array.ToLocalChecked());
     }
-    if (EndsWith(elem->key, "-bin")) {
+    if (grpc_is_binary_header(elem->key, strlen(elem->key))) {
       Nan::Set(array, index_map[elem->key],
                MakeFastBuffer(
                    Nan::CopyBuffer(elem->value,
diff --git a/src/node/ext/call_credentials.cc b/src/node/ext/call_credentials.cc
index 8cbfb1ebea0c934d8b10ff968e2b343102005ae3..91acb8625477dbee6b3b81d2a5e7cdcec592b080 100644
--- a/src/node/ext/call_credentials.cc
+++ b/src/node/ext/call_credentials.cc
@@ -32,6 +32,8 @@
  */
 
 #include <node.h>
+#include <nan.h>
+#include <uv.h>
 
 #include "grpc/grpc.h"
 #include "grpc/grpc_security.h"
diff --git a/src/node/ext/node_grpc.cc b/src/node/ext/node_grpc.cc
index 5b5f3c1c5b88321a79267ecf82450fa0ea34e852..a2b8e0d22bf12563cfe5c6428c1b54294a34b194 100644
--- a/src/node/ext/node_grpc.cc
+++ b/src/node/ext/node_grpc.cc
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -44,6 +44,7 @@
 #include "completion_queue_async_worker.h"
 #include "server_credentials.h"
 
+using v8::FunctionTemplate;
 using v8::Local;
 using v8::Value;
 using v8::Object;
@@ -230,6 +231,40 @@ void InitWriteFlags(Local<Object> exports) {
   Nan::Set(write_flags, Nan::New("NO_COMPRESS").ToLocalChecked(), NO_COMPRESS);
 }
 
+NAN_METHOD(MetadataKeyIsLegal) {
+  if (!info[0]->IsString()) {
+    return Nan::ThrowTypeError(
+        "headerKeyIsLegal's argument must be a string");
+  }
+  Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
+  char *key_str = *Nan::Utf8String(key);
+  info.GetReturnValue().Set(static_cast<bool>(
+      grpc_header_key_is_legal(key_str, static_cast<size_t>(key->Length()))));
+}
+
+NAN_METHOD(MetadataNonbinValueIsLegal) {
+  if (!info[0]->IsString()) {
+    return Nan::ThrowTypeError(
+        "metadataNonbinValueIsLegal's argument must be a string");
+  }
+  Local<String> value = Nan::To<String>(info[0]).ToLocalChecked();
+  char *value_str = *Nan::Utf8String(value);
+  info.GetReturnValue().Set(static_cast<bool>(
+      grpc_header_nonbin_value_is_legal(
+          value_str, static_cast<size_t>(value->Length()))));
+}
+
+NAN_METHOD(MetadataKeyIsBinary) {
+  if (!info[0]->IsString()) {
+    return Nan::ThrowTypeError(
+        "metadataKeyIsLegal's argument must be a string");
+  }
+  Local<String> key = Nan::To<String>(info[0]).ToLocalChecked();
+  char *key_str = *Nan::Utf8String(key);
+  info.GetReturnValue().Set(static_cast<bool>(
+      grpc_is_binary_header(key_str, static_cast<size_t>(key->Length()))));
+}
+
 void init(Local<Object> exports) {
   Nan::HandleScope scope;
   grpc_init();
@@ -247,6 +282,19 @@ void init(Local<Object> exports) {
   grpc::node::Server::Init(exports);
   grpc::node::CompletionQueueAsyncWorker::Init(exports);
   grpc::node::ServerCredentials::Init(exports);
+
+  // Attach a few utility functions directly to the module
+  Nan::Set(exports, Nan::New("metadataKeyIsLegal").ToLocalChecked(),
+           Nan::GetFunction(
+               Nan::New<FunctionTemplate>(MetadataKeyIsLegal)).ToLocalChecked());
+  Nan::Set(exports, Nan::New("metadataNonbinValueIsLegal").ToLocalChecked(),
+           Nan::GetFunction(
+               Nan::New<FunctionTemplate>(MetadataNonbinValueIsLegal)
+                            ).ToLocalChecked());
+  Nan::Set(exports, Nan::New("metadataKeyIsBinary").ToLocalChecked(),
+           Nan::GetFunction(
+               Nan::New<FunctionTemplate>(MetadataKeyIsBinary)
+                            ).ToLocalChecked());
 }
 
 NODE_MODULE(grpc_node, init)
diff --git a/src/node/ext/timeval.cc b/src/node/ext/timeval.cc
index bf68513c4879087609b749799d7413db159c6206..64015e8412e59a2bf9607ae47ee21b0af9e7c470 100644
--- a/src/node/ext/timeval.cc
+++ b/src/node/ext/timeval.cc
@@ -46,7 +46,7 @@ gpr_timespec MillisecondsToTimespec(double millis) {
   } else if (millis == -std::numeric_limits<double>::infinity()) {
     return gpr_inf_past(GPR_CLOCK_REALTIME);
   } else {
-    return gpr_time_from_micros(static_cast<int64_t>(millis * 1000),
+    return gpr_time_from_micros(static_cast<long>(millis * 1000),
                                 GPR_CLOCK_REALTIME);
   }
 }
diff --git a/src/node/interop/async_delay_queue.js b/src/node/interop/async_delay_queue.js
index 2bd3ca4da3f41e24eb7fc1ccff2cfaffb626834d..df57209637620d55e9362a58c196616bc3893ef8 100644
--- a/src/node/interop/async_delay_queue.js
+++ b/src/node/interop/async_delay_queue.js
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,8 +36,8 @@
 var _ = require('lodash');
 
 /**
- * This class represents a queue of callbacks that must happen sequentially, each
- * with a specific delay after the previous event.
+ * This class represents a queue of callbacks that must happen sequentially,
+ * each with a specific delay after the previous event.
  */
 function AsyncDelayQueue() {
   this.queue = [];
diff --git a/src/node/jsdoc_conf.json b/src/node/jsdoc_conf.json
index 876a8e19c6e0efc4615c0659651e264ec0b8910a..c3a0174f0e3f1424314cd9ef82c41ea1530dc035 100644
--- a/src/node/jsdoc_conf.json
+++ b/src/node/jsdoc_conf.json
@@ -3,13 +3,13 @@
     "allowUnknownTags": true
   },
   "source": {
-    "include": [ "index.js", "src" ],
-    "includePattern": ".+\\.js(doc)?$",
+    "include": [ "src/node/index.js", "src/node/src" ],
+    "includePattern": "src/node/.+\\.js(doc)?$",
     "excludePattern": "(^|\\/|\\\\)_"
   },
   "opts": {
     "package": "package.json",
-    "readme": "README.md"
+    "readme": "src/node/README.md"
   },
   "plugins": [],
   "templates": {
diff --git a/src/node/src/common.js b/src/node/src/common.js
index e4fe5a8e0358335305c7c3880f766089c456a499..2e6c01c4d744a16234796ae07f7beb46da8b4b9b 100644
--- a/src/node/src/common.js
+++ b/src/node/src/common.js
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -125,7 +125,7 @@ exports.getProtobufServiceAttrs = function getProtobufServiceAttrs(service) {
   var prefix = '/' + fullyQualifiedName(service) + '/';
   return _.object(_.map(service.children, function(method) {
     return [_.camelCase(method.name), {
-      path: prefix + _.capitalize(method.name),
+      path: prefix + method.name,
       requestStream: method.requestStream,
       responseStream: method.responseStream,
       requestSerialize: serializeCls(method.resolvedRequestType.build()),
diff --git a/src/node/src/metadata.js b/src/node/src/metadata.js
index 0a2f1489b6ead9db26642f983d69a2dec7083f6c..fef79f959e49323e6e5fad04f106324f21678c37 100644
--- a/src/node/src/metadata.js
+++ b/src/node/src/metadata.js
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -49,6 +49,8 @@
 
 var _ = require('lodash');
 
+var grpc = require('bindings')('grpc_node');
+
 /**
  * Class for storing metadata. Keys are normalized to lowercase ASCII.
  * @constructor
@@ -58,15 +60,16 @@ function Metadata() {
 }
 
 function normalizeKey(key) {
-  if (!(/^[A-Za-z\d_-]+$/.test(key))) {
-    throw new Error('Metadata keys must be nonempty strings containing only ' +
-        'alphanumeric characters and hyphens');
+  key = key.toLowerCase();
+  if (grpc.metadataKeyIsLegal(key)) {
+    return key;
+  } else {
+    throw new Error('Metadata key contains illegal characters');
   }
-  return key.toLowerCase();
 }
 
 function validate(key, value) {
-  if (_.endsWith(key, '-bin')) {
+  if (grpc.metadataKeyIsBinary(key)) {
     if (!(value instanceof Buffer)) {
       throw new Error('keys that end with \'-bin\' must have Buffer values');
     }
@@ -75,9 +78,8 @@ function validate(key, value) {
       throw new Error(
           'keys that don\'t end with \'-bin\' must have String values');
     }
-    if (!(/^[\x20-\x7E]*$/.test(value))) {
-      throw new Error('Metadata string values can only contain printable ' +
-          'ASCII characters and space');
+    if (!grpc.metadataNonbinValueIsLegal(value)) {
+      throw new Error('Metadata string value contains illegal characters');
     }
   }
 }
diff --git a/src/objective-c/GRPCClient/GRPCCall.h b/src/objective-c/GRPCClient/GRPCCall.h
index c9fda4285529294fa002ed43ef80af4d0f86f0b2..7a77ae60b6a99935395365bcfeb42c5f2755ad46 100644
--- a/src/objective-c/GRPCClient/GRPCCall.h
+++ b/src/objective-c/GRPCClient/GRPCCall.h
@@ -241,11 +241,11 @@ DEPRECATED_MSG_ATTRIBUTE("Use NSDictionary or NSMutableDictionary instead.")
 @protocol GRPCRequestHeaders <NSObject>
 @property(nonatomic, readonly) NSUInteger count;
 
-- (id)objectForKeyedSubscript:(NSString *)key;
-- (void)setObject:(id)obj forKeyedSubscript:(NSString *)key;
+- (id)objectForKeyedSubscript:(id)key;
+- (void)setObject:(id)obj forKeyedSubscript:(id)key;
 
 - (void)removeAllObjects;
-- (void)removeObjectForKey:(NSString *)key;
+- (void)removeObjectForKey:(id)key;
 @end
 
 #pragma clang diagnostic push
diff --git a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
index cfccdd453f78cba92885b33543f4a9d1e9686d4d..2f5716082bfb000f0a4d6191279baf86d22b84ed 100644
--- a/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
+++ b/src/objective-c/examples/SwiftSample/SwiftSample.xcodeproj/project.pbxproj
@@ -107,6 +107,7 @@
 				633BFFBF1B950B210007E424 /* Frameworks */,
 				633BFFC01B950B210007E424 /* Resources */,
 				AC2F6F9AB1C090BB0BEE6E4D /* Copy Pods Resources */,
+				A1738A987353B0BF2C64F0F7 /* Embed Pods Frameworks */,
 			);
 			buildRules = (
 			);
@@ -123,6 +124,7 @@
 		633BFFBA1B950B210007E424 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
+				LastSwiftUpdateCheck = 0710;
 				LastUpgradeCheck = 0640;
 				ORGANIZATIONNAME = gRPC;
 				TargetAttributes = {
@@ -177,6 +179,21 @@
 			shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n    cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n    exit 1\nfi\n";
 			showEnvVarsInLog = 0;
 		};
+		A1738A987353B0BF2C64F0F7 /* Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			name = "Embed Pods Frameworks";
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
 		AC2F6F9AB1C090BB0BEE6E4D /* Copy Pods Resources */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
@@ -310,7 +327,7 @@
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_OBJC_BRIDGING_HEADER = "Bridging-Header.h";
-				USER_HEADER_SEARCH_PATHS = "Pods/**";
+				USER_HEADER_SEARCH_PATHS = "";
 			};
 			name = Debug;
 		};
@@ -323,7 +340,7 @@
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_OBJC_BRIDGING_HEADER = "Bridging-Header.h";
-				USER_HEADER_SEARCH_PATHS = "Pods/**";
+				USER_HEADER_SEARCH_PATHS = "";
 			};
 			name = Release;
 		};
diff --git a/src/proto/gen_build_yaml.py b/src/proto/gen_build_yaml.py
index 4e959830ea362c6d9f681353961c41ea9f29715b..e243d0defc4b9f67201dd40b941e0399d3466455 100755
--- a/src/proto/gen_build_yaml.py
+++ b/src/proto/gen_build_yaml.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python2.7
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -36,21 +36,36 @@ import os
 import re
 import sys
 
+def update_deps(key, proto_filename, deps, is_trans, visited):
+  if not proto_filename in visited:
+    visited.append(proto_filename)
+    with open(proto_filename) as inp:
+      for line in inp:
+        imp = re.search(r'import "([^"]*)"', line)
+        if not imp: continue
+        imp_proto = imp.group(1)
+        if key not in deps: deps[key] = []
+        deps[key].append(imp_proto[:-6])
+        if is_trans:
+          update_deps(key, imp_proto, deps, is_trans, visited)
+
 def main():
+  proto_dir = os.path.abspath(os.path.dirname(sys.argv[0]))
+  os.chdir(os.path.join(proto_dir, '../..'))
+
   deps = {}
-  for root, dirs, files in os.walk(os.path.dirname(sys.argv[0])):
+  deps_trans = {}
+  for root, dirs, files in os.walk('src/proto'):
     for f in files:
       if f[-6:] != '.proto': continue
       look_at = os.path.join(root, f)
-      with open(look_at) as inp:
-        for line in inp:
-          imp = re.search(r'import "([^"]*)"', line)
-          if not imp: continue
-          if look_at[:-6] not in deps: deps[look_at[:-6]] = []
-          deps[look_at[:-6]].append(imp.group(1)[:-6])
+      deps_for = look_at[:-6]
+      update_deps(deps_for, look_at, deps, False, [])      # First level deps
+      update_deps(deps_for, look_at, deps_trans, True, []) # Transitive deps
 
   json = {
-    'proto_deps': deps
+    'proto_deps': deps,
+    'proto_transitive_deps': deps_trans
   }
 
   print yaml.dump(json)
diff --git a/src/proto/grpc/testing/duplicate/echo_duplicate.proto b/src/proto/grpc/testing/duplicate/echo_duplicate.proto
index 9978ca4ac0b6fef2b768acf91840ff0b34800af5..9d84de108e0366791b33c6b6bd396b1029a602d0 100644
--- a/src/proto/grpc/testing/duplicate/echo_duplicate.proto
+++ b/src/proto/grpc/testing/duplicate/echo_duplicate.proto
@@ -38,4 +38,4 @@ package grpc.testing.duplicate;
 
 service EchoTestService {
   rpc Echo(grpc.testing.EchoRequest) returns (grpc.testing.EchoResponse);
-}
\ No newline at end of file
+}
diff --git a/src/proto/grpc/testing/echo.proto b/src/proto/grpc/testing/echo.proto
index 47d4c26732f729cf7b62b24eb5ca7c712d2de670..06c3bafbad0937897ef11cfb8a245c768113d393 100644
--- a/src/proto/grpc/testing/echo.proto
+++ b/src/proto/grpc/testing/echo.proto
@@ -44,4 +44,4 @@ service EchoTestService {
 
 service UnimplementedService {
   rpc Unimplemented(EchoRequest) returns (EchoResponse);
-}
\ No newline at end of file
+}
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index 99cb1a979f5b5967091148e49bbdea5ddb81473e..7ea561f1d40c11f60eefdbf53068caef53e3ac87 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -190,6 +190,7 @@ CORE_SOURCE_FILES = [
   'src/core/surface/server.c',
   'src/core/surface/server_chttp2.c',
   'src/core/surface/server_create.c',
+  'src/core/surface/validate_metadata.c',
   'src/core/surface/version.c',
   'src/core/transport/byte_stream.c',
   'src/core/transport/chttp2/alpn.c',
diff --git a/src/ruby/.rspec b/src/ruby/.rspec
deleted file mode 100755
index efeee2c1d225a82e21cede9e8ff17f848721a862..0000000000000000000000000000000000000000
--- a/src/ruby/.rspec
+++ /dev/null
@@ -1,6 +0,0 @@
--I.
--Ipb
---backtrace
---require spec_helper
---format documentation
---color
diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb
index db9385e96150b332ee4546f90fac5b29294309c1..018353ce5d8053c8bf549150f5af5dcab3c72e89 100644
--- a/src/ruby/ext/grpc/extconf.rb
+++ b/src/ruby/ext/grpc/extconf.rb
@@ -54,53 +54,30 @@ LIB_DIRS = [
   LIBDIR
 ]
 
-def check_grpc_root
-  grpc_root = ENV['GRPC_ROOT']
-  if grpc_root.nil?
-    r = File.expand_path(File.join(File.dirname(__FILE__), '../../../..'))
-    grpc_root = r if File.exist?(File.join(r, 'include/grpc/grpc.h'))
-  end
-  grpc_root
-end
+fail 'libdl not found' unless have_library('dl', 'dlopen')
+fail 'zlib not found' unless have_library('z', 'inflate')
+
+grpc_root = File.expand_path(File.join(File.dirname(__FILE__), '../../../..'))
 
-grpc_pkg_config = system('pkg-config --exists grpc')
+grpc_config = ENV['GRPC_CONFIG'] || 'opt'
 
-if grpc_pkg_config
-  $CFLAGS << ' ' + `pkg-config --static --cflags grpc`.strip + ' '
-  $LDFLAGS << ' ' + `pkg-config --static --libs grpc`.strip + ' '
+if ENV.key?('GRPC_LIB_DIR')
+  grpc_lib_dir = File.join(grpc_root, ENV['GRPC_LIB_DIR'])
 else
-  dir_config('grpc', HEADER_DIRS, LIB_DIRS)
-  fail 'libdl not found' unless have_library('dl', 'dlopen')
-  fail 'zlib not found' unless have_library('z', 'inflate')
-  begin
-    fail 'Fail' unless have_library('gpr', 'gpr_now')
-    fail 'Fail' unless have_library('grpc', 'grpc_channel_destroy')
-  rescue
-    # Check to see if GRPC_ROOT is defined or available
-    grpc_root = check_grpc_root
-
-    # Stop if there is still no grpc_root
-    exit 1 if grpc_root.nil?
-
-    grpc_config = ENV['GRPC_CONFIG'] || 'opt'
-    if ENV.key?('GRPC_LIB_DIR')
-      grpc_lib_dir = File.join(grpc_root, ENV['GRPC_LIB_DIR'])
-    else
-      grpc_lib_dir = File.join(File.join(grpc_root, 'libs'), grpc_config)
-    end
-    unless File.exist?(File.join(grpc_lib_dir, 'libgrpc.a'))
-      print "Building internal gRPC\n"
-      system("make -C #{grpc_root} static_c CONFIG=#{grpc_config}")
-    end
-    $CFLAGS << ' -I' + File.join(grpc_root, 'include')
-    $LDFLAGS << ' -L' + grpc_lib_dir
-    if grpc_config == 'gcov'
-      $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage'
-      $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic'
-    end
-    raise 'gpr not found' unless have_library('gpr', 'gpr_now')
-    raise 'grpc not found' unless have_library('grpc', 'grpc_channel_destroy')
-  end
+  grpc_lib_dir = File.join(File.join(grpc_root, 'libs'), grpc_config)
+end
+
+unless File.exist?(File.join(grpc_lib_dir, 'libgrpc.a'))
+  print "Building internal gRPC\n"
+  system("make -C #{grpc_root} static_c CONFIG=#{grpc_config}")
+end
+
+$CFLAGS << ' -I' + File.join(grpc_root, 'include')
+$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a')
+$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgpr.a')
+if grpc_config == 'gcov'
+  $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage'
+  $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic'
 end
 
 $CFLAGS << ' -std=c99 '
@@ -109,4 +86,7 @@ $CFLAGS << ' -Wextra '
 $CFLAGS << ' -pedantic '
 $CFLAGS << ' -Werror '
 
+$LDFLAGS << ' -lssl '
+$LDFLAGS << ' -lcrypto '
+
 create_makefile('grpc/grpc')
diff --git a/src/ruby/ext/grpc/rb_call.c b/src/ruby/ext/grpc/rb_call.c
index 1647d9b484f8f0d5a1b85a6a954f8773e9c1c63a..43adafb73f9a9a0d7b81e2a99fc73c726c4424f7 100644
--- a/src/ruby/ext/grpc/rb_call.c
+++ b/src/ruby/ext/grpc/rb_call.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -310,33 +310,61 @@ static int grpc_rb_md_ary_fill_hash_cb(VALUE key, VALUE val, VALUE md_ary_obj) {
   grpc_metadata_array *md_ary = NULL;
   long array_length;
   long i;
+  char *key_str;
+  size_t key_len;
+  char *value_str;
+  size_t value_len;
+
+  if (TYPE(key) == T_SYMBOL) {
+    key_str = (char *)rb_id2name(SYM2ID(key));
+    key_len = strlen(key_str);
+  } else { /* StringValueCStr does all other type exclusions for us */
+    key_str = StringValueCStr(key);
+    key_len = RSTRING_LEN(key);
+  }
+
+  if (!grpc_header_key_is_legal(key_str, key_len)) {
+    rb_raise(rb_eArgError,
+             "'%s' is an invalid header key, must match [a-z0-9-_.]+",
+             key_str);
+    return ST_STOP;
+  }
 
   /* Construct a metadata object from key and value and add it */
   TypedData_Get_Struct(md_ary_obj, grpc_metadata_array,
                        &grpc_rb_md_ary_data_type, md_ary);
 
   if (TYPE(val) == T_ARRAY) {
-    /* If the value is an array, add capacity for each value in the array */
     array_length = RARRAY_LEN(val);
+    /* If the value is an array, add capacity for each value in the array */
     for (i = 0; i < array_length; i++) {
-      if (TYPE(key) == T_SYMBOL) {
-        md_ary->metadata[md_ary->count].key = (char *)rb_id2name(SYM2ID(key));
-      } else { /* StringValueCStr does all other type exclusions for us */
-        md_ary->metadata[md_ary->count].key = StringValueCStr(key);
+      value_str = RSTRING_PTR(rb_ary_entry(val, i));
+      value_len = RSTRING_LEN(rb_ary_entry(val, i));
+      if (!grpc_is_binary_header(key_str, key_len) &&
+          !grpc_header_nonbin_value_is_legal(value_str, value_len)) {
+        // The value has invalid characters
+        rb_raise(rb_eArgError,
+                 "Header value '%s' has invalid characters", value_str);
+        return ST_STOP;
       }
-      md_ary->metadata[md_ary->count].value = RSTRING_PTR(rb_ary_entry(val, i));
-      md_ary->metadata[md_ary->count].value_length =
-          RSTRING_LEN(rb_ary_entry(val, i));
+      md_ary->metadata[md_ary->count].key = key_str;
+      md_ary->metadata[md_ary->count].value = value_str;
+      md_ary->metadata[md_ary->count].value_length = value_len;
       md_ary->count += 1;
     }
   } else {
-    if (TYPE(key) == T_SYMBOL) {
-      md_ary->metadata[md_ary->count].key = (char *)rb_id2name(SYM2ID(key));
-    } else { /* StringValueCStr does all other type exclusions for us */
-      md_ary->metadata[md_ary->count].key = StringValueCStr(key);
+    value_str = RSTRING_PTR(val);
+    value_len = RSTRING_LEN(val);
+    if (!grpc_is_binary_header(key_str, key_len) &&
+        !grpc_header_nonbin_value_is_legal(value_str, value_len)) {
+      // The value has invalid characters
+      rb_raise(rb_eArgError,
+               "Header value '%s' has invalid characters", value_str);
+      return ST_STOP;
     }
-    md_ary->metadata[md_ary->count].value = RSTRING_PTR(val);
-    md_ary->metadata[md_ary->count].value_length = RSTRING_LEN(val);
+    md_ary->metadata[md_ary->count].key = key_str;
+    md_ary->metadata[md_ary->count].value = value_str;
+    md_ary->metadata[md_ary->count].value_length = value_len;
     md_ary->count += 1;
   }
 
diff --git a/src/ruby/ext/grpc/rb_call_credentials.c b/src/ruby/ext/grpc/rb_call_credentials.c
index acc547279907fbda17fe429b18d023dcc439fbdb..4d719d7541754a9c3c1d7a84ba523a1084748ba7 100644
--- a/src/ruby/ext/grpc/rb_call_credentials.c
+++ b/src/ruby/ext/grpc/rb_call_credentials.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,8 +38,10 @@
 
 #include <grpc/grpc.h>
 #include <grpc/grpc_security.h>
+#include <grpc/support/alloc.h>
 
 #include "rb_call.h"
+#include "rb_event_thread.h"
 #include "rb_grpc.h"
 
 /* grpc_rb_cCallCredentials is the ruby class that proxies
@@ -87,7 +89,7 @@ static VALUE grpc_rb_call_credentials_callback_rescue(VALUE args,
   return result;
 }
 
-static void *grpc_rb_call_credentials_callback_with_gil(void *param) {
+static void grpc_rb_call_credentials_callback_with_gil(void *param) {
   callback_params *const params = (callback_params *)param;
   VALUE auth_uri = rb_str_new_cstr(params->context.service_url);
   /* Pass the arguments to the proc in a hash, which currently only has they key
@@ -113,21 +115,20 @@ static void *grpc_rb_call_credentials_callback_with_gil(void *param) {
   params->callback(params->user_data, md_ary.metadata, md_ary.count, status,
                    error_details);
   grpc_metadata_array_destroy(&md_ary);
-
-  return NULL;
+  gpr_free(params);
 }
 
 static void grpc_rb_call_credentials_plugin_get_metadata(
     void *state, grpc_auth_metadata_context context,
     grpc_credentials_plugin_metadata_cb cb, void *user_data) {
-  callback_params params;
-  params.get_metadata = (VALUE)state;
-  params.context = context;
-  params.user_data = user_data;
-  params.callback = cb;
-
-  rb_thread_call_with_gvl(grpc_rb_call_credentials_callback_with_gil,
-                          (void*)(&params));
+  callback_params *params = gpr_malloc(sizeof(callback_params));
+  params->get_metadata = (VALUE)state;
+  params->context = context;
+  params->user_data = user_data;
+  params->callback = cb;
+
+  grpc_rb_event_queue_enqueue(grpc_rb_call_credentials_callback_with_gil,
+                              (void*)(params));
 }
 
 static void grpc_rb_call_credentials_plugin_destroy(void *state) {
@@ -300,6 +301,8 @@ void Init_grpc_call_credentials() {
                    grpc_rb_call_credentials_compose, -1);
 
   id_callback = rb_intern("__callback");
+
+  grpc_rb_event_queue_thread_start();
 }
 
 /* Gets the wrapped grpc_call_credentials from the ruby wrapper */
diff --git a/src/ruby/ext/grpc/rb_channel.c b/src/ruby/ext/grpc/rb_channel.c
index d5d82421f59188fd693474114354d6dee236f800..2fb8a5cdf006a21897a0b0faf5ae43b9d9a37b5c 100644
--- a/src/ruby/ext/grpc/rb_channel.c
+++ b/src/ruby/ext/grpc/rb_channel.c
@@ -59,6 +59,9 @@ static ID id_target;
  * GCed before the channel */
 static ID id_cqueue;
 
+/* id_insecure_channel is used to indicate that a channel is insecure */
+static VALUE id_insecure_channel;
+
 /* grpc_rb_cChannel is the ruby class that proxies grpc_channel. */
 static VALUE grpc_rb_cChannel = Qnil;
 
@@ -126,7 +129,8 @@ static VALUE grpc_rb_channel_alloc(VALUE cls) {
 
 /*
   call-seq:
-    insecure_channel = Channel:new("myhost:8080", {'arg1': 'value1'})
+    insecure_channel = Channel:new("myhost:8080", {'arg1': 'value1'},
+                                   :this_channel_is_insecure)
     creds = ...
     secure_channel = Channel:new("myhost:443", {'arg1': 'value1'}, creds)
 
@@ -142,13 +146,18 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) {
   grpc_channel_args args;
   MEMZERO(&args, grpc_channel_args, 1);
 
-  /* "21" == 2 mandatory args, 1 (credentials) is optional */
-  rb_scan_args(argc, argv, "21", &target, &channel_args, &credentials);
+  /* "3" == 3 mandatory args */
+  rb_scan_args(argc, argv, "3", &target, &channel_args, &credentials);
 
   TypedData_Get_Struct(self, grpc_rb_channel, &grpc_channel_data_type, wrapper);
   target_chars = StringValueCStr(target);
   grpc_rb_hash_convert_to_channel_args(channel_args, &args);
-  if (credentials == Qnil) {
+  if (TYPE(credentials) == T_SYMBOL) {
+    if (id_insecure_channel != SYM2ID(credentials)) {
+      rb_raise(rb_eTypeError,
+               "bad creds symbol, want :this_channel_is_insecure");
+      return Qnil;
+    }
     ch = grpc_insecure_channel_create(target_chars, &args, NULL);
   } else {
     creds = grpc_rb_get_wrapped_channel_credentials(credentials);
@@ -408,6 +417,7 @@ void Init_grpc_channel() {
                   ID2SYM(rb_intern(GRPC_ARG_MAX_CONCURRENT_STREAMS)));
   rb_define_const(grpc_rb_cChannel, "MAX_MESSAGE_LENGTH",
                   ID2SYM(rb_intern(GRPC_ARG_MAX_MESSAGE_LENGTH)));
+  id_insecure_channel = rb_intern("this_channel_is_insecure");
   Init_grpc_propagate_masks();
   Init_grpc_connectivity_states();
 }
diff --git a/src/ruby/ext/grpc/rb_event_thread.c b/src/ruby/ext/grpc/rb_event_thread.c
new file mode 100644
index 0000000000000000000000000000000000000000..95af091317ce6db0316ae6f29d4f657d4bbc61fe
--- /dev/null
+++ b/src/ruby/ext/grpc/rb_event_thread.c
@@ -0,0 +1,153 @@
+/*
+ *
+ * Copyright 2016, 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 "rb_event_thread.h"
+
+#include <stdbool.h>
+
+#include <ruby/ruby.h>
+#include <ruby/thread.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/time.h>
+#include <grpc/support/log.h>
+
+typedef struct grpc_rb_event {
+  // callback will be called with argument while holding the GVL
+  void (*callback)(void*);
+  void *argument;
+
+  struct grpc_rb_event *next;
+} grpc_rb_event;
+
+typedef struct grpc_rb_event_queue {
+  grpc_rb_event *head;
+  grpc_rb_event *tail;
+
+  gpr_mu mu;
+  gpr_cv cv;
+
+  // Indicates that the thread should stop waiting
+  bool abort;
+} grpc_rb_event_queue;
+
+static grpc_rb_event_queue event_queue;
+
+void grpc_rb_event_queue_enqueue(void (*callback)(void*),
+                                 void *argument) {
+  grpc_rb_event *event = gpr_malloc(sizeof(grpc_rb_event));
+  event->callback = callback;
+  event->argument = argument;
+  event->next = NULL;
+  gpr_mu_lock(&event_queue.mu);
+  if (event_queue.tail == NULL) {
+    event_queue.head = event_queue.tail = event;
+  } else {
+    event_queue.tail->next = event;
+    event_queue.tail = event;
+  }
+  gpr_cv_signal(&event_queue.cv);
+  gpr_mu_unlock(&event_queue.mu);
+}
+
+static grpc_rb_event *grpc_rb_event_queue_dequeue() {
+  grpc_rb_event *event;
+  if (event_queue.head == NULL) {
+    event = NULL;
+  } else {
+    event = event_queue.head;
+    if (event_queue.head->next == NULL) {
+      event_queue.head = event_queue.tail = NULL;
+    } else {
+      event_queue.head = event_queue.head->next;
+    }
+  }
+  return event;
+}
+
+static void grpc_rb_event_queue_destroy() {
+  gpr_mu_destroy(&event_queue.mu);
+  gpr_cv_destroy(&event_queue.cv);
+}
+
+static void *grpc_rb_wait_for_event_no_gil(void *param) {
+  grpc_rb_event *event = NULL;
+  gpr_mu_lock(&event_queue.mu);
+  while ((event = grpc_rb_event_queue_dequeue()) == NULL) {
+    gpr_cv_wait(&event_queue.cv,
+                &event_queue.mu,
+                gpr_inf_future(GPR_CLOCK_REALTIME));
+    if (event_queue.abort) {
+      gpr_mu_unlock(&event_queue.mu);
+      return NULL;
+    }
+  }
+  gpr_mu_unlock(&event_queue.mu);
+  return event;
+}
+
+static void grpc_rb_event_unblocking_func(void *arg) {
+  gpr_mu_lock(&event_queue.mu);
+  event_queue.abort = true;
+  gpr_cv_signal(&event_queue.cv);
+  gpr_mu_unlock(&event_queue.mu);
+}
+
+/* This is the implementation of the thread that handles auth metadata plugin
+ * events */
+static VALUE grpc_rb_event_thread(VALUE arg) {
+  grpc_rb_event *event;
+  while(true) {
+    event = (grpc_rb_event*)rb_thread_call_without_gvl(
+        grpc_rb_wait_for_event_no_gil, NULL,
+        grpc_rb_event_unblocking_func, NULL);
+    if (event == NULL) {
+      // Indicates that the thread needs to shut down
+      break;
+    } else {
+      event->callback(event->argument);
+      gpr_free(event);
+    }
+  }
+  grpc_rb_event_queue_destroy();
+  return Qnil;
+}
+
+void grpc_rb_event_queue_thread_start() {
+  event_queue.head = event_queue.tail = NULL;
+  event_queue.abort = false;
+  gpr_mu_init(&event_queue.mu);
+  gpr_cv_init(&event_queue.cv);
+
+  rb_thread_create(grpc_rb_event_thread, NULL);
+}
diff --git a/src/ruby/ext/grpc/rb_event_thread.h b/src/ruby/ext/grpc/rb_event_thread.h
new file mode 100644
index 0000000000000000000000000000000000000000..46638bfcf531680c46ebbd761993128ed1e47e51
--- /dev/null
+++ b/src/ruby/ext/grpc/rb_event_thread.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2016, 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.
+ *
+ */
+
+void grpc_rb_event_queue_thread_start();
+
+void grpc_rb_event_queue_enqueue(void (*callback)(void*),
+                                 void *argument);
diff --git a/src/ruby/grpc.gemspec b/src/ruby/grpc.gemspec
deleted file mode 100755
index 363abe9a46322bdbe27614cb25eb2f8c2bdf2794..0000000000000000000000000000000000000000
--- a/src/ruby/grpc.gemspec
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- ruby -*-
-# encoding: utf-8
-$LOAD_PATH.push File.expand_path('../lib', __FILE__)
-require 'grpc/version'
-
-Gem::Specification.new do |s|
-  s.name          = 'grpc'
-  s.version       = GRPC::VERSION
-  s.authors       = ['gRPC Authors']
-  s.email         = 'temiola@google.com'
-  s.homepage      = 'https://github.com/google/grpc/tree/master/src/ruby'
-  s.summary       = 'GRPC system in Ruby'
-  s.description   = 'Send RPCs from Ruby using GRPC'
-  s.license       = 'BSD-3-Clause'
-
-  s.required_ruby_version = '>= 2.0.0'
-  s.requirements << 'libgrpc ~> 0.11.0 needs to be installed'
-
-  s.files = %w( Rakefile )
-  s.files += Dir.glob('bin/**/*')
-  s.files += Dir.glob('ext/**/*')
-  s.files += Dir.glob('lib/**/*')
-  s.files += Dir.glob('pb/**/*')
-  s.test_files = Dir.glob('spec/**/*')
-  %w(math noproto).each do |b|
-    s.executables += ["#{b}_client.rb", "#{b}_server.rb"]
-  end
-  s.executables += %w(grpc_ruby_interop_client grpc_ruby_interop_server)
-  s.require_paths = %w( bin lib pb )
-  s.platform      = Gem::Platform::RUBY
-
-  s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1'
-  s.add_dependency 'googleauth', '~> 0.4'
-
-  s.add_development_dependency 'bundler', '~> 1.9'
-  s.add_development_dependency 'logging', '~> 2.0'
-  s.add_development_dependency 'simplecov', '~> 0.9'
-  s.add_development_dependency 'rake', '~> 10.4'
-  s.add_development_dependency 'rake-compiler', '~> 0.9'
-  s.add_development_dependency 'rspec', '~> 3.2'
-  s.add_development_dependency 'rubocop', '~> 0.30.0'
-  s.add_development_dependency 'signet', '~>0.6.0'
-
-  s.extensions = %w(ext/grpc/extconf.rb)
-end
diff --git a/src/ruby/lib/grpc.rb b/src/ruby/lib/grpc.rb
index 80b5743e9145b638dd0f33d9d55e1efdb990a83d..1671ba3550b8f20563cc26f0eeeef480f21322f0 100644
--- a/src/ruby/lib/grpc.rb
+++ b/src/ruby/lib/grpc.rb
@@ -1,4 +1,4 @@
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -27,6 +27,11 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+ssl_roots_path = File.expand_path('../../../../etc/roots.pem', __FILE__)
+unless ENV['GRPC_DEFAULT_SSL_ROOTS_FILE_PATH']
+  ENV['GRPC_DEFAULT_SSL_ROOTS_FILE_PATH'] = ssl_roots_path
+end
+
 require 'grpc/errors'
 require 'grpc/grpc'
 require 'grpc/logconfig'
diff --git a/src/ruby/lib/grpc/generic/client_stub.rb b/src/ruby/lib/grpc/generic/client_stub.rb
index 13100a614c158fe6f03cf6fd8b6d55f7dcb24467..4da9ff086a9550bb1e7274f0a101df7759ef8b64 100644
--- a/src/ruby/lib/grpc/generic/client_stub.rb
+++ b/src/ruby/lib/grpc/generic/client_stub.rb
@@ -1,4 +1,4 @@
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -50,9 +50,8 @@ module GRPC
         return alt_chan
       end
       kw['grpc.primary_user_agent'] = "grpc-ruby/#{VERSION}"
-      return Core::Channel.new(host, kw) if creds.nil?
-      unless creds.is_a?(Core::ChannelCredentials)
-        fail(TypeError, '!ChannelCredentials')
+      unless creds.is_a?(Core::ChannelCredentials) || creds.is_a?(Symbol)
+        fail(TypeError, '!ChannelCredentials or Symbol')
       end
       Core::Channel.new(host, kw, creds)
     end
@@ -68,7 +67,8 @@ module GRPC
     # Minimally, a stub is created with the just the host of the gRPC service
     # it wishes to access, e.g.,
     #
-    # my_stub = ClientStub.new(example.host.com:50505)
+    # my_stub = ClientStub.new(example.host.com:50505,
+    #                          :this_channel_is_insecure)
     #
     # Any arbitrary keyword arguments are treated as channel arguments used to
     # configure the RPC connection to the host.
@@ -86,14 +86,14 @@ module GRPC
     #
     # @param host [String] the host the stub connects to
     # @param q [Core::CompletionQueue] used to wait for events
+    # @param creds [Core::ChannelCredentials|Symbol] the channel credentials, or
+    #     :this_channel_is_insecure
     # @param channel_override [Core::Channel] a pre-created channel
     # @param timeout [Number] the default timeout to use in requests
-    # @param creds [Core::ChannelCredentials] the channel credentials
     # @param kw [KeywordArgs]the channel arguments
-    def initialize(host, q,
+    def initialize(host, q, creds,
                    channel_override: nil,
                    timeout: nil,
-                   creds: nil,
                    propagate_mask: nil,
                    **kw)
       fail(TypeError, '!CompletionQueue') unless q.is_a?(Core::CompletionQueue)
@@ -464,7 +464,7 @@ module GRPC
                              method,
                              nil, # host use nil,
                              deadline)
-      call.set_credentials credentials unless credentials.nil?
+      call.set_credentials! credentials unless credentials.nil?
       ActiveCall.new(call, @queue, marshal, unmarshal, deadline, started: false)
     end
   end
diff --git a/src/ruby/lib/grpc/generic/service.rb b/src/ruby/lib/grpc/generic/service.rb
index 80ff669cca63fec2516f7e1d0799e3dfc0b11065..410e1add7dc4c88a40f57289e1708050405f77aa 100644
--- a/src/ruby/lib/grpc/generic/service.rb
+++ b/src/ruby/lib/grpc/generic/service.rb
@@ -160,10 +160,12 @@ module GRPC
         route_prefix = service_name
         Class.new(ClientStub) do
           # @param host [String] the host the stub connects to
+          # @param creds [Core::ChannelCredentials|Symbol] The channel
+          #     credentials to use, or :this_channel_is_insecure otherwise
           # @param kw [KeywordArgs] the channel arguments, plus any optional
           #                         args for configuring the client's channel
-          def initialize(host, **kw)
-            super(host, Core::CompletionQueue.new, **kw)
+          def initialize(host, creds, **kw)
+            super(host, Core::CompletionQueue.new, creds, **kw)
           end
 
           # Used define_method to add a method for each rpc_desc.  Each method
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index 9acf7a055a6a84903ef740d75013c4c33fa1dfd1..956e0222dfe2b22f6ea000768e27f599f454e4aa 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -1,4 +1,4 @@
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -29,5 +29,5 @@
 
 # GRPC contains the General RPC module.
 module GRPC
-  VERSION = '0.11.1'
+  VERSION = '0.12.0'
 end
diff --git a/src/ruby/pb/test/client.rb b/src/ruby/pb/test/client.rb
index 6cc616e5cbaf79e436c0d1723f22d593577d7107..684ee807715a17a6280841e95ea3777d542e31eb 100755
--- a/src/ruby/pb/test/client.rb
+++ b/src/ruby/pb/test/client.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -56,8 +56,6 @@ require 'test/proto/empty'
 require 'test/proto/messages'
 require 'test/proto/test_services'
 
-require 'signet/ssl_config'
-
 AUTH_ENV = Google::Auth::CredentialsLoader::ENV_VAR
 
 # RubyLogger defines a logger for gRPC based on the standard ruby logger.
@@ -114,8 +112,8 @@ end
 def create_stub(opts)
   address = "#{opts.host}:#{opts.port}"
   if opts.secure
+    creds = ssl_creds(opts.use_test_ca)
     stub_opts = {
-      :creds => ssl_creds(opts.use_test_ca),
       GRPC::Core::Channel::SSL_TARGET => opts.host_override
     }
 
@@ -125,7 +123,7 @@ def create_stub(opts)
       unless opts.oauth_scope.nil?
         auth_creds = Google::Auth.get_application_default(opts.oauth_scope)
         call_creds = GRPC::Core::CallCredentials.new(auth_creds.updater_proc)
-        stub_opts[:creds] = stub_opts[:creds].compose call_creds
+        creds = creds.compose call_creds
       end
     end
 
@@ -135,20 +133,20 @@ def create_stub(opts)
 
       # use a metadata update proc that just adds the auth token.
       call_creds = GRPC::Core::CallCredentials.new(proc { |md| md.merge(kw) })
-      stub_opts[:creds] = stub_opts[:creds].compose call_creds
+      creds = creds.compose call_creds
     end
 
     if opts.test_case == 'jwt_token_creds'  # don't use a scope
       auth_creds = Google::Auth.get_application_default
       call_creds = GRPC::Core::CallCredentials.new(auth_creds.updater_proc)
-      stub_opts[:creds] = stub_opts[:creds].compose call_creds
+      creds = creds.compose call_creds
     end
 
     GRPC.logger.info("... connecting securely to #{address}")
-    Grpc::Testing::TestService::Stub.new(address, **stub_opts)
+    Grpc::Testing::TestService::Stub.new(address, creds, **stub_opts)
   else
     GRPC.logger.info("... connecting insecurely to #{address}")
-    Grpc::Testing::TestService::Stub.new(address)
+    Grpc::Testing::TestService::Stub.new(address, :this_channel_is_insecure)
   end
 end
 
@@ -266,16 +264,15 @@ class NamedTests
 
   def per_rpc_creds
     auth_creds = Google::Auth.get_application_default(@args.oauth_scope)
-    kw = auth_creds.updater_proc.call({})
+    update_metadata = proc do |md|
+      kw = auth_creds.updater_proc.call({})
+    end
 
-    # TODO(jtattermusch): downcase the metadata keys here to make sure
-    # they are not rejected by C core. This is a hotfix that should
-    # be addressed by introducing auto-downcasing logic.
-    kw = Hash[ kw.each_pair.map { |k, v|  [k.downcase, v] }]
+    call_creds = GRPC::Core::CallCredentials.new(update_metadata)
 
     resp = perform_large_unary(fill_username: true,
                                fill_oauth_scope: true,
-                               **kw)
+                               credentials: call_creds)
     json_key = File.read(ENV[AUTH_ENV])
     wanted_email = MultiJson.load(json_key)['client_email']
     assert("#{__callee__}: bad username") { wanted_email == resp.username }
diff --git a/src/ruby/spec/call_spec.rb b/src/ruby/spec/call_spec.rb
index 6629570fba94f0552a97c3d06c86a83be6ac3758..ae3ce0748a2bd1478ab75520d39860157a524610 100644
--- a/src/ruby/spec/call_spec.rb
+++ b/src/ruby/spec/call_spec.rb
@@ -101,7 +101,7 @@ describe GRPC::Core::Call do
   let(:fake_host) { 'localhost:10101' }
 
   before(:each) do
-    @ch = GRPC::Core::Channel.new(fake_host, nil)
+    @ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
   end
 
   describe '#status' do
diff --git a/src/ruby/spec/channel_spec.rb b/src/ruby/spec/channel_spec.rb
index b4d2b94a819be73bafab7587a4f9d7445d0d76c5..355f95c9d798ed930b08e1af00e7efba83f1e24f 100644
--- a/src/ruby/spec/channel_spec.rb
+++ b/src/ruby/spec/channel_spec.rb
@@ -45,7 +45,10 @@ describe GRPC::Core::Channel do
 
   shared_examples '#new' do
     it 'take a host name without channel args' do
-      expect { GRPC::Core::Channel.new('dummy_host', nil) }.not_to raise_error
+      blk = proc do
+        GRPC::Core::Channel.new('dummy_host', nil, :this_channel_is_insecure)
+      end
+      expect(&blk).not_to raise_error
     end
 
     it 'does not take a hash with bad keys as channel args' do
@@ -106,13 +109,15 @@ describe GRPC::Core::Channel do
     it_behaves_like '#new'
 
     def construct_with_args(a)
-      proc { GRPC::Core::Channel.new('dummy_host', a) }
+      proc do
+        GRPC::Core::Channel.new('dummy_host', a, :this_channel_is_insecure)
+      end
     end
   end
 
   describe '#create_call' do
     it 'creates a call OK' do
-      ch = GRPC::Core::Channel.new(fake_host, nil)
+      ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
 
       deadline = Time.now + 5
 
@@ -123,7 +128,7 @@ describe GRPC::Core::Channel do
     end
 
     it 'raises an error if called on a closed channel' do
-      ch = GRPC::Core::Channel.new(fake_host, nil)
+      ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
       ch.close
 
       deadline = Time.now + 5
@@ -136,13 +141,13 @@ describe GRPC::Core::Channel do
 
   describe '#destroy' do
     it 'destroys a channel ok' do
-      ch = GRPC::Core::Channel.new(fake_host, nil)
+      ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
       blk = proc { ch.destroy }
       expect(&blk).to_not raise_error
     end
 
     it 'can be called more than once without error' do
-      ch = GRPC::Core::Channel.new(fake_host, nil)
+      ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
       blk = proc { ch.destroy }
       blk.call
       expect(&blk).to_not raise_error
@@ -157,13 +162,13 @@ describe GRPC::Core::Channel do
 
   describe '#close' do
     it 'closes a channel ok' do
-      ch = GRPC::Core::Channel.new(fake_host, nil)
+      ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
       blk = proc { ch.close }
       expect(&blk).to_not raise_error
     end
 
     it 'can be called more than once without error' do
-      ch = GRPC::Core::Channel.new(fake_host, nil)
+      ch = GRPC::Core::Channel.new(fake_host, nil, :this_channel_is_insecure)
       blk = proc { ch.close }
       blk.call
       expect(&blk).to_not raise_error
diff --git a/src/ruby/spec/client_server_spec.rb b/src/ruby/spec/client_server_spec.rb
index 7cce2076c93d4148189e717cca1c06dc9cdfa85b..594fda1cd3e433f9408478c5951b2bf941e09c18 100644
--- a/src/ruby/spec/client_server_spec.rb
+++ b/src/ruby/spec/client_server_spec.rb
@@ -397,7 +397,7 @@ describe 'the http client/server' do
     @server = GRPC::Core::Server.new(@server_queue, nil)
     server_port = @server.add_http2_port(server_host, :this_port_is_insecure)
     @server.start
-    @ch = Channel.new("0.0.0.0:#{server_port}", nil)
+    @ch = Channel.new("0.0.0.0:#{server_port}", nil, :this_channel_is_insecure)
   end
 
   after(:example) do
diff --git a/src/ruby/spec/generic/active_call_spec.rb b/src/ruby/spec/generic/active_call_spec.rb
index b05e3284fe81207bf84fcd7c0d5fdfae66ca88a0..c0181e21fb018e3b7ab0967180a94f88eab59431 100644
--- a/src/ruby/spec/generic/active_call_spec.rb
+++ b/src/ruby/spec/generic/active_call_spec.rb
@@ -48,7 +48,8 @@ describe GRPC::ActiveCall do
     @server = GRPC::Core::Server.new(@server_queue, nil)
     server_port = @server.add_http2_port(host, :this_port_is_insecure)
     @server.start
-    @ch = GRPC::Core::Channel.new("0.0.0.0:#{server_port}", nil)
+    @ch = GRPC::Core::Channel.new("0.0.0.0:#{server_port}", nil,
+                                  :this_channel_is_insecure)
   end
 
   after(:each) do
diff --git a/src/ruby/spec/generic/client_stub_spec.rb b/src/ruby/spec/generic/client_stub_spec.rb
index 40550230dd9775f97a8143dc2ae868e9276c70b1..5e13c25fcf3e6d1e70f416006a2609cc1af2363c 100644
--- a/src/ruby/spec/generic/client_stub_spec.rb
+++ b/src/ruby/spec/generic/client_stub_spec.rb
@@ -70,7 +70,7 @@ describe 'ClientStub' do
     it 'can be created from a host and args' do
       opts = { a_channel_arg: 'an_arg' }
       blk = proc do
-        GRPC::ClientStub.new(fake_host, @cq, **opts)
+        GRPC::ClientStub.new(fake_host, @cq, :this_channel_is_insecure, **opts)
       end
       expect(&blk).not_to raise_error
     end
@@ -78,7 +78,7 @@ describe 'ClientStub' do
     it 'can be created with a default deadline' do
       opts = { a_channel_arg: 'an_arg', deadline: 5 }
       blk = proc do
-        GRPC::ClientStub.new(fake_host, @cq, **opts)
+        GRPC::ClientStub.new(fake_host, @cq, :this_channel_is_insecure, **opts)
       end
       expect(&blk).not_to raise_error
     end
@@ -86,7 +86,7 @@ describe 'ClientStub' do
     it 'can be created with an channel override' do
       opts = { a_channel_arg: 'an_arg', channel_override: @ch }
       blk = proc do
-        GRPC::ClientStub.new(fake_host, @cq, **opts)
+        GRPC::ClientStub.new(fake_host, @cq, :this_channel_is_insecure, **opts)
       end
       expect(&blk).not_to raise_error
     end
@@ -94,15 +94,15 @@ describe 'ClientStub' do
     it 'cannot be created with a bad channel override' do
       blk = proc do
         opts = { a_channel_arg: 'an_arg', channel_override: Object.new }
-        GRPC::ClientStub.new(fake_host, @cq, **opts)
+        GRPC::ClientStub.new(fake_host, @cq, :this_channel_is_insecure, **opts)
       end
       expect(&blk).to raise_error
     end
 
     it 'cannot be created with bad credentials' do
       blk = proc do
-        opts = { a_channel_arg: 'an_arg', creds: Object.new }
-        GRPC::ClientStub.new(fake_host, @cq, **opts)
+        opts = { a_channel_arg: 'an_arg' }
+        GRPC::ClientStub.new(fake_host, @cq, Object.new, **opts)
       end
       expect(&blk).to raise_error
     end
@@ -112,10 +112,10 @@ describe 'ClientStub' do
       blk = proc do
         opts = {
           GRPC::Core::Channel::SSL_TARGET => 'foo.test.google.fr',
-          a_channel_arg: 'an_arg',
-          creds: GRPC::Core::ChannelCredentials.new(certs[0], nil, nil)
+          a_channel_arg: 'an_arg'
         }
-        GRPC::ClientStub.new(fake_host, @cq, **opts)
+        creds = GRPC::Core::ChannelCredentials.new(certs[0], nil, nil)
+        GRPC::ClientStub.new(fake_host, @cq, creds,  **opts)
       end
       expect(&blk).to_not raise_error
     end
@@ -130,7 +130,8 @@ describe 'ClientStub' do
       it 'should send a request to/receive a reply from a server' do
         server_port = create_test_server
         th = run_request_response(@sent_msg, @resp, @pass)
-        stub = GRPC::ClientStub.new("localhost:#{server_port}", @cq)
+        stub = GRPC::ClientStub.new("localhost:#{server_port}", @cq,
+                                    :this_channel_is_insecure)
         expect(get_response(stub)).to eq(@resp)
         th.join
       end
@@ -140,7 +141,7 @@ describe 'ClientStub' do
         host = "localhost:#{server_port}"
         th = run_request_response(@sent_msg, @resp, @pass,
                                   k1: 'v1', k2: 'v2')
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         expect(get_response(stub)).to eq(@resp)
         th.join
       end
@@ -149,8 +150,10 @@ describe 'ClientStub' do
         server_port = create_test_server
         alt_host = "localhost:#{server_port}"
         th = run_request_response(@sent_msg, @resp, @pass)
-        ch = GRPC::Core::Channel.new(alt_host, nil)
-        stub = GRPC::ClientStub.new('ignored-host', @cq, channel_override: ch)
+        ch = GRPC::Core::Channel.new(alt_host, nil, :this_channel_is_insecure)
+        stub = GRPC::ClientStub.new('ignored-host', @cq,
+                                    :this_channel_is_insecure,
+                                    channel_override: ch)
         expect(get_response(stub)).to eq(@resp)
         th.join
       end
@@ -159,7 +162,7 @@ describe 'ClientStub' do
         server_port = create_test_server
         host = "localhost:#{server_port}"
         th = run_request_response(@sent_msg, @resp, @fail)
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         blk = proc { get_response(stub) }
         expect(&blk).to raise_error(GRPC::BadStatus)
         th.join
@@ -198,7 +201,7 @@ describe 'ClientStub' do
         server_port = create_test_server
         host = "localhost:#{server_port}"
         th = run_client_streamer(@sent_msgs, @resp, @pass)
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         expect(get_response(stub)).to eq(@resp)
         th.join
       end
@@ -208,7 +211,7 @@ describe 'ClientStub' do
         host = "localhost:#{server_port}"
         th = run_client_streamer(@sent_msgs, @resp, @pass,
                                  k1: 'v1', k2: 'v2')
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         expect(get_response(stub)).to eq(@resp)
         th.join
       end
@@ -217,7 +220,7 @@ describe 'ClientStub' do
         server_port = create_test_server
         host = "localhost:#{server_port}"
         th = run_client_streamer(@sent_msgs, @resp, @fail)
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         blk = proc { get_response(stub) }
         expect(&blk).to raise_error(GRPC::BadStatus)
         th.join
@@ -256,7 +259,7 @@ describe 'ClientStub' do
         server_port = create_test_server
         host = "localhost:#{server_port}"
         th = run_server_streamer(@sent_msg, @replys, @pass)
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         expect(get_responses(stub).collect { |r| r }).to eq(@replys)
         th.join
       end
@@ -265,7 +268,7 @@ describe 'ClientStub' do
         server_port = create_test_server
         host = "localhost:#{server_port}"
         th = run_server_streamer(@sent_msg, @replys, @fail)
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         e = get_responses(stub)
         expect { e.collect { |r| r } }.to raise_error(GRPC::BadStatus)
         th.join
@@ -276,7 +279,7 @@ describe 'ClientStub' do
         host = "localhost:#{server_port}"
         th = run_server_streamer(@sent_msg, @replys, @fail,
                                  k1: 'v1', k2: 'v2')
-        stub = GRPC::ClientStub.new(host, @cq)
+        stub = GRPC::ClientStub.new(host, @cq, :this_channel_is_insecure)
         e = get_responses(stub)
         expect { e.collect { |r| r } }.to raise_error(GRPC::BadStatus)
         th.join
@@ -320,7 +323,7 @@ describe 'ClientStub' do
       it 'supports sending all the requests first', bidi: true do
         th = run_bidi_streamer_handle_inputs_first(@sent_msgs, @replys,
                                                    @pass)
-        stub = GRPC::ClientStub.new(@host, @cq)
+        stub = GRPC::ClientStub.new(@host, @cq, :this_channel_is_insecure)
         e = get_responses(stub)
         expect(e.collect { |r| r }).to eq(@replys)
         th.join
@@ -328,7 +331,7 @@ describe 'ClientStub' do
 
       it 'supports client-initiated ping pong', bidi: true do
         th = run_bidi_streamer_echo_ping_pong(@sent_msgs, @pass, true)
-        stub = GRPC::ClientStub.new(@host, @cq)
+        stub = GRPC::ClientStub.new(@host, @cq, :this_channel_is_insecure)
         e = get_responses(stub)
         expect(e.collect { |r| r }).to eq(@sent_msgs)
         th.join
@@ -336,7 +339,7 @@ describe 'ClientStub' do
 
       it 'supports a server-initiated ping pong', bidi: true do
         th = run_bidi_streamer_echo_ping_pong(@sent_msgs, @pass, false)
-        stub = GRPC::ClientStub.new(@host, @cq)
+        stub = GRPC::ClientStub.new(@host, @cq, :this_channel_is_insecure)
         e = get_responses(stub)
         expect(e.collect { |r| r }).to eq(@sent_msgs)
         th.join
@@ -376,7 +379,7 @@ describe 'ClientStub' do
 
       it 'should fail with DeadlineExceeded', bidi: true do
         @server.start
-        stub = GRPC::ClientStub.new(@host, @cq)
+        stub = GRPC::ClientStub.new(@host, @cq, :this_channel_is_insecure)
         blk = proc do
           e = stub.bidi_streamer(@method, @sent_msgs, noop, noop,
                                  timeout: 0.001)
diff --git a/src/ruby/spec/generic/rpc_server_spec.rb b/src/ruby/spec/generic/rpc_server_spec.rb
index d95a0213113ab91378392ef7701dc03e6588e44e..be6331d68bb9a392d773af59a8c3dceb53ca187a 100644
--- a/src/ruby/spec/generic/rpc_server_spec.rb
+++ b/src/ruby/spec/generic/rpc_server_spec.rb
@@ -141,7 +141,7 @@ describe GRPC::RpcServer do
     @server = GRPC::Core::Server.new(@server_queue, nil)
     server_port = @server.add_http2_port(server_host, :this_port_is_insecure)
     @host = "localhost:#{server_port}"
-    @ch = GRPC::Core::Channel.new(@host, nil)
+    @ch = GRPC::Core::Channel.new(@host, nil, :this_channel_is_insecure)
   end
 
   describe '#new' do
@@ -355,7 +355,8 @@ describe GRPC::RpcServer do
         req = EchoMsg.new
         blk = proc do
           cq = GRPC::Core::CompletionQueue.new
-          stub = GRPC::ClientStub.new(@host, cq, **client_opts)
+          stub = GRPC::ClientStub.new(@host, cq, :this_channel_is_insecure,
+                                      **client_opts)
           stub.request_response('/unknown', req, marshal, unmarshal)
         end
         expect(&blk).to raise_error GRPC::BadStatus
@@ -369,7 +370,7 @@ describe GRPC::RpcServer do
         @srv.wait_till_running
         req = EchoMsg.new
         n = 5  # arbitrary
-        stub = EchoStub.new(@host, **client_opts)
+        stub = EchoStub.new(@host, :this_channel_is_insecure, **client_opts)
         n.times { expect(stub.an_rpc(req)).to be_a(EchoMsg) }
         @srv.stop
         t.join
@@ -381,7 +382,7 @@ describe GRPC::RpcServer do
         t = Thread.new { @srv.run }
         @srv.wait_till_running
         req = EchoMsg.new
-        stub = EchoStub.new(@host, **client_opts)
+        stub = EchoStub.new(@host, :this_channel_is_insecure, **client_opts)
         expect(stub.an_rpc(req, k1: 'v1', k2: 'v2')).to be_a(EchoMsg)
         wanted_md = [{ 'k1' => 'v1', 'k2' => 'v2' }]
         check_md(wanted_md, service.received_md)
@@ -395,7 +396,7 @@ describe GRPC::RpcServer do
         t = Thread.new { @srv.run }
         @srv.wait_till_running
         req = EchoMsg.new
-        stub = SlowStub.new(@host, **client_opts)
+        stub = SlowStub.new(@host, :this_channel_is_insecure, **client_opts)
         timeout = service.delay + 1.0 # wait for long enough
         resp = stub.an_rpc(req, timeout: timeout, k1: 'v1', k2: 'v2')
         expect(resp).to be_a(EchoMsg)
@@ -411,7 +412,7 @@ describe GRPC::RpcServer do
         t = Thread.new { @srv.run }
         @srv.wait_till_running
         req = EchoMsg.new
-        stub = SlowStub.new(@host, **client_opts)
+        stub = SlowStub.new(@host, :this_channel_is_insecure, **client_opts)
         op = stub.an_rpc(req, k1: 'v1', k2: 'v2', return_op: true)
         Thread.new do  # cancel the call
           sleep 0.1
@@ -431,7 +432,7 @@ describe GRPC::RpcServer do
         threads = [t]
         n.times do
           threads << Thread.new do
-            stub = EchoStub.new(@host, **client_opts)
+            stub = EchoStub.new(@host, :this_channel_is_insecure, **client_opts)
             q << stub.an_rpc(req)
           end
         end
@@ -459,7 +460,7 @@ describe GRPC::RpcServer do
         one_failed_as_unavailable = false
         n.times do
           threads << Thread.new do
-            stub = SlowStub.new(@host, **client_opts)
+            stub = SlowStub.new(@host, :this_channel_is_insecure, **client_opts)
             begin
               stub.an_rpc(req)
             rescue GRPC::BadStatus => e
@@ -499,7 +500,7 @@ describe GRPC::RpcServer do
         t = Thread.new { @srv.run }
         @srv.wait_till_running
         req = EchoMsg.new
-        stub = EchoStub.new(@host, **client_opts)
+        stub = EchoStub.new(@host, :this_channel_is_insecure, **client_opts)
         op = stub.an_rpc(req, k1: 'v1', k2: 'v2', return_op: true)
         expect(op.metadata).to be nil
         expect(op.execute).to be_a(EchoMsg)
@@ -537,7 +538,7 @@ describe GRPC::RpcServer do
         t = Thread.new { @srv.run }
         @srv.wait_till_running
         req = EchoMsg.new
-        stub = FailingStub.new(@host, **client_opts)
+        stub = FailingStub.new(@host, :this_channel_is_insecure, **client_opts)
         blk = proc { stub.an_rpc(req) }
 
         # confirm it raise the expected error
@@ -562,7 +563,7 @@ describe GRPC::RpcServer do
         t = Thread.new { @srv.run }
         @srv.wait_till_running
         req = EchoMsg.new
-        stub = EchoStub.new(@host, **client_opts)
+        stub = EchoStub.new(@host, :this_channel_is_insecure, **client_opts)
         op = stub.an_rpc(req, k1: 'v1', k2: 'v2', return_op: true)
         expect(op.metadata).to be nil
         expect(op.execute).to be_a(EchoMsg)
diff --git a/src/ruby/spec/generic/service_spec.rb b/src/ruby/spec/generic/service_spec.rb
index 6cfc34db84d435ef1664d390302bc9b426fd72db..5e7b6c7abaff82f0b6da36b4b9cdb7cc9a24f145 100644
--- a/src/ruby/spec/generic/service_spec.rb
+++ b/src/ruby/spec/generic/service_spec.rb
@@ -241,7 +241,7 @@ describe GenericService do
     end
 
     describe 'the generated instances' do
-      it 'can be instanciated with just a hostname' do
+      it 'can be instanciated with just a hostname and credentials' do
         s = Class.new do
           include GenericService
           rpc :AnRpc, GoodMsg, GoodMsg
@@ -250,7 +250,10 @@ describe GenericService do
           rpc :ABidiStreamer, stream(GoodMsg), stream(GoodMsg)
         end
         client_class = s.rpc_stub_class
-        expect { client_class.new('fakehostname') }.not_to raise_error
+        blk = proc do
+          client_class.new('fakehostname', :this_channel_is_insecure)
+        end
+        expect(&blk).not_to raise_error
       end
 
       it 'has the methods defined in the service' do
@@ -262,7 +265,7 @@ describe GenericService do
           rpc :ABidiStreamer, stream(GoodMsg), stream(GoodMsg)
         end
         client_class = s.rpc_stub_class
-        o = client_class.new('fakehostname')
+        o = client_class.new('fakehostname', :this_channel_is_insecure)
         expect(o.methods).to include(:an_rpc)
         expect(o.methods).to include(:a_bidi_streamer)
         expect(o.methods).to include(:a_client_streamer)
diff --git a/src/ruby/spec/pb/health/checker_spec.rb b/src/ruby/spec/pb/health/checker_spec.rb
index 322566b7842fe316a446fd228dd9b735587a9fcb..c1decd822a76062a58ea9dda0e83a18ec7776590 100644
--- a/src/ruby/spec/pb/health/checker_spec.rb
+++ b/src/ruby/spec/pb/health/checker_spec.rb
@@ -1,4 +1,4 @@
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -47,13 +47,12 @@ describe 'Health protobuf code generation' do
       end
 
       it 'should have the same content as created by code generation' do
-        root_dir = File.dirname(
-          File.dirname(File.dirname(File.dirname(__FILE__))))
-        pb_dir = File.join(root_dir, 'pb')
+        root_dir = File.join(File.dirname(__FILE__), '..', '..', '..', '..')
+        pb_dir = File.join(root_dir, 'proto')
 
         # Get the current content
-        service_path = File.join(pb_dir, 'grpc', 'health', 'v1alpha',
-                                 'health_services.rb')
+        service_path = File.join(root_dir, 'ruby', 'pb', 'grpc',
+                                 'health', 'v1alpha', 'health_services.rb')
         want = nil
         File.open(service_path) { |f| want = f.read }
 
@@ -188,7 +187,7 @@ describe Grpc::Health::Checker do
       @server = GRPC::Core::Server.new(@server_queue, nil)
       server_port = @server.add_http2_port(server_host, :this_port_is_insecure)
       @host = "localhost:#{server_port}"
-      @ch = GRPC::Core::Channel.new(@host, nil)
+      @ch = GRPC::Core::Channel.new(@host, nil, :this_channel_is_insecure)
       @client_opts = { channel_override: @ch }
       server_opts = {
         server_override: @server,
@@ -208,7 +207,7 @@ describe Grpc::Health::Checker do
       t = Thread.new { @srv.run }
       @srv.wait_till_running
 
-      stub = CheckerStub.new(@host, **@client_opts)
+      stub = CheckerStub.new(@host, :this_channel_is_insecure, **@client_opts)
       got = stub.check(HCReq.new)
       want = HCResp.new(status: ServingStatus::NOT_SERVING)
       expect(got).to eq(want)
@@ -221,7 +220,7 @@ describe Grpc::Health::Checker do
       t = Thread.new { @srv.run }
       @srv.wait_till_running
       blk = proc do
-        stub = CheckerStub.new(@host, **@client_opts)
+        stub = CheckerStub.new(@host, :this_channel_is_insecure, **@client_opts)
         stub.check(HCReq.new(host: 'unknown', service: 'unknown'))
       end
       expected_msg = /#{StatusCodes::NOT_FOUND}/
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 1582cae20acfdf8e56f193819e18810c1976ee18..e47b9f051899b7d2ca006b4a2eecbe09c230f3e7 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -163,9 +163,9 @@
   CXX_tsan = clang++
   LD_tsan = clang
   LDXX_tsan = clang++
-  CFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE
-  CXXFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE
-  LDFLAGS_tsan = -fsanitize=thread -pie
+  CFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie
+  CXXFLAGS_tsan = -O0 -fsanitize=thread -fno-omit-frame-pointer -Wno-unused-command-line-argument -fPIE -pie
+  LDFLAGS_tsan = -fsanitize=thread -fPIE -pie -Wl,-Ttext-segment=0x7e0000000000
   DEFINES_tsan = NDEBUG GRPC_TEST_SLOWDOWN_BUILD_FACTOR=10
 
   VALID_CONFIG_asan = 1
@@ -185,9 +185,9 @@
   CXX_msan = clang++-libc++
   LD_msan = clang
   LDXX_msan = clang++-libc++
-  CFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE
-  CXXFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE
-  LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -pie
+  CFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie
+  CXXFLAGS_msan = -O0 -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -Wno-unused-command-line-argument -fPIE -pie
+  LDFLAGS_msan = -fsanitize=memory -DGTEST_HAS_TR1_TUPLE=0 -DGTEST_USE_OWN_TR1_TUPLE=1 -fPIE -pie -Wl,-Ttext-segment=0x7e0000000000
   DEFINES_msan = NDEBUG GRPC_TEST_SLOWDOWN_BUILD_FACTOR=4
 
   VALID_CONFIG_ubsan = 1
@@ -1645,11 +1645,18 @@
     if lib.language == 'c++':
       lib_deps += ' $(PROTOBUF_DEP)'
       mingw_lib_deps += ' $(PROTOBUF_DEP)'
-    for dep in lib.get('deps', []):
-      libs = libs + ' -l' + dep
-      lib_deps = lib_deps + ' $(LIBDIR)/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)'
-      mingw_libs = mingw_libs + ' -l' + dep + '-imp'
-      mingw_lib_deps = mingw_lib_deps + ' $(LIBDIR)/$(CONFIG)/' + dep + '.$(SHARED_EXT)'
+    if lib.get('deps_linkage', None) == 'static':
+      for dep in lib.get('deps', []):
+        lib_archive = '$(LIBDIR)/$(CONFIG)/lib' + dep + '.a'
+        common = common + ' ' + lib_archive
+        lib_deps = lib_deps + ' ' + lib_archive
+        mingw_lib_deps = mingw_lib_deps + ' ' + lib_archive
+    else:
+      for dep in lib.get('deps', []):
+        libs = libs + ' -l' + dep
+        lib_deps = lib_deps + ' $(LIBDIR)/$(CONFIG)/lib' + dep + '.$(SHARED_EXT)'
+        mingw_libs = mingw_libs + ' -l' + dep + '-imp'
+        mingw_lib_deps = mingw_lib_deps + ' $(LIBDIR)/$(CONFIG)/' + dep + '.$(SHARED_EXT)'
 
     security = lib.get('secure', 'check')
     if security == True:
diff --git a/templates/grpc.gemspec.template b/templates/grpc.gemspec.template
new file mode 100644
index 0000000000000000000000000000000000000000..fdf87ee13fd14090fd1c1b56b4f251285e36465a
--- /dev/null
+++ b/templates/grpc.gemspec.template
@@ -0,0 +1,58 @@
+%YAML 1.2
+--- |
+  # -*- ruby -*-
+  # encoding: utf-8
+  $LOAD_PATH.push File.expand_path('../src/ruby/lib', __FILE__)
+  require 'grpc/version'
+
+  Gem::Specification.new do |s|
+    s.name          = 'grpc'
+    s.version       = GRPC::VERSION
+    s.authors       = ['gRPC Authors']
+    s.email         = 'temiola@google.com'
+    s.homepage      = 'https://github.com/google/grpc/tree/master/src/ruby'
+    s.summary       = 'GRPC system in Ruby'
+    s.description   = 'Send RPCs from Ruby using GRPC'
+    s.license       = 'BSD-3-Clause'
+
+    s.required_ruby_version = '>= 2.0.0'
+    s.requirements << 'libgrpc ~> 0.11.0 needs to be installed'
+
+    s.files = %w( Rakefile Makefile )
+    s.files += %w( etc/roots.pem )
+    s.files += Dir.glob('src/ruby/bin/**/*')
+    s.files += Dir.glob('src/ruby/ext/**/*')
+    s.files += Dir.glob('src/ruby/lib/**/*')
+    s.files += Dir.glob('src/ruby/pb/**/*')
+    s.files += Dir.glob('include/grpc/**/*')
+    s.test_files = Dir.glob('src/ruby/spec/**/*')
+    s.bindir = 'src/ruby/bin'
+    ${'%'}w(math noproto).each do |b|
+      s.executables += ["#{b}_client.rb", "#{b}_server.rb"]
+    end
+    s.executables += %w(grpc_ruby_interop_client grpc_ruby_interop_server)
+    s.require_paths = %w( src/ruby/bin src/ruby/lib src/ruby/pb )
+    s.platform      = Gem::Platform::RUBY
+
+    s.add_dependency 'google-protobuf', '~> 3.0.0alpha.1.1'
+    s.add_dependency 'googleauth', '~> 0.5.1'
+
+    s.add_development_dependency 'bundler', '~> 1.9'
+    s.add_development_dependency 'logging', '~> 2.0'
+    s.add_development_dependency 'simplecov', '~> 0.9'
+    s.add_development_dependency 'rake', '~> 10.4'
+    s.add_development_dependency 'rake-compiler', '~> 0.9'
+    s.add_development_dependency 'rspec', '~> 3.2'
+    s.add_development_dependency 'rubocop', '~> 0.30.0'
+    s.add_development_dependency 'signet', '~>0.7.0'
+
+    s.extensions = %w(src/ruby/ext/grpc/extconf.rb)
+
+    % for lib in libs:
+    % if lib.name in ('gpr', 'grpc'):
+    % for file in lib.public_headers + lib.headers + lib.src:
+    s.files += %w( ${file} )
+    % endfor
+    % endif
+    % endfor
+  end
diff --git a/templates/package.json.template b/templates/package.json.template
new file mode 100644
index 0000000000000000000000000000000000000000..ec6827ef7663020f6b98733370e15c02f8cbc26b
--- /dev/null
+++ b/templates/package.json.template
@@ -0,0 +1,74 @@
+%YAML 1.2
+--- |
+  {
+    "name": "grpc",
+    "version": "0.12.0",
+    "author": "Google Inc.",
+    "description": "gRPC Library for Node",
+    "homepage": "http://www.grpc.io/",
+    "repository": {
+      "type": "git",
+      "url": "https://github.com/grpc/grpc.git"
+    },
+    "bugs": "https://github.com/grpc/grpc/issues",
+    "contributors": [
+      {
+        "name": "Michael Lumish",
+        "email": "mlumish@google.com"
+      }
+    ],
+    "directories": {
+      "lib": "src/node/src"
+    },
+    "scripts": {
+      "lint": "node ./node_modules/jshint/bin/jshint src/node/src src/node/test src/node/interop src/node/index.js",
+      "test": "./node_modules/.bin/mocha src/node/test && npm run-script lint",
+      "gen_docs": "./node_modules/.bin/jsdoc -c src/node/jsdoc_conf.json",
+      "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha src/node/test"
+    },
+    "dependencies": {
+      "bindings": "^1.2.0",
+      "lodash": "^3.9.3",
+      "nan": "^2.0.0",
+      "protobufjs": "^4.0.0"
+    },
+    "devDependencies": {
+      "async": "^1.5.0",
+      "google-auth-library": "^0.9.2",
+      "istanbul": "^0.3.21",
+      "jsdoc": "^3.3.2",
+      "jshint": "^2.5.0",
+      "minimist": "^1.1.0",
+      "mocha": "^2.3.4",
+      "mocha-jenkins-reporter": "^0.1.9",
+      "mustache": "^2.0.0",
+      "poisson-process": "^0.2.1"
+    },
+    "engines": {
+      "node": ">=0.10.13"
+    },
+    "files": [
+      "LICENSE",
+      "src/node/README.md",
+      "src/node/health_check",
+      "src/proto",
+      "etc",
+      % for module in node_modules:
+      % for file in module.headers + module.src + module.js:
+      "${file}",
+      % endfor
+      % for dep in module.transitive_deps:
+      % for lib in libs:
+      % if lib.name == dep:
+      % for file in lib.get('public_headers', []) + lib.headers + lib.src:
+      "${file}",
+      % endfor
+      % endif
+      % endfor
+      % endfor
+      % endfor
+      "binding.gyp"
+    ],
+    "main": "src/node/index.js",
+    "license": "BSD-3-Clause"
+  }
diff --git a/test/core/transport/chttp2/bin_encoder_test.c b/test/core/transport/chttp2/bin_encoder_test.c
index 1ffd8ed3cbf0cb9ab161597f728548c0fa1852f1..d1838075be01fe9f2dcdf4ef957a815b3817d8dd 100644
--- a/test/core/transport/chttp2/bin_encoder_test.c
+++ b/test/core/transport/chttp2/bin_encoder_test.c
@@ -1,6 +1,6 @@
 /*
  *
- * Copyright 2015, Google Inc.
+ * Copyright 2015-2016, Google Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,6 +35,10 @@
 
 #include <string.h>
 
+/* This is here for grpc_is_binary_header
+ * TODO(murgatroid99): Remove this
+ */
+#include <grpc/grpc.h>
 #include "src/core/support/string.h"
 #include <grpc/support/alloc.h>
 #include <grpc/support/log.h>
diff --git a/test/cpp/end2end/client_crash_test.cc b/test/cpp/end2end/client_crash_test.cc
index d0efabc5ca20729da72bc30cdcd8566ce2eae3be..5ca5cd7e999641291dcedc571df5c643b43079da 100644
--- a/test/cpp/end2end/client_crash_test.cc
+++ b/test/cpp/end2end/client_crash_test.cc
@@ -155,4 +155,4 @@ int main(int argc, char** argv) {
     }
   }
   return 0;
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/client_crash_test_server.cc b/test/cpp/end2end/client_crash_test_server.cc
index 8219631c74f9d75de52028fc500d43cce9f998f4..1ec641cb5a3a1562106e797ac97a6840159955ac 100644
--- a/test/cpp/end2end/client_crash_test_server.cc
+++ b/test/cpp/end2end/client_crash_test_server.cc
@@ -90,4 +90,4 @@ int main(int argc, char** argv) {
   grpc::testing::RunServer();
 
   return 0;
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index 82eb566908007f07b329d1b67d3550449f7e94a3..f8027bcf0b554d14805da003b4290c4247d8a195 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -1210,4 +1210,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/mock_test.cc b/test/cpp/end2end/mock_test.cc
index d08ed9bcc5481ce2af98ca417c3f90e14ad4075c..1d29096b86def9da8ed21dee9f16668febed39d3 100644
--- a/test/cpp/end2end/mock_test.cc
+++ b/test/cpp/end2end/mock_test.cc
@@ -281,4 +281,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/server_crash_test.cc b/test/cpp/end2end/server_crash_test.cc
index c29bc7c44f21e07bc3765b428812d47279b1596e..9bf94236667fe818b521be62e24d45c4699e6487 100644
--- a/test/cpp/end2end/server_crash_test.cc
+++ b/test/cpp/end2end/server_crash_test.cc
@@ -171,4 +171,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/server_crash_test_client.cc b/test/cpp/end2end/server_crash_test_client.cc
index 3a99ab360e62d40619c5c8586c95b782d893a6bf..b0e6ac6f56dba417ae343684efc498544c4f153b 100644
--- a/test/cpp/end2end/server_crash_test_client.cc
+++ b/test/cpp/end2end/server_crash_test_client.cc
@@ -87,4 +87,4 @@ int main(int argc, char** argv) {
   }
 
   return 0;
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/shutdown_test.cc b/test/cpp/end2end/shutdown_test.cc
index c03cf9fef33eb4687b0f7e8e39463d7795245721..dbbda3ac516e13aad0f7becf866cab76e31764be 100644
--- a/test/cpp/end2end/shutdown_test.cc
+++ b/test/cpp/end2end/shutdown_test.cc
@@ -152,4 +152,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/streaming_throughput_test.cc b/test/cpp/end2end/streaming_throughput_test.cc
index ef2b53f36f3930b8b1a5e7aff335385bd2c33716..4777b88747349cfd40df09d2665187094dc8a1dd 100644
--- a/test/cpp/end2end/streaming_throughput_test.cc
+++ b/test/cpp/end2end/streaming_throughput_test.cc
@@ -204,4 +204,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc
index 592c427d5d80b84b603ef6e9e0693a78dd464fb4..4e8860e843232428eba902a8658fafd6cf2088b9 100644
--- a/test/cpp/end2end/thread_stress_test.cc
+++ b/test/cpp/end2end/thread_stress_test.cc
@@ -234,4 +234,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/end2end/zookeeper_test.cc b/test/cpp/end2end/zookeeper_test.cc
index cec6e891be7e9b8e80f5a3122c3f95f77e9f7eb3..bbf1b0edc12cba48c8a749eb4cf373546ceb7876 100644
--- a/test/cpp/end2end/zookeeper_test.cc
+++ b/test/cpp/end2end/zookeeper_test.cc
@@ -216,4 +216,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h
index 0159f4f1e67e2114503cdaf598153314c33dc72b..15cfd7a2d71bd0fb6969f1b9bf0dbb6ea58f3d1b 100644
--- a/test/cpp/qps/client.h
+++ b/test/cpp/qps/client.h
@@ -377,4 +377,4 @@ std::unique_ptr<Client> CreateGenericAsyncStreamingClient(
 }  // namespace testing
 }  // namespace grpc
 
-#endif
\ No newline at end of file
+#endif
diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index 3e2317c6d460f067c88cbd53a1990fbaea9083cf..f270cd09875e9998ae8b3b5f01eddd1079e9b2eb 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -599,4 +599,4 @@ std::unique_ptr<Client> CreateGenericAsyncStreamingClient(
 }
 
 }  // namespace testing
-}  // namespace grpc
\ No newline at end of file
+}  // namespace grpc
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index 1045915b8327a95c2f4938dcbef3d808c19763f6..92fbf240ce2d2fe6028dd3b8493fe62f1fb6ddea 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -172,4 +172,4 @@ std::unique_ptr<Client> CreateSynchronousStreamingClient(
 }
 
 }  // namespace testing
-}  // namespace grpc
\ No newline at end of file
+}  // namespace grpc
diff --git a/test/cpp/qps/generic_async_streaming_ping_pong_test.cc b/test/cpp/qps/generic_async_streaming_ping_pong_test.cc
index 7a1275054a6747e10769547413e6a1832a6edb87..2b2e1c820f5c63cb1249a9244d1993480198fffd 100644
--- a/test/cpp/qps/generic_async_streaming_ping_pong_test.cc
+++ b/test/cpp/qps/generic_async_streaming_ping_pong_test.cc
@@ -79,4 +79,4 @@ int main(int argc, char** argv) {
 
   grpc::testing::RunGenericAsyncStreamingPingPong();
   return 0;
-}
\ No newline at end of file
+}
diff --git a/test/cpp/qps/qps_driver.cc b/test/cpp/qps/qps_driver.cc
index c70db188d9c93b847f2c796554fc060a32b3b6b0..eb0a7a5f4e6b82e97bd5a88cdeba4ba3c78dc676 100644
--- a/test/cpp/qps/qps_driver.cc
+++ b/test/cpp/qps/qps_driver.cc
@@ -184,4 +184,4 @@ int main(int argc, char** argv) {
   grpc::testing::QpsDriver();
 
   return 0;
-}
\ No newline at end of file
+}
diff --git a/test/cpp/qps/qps_worker.cc b/test/cpp/qps/qps_worker.cc
index e7714c0bb30f75b3dc442537aa86daaa8daee44a..bed867e1a4a86357a7bf1ecd8dadd5bf420aae45 100644
--- a/test/cpp/qps/qps_worker.cc
+++ b/test/cpp/qps/qps_worker.cc
@@ -239,4 +239,4 @@ QpsWorker::QpsWorker(int driver_port) {
 QpsWorker::~QpsWorker() {}
 
 }  // namespace testing
-}  // namespace grpc
\ No newline at end of file
+}  // namespace grpc
diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h
index daee7c36634a2c1255c33c0900e583cf0e1b3999..32a3e850263c3a1c86ee5907d71d9c963b5087e4 100644
--- a/test/cpp/qps/server.h
+++ b/test/cpp/qps/server.h
@@ -112,4 +112,4 @@ std::unique_ptr<Server> CreateAsyncServer(const ServerConfig& config);
 }  // namespace testing
 }  // namespace grpc
 
-#endif
\ No newline at end of file
+#endif
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index 1ae88d7323e9e7a8c7adbc5f427e45bd93ebc1ef..d530dac86b3da27adafe43e64c99ebe793232385 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -397,4 +397,4 @@ std::unique_ptr<Server> CreateAsyncGenericServer(const ServerConfig &config) {
 }
 
 }  // namespace testing
-}  // namespace grpc
\ No newline at end of file
+}  // namespace grpc
diff --git a/test/cpp/util/cli_call.cc b/test/cpp/util/cli_call.cc
index 28f5e47b46710fcf64aed93d870086b0aa487c26..5e29e7a1d393b68cebe80dc97571efab65f59462 100644
--- a/test/cpp/util/cli_call.cc
+++ b/test/cpp/util/cli_call.cc
@@ -108,4 +108,4 @@ Status CliCall::Call(std::shared_ptr<grpc::Channel> channel,
 }
 
 }  // namespace testing
-}  // namespace grpc
\ No newline at end of file
+}  // namespace grpc
diff --git a/test/cpp/util/cli_call_test.cc b/test/cpp/util/cli_call_test.cc
index 207371dce5e590b9084722fd1152821d2d5bfd35..5fdf5193209872236f3c243f02b9de5fa77059bf 100644
--- a/test/cpp/util/cli_call_test.cc
+++ b/test/cpp/util/cli_call_test.cc
@@ -140,4 +140,4 @@ int main(int argc, char** argv) {
   grpc_test_init(argc, argv);
   ::testing::InitGoogleTest(&argc, argv);
   return RUN_ALL_TESTS();
-}
\ No newline at end of file
+}
diff --git a/tools/distrib/check_copyright.py b/tools/distrib/check_copyright.py
index 5e948e2deeb6f8827c56600cf606f703b98f3f73..0c0669083a0af1075874a262892e83819027a5a4 100755
--- a/tools/distrib/check_copyright.py
+++ b/tools/distrib/check_copyright.py
@@ -104,7 +104,7 @@ RE_LICENSE = dict(
 
 def load(name):
   with open(name) as f:
-    return '\n'.join(line.rstrip() for line in f.read().splitlines())
+    return f.read()
 
 def save(name, text):
   with open(name, 'w') as f:
@@ -161,4 +161,3 @@ for filename in subprocess.check_output('git ls-tree -r --name-only -r HEAD',
     ok = False
 
 sys.exit(0 if ok else 1)
-
diff --git a/tools/distrib/clang_format_code.sh b/tools/distrib/clang_format_code.sh
index 612074acdf74baa62b4bd0b639ee21167ac8d4c4..6bfa278cae6ddd1e87f71d000dec0c21d10c0763 100755
--- a/tools/distrib/clang_format_code.sh
+++ b/tools/distrib/clang_format_code.sh
@@ -38,4 +38,3 @@ docker build -t grpc_clang_format tools/dockerfile/grpc_clang_format
 
 # run clang-format against the checked out codebase
 docker run -e TEST=$TEST --rm=true -v ${HOST_GIT_ROOT:-`pwd`}:/local-code -t grpc_clang_format /clang_format_all_the_things.sh
-
diff --git a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
index ededc6e80926dd593d48b7fe0a44264d763d3ff1..87445c71ce7474ec798a7e407762fa646cca292c 100755
--- a/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
+++ b/tools/dockerfile/grpc_clang_format/clang_format_all_the_things.sh
@@ -65,4 +65,3 @@ else
     false
   fi
 fi
-
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index de1d3335a730d7c7bce96761d15120459feadd5a..e533ec312605884fa9c46ebb04e88d7f7840065d 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -1022,6 +1022,7 @@ src/core/surface/metadata_array.c \
 src/core/surface/server.c \
 src/core/surface/server_chttp2.c \
 src/core/surface/server_create.c \
+src/core/surface/validate_metadata.c \
 src/core/surface/version.c \
 src/core/transport/byte_stream.c \
 src/core/transport/chttp2/alpn.c \
diff --git a/tools/jenkins/build_interop_stress_image.sh b/tools/jenkins/build_interop_stress_image.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6b22dce6c02d0e4fa31e44dab2d1e0b9d3e8b042
--- /dev/null
+++ b/tools/jenkins/build_interop_stress_image.sh
@@ -0,0 +1,86 @@
+#!/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.
+#
+# This script is invoked by run_interop_tests.py to build the docker image
+# for interop testing. You should never need to call this script on your own.
+
+set -x
+
+# Params:
+#  INTEROP_IMAGE - name of tag of the final interop image
+#  BASE_NAME - base name used to locate the base Dockerfile and build script
+#  TTY_FLAG - optional -t flag to make docker allocate tty
+#  BUILD_INTEROP_DOCKER_EXTRA_ARGS - optional args to be passed to the
+#    docker run command
+
+cd `dirname $0`/../..
+GRPC_ROOT=`pwd`
+MOUNT_ARGS="-v $GRPC_ROOT:/var/local/jenkins/grpc:ro"
+
+mkdir -p /tmp/ccache
+
+# Mount service account dir if available.
+# If service_directory does not contain the service account JSON file,
+# some of the tests will fail.
+if [ -e $HOME/service_account ]
+then
+  MOUNT_ARGS+=" -v $HOME/service_account:/var/local/jenkins/service_account:ro"
+fi
+
+# Use image name based on Dockerfile checksum
+BASE_IMAGE=${BASE_NAME}_base:`sha1sum tools/jenkins/$BASE_NAME/Dockerfile | cut -f1 -d\ `
+
+# Make sure base docker image has been built. Should be instantaneous if so.
+docker build -t $BASE_IMAGE --force-rm=true tools/jenkins/$BASE_NAME || exit $?
+
+# Create a local branch so the child Docker script won't complain
+git branch -f jenkins-docker
+
+CONTAINER_NAME="build_${BASE_NAME}_$(uuidgen)"
+
+# Prepare image for interop tests, commit it on success.
+(docker run \
+  -e CCACHE_DIR=/tmp/ccache \
+  -e THIS_IS_REALLY_NEEDED='see https://github.com/docker/docker/issues/14203 for why docker is awful' \
+  -i $TTY_FLAG \
+  $MOUNT_ARGS \
+  $BUILD_INTEROP_DOCKER_EXTRA_ARGS \
+  -v /tmp/ccache:/tmp/ccache \
+  --name=$CONTAINER_NAME \
+  $BASE_IMAGE \
+  bash -l /var/local/jenkins/grpc/tools/jenkins/$BASE_NAME/build_interop_stress.sh \
+  && docker commit $CONTAINER_NAME $INTEROP_IMAGE \
+  && echo "Successfully built image $INTEROP_IMAGE")
+EXITCODE=$?
+
+# remove intermediate container, possibly killing it first
+docker rm -f $CONTAINER_NAME
+
+exit $EXITCODE
diff --git a/tools/jenkins/grpc_interop_stress_cxx/Dockerfile b/tools/jenkins/grpc_interop_stress_cxx/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..1fa190753304cc86466d738391f8ef89c0e8c055
--- /dev/null
+++ b/tools/jenkins/grpc_interop_stress_cxx/Dockerfile
@@ -0,0 +1,75 @@
+# 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.
+
+# A work-in-progress Dockerfile that allows running gRPC test suites
+# inside a docker container.
+
+FROM debian:jessie
+
+# Install Git.
+RUN apt-get update && apt-get install -y \
+  autoconf \
+  autotools-dev \
+  build-essential \
+  bzip2 \
+  ccache \
+  curl \
+  gcc \
+  gcc-multilib \
+  git \
+  gyp \
+  libc6 \
+  libc6-dbg \
+  libc6-dev \
+  libgtest-dev \
+  libtool \
+  make \
+  strace \
+  python-dev \
+  python-setuptools \
+  python-yaml \
+  telnet \
+  unzip \
+  wget \
+  zip && apt-get clean
+
+# Prepare ccache
+RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
+RUN ln -s /usr/bin/ccache /usr/local/bin/g++
+RUN ln -s /usr/bin/ccache /usr/local/bin/cc
+RUN ln -s /usr/bin/ccache /usr/local/bin/c++
+RUN ln -s /usr/bin/ccache /usr/local/bin/clang
+RUN ln -s /usr/bin/ccache /usr/local/bin/clang++
+
+##################
+# C++ dependencies
+RUN apt-get update && apt-get -y install libgflags-dev libgtest-dev libc++-dev clang
+
+# Define the default command.
+CMD ["bash"]
diff --git a/tools/jenkins/grpc_interop_stress_cxx/build_interop_stress.sh b/tools/jenkins/grpc_interop_stress_cxx/build_interop_stress.sh
new file mode 100755
index 0000000000000000000000000000000000000000..01f9a9c02e772715c423b216a38391a175a33019
--- /dev/null
+++ b/tools/jenkins/grpc_interop_stress_cxx/build_interop_stress.sh
@@ -0,0 +1,45 @@
+#!/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.
+#
+# Builds C++ interop server and client in a base image.
+set -e
+
+mkdir -p /var/local/git
+git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc
+
+# copy service account keys if available
+cp -r /var/local/jenkins/service_account $HOME || true
+
+cd /var/local/git/grpc
+
+make install-certs
+
+# build C++ interop stress client, interop client and server
+make stress_test interop_client interop_server
diff --git a/tools/jenkins/run_interop_stress.sh b/tools/jenkins/run_interop_stress.sh
new file mode 100755
index 0000000000000000000000000000000000000000..22d81db8bcdf217f0f65371301c6e0faae710518
--- /dev/null
+++ b/tools/jenkins/run_interop_stress.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env 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.
+#
+# This script is invoked by Jenkins and runs interop test suite.
+set -ex
+
+# Enter the gRPC repo root
+cd $(dirname $0)/../..
+
+tools/run_tests/run_stress_tests.py -l all -s all -j 12 $@ || true
diff --git a/tools/run_tests/build_ruby.sh b/tools/run_tests/build_ruby.sh
index 6d23c316c5ad1e8781d4685ff34a82d6005104a3..8acb40dc62a981bb4a68e4b393bfbdfc1f962bfc 100755
--- a/tools/run_tests/build_ruby.sh
+++ b/tools/run_tests/build_ruby.sh
@@ -34,7 +34,7 @@ set -ex
 export GRPC_CONFIG=${CONFIG:-opt}
 
 # change to grpc's ruby directory
-cd $(dirname $0)/../../src/ruby
+cd $(dirname $0)/../..
 
 rm -rf ./tmp
 rake compile:grpc
diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py
index 40bbe3cc3ca0ada2659a126345d49c54fcd74e42..10566d6bc86577b79fab2add44378fb2bd3fce39 100755
--- a/tools/run_tests/run_interop_tests.py
+++ b/tools/run_tests/run_interop_tests.py
@@ -1,5 +1,5 @@
 #!/usr/bin/env python
-# Copyright 2015, Google Inc.
+# Copyright 2015-2016, Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -549,7 +549,7 @@ def aggregate_http2_results(stdout):
   match = re.search(r'\{"cases[^\]]*\]\}', stdout)
   if not match:
     return None
-    
+
   results = json.loads(match.group(0))
   skipped = 0
   passed = 0
@@ -742,7 +742,7 @@ try:
       for test_case in _HTTP2_TEST_CASES:
         if server_name == "go":
           # TODO(carl-mastrangelo): Reenable after https://github.com/grpc/grpc-go/issues/434
-          continue 
+          continue
         test_job = cloud_to_cloud_jobspec(http2Interop,
                                           test_case,
                                           server_name,
@@ -771,7 +771,7 @@ try:
       job[0].http2results = aggregate_http2_results(job[0].message)
 
   report_utils.render_interop_html_report(
-      set([str(l) for l in languages]), servers, _TEST_CASES, _AUTH_TEST_CASES, 
+      set([str(l) for l in languages]), servers, _TEST_CASES, _AUTH_TEST_CASES,
       _HTTP2_TEST_CASES, resultset, num_failures,
       args.cloud_to_prod_auth or args.cloud_to_prod, args.http2_interop)
 
diff --git a/tools/run_tests/run_ruby.sh b/tools/run_tests/run_ruby.sh
index b82ce52af3821d3a11f5a5e6e97a12a4ef1a7ffc..73a84ac361f4e11c7a1cc19d2527fa813a2f5cc9 100755
--- a/tools/run_tests/run_ruby.sh
+++ b/tools/run_tests/run_ruby.sh
@@ -31,6 +31,6 @@
 set -ex
 
 # change to grpc repo root
-cd $(dirname $0)/../../src/ruby
+cd $(dirname $0)/../..
 
 rake
diff --git a/tools/run_tests/run_stress_tests.py b/tools/run_tests/run_stress_tests.py
new file mode 100755
index 0000000000000000000000000000000000000000..b01a07af9012c52132830bd95ebd93d1d04740a6
--- /dev/null
+++ b/tools/run_tests/run_stress_tests.py
@@ -0,0 +1,328 @@
+#!/usr/bin/env python
+# 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.
+"""Run stress test in C++"""
+
+import argparse
+import atexit
+import dockerjob
+import itertools
+import jobset
+import json
+import multiprocessing
+import os
+import re
+import subprocess
+import sys
+import tempfile
+import time
+import uuid
+
+# Docker doesn't clean up after itself, so we do it on exit.
+atexit.register(lambda: subprocess.call(['stty', 'echo']))
+
+ROOT = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '../..'))
+os.chdir(ROOT)
+
+_DEFAULT_SERVER_PORT = 8080
+_DEFAULT_METRICS_PORT = 8081
+_DEFAULT_TEST_CASES = 'empty_unary:20,large_unary:20,client_streaming:20,server_streaming:20,empty_stream:20'
+_DEFAULT_NUM_CHANNELS_PER_SERVER = 5
+_DEFAULT_NUM_STUBS_PER_CHANNEL = 10
+
+# 15 mins default
+_DEFAULT_TEST_DURATION_SECS = 900
+
+class CXXLanguage:
+
+  def __init__(self):
+    self.client_cwd = None
+    self.server_cwd = None
+    self.safename = 'cxx'
+
+  def client_cmd(self, args):
+    return ['bins/opt/stress_test'] + args
+
+  def server_cmd(self, args):
+    return ['bins/opt/interop_server'] + args
+
+  def global_env(self):
+    return {}
+
+  def __str__(self):
+    return 'c++'
+
+
+_LANGUAGES = {'c++': CXXLanguage(),}
+
+# languages supported as cloud_to_cloud servers
+_SERVERS = ['c++']
+
+DOCKER_WORKDIR_ROOT = '/var/local/git/grpc'
+
+
+def docker_run_cmdline(cmdline, image, docker_args=[], cwd=None, environ=None):
+  """Wraps given cmdline array to create 'docker run' cmdline from it."""
+  docker_cmdline = ['docker', 'run', '-i', '--rm=true']
+
+  # turn environ into -e docker args
+  if environ:
+    for k, v in environ.iteritems():
+      docker_cmdline += ['-e', '%s=%s' % (k, v)]
+
+  # set working directory
+  workdir = DOCKER_WORKDIR_ROOT
+  if cwd:
+    workdir = os.path.join(workdir, cwd)
+  docker_cmdline += ['-w', workdir]
+
+  docker_cmdline += docker_args + [image] + cmdline
+  return docker_cmdline
+
+
+def bash_login_cmdline(cmdline):
+  """Creates bash -l -c cmdline from args list."""
+  # Use login shell:
+  # * rvm and nvm require it
+  # * makes error messages clearer if executables are missing
+  return ['bash', '-l', '-c', ' '.join(cmdline)]
+
+
+def _job_kill_handler(job):
+  if job._spec.container_name:
+    dockerjob.docker_kill(job._spec.container_name)
+    # When the job times out and we decide to kill it,
+    # we need to wait a before restarting the job
+    # to prevent "container name already in use" error.
+    # TODO(jtattermusch): figure out a cleaner way to to this.
+    time.sleep(2)
+
+
+def cloud_to_cloud_jobspec(language,
+                           test_cases,
+                           server_addresses,
+                           test_duration_secs,
+                           num_channels_per_server,
+                           num_stubs_per_channel,
+                           metrics_port,
+                           docker_image=None):
+  """Creates jobspec for cloud-to-cloud interop test"""
+  cmdline = bash_login_cmdline(language.client_cmd([
+      '--test_cases=%s' % test_cases, '--server_addresses=%s' %
+      server_addresses, '--test_duration_secs=%s' % test_duration_secs,
+      '--num_stubs_per_channel=%s' % num_stubs_per_channel,
+      '--num_channels_per_server=%s' % num_channels_per_server,
+      '--metrics_port=%s' % metrics_port
+  ]))
+  print cmdline
+  cwd = language.client_cwd
+  environ = language.global_env()
+  if docker_image:
+    container_name = dockerjob.random_name('interop_client_%s' %
+                                           language.safename)
+    cmdline = docker_run_cmdline(
+        cmdline,
+        image=docker_image,
+        environ=environ,
+        cwd=cwd,
+        docker_args=['--net=host', '--name', container_name])
+    cwd = None
+
+  test_job = jobset.JobSpec(cmdline=cmdline,
+                            cwd=cwd,
+                            environ=environ,
+                            shortname='cloud_to_cloud:%s:%s_server:stress_test' % (
+                                language, server_name),
+                            timeout_seconds=test_duration_secs * 2,
+                            flake_retries=0,
+                            timeout_retries=0,
+                            kill_handler=_job_kill_handler)
+  test_job.container_name = container_name
+  return test_job
+
+
+def server_jobspec(language, docker_image, test_duration_secs):
+  """Create jobspec for running a server"""
+  container_name = dockerjob.random_name('interop_server_%s' %
+                                         language.safename)
+  cmdline = bash_login_cmdline(language.server_cmd(['--port=%s' %
+                                                    _DEFAULT_SERVER_PORT]))
+  environ = language.global_env()
+  docker_cmdline = docker_run_cmdline(
+      cmdline,
+      image=docker_image,
+      cwd=language.server_cwd,
+      environ=environ,
+      docker_args=['-p', str(_DEFAULT_SERVER_PORT), '--name', container_name])
+
+  server_job = jobset.JobSpec(cmdline=docker_cmdline,
+                              environ=environ,
+                              shortname='interop_server_%s' % language,
+                              timeout_seconds=test_duration_secs * 3)
+  server_job.container_name = container_name
+  return server_job
+
+
+def build_interop_stress_image_jobspec(language, tag=None):
+  """Creates jobspec for building stress test docker image for a language"""
+  if not tag:
+    tag = 'grpc_interop_stress_%s:%s' % (language.safename, uuid.uuid4())
+  env = {'INTEROP_IMAGE': tag,
+         'BASE_NAME': 'grpc_interop_stress_%s' % language.safename}
+  build_job = jobset.JobSpec(cmdline=['tools/jenkins/build_interop_stress_image.sh'],
+                             environ=env,
+                             shortname='build_docker_%s' % (language),
+                             timeout_seconds=30 * 60)
+  build_job.tag = tag
+  return build_job
+
+argp = argparse.ArgumentParser(description='Run stress tests.')
+argp.add_argument('-l',
+                  '--language',
+                  choices=['all'] + sorted(_LANGUAGES),
+                  nargs='+',
+                  default=['all'],
+                  help='Clients to run.')
+argp.add_argument('-j', '--jobs', default=multiprocessing.cpu_count(), type=int)
+argp.add_argument(
+    '-s',
+    '--server',
+    choices=['all'] + sorted(_SERVERS),
+    action='append',
+    help='Run cloud_to_cloud servers in a separate docker ' + 'image.',
+    default=[])
+argp.add_argument(
+    '--override_server',
+    action='append',
+    type=lambda kv: kv.split('='),
+    help=
+    'Use servername=HOST:PORT to explicitly specify a server. E.g. '
+    'csharp=localhost:50000',
+    default=[])
+argp.add_argument('--test_duration_secs',
+                  help='The duration of the test in seconds',
+                  default=_DEFAULT_TEST_DURATION_SECS)
+
+args = argp.parse_args()
+
+servers = set(
+    s
+    for s in itertools.chain.from_iterable(_SERVERS if x == 'all' else [x]
+                                           for x in args.server))
+
+languages = set(_LANGUAGES[l]
+                for l in itertools.chain.from_iterable(_LANGUAGES.iterkeys(
+                ) if x == 'all' else [x] for x in args.language))
+
+docker_images = {}
+# languages for which to build docker images
+languages_to_build = set(
+    _LANGUAGES[k]
+    for k in set([str(l) for l in languages] + [s for s in servers]))
+build_jobs = []
+for l in languages_to_build:
+  job = build_interop_stress_image_jobspec(l)
+  docker_images[str(l)] = job.tag
+  build_jobs.append(job)
+
+if build_jobs:
+  jobset.message('START', 'Building interop docker images.', do_newline=True)
+  num_failures, _ = jobset.run(build_jobs,
+                               newline_on_success=True,
+                               maxjobs=args.jobs)
+  if num_failures == 0:
+    jobset.message('SUCCESS',
+                   'All docker images built successfully.',
+                   do_newline=True)
+  else:
+    jobset.message('FAILED',
+                   'Failed to build interop docker images.',
+                   do_newline=True)
+    for image in docker_images.itervalues():
+      dockerjob.remove_image(image, skip_nonexistent=True)
+    sys.exit(1)
+
+# Start interop servers.
+server_jobs = {}
+server_addresses = {}
+try:
+  for s in servers:
+    lang = str(s)
+    spec = server_jobspec(_LANGUAGES[lang], docker_images.get(lang), args.test_duration_secs)
+    job = dockerjob.DockerJob(spec)
+    server_jobs[lang] = job
+    server_addresses[lang] = ('localhost',
+                              job.mapped_port(_DEFAULT_SERVER_PORT))
+
+  jobs = []
+
+  for server in args.override_server:
+    server_name = server[0]
+    (server_host, server_port) = server[1].split(':')
+    server_addresses[server_name] = (server_host, server_port)
+
+  for server_name, server_address in server_addresses.iteritems():
+    (server_host, server_port) = server_address
+    for language in languages:
+      test_job = cloud_to_cloud_jobspec(
+          language,
+          _DEFAULT_TEST_CASES,
+          ('%s:%s' % (server_host, server_port)),
+          args.test_duration_secs,
+          _DEFAULT_NUM_CHANNELS_PER_SERVER,
+          _DEFAULT_NUM_STUBS_PER_CHANNEL,
+          _DEFAULT_METRICS_PORT,
+          docker_image=docker_images.get(str(language)))
+      jobs.append(test_job)
+
+  if not jobs:
+    print 'No jobs to run.'
+    for image in docker_images.itervalues():
+      dockerjob.remove_image(image, skip_nonexistent=True)
+    sys.exit(1)
+
+  num_failures, resultset = jobset.run(jobs,
+                                       newline_on_success=True,
+                                       maxjobs=args.jobs)
+  if num_failures:
+    jobset.message('FAILED', 'Some tests failed', do_newline=True)
+  else:
+    jobset.message('SUCCESS', 'All tests passed', do_newline=True)
+
+finally:
+  # Check if servers are still running.
+  for server, job in server_jobs.iteritems():
+    if not job.is_running():
+      print 'Server "%s" has exited prematurely.' % server
+
+  dockerjob.finish_jobs([j for j in server_jobs.itervalues()])
+
+  for image in docker_images.itervalues():
+    print 'Removing docker image %s' % image
+    dockerjob.remove_image(image)
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index aeac3fa0db8d6630f92a4229eb0a71fb569b2316..4a16eb3dd42853795f3ddbcdf8f6f67ecb215326 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -3255,6 +3255,7 @@
       "src/core/surface/server_chttp2.c", 
       "src/core/surface/server_create.c", 
       "src/core/surface/surface_trace.h", 
+      "src/core/surface/validate_metadata.c", 
       "src/core/surface/version.c", 
       "src/core/transport/byte_stream.c", 
       "src/core/transport/byte_stream.h", 
@@ -3736,6 +3737,7 @@
       "src/core/surface/server_chttp2.c", 
       "src/core/surface/server_create.c", 
       "src/core/surface/surface_trace.h", 
+      "src/core/surface/validate_metadata.c", 
       "src/core/surface/version.c", 
       "src/core/transport/byte_stream.c", 
       "src/core/transport/byte_stream.h", 
diff --git a/vsprojects/grpc_csharp_ext.sln b/vsprojects/grpc_csharp_ext.sln
index 1c824963f210e5c04bcc884b231b5abb0c427414..11d2204ba5887aac5930eaa93fefcad9b15af952 100644
--- a/vsprojects/grpc_csharp_ext.sln
+++ b/vsprojects/grpc_csharp_ext.sln
@@ -29,8 +29,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grpc_csharp_ext", "vcxproj\
         	lib = "True"
 	EndProjectSection
 	ProjectSection(ProjectDependencies) = postProject
-		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
 		{29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+		{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
 	EndProjectSection
 EndProject
 Global
diff --git a/vsprojects/nuget_package/buildall.bat b/vsprojects/nuget_package/buildall.bat
index 65aac3aa68595aa25fa289a3c1122d5f7e110eb9..e6cd0ac421da40d3f61482648e6eae120c96f221 100644
--- a/vsprojects/nuget_package/buildall.bat
+++ b/vsprojects/nuget_package/buildall.bat
@@ -1,10 +1,10 @@
 @echo off
 
-REM setlocal
-REM call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
-REM call :build x64 Release v140 || goto :eof
-REM call :build x64 Debug v140 || goto :eof
-REM endlocal
+setlocal
+call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
+call :build x64 Release v140 || goto :eof
+call :build x64 Debug v140 || goto :eof
+endlocal
 
 setlocal
 call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86
@@ -12,11 +12,11 @@ call :build Win32 Release v140 || goto :eof
 call :build Win32 Debug v140 || goto :eof
 endlocal
 
-REM setlocal
-REM call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64
-REM call :build x64 Release v120 || goto :eof
-REM call :build x64 Debug v120 || goto :eof
-REM endlocal
+setlocal
+call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64
+call :build x64 Release v120 || goto :eof
+call :build x64 Debug v120 || goto :eof
+endlocal
 
 setlocal
 call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
@@ -24,34 +24,8 @@ call :build Win32 Release v120 || goto :eof
 call :build Win32 Debug v120 || goto :eof
 endlocal
 
-REM setlocal
-REM call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64
-REM call :build x64 Release v110 || goto :eof
-REM call :build x64 Debug v110 || goto :eof
-REM endlocal
-
-REM setlocal
-REM call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
-REM call :build Win32 Release v110 || goto :eof
-REM call :build Win32 Debug v110 || goto :eof
-REM endlocal
-
-REM setlocal
-REM call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64
-REM call :build x64 Release v100 || goto :eof
-REM call :build x64 Debug v100 || goto :eof
-REM endlocal
-
-setlocal
-call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
-call :build Win32 Release v100 || goto :eof
-call :build Win32 Debug v100 || goto :eof
-endlocal
-
 goto :eof
 
 :build
 msbuild /P:Platform=%1 /P:Configuration=%2 /P:PlatformToolset=%3 /P:OutDir=..\..\nuget_package\output\%3\%1\%2\ /P:IntDir=..\..\nuget_package\tmp\%3\%1\%2\ ..\grpc_csharp_ext.sln || goto :eof
 goto :eof
-
-
diff --git a/vsprojects/nuget_package/grpc.native.csharp.nuspec b/vsprojects/nuget_package/grpc.native.csharp.nuspec
index 0f65d1e1a1bf5890a06ee2514985c40ceb2e88af..72b9a79d89626d72aff26b5da70e5b2f08c38ba4 100644
--- a/vsprojects/nuget_package/grpc.native.csharp.nuspec
+++ b/vsprojects/nuget_package/grpc.native.csharp.nuspec
@@ -14,22 +14,19 @@
     <title>gRPC C# Native Extension</title>
     <summary>Native library required by gRPC C#</summary>
     <tags>gRPC native</tags>
-	<dependencies>
-      <dependency id="grpc.dependencies.zlib.redist" version="1.2.8.10" />
-	  <dependency id="grpc.dependencies.openssl.redist" version="1.0.204.1" />
-    </dependencies>
   </metadata>
   <files>
     <file src="grpc.native.csharp.targets" target="\build\portable-net45+netcore45+wpa81+wp8\grpc.native.csharp.targets" />
-    
-    <!-- VS 2010 -->
-    <file src="output\v100\Win32\Release\grpc_csharp_ext.dll" target="/build/native/bin/v100\Win32\Release\grpc_csharp_ext.dll" />
-    <file src="output\v100\Win32\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v100\Win32\Debug\grpc_csharp_ext.dll" />
+
     <!-- VS 2013 -->
     <file src="output\v120\Win32\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v120\Win32\Debug\grpc_csharp_ext.dll" />
     <file src="output\v120\Win32\Release\grpc_csharp_ext.dll" target="/build/native/bin/v120\Win32\Release\grpc_csharp_ext.dll" />
+    <file src="output\v120\x64\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v120\x64\Debug\grpc_csharp_ext.dll" />
+    <file src="output\v120\x64\Release\grpc_csharp_ext.dll" target="/build/native/bin/v120\x64\Release\grpc_csharp_ext.dll" />
     <!-- VS 2015 -->
     <file src="output\v140\Win32\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v140\Win32\Debug\grpc_csharp_ext.dll" />
     <file src="output\v140\Win32\Release\grpc_csharp_ext.dll" target="/build/native/bin/v140\Win32\Release\grpc_csharp_ext.dll" />
+    <file src="output\v140\x64\Debug\grpc_csharp_ext.dll" target="/build/native/bin/v140\x64\Debug\grpc_csharp_ext.dll" />
+    <file src="output\v140\x64\Release\grpc_csharp_ext.dll" target="/build/native/bin/v140\x64\Release\grpc_csharp_ext.dll" />
   </files>
 </package>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index 106c1b5f9fecf1ad6fb86608f4f399e5fa68859e..9e95675387a7ae2cbde28fab45f108f9fe5701a5 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -88,12 +88,14 @@
     <TargetName>grpc</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug-DLL|Win32'">
@@ -650,6 +652,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\server_create.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\surface\validate_metadata.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\version.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\transport\byte_stream.c">
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index 107f195d5c0adc43f471c35a734107c8e0137e80..7abbcf89b2121e8b6b1b3a5e5133ad4ad618c203 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -358,6 +358,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\server_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\surface\validate_metadata.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\version.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc_csharp_ext/grpc_csharp_ext.vcxproj b/vsprojects/vcxproj/grpc_csharp_ext/grpc_csharp_ext.vcxproj
index aa37d1dbeadc5b5703401dcdc6f5742d17485180..680008cf7d996a483af9c081e6bf8a4f23adf45a 100644
--- a/vsprojects/vcxproj/grpc_csharp_ext/grpc_csharp_ext.vcxproj
+++ b/vsprojects/vcxproj/grpc_csharp_ext/grpc_csharp_ext.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_csharp_ext</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_csharp_ext</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@@ -160,12 +162,12 @@
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
-      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
-    </ProjectReference>
     <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
       <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
     </ProjectReference>
+    <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+    </ProjectReference>
   </ItemGroup>
   <ItemGroup>
     <None Include="packages.config" />
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index 8c062c797ba09fd337ec24c7f476a2e5f8a4e4f6..1508f51b0280f381bd87d755e3f9a5d147db6b76 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -588,6 +588,8 @@
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\server_create.c">
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\surface\validate_metadata.c">
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\version.c">
     </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\transport\byte_stream.c">
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index 56d451ef29e210045f06c1f1e49cbbae7ef205e6..dee9a6b47546a62c5357b267c158db53880e5d28 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -298,6 +298,9 @@
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\server_create.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="$(SolutionDir)\..\src\core\surface\validate_metadata.c">
+      <Filter>src\core\surface</Filter>
+    </ClCompile>
     <ClCompile Include="$(SolutionDir)\..\src\core\surface\version.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
diff --git a/vsprojects/vcxproj/test/algorithm_test/algorithm_test.vcxproj b/vsprojects/vcxproj/test/algorithm_test/algorithm_test.vcxproj
index fbe4bdb370c88152b24ca7bebe481c5741ee01cc..faffd2b30d0aaad2ddb66ff851074421859d8fc8 100644
--- a/vsprojects/vcxproj/test/algorithm_test/algorithm_test.vcxproj
+++ b/vsprojects/vcxproj/test/algorithm_test/algorithm_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>algorithm_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>algorithm_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/alloc_test/alloc_test.vcxproj b/vsprojects/vcxproj/test/alloc_test/alloc_test.vcxproj
index cc929d572f84d297a10ab2d14b0646aaffe49cb3..0f8380a77388b95f70670414f670afc4b4f33abb 100644
--- a/vsprojects/vcxproj/test/alloc_test/alloc_test.vcxproj
+++ b/vsprojects/vcxproj/test/alloc_test/alloc_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>alloc_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>alloc_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/alpn_test/alpn_test.vcxproj b/vsprojects/vcxproj/test/alpn_test/alpn_test.vcxproj
index 16f129eb19d340eed0aab15d085984765d4f95e0..11890a4a44882df4e065c6cfdb0db97b13330a31 100644
--- a/vsprojects/vcxproj/test/alpn_test/alpn_test.vcxproj
+++ b/vsprojects/vcxproj/test/alpn_test/alpn_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>alpn_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>alpn_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/async_end2end_test/async_end2end_test.vcxproj b/vsprojects/vcxproj/test/async_end2end_test/async_end2end_test.vcxproj
index f12a6837421c07dd356d0e94279ddf709c6dc970..45c1c29cd6920e2f72d74612af71155789ca1b16 100644
--- a/vsprojects/vcxproj/test/async_end2end_test/async_end2end_test.vcxproj
+++ b/vsprojects/vcxproj/test/async_end2end_test/async_end2end_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>async_end2end_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>async_end2end_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/auth_property_iterator_test/auth_property_iterator_test.vcxproj b/vsprojects/vcxproj/test/auth_property_iterator_test/auth_property_iterator_test.vcxproj
index 8d28efa2f29de99796117d89f99857049cab5132..bea9ad3425d845bf77350c5b39b24d11101b5d7d 100644
--- a/vsprojects/vcxproj/test/auth_property_iterator_test/auth_property_iterator_test.vcxproj
+++ b/vsprojects/vcxproj/test/auth_property_iterator_test/auth_property_iterator_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>auth_property_iterator_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>auth_property_iterator_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/badreq_bad_client_test/badreq_bad_client_test.vcxproj b/vsprojects/vcxproj/test/badreq_bad_client_test/badreq_bad_client_test.vcxproj
index 5f326054cfd7cd39cd4d67bd8fb85bf705f226b6..9f8d80e0ba480d200f47deb9898bd9a431bad32e 100644
--- a/vsprojects/vcxproj/test/badreq_bad_client_test/badreq_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/badreq_bad_client_test/badreq_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>badreq_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>badreq_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/bin_encoder_test/bin_encoder_test.vcxproj b/vsprojects/vcxproj/test/bin_encoder_test/bin_encoder_test.vcxproj
index b59a215516e49f6225fee92faa5b866fa2eeb0a5..82998bea9372d4bd4c17d59748ea7fa09fedb342 100644
--- a/vsprojects/vcxproj/test/bin_encoder_test/bin_encoder_test.vcxproj
+++ b/vsprojects/vcxproj/test/bin_encoder_test/bin_encoder_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>bin_encoder_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>bin_encoder_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_aead_test/boringssl_aead_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_aead_test/boringssl_aead_test.vcxproj
index 0a4b2d23e3b0ac16938f49f321be0d02a2bcd4b3..870222239c8e346111c0b7a87c43f388000d9303 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_aead_test/boringssl_aead_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_aead_test/boringssl_aead_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_aead_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_aead_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_aes_test/boringssl_aes_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_aes_test/boringssl_aes_test.vcxproj
index 81460934d0f24fcbc202533143e814527df7bb19..20fc68685491e207c47f355f88f986a798539d75 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_aes_test/boringssl_aes_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_aes_test/boringssl_aes_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_aes_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_aes_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_base64_test/boringssl_base64_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_base64_test/boringssl_base64_test.vcxproj
index bc4c5bd04e1704ad432d73dfedf2ed94a2d03ba2..b986ec17665e17bfc13bf01ad08f6e965604a5d6 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_base64_test/boringssl_base64_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_base64_test/boringssl_base64_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_base64_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_base64_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_bio_test/boringssl_bio_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_bio_test/boringssl_bio_test.vcxproj
index d676a37cd4a544be012733456a4b4cf1d7828261..3119acc057a174372ad7d0cdcacee1428f07b408 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_bio_test/boringssl_bio_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_bio_test/boringssl_bio_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_bio_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_bio_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_bn_test/boringssl_bn_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_bn_test/boringssl_bn_test.vcxproj
index 55abb2ea8acf01d110868b976bebaca665f5ae85..26e2ccd8f8084d99839cf7f4c72c374677618814 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_bn_test/boringssl_bn_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_bn_test/boringssl_bn_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_bn_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_bn_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_bytestring_test/boringssl_bytestring_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_bytestring_test/boringssl_bytestring_test.vcxproj
index 25ef93c73a8cb82e4539d2159f47d75d71f9f04d..d9b387d370ccaab82c3dc52f49a7713cd16022b9 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_bytestring_test/boringssl_bytestring_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_bytestring_test/boringssl_bytestring_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_bytestring_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_bytestring_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_cipher_test/boringssl_cipher_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_cipher_test/boringssl_cipher_test.vcxproj
index 6b1eec23a56e9fa6b076476b2f11290d1415121f..a761856ead4133594a43c979eb8916ec703c7f30 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_cipher_test/boringssl_cipher_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_cipher_test/boringssl_cipher_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_cipher_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_cipher_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_cmac_test/boringssl_cmac_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_cmac_test/boringssl_cmac_test.vcxproj
index f59db05613c73762af88fe659998ee95649f4c74..5643c60f8cc5c4d93a74d9857b5913f1e894916d 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_cmac_test/boringssl_cmac_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_cmac_test/boringssl_cmac_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_cmac_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_cmac_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_constant_time_test/boringssl_constant_time_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_constant_time_test/boringssl_constant_time_test.vcxproj
index 0466f15754e5f4d6f09d45f6855498486790d374..c0a57972e7592e9e20fe6d0cb58df3381788681c 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_constant_time_test/boringssl_constant_time_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_constant_time_test/boringssl_constant_time_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_constant_time_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_constant_time_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_dh_test/boringssl_dh_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_dh_test/boringssl_dh_test.vcxproj
index 9f301eafed5b5324340476a2e920a930bb341037..f8bc4f23c0da34c4f4a9d7dd25929fe3b716b0fa 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_dh_test/boringssl_dh_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_dh_test/boringssl_dh_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_dh_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_dh_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_digest_test/boringssl_digest_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_digest_test/boringssl_digest_test.vcxproj
index 2d8da4bd4e15137b0ea090779c9eecb6b04ce96d..869a70fbdf9607ace21cd22d0630424d65e4ec5a 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_digest_test/boringssl_digest_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_digest_test/boringssl_digest_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_digest_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_digest_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_dsa_test/boringssl_dsa_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_dsa_test/boringssl_dsa_test.vcxproj
index 88ee1208d741d02eee7f04e006d9284ed59d31da..52505e6cc76d76089ce3262f0793391c3e42929b 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_dsa_test/boringssl_dsa_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_dsa_test/boringssl_dsa_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_dsa_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_dsa_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_ec_test/boringssl_ec_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_ec_test/boringssl_ec_test.vcxproj
index dfdc930ba0a6d07893ea9ea7a78728bf28b6ed5c..dfa7d23aaf7e08d6cc3a017e130224fc5f3b1f15 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_ec_test/boringssl_ec_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_ec_test/boringssl_ec_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_ec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_ec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_ecdsa_test/boringssl_ecdsa_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_ecdsa_test/boringssl_ecdsa_test.vcxproj
index b6d94560f2277d0cc24581b6e2fd7842565ce3f9..0f85a20f7a6b017cdc64bdf22dbba28b10028c72 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_ecdsa_test/boringssl_ecdsa_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_ecdsa_test/boringssl_ecdsa_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_ecdsa_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_ecdsa_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_ed25519_test/boringssl_ed25519_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_ed25519_test/boringssl_ed25519_test.vcxproj
index 52b9ca31919c2176abae90811a632212837a4316..85fd0640fe46d1651e833509d3d82487eb142c75 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_ed25519_test/boringssl_ed25519_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_ed25519_test/boringssl_ed25519_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_ed25519_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_ed25519_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_err_test/boringssl_err_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_err_test/boringssl_err_test.vcxproj
index 61ee7661c24bf5e76df7d8fa17c463a7312dd500..085b8ce0e82d2ca1f69ce51de6c3c482068bca0f 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_err_test/boringssl_err_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_err_test/boringssl_err_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_err_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_err_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_evp_extra_test/boringssl_evp_extra_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_evp_extra_test/boringssl_evp_extra_test.vcxproj
index 23d722b765c476be8f0170ec3996be7c7ba70be5..25e5a761edf4bc58ca3964a89d5632b73e01537a 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_evp_extra_test/boringssl_evp_extra_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_evp_extra_test/boringssl_evp_extra_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_evp_extra_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_evp_extra_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_evp_test/boringssl_evp_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_evp_test/boringssl_evp_test.vcxproj
index 9b139cf963131f44d0d51dc478b3b0b406fa21e0..76312fa81150eadb08886edd02cacd01f6f1d2cc 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_evp_test/boringssl_evp_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_evp_test/boringssl_evp_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_evp_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_evp_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_example_mul/boringssl_example_mul.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_example_mul/boringssl_example_mul.vcxproj
index f54c1ecf69c38a4e48699d9df1f57df8a3331c0c..e607808cab6f08721cfbaf144dfc3e138f25b19a 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_example_mul/boringssl_example_mul.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_example_mul/boringssl_example_mul.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_example_mul</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_example_mul</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_gcm_test/boringssl_gcm_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_gcm_test/boringssl_gcm_test.vcxproj
index 973e8af28c10017f2dd87e4227135b61ff7f098a..4bf014ce494c867a34bcdb06b97a499190a3d317 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_gcm_test/boringssl_gcm_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_gcm_test/boringssl_gcm_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_gcm_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_gcm_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_hkdf_test/boringssl_hkdf_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_hkdf_test/boringssl_hkdf_test.vcxproj
index 1290853fc0a9eecf8b379f1e1fd6ca604ad15674..d6294b83cb7c5e43e926250d997d3a484934b1ef 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_hkdf_test/boringssl_hkdf_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_hkdf_test/boringssl_hkdf_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_hkdf_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_hkdf_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_hmac_test/boringssl_hmac_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_hmac_test/boringssl_hmac_test.vcxproj
index 369477d6113209da186ad47e31a0f27580127cb3..e2f6afb9cf146192c69d91daa1d8b465ed11f1f2 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_hmac_test/boringssl_hmac_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_hmac_test/boringssl_hmac_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_hmac_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_hmac_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_lhash_test/boringssl_lhash_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_lhash_test/boringssl_lhash_test.vcxproj
index c19c3225274da968bacce8daf2cfe813ab3d263b..2a4f81fb7e5e50926a8c0fd5467f22d6ad296106 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_lhash_test/boringssl_lhash_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_lhash_test/boringssl_lhash_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_lhash_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_lhash_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_pbkdf_test/boringssl_pbkdf_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_pbkdf_test/boringssl_pbkdf_test.vcxproj
index 415e3f4cd0a3561917d041a2b25b456d76b8cc43..6eedd2d21b2a8028eb5103964dfa8b0cc0c97eca 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_pbkdf_test/boringssl_pbkdf_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_pbkdf_test/boringssl_pbkdf_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_pbkdf_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_pbkdf_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_pkcs12_test/boringssl_pkcs12_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_pkcs12_test/boringssl_pkcs12_test.vcxproj
index 7cd3c44f822de42083e9d5d388c9e3f8be00ee5b..d31e89ed4bc3f48001a6a0016c07c7d0fdf38429 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_pkcs12_test/boringssl_pkcs12_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_pkcs12_test/boringssl_pkcs12_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_pkcs12_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_pkcs12_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_pkcs7_test/boringssl_pkcs7_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_pkcs7_test/boringssl_pkcs7_test.vcxproj
index 8ee7ffbb28dcf9add0fa9a625e4c89d53c3d0a22..19b2e1efea3950d132e01a1de731bb3a4bcc9f44 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_pkcs7_test/boringssl_pkcs7_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_pkcs7_test/boringssl_pkcs7_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_pkcs7_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_pkcs7_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_pkcs8_test/boringssl_pkcs8_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_pkcs8_test/boringssl_pkcs8_test.vcxproj
index 28e5cb1dbd75a9f7451eca4f8ea520d50eab5ebd..fe8f78b50f7dba4b9666aff0ed6d954cb60ff49c 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_pkcs8_test/boringssl_pkcs8_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_pkcs8_test/boringssl_pkcs8_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_pkcs8_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_pkcs8_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_poly1305_test/boringssl_poly1305_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_poly1305_test/boringssl_poly1305_test.vcxproj
index 344c555d77e2816e59088725650337c0891221a1..9424e20151c76b062bf8353bc555837873a32a6f 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_poly1305_test/boringssl_poly1305_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_poly1305_test/boringssl_poly1305_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_poly1305_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_poly1305_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_pqueue_test/boringssl_pqueue_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_pqueue_test/boringssl_pqueue_test.vcxproj
index 0802ec41d0fbbe5e42fdad31041ee8f63f13fff3..7c0189b62719c8b748f5264ef55480824b35cd48 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_pqueue_test/boringssl_pqueue_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_pqueue_test/boringssl_pqueue_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_pqueue_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_pqueue_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_refcount_test/boringssl_refcount_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_refcount_test/boringssl_refcount_test.vcxproj
index 09eef3862bddacc521a1817609e2df17bbfe8997..c357b64cbd0dfc698c60a03d4d2e65df4b685ef7 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_refcount_test/boringssl_refcount_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_refcount_test/boringssl_refcount_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_refcount_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_refcount_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_rsa_test/boringssl_rsa_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_rsa_test/boringssl_rsa_test.vcxproj
index 75e3056177033b4ff8d11ee979d88cd7ebb6a9f7..4916f3ff1839151a62ad3b5aff815a22a1c1462a 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_rsa_test/boringssl_rsa_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_rsa_test/boringssl_rsa_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_rsa_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_rsa_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_ssl_test/boringssl_ssl_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_ssl_test/boringssl_ssl_test.vcxproj
index e58f5c48448cd7ed94680f1c3e2d1e7132caa565..eab2cabfd2fa001ba03eb881b50c4c3a15c156eb 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_ssl_test/boringssl_ssl_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_ssl_test/boringssl_ssl_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_ssl_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_ssl_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_tab_test/boringssl_tab_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_tab_test/boringssl_tab_test.vcxproj
index 56282052f6743d2b1a8e81c359dccc24c81dcf67..fc7a9c2b01a6362e9ce4277a304f15b8387ecaa9 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_tab_test/boringssl_tab_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_tab_test/boringssl_tab_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_tab_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_tab_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_thread_test/boringssl_thread_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_thread_test/boringssl_thread_test.vcxproj
index 26a4384cdcaf0652b548e500c25765c76044ec4b..1730c70005ad67ab2beba9cff7b08134e5789513 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_thread_test/boringssl_thread_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_thread_test/boringssl_thread_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_thread_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_thread_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_v3name_test/boringssl_v3name_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_v3name_test/boringssl_v3name_test.vcxproj
index 12ddfa3800e21f74700f9547a5e2bb65c6f59bfe..517c5c429edea0f65a60dcb33d06b296b68020eb 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_v3name_test/boringssl_v3name_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_v3name_test/boringssl_v3name_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_v3name_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_v3name_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/boringssl/boringssl_x25519_test/boringssl_x25519_test.vcxproj b/vsprojects/vcxproj/test/boringssl/boringssl_x25519_test/boringssl_x25519_test.vcxproj
index 04cd2d18259f25104fbf1a2131c11f59464e0038..9dfd8a830a71a9850c71790ce4bcc5d7d6dcdba8 100644
--- a/vsprojects/vcxproj/test/boringssl/boringssl_x25519_test/boringssl_x25519_test.vcxproj
+++ b/vsprojects/vcxproj/test/boringssl/boringssl_x25519_test/boringssl_x25519_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>boringssl_x25519_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>boringssl_x25519_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/channel_arguments_test/channel_arguments_test.vcxproj b/vsprojects/vcxproj/test/channel_arguments_test/channel_arguments_test.vcxproj
index 936d7741288d964aecda45d48ee862dba4e36fe0..d20bb38763c694408c32ebc2a99a5bd61be6d8c6 100644
--- a/vsprojects/vcxproj/test/channel_arguments_test/channel_arguments_test.vcxproj
+++ b/vsprojects/vcxproj/test/channel_arguments_test/channel_arguments_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>channel_arguments_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>channel_arguments_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/channel_create_test/channel_create_test.vcxproj b/vsprojects/vcxproj/test/channel_create_test/channel_create_test.vcxproj
index ca6a84faf7b5497dacacd873428d28910d971d12..8a5fc550c90f6acc819e54b8625b791e79f35380 100644
--- a/vsprojects/vcxproj/test/channel_create_test/channel_create_test.vcxproj
+++ b/vsprojects/vcxproj/test/channel_create_test/channel_create_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>channel_create_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>channel_create_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj b/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj
index edf04cb889fb2c612172120aea7b98cbefad1c77..0c6f74721a7a7605033c23eac48c680c068416da 100644
--- a/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj
+++ b/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>chttp2_hpack_encoder_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>chttp2_hpack_encoder_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/chttp2_status_conversion_test/chttp2_status_conversion_test.vcxproj b/vsprojects/vcxproj/test/chttp2_status_conversion_test/chttp2_status_conversion_test.vcxproj
index 214491f50b8fa50ede82d729f1bd74581e5a6afc..f5b8838cdf91158d180b757e5b06412313a942ce 100644
--- a/vsprojects/vcxproj/test/chttp2_status_conversion_test/chttp2_status_conversion_test.vcxproj
+++ b/vsprojects/vcxproj/test/chttp2_status_conversion_test/chttp2_status_conversion_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>chttp2_status_conversion_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>chttp2_status_conversion_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/chttp2_stream_map_test/chttp2_stream_map_test.vcxproj b/vsprojects/vcxproj/test/chttp2_stream_map_test/chttp2_stream_map_test.vcxproj
index b74e925ea998be2c412cbe18afb32a944a4b1094..157e90cf6c51171220976bcf57e3fa5d3ba5469c 100644
--- a/vsprojects/vcxproj/test/chttp2_stream_map_test/chttp2_stream_map_test.vcxproj
+++ b/vsprojects/vcxproj/test/chttp2_stream_map_test/chttp2_stream_map_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>chttp2_stream_map_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>chttp2_stream_map_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/chttp2_varint_test/chttp2_varint_test.vcxproj b/vsprojects/vcxproj/test/chttp2_varint_test/chttp2_varint_test.vcxproj
index 7a3286b82d78deabdcbad78130159ac62c0a827f..a4ee7dca2d77020be0e8f53927d32e57a116149c 100644
--- a/vsprojects/vcxproj/test/chttp2_varint_test/chttp2_varint_test.vcxproj
+++ b/vsprojects/vcxproj/test/chttp2_varint_test/chttp2_varint_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>chttp2_varint_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>chttp2_varint_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/cli_call_test/cli_call_test.vcxproj b/vsprojects/vcxproj/test/cli_call_test/cli_call_test.vcxproj
index 83936a5aef5cb6f5d26d4b4b9d86d69f5e62f336..b5d2fc6d0c78389570f22f021d475aef90af98b4 100644
--- a/vsprojects/vcxproj/test/cli_call_test/cli_call_test.vcxproj
+++ b/vsprojects/vcxproj/test/cli_call_test/cli_call_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>cli_call_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>cli_call_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/client_crash_test_server/client_crash_test_server.vcxproj b/vsprojects/vcxproj/test/client_crash_test_server/client_crash_test_server.vcxproj
index 98bac3050f8e0e65645605bc25eaf9e1212f956c..bc9efb502ee492a0db729d0643d62efd8dec9904 100644
--- a/vsprojects/vcxproj/test/client_crash_test_server/client_crash_test_server.vcxproj
+++ b/vsprojects/vcxproj/test/client_crash_test_server/client_crash_test_server.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>client_crash_test_server</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>client_crash_test_server</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/compression_test/compression_test.vcxproj b/vsprojects/vcxproj/test/compression_test/compression_test.vcxproj
index f754d94557bb1c44d85873308d8682792437033e..5bfbe2dcb7299a69170f470ce39a4c99111f9345 100644
--- a/vsprojects/vcxproj/test/compression_test/compression_test.vcxproj
+++ b/vsprojects/vcxproj/test/compression_test/compression_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>compression_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>compression_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/connection_prefix_bad_client_test/connection_prefix_bad_client_test.vcxproj b/vsprojects/vcxproj/test/connection_prefix_bad_client_test/connection_prefix_bad_client_test.vcxproj
index 4f3010e9a620947e8485956fe086cebbd30f2ae9..c09ef73913a1ca8e35355ec4b883f2f7627c6b41 100644
--- a/vsprojects/vcxproj/test/connection_prefix_bad_client_test/connection_prefix_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/connection_prefix_bad_client_test/connection_prefix_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>connection_prefix_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>connection_prefix_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/credentials_test/credentials_test.vcxproj b/vsprojects/vcxproj/test/credentials_test/credentials_test.vcxproj
index e1172780552e0c488dd4cf4f4aeb37d72236adc8..43be5fbfe437a025f80426b90279bfa182b46ee2 100644
--- a/vsprojects/vcxproj/test/credentials_test/credentials_test.vcxproj
+++ b/vsprojects/vcxproj/test/credentials_test/credentials_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>credentials_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>credentials_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/cxx_byte_buffer_test/cxx_byte_buffer_test.vcxproj b/vsprojects/vcxproj/test/cxx_byte_buffer_test/cxx_byte_buffer_test.vcxproj
index f915be3698e8e4db84584f7e56feb9fcad51edaa..8b63392d0c0d0b71602fc9875723bee07160b22b 100644
--- a/vsprojects/vcxproj/test/cxx_byte_buffer_test/cxx_byte_buffer_test.vcxproj
+++ b/vsprojects/vcxproj/test/cxx_byte_buffer_test/cxx_byte_buffer_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>cxx_byte_buffer_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>cxx_byte_buffer_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/cxx_slice_test/cxx_slice_test.vcxproj b/vsprojects/vcxproj/test/cxx_slice_test/cxx_slice_test.vcxproj
index 584fec0064cafd079db18784a035ca0d1516bc86..f7bc268b3432d4ee343d077ca76ab63cae99eb82 100644
--- a/vsprojects/vcxproj/test/cxx_slice_test/cxx_slice_test.vcxproj
+++ b/vsprojects/vcxproj/test/cxx_slice_test/cxx_slice_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>cxx_slice_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>cxx_slice_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/cxx_string_ref_test/cxx_string_ref_test.vcxproj b/vsprojects/vcxproj/test/cxx_string_ref_test/cxx_string_ref_test.vcxproj
index e2f93bb8555bfe85cbd46745cc22fd89bbd0d49d..8d9989557fb3d7e5a57920538309301617147af6 100644
--- a/vsprojects/vcxproj/test/cxx_string_ref_test/cxx_string_ref_test.vcxproj
+++ b/vsprojects/vcxproj/test/cxx_string_ref_test/cxx_string_ref_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>cxx_string_ref_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>cxx_string_ref_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/cxx_time_test/cxx_time_test.vcxproj b/vsprojects/vcxproj/test/cxx_time_test/cxx_time_test.vcxproj
index c2b00b03d0ce501ba0f2d16ad888d920a30bdd63..bcbaf898c297035537f44ccc6fadb509d84ca559 100644
--- a/vsprojects/vcxproj/test/cxx_time_test/cxx_time_test.vcxproj
+++ b/vsprojects/vcxproj/test/cxx_time_test/cxx_time_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>cxx_time_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>cxx_time_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
index 16806f5097764e0b3bd0f74fd8e8e714099a1c3a..1f3089b9aae2795b17cccc35a503eed1be6bf8aa 100644
--- a/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
+++ b/vsprojects/vcxproj/test/dns_resolver_test/dns_resolver_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>dns_resolver_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>dns_resolver_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_census_nosec_test/h2_census_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_census_nosec_test/h2_census_nosec_test.vcxproj
index db550013fb630689dfd3380058716b216a918b24..3000ec18fb89b867fd576b06e95af48dea90ef7b 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_census_nosec_test/h2_census_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_census_nosec_test/h2_census_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_census_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_census_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_census_test/h2_census_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_census_test/h2_census_test.vcxproj
index 441cf49eeaac65ee065783ee024bfa087e6381e6..612b5df8064c77a6838fd5645393c8aaee8ca5ea 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_census_test/h2_census_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_census_test/h2_census_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_census_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_census_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_nosec_test/h2_compress_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_nosec_test/h2_compress_nosec_test.vcxproj
index 81282a3fd101e4ebcbbc044dec6e9a1cb71a9cfe..0fddf5577a6f29cb6a52b06a5b64e6ca87e2f6a9 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_nosec_test/h2_compress_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_nosec_test/h2_compress_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_compress_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_compress_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_test/h2_compress_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_test/h2_compress_test.vcxproj
index ee47dabb7bd1d4634655546842c9b64355edf62d..4b6fbaa585ae7eddd6b6f63ad73b55e99a40ac01 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_test/h2_compress_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_compress_test/h2_compress_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_compress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_compress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_fakesec_test/h2_fakesec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_fakesec_test/h2_fakesec_test.vcxproj
index 1e882b6b08f054668b52335b2f76432a7a53241c..3406fadc1e1afe9c5f5ff23e43a3b9d4f6484b46 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_fakesec_test/h2_fakesec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_fakesec_test/h2_fakesec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_fakesec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_fakesec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_full_nosec_test/h2_full_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_full_nosec_test/h2_full_nosec_test.vcxproj
index fd4e9b2bf1f483dac4d532912ab32e4938cda51d..b76f51e5abaa7370ec88a6f7e2c45d2fdf4a0b6e 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_full_nosec_test/h2_full_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_full_nosec_test/h2_full_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_full_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_full_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_full_test/h2_full_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_full_test/h2_full_test.vcxproj
index 3dde432a2cb56a66949c314c921fefdc043be60e..96bd4361d0eb46dcd5149965ca92ed9ef21850a8 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_full_test/h2_full_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_full_test/h2_full_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_full_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_full_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_oauth2_test/h2_oauth2_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_oauth2_test/h2_oauth2_test.vcxproj
index b4ef73e8c35fb82456f87a27b0eaeec4dc2db3bb..f89d32c192a30caae3234bc44ab348567ba15947 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_oauth2_test/h2_oauth2_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_oauth2_test/h2_oauth2_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_oauth2_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_oauth2_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_nosec_test/h2_proxy_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_nosec_test/h2_proxy_nosec_test.vcxproj
index d738e02d80bf51a5444a033e9aa2da0c3460e811..7eb45e424e0dedaf1b38cc9bcce381480ef98530 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_nosec_test/h2_proxy_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_nosec_test/h2_proxy_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_proxy_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_proxy_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_test/h2_proxy_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_test/h2_proxy_test.vcxproj
index 6045a9bf23d47c9979d44ac1b8d7aa8d400e7e6b..8f56454848fefe60ca1075158a3b5400dea460c9 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_test/h2_proxy_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_proxy_test/h2_proxy_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_proxy_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_proxy_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_nosec_test/h2_sockpair+trace_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_nosec_test/h2_sockpair+trace_nosec_test.vcxproj
index 36539b06e65a48492ebcdcd743cfc2f662fedd54..ebcdb21173bce16aa04ddf24997c41a6ca99ea53 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_nosec_test/h2_sockpair+trace_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_nosec_test/h2_sockpair+trace_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_sockpair+trace_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_sockpair+trace_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_test/h2_sockpair+trace_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_test/h2_sockpair+trace_test.vcxproj
index 74f3ed8f80a7fac3a9aae63218250e49c11b4ae4..44427fb134a63bf90ceb41bcddc8d81412b82530 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_test/h2_sockpair+trace_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair+trace_test/h2_sockpair+trace_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_sockpair+trace_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_sockpair+trace_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_nosec_test/h2_sockpair_1byte_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_nosec_test/h2_sockpair_1byte_nosec_test.vcxproj
index 6d3c6cecce7f856275a7558e1ef60f15364ac4ef..a3529e595c284d5beebc1c4ccbffab895ed789a6 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_nosec_test/h2_sockpair_1byte_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_nosec_test/h2_sockpair_1byte_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_sockpair_1byte_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_sockpair_1byte_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_test/h2_sockpair_1byte_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_test/h2_sockpair_1byte_test.vcxproj
index 96893203d7b928b5235989ceb750d57f8e6b6274..5f4e43ff4e6ebdb15c225ad7b10ff7cf6da18fce 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_test/h2_sockpair_1byte_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_1byte_test/h2_sockpair_1byte_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_sockpair_1byte_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_sockpair_1byte_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_nosec_test/h2_sockpair_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_nosec_test/h2_sockpair_nosec_test.vcxproj
index c20329571761d17d37ad0a96a035c94839b0dac7..fe01a3df95c31e4a9e746c0433a2d36d512f5792 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_nosec_test/h2_sockpair_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_nosec_test/h2_sockpair_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_sockpair_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_sockpair_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_test/h2_sockpair_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_test/h2_sockpair_test.vcxproj
index 05f03cce434cb790c321300bd2c8b3826b91b83d..96359174bcf2338b1d25c61d5a7638d0c3808979 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_test/h2_sockpair_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_sockpair_test/h2_sockpair_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_sockpair_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_sockpair_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_proxy_test/h2_ssl_proxy_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_proxy_test/h2_ssl_proxy_test.vcxproj
index 79e7c67c7e2706a839fc303e9093c73948c79b02..0693d6573a5f3494b5b91cd1f1920bf4b1b9ac51 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_proxy_test/h2_ssl_proxy_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_proxy_test/h2_ssl_proxy_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_ssl_proxy_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_ssl_proxy_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_test/h2_ssl_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_test/h2_ssl_test.vcxproj
index a298e330a92220ae773eb7fac630c85fc8611f50..64e0c1be4a879a3ef0b4372eea2e4667282baf62 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_test/h2_ssl_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_ssl_test/h2_ssl_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_ssl_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_ssl_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_nosec_test/h2_uchannel_nosec_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_nosec_test/h2_uchannel_nosec_test.vcxproj
index 6d839dd1d9241fe84d0f6b187311209def165c3d..76a9e5600f54a56a07976369179d0eadfafff842 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_nosec_test/h2_uchannel_nosec_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_nosec_test/h2_uchannel_nosec_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_uchannel_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_uchannel_nosec_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_test/h2_uchannel_test.vcxproj b/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_test/h2_uchannel_test.vcxproj
index f68759456d52a95b239f090afb8cbabfe1b0cd7f..bcf0f34066d5dab8f059a4efb2e51ae2e7a96dbe 100644
--- a/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_test/h2_uchannel_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end/fixtures/h2_uchannel_test/h2_uchannel_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>h2_uchannel_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>h2_uchannel_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/end2end_test/end2end_test.vcxproj b/vsprojects/vcxproj/test/end2end_test/end2end_test.vcxproj
index 765a38283de0fab45bd613e7f3d75b4ec67d02a9..c04742ffee28894b0cc9a5eee5df9a97b1af9c4b 100644
--- a/vsprojects/vcxproj/test/end2end_test/end2end_test.vcxproj
+++ b/vsprojects/vcxproj/test/end2end_test/end2end_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>end2end_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>end2end_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/endpoint_pair_test/endpoint_pair_test.vcxproj b/vsprojects/vcxproj/test/endpoint_pair_test/endpoint_pair_test.vcxproj
index f77cf9da5abae4649e12fc068344c8427dd574c3..3c94feb54ff320186f0ef1008316a924e326152f 100644
--- a/vsprojects/vcxproj/test/endpoint_pair_test/endpoint_pair_test.vcxproj
+++ b/vsprojects/vcxproj/test/endpoint_pair_test/endpoint_pair_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>endpoint_pair_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>endpoint_pair_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/fling_client/fling_client.vcxproj b/vsprojects/vcxproj/test/fling_client/fling_client.vcxproj
index 51f176fc799d6fdbfaeb6c02c5cb9251713fd8dc..31cac37f6601b38d26017a7716afe01ec8bb0760 100644
--- a/vsprojects/vcxproj/test/fling_client/fling_client.vcxproj
+++ b/vsprojects/vcxproj/test/fling_client/fling_client.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>fling_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>fling_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/fling_server/fling_server.vcxproj b/vsprojects/vcxproj/test/fling_server/fling_server.vcxproj
index 5ce96bd2d56e701b7b03d06ed24c6ee4aaf60369..99dd3f1ec3da8fa1486a56621e278709f0158992 100644
--- a/vsprojects/vcxproj/test/fling_server/fling_server.vcxproj
+++ b/vsprojects/vcxproj/test/fling_server/fling_server.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>fling_server</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>fling_server</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/generic_end2end_test/generic_end2end_test.vcxproj b/vsprojects/vcxproj/test/generic_end2end_test/generic_end2end_test.vcxproj
index 02112a4ae677977be4c734b76ec1020e41d5f8be..44b0870958b84aee1b7c2c8f07b5bd8259c30cde 100644
--- a/vsprojects/vcxproj/test/generic_end2end_test/generic_end2end_test.vcxproj
+++ b/vsprojects/vcxproj/test/generic_end2end_test/generic_end2end_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>generic_end2end_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>generic_end2end_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj b/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj
index 1c0bbfdcf77ed93280071be254476e50b4b44c02..e6b0be260060fca8c5ad1f4f7b0ef2578d320875 100644
--- a/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_avl_test/gpr_avl_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_avl_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_avl_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_cmdline_test/gpr_cmdline_test.vcxproj b/vsprojects/vcxproj/test/gpr_cmdline_test/gpr_cmdline_test.vcxproj
index 43b0746be2a5b66ebd4a1dee0bf1f03f504fd16d..9df03abed0754cba20bb07b12b3809ee0131e088 100644
--- a/vsprojects/vcxproj/test/gpr_cmdline_test/gpr_cmdline_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_cmdline_test/gpr_cmdline_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_cmdline_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_cmdline_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_cpu_test/gpr_cpu_test.vcxproj b/vsprojects/vcxproj/test/gpr_cpu_test/gpr_cpu_test.vcxproj
index 0339adbac1f75a355fb807a7e7282e0de3fe4acd..9ba6745e8cecb9f62582cec1ef970041ddb940b6 100644
--- a/vsprojects/vcxproj/test/gpr_cpu_test/gpr_cpu_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_cpu_test/gpr_cpu_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_cpu_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_cpu_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_env_test/gpr_env_test.vcxproj b/vsprojects/vcxproj/test/gpr_env_test/gpr_env_test.vcxproj
index dc3813ed4ecd3368c6be402ec6fc9ca6c579d8ed..19c6139858bdb5a552ba4115dddb2f49caad9b38 100644
--- a/vsprojects/vcxproj/test/gpr_env_test/gpr_env_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_env_test/gpr_env_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_env_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_env_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_file_test/gpr_file_test.vcxproj b/vsprojects/vcxproj/test/gpr_file_test/gpr_file_test.vcxproj
index 8c7b99c2d9117abfabfd8988f8ca7777905b0c0e..5a2fdee1236453f7859ecb33d682aabddb381107 100644
--- a/vsprojects/vcxproj/test/gpr_file_test/gpr_file_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_file_test/gpr_file_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_file_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_file_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_histogram_test/gpr_histogram_test.vcxproj b/vsprojects/vcxproj/test/gpr_histogram_test/gpr_histogram_test.vcxproj
index ff8f5113b651a86a0a190ff0a46603e38f7ea4e8..fa65c1532f7554637c8b868005def73874aebbb5 100644
--- a/vsprojects/vcxproj/test/gpr_histogram_test/gpr_histogram_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_histogram_test/gpr_histogram_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_histogram_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_histogram_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_host_port_test/gpr_host_port_test.vcxproj b/vsprojects/vcxproj/test/gpr_host_port_test/gpr_host_port_test.vcxproj
index 0c22192a1b923b1da3618be77a1e0aa193a6fd53..6d4194b2a59479f78a1a533d726ee7c917e1ee3f 100644
--- a/vsprojects/vcxproj/test/gpr_host_port_test/gpr_host_port_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_host_port_test/gpr_host_port_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_host_port_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_host_port_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_log_test/gpr_log_test.vcxproj b/vsprojects/vcxproj/test/gpr_log_test/gpr_log_test.vcxproj
index 72661b659f1734ac2406e1d8d18a86155accafdd..651a3d33269bd199fe3f479d8d5b6752bea127f4 100644
--- a/vsprojects/vcxproj/test/gpr_log_test/gpr_log_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_log_test/gpr_log_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_log_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_log_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_slice_buffer_test/gpr_slice_buffer_test.vcxproj b/vsprojects/vcxproj/test/gpr_slice_buffer_test/gpr_slice_buffer_test.vcxproj
index 29daeab00631ae5a3a2d074956e9a3956557d1ac..33926ff116ffd4677f513002b64c15bcf725d8c8 100644
--- a/vsprojects/vcxproj/test/gpr_slice_buffer_test/gpr_slice_buffer_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_slice_buffer_test/gpr_slice_buffer_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_slice_buffer_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_slice_buffer_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_slice_test/gpr_slice_test.vcxproj b/vsprojects/vcxproj/test/gpr_slice_test/gpr_slice_test.vcxproj
index e8ff8bcc6dd9a253ba977f86f9a76eead796d447..bb2badc35c14e580a0812d6feb8b11f6226512da 100644
--- a/vsprojects/vcxproj/test/gpr_slice_test/gpr_slice_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_slice_test/gpr_slice_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_slice_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_slice_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_stack_lockfree_test/gpr_stack_lockfree_test.vcxproj b/vsprojects/vcxproj/test/gpr_stack_lockfree_test/gpr_stack_lockfree_test.vcxproj
index a8e90c2a8d410e8e7e4b140539ed836ca5ef98e5..218cff8ba9dac97e5ca6fc1f6e91a3f288e4203c 100644
--- a/vsprojects/vcxproj/test/gpr_stack_lockfree_test/gpr_stack_lockfree_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_stack_lockfree_test/gpr_stack_lockfree_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_stack_lockfree_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_stack_lockfree_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_string_test/gpr_string_test.vcxproj b/vsprojects/vcxproj/test/gpr_string_test/gpr_string_test.vcxproj
index 5da404bc6ee5d3b31f096787d48116c3534ee34f..56adb59c428aaf3ab0280fc22b12f5a80a72f735 100644
--- a/vsprojects/vcxproj/test/gpr_string_test/gpr_string_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_string_test/gpr_string_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_string_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_string_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_sync_test/gpr_sync_test.vcxproj b/vsprojects/vcxproj/test/gpr_sync_test/gpr_sync_test.vcxproj
index 878317e8b5c314b1871f5947cf9e8a7d2f645e59..0b48230c174dfc026e11c627640d71e4790a1812 100644
--- a/vsprojects/vcxproj/test/gpr_sync_test/gpr_sync_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_sync_test/gpr_sync_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_sync_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_sync_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_thd_test/gpr_thd_test.vcxproj b/vsprojects/vcxproj/test/gpr_thd_test/gpr_thd_test.vcxproj
index fd122662e5560d2fa2aac07e41cbfefa385f978e..54483c0a74b0223929f1fead062fa6e6d0d0ddec 100644
--- a/vsprojects/vcxproj/test/gpr_thd_test/gpr_thd_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_thd_test/gpr_thd_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_thd_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_thd_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_time_test/gpr_time_test.vcxproj b/vsprojects/vcxproj/test/gpr_time_test/gpr_time_test.vcxproj
index 48f02859b4094ffddd22025429ff44762c81b52b..f9529bba825d822d0e0c597b0774150335f17ee6 100644
--- a/vsprojects/vcxproj/test/gpr_time_test/gpr_time_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_time_test/gpr_time_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_time_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_time_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_tls_test/gpr_tls_test.vcxproj b/vsprojects/vcxproj/test/gpr_tls_test/gpr_tls_test.vcxproj
index 686ce86845faabb770852b55d887ff8e4aefcb24..4399132a092bc61a35dd951fad415581168bb196 100644
--- a/vsprojects/vcxproj/test/gpr_tls_test/gpr_tls_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_tls_test/gpr_tls_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_tls_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_tls_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/gpr_useful_test/gpr_useful_test.vcxproj b/vsprojects/vcxproj/test/gpr_useful_test/gpr_useful_test.vcxproj
index 1095dd86c092b4a30fc1458ffc67c443cf1cf6db..40866b92a4d4c818a2ff97145ca6fb645c37b87d 100644
--- a/vsprojects/vcxproj/test/gpr_useful_test/gpr_useful_test.vcxproj
+++ b/vsprojects/vcxproj/test/gpr_useful_test/gpr_useful_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>gpr_useful_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>gpr_useful_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_auth_context_test/grpc_auth_context_test.vcxproj b/vsprojects/vcxproj/test/grpc_auth_context_test/grpc_auth_context_test.vcxproj
index 67238fdace8f5779bc3e48fdac509b413d7d81ff..db710601b84d5a6b0f6afb4fb6538862891664be 100644
--- a/vsprojects/vcxproj/test/grpc_auth_context_test/grpc_auth_context_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_auth_context_test/grpc_auth_context_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_auth_context_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_auth_context_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_base64_test/grpc_base64_test.vcxproj b/vsprojects/vcxproj/test/grpc_base64_test/grpc_base64_test.vcxproj
index 0bae2329f5c957333f72b436cde3acb3bae6caf0..3e49ac8ae264154787e92b8b81292938b14c98e2 100644
--- a/vsprojects/vcxproj/test/grpc_base64_test/grpc_base64_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_base64_test/grpc_base64_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_base64_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_base64_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_byte_buffer_reader_test/grpc_byte_buffer_reader_test.vcxproj b/vsprojects/vcxproj/test/grpc_byte_buffer_reader_test/grpc_byte_buffer_reader_test.vcxproj
index 3ee30aa2f7afcef924507ce1d638c9577c7b3849..9b74cf1fc98db40e1560801f0f24331ed8c2b6fc 100644
--- a/vsprojects/vcxproj/test/grpc_byte_buffer_reader_test/grpc_byte_buffer_reader_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_byte_buffer_reader_test/grpc_byte_buffer_reader_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_byte_buffer_reader_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_byte_buffer_reader_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_channel_args_test/grpc_channel_args_test.vcxproj b/vsprojects/vcxproj/test/grpc_channel_args_test/grpc_channel_args_test.vcxproj
index 7ea51a40df5d44bf84f0740d743b9a989b46429a..0203b29cf94df5edf0a25f6bc748d6733dfca246 100644
--- a/vsprojects/vcxproj/test/grpc_channel_args_test/grpc_channel_args_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_channel_args_test/grpc_channel_args_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_channel_args_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_channel_args_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_channel_stack_test/grpc_channel_stack_test.vcxproj b/vsprojects/vcxproj/test/grpc_channel_stack_test/grpc_channel_stack_test.vcxproj
index aa9533e38277f0afd824de54a0df22b7689b37d6..905f9996e27bfcfbf4d1cf74ce10a8e5e3bf4a3a 100644
--- a/vsprojects/vcxproj/test/grpc_channel_stack_test/grpc_channel_stack_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_channel_stack_test/grpc_channel_stack_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_channel_stack_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_channel_stack_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj b/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj
index 8630e3821ba2327aa82169df57af4378d30fb7bc..eeb0e8cfa717c1a44d29073f9da78946c73d0e03 100644
--- a/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_cli/grpc_cli.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>grpc_cli</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_cli</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_completion_queue_test/grpc_completion_queue_test.vcxproj b/vsprojects/vcxproj/test/grpc_completion_queue_test/grpc_completion_queue_test.vcxproj
index d4ad8bceba772cba8d18411a25f6239a816b33a9..5830638c54ecc289f021000e885e8194fe2f76a9 100644
--- a/vsprojects/vcxproj/test/grpc_completion_queue_test/grpc_completion_queue_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_completion_queue_test/grpc_completion_queue_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_completion_queue_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_completion_queue_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_credentials_test/grpc_credentials_test.vcxproj b/vsprojects/vcxproj/test/grpc_credentials_test/grpc_credentials_test.vcxproj
index ab153f26d49eb51b9638f0196976ce8af672e3ed..cbd602e2167ac208a4f394c269601027f7f2fefb 100644
--- a/vsprojects/vcxproj/test/grpc_credentials_test/grpc_credentials_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_credentials_test/grpc_credentials_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_credentials_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_credentials_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_invalid_channel_args_test/grpc_invalid_channel_args_test.vcxproj b/vsprojects/vcxproj/test/grpc_invalid_channel_args_test/grpc_invalid_channel_args_test.vcxproj
index cfef2cd93a7b3a06fbd4df9296a1318199e1d557..9f85ec8fe49092617a3fa1640d33030d3768570a 100644
--- a/vsprojects/vcxproj/test/grpc_invalid_channel_args_test/grpc_invalid_channel_args_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_invalid_channel_args_test/grpc_invalid_channel_args_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_invalid_channel_args_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_invalid_channel_args_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_jwt_verifier_test/grpc_jwt_verifier_test.vcxproj b/vsprojects/vcxproj/test/grpc_jwt_verifier_test/grpc_jwt_verifier_test.vcxproj
index bd461e35607c3671c0d4eb46154833bb4f928dbb..0928586687a6caf38f930dc7f829f46bea7f5c90 100644
--- a/vsprojects/vcxproj/test/grpc_jwt_verifier_test/grpc_jwt_verifier_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_jwt_verifier_test/grpc_jwt_verifier_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_jwt_verifier_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_jwt_verifier_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/grpc_security_connector_test/grpc_security_connector_test.vcxproj b/vsprojects/vcxproj/test/grpc_security_connector_test/grpc_security_connector_test.vcxproj
index d3cbb54309051f81c66bf326c4f6276e6425143f..a5849d1abc0c20579de3aa7dd16076491c7edc2b 100644
--- a/vsprojects/vcxproj/test/grpc_security_connector_test/grpc_security_connector_test.vcxproj
+++ b/vsprojects/vcxproj/test/grpc_security_connector_test/grpc_security_connector_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>grpc_security_connector_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>grpc_security_connector_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/headers_bad_client_test/headers_bad_client_test.vcxproj b/vsprojects/vcxproj/test/headers_bad_client_test/headers_bad_client_test.vcxproj
index c0702e882a0d4c4f22a67e86e102603995afdb50..cc73799a49d425c454a116761a61e114f928ec0d 100644
--- a/vsprojects/vcxproj/test/headers_bad_client_test/headers_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/headers_bad_client_test/headers_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>headers_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>headers_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/hpack_parser_test/hpack_parser_test.vcxproj b/vsprojects/vcxproj/test/hpack_parser_test/hpack_parser_test.vcxproj
index 8f9be70c6b8761d7c61391992cb01e3d016d5320..380d465baa50f8105b18d07735a4078182e5935e 100644
--- a/vsprojects/vcxproj/test/hpack_parser_test/hpack_parser_test.vcxproj
+++ b/vsprojects/vcxproj/test/hpack_parser_test/hpack_parser_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>hpack_parser_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>hpack_parser_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/hpack_table_test/hpack_table_test.vcxproj b/vsprojects/vcxproj/test/hpack_table_test/hpack_table_test.vcxproj
index 6598574618880be98334e0ca8fd685619b8658d0..f92e33c75ebf082a7908c9a5ee3588ee76890dbf 100644
--- a/vsprojects/vcxproj/test/hpack_table_test/hpack_table_test.vcxproj
+++ b/vsprojects/vcxproj/test/hpack_table_test/hpack_table_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>hpack_table_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>hpack_table_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/httpcli_format_request_test/httpcli_format_request_test.vcxproj b/vsprojects/vcxproj/test/httpcli_format_request_test/httpcli_format_request_test.vcxproj
index 30175a242c3ac493a05cdc96f42b87eb1c9d2589..97f14f6c8e44f594376240207c6744fbee9cce51 100644
--- a/vsprojects/vcxproj/test/httpcli_format_request_test/httpcli_format_request_test.vcxproj
+++ b/vsprojects/vcxproj/test/httpcli_format_request_test/httpcli_format_request_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>httpcli_format_request_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>httpcli_format_request_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/httpcli_parser_test/httpcli_parser_test.vcxproj b/vsprojects/vcxproj/test/httpcli_parser_test/httpcli_parser_test.vcxproj
index dddcf18fad53f60bf4c8d9e96c73b6c7abd87cfa..6f976309c599e3395b7d5d99815d83e7e14afe0b 100644
--- a/vsprojects/vcxproj/test/httpcli_parser_test/httpcli_parser_test.vcxproj
+++ b/vsprojects/vcxproj/test/httpcli_parser_test/httpcli_parser_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>httpcli_parser_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>httpcli_parser_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/init_test/init_test.vcxproj b/vsprojects/vcxproj/test/init_test/init_test.vcxproj
index 77edce544a2c19ee0a4aa4eb6e8633d61e5f5400..e4f0de7de8684138d22b1ab0d29832a982cbd4d4 100644
--- a/vsprojects/vcxproj/test/init_test/init_test.vcxproj
+++ b/vsprojects/vcxproj/test/init_test/init_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>init_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>init_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/initial_settings_frame_bad_client_test/initial_settings_frame_bad_client_test.vcxproj b/vsprojects/vcxproj/test/initial_settings_frame_bad_client_test/initial_settings_frame_bad_client_test.vcxproj
index cbf3cd964e4a56c03bef5bb9cd03f77389ad7e55..084132e049b94a1edbcf73db81351e8bec3902d7 100644
--- a/vsprojects/vcxproj/test/initial_settings_frame_bad_client_test/initial_settings_frame_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/initial_settings_frame_bad_client_test/initial_settings_frame_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>initial_settings_frame_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>initial_settings_frame_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/invalid_call_argument_test/invalid_call_argument_test.vcxproj b/vsprojects/vcxproj/test/invalid_call_argument_test/invalid_call_argument_test.vcxproj
index 9b43875baa8adb92205e9009e13c4ea6f9795e4d..84472eff120c0053dd0ad364746b43a8849b93a5 100644
--- a/vsprojects/vcxproj/test/invalid_call_argument_test/invalid_call_argument_test.vcxproj
+++ b/vsprojects/vcxproj/test/invalid_call_argument_test/invalid_call_argument_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>invalid_call_argument_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>invalid_call_argument_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/json_rewrite/json_rewrite.vcxproj b/vsprojects/vcxproj/test/json_rewrite/json_rewrite.vcxproj
index 818da802dd29a4a9f125e74f2360b40633d3f9c9..52cb29b0233d2d8145556c4b83c87684324c091d 100644
--- a/vsprojects/vcxproj/test/json_rewrite/json_rewrite.vcxproj
+++ b/vsprojects/vcxproj/test/json_rewrite/json_rewrite.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>json_rewrite</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>json_rewrite</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/json_rewrite_test/json_rewrite_test.vcxproj b/vsprojects/vcxproj/test/json_rewrite_test/json_rewrite_test.vcxproj
index 510851be3e6d962b8504c4c4a143ecc6622ad782..5a8c3d86c208b2c7d0d3d09aec51cfe87d26b330 100644
--- a/vsprojects/vcxproj/test/json_rewrite_test/json_rewrite_test.vcxproj
+++ b/vsprojects/vcxproj/test/json_rewrite_test/json_rewrite_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>json_rewrite_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>json_rewrite_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/json_stream_error_test/json_stream_error_test.vcxproj b/vsprojects/vcxproj/test/json_stream_error_test/json_stream_error_test.vcxproj
index e6360875961a1b49b8e79812369f90756d5f033f..accb6293bc8f99b8b2caec056f47fc952b69c435 100644
--- a/vsprojects/vcxproj/test/json_stream_error_test/json_stream_error_test.vcxproj
+++ b/vsprojects/vcxproj/test/json_stream_error_test/json_stream_error_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>json_stream_error_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>json_stream_error_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/json_test/json_test.vcxproj b/vsprojects/vcxproj/test/json_test/json_test.vcxproj
index 36c9fbbb310f069d433b30a380c781ae377c0f61..04ac883e1324f6900efdc4373f218ad7f6070483 100644
--- a/vsprojects/vcxproj/test/json_test/json_test.vcxproj
+++ b/vsprojects/vcxproj/test/json_test/json_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>json_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>json_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/lame_client_test/lame_client_test.vcxproj b/vsprojects/vcxproj/test/lame_client_test/lame_client_test.vcxproj
index d4ebcd3caf9ab4f09b614bf101773452de06db2c..0bda78baf6314d5efd87142a6a36f78765d7f9b4 100644
--- a/vsprojects/vcxproj/test/lame_client_test/lame_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/lame_client_test/lame_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>lame_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>lame_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
index db5cb61cf4bfc40e824faa0e89b9b408f00057e6..22b364f35cb544c0d9ebeb068f6536049ff6e90e 100644
--- a/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
+++ b/vsprojects/vcxproj/test/lb_policies_test/lb_policies_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>lb_policies_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>lb_policies_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/message_compress_test/message_compress_test.vcxproj b/vsprojects/vcxproj/test/message_compress_test/message_compress_test.vcxproj
index 5fbba7bdaf82e082a971690711b14083c7838bd3..de55bf38eb74d760c83693e760f10f58cd5a5973 100644
--- a/vsprojects/vcxproj/test/message_compress_test/message_compress_test.vcxproj
+++ b/vsprojects/vcxproj/test/message_compress_test/message_compress_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>message_compress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>message_compress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/metrics_client/metrics_client.vcxproj b/vsprojects/vcxproj/test/metrics_client/metrics_client.vcxproj
index 68a00653e479e676351b796306d763f670663419..42cc95590b7bf6b257fbf0d23b9d9baa3c2abe55 100644
--- a/vsprojects/vcxproj/test/metrics_client/metrics_client.vcxproj
+++ b/vsprojects/vcxproj/test/metrics_client/metrics_client.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>metrics_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>metrics_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/mock_test/mock_test.vcxproj b/vsprojects/vcxproj/test/mock_test/mock_test.vcxproj
index f9b587a80f9eb6a2df5fc4523469bfd4ed901f17..8c840fd5be902b345e94febc95a0db1a4dd2958e 100644
--- a/vsprojects/vcxproj/test/mock_test/mock_test.vcxproj
+++ b/vsprojects/vcxproj/test/mock_test/mock_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>mock_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>mock_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/multiple_server_queues_test/multiple_server_queues_test.vcxproj b/vsprojects/vcxproj/test/multiple_server_queues_test/multiple_server_queues_test.vcxproj
index a8e93436164254736cdb164ac44dbe9c86bd2b14..a37726ba83d7886221a482d94e9a6c9afe2e6bdc 100644
--- a/vsprojects/vcxproj/test/multiple_server_queues_test/multiple_server_queues_test.vcxproj
+++ b/vsprojects/vcxproj/test/multiple_server_queues_test/multiple_server_queues_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>multiple_server_queues_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>multiple_server_queues_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/murmur_hash_test/murmur_hash_test.vcxproj b/vsprojects/vcxproj/test/murmur_hash_test/murmur_hash_test.vcxproj
index 3691ce8006f1045e39c804ce4d2436b0b528839c..d12ab69caf582d9740c0b32942a6ef88e02ecf78 100644
--- a/vsprojects/vcxproj/test/murmur_hash_test/murmur_hash_test.vcxproj
+++ b/vsprojects/vcxproj/test/murmur_hash_test/murmur_hash_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>murmur_hash_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>murmur_hash_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/no_server_test/no_server_test.vcxproj b/vsprojects/vcxproj/test/no_server_test/no_server_test.vcxproj
index 4a9cfbedd8e970562c02664138ef1d0de709da0c..11518db4e72e334c41ee6561919efa9e94aa7ac6 100644
--- a/vsprojects/vcxproj/test/no_server_test/no_server_test.vcxproj
+++ b/vsprojects/vcxproj/test/no_server_test/no_server_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>no_server_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>no_server_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/public_headers_must_be_c89/public_headers_must_be_c89.vcxproj b/vsprojects/vcxproj/test/public_headers_must_be_c89/public_headers_must_be_c89.vcxproj
index ade586794e09789bf90563fc71fe63b3b5df90da..155bffbe61f052c229fc50c41054f6b6c46b3be0 100644
--- a/vsprojects/vcxproj/test/public_headers_must_be_c89/public_headers_must_be_c89.vcxproj
+++ b/vsprojects/vcxproj/test/public_headers_must_be_c89/public_headers_must_be_c89.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>public_headers_must_be_c89</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>public_headers_must_be_c89</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/reconnect_interop_client/reconnect_interop_client.vcxproj b/vsprojects/vcxproj/test/reconnect_interop_client/reconnect_interop_client.vcxproj
index 5adee7459a02af1eeed756931d0a534aa9d011fd..ad73f655041c4e7ea856c32d225e730d7898cc85 100644
--- a/vsprojects/vcxproj/test/reconnect_interop_client/reconnect_interop_client.vcxproj
+++ b/vsprojects/vcxproj/test/reconnect_interop_client/reconnect_interop_client.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>reconnect_interop_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>reconnect_interop_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj b/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj
index 940fdddb0246ebe45475e16fcc5dd9c2628899a3..86902aa75adcac279405c8dafff951a8a3d25a05 100644
--- a/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj
+++ b/vsprojects/vcxproj/test/reconnect_interop_server/reconnect_interop_server.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>reconnect_interop_server</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>reconnect_interop_server</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/resolve_address_test/resolve_address_test.vcxproj b/vsprojects/vcxproj/test/resolve_address_test/resolve_address_test.vcxproj
index acff2c8202e08fcd29f2999414f002f5744be063..03e8caecd8038e920c9d8dd97eab72b64fba56b6 100644
--- a/vsprojects/vcxproj/test/resolve_address_test/resolve_address_test.vcxproj
+++ b/vsprojects/vcxproj/test/resolve_address_test/resolve_address_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>resolve_address_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>resolve_address_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/secure_auth_context_test/secure_auth_context_test.vcxproj b/vsprojects/vcxproj/test/secure_auth_context_test/secure_auth_context_test.vcxproj
index b9c676f637a639bfd0be2ff70f490b562c0f3ae8..c6d5764d4fbe2b9bd56919b1692beb554bdba9ee 100644
--- a/vsprojects/vcxproj/test/secure_auth_context_test/secure_auth_context_test.vcxproj
+++ b/vsprojects/vcxproj/test/secure_auth_context_test/secure_auth_context_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>secure_auth_context_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>secure_auth_context_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/secure_channel_create_test/secure_channel_create_test.vcxproj b/vsprojects/vcxproj/test/secure_channel_create_test/secure_channel_create_test.vcxproj
index 6e9efd9ba5a67932b5b55e500224f4913e93cc3d..726116de6dfc111dd90cf95f0e6559a3d4e39ed9 100644
--- a/vsprojects/vcxproj/test/secure_channel_create_test/secure_channel_create_test.vcxproj
+++ b/vsprojects/vcxproj/test/secure_channel_create_test/secure_channel_create_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>secure_channel_create_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>secure_channel_create_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/secure_endpoint_test/secure_endpoint_test.vcxproj b/vsprojects/vcxproj/test/secure_endpoint_test/secure_endpoint_test.vcxproj
index e8ca6e9458e37f2e019df49c8d177e5c9eb42d4c..e131463b421ca4606df42767b184abe8fcfd9a73 100644
--- a/vsprojects/vcxproj/test/secure_endpoint_test/secure_endpoint_test.vcxproj
+++ b/vsprojects/vcxproj/test/secure_endpoint_test/secure_endpoint_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>secure_endpoint_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>secure_endpoint_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/server_chttp2_test/server_chttp2_test.vcxproj b/vsprojects/vcxproj/test/server_chttp2_test/server_chttp2_test.vcxproj
index 32021b70fea293367cb077e8a357475144200921..3562e6acb36f34e21840df0007f09b844143001a 100644
--- a/vsprojects/vcxproj/test/server_chttp2_test/server_chttp2_test.vcxproj
+++ b/vsprojects/vcxproj/test/server_chttp2_test/server_chttp2_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>server_chttp2_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>server_chttp2_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/server_crash_test_client/server_crash_test_client.vcxproj b/vsprojects/vcxproj/test/server_crash_test_client/server_crash_test_client.vcxproj
index dbd80815840949918eee5f40b38ade9a30dbc398..4b25a3e43d6d4d4c09e587284a590b6bfcde5322 100644
--- a/vsprojects/vcxproj/test/server_crash_test_client/server_crash_test_client.vcxproj
+++ b/vsprojects/vcxproj/test/server_crash_test_client/server_crash_test_client.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>server_crash_test_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>server_crash_test_client</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/server_registered_method_bad_client_test/server_registered_method_bad_client_test.vcxproj b/vsprojects/vcxproj/test/server_registered_method_bad_client_test/server_registered_method_bad_client_test.vcxproj
index 3920bdff5a5224bff63e53a1a195fb82e0cf9df9..83527d31cac058e763041dbfe10e9f25f85c94e8 100644
--- a/vsprojects/vcxproj/test/server_registered_method_bad_client_test/server_registered_method_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/server_registered_method_bad_client_test/server_registered_method_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>server_registered_method_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>server_registered_method_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/server_test/server_test.vcxproj b/vsprojects/vcxproj/test/server_test/server_test.vcxproj
index 161f067412d993e56f1bb6902993074a90fbca22..0b4d97797bda11c269de8cc34af3d2eb9e73c945 100644
--- a/vsprojects/vcxproj/test/server_test/server_test.vcxproj
+++ b/vsprojects/vcxproj/test/server_test/server_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>server_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>server_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
index ec28fccbea52dea62c70c59cbb2908824cc5db02..5fda7205266aa4107c6c11de41df748690014068 100644
--- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
+++ b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>set_initial_connect_string_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>set_initial_connect_string_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/shutdown_test/shutdown_test.vcxproj b/vsprojects/vcxproj/test/shutdown_test/shutdown_test.vcxproj
index 93b9a16722f503178647e69c6ab9b505b1191b2e..1ff80b72694008d47c51ae5955038c3293d106d9 100644
--- a/vsprojects/vcxproj/test/shutdown_test/shutdown_test.vcxproj
+++ b/vsprojects/vcxproj/test/shutdown_test/shutdown_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>shutdown_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>shutdown_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/simple_request_bad_client_test/simple_request_bad_client_test.vcxproj b/vsprojects/vcxproj/test/simple_request_bad_client_test/simple_request_bad_client_test.vcxproj
index c29a06fe70e58eec1819f0ed90aaf15ee55095ae..0e065d5c47fc0aa9db879b2ff4605c69581127a8 100644
--- a/vsprojects/vcxproj/test/simple_request_bad_client_test/simple_request_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/simple_request_bad_client_test/simple_request_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>simple_request_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>simple_request_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
index ce9c2deb2c5d01a97c496b5eb57078a8127827c8..1062132c604955db94705e0f0584da66c57c302f 100644
--- a/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
+++ b/vsprojects/vcxproj/test/sockaddr_resolver_test/sockaddr_resolver_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>sockaddr_resolver_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>sockaddr_resolver_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/sockaddr_utils_test/sockaddr_utils_test.vcxproj b/vsprojects/vcxproj/test/sockaddr_utils_test/sockaddr_utils_test.vcxproj
index bd29f0574b8bc56e3e0804cdcac86a3c7f4600b7..1b9024caa94e9e5237bdb5bdaf12ccdf7db1238e 100644
--- a/vsprojects/vcxproj/test/sockaddr_utils_test/sockaddr_utils_test.vcxproj
+++ b/vsprojects/vcxproj/test/sockaddr_utils_test/sockaddr_utils_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>sockaddr_utils_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>sockaddr_utils_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/status_test/status_test.vcxproj b/vsprojects/vcxproj/test/status_test/status_test.vcxproj
index 6d551b8a0941eb0cefc65e108f3e53d97d62f315..8e8e3839cfcf3c82a83c34e63f73497641e9b169 100644
--- a/vsprojects/vcxproj/test/status_test/status_test.vcxproj
+++ b/vsprojects/vcxproj/test/status_test/status_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>status_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>status_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj b/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj
index 99398b9448c85490bbacbfe75a6c356585e7c2d9..ba2ed468b99e9c4c9abfb8169721358bf2bd0593 100644
--- a/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj
+++ b/vsprojects/vcxproj/test/stress_test/stress_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>stress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>stress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/thread_stress_test/thread_stress_test.vcxproj b/vsprojects/vcxproj/test/thread_stress_test/thread_stress_test.vcxproj
index 33c0febb911efb14532abff78d685859f9c8969b..44b0a35766e088de0927e24a8bafadf574317cfa 100644
--- a/vsprojects/vcxproj/test/thread_stress_test/thread_stress_test.vcxproj
+++ b/vsprojects/vcxproj/test/thread_stress_test/thread_stress_test.vcxproj
@@ -65,12 +65,14 @@
     <TargetName>thread_stress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>thread_stress_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/time_averaged_stats_test/time_averaged_stats_test.vcxproj b/vsprojects/vcxproj/test/time_averaged_stats_test/time_averaged_stats_test.vcxproj
index 47ddeb800019c7dc0b1973b7e29468170dbf680f..ea8937978e41d32fbe81c84ee14b208ba3fc454a 100644
--- a/vsprojects/vcxproj/test/time_averaged_stats_test/time_averaged_stats_test.vcxproj
+++ b/vsprojects/vcxproj/test/time_averaged_stats_test/time_averaged_stats_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>time_averaged_stats_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>time_averaged_stats_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/timeout_encoding_test/timeout_encoding_test.vcxproj b/vsprojects/vcxproj/test/timeout_encoding_test/timeout_encoding_test.vcxproj
index cd97231cfd767b1657a1d670f3d33210d8ffaa5b..37be682009fbcd563350b6f194e9a264e6bf3abf 100644
--- a/vsprojects/vcxproj/test/timeout_encoding_test/timeout_encoding_test.vcxproj
+++ b/vsprojects/vcxproj/test/timeout_encoding_test/timeout_encoding_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>timeout_encoding_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>timeout_encoding_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/timer_heap_test/timer_heap_test.vcxproj b/vsprojects/vcxproj/test/timer_heap_test/timer_heap_test.vcxproj
index 65708793f347669673fe0b6617dcf91847798322..6718a56c40da002557a2e124c864a408af9e81a4 100644
--- a/vsprojects/vcxproj/test/timer_heap_test/timer_heap_test.vcxproj
+++ b/vsprojects/vcxproj/test/timer_heap_test/timer_heap_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>timer_heap_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>timer_heap_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/timer_list_test/timer_list_test.vcxproj b/vsprojects/vcxproj/test/timer_list_test/timer_list_test.vcxproj
index 6287688e4f31d13b0879f193ecb4c4057a9870e6..06249604bba06cfbaedc3620eebdabb75e812484 100644
--- a/vsprojects/vcxproj/test/timer_list_test/timer_list_test.vcxproj
+++ b/vsprojects/vcxproj/test/timer_list_test/timer_list_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>timer_list_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>timer_list_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/timers_test/timers_test.vcxproj b/vsprojects/vcxproj/test/timers_test/timers_test.vcxproj
index 629e1d531792d95875f47e34e1a66a22bdfaec1b..fa1ba6adc62eccfc4048a7af929268350f70d9c4 100644
--- a/vsprojects/vcxproj/test/timers_test/timers_test.vcxproj
+++ b/vsprojects/vcxproj/test/timers_test/timers_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>timers_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>timers_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/transport_connectivity_state_test/transport_connectivity_state_test.vcxproj b/vsprojects/vcxproj/test/transport_connectivity_state_test/transport_connectivity_state_test.vcxproj
index 18e125c1aadf7fb8a83d2cf735b4934cfd57b9de..fd41bd7d3f14ae2d20da60506cbffee85b8ef016 100644
--- a/vsprojects/vcxproj/test/transport_connectivity_state_test/transport_connectivity_state_test.vcxproj
+++ b/vsprojects/vcxproj/test/transport_connectivity_state_test/transport_connectivity_state_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>transport_connectivity_state_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>transport_connectivity_state_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/transport_metadata_test/transport_metadata_test.vcxproj b/vsprojects/vcxproj/test/transport_metadata_test/transport_metadata_test.vcxproj
index fdf1186f8a6c9e9186d768d8c88c5c6bf06bfac9..4debc5b80967b2beb820b5b887b402a79872ea40 100644
--- a/vsprojects/vcxproj/test/transport_metadata_test/transport_metadata_test.vcxproj
+++ b/vsprojects/vcxproj/test/transport_metadata_test/transport_metadata_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>transport_metadata_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>transport_metadata_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/unknown_frame_bad_client_test/unknown_frame_bad_client_test.vcxproj b/vsprojects/vcxproj/test/unknown_frame_bad_client_test/unknown_frame_bad_client_test.vcxproj
index 0c2567ebe4e36337335641154824bcafe38820a7..3fc458ee3d93c2488d725655e1872b8abe133f0b 100644
--- a/vsprojects/vcxproj/test/unknown_frame_bad_client_test/unknown_frame_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/unknown_frame_bad_client_test/unknown_frame_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>unknown_frame_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>unknown_frame_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
index 0dd7ad40d506cb804c9626a8f17c7ae5591dcc03..51c4a274a8ba5ad8e63fd4d53e7462b3e955844d 100644
--- a/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
+++ b/vsprojects/vcxproj/test/uri_parser_test/uri_parser_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>uri_parser_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>uri_parser_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
diff --git a/vsprojects/vcxproj/test/window_overflow_bad_client_test/window_overflow_bad_client_test.vcxproj b/vsprojects/vcxproj/test/window_overflow_bad_client_test/window_overflow_bad_client_test.vcxproj
index d709a8c8f7b177d4e4a56ad277da45788ebf7a21..a40c9b99cbacae9cde6b792aa82217f2ab95ac41 100644
--- a/vsprojects/vcxproj/test/window_overflow_bad_client_test/window_overflow_bad_client_test.vcxproj
+++ b/vsprojects/vcxproj/test/window_overflow_bad_client_test/window_overflow_bad_client_test.vcxproj
@@ -63,12 +63,14 @@
     <TargetName>window_overflow_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
     <TargetName>window_overflow_bad_client_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+    <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
     <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
     <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">