diff --git a/src/castable.h b/src/castable.h
index 34d98d5..460e509 100644
--- a/src/castable.h
+++ b/src/castable.h
@@ -158,9 +158,6 @@
   /// Copy constructor
   CastableBase(const CastableBase&) = default;
 
-  /// Move constructor
-  CastableBase(CastableBase&&) = default;
-
   virtual ~CastableBase() = default;
 
   /// @returns the TypeInfo of the object
diff --git a/src/transform/binding_remapper_test.cc b/src/transform/binding_remapper_test.cc
index 5e798a6..2ca2fd1 100644
--- a/src/transform/binding_remapper_test.cc
+++ b/src/transform/binding_remapper_test.cc
@@ -44,7 +44,7 @@
   DataMap data;
   data.Add<BindingRemapper::Remappings>(BindingRemapper::BindingPoints{},
                                         BindingRemapper::AccessControls{});
-  auto got = Run<BindingRemapper>(src, std::move(data));
+  auto got = Run<BindingRemapper>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -86,7 +86,7 @@
                              // Keep [[group(3), binding(2)]] as is
       },
       BindingRemapper::AccessControls{});
-  auto got = Run<BindingRemapper>(src, std::move(data));
+  auto got = Run<BindingRemapper>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -137,7 +137,7 @@
           // Keep [[group(3), binding(2)]] as is
           {{4, 3}, ast::AccessControl::kReadOnly},  // Add access control
       });
-  auto got = Run<BindingRemapper>(src, std::move(data));
+  auto got = Run<BindingRemapper>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -202,7 +202,7 @@
           // Keep [[group(3), binding(2)]] as is
           {{4, 3}, ast::AccessControl::kReadOnly},  // Add access control
       });
-  auto got = Run<BindingRemapper>(src, std::move(data));
+  auto got = Run<BindingRemapper>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -249,7 +249,7 @@
           {{2, 1}, ast::AccessControl::kWriteOnly},
           {{3, 2}, ast::AccessControl::kWriteOnly},
       });
