diff --git a/include/grpc++/client_context.h b/include/grpc++/client_context.h
index ee28f360cbeaa911fde56ec160b5a33e5c818d6b..c4724cc1f018ef1990cc34779c944596a7bac863 100644
--- a/include/grpc++/client_context.h
+++ b/include/grpc++/client_context.h
@@ -138,12 +138,14 @@ class ClientContext {
   void AddMetadata(const grpc::string& meta_key,
                    const grpc::string& meta_value);
 
-  const std::multimap<grpc::string, grpc::string>& GetServerInitialMetadata() {
+  const std::multimap<grpc::string_ref, grpc::string_ref>&
+  GetServerInitialMetadata() {
     GPR_ASSERT(initial_metadata_received_);
     return recv_initial_metadata_;
   }
 
-  const std::multimap<grpc::string, grpc::string>& GetServerTrailingMetadata() {
+  const std::multimap<grpc::string_ref, grpc::string_ref>&
+  GetServerTrailingMetadata() {
     // TODO(yangg) check finished
     return trailing_metadata_;
   }
@@ -234,8 +236,8 @@ class ClientContext {
   mutable std::shared_ptr<const AuthContext> auth_context_;
   struct census_context* census_context_;
   std::multimap<grpc::string, grpc::string> send_initial_metadata_;
-  std::multimap<grpc::string, grpc::string> recv_initial_metadata_;
-  std::multimap<grpc::string, grpc::string> trailing_metadata_;
+  std::multimap<grpc::string_ref, grpc::string_ref> recv_initial_metadata_;
+  std::multimap<grpc::string_ref, grpc::string_ref> trailing_metadata_;
 
   grpc_call* propagate_from_call_;
   PropagationOptions propagation_options_;
diff --git a/include/grpc++/server_context.h b/include/grpc++/server_context.h
index ce3cb47a237ee1a8e216d54dd2ea8ee45de69185..a165d84944cd78a95c668547f148ee7b225ad0f9 100644
--- a/include/grpc++/server_context.h
+++ b/include/grpc++/server_context.h
@@ -103,7 +103,7 @@ class ServerContext {
 
   bool IsCancelled() const;
 
-  const std::multimap<grpc::string, grpc::string>& client_metadata() {
+  const std::multimap<grpc::string_ref, grpc::string_ref>& client_metadata() {
     return client_metadata_;
   }
 
@@ -185,7 +185,7 @@ class ServerContext {
   CompletionQueue* cq_;
   bool sent_initial_metadata_;
   mutable std::shared_ptr<const AuthContext> auth_context_;
-  std::multimap<grpc::string, grpc::string> client_metadata_;
+  std::multimap<grpc::string_ref, grpc::string_ref> client_metadata_;
   std::multimap<grpc::string, grpc::string> initial_metadata_;
   std::multimap<grpc::string, grpc::string> trailing_metadata_;