diff --git a/src/ruby/lib/grpc/generic/rpc_server.rb b/src/ruby/lib/grpc/generic/rpc_server.rb
index 3375fcf20ac2be27ad021d071a47d321d5d920c5..424719304e6069025d2ffd9e7bc58b6fb9731e9f 100644
--- a/src/ruby/lib/grpc/generic/rpc_server.rb
+++ b/src/ruby/lib/grpc/generic/rpc_server.rb
@@ -468,10 +468,11 @@ module GRPC
         route = "/#{cls.service_name}/#{name}".to_sym
         fail "already registered: rpc #{route} from #{spec}" if specs.key? route
         specs[route] = spec
+        rpc_name = GenericService.underscore(name.to_s).to_sym
         if service.is_a?(Class)
-          handlers[route] = cls.new.method(name.to_s.underscore.to_sym)
+          handlers[route] = cls.new.method(rpc_name)
         else
-          handlers[route] = service.method(name.to_s.underscore.to_sym)
+          handlers[route] = service.method(rpc_name)
         end
         logger.info("handling #{route} with #{handlers[route]}")
       end
diff --git a/src/ruby/lib/grpc/generic/service.rb b/src/ruby/lib/grpc/generic/service.rb
index 2226820c2b037379c82d8e83b493b7d55bf39c91..8ea2c82f171a3e62890f2244613ffcd099b3a9fb 100644
--- a/src/ruby/lib/grpc/generic/service.rb
+++ b/src/ruby/lib/grpc/generic/service.rb
@@ -30,24 +30,6 @@
 require 'grpc/generic/client_stub'
 require 'grpc/generic/rpc_desc'
 
-# Extend String to add a method underscore
-class String
-  # creates a new string that is the underscore separate version of this one.
-  #
-  # E.g,
-  # PrintHTML -> print_html
-  # AMethod -> a_method
-  # AnRpc -> an_rpc
-  def underscore
-    word = dup
-    word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
-    word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
-    word.tr!('-', '_')
-    word.downcase!
-    word
-  end
-end
-
 # GRPC contains the General RPC module.
 module GRPC
   # Provides behaviour used to implement schema-derived service classes.