diff --git a/demos/optical_bench/src/Optix Files/laser_caster.cu b/demos/optical_bench/src/Optix Files/laser_caster.cu
index 6af12b1946d797f588b96b636453f6fed637e086..adb8009d9f819f16aaba0bc0d8b025ecea3975e2 100644
--- a/demos/optical_bench/src/Optix Files/laser_caster.cu	
+++ b/demos/optical_bench/src/Optix Files/laser_caster.cu	
@@ -64,7 +64,7 @@ RT_PROGRAM void laser_caster(){
 	//convert to normal distrubution
 	float r = sqrtf(-2*log(random.x));
 	float theta = 2*3.141592654f*random.y;
-	random = clamp(make_float2(r*cosf(theta), r*sinf(theta)), -4.5f, 4.5f) * laserBeamWidth/PERCENTILE;
+	random = clamp(make_float2(r*cosf(theta), r*sinf(theta)), -4.5f, 4.5f) * laserBeamWidth * 0.5 /PERCENTILE;
 	ray_origin += (launch_index.z != 0) * (laser_right * random.x + laser_up * random.y);
 	
 	PerRayData_radiance_iterative prd;
diff --git a/demos/optical_bench/src/Optix Files/lens_parametric.cu b/demos/optical_bench/src/Optix Files/lens_parametric.cu
index 54769f3168a1272e958100fefdfe4ef154e7b127..5eed83dce36fdc37222f5ec3fbeee23fcf41fdac 100644
--- a/demos/optical_bench/src/Optix Files/lens_parametric.cu	
+++ b/demos/optical_bench/src/Optix Files/lens_parametric.cu	
@@ -57,7 +57,7 @@ RT_PROGRAM void intersect(int primIdx)
 	} else{
 		h1.t = intersectPlane(center + orientation*(halfCylinderLength), ray, -orientation, lensRadius, scene_epsilon);
 		h1.p = ray.origin + h1.t*ray.direction;
-		h1.normal = -orientation;
+		h1.normal = orientation;
 	}	
 	
 	perHitData h2;
@@ -70,7 +70,7 @@ RT_PROGRAM void intersect(int primIdx)
 	} else{
 		h2.t = intersectPlane(center - orientation*(halfCylinderLength), ray, orientation, lensRadius, scene_epsilon);
 		h2.p = ray.origin + h2.t*ray.direction;
-		h2.normal = orientation;
+		h2.normal = -orientation;
 	}
 
 	perHitData h3;
diff --git a/demos/optical_bench/src/lens.cpp b/demos/optical_bench/src/lens.cpp
index b6e0bf858d4871be3fd6109d4524643908efdd86..1a304facd6eae29bc31d5493fc6bfbce8f1c19a2 100644
--- a/demos/optical_bench/src/lens.cpp
+++ b/demos/optical_bench/src/lens.cpp
@@ -353,17 +353,26 @@ void Lens::SetLensSideTypes(LensSideType type1, LensSideType type2) {
   type_2_ = type2;
 
   geometry_["halfCylinderLength"]->setFloat(GetCylinderLength(thickness) / 2);
+
+  MarkDirty();
 }
 
 void Lens::RecalculateBoundingBox() {
   auto o = geometry_["orientation"]->getFloat3();
-  float t = geometry_["halfCylinderLength"]->getFloat() * 2;
+  float hc = geometry_["halfCylinderLength"]->getFloat();
   float lr = geometry_["lensRadius"]->getFloat();
 
-  t = GetThickness(t);
+  float r1 = geometry_["radius"]->getFloat();
+  float r2 = geometry_["radius2"]->getFloat();
+
+  // thickness of the halfspheres
+  float halfThickness1 = r1 - sqrtf(-lr * lr + r1 * r1);
+  if (type_1_ == PLANE || type_1_ == CONCAVE) halfThickness1 = 0;
+  float halfThickness2 = r2 - sqrtf(-lr * lr + r2 * r2);
+  if (type_2_ == PLANE || type_2_ == CONCAVE) halfThickness2 = 0;
 
-  auto bb =
-      ComputeAABBFromCylinder(glm::vec3(o.x, o.y, o.z), t / 2.0f, t / 2.0f, lr);
+  auto bb = ComputeAABBFromCylinder(
+      glm::vec3(o.x, o.y, o.z), hc + halfThickness1, hc + halfThickness2, lr);
   selector_->SetCollider(bb[0], bb[1]);
   selector_->ExternalUpdate();
 }