diff --git a/components/renderers/cpp/src/normals.cu b/components/renderers/cpp/src/normals.cu
index 7f9b1bb1855fab0aa5e456722e4a94b181ec1dfd..13b82e3a09170b5223185a92fdc731ddc209ccdf 100644
--- a/components/renderers/cpp/src/normals.cu
+++ b/components/renderers/cpp/src/normals.cu
@@ -57,7 +57,7 @@ __global__ void computeNormals_kernel(ftl::cuda::TextureObject<float4> output,
 			const float  l = length(n);
 
 			if(l > 0.0f) {
-				output(x,y) = make_float4(pose * (n/-l), 1.0f);
+				output(x,y) = make_float4((n/-l), 1.0f);
 			}
 		}
 	}
@@ -131,22 +131,22 @@ __global__ void smooth_normals_kernel(ftl::cuda::TextureObject<float4> norms,
 
             //if (s > 0.0f) {
                 const float4 n = norms.tex2D((int)x+u,(int)y+v);
-                //if (n.w > 0.0f) {
+                if (n.w > 0.0f) {
                     nsum += make_float3(n) * s;
                     contrib += s;
-                //}
+                }
             //}
         }
     }
 
     // Compute dot product of normal with camera to obtain measure of how
     // well this point faces the source camera, a measure of confidence
-    float3 ray = pose * camera.screenToCam(x, y, 1.0f);
+    float3 ray = camera.screenToCam(x, y, 1.0f);
     ray = ray / length(ray);
     nsum /= contrib;
     nsum /= length(nsum);
 
-    output(x,y) = (contrib > 0.0f) ? make_float4(nsum, 1.0f) : make_float4(0.0f); //dot(nsum, ray)
+    output(x,y) = (contrib > 0.0f) ? make_float4(pose*nsum, 1.0f) : make_float4(0.0f);
 }
 
 void ftl::cuda::normals(ftl::cuda::TextureObject<float4> &output,
@@ -163,9 +163,10 @@ void ftl::cuda::normals(ftl::cuda::TextureObject<float4> &output,
     cudaSafeCall( cudaGetLastError() );
 
 	switch (radius) {
-	case 7: smooth_normals_kernel<7><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing);
-	case 5: smooth_normals_kernel<5><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing);
-	case 3: smooth_normals_kernel<3><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing);
+	case 9: smooth_normals_kernel<9><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing); break;
+	case 7: smooth_normals_kernel<7><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing); break;
+	case 5: smooth_normals_kernel<5><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing); break;
+	case 3: smooth_normals_kernel<3><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing); break;
 	}
     cudaSafeCall( cudaGetLastError() );
 
@@ -189,9 +190,9 @@ void ftl::cuda::normals(ftl::cuda::TextureObject<float4> &output,
 	cudaSafeCall( cudaGetLastError() );
 
 	switch (radius) {
-	case 7: smooth_normals_kernel<7><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose_inv, smoothing);
-	case 5: smooth_normals_kernel<5><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose_inv, smoothing);
-	case 3: smooth_normals_kernel<3><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose_inv, smoothing);
+	case 7: smooth_normals_kernel<7><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing);
+	case 5: smooth_normals_kernel<5><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing);
+	case 3: smooth_normals_kernel<3><<<gridSize, blockSize, 0, stream>>>(temp, output, input, camera, pose, smoothing);
 	}
 	cudaSafeCall( cudaGetLastError() );
 
diff --git a/components/renderers/cpp/src/splat_render.cpp b/components/renderers/cpp/src/splat_render.cpp
index f96054587f7db6fb13886ffc320c5888aeb1cf48..39016f5757fd567b701941f7093a060904f5b901 100644
--- a/components/renderers/cpp/src/splat_render.cpp
+++ b/components/renderers/cpp/src/splat_render.cpp
@@ -168,7 +168,7 @@ void Splatter::renderChannel(
 	out.get<GpuMat>(Channel::Normals).setTo(cv::Scalar(0.0f,0.0f,0.0f,0.0f), cvstream);
 
 	// Create normals first
-	/*for (auto &f : scene_->frames) {
+	for (auto &f : scene_->frames) {
 
 		ftl::cuda::dibr_attribute(
 			f.createTexture<float4>(Channel::Normals),
@@ -185,15 +185,15 @@ void Splatter::renderChannel(
 		out.getTexture<float4>(Channel::Normals),
 		temp_.getTexture<float>(Channel::Contribution),
 		stream
-	);*/
+	);
 
 	//auto &t = out.createTexture<float4>(Channel::Points, Format<float4>(params.camera.width, params.camera.height));
 	//ftl::cuda::point_cloud(t, temp_.getTexture<int>(Channel::Depth2), params.camera, params.m_viewMatrixInverse, 0, stream);
-	ftl::cuda::normals(out.createTexture<float4>(Channel::Normals),
+	/*ftl::cuda::normals(out.createTexture<float4>(Channel::Normals),
 		temp_.getTexture<float4>(Channel::Normals),
 		temp_.getTexture<int>(Channel::Depth2), 
-		5, 0.04f,
-		params.camera, params.m_viewMatrixInverse.getFloat3x3(), params.m_viewMatrix.getFloat3x3(), stream);
+		9, 0.04f,
+		params.camera, params.m_viewMatrixInverse.getFloat3x3(), params.m_viewMatrix.getFloat3x3(), stream);*/
 
 	//if (norm_filter_ > -0.1f) {
 	//	ftl::cuda::normal_filter(f.getTexture<float4>(Channel::Normals), f.getTexture<float4>(Channel::Points), s->parameters(), pose, norm_filter_, stream);
diff --git a/components/renderers/cpp/src/splatter.cu b/components/renderers/cpp/src/splatter.cu
index 36c4fa6d5ca01a4c5bbbc57bce3f376c08925d36..786bb721587748118f7c9387e5f825cede41532e 100644
--- a/components/renderers/cpp/src/splatter.cu
+++ b/components/renderers/cpp/src/splatter.cu
@@ -204,13 +204,14 @@ __device__ inline float make(float v) {
 
 
         // Assumed to be normalised
-        float4 n = normals.tex2D((int)(x+u), (int)(y+v));
+		float4 n = normals.tex2D((int)(x+u), (int)(y+v));
+		//if (length(make_float3(n)) == 0.0f) printf("BAD NORMAL\n");
 
         // Does the ray intersect plane of splat?
         float t = 1000.0f;
         if (ftl::cuda::intersectPlane(make_float3(n), worldPos, origin, ray, t)) { //} && fabs(t-camPos.z) < 0.01f) {
             // Adjust from normalised ray back to original meters units
-            t *= scale;
+			t *= scale;
             const float3 camPos3 = params.camera.screenToCam((int)(x),(int)(y),t);
             float weight = ftl::cuda::spatialWeighting(camPos, camPos3, 2.0f*(camPos3.z/params.camera.fx));