diff --git a/src/compiler/ruby_generator.cc b/src/compiler/ruby_generator.cc
index 64a81526fe2c5642f21514019326b3421f51d01b..e4ba387cbef82d6c2e17ec1114a8af0d7c46461c 100644
--- a/src/compiler/ruby_generator.cc
+++ b/src/compiler/ruby_generator.cc
@@ -83,7 +83,7 @@ void PrintService(const ServiceDescriptor* service, const string& package,
 
   // Begin the service module
   map<string, string> module_vars = ListToDict({
-      "module.name", CapitalizeString(service->name()),
+      "module.name", CapitalizeFirst(service->name()),
   });
   out->Print(module_vars, "module $module.name$\n");
   out->Indent();
@@ -131,8 +131,9 @@ string GetServices(const FileDescriptor* file) {
         "file.name", file->name(),
         "file.package", file->package(),
       });
+  out.Print("# Generated by the protocol buffer compiler.  DO NOT EDIT!\n");
   out.Print(header_comment_vars,
-            "### Generated from $file.name$ for $file.package$\n");
+            "# Source: $file.name$ for package '$file.package$'\n");
   if (file->service_count() == 0) {
     return output;
   }
@@ -152,7 +153,7 @@ string GetServices(const FileDescriptor* file) {
   vector<string> modules = Split(file->package(), '.');
   for (size_t i = 0; i < modules.size(); ++i) {
     map<string, string> module_vars = ListToDict({
-        "module.name", CapitalizeString(modules[i]),
+        "module.name", CapitalizeFirst(modules[i]),
     });
     out.Print(module_vars, "module $module.name$\n");
     out.Indent();
diff --git a/src/compiler/ruby_generator_string-inl.h b/src/compiler/ruby_generator_string-inl.h
index f74f2c7355a53a40993eac645de9671e8f050ab2..85a76fa42153597595e66a0d9918cf6594031e61 100644
--- a/src/compiler/ruby_generator_string-inl.h
+++ b/src/compiler/ruby_generator_string-inl.h
@@ -93,12 +93,11 @@ inline bool ReplacePrefix(string* s, const string& from, const string& to) {
   return true;
 }
 
-// CapitalizeString capitalizes a string.
-inline string CapitalizeString(string s) {
-  if (!s.empty()) {
+// CapitalizeFirst capitalizes the first char in a string.
+inline string CapitalizeFirst(string s) {
+  if (s.empty()) {
     return s;
   }
-  transform(s.begin(), s.end(), s.begin(), ::tolower);
   s[0] = ::toupper(s[0]);
   return s;
 }
@@ -117,7 +116,7 @@ inline string RubyTypeOf(const string& a_type, const string& package) {
         res += "::";  // switch '.' to the ruby module delim
       }
       if (i < prefixes_and_type.size() - 1) {
-        res += CapitalizeString(prefixes_and_type[i]);  // capitalize pkgs
+        res += CapitalizeFirst(prefixes_and_type[i]);  // capitalize pkgs
       } else {
         res += prefixes_and_type[i];
       }
diff --git a/src/compiler/ruby_plugin.cc b/src/compiler/ruby_plugin.cc
index 73d1508ad06ce94adcfae40b5dde34dfb4039230..62229f921747f89a625af878cd9df13e6fd2ebe1 100644
--- a/src/compiler/ruby_plugin.cc
+++ b/src/compiler/ruby_plugin.cc
@@ -62,7 +62,7 @@ class RubyGrpcGenerator : public google::protobuf::compiler::CodeGenerator {
     }
 
     std::unique_ptr<google::protobuf::io::ZeroCopyOutputStream> output(
-        context->OpenForInsert(file_name, "module_scope"));
+        context->Open(file_name));
     google::protobuf::io::CodedOutputStream coded_out(output.get());
     string code = grpc_ruby_generator::GetServices(file);
     coded_out.WriteRaw(code.data(), code.size());