diff --git a/applications/reconstruct/include/ftl/voxel_hash_params.hpp b/applications/reconstruct/include/ftl/voxel_hash_params.hpp
index aa19368ea83de8b885608c8bb265bbeea55f6f08..a08bc7a61d31043757151eb7aeabee7e1a053ccb 100644
--- a/applications/reconstruct/include/ftl/voxel_hash_params.hpp
+++ b/applications/reconstruct/include/ftl/voxel_hash_params.hpp
@@ -28,6 +28,7 @@ struct __align__(16) HashParams {
 	float3 m_minBounds;
 	float3 m_maxBounds;
 	float m_spatialSmoothing;
+	float m_confidenceThresh;
 };
 
 }  // namespace voxhash
diff --git a/applications/reconstruct/src/integrators.cu b/applications/reconstruct/src/integrators.cu
index bc0baee89860f82dce69eb8af4d8e4f3a24c0ce5..203b1980132e82543038bf06fb470529cb5311c7 100644
--- a/applications/reconstruct/src/integrators.cu
+++ b/applications/reconstruct/src/integrators.cu
@@ -253,7 +253,8 @@ __global__ void integrateMLSKernel(HashData hashData, HashParams hashParams, int
 
 	// Calculate voxel sign values across a warp
 	int warpNum = i / WARP_SIZE;
-	uint solid_ballot = __ballot_sync(0xFFFFFFFF, (fabs(sdf) < 0.04f && weights > 20.0f) ? 1 : 0);
+	//uint laneMask = 1 << (i % WARP_SIZE);
+	uint solid_ballot = __ballot_sync(0xFFFFFFFF, (fabs(sdf) < hashParams.m_virtualVoxelSize && weights > hashParams.m_confidenceThresh) ? 1 : 0);
 	//uint valid_ballot = __ballot_sync(0xFFFFFFFF, (weights >= 1.0f) ? 1 : 0);
 
 	// Aggregate each warp result into voxel mask
diff --git a/applications/reconstruct/src/voxel_scene.cpp b/applications/reconstruct/src/voxel_scene.cpp
index 861e480e2f61ab63b3c180336de4c732b5bb38d6..a1cdba97ee211a099665bcd434d161b00856644d 100644
--- a/applications/reconstruct/src/voxel_scene.cpp
+++ b/applications/reconstruct/src/voxel_scene.cpp
@@ -284,6 +284,7 @@ HashParams SceneRep::_parametersFromConfig() {
 	params.m_integrationWeightSample = value("SDFIntegrationWeightSample", 10);
 	params.m_integrationWeightMax = value("SDFIntegrationWeightMax", 255);
 	params.m_spatialSmoothing = value("spatialSmoothing", 0.04f); // 4cm
+	params.m_confidenceThresh = value("confidenceThreshold", 20.0f);
 	params.m_maxBounds = make_float3(
 		value("bbox_x_max", 2.0f),
 		value("bbox_y_max", 2.0f),