diff --git a/src/core/proto/grpc/lb/v0/load_balancer.pb.c b/src/core/proto/grpc/lb/v0/load_balancer.pb.c
index 4c1d5c3b2c316438f7ff0316511447acbbfa2013..304bbb1c12e7f6f7c2813ae6b61784c8dc8f8a81 100644
--- a/src/core/proto/grpc/lb/v0/load_balancer.pb.c
+++ b/src/core/proto/grpc/lb/v0/load_balancer.pb.c
@@ -1,5 +1,5 @@
 /* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.3.4-dev at Mon Jan 11 12:57:20 2016. */
+/* Generated by nanopb-0.3.4-dev */
 
 #include "src/core/proto/grpc/lb/v0/load_balancer.pb.h"
 
diff --git a/src/core/proto/grpc/lb/v0/load_balancer.pb.h b/src/core/proto/grpc/lb/v0/load_balancer.pb.h
index a4c4b5f6dccfb6ebf5a3f0a2e10d810b6b7dca51..775100546a701c79bb355853887f3aefdc6fdf5f 100644
--- a/src/core/proto/grpc/lb/v0/load_balancer.pb.h
+++ b/src/core/proto/grpc/lb/v0/load_balancer.pb.h
@@ -1,5 +1,5 @@
 /* Automatically generated nanopb header */
-/* Generated by nanopb-0.3.4-dev at Mon Jan 11 12:57:20 2016. */
+/* Generated by nanopb-0.3.4-dev */
 
 #ifndef PB_LOAD_BALANCER_PB_H_INCLUDED
 #define PB_LOAD_BALANCER_PB_H_INCLUDED
diff --git a/tools/codegen/core/gen_load_balancing_proto.sh b/tools/codegen/core/gen_load_balancing_proto.sh
index 1c5384d835850070f23c300b10fc7dc7be71a5df..8bd8ac7742b5293f1f19dd749879f736bc8e5103 100755
--- a/tools/codegen/core/gen_load_balancing_proto.sh
+++ b/tools/codegen/core/gen_load_balancing_proto.sh
@@ -4,35 +4,47 @@
 #   tools/codegen/core/gen_load_balancing_proto.sh \
 #     src/proto/grpc/lb/v0/load_balancer.proto
 
+set -ex
 if [ $# -eq 0 ]; then
-  echo "Usage: $0 <load_balancer.proto>"
+  echo "Usage: $0 <load_balancer.proto> [output dir]"
   exit 1
 fi
 
+readonly GRPC_ROOT=$PWD
+
+OUTPUT_DIR="$GRPC_ROOT/src/core/proto/grpc/lb/v0"
+if [ $# -eq 2 ]; then
+  mkdir -p "$2"
+  if [ $? != 0 ]; then
+    echo "Error creating output directory $2"
+    exit 2
+  fi
+  OUTPUT_DIR="$2"
+fi
+
 readonly EXPECTED_OPTIONS_FILE_PATH="${1%.*}.options"
 
 if [[ ! -f "$1" ]]; then
   echo "Input proto file '$1' doesn't exist."
-  exit 2
+  exit 3
 fi
 if [[ ! -f "${EXPECTED_OPTIONS_FILE_PATH}" ]]; then
   echo "Expected nanopb options file '${EXPECTED_OPTIONS_FILE_PATH}' missing"
-  exit 3
+  exit 4
 fi
 
-readonly GRPC_ROOT=$PWD
-
 pushd "$(dirname $1)" > /dev/null
 
 protoc \
 --plugin=protoc-gen-nanopb="$GRPC_ROOT/third_party/nanopb/generator/protoc-gen-nanopb" \
---nanopb_out='-L#include\ \"third_party/nanopb/pb.h\"'":$GRPC_ROOT/src/core/proto/grpc/lb/v0" \
+--nanopb_out='-T -L#include\ \"third_party/nanopb/pb.h\"'":$OUTPUT_DIR" \
 "$(basename $1)"
 
 readonly PROTO_BASENAME=$(basename $1 .proto)
 sed -i "s:$PROTO_BASENAME.pb.h:src/core/proto/grpc/lb/v0/$PROTO_BASENAME.pb.h:g" \
-    "$GRPC_ROOT/src/core/proto/grpc/lb/v0/$PROTO_BASENAME.pb.c"
-clang-format -i "$GRPC_ROOT/src/core/proto/grpc/lb/v0/$PROTO_BASENAME.pb.c"
-clang-format -i "$GRPC_ROOT/src/core/proto/grpc/lb/v0/$PROTO_BASENAME.pb.h"
+    "$OUTPUT_DIR/$PROTO_BASENAME.pb.c"
+
+clang-format -style="{BasedOnStyle: Google, Language: Cpp}" -i "$OUTPUT_DIR/$PROTO_BASENAME.pb.c"
+clang-format -style="{BasedOnStyle: Google, Language: Cpp}" -i "$OUTPUT_DIR/$PROTO_BASENAME.pb.h"
 
 popd > /dev/null
diff --git a/tools/distrib/check_nanopb_output.sh b/tools/distrib/check_nanopb_output.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d1d829d09d2e4a096649813ade7371e259fbce2e
--- /dev/null
+++ b/tools/distrib/check_nanopb_output.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+# Copyright 2015-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.
+
+set -ex
+
+readonly NANOPB_TMP_OUTPUT=$(mktemp -d)
+readonly VENV_DIR=$(mktemp -d)
+# create a virtualenv for nanopb's compiler
+pushd $VENV_DIR
+readonly VENV_NAME="nanopb-$(date '+%Y%m%d_%H%M%S_%N')"
+virtualenv $VENV_NAME
+. $VENV_NAME/bin/activate
+popd
+
+# install proto3
+pip install protobuf==3.0.0b2
+
+# change to root directory
+cd $(dirname $0)/../..
+
+# stack up and change to nanopb's proto generator directory
+pushd third_party/nanopb/generator/proto
+make
+
+# back to the root directory
+popd
+
+# nanopb-compile the proto to a temp location
+./tools/codegen/core/gen_load_balancing_proto.sh \
+  src/proto/grpc/lb/v0/load_balancer.proto \
+  $NANOPB_TMP_OUTPUT
+
+# compare outputs to checked compiled code
+diff -rq $NANOPB_TMP_OUTPUT src/core/proto/grpc/lb/v0
+if [ $? != 0 ]; then
+  echo "Outputs differ: $NANOPB_TMP_OUTPUT vs src/core/proto/grpc/lb/v0"
+  exit 1
+fi
+deactivate
diff --git a/tools/run_tests/run_sanity.sh b/tools/run_tests/run_sanity.sh
index 8170cff77751b3dc03b10e5e73021e0b943688b6..ac7d3cd22a77b2a9a0bd5e8331440e768433b0e9 100755
--- a/tools/run_tests/run_sanity.sh
+++ b/tools/run_tests/run_sanity.sh
@@ -61,4 +61,4 @@ fi
 ./tools/buildgen/generate_projects.sh
 ./tools/distrib/check_copyright.py
 ./tools/distrib/clang_format_code.sh
-
+./tools/distrib/check_nanopb_output.sh