diff --git a/modules/gfx/pymod/export_entity.cc b/modules/gfx/pymod/export_entity.cc
index 4e555d2b8324a831ad6c5b557c4581f6fd614769..f12b54c881f19dbda61c7d6b88f2c13e24e8f4ea 100644
--- a/modules/gfx/pymod/export_entity.cc
+++ b/modules/gfx/pymod/export_entity.cc
@@ -238,7 +238,7 @@ void export_Entity()
                   &Entity::SetSelection)
     .def("GetView", &Entity::GetView)
     .def("GetRenderModeName", &Entity::GetRenderModeName)
-    .def("GetLoadedRenderModes", &Entity::GetLoadedRenderModes)
+    .def("GetNotEmptyRenderModes", &Entity::GetNotEmptyRenderModes)
     .def("SetRenderMode", set_rm1, arg("keep")=false)
     .def("SetRenderMode", set_rm2)
     .def("SetEnableRenderMode", &Entity::SetEnableRenderMode)
diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc
index 5f5695de222568b0996ac63a111fa7d52b64a81e..a352ad32d3aa016a5d53390de5a6893d3196375b 100644
--- a/modules/gfx/src/entity.cc
+++ b/modules/gfx/src/entity.cc
@@ -534,7 +534,7 @@ void Entity::ApplyRenderOptions(RenderMode::Type render_mode,
 
 void Entity::OptionsChanged(RenderMode::Type render_mode)
 {
-  impl::EntityRenderer* entity_renderer=this->GetOrCreateRenderer(render_mode_);
+  impl::EntityRenderer* entity_renderer=this->GetOrCreateRenderer(render_mode);
   entity_renderer->RenderOptionsChanged();
   FlagRebuild();
   Scene::Instance().ObjectChanged(this->GetName());
@@ -542,7 +542,6 @@ void Entity::OptionsChanged(RenderMode::Type render_mode)
 
 void Entity::OnRenderModeChange()
 {
-  GfxObj::OnRenderModeChange();
   for (RendererMap::iterator i=renderer_.begin(), 
        e=renderer_.end(); i!=e; ++i) {
     i->second->ClearViews();
@@ -559,6 +558,7 @@ void Entity::OnRenderModeChange()
   }  
   this->ReapplyColorOps();
   this->FlagRebuild();
+  GfxObj::OnRenderModeChange();
 }
 
 const String Entity::GetRenderModeName(RenderMode::Type mode){
@@ -592,11 +592,13 @@ bool Entity::IsRenderModeEnabled(RenderMode::Type mode){
 }
 
 
-RenderModeTypes Entity::GetLoadedRenderModes(){
+RenderModeTypes Entity::GetNotEmptyRenderModes(){
   std::vector<RenderMode::Type> render_modes;
   for (RendererMap::iterator i=renderer_.begin(),
          e=renderer_.end(); i!=e; ++i) {
-       render_modes.push_back(i->first);
+    if(i->second->HasDataToRender()){
+      render_modes.push_back(i->first);
+    }
   }
   return render_modes;
 }
diff --git a/modules/gfx/src/entity.hh b/modules/gfx/src/entity.hh
index 5a62719aece00d9721ebf2eb91cf14e4420d03c7..6a84f8c9ed5432d37ca90422e10dacd9d5b3b6f2 100644
--- a/modules/gfx/src/entity.hh
+++ b/modules/gfx/src/entity.hh
@@ -124,7 +124,7 @@ public:
 
   bool IsRenderModeEnabled(RenderMode::Type mode);
 
-  RenderModeTypes GetLoadedRenderModes();
+  RenderModeTypes GetNotEmptyRenderModes();
 
   void SetRenderMode(RenderMode::Type mode, const mol::EntityView& view, 
                      bool keep=false);
diff --git a/modules/gui/src/scene_win/render_modes_node.cc b/modules/gui/src/scene_win/render_modes_node.cc
index 434d0f3b068ff066776cc6e43c735073bef9e0ea..02cfae68a3803a0c02c85f942a5af4197be8f046 100644
--- a/modules/gui/src/scene_win/render_modes_node.cc
+++ b/modules/gui/src/scene_win/render_modes_node.cc
@@ -47,14 +47,28 @@ void RenderModesNode::RenderModeChanged(){
 void RenderModesNode::Update(){
   SceneWinModel* model = GostyApp::Instance()->GetSceneWin()->GetModel();
   gfx::EntityP entity = boost::dynamic_pointer_cast<gfx::Entity>(this->GetGfxNode());
-  gfx::RenderModeTypes render_modes =  entity->GetLoadedRenderModes();
+  gfx::RenderModeTypes render_modes =  entity->GetNotEmptyRenderModes();
   for(unsigned int i=0; i<render_modes.size();i++){
     if(!render_types_.contains(render_modes[i])){
       RenderModeNode* node = new RenderModeNode(entity, render_modes[i],this);
       model->AddNode(this, node);
-      render_types_.insert(render_modes[i]);
+      render_types_.insert(render_modes[i],node);
     }
   }
+  QSet<gfx::RenderMode::Type> types_to_delete;
+  QMap<gfx::RenderMode::Type,RenderModeNode*>::iterator type;
+  for (type = render_types_.begin(); type != render_types_.end(); ++type){
+    if(find(render_modes.begin(), render_modes.end(), type.key()) == render_modes.end()){
+      model->RemoveNode(type.value());
+      types_to_delete.insert(type.key());
+    }
+  }
+
+  QSet<gfx::RenderMode::Type>::iterator to_delete;
+  for(to_delete = types_to_delete.begin(); to_delete != types_to_delete.end(); ++to_delete){
+    render_types_.remove(*to_delete);
+  }
+
 }
 
 gfx::GfxNodeP RenderModesNode::GetGfxNode(){
diff --git a/modules/gui/src/scene_win/render_modes_node.hh b/modules/gui/src/scene_win/render_modes_node.hh
index 6fc631ea9312a1dda0b4449994884557e29bc1df..691f0d094094d2213f5973f7021cc3514f21e12b 100644
--- a/modules/gui/src/scene_win/render_modes_node.hh
+++ b/modules/gui/src/scene_win/render_modes_node.hh
@@ -34,6 +34,8 @@
 #include <ost/gui/module_config.hh>
 #include <ost/gui/scene_win/label_node.hh>
 
+#include "render_mode_node.hh"
+
 /*
   Author: Stefan Scheuber
  */
@@ -52,7 +54,7 @@ private:
   void Update();
 
   gfx::GfxNodeP node_;
-  QSet<gfx::RenderMode::Type> render_types_;
+  QMap<gfx::RenderMode::Type,RenderModeNode*> render_types_;
 };
 
 }}
diff --git a/modules/gui/src/scene_win/scene_win_model.cc b/modules/gui/src/scene_win/scene_win_model.cc
index e65b75379cd95d44e55417e26fe59085dd7df15c..c08830f6db6a2a3bbc13b40fdea607f3f8268a38 100644
--- a/modules/gui/src/scene_win/scene_win_model.cc
+++ b/modules/gui/src/scene_win/scene_win_model.cc
@@ -220,7 +220,8 @@ SceneNode* SceneWinModel::GetItem(const QModelIndex &index) const
 bool SceneWinModel::AddNode(SceneNode* parent, SceneNode* child){
   QModelIndex parent_index = GetIndexOf(parent);
   if(parent_index.isValid()){
-    this->beginInsertRows(parent_index,0,0);
+    int row = parent->GetChildCount();
+    this->beginInsertRows(parent_index,row,row);
     parent->AddChild(child);
     this->endInsertRows();
     return true;
@@ -228,6 +229,21 @@ bool SceneWinModel::AddNode(SceneNode* parent, SceneNode* child){
   return false;
 }
 
+bool SceneWinModel::RemoveNode(SceneNode* node){
+  QModelIndex index = GetIndexOf(node);
+  SceneNode* parent = node->GetParent();
+  if(parent && index.isValid()){
+    QModelIndex parent_index = GetIndexOf(parent);
+    int row = node->GetRow();
+    this->beginRemoveRows(parent_index,row,row);
+    parent->RemoveChild(node);
+    this->endRemoveRows();
+    return true;
+  }
+  return false;
+}
+
+
 void SceneWinModel::AttachRenderModeObserver(RenderModesNode* node){
   render_observers_.insert(node->GetGfxNode(),node);
 }
diff --git a/modules/gui/src/scene_win/scene_win_model.hh b/modules/gui/src/scene_win/scene_win_model.hh
index b0a29dfe5a384350de4a338ed836e9792a9dd4e9..258e798bdbb443df850a2e998ae2082b1953bb71 100644
--- a/modules/gui/src/scene_win/scene_win_model.hh
+++ b/modules/gui/src/scene_win/scene_win_model.hh
@@ -51,6 +51,7 @@ public:
   virtual void Update();
 
   bool AddNode(SceneNode* parent, SceneNode* child);
+  bool RemoveNode(SceneNode* node);
 
   void AttachRenderModeObserver(RenderModesNode* node);
   void DetachRenderModeObserver(RenderModesNode* node);