diff --git a/samples/main.cc b/samples/main.cc
index 19750cb..6e2456f 100644
--- a/samples/main.cc
+++ b/samples/main.cc
@@ -507,7 +507,7 @@
     return 1;
   }
 
-  tint::transform::Manager transform_manager;
+  tint::transform::Manager transform_manager(&ctx, &mod);
   for (const auto& name : options.transforms) {
     // TODO(dsinclair): The vertex pulling transform requires setup code to
     // be run that needs user input. Should we find a way to support that here
diff --git a/src/transform/bound_array_accessors_transform.h b/src/transform/bound_array_accessors_transform.h
index f67834b..fb20428 100644
--- a/src/transform/bound_array_accessors_transform.h
+++ b/src/transform/bound_array_accessors_transform.h
@@ -40,6 +40,9 @@
   explicit BoundArrayAccessorsTransform(Context* ctx, ast::Module* mod);
   ~BoundArrayAccessorsTransform() override;
 
+  /// Users of Tint should register the transform with transform manager and
+  /// invoke its Run(), instead of directly calling the transform's Run().
+  /// Calling Run() directly does not perform module state cleanup operations.
   /// @returns true if the transformation was successful
   bool Run() override;
 
diff --git a/src/transform/bound_array_accessors_transform_test.cc b/src/transform/bound_array_accessors_transform_test.cc
index aa994ae..78cd50c 100644
--- a/src/transform/bound_array_accessors_transform_test.cc
+++ b/src/transform/bound_array_accessors_transform_test.cc
@@ -41,6 +41,7 @@
 #include "src/ast/variable.h"
 #include "src/ast/variable_decl_statement.h"
 #include "src/context.h"
+#include "src/transform/manager.h"
 #include "src/type_determiner.h"
 
 namespace tint {
@@ -49,7 +50,13 @@
 
 class BoundArrayAccessorsTest : public testing::Test {
  public:
-  BoundArrayAccessorsTest() : td_(&ctx_, &mod_), transform_(&ctx_, &mod_) {}
+  BoundArrayAccessorsTest() : td_(&ctx_, &mod_) {
+    auto transform =
+        std::make_unique<BoundArrayAccessorsTransform>(&ctx_, &mod_);
+    transform_ = transform.get();
+    manager_ = std::make_unique<Manager>(&ctx_, &mod_);
+    manager_->append(std::move(transform));
+  }
 
   ast::BlockStatement* SetupFunctionAndBody() {
     auto* block = create<ast::BlockStatement>();
@@ -67,7 +74,7 @@
 
   TypeDeterminer* td() { return &td_; }
 
-  BoundArrayAccessorsTransform* transform() { return &transform_; }
+  Manager* manager() { return manager_.get(); }
 
   /// Creates a new `ast::Node` owned by the Context. When the Context is
   /// destructed, the `ast::Node` will also be destructed.
@@ -83,7 +90,8 @@
   ast::Module mod_;
   TypeDeterminer td_;
   ast::type::VoidType void_type_;
-  BoundArrayAccessorsTransform transform_;
+  std::unique_ptr<Manager> manager_;
+  BoundArrayAccessorsTransform* transform_;
   ast::BlockStatement* body_ = nullptr;
 };
 
@@ -120,7 +128,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsCall());
 
@@ -183,7 +191,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsCall());
 
@@ -256,7 +264,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsConstructor());
   ASSERT_TRUE(ptr->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -304,7 +312,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsCall());
 
@@ -357,7 +365,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsConstructor());
   ASSERT_TRUE(ptr->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -396,7 +404,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsConstructor());
   ASSERT_TRUE(ptr->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -435,7 +443,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsConstructor());
   ASSERT_TRUE(ptr->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -483,7 +491,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsCall());
 
@@ -535,7 +543,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsConstructor());
   ASSERT_TRUE(ptr->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -574,7 +582,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
   ASSERT_TRUE(ptr->idx_expr()->IsConstructor());
   ASSERT_TRUE(ptr->idx_expr()->AsConstructor()->IsScalarConstructor());
@@ -616,7 +624,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
@@ -680,7 +688,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
@@ -759,7 +767,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
@@ -827,7 +835,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
@@ -881,7 +889,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
@@ -936,7 +944,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
@@ -991,7 +999,7 @@
 
   ASSERT_TRUE(td()->Determine()) << td()->error();
 
-  ASSERT_TRUE(transform()->Run());
+  ASSERT_TRUE(manager()->Run());
   ASSERT_TRUE(ptr->IsArrayAccessor());
 
   ASSERT_TRUE(ptr->array()->IsArrayAccessor());
diff --git a/src/transform/manager.cc b/src/transform/manager.cc
index 2447605..0cf8a55 100644
--- a/src/transform/manager.cc
+++ b/src/transform/manager.cc
@@ -19,8 +19,6 @@
 namespace tint {
 namespace transform {
 
-Manager::Manager() : context_(nullptr), module_(nullptr) {}
-
 Manager::Manager(Context* context, ast::Module* module)
     : context_(context), module_(module) {}
 
diff --git a/src/transform/manager.h b/src/transform/manager.h
index 0d193a9..84f614e 100644
--- a/src/transform/manager.h
+++ b/src/transform/manager.h
@@ -31,8 +31,6 @@
 class Manager {
  public:
   /// Constructor
-  /// DEPRECATED
-  Manager();
   /// @param context the tint context
   /// @param module the module to transform
   Manager(Context* context, ast::Module* module);
diff --git a/src/transform/transformer.h b/src/transform/transformer.h
index 7608db6..7fbcb58 100644
--- a/src/transform/transformer.h
+++ b/src/transform/transformer.h
@@ -34,6 +34,9 @@
   Transformer(Context* ctx, ast::Module* mod);
   virtual ~Transformer();
 
+  /// Users of Tint should register the transform with transform manager and
+  /// invoke its Run(), instead of directly calling the transform's Run().
+  /// Calling Run() directly does not perform module state cleanup operations.
   /// @returns true if the transformation was successful
   virtual bool Run() = 0;
 
diff --git a/src/transform/vertex_pulling_transform.cc b/src/transform/vertex_pulling_transform.cc
index 7707194..d099d8f 100644
--- a/src/transform/vertex_pulling_transform.cc
+++ b/src/transform/vertex_pulling_transform.cc
@@ -38,7 +38,6 @@
 #include "src/ast/type_constructor_expression.h"
 #include "src/ast/uint_literal.h"
 #include "src/ast/variable_decl_statement.h"
-#include "src/type_determiner.h"
 
 namespace tint {
 namespace transform {
@@ -101,11 +100,7 @@
   AddVertexStorageBuffers();
   AddVertexPullingPreamble(vertex_func);
 
-  // We've potentially inserted nodes into the AST so we have to make sure to
-  // re-run type determination else those nodes will be missing their
-  // result_type
-  TypeDeterminer td(ctx_, mod_);
-  return td.Determine();
+  return true;
 }
 
 std::string VertexPullingTransform::GetVertexBufferName(uint32_t index) {
diff --git a/src/transform/vertex_pulling_transform.h b/src/transform/vertex_pulling_transform.h
index b92219d..ab876d9 100644
--- a/src/transform/vertex_pulling_transform.h
+++ b/src/transform/vertex_pulling_transform.h
@@ -164,6 +164,9 @@
   /// @param number the set number we will use
   void SetPullingBufferBindingSet(uint32_t number);
 
+  /// Users of Tint should register the transform with transform manager and
+  /// invoke its Run(), instead of directly calling the transform's Run().
+  /// Calling Run() directly does not perform module state cleanup operations.
   /// @returns true if the transformation was successful
   bool Run() override;
 
diff --git a/src/transform/vertex_pulling_transform_test.cc b/src/transform/vertex_pulling_transform_test.cc
index f8af132..4da530c 100644
--- a/src/transform/vertex_pulling_transform_test.cc
+++ b/src/transform/vertex_pulling_transform_test.cc
@@ -25,6 +25,7 @@
 #include "src/ast/type/f32_type.h"
 #include "src/ast/type/i32_type.h"
 #include "src/ast/type/void_type.h"
+#include "src/transform/manager.h"
 #include "src/type_determiner.h"
 #include "src/validator/validator.h"
 
@@ -36,7 +37,11 @@
  public:
   VertexPullingTransformHelper() {
     mod_ = std::make_unique<ast::Module>();
-    transform_ = std::make_unique<VertexPullingTransform>(&ctx_, mod_.get());
+    manager_ = std::make_unique<Manager>(&ctx_, mod_.get());
+    auto transform =
+        std::make_unique<VertexPullingTransform>(&ctx_, mod_.get());
+    transform_ = transform.get();
+    manager_->append(std::move(transform));
   }
 
   // Create basic module with an entry point and vertex function
@@ -78,7 +83,8 @@
 
   Context* ctx() { return &ctx_; }
   ast::Module* mod() { return mod_.get(); }
-  VertexPullingTransform* transform() { return transform_.get(); }
+  Manager* manager() { return manager_.get(); }
+  VertexPullingTransform* transform() { return transform_; }
 
   /// Creates a new `ast::Node` owned by the Context. When the Context is
   /// destructed, the `ast::Node` will also be destructed.
@@ -92,21 +98,22 @@
  private:
   Context ctx_;
   std::unique_ptr<ast::Module> mod_;
-  std::unique_ptr<VertexPullingTransform> transform_;
+  std::unique_ptr<Manager> manager_;
+  VertexPullingTransform* transform_;
 };
 
 class VertexPullingTransformTest : public VertexPullingTransformHelper,
                                    public testing::Test {};
 
 TEST_F(VertexPullingTransformTest, Error_NoVertexState) {
-  EXPECT_FALSE(transform()->Run());
-  EXPECT_EQ(transform()->error(), "SetVertexState not called");
+  EXPECT_FALSE(manager()->Run());
+  EXPECT_EQ(manager()->error(), "SetVertexState not called");
 }
 
 TEST_F(VertexPullingTransformTest, Error_NoEntryPoint) {
   transform()->SetVertexState(std::make_unique<VertexStateDescriptor>());
-  EXPECT_FALSE(transform()->Run());
-  EXPECT_EQ(transform()->error(), "Vertex stage entry point not found");
+  EXPECT_FALSE(manager()->Run());
+  EXPECT_EQ(manager()->error(), "Vertex stage entry point not found");
 }
 
 TEST_F(VertexPullingTransformTest, Error_InvalidEntryPoint) {
@@ -114,8 +121,8 @@
   InitTransform({});
   transform()->SetEntryPoint("_");
 
-  EXPECT_FALSE(transform()->Run());
-  EXPECT_EQ(transform()->error(), "Vertex stage entry point not found");
+  EXPECT_FALSE(manager()->Run());
+  EXPECT_EQ(manager()->error(), "Vertex stage entry point not found");
 }
 
 TEST_F(VertexPullingTransformTest, Error_EntryPointWrongStage) {
@@ -128,14 +135,14 @@
   mod()->AddFunction(func);
 
   InitTransform({});
-  EXPECT_FALSE(transform()->Run());
-  EXPECT_EQ(transform()->error(), "Vertex stage entry point not found");
+  EXPECT_FALSE(manager()->Run());
+  EXPECT_EQ(manager()->error(), "Vertex stage entry point not found");
 }
 
 TEST_F(VertexPullingTransformTest, BasicModule) {
   InitBasicModule();
   InitTransform({});
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 }
 
 TEST_F(VertexPullingTransformTest, OneAttribute) {
@@ -146,7 +153,7 @@
 
   InitTransform({{{4, InputStepMode::kVertex, {{VertexFormat::kF32, 0, 0}}}}});
 
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 
   EXPECT_EQ(R"(Module{
   TintVertexData Struct{
@@ -231,7 +238,7 @@
   InitTransform(
       {{{4, InputStepMode::kInstance, {{VertexFormat::kF32, 0, 0}}}}});
 
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 
   EXPECT_EQ(R"(Module{
   TintVertexData Struct{
@@ -316,7 +323,7 @@
   InitTransform({{{4, InputStepMode::kVertex, {{VertexFormat::kF32, 0, 0}}}}});
   transform()->SetPullingBufferBindingSet(5);
 
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 
   EXPECT_EQ(R"(Module{
   TintVertexData Struct{
@@ -431,7 +438,7 @@
       {{{4, InputStepMode::kVertex, {{VertexFormat::kF32, 0, 0}}},
         {4, InputStepMode::kInstance, {{VertexFormat::kF32, 0, 1}}}}});
 
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 
   EXPECT_EQ(R"(Module{
   TintVertexData Struct{
@@ -571,7 +578,7 @@
          InputStepMode::kVertex,
          {{VertexFormat::kF32, 0, 0}, {VertexFormat::kVec4F32, 0, 1}}}}});
 
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 
   EXPECT_EQ(R"(Module{
   TintVertexData Struct{
@@ -756,7 +763,7 @@
         {12, InputStepMode::kVertex, {{VertexFormat::kVec3F32, 0, 1}}},
         {16, InputStepMode::kVertex, {{VertexFormat::kVec4F32, 0, 2}}}}});
 
-  EXPECT_TRUE(transform()->Run());
+  EXPECT_TRUE(manager()->Run());
 
   EXPECT_EQ(R"(Module{
   TintVertexData Struct{
