diff --git a/services/tunnelbroker/Dockerfile b/services/tunnelbroker/Dockerfile
--- a/services/tunnelbroker/Dockerfile
+++ b/services/tunnelbroker/Dockerfile
@@ -13,8 +13,7 @@
 
 COPY services/tunnelbroker .
 
-COPY shared/protos ../../shared/protos
-COPY shared/tunnelbroker_messages ../../shared/tunnelbroker_messages
+COPY shared ../../shared/
 
 RUN cargo install --path .
 
diff --git a/services/tunnelbroker/make_docker_image.sh b/services/tunnelbroker/make_docker_image.sh
--- a/services/tunnelbroker/make_docker_image.sh
+++ b/services/tunnelbroker/make_docker_image.sh
@@ -10,9 +10,7 @@
 mkdir -p "$BUILD_DIR"/{scripts,shared,services/tunnelbroker}
 
 cp "$SCRIPT_DIR/../../scripts/install_protobuf.sh" "$BUILD_DIR"/scripts
-cp -r "${SCRIPT_DIR}/../../shared/protos" "$BUILD_DIR"/shared/protos
-cp -r "${SCRIPT_DIR}/../../shared/tunnelbroker_messages" \
-  "$BUILD_DIR"/shared/tunnelbroker_messages
+cp -r "${SCRIPT_DIR}/../../shared" "$BUILD_DIR"/
 cp -r "${SCRIPT_DIR}"/{Cargo.toml,Cargo.lock,build.rs,src} \
   "$BUILD_DIR"/services/tunnelbroker/
 
diff --git a/shared/grpc_clients/build.rs b/shared/grpc_clients/build.rs
--- a/shared/grpc_clients/build.rs
+++ b/shared/grpc_clients/build.rs
@@ -10,4 +10,8 @@
       &["../protos"],
     )
     .unwrap_or_else(|e| panic!("Failed to compile protos {:?}", e));
+
+  println!("cargo:rerun-if-changed=../protos/identity_client.proto");
+  println!("cargo:rerun-if-changed=../protos/identity_authenticated.proto");
+  println!("cargo:rerun-if-changed=../protos/tunnelbroker.proto");
 }
diff --git a/shared/grpc_clients/src/lib.rs b/shared/grpc_clients/src/lib.rs
--- a/shared/grpc_clients/src/lib.rs
+++ b/shared/grpc_clients/src/lib.rs
@@ -2,6 +2,9 @@
 pub mod identity;
 pub mod tunnelbroker;
 
+// Re-export some dependencies which may need to be used by downstream crates
+pub use tonic;
+
 use error::Error;
 use std::path::Path;
 use tonic::transport::{Certificate, Channel, ClientTlsConfig};