-  auto got = Run<BindingRemapper>(src, std::move(data));
+  auto got = Run<BindingRemapper>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
diff --git a/src/transform/test_helper.h b/src/transform/test_helper.h
index 4dc38d9..52f3a77 100644
--- a/src/transform/test_helper.h
+++ b/src/transform/test_helper.h
@@ -41,7 +41,7 @@
   Transform::Output Run(
       std::string in,
       std::vector<std::unique_ptr<transform::Transform>> transforms,
-      DataMap data = {}) {
+      const DataMap& data = {}) {
     auto file = std::make_unique<Source::File>("test", in);
     auto program = reader::wgsl::Parse(file.get());
 
@@ -67,10 +67,10 @@
   /// @return the transformed output
   Transform::Output Run(std::string in,
                         std::unique_ptr<transform::Transform> transform,
-                        DataMap data = {}) {
+                        const DataMap& data = {}) {
     std::vector<std::unique_ptr<transform::Transform>> transforms;
     transforms.emplace_back(std::move(transform));
-    return Run(std::move(in), std::move(transforms), std::move(data));
+    return Run(std::move(in), std::move(transforms), data);
   }
 
   /// Transforms and returns the WGSL source `in`, transformed using
@@ -79,8 +79,8 @@
   /// @param data the optional DataMap to pass to Transform::Run()
   /// @return the transformed output
   template <typename TRANSFORM>
-  Transform::Output Run(std::string in, DataMap data = {}) {
-    return Run(std::move(in), std::make_unique<TRANSFORM>(), std::move(data));
+  Transform::Output Run(std::string in, const DataMap& data = {}) {
+    return Run(std::move(in), std::make_unique<TRANSFORM>(), data);
   }
 
   /// @param output the output of the transform
diff --git a/src/transform/transform.cc b/src/transform/transform.cc
index 20cfb83..da3a5d0 100644
--- a/src/transform/transform.cc
+++ b/src/transform/transform.cc
@@ -24,23 +24,17 @@
 namespace transform {
 
 Data::Data() = default;
-
 Data::Data(const Data&) = default;
-
 Data::~Data() = default;
+Data& Data::operator=(const Data&) = default;
 
 DataMap::DataMap() = default;
-
 DataMap::DataMap(DataMap&&) = default;
-
 DataMap::~DataMap() = default;
 
 Transform::Output::Output() = default;
-
 Transform::Output::Output(Program&& p) : program(std::move(p)) {}
-
 Transform::Transform() = default;
-
 Transform::~Transform() = default;
 
 ast::Function* Transform::CloneWithStatementsAtStart(
diff --git a/src/transform/transform.h b/src/transform/transform.h
index e87d2c5..2c96b27 100644
--- a/src/transform/transform.h
+++ b/src/transform/transform.h
@@ -36,6 +36,10 @@
 
   /// Destructor
   ~Data() override;
+
+  /// Assignment operator
+  /// @returns this Data
+  Data& operator=(const Data&);
 };
 
 /// DataMap is a map of Data unique pointers keyed by the Data's ClassID.
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 9abcbd9..951f4fd 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -23,6 +23,8 @@
 #include "src/program_builder.h"
 #include "src/semantic/variable.h"
 
+TINT_INSTANTIATE_TYPEINFO(tint::transform::VertexPulling::Config);
+
 namespace tint {
 namespace transform {
 namespace {
@@ -36,13 +38,19 @@
 
 }  // namespace
 
-VertexPulling::VertexPulling(const Config& config) : cfg(config) {}
+VertexPulling::VertexPulling() = default;
+VertexPulling::VertexPulling(const Config& config) : cfg_(config) {}
 
 VertexPulling::~VertexPulling() = default;
 
-Transform::Output VertexPulling::Run(const Program* in, const DataMap&) {
+Transform::Output VertexPulling::Run(const Program* in, const DataMap& data) {
   ProgramBuilder out;
 
+  auto cfg = cfg_;
+  if (auto* cfg_data = data.Get<Config>()) {
+    cfg = *cfg_data;
+  }
+
   // Find entry point
   auto* func = in->AST().Functions().Find(
       in->Symbols().Get(cfg.entry_point_name), ast::PipelineStage::kVertex);
@@ -80,16 +88,14 @@
 }
 
 VertexPulling::Config::Config() = default;
-
 VertexPulling::Config::Config(const Config&) = default;
-
 VertexPulling::Config::~Config() = default;
+VertexPulling::Config& VertexPulling::Config::operator=(const Config&) =
+    default;
 
 VertexPulling::State::State(CloneContext& context, const Config& c)
     : ctx(context), cfg(c) {}
-
 VertexPulling::State::State(const State&) = default;
-
 VertexPulling::State::~State() = default;
 
 std::string VertexPulling::State::GetVertexBufferName(uint32_t index) const {
diff --git a/src/transform/vertex_pulling.h b/src/transform/vertex_pulling.h
index 05b3a83..8be1812 100644
--- a/src/transform/vertex_pulling.h
+++ b/src/transform/vertex_pulling.h
@@ -132,7 +132,7 @@
 class VertexPulling : public Transform {
  public:
   /// Configuration options for the transform
-  struct Config {
+  struct Config : public Castable<Config, Data> {
     /// Constructor
     Config();
 
@@ -140,7 +140,11 @@
     Config(const Config&);
 
     /// Destructor
-    ~Config();
+    ~Config() override;
+
+    /// Assignment operator
+    /// @returns this Config
+    Config& operator=(const Config&);
 
     /// The entry point to add assignments into
     std::string entry_point_name;
@@ -154,6 +158,10 @@
   };
 
   /// Constructor
+  VertexPulling();
+
+  /// Constructor
+  /// [DEPRECATED] - pass Config as part of the `data` to Run()
   /// @param config the configuration options for the transform
   explicit VertexPulling(const Config& config);
 
@@ -167,7 +175,7 @@
   Output Run(const Program* program, const DataMap& data = {}) override;
 
  private:
-  Config cfg;
+  Config cfg_;
 
   struct State {
     State(CloneContext& ctx, const Config& c);
diff --git a/src/transform/vertex_pulling_test.cc b/src/transform/vertex_pulling_test.cc
index aea3da9..e1222e6 100644
--- a/src/transform/vertex_pulling_test.cc
+++ b/src/transform/vertex_pulling_test.cc
@@ -29,11 +29,9 @@
 
   auto* expect = "error: Vertex stage entry point not found";
 
-  VertexPulling::Config cfg;
-
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>();
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -49,9 +47,9 @@
   VertexPulling::Config cfg;
   cfg.entry_point_name = "_";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -67,9 +65,9 @@
   VertexPulling::Config cfg;
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -97,9 +95,9 @@
   VertexPulling::Config cfg;
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -139,9 +137,9 @@
       {{4, InputStepMode::kVertex, {{VertexFormat::kF32, 0, 0}}}}};
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -181,9 +179,9 @@
       {{4, InputStepMode::kInstance, {{VertexFormat::kF32, 0, 0}}}}};
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -224,9 +222,9 @@
   cfg.pulling_group = 5;
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -288,9 +286,9 @@
   }};
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -337,9 +335,9 @@
         {{VertexFormat::kF32, 0, 0}, {VertexFormat::kVec4F32, 0, 1}}}}};
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
@@ -396,9 +394,9 @@
   }};
   cfg.entry_point_name = "main";
 
-  auto transform = std::make_unique<VertexPulling>(cfg);
-
-  auto got = Run(src, std::move(transform));
+  DataMap data;
+  data.Add<VertexPulling::Config>(cfg);
+  auto got = Run<VertexPulling>(src, data);
 
   EXPECT_EQ(expect, str(got));
 }
