diff --git a/src/compiler/generator_helpers.h b/src/compiler/generator_helpers.h
index 7bdaff1c9b08f0b41c248237f7eace3185c91278..68b807b0578ca457f3c86024b69d469b59a53616 100644
--- a/src/compiler/generator_helpers.h
+++ b/src/compiler/generator_helpers.h
@@ -126,7 +126,13 @@ inline grpc::string LowerUnderscoreToUpperCamel(grpc::string str) {
 }
 
 inline grpc::string FileNameInUpperCamel(const grpc::protobuf::FileDescriptor *file) {
-  return LowerUnderscoreToUpperCamel(StripProto(file->name()));
+  std::vector<grpc::string> tokens = tokenize(StripProto(file->name()), "/");
+  grpc::string result = "";
+  for (unsigned int i = 0; i < tokens.size() - 1; i++) {
+    result += tokens[i] + "/";
+  }
+  result += LowerUnderscoreToUpperCamel(tokens.back());
+  return result;
 }
 
 enum MethodType {