diff --git a/src/graphics/lod_node.cpp b/src/graphics/lod_node.cpp
index dcf165d70..27f1f3e97 100644
--- a/src/graphics/lod_node.cpp
+++ b/src/graphics/lod_node.cpp
@@ -137,19 +137,24 @@ void LODNode::OnAnimate(u32 timeMs)
     }
 }
 
-void LODNode::OnRegisterSceneNode()
+void LODNode::updateVisibility(bool* shown)
 {
     if (!isVisible()) return;
     if (m_nodes.size() == 0) return;
 
-    bool shown = false;
     int level = getLevel();
-    if (level>=0)
+    for (int i = 0; i < m_nodes.size(); i++)
     {
-        m_nodes[level]->updateAbsolutePosition();
-        m_nodes[level]->OnRegisterSceneNode();
-        shown = true;
+        m_nodes[i]->setVisible(i == level);
+        if (i == level && shown != NULL)
+            *shown = level;
     }
+}
+
+void LODNode::OnRegisterSceneNode()
+{
+    bool shown;
+    updateVisibility(&shown);
 
     const u32 now = irr_driver->getDevice()->getTimer()->getTime();
 
@@ -158,6 +163,7 @@ void LODNode::OnRegisterSceneNode()
                                 m_nodes[0]->getType() == scene::ESNT_ANIMATED_MESH) &&
         now > m_last_tick)
     {
+        int level = getLevel();
         if (m_previous_visibility == WAS_HIDDEN && shown)
         {
             scene::IMesh* mesh;
@@ -254,20 +260,7 @@ void LODNode::OnRegisterSceneNode()
     m_previous_visibility = (shown ? WAS_SHOWN : WAS_HIDDEN);
     m_last_tick = now;
 
-    // If this node has children other than the LOD nodes, draw them
-    core::list<ISceneNode*>::Iterator it;
-
-    for (it = Children.begin(); it != Children.end(); it++)
-    {
-        if (m_nodes_set.find(*it) == m_nodes_set.end())
-        {
-            assert(*it != NULL);
-            if ((*it)->isVisible())
-            {
-                (*it)->OnRegisterSceneNode();
-            }
-        }
-    }
+    scene::ISceneNode::OnRegisterSceneNode();
 }
 
 void LODNode::add(int level, scene::ISceneNode* node, bool reparent)
diff --git a/src/graphics/lod_node.hpp b/src/graphics/lod_node.hpp
index 3cca1bc28..8c349eb67 100644
--- a/src/graphics/lod_node.hpp
+++ b/src/graphics/lod_node.hpp
@@ -83,6 +83,8 @@ public:
 
     int getLevel();
 
+    void updateVisibility(bool* shown = NULL);
+
     /*
     //! Returns a reference to the current relative transformation matrix.
     //! This is the matrix, this scene node uses instead of scale, translation