diff --git a/components/streams/src/renderers/openvr_render.cpp b/components/streams/src/renderers/openvr_render.cpp
index 6b571c62f29059a3de41b0b2207b8b8a72ca3408..386c8b6aa580fbc746f14b757b1d3ec7c9b23607 100644
--- a/components/streams/src/renderers/openvr_render.cpp
+++ b/components/streams/src/renderers/openvr_render.cpp
@@ -315,6 +315,8 @@ bool OpenVRRender::retrieve(ftl::data::Frame &frame_out) {
 			auto viewPose = t.matrix() * rotmat_;
 
 			if (!pose_calibrated_.test_and_set()) {
+				if (pose_calibration_start_ == -1) pose_calibration_start_ = ftl::timer::get_time();
+
 				std::string headset_origin = host_->value("headset_origin", std::string(""));
 				Eigen::Matrix4d horigin;
 				horigin.setIdentity();
@@ -324,7 +326,11 @@ bool OpenVRRender::retrieve(ftl::data::Frame &frame_out) {
 				}
 				initial_pose_ = horigin*viewPose.inverse();
 
-				if (host_->value("reset_pose", false)) pose_calibrated_.clear();
+				if (host_->value("reset_pose", false) && ftl::timer::get_time() < pose_calibration_start_ + host_->value("calibration_time",10000)) {
+					pose_calibrated_.clear();
+				} else {
+					pose_calibration_start_ = -1;
+				}
 			}
 
 			rgbdframe.setPose() = initial_pose_*viewPose;
diff --git a/components/streams/src/renderers/openvr_render.hpp b/components/streams/src/renderers/openvr_render.hpp
index 9accd58a436a04cca87c959e117b423af853b6c7..3907b9c3eab2adb692be82ca3935f75ac5b9b96b 100644
--- a/components/streams/src/renderers/openvr_render.hpp
+++ b/components/streams/src/renderers/openvr_render.hpp
@@ -44,6 +44,7 @@ class OpenVRRender : public ftl::render::BaseSourceImpl {
 	ftl::operators::Graph *post_pipe_;
 
 	std::atomic_flag pose_calibrated_;
+	int64_t pose_calibration_start_=-1;
 
 	float baseline_;
 	Eigen::Matrix4d initial_pose_;