diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc
index b9313b2d6d997ed0f64e40718e41f243862953b3..dbf9ce5bbc39da3573fb4482258c349d3ab6b5e9 100644
--- a/modules/gfx/pymod/export_scene.cc
+++ b/modules/gfx/pymod/export_scene.cc
@@ -217,6 +217,7 @@ void export_Scene()
     .def("SetAmbientOcclusionQuality",&Scene::SetAmbientOcclusionQuality)
     .add_property("ambient_occlusion_quality",&Scene::GetAmbientOcclusionQuality,&Scene::SetAmbientOcclusionQuality)
     .add_property("ao_quality",&Scene::GetAmbientOcclusionQuality,&Scene::SetAmbientOcclusionQuality)
+    .add_property("ao_size",&Scene::GetAmbientOcclusionSize,&Scene::SetAmbientOcclusionSize)
     .def("AttachObserver",&Scene::AttachObserver)
     .def("StartOffscreenMode",&Scene::StartOffscreenMode)
     .def("StopOffscreenMode",&Scene::StopOffscreenMode)
diff --git a/modules/gfx/src/impl/scene_fx.cc b/modules/gfx/src/impl/scene_fx.cc
index f47e997ae081a06f7e95277c229a372c1e50cb32..53be9d7c6210c145cdca18578f538b99ff841e55 100644
--- a/modules/gfx/src/impl/scene_fx.cc
+++ b/modules/gfx/src/impl/scene_fx.cc
@@ -35,6 +35,7 @@ SceneFX::SceneFX():
   amb_occl_factor(1.0),
   amb_occl_mode(1),
   amb_occl_quality(1),
+  amb_occl_size(20.0),
   use_beacon(false),
   beacon(),
   scene_tex_id_(),
@@ -506,6 +507,7 @@ void SceneFX::prep_amb_occlusion()
   glUniform1i(glGetUniformLocation(cpr,"norm_map"),1);
   glUniform1i(glGetUniformLocation(cpr,"kernel"),2);
   glUniform1f(glGetUniformLocation(cpr,"step"),1.0/static_cast<float>(kernel_size_));
+  glUniform1f(glGetUniformLocation(cpr,"size"),amb_occl_size);
   glUniform2f(glGetUniformLocation(cpr,"i_vp"),1.0/static_cast<float>(width),1.0/static_cast<float>(height));
   glUniform1i(glGetUniformLocation(cpr,"mode"),amb_occl_mode);
   double pm[16];
diff --git a/modules/gfx/src/impl/scene_fx.hh b/modules/gfx/src/impl/scene_fx.hh
index 6e1f8b5968896141a58de57b1e79b163fe08634b..3b8e1fa388b67ea0c51be27676b437875c0e7aa6 100644
--- a/modules/gfx/src/impl/scene_fx.hh
+++ b/modules/gfx/src/impl/scene_fx.hh
@@ -65,6 +65,7 @@ public:
   float amb_occl_factor;
   uint amb_occl_mode;
   uint amb_occl_quality;
+  float amb_occl_size;
   bool use_beacon;
   Beacon beacon;
 
diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index f7899f7156a4969f158bff402b7f9f6d8aee3f0c..fde6ad665d0ce3537bf9c97d5e3d26d1055bb62a 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -313,6 +313,24 @@ uint Scene::GetAmbientOcclusionQuality() const
 #endif
 }
 
+void Scene::SetAmbientOcclusionSize(float f)
+{
+#if OST_SHADER_SUPPORT_ENABLED
+  impl::SceneFX::Instance().amb_occl_size=f;
+  // the redraw routine will deal with the Shader
+  RequestRedraw();
+#endif
+}
+
+float Scene::GetAmbientOcclusionSize() const
+{
+#if OST_SHADER_SUPPORT_ENABLED
+  return impl::SceneFX::Instance().amb_occl_size;
+#else
+  return 1.0;
+#endif
+}
+
 void Scene::SetShadingMode(const std::string& smode)
 {
 #if OST_SHADER_SUPPORT_ENABLED
diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh
index f127ee28fddcf37df4759542c67fea038ae2386e..62630ced64dd95afd7b36957e2a97d6f35a3ba61 100644
--- a/modules/gfx/src/scene.hh
+++ b/modules/gfx/src/scene.hh
@@ -137,6 +137,10 @@ class DLLEXPORT_OST_GFX Scene {
   void SetAmbientOcclusionQuality(uint q);
   /// experimental feature
   uint GetAmbientOcclusionQuality() const;
+  /// experimental feature
+  void SetAmbientOcclusionSize(float f);
+  /// experimental feature
+  float GetAmbientOcclusionSize() const;
   
   /// \brief select shading mode
   /// one of fallback, basic, default, hf, toon1, toon2
diff --git a/modules/gfx/src/shader/amboccl_fs.glsl b/modules/gfx/src/shader/amboccl_fs.glsl
index 2d7819565c59158fc80272ce19bc059e7dfaeb9f..2c888d9e5a57d8dfbd983e9932035d98f30178be 100644
--- a/modules/gfx/src/shader/amboccl_fs.glsl
+++ b/modules/gfx/src/shader/amboccl_fs.glsl
@@ -2,6 +2,7 @@ uniform sampler2D depth_map;
 uniform sampler2D norm_map;
 uniform sampler1D kernel;
 uniform float step;
+uniform float size;
 uniform vec2 i_vp;
 uniform vec4 abcd;
 uniform int mode;
@@ -66,7 +67,7 @@ void main()
   float i;
   float sum=0.0;
   for(i=0.0;i<1.0;i+=step) {
-    vec2 nn=texture1D(kernel,i).xy*40.0-20.0;
+    vec2 nn=(texture1D(kernel,i).xy-0.5)*size;
     sum+=ao(nn,depth_p,norm_p,t_pos_p);
   }
   sum*=step;