diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc
index 27ebbe9573320e2588242a226b262a9a93b7225c..ebc216065cfa0393512efcc1ad985e3e01f64d7f 100644
--- a/modules/gfx/src/entity.cc
+++ b/modules/gfx/src/entity.cc
@@ -559,7 +559,7 @@ void Entity::OnRenderModeChange()
   r->AddView(this->GetView());
   for (RendererMap::iterator i=renderer_.begin(), 
        e=renderer_.end(); i!=e; ++i) {
-     mol::EntityView rv=i->second->GetEffectiveView();
+     mol::EntityView rv=i->second->GetFullView();
      if (rv.IsValid() && rv.GetAtomCount()>0) {
        i->second->SetSelection(mol::Intersection(sel_, rv));
      }         
@@ -625,7 +625,7 @@ void Entity::SetRenderMode(RenderMode::Type mode,
      if (!keep && i->first!=mode) {
        renderer->SubstractView(view);
      }
-     mol::EntityView rv=renderer->GetEffectiveView();
+     mol::EntityView rv=renderer->GetFullView();
      if (rv.IsValid()) {
        renderer->SetSelection(mol::Intersection(sel_, rv));
      }
@@ -691,7 +691,7 @@ void Entity::UpdateSelection()
        e=renderer_.end(); i!=e; ++i) {
     impl::EntityRenderer* renderer=i->second;
     if (renderer->HasDataToRender()) {
-      renderer->SetSelection(mol::Intersection(renderer->GetEffectiveView(), sel_));
+      renderer->SetSelection(mol::Intersection(renderer->GetFullView(), sel_));
       renderer->UpdateViews();
     }
   }  
diff --git a/modules/gfx/src/impl/entity_renderer.cc b/modules/gfx/src/impl/entity_renderer.cc
index 5ba60e93619a10b8bf17fb9a2e8ac3df817a1020..c28dbf892d81b622a7c8470e7975a5cc99f79880 100644
--- a/modules/gfx/src/impl/entity_renderer.cc
+++ b/modules/gfx/src/impl/entity_renderer.cc
@@ -153,9 +153,11 @@ bool EntityRenderer::HasSelection() const
 
 void EntityRenderer::SetSelection(const mol::EntityView& sel)
 {
-  full_sel_=sel;
-  sel_=full_sel_;
-  sel_state_=DIRTY_VIEW|DIRTY_VA;
+  if(sel.IsValid()){
+    full_sel_=sel;
+    sel_=(hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : full_sel_;
+    sel_state_=DIRTY_VIEW|DIRTY_VA;
+  }
 }
 
 void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible)
@@ -169,7 +171,7 @@ void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible)
     hidden_view_=hidden_view_.IsValid() ? Union(hidden_view_, view) : view.Copy();
   }
 
-  sel_=(full_sel_.IsValid()&& hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : sel_;
+  sel_= hidden_view_.IsValid() ? mol::Difference(full_sel_,hidden_view_) : sel_;
 
   if(full_view_.IsValid()){
     effective_view_=hidden_view_.IsValid() ? mol::Difference(full_view_,hidden_view_): full_view_;