diff --git a/http2/platform/api/http2_string_utils.h b/http2/platform/api/http2_string_utils.h
index ba40560..1db9d66 100644
--- a/http2/platform/api/http2_string_utils.h
+++ b/http2/platform/api/http2_string_utils.h
@@ -5,48 +5,48 @@
 #ifndef QUICHE_HTTP2_PLATFORM_API_HTTP2_STRING_UTILS_H_
 #define QUICHE_HTTP2_PLATFORM_API_HTTP2_STRING_UTILS_H_
 
+#include <string>
 #include <type_traits>
 #include <utility>
 
-#include "net/third_party/quiche/src/http2/platform/api/http2_string.h"
 #include "net/third_party/quiche/src/http2/platform/api/http2_string_piece.h"
 #include "net/http2/platform/impl/http2_string_utils_impl.h"
 
 namespace http2 {
 
 template <typename... Args>
-inline Http2String Http2StrCat(const Args&... args) {
+inline std::string Http2StrCat(const Args&... args) {
   return Http2StrCatImpl(std::forward<const Args&>(args)...);
 }
 
 template <typename... Args>
-inline void Http2StrAppend(Http2String* output, const Args&... args) {
+inline void Http2StrAppend(std::string* output, const Args&... args) {
   Http2StrAppendImpl(output, std::forward<const Args&>(args)...);
 }
 
 template <typename... Args>
-inline Http2String Http2StringPrintf(const Args&... args) {
+inline std::string Http2StringPrintf(const Args&... args) {
   return Http2StringPrintfImpl(std::forward<const Args&>(args)...);
 }
 
-inline Http2String Http2HexEncode(const void* bytes, size_t size) {
+inline std::string Http2HexEncode(const void* bytes, size_t size) {
   return Http2HexEncodeImpl(bytes, size);
 }
 
-inline Http2String Http2HexDecode(Http2StringPiece data) {
+inline std::string Http2HexDecode(Http2StringPiece data) {
   return Http2HexDecodeImpl(data);
 }
 
-inline Http2String Http2HexDump(Http2StringPiece data) {
+inline std::string Http2HexDump(Http2StringPiece data) {
   return Http2HexDumpImpl(data);
 }
 
-inline Http2String Http2HexEscape(Http2StringPiece data) {
+inline std::string Http2HexEscape(Http2StringPiece data) {
   return Http2HexEscapeImpl(data);
 }
 
 template <typename Number>
-inline Http2String Http2Hex(Number number) {
+inline std::string Http2Hex(Number number) {
   static_assert(std::is_integral<Number>::value, "Number has to be an int");
   return Http2HexImpl(number);
 }
