diff --git a/applications/reconstruct/src/ilw/ilw.cpp b/applications/reconstruct/src/ilw/ilw.cpp
index 53fef089088fa99341dd6b012e0eb8960736f5f0..3feb23dff0132b2d6d5e491c93a1311af3e6060f 100644
--- a/applications/reconstruct/src/ilw/ilw.cpp
+++ b/applications/reconstruct/src/ilw/ilw.cpp
@@ -96,6 +96,8 @@ bool ILW::process(ftl::rgbd::FrameSet &fs, cudaStream_t stream) {
 
     _phase0(fs, stream);
 
+	params_.range = 0.05f;
+
     for (int i=0; i<iterations_; ++i) {
         int win;
         switch (i) {
@@ -108,6 +110,7 @@ bool ILW::process(ftl::rgbd::FrameSet &fs, cudaStream_t stream) {
             _phase2(fs, motion_rate_, stream);
         //}
 
+		params_.range *= 0.5f;
 		// TODO: Break if no time left
     }
 
diff --git a/applications/reconstruct/src/ilw/ilw.cu b/applications/reconstruct/src/ilw/ilw.cu
index 43236e4d85824131e8c8f26ec712b2c05612fd95..2c8d3199bc3581553f160e55e04e1ac1fe96471f 100644
--- a/applications/reconstruct/src/ilw/ilw.cu
+++ b/applications/reconstruct/src/ilw/ilw.cu
@@ -61,7 +61,7 @@ __global__ void correspondence_energy_vector_kernel(
     float bestdepth;
     int count = 0;
     
-	const float step_interval = 0.05f / (COR_STEPS / 2);
+	const float step_interval = params.range / (COR_STEPS / 2);
 	
 	const float3 rayStep_world = pose1.getFloat3x3() * cam1.screenToCam(x,y,step_interval);
 	const float3 rayStart_2 = pose2 * world1;
diff --git a/applications/reconstruct/src/ilw/ilw_cuda.hpp b/applications/reconstruct/src/ilw/ilw_cuda.hpp
index 37679003954711a2f1a4b0f8d463442ce1179bb1..503d1bf4c361145c96989101065eaee785c12171 100644
--- a/applications/reconstruct/src/ilw/ilw_cuda.hpp
+++ b/applications/reconstruct/src/ilw/ilw_cuda.hpp
@@ -13,6 +13,7 @@ struct ILWParams {
     float colour_smooth;
     float cost_ratio;
     float threshold;
+	float range;
     uint flags;
 };