diff --git a/rs_bindings_from_cc/ast_consumer.h b/rs_bindings_from_cc/ast_consumer.h
index 949f022..764c408 100644
--- a/rs_bindings_from_cc/ast_consumer.h
+++ b/rs_bindings_from_cc/ast_consumer.h
@@ -5,23 +5,23 @@
 #ifndef CRUBIT_RS_BINDINGS_FROM_CC_AST_CONSUMER_H_
 #define CRUBIT_RS_BINDINGS_FROM_CC_AST_CONSUMER_H_
 
-#include <string>
-
 #include "rs_bindings_from_cc/ast_visitor.h"
 #include "rs_bindings_from_cc/ir.h"
+#include "third_party/absl/strings/string_view.h"
 #include "third_party/absl/types/span.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/ASTConsumer.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/ASTContext.h"
 
 namespace rs_bindings_from_cc {
 
-// Consumes the Clang AST created from `public_headers` (a collection of paths
-// in the format suitable for a google3-relative quote include) and generates
-// the intermediate representation (`IR`).
+// Consumes the Clang AST created from `public_header_names` (a collection of
+// paths in the format suitable for a google3-relative quote include) and
+// generates the intermediate representation (`IR`).
 class AstConsumer : public clang::ASTConsumer {
  public:
-  explicit AstConsumer(absl::Span<const std::string> public_headers, IR &ir)
-      : ast_visitor_(public_headers, ir) {}
+  explicit AstConsumer(absl::Span<const absl::string_view> public_header_names,
+                       IR &ir)
+      : ast_visitor_(public_header_names, ir) {}
 
   void HandleTranslationUnit(clang::ASTContext &context) override;
 
diff --git a/rs_bindings_from_cc/ast_visitor.cc b/rs_bindings_from_cc/ast_visitor.cc
index 3f7789c..9c73a0a 100644
--- a/rs_bindings_from_cc/ast_visitor.cc
+++ b/rs_bindings_from_cc/ast_visitor.cc
@@ -6,13 +6,12 @@
 
 #include <memory>
 #include <string>
-#include <utility>
 #include <vector>
 
 #include "base/logging.h"
 #include "rs_bindings_from_cc/ir.h"
 #include "third_party/absl/container/flat_hash_set.h"
-#include "third_party/absl/strings/cord.h"
+#include "third_party/absl/strings/string_view.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/ASTContext.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/Decl.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/Mangle.h"
@@ -40,8 +39,8 @@
   // tool, but also all public headers of the direct dependencies of the
   // library. This way if the library was IWYU clean, the generated code will be
   // too.
-  for (const std::string& header : public_headers_) {
-    ir_.UsedHeaders().emplace_back(HeaderName(absl::Cord(header)));
+  for (const absl::string_view header_name : public_header_names_) {
+    ir_.UsedHeaders().emplace_back(HeaderName(std::string(header_name)));
   }
 
   return Base::TraverseTranslationUnitDecl(translation_unit_decl);
@@ -87,7 +86,7 @@
           qual_type->getAs<clang::BuiltinType>()) {
     if (builtin_type->isIntegerType()) {
       // TODO(hlopko): look at the actual width of the type.
-      return Type(absl::Cord("i32"), absl::Cord("int"));
+      return Type(std::string("i32"), std::string("int"));
     }
     if (builtin_type->isVoidType()) {
       return Type::Void();
@@ -96,19 +95,19 @@
   LOG(FATAL) << "Unsupported type " << qual_type.getAsString() << "\n";
 }
 
-absl::Cord AstVisitor::GetMangledName(
+std::string AstVisitor::GetMangledName(
     const clang::NamedDecl* named_decl) const {
   std::string name;
   llvm::raw_string_ostream stream(name);
   mangler_->mangleName(named_decl, stream);
   stream.flush();
-  return absl::Cord(std::move(name));
+  return name;
 }
 
 Identifier AstVisitor::GetTranslatedName(
     const clang::NamedDecl* named_decl) const {
   // TODO(hlopko): handle the case where the name is not a simple identifier.
-  return Identifier(absl::Cord(named_decl->getName()));
+  return Identifier(std::string(named_decl->getName()));
 }
 
 }  // namespace rs_bindings_from_cc
diff --git a/rs_bindings_from_cc/ast_visitor.h b/rs_bindings_from_cc/ast_visitor.h
index 2f14147..524883d 100644
--- a/rs_bindings_from_cc/ast_visitor.h
+++ b/rs_bindings_from_cc/ast_visitor.h
@@ -10,7 +10,7 @@
 
 #include "rs_bindings_from_cc/ir.h"
 #include "third_party/absl/container/flat_hash_set.h"
-#include "third_party/absl/strings/cord.h"
+#include "third_party/absl/strings/string_view.h"
 #include "third_party/absl/types/span.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/Decl.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/Mangle.h"
@@ -19,15 +19,16 @@
 
 namespace rs_bindings_from_cc {
 
-// Iterates over the AST created from `public_headers` (a collection of paths
-// in the format suitable for a google3-relative quote include) and creates
-// an intermediate representation of the import (`IR`).
+// Iterates over the AST created from `public_header_names` (a collection of
+// paths in the format suitable for a google3-relative quote include) and
+// creates an intermediate representation of the import (`IR`).
 class AstVisitor : public clang::RecursiveASTVisitor<AstVisitor> {
  public:
   using Base = clang::RecursiveASTVisitor<AstVisitor>;
 
-  explicit AstVisitor(absl::Span<const std::string> public_headers, IR &ir)
-      : public_headers_(public_headers), ir_(ir) {}
+  explicit AstVisitor(absl::Span<const absl::string_view> public_header_names,
+                      IR &ir)
+      : public_header_names_(public_header_names), ir_(ir) {}
 
   // These functions are called by the base class while visiting the different
   // parts of the AST. The API follows the rules of the base class which is
@@ -39,11 +40,11 @@
   bool VisitFunctionDecl(clang::FunctionDecl *function_decl);
 
  private:
-  absl::Cord GetMangledName(const clang::NamedDecl *named_decl) const;
+  std::string GetMangledName(const clang::NamedDecl *named_decl) const;
   Identifier GetTranslatedName(const clang::NamedDecl *named_decl) const;
   Type ConvertType(clang::QualType qual_type) const;
 
-  absl::Span<const std::string> public_headers_;
+  absl::Span<const absl::string_view> public_header_names_;
   IR &ir_;
   std::unique_ptr<clang::MangleContext> mangler_;
   absl::flat_hash_set<const clang::Decl *> seen_decls_;
diff --git a/rs_bindings_from_cc/ast_visitor_test.cc b/rs_bindings_from_cc/ast_visitor_test.cc
index bc3f141..ddd2b53 100644
--- a/rs_bindings_from_cc/ast_visitor_test.cc
+++ b/rs_bindings_from_cc/ast_visitor_test.cc
@@ -53,7 +53,8 @@
   IR ir;
   devtools::cymbal::RunToolWithClangFlagsOnCode(
       args_as_strings, file_contents,
-      std::make_unique<rs_bindings_from_cc::FrontendAction>(headers, ir));
+      std::make_unique<rs_bindings_from_cc::FrontendAction>(
+          std::vector<absl::string_view>(headers.begin(), headers.end()), ir));
   return ir;
 }
 
diff --git a/rs_bindings_from_cc/frontend_action.cc b/rs_bindings_from_cc/frontend_action.cc
index a4d3708..e07526d 100644
--- a/rs_bindings_from_cc/frontend_action.cc
+++ b/rs_bindings_from_cc/frontend_action.cc
@@ -14,7 +14,7 @@
 
 std::unique_ptr<clang::ASTConsumer> FrontendAction::CreateASTConsumer(
     clang::CompilerInstance &, llvm::StringRef) {
-  return std::make_unique<AstConsumer>(public_headers_, ir_);
+  return std::make_unique<AstConsumer>(public_header_names_, ir_);
 }
 
 }  // namespace rs_bindings_from_cc
diff --git a/rs_bindings_from_cc/frontend_action.h b/rs_bindings_from_cc/frontend_action.h
index e9c414c..3ff0cd0 100644
--- a/rs_bindings_from_cc/frontend_action.h
+++ b/rs_bindings_from_cc/frontend_action.h
@@ -6,9 +6,9 @@
 #define CRUBIT_RS_BINDINGS_FROM_CC_FRONTEND_ACTION_H_
 
 #include <memory>
-#include <string>
 
 #include "rs_bindings_from_cc/ir.h"
+#include "third_party/absl/strings/string_view.h"
 #include "third_party/absl/types/span.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/AST/ASTConsumer.h"
 #include "third_party/llvm/llvm-project/clang/include/clang/Frontend/CompilerInstance.h"
@@ -20,14 +20,15 @@
 // (`IR`) into the `ir` parameter.
 class FrontendAction : public clang::ASTFrontendAction {
  public:
-  explicit FrontendAction(absl::Span<const std::string> public_headers, IR &ir)
-      : public_headers_(public_headers), ir_(ir) {}
+  explicit FrontendAction(
+      absl::Span<const absl::string_view> public_header_names, IR &ir)
+      : public_header_names_(public_header_names), ir_(ir) {}
 
   std::unique_ptr<clang::ASTConsumer> CreateASTConsumer(
       clang::CompilerInstance &, llvm::StringRef) override;
 
  private:
-  absl::Span<const std::string> public_headers_;
+  absl::Span<const absl::string_view> public_header_names_;
   IR &ir_;
 };
 
diff --git a/rs_bindings_from_cc/ir.cc b/rs_bindings_from_cc/ir.cc
index 883623c..ce94531 100644
--- a/rs_bindings_from_cc/ir.cc
+++ b/rs_bindings_from_cc/ir.cc
@@ -7,7 +7,6 @@
 #include <string>
 #include <vector>
 
-#include "third_party/absl/strings/cord.h"
 #include "third_party/json/src/json.hpp"
 
 namespace rs_bindings_from_cc {
diff --git a/rs_bindings_from_cc/ir.h b/rs_bindings_from_cc/ir.h
index 32cafef..e89cd83 100644
--- a/rs_bindings_from_cc/ir.h
+++ b/rs_bindings_from_cc/ir.h
@@ -11,11 +11,12 @@
 #ifndef CRUBIT_RS_BINDINGS_FROM_CC_IR_H_
 #define CRUBIT_RS_BINDINGS_FROM_CC_IR_H_
 
+#include <string>
 #include <utility>
 #include <vector>
 
 #include "base/logging.h"
-#include "third_party/absl/strings/cord.h"
+#include "third_party/absl/strings/string_view.h"
 #include "third_party/json/src/json.hpp"
 
 namespace rs_bindings_from_cc {
@@ -23,16 +24,16 @@
 // A name of a public header of the C++ library.
 class HeaderName {
  public:
-  explicit HeaderName(absl::Cord name) : name_(std::move(name)) {}
+  explicit HeaderName(std::string name) : name_(std::move(name)) {}
 
-  const absl::Cord &IncludePath() const { return name_; }
+  absl::string_view IncludePath() const { return name_; }
 
   nlohmann::json ToJson() const;
 
  private:
   // Header pathname in the format suitable for a google3-relative quote
   // include.
-  absl::Cord name_;
+  std::string name_;
 };
 
 // A type involved in the bindings. It has the knowledge about how the type is
@@ -47,19 +48,19 @@
 //     `cc_name` cannot be empty.
 class Type {
  public:
-  explicit Type(absl::Cord rs_name, absl::Cord cc_name)
+  explicit Type(std::string rs_name, std::string cc_name)
       : rs_name_(std::move(rs_name)), cc_name_(std::move(cc_name)) {}
 
-  static Type Void() { return Type(absl::Cord("()"), absl::Cord("void")); }
+  static Type Void() { return Type(std::string("()"), std::string("void")); }
   bool IsVoid() const { return rs_name_ == "()"; }
-  const absl::Cord &RsName() const { return rs_name_; }
-  const absl::Cord &CcName() const { return cc_name_; }
+  absl::string_view RsName() const { return rs_name_; }
+  absl::string_view CcName() const { return cc_name_; }
 
   nlohmann::json ToJson() const;
 
  private:
-  absl::Cord rs_name_;
-  absl::Cord cc_name_;
+  std::string rs_name_;
+  std::string cc_name_;
 };
 
 // An identifier involved in bindings.
@@ -72,17 +73,17 @@
 //     `identifier` cannot be empty.
 class Identifier {
  public:
-  explicit Identifier(absl::Cord identifier)
+  explicit Identifier(std::string identifier)
       : identifier_(std::move(identifier)) {
     CHECK(!identifier_.empty()) << "Identifier name cannot be empty.";
   }
 
-  const absl::Cord &Ident() const { return identifier_; }
+  absl::string_view Ident() const { return identifier_; }
 
   nlohmann::json ToJson() const;
 
  private:
-  absl::Cord identifier_;
+  std::string identifier_;
 };
 
 // A function parameter.
@@ -108,7 +109,7 @@
 // A function involved in the bindings.
 class Func {
  public:
-  explicit Func(Identifier identifier, absl::Cord mangled_name,
+  explicit Func(Identifier identifier, std::string mangled_name,
                 Type return_type, std::vector<FuncParam> params, bool is_inline)
       : identifier_(std::move(identifier)),
         mangled_name_(std::move(mangled_name)),
@@ -116,7 +117,7 @@
         params_(std::move(params)),
         is_inline_(is_inline) {}
 
-  const absl::Cord &MangledName() const { return mangled_name_; }
+  absl::string_view MangledName() const { return mangled_name_; }
   const Type &ReturnType() const { return return_type_; }
   const Identifier &Ident() const { return identifier_; }
 
@@ -127,7 +128,7 @@
 
  private:
   Identifier identifier_;
-  absl::Cord mangled_name_;
+  std::string mangled_name_;
   Type return_type_;
   std::vector<FuncParam> params_;
   bool is_inline_;
diff --git a/rs_bindings_from_cc/ir_test.cc b/rs_bindings_from_cc/ir_test.cc
index dbc6a5c..424b478 100644
--- a/rs_bindings_from_cc/ir_test.cc
+++ b/rs_bindings_from_cc/ir_test.cc
@@ -7,7 +7,6 @@
 #include <string>
 
 #include "testing/base/public/gunit.h"
-#include "third_party/absl/strings/cord.h"
 #include "third_party/json/src/json.hpp"
 
 namespace rs_bindings_from_cc {
@@ -17,7 +16,7 @@
 TEST(IrTest, TestTypeToJson) {
   nlohmann::json expected =
       nlohmann::json::parse(R"j({ "rs_name": "i32", "cc_name": "int" })j");
-  EXPECT_EQ(Type(absl::Cord("i32"), absl::Cord("int")).ToJson(), expected);
+  EXPECT_EQ(Type(std::string("i32"), std::string("int")).ToJson(), expected);
 }
 
 TEST(IrTest, TestIR) {
@@ -37,12 +36,12 @@
               "is_inline": false
             }]
       })j");
-  EXPECT_EQ(IR({HeaderName(absl::Cord("foo/bar.h"))},
-               {Func(Identifier(absl::Cord("hello_world")),
-                     absl::Cord("#$mangled_name$#"),
-                     Type(absl::Cord("i32"), absl::Cord("int")),
-                     {FuncParam(Type(absl::Cord("i32"), absl::Cord("int")),
-                                Identifier(absl::Cord("arg")))},
+  EXPECT_EQ(IR({HeaderName(std::string("foo/bar.h"))},
+               {Func(Identifier(std::string("hello_world")),
+                     std::string("#$mangled_name$#"),
+                     Type(std::string("i32"), std::string("int")),
+                     {FuncParam(Type(std::string("i32"), std::string("int")),
+                                Identifier(std::string("arg")))},
                      /* is_inline= */ false)})
                 .ToJson(),
             expected);
diff --git a/rs_bindings_from_cc/rs_bindings_from_cc.cc b/rs_bindings_from_cc/rs_bindings_from_cc.cc
index 977e559..a2cb102 100644
--- a/rs_bindings_from_cc/rs_bindings_from_cc.cc
+++ b/rs_bindings_from_cc/rs_bindings_from_cc.cc
@@ -64,8 +64,10 @@
   rs_bindings_from_cc::IR ir;
   if (devtools::cymbal::RunToolWithClangFlagsOnCode(
           command_line, file_contents,
-          std::make_unique<rs_bindings_from_cc::FrontendAction>(public_headers,
-                                                                ir))) {
+          std::make_unique<rs_bindings_from_cc::FrontendAction>(
+              std::vector<absl::string_view>(public_headers.begin(),
+                                             public_headers.end()),
+              ir))) {
     rs_bindings_from_cc::Bindings bindings =
         rs_bindings_from_cc::GenerateBindings(ir);
     CHECK_OK(file::SetContents(rs_out, bindings.rs_api, file::Defaults()));
diff --git a/rs_bindings_from_cc/src_code_gen_test.cc b/rs_bindings_from_cc/src_code_gen_test.cc
index 371a1b6..97be5b2 100644
--- a/rs_bindings_from_cc/src_code_gen_test.cc
+++ b/rs_bindings_from_cc/src_code_gen_test.cc
@@ -9,7 +9,6 @@
 #include "rs_bindings_from_cc/ir.h"
 #include "testing/base/public/gmock.h"
 #include "testing/base/public/gunit.h"
-#include "third_party/absl/strings/cord.h"
 
 namespace rs_bindings_from_cc {
 
@@ -18,12 +17,12 @@
 using ::testing::StrEq;
 
 TEST(SrcGenTest, FFIIntegration) {
-  IR ir({HeaderName(absl::Cord("foo/bar.h"))},
-        {Func(Identifier(absl::Cord("hello_world")),
-              absl::Cord("$$mangled_name$$"),
-              Type(absl::Cord("i32"), absl::Cord("int")),
-              {FuncParam(Type(absl::Cord("i32"), absl::Cord("int")),
-                         Identifier(absl::Cord("arg")))},
+  IR ir({HeaderName(std::string("foo/bar.h"))},
+        {Func(Identifier(std::string("hello_world")),
+              std::string("$$mangled_name$$"),
+              Type(std::string("i32"), std::string("int")),
+              {FuncParam(Type(std::string("i32"), std::string("int")),
+                         Identifier(std::string("arg")))},
               /* is_inline= */ true)});
   Bindings bindings = GenerateBindings(ir);
   EXPECT_THAT(
