diff --git a/Makefile b/Makefile
index 4f43625baad420ecbc35c7f99d07dd88a002d3af..073dd8013247f84eee05b29d99a6ca10d39a1b0c 100644
--- a/Makefile
+++ b/Makefile
@@ -3153,6 +3153,7 @@ endif
 
 
 LIBGRPC++_CODEGEN_LIB_SRC = \
+    include/grpc++/impl/codegen/proto_serializer.cc \
 
 PUBLIC_HEADERS_CXX += \
     include/grpc++/impl/codegen/async_stream.h \
diff --git a/build.yaml b/build.yaml
index 9c946a81aca6b1e3faf0a56551b4b06a61f82295..40fdc30febc3fcc0a46220077853b8e894fc14ff 100644
--- a/build.yaml
+++ b/build.yaml
@@ -748,7 +748,8 @@ libs:
   - include/grpc++/impl/codegen/sync_stream.h
   - include/grpc++/impl/codegen/time.h
   headers: []
-  src: []
+  src:
+  - include/grpc++/impl/codegen/proto_serializer.cc
   deps:
   - grpc_codegen_lib
   filegroups:
diff --git a/include/grpc++/impl/codegen/proto_serializer.cc b/include/grpc++/impl/codegen/proto_serializer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..456567e08007b55abb5d4b39b1d06d27c575cf6a
--- /dev/null
+++ b/include/grpc++/impl/codegen/proto_serializer.cc
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+// TODO(dgq): This file is part of a temporary fix to work around codegen
+// issues.
+//
+// This whole file will be removed in the future.
+
+#include <grpc++/impl/codegen/proto_utils.h>
+
+grpc::ProtoSerializerInterface* grpc::g_proto_serializer = nullptr;
diff --git a/src/cpp/proto/proto_serializer.cc b/src/cpp/proto/proto_serializer.cc
index 3591417172569242f9dfeae2a8de68ec41fbedbc..d5ed1385610488a732d5c15021eb8a4de2fdaa38 100644
--- a/src/cpp/proto/proto_serializer.cc
+++ b/src/cpp/proto/proto_serializer.cc
@@ -36,7 +36,7 @@
 //
 // This whole file will be removed in the future.
 
-#include <grpc++/impl/proto_utils.h>
+#include <grpc++/impl/codegen/proto_utils.h>
 
 static grpc::ProtoSerializer proto_serializer;
 grpc::ProtoSerializerInterface* grpc::g_proto_serializer = &proto_serializer;
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index fd4bbdb41b8feeda74c7c9808d1b0892d8ccf4dd..b464cae7e41be69987bbce91ef78775cd05c9032 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -5110,6 +5110,7 @@
       "include/grpc++/impl/codegen/config_protobuf.h", 
       "include/grpc++/impl/codegen/grpc_library.h", 
       "include/grpc++/impl/codegen/method_handler_impl.h", 
+      "include/grpc++/impl/codegen/proto_serializer.cc", 
       "include/grpc++/impl/codegen/proto_utils.h", 
       "include/grpc++/impl/codegen/rpc_method.h", 
       "include/grpc++/impl/codegen/rpc_service_method.h", 
diff --git a/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj b/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj
index 811e0bdd18ab770422b3e9596f0a3dca8addda82..d64afde0ceb29a91c7daa71f9e11801ce1b98b88 100644
--- a/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj
+++ b/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj
@@ -193,7 +193,7 @@
     <ClInclude Include="$(SolutionDir)\..\include\grpc\impl\codegen\time.h" />
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="$(SolutionDir)\..\vsprojects\dummy.c">
+    <ClCompile Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_serializer.cc">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj.filters b/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj.filters
index 582d88b8cca4b72994bd4531223849b93da79d73..a3e3ac8c35cbcca00e38c7d6a92bedcf0c348a49 100644
--- a/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++_codegen_lib/grpc++_codegen_lib.vcxproj.filters
@@ -1,5 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <ClCompile Include="$(SolutionDir)\..\include\grpc++\impl\codegen\proto_serializer.cc">
+      <Filter>include\grpc++\impl\codegen</Filter>
+    </ClCompile>
+  </ItemGroup>
   <ItemGroup>
     <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\async_stream.h">
       <Filter>include\grpc++\impl\codegen</Filter>