diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index a79bee3a3e2e6ef2a0f67a519ab8216fa1395547..a6fbd0d6898852d38a14478d35a0ddeac96ce718 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -1428,7 +1428,6 @@ void Scene::PopView()
     zfar_=scene_view_stack_.top().zfar;
     scene_view_stack_.pop();
     ResetProjection();
-    update_fog();
     RequestRedraw();
   }
 }
@@ -1484,7 +1483,6 @@ float Scene::GetFOV() const
 void Scene::SetFogNearOffset(float o)
 {
   fnear_=o;
-  update_fog();
   RequestRedraw();
 }
 
@@ -1496,7 +1494,6 @@ float Scene::GetFogNearOffset() const
 void Scene::SetFogFarOffset(float o)
 {
   ffar_=o;
-  update_fog();
   RequestRedraw();
 }
 
@@ -1509,7 +1506,6 @@ void Scene::SetFogOffsets(float no, float fo)
 {
   fnear_=no;
   ffar_=fo;
-  update_fog();
   RequestRedraw();
 }
 
@@ -1798,7 +1794,7 @@ void Scene::set_near(float n)
   if(znear_>zfar_-0.1) {
     znear_=zfar_-0.1;
   }
-  update_fog();
+  RequestRedraw();
 }
 
 void Scene::set_far(float f)
@@ -1807,19 +1803,9 @@ void Scene::set_far(float f)
   if(znear_>zfar_-0.1) {
     zfar_=znear_+0.1;
   }
-  update_fog();
-}
-
-void Scene::update_fog()
-{
-  if(gl_init_) {
-    this->ActivateGLContext();
-    glFogf(GL_FOG_START,znear_+fnear_);
-    glFogf(GL_FOG_END,zfar_+ffar_);
-  }
+  RequestRedraw();
 }
 
-
 namespace {
 class DirtyAll: public GfxNodeVisitor
 {
@@ -2113,6 +2099,9 @@ void Scene::render_scene()
 
   render_bg();
 
+  glFogf(GL_FOG_START,znear_+fnear_);
+  glFogf(GL_FOG_END,zfar_+ffar_);
+
   glMultMatrix(transform_.GetTransposedMatrix().Data());
 
 #if OST_SHADER_SUPPORT_ENABLED
diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh
index 714e60a637567086c9e4c6b1a0313411ef3c7c6c..6ae5033f81dd4d023300df48894898864cbb31f0 100644
--- a/modules/gfx/src/scene.hh
+++ b/modules/gfx/src/scene.hh
@@ -601,7 +601,6 @@ private:
 
   void set_near(float n);
   void set_far(float f);
-  void update_fog();
   void flag_all_dirty();
   void prep_glyphs();
   void prep_blur();