diff --git a/src/lava-vr/FeetPlacer.cc b/src/lava-vr/FeetPlacer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..93c0b993d911025ada418699a6bc6905ebd6cbcc
--- /dev/null
+++ b/src/lava-vr/FeetPlacer.cc
@@ -0,0 +1,33 @@
+#include "FeetPlacer.hh"
+#include <glm/glm.hpp>
+#include <glm/gtx/transform.hpp>
+#include <lava-extras/openvr/OpenVRControllerInput.hh>
+
+namespace lava {
+namespace vr {
+
+FeetPlacer::FeetPlacer(MeshHandle foot, Tracker const &left,
+                       Tracker const &right)
+    : mFoot(foot), mLeft(left), mRight(right) {}
+
+void FeetPlacer::place(BatchingRenderer &renderer) {
+    glm::mat4 trackerToShoe = {1, 0, 0,  0, //
+                               0, 0, -1, 0, //
+                               0, 1, 0,  0, //
+                               0, 0, 0,  1};
+    // trackerToShoe = glm::mat4(1.0);
+
+    {
+        auto leftXf = mLeft.pose() * trackerToShoe;
+        leftXf = leftXf * scale(glm::vec3{-1.f, 1.f, 1.f});
+
+        renderer.enqueue(mFoot, leftXf);
+    }
+    {
+        auto rightXf = mRight.pose() * trackerToShoe;
+        renderer.enqueue(mFoot, rightXf);
+    }
+}
+
+} // namespace vr
+} // namespace lava
diff --git a/src/lava-vr/FeetPlacer.hh b/src/lava-vr/FeetPlacer.hh
new file mode 100644
index 0000000000000000000000000000000000000000..914a8800e743c46c0a3d0d8e33cd892d0271c785
--- /dev/null
+++ b/src/lava-vr/FeetPlacer.hh
@@ -0,0 +1,23 @@
+#pragma once
+#include <lava-extras/openvr/fwd.hh>
+#include <lava-vr/BatchingRenderer.hh>
+
+namespace lava {
+namespace vr {
+
+class FeetPlacer {
+  public:
+    using MeshHandle = lava::vr::BatchingRenderer::MeshHandle;
+    using Tracker = lava::openvr::OpenVRController;
+
+    FeetPlacer(MeshHandle foot, Tracker const &left, Tracker const &right);
+    void place(lava::vr::BatchingRenderer &renderer);
+
+  protected:
+    MeshHandle mFoot;
+    Tracker const &mLeft;
+    Tracker const &mRight;
+};
+
+} // namespace vr
+} // namespace lava