diff --git a/components/renderers/cpp/src/overlay.cpp b/components/renderers/cpp/src/overlay.cpp
index 0cda6bf3971d2ff268c2917cea9232d28fcf2eb6..b2e8165c94eec0f04d4a068755fa9d508452a287 100644
--- a/components/renderers/cpp/src/overlay.cpp
+++ b/components/renderers/cpp/src/overlay.cpp
@@ -27,9 +27,18 @@ namespace {
 		void main() {
             vec4 vert = pose*(vec4(scale*vertex,1.0));
             vert = vert / vert.w;
-			vec4 pos = vec4(-vert.x*focal / -vert.z / (width/2.0),
-				vert.y*focal / -vert.z / (height/2.0),
-				(vert.z-near) / (far-near) * 2.0 - 1.0, 1.0);
+			//vec4 pos = vec4(-vert.x*focal / -vert.z / (width/2.0),
+			//	vert.y*focal / -vert.z / (height/2.0),
+			//	(vert.z-near) / (far-near) * 2.0 - 1.0, 1.0);
+
+			vec4 pos = vec4(
+				vert.x*focal / (width/2.0),
+				-vert.y*focal / (height/2.0),
+				-vert.z * (-(far+near) / (far-near)) - (2.0 * near * far / (far-near)),
+				//((vert.z - near) / (far - near) * 2.0 - 1.0) * vert.z,
+				vert.z
+			);
+
 			gl_Position = pos;
 		})";
 
@@ -265,7 +274,7 @@ void Overlay::draw(ftl::rgbd::FrameSet &fs, ftl::rgbd::FrameState &state, const
 	oShader.setUniform("width", float(intrin.width));
 	oShader.setUniform("height", float(intrin.height));
 	oShader.setUniform("far", zfar);
-	oShader.setUniform("near", 0.0f);  // TODO: but make sure CUDA depth is also normalised like this
+	oShader.setUniform("near", 0.1f);  // TODO: but make sure CUDA depth is also normalised like this
 
 	/*oShader.setUniform("blockColour", Eigen::Vector4f(1.0f,1.0f,0.0f,0.5f));
 	oShader.uploadAttrib("vertex", sizeof(tris), 3, sizeof(float), GL_FLOAT, false, tris);
@@ -279,7 +288,7 @@ void Overlay::draw(ftl::rgbd::FrameSet &fs, ftl::rgbd::FrameState &state, const
 
 	if (value("show_poses", false)) {
 		for (size_t i=0; i<fs.frames.size(); ++i) {
-			auto pose = fs.frames[i].getPose(); //.inverse() * state.getPose();
+			auto pose = fs.frames[i].getPose().inverse(); //.inverse() * state.getPose();
 
 			auto name = fs.frames[i].get<std::string>("name");
             _drawOutlinedShape(Shape::CAMERA, state.getPose().inverse() * pose, Eigen::Vector3f(0.2f,0.2f,0.2f), make_uchar4(255,0,0,80), make_uchar4(255,0,0,255));