diff --git a/modules/gfx/pymod/__init__.py b/modules/gfx/pymod/__init__.py
index 4dfc0fd64f31c7ddbda9a5e804e2e81881976305..10afd277ea2390051f79254403fb5d6db41bb9c4 100644
--- a/modules/gfx/pymod/__init__.py
+++ b/modules/gfx/pymod/__init__.py
@@ -183,4 +183,4 @@ def _Match(scene, pattern="*"):
     return matches
   return GfxNodeListProxy(_Recurse("", Scene().root_node, pattern))
 
-SceneSingleton.__getitem__=_Match
+SceneSingleton.Match=_Match
diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc
index 317f74c5320a9a9c513e06b08fa88c6bfe9d046f..fef28debb17e5343c3ec8f128adecfd4698597f2 100644
--- a/modules/gfx/src/entity.cc
+++ b/modules/gfx/src/entity.cc
@@ -75,7 +75,8 @@ Entity::Entity(const String& name,
   opacity_(1.0),
   blur_(false),
   blurf1_(1.0),
-  blurf2_(0.8)
+  blurf2_(0.8),
+  needs_update_(true)
 {
   init(RenderMode::SIMPLE);
 }
@@ -327,26 +328,29 @@ void Entity::CacheBoundingBox() const
 bool Entity::UpdateIfNeeded() const
 {
   bool updated=false;
-  for (RendererMap::iterator i=renderer_.begin(), 
-       e=renderer_.end(); i!=e; ++i) {
-    EntityRenderer* renderer =i->second;
-    if (renderer->IsDirty()) {
-      renderer->PrepareRendering();
-      updated=true;
+  if(IsVisible()) {
+    for (RendererMap::iterator i=renderer_.begin(), 
+           e=renderer_.end(); i!=e; ++i) {
+      EntityRenderer* renderer =i->second;
+      if (renderer->IsDirty()) {
+        renderer->PrepareRendering();
+        updated=true;
+      }
+      renderer->VA().SetOpacity(opacity_);
+    }
+    if (updated) {
+      this->CacheBoundingBox();
     }
-    renderer->VA().SetOpacity(opacity_);
-  }
-  if (updated) {
-    this->CacheBoundingBox();
   }
   return updated;
 }
 
 void Entity::CustomPreRenderGL(bool update)
 {
-  if (update) {
+  if (update || needs_update_) {
     this->UpdateIfNeeded();
     RefreshVA();
+    needs_update_=false;
   }
 }
 
diff --git a/modules/gfx/src/entity.hh b/modules/gfx/src/entity.hh
index 0200b592be877f918731dbecbab95c202f683e56..a97192d391ebb1441a65e8cbd4b7d71ac3ca9de2 100644
--- a/modules/gfx/src/entity.hh
+++ b/modules/gfx/src/entity.hh
@@ -311,6 +311,7 @@ private:
   bool blur_;
   float blurf1_;
   float blurf2_;
+  bool needs_update_;
 };
 
 
diff --git a/modules/gfx/src/gfx_object.cc b/modules/gfx/src/gfx_object.cc
index cc09ada77265dddfd27ead5be1de7fbcdc7217eb..8a45e784b52cb9f18ba77fe354d9262bc355bc9c 100644
--- a/modules/gfx/src/gfx_object.cc
+++ b/modules/gfx/src/gfx_object.cc
@@ -58,7 +58,11 @@ GfxObj::GfxObj(const String& name):
   opacity_(1.0),
   smoothf_(0.0),
   outline_flag_(false),
+#if defined (__APPLE__)
+  outline_mode_(2),
+#else
   outline_mode_(1),
+#endif
   c_ops_(),
   labels_(),
   use_occlusion_(false)
diff --git a/modules/gfx/src/vertex_array.cc b/modules/gfx/src/vertex_array.cc
index 4e42c234b1bc13e87c360bc20d153141e6ad6903..da764f97f8d808fc4fd7b7cc1b6ac3b9516e9476 100644
--- a/modules/gfx/src/vertex_array.cc
+++ b/modules/gfx/src/vertex_array.cc
@@ -437,7 +437,7 @@ void IndexedVertexArray::RenderGL()
     glCullFace(GL_FRONT);
     glEnable(GL_CULL_FACE);
     glShadeModel(GL_FLAT);
-    if(outline_mode_==2) {
+    if(outline_mode_==1) {
       glCallList(outline_mat_dlist_);
       glEnable(GL_POLYGON_OFFSET_LINE);
       glEnable(GL_POLYGON_OFFSET_POINT);
@@ -447,7 +447,7 @@ void IndexedVertexArray::RenderGL()
       glEnable(GL_LINE_SMOOTH);
       glDisable(GL_POINT_SMOOTH); // kills selfx fragment shader if enabled
       glDisable(GL_POLYGON_SMOOTH);
-    } else if(outline_mode_==1) {
+    } else if(outline_mode_==2) {
       glCallList(outline_mat_dlist_);
       glEnable(GL_POLYGON_OFFSET_LINE);
       glPolygonOffset(10.0,1.0);