diff --git a/modules/gui/pymod/CMakeLists.txt b/modules/gui/pymod/CMakeLists.txt
index dabc1930a21bf2ce3b00d52eba3f2508be7a7371..9b1353330c31cd0ca23136381ae83aba2ac43001 100644
--- a/modules/gui/pymod/CMakeLists.txt
+++ b/modules/gui/pymod/CMakeLists.txt
@@ -45,6 +45,7 @@ render_mode_widget.py
 render_op.py
 render_options_widget.py
 scene_observer_impl.py
+scene_selection_helper.py
 simple_widget.py
 sline_widget.py
 toolbar_options_widget.py
diff --git a/modules/gui/pymod/scene/color_options_widget.py b/modules/gui/pymod/scene/color_options_widget.py
index 11ce3fe29eb3edc70ba5e26c85e21ce1211777d4..36ee59c57e0dae8b28b77f6c5459e10f9cbc7e6f 100644
--- a/modules/gui/pymod/scene/color_options_widget.py
+++ b/modules/gui/pymod/scene/color_options_widget.py
@@ -30,6 +30,7 @@ except ImportError:
   pass
 
 from PyQt4 import QtCore, QtGui
+from scene_selection_helper import SelHelper
 from gradient_editor_widget import GradientEditor
 from uniform_color_widget import UniformColorWidget
 from combo_options_widget import ComboOptionsWidget
@@ -70,9 +71,8 @@ class ColorOptionsWidget(ComboOptionsWidget):
   def Update(self):
     
     ComboOptionsWidget.setEnabled(self,True)
-    scene_selection = gui.SceneSelection.Instance()
     
-    if scene_selection.GetActiveNodeCount() == 0 and scene_selection.GetActiveViewCount() == 0:
+    if SelHelper().CheckAllFlags(SelHelper.NO_SELECTION):
       ComboOptionsWidget.setEnabled(self,False)
       return
     
@@ -81,19 +81,11 @@ class ColorOptionsWidget(ComboOptionsWidget):
     for w in self.img_widgets_:
       self.RemoveWidget(w[0])
     
-    all_entity = True
-    all_img = True
-    for i in range(0,scene_selection.GetActiveNodeCount()):
-      node = scene_selection.GetActiveNode(i)
-      if not (isinstance(node, gfx.Entity) or isinstance(node, gfx.Surface)):
-        all_entity = False
-      if (not _img_present) or (not isinstance(node, gfx.MapIso)):
-        all_img = False
     
-    if all_img and (not all_entity):
+    if SelHelper().CheckAllFlags(SelHelper.HAS_IMG | SelHelper.IS_SINGLE):
       for w in self.img_widgets_:
         self.AddWidget(w[0], w[1])
-    elif all_entity and (not all_img):
+    elif SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_VIEW| SelHelper.HAS_SURFACE) and SelHelper().CheckNotFlags(SelHelper.HAS_IMG):
       for w in self.entity_widgets_:
         self.AddWidget(w[0], w[1])
     else:
diff --git a/modules/gui/pymod/scene/color_select_widget.py b/modules/gui/pymod/scene/color_select_widget.py
index a02986b7b92d1a6ab4684ff5689a2a8f447169b5..b8de8bf042bf8dc048c9f0ac02406f2734bba49e 100644
--- a/modules/gui/pymod/scene/color_select_widget.py
+++ b/modules/gui/pymod/scene/color_select_widget.py
@@ -59,11 +59,19 @@ class ColorSelectWidget(QtGui.QWidget):
   def GetColor(self):
     return self.color_
   
+  def GetGfxColor(self):
+    color = self.GetColor()
+    return gfx.Color(color.redF(), color.greenF(), color.blueF())
+  
   def SetColor(self, color):
     if(self.color_ != color):
       self.color_ = color
       self.emit(QtCore.SIGNAL("colorChanged"))
       self.update()
+  
+  def SetGfxColor(self, color):
+    qcolor= QtGui.QColor(color.Red()*255,color.Green()*255,color.Blue()*255,color.Alpha()*255)
+    self.SetColor(qcolor)
             
   def paintEvent(self, event):
     if self.isEnabled():
diff --git a/modules/gui/pymod/scene/combo_options_widget.py b/modules/gui/pymod/scene/combo_options_widget.py
index 7fc554da76aa35973f5af9599ca11dc7315d6c96..b84630cc1bfd94f42b15d5f09904e73fada359d1 100644
--- a/modules/gui/pymod/scene/combo_options_widget.py
+++ b/modules/gui/pymod/scene/combo_options_widget.py
@@ -103,7 +103,9 @@ class ComboOptionsWidget(QtGui.QWidget):
       self.__UpdateView(None)
   
   def GetCurrentWidget(self):
-    return self.__GetCurrentPair()[1]
+    if(self.combo_box_.currentIndex() >= 0):
+      return self.__GetCurrentPair()[1]
+    return None
   
   def DoResize(self):
     item = self.GetCurrentWidget()
diff --git a/modules/gui/pymod/scene/inspector_widget.py b/modules/gui/pymod/scene/inspector_widget.py
index 057a9c6b8d8efed0eabccb2fb2302c6ddcb4b989..da6cf265a4a9bf6d6a1e53a7dcccb07151cc1f79 100644
--- a/modules/gui/pymod/scene/inspector_widget.py
+++ b/modules/gui/pymod/scene/inspector_widget.py
@@ -29,6 +29,7 @@ from render_options_widget import RenderOptionsWidget
 from color_options_widget import ColorOptionsWidget
 from ost.gui.scene.scene_observer_impl import SceneObserverImpl
 from map_level_widget import AdditionalSettingsWidget
+from scene_selection_helper import SelHelper
 
 class InspectorWidget(ToolBarOptionsWidget):
   ICONS_PATH = os.path.join(ost.GetSharedDataPath(), "scene", "icons/")
@@ -58,15 +59,19 @@ class InspectorWidget(ToolBarOptionsWidget):
         
   #Observer Methods    
   def NodeRemoved(self, node):
+    SelHelper().Update()
     ToolBarOptionsWidget.Update(self)  
   
   def RenderModeChanged(self, node):
+    SelHelper().Update()
     ToolBarOptionsWidget.Update(self)
    
   def NodeChanged(self, node):
+    SelHelper().Update()
     ToolBarOptionsWidget.Update(self)
 
   def ActiveNodesChanged(self):
+    SelHelper().Update()
     ToolBarOptionsWidget.Update(self)
 
 class InspectorDialog(QtGui.QDialog):
diff --git a/modules/gui/pymod/scene/render_options_widget.py b/modules/gui/pymod/scene/render_options_widget.py
index 1d65fc87500addfb0757d5babfa28a786ef66b4e..105fcb0963b25b094c1f70b162273a4b8b0a989a 100644
--- a/modules/gui/pymod/scene/render_options_widget.py
+++ b/modules/gui/pymod/scene/render_options_widget.py
@@ -29,6 +29,7 @@ except ImportError:
   _img_present=False
   pass
 from PyQt4 import QtCore, QtGui
+from scene_selection_helper import SelHelper
 from combo_options_widget import ComboOptionsWidget
 from custom_widget import CustomWidget
 from cpk_widget import CPKWidget
@@ -73,6 +74,7 @@ class RenderOptionsWidget(ComboOptionsWidget):
     self.img_widgets_.append([gfx.RenderMode.SIMPLE, WireframeWidget()])
     self.img_widgets_.append([gfx.RenderMode.FILL, EmptyMode("Fill",gfx.RenderMode.FILL)])
 
+    self._in_view_method = False
     self.setMinimumSize(250,200)
     
   def DoSomething(self, item):
@@ -86,11 +88,10 @@ class RenderOptionsWidget(ComboOptionsWidget):
     
     if(scene_selection.GetActiveViewCount() > 0):
       entity = scene_selection.GetViewEntity()
-      for i in range(0,scene_selection.GetActiveViewCount()):
-        view = scene_selection.GetActiveView(i)
-        render_mode = item.GetRenderMode()
-        if render_mode is not None:
-          entity.SetRenderMode(item.GetRenderMode(),view,self.keep_action_.isChecked())
+      view = scene_selection.GetViewUnion()        
+      render_mode = item.GetRenderMode()
+      if render_mode is not None:
+        entity.SetRenderMode(item.GetRenderMode(),view,self.keep_action_.isChecked())
         
     item.Update()
     self.DoResize()
@@ -98,47 +99,60 @@ class RenderOptionsWidget(ComboOptionsWidget):
   def Update(self):
     if hasattr(self, "keep_button_"):
       self.keep_button_.setEnabled(True)
-    scene_selection = gui.SceneSelection.Instance()
-    if scene_selection.GetActiveNodeCount() == 0 and scene_selection.GetActiveViewCount() == 0:
+    
+    ComboOptionsWidget.setEnabled(self,True)
+    
+    cur_widget = self.GetCurrentWidget()
+    new_render_mode = None
+    if cur_widget is not None:
+      new_render_mode = cur_widget.GetRenderMode()
+    
+    if SelHelper().CheckAllFlags(SelHelper.NO_SELECTION):
       ComboOptionsWidget.setEnabled(self,False)
       return
     
+    if not self._in_view_method:
+      for w in self.entity_widgets_:
+        self.RemoveWidget(w[0])
+      for w in self.img_widgets_:
+        self.RemoveWidget(w[0])
+
+    scene_selection = gui.SceneSelection.Instance()        
     if scene_selection.GetActiveNodeCount() > 0 :
       if hasattr(self, "keep_button_"):
         self.keep_button_.setEnabled(False)
       render_mode_valid = True
-      all_entity = True
-      all_img = True
       render_mode = None
       for i in range(0,scene_selection.GetActiveNodeCount()):
         node = scene_selection.GetActiveNode(i)
-        if not isinstance(node, gfx.Entity):
-          all_entity = False
-        if (not _img_present) or (not isinstance(node, gfx.MapIso)):
-          all_img = False
         if isinstance(scene_selection.GetActiveNode(i), gfx.GfxObj):
           if render_mode is None:
             render_mode = node.GetRenderMode()
           elif render_mode != node.GetRenderMode():
             render_mode_valid = False
-      if all_img and (not all_entity):
-        for w in self.img_widgets_:
-          self.AddWidget(w[0], w[1])
-      elif all_entity and (not all_img):
+ 
+    if SelHelper().CheckFlags(SelHelper.HAS_IMG | SelHelper.IS_SINGLE):
+      for w in self.img_widgets_:
+        self.AddWidget(w[0], w[1])
+    elif SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_VIEW) and SelHelper().CheckNotFlags(SelHelper.HAS_IMG):
+      if not self._in_view_method:
         for w in self.entity_widgets_:
           self.AddWidget(w[0], w[1])
-      else:
-        ComboOptionsWidget.setEnabled(self,False)
-        return
+    else:
+      ComboOptionsWidget.setEnabled(self,False)
+      return
+    
+    if SelHelper().CheckMinOneFlag(SelHelper.HAS_ENTITY| SelHelper.HAS_IMG) and SelHelper().CheckNotFlags(SelHelper.HAS_VIEW):
       if(render_mode_valid):
         ComboOptionsWidget.ChangeSelectedItem(self,render_mode)
       else:
         ComboOptionsWidget.ChangeSelectedItem(self,"")
-    
+    else:
+      if not self._in_view_method:
+        self._in_view_method = True
+      ComboOptionsWidget.ChangeSelectedItem(self,new_render_mode)
     self.GetCurrentWidget().Update()
-    
-    ComboOptionsWidget.setEnabled(self,True)
-  
+      
   def GetText(self):
     return self.text_
         
diff --git a/modules/gui/pymod/scene/scene_selection_helper.py b/modules/gui/pymod/scene/scene_selection_helper.py
new file mode 100644
index 0000000000000000000000000000000000000000..43b0584264acb22ef8820f0a29316625a32efc50
--- /dev/null
+++ b/modules/gui/pymod/scene/scene_selection_helper.py
@@ -0,0 +1,99 @@
+#------------------------------------------------------------------------------
+# This file is part of the OpenStructure project <www.openstructure.org>
+#
+# Copyright (C) 2008-2010 by the OpenStructure authors
+#
+# This library is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation; either version 3.0 of the License, or (at your option)
+# any later version.
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+#------------------------------------------------------------------------------
+
+import sys
+from ost import gui
+import sip
+from ost import gfx
+import ost
+import os
+try: 
+  from ost import img
+  _img_present=True
+except ImportError:
+  _img_present=False
+  pass
+
+class SelHelper():
+  __shared_state = {}
+  
+  NO_SELECTION = 0
+  HAS_ENTITY = 1
+  HAS_VIEW = 2
+  HAS_IMG = 4
+  HAS_SURFACE = 8
+  IS_SINGLE = 16
+  IS_MULTI = 32
+    
+  def __init__(self):
+    self.__dict__ = self.__shared_state
+    if not '_ready' in dir(self):
+      self.scene_sel_ = gui.SceneSelection.Instance()
+      self.current_flags_ = 0
+      self._ready = True
+
+  def Update(self):
+    self.current_flags_ = 0
+    if self.scene_sel_.GetActiveNodeCount() == 0 and self.scene_sel_.GetActiveViewCount() == 0:
+      return
+    
+    for i in range(0,self.scene_sel_.GetActiveNodeCount()):
+      node = self.scene_sel_.GetActiveNode(i)
+      if isinstance(node, gfx.Entity):
+        self.current_flags_ = self.current_flags_ | SelHelper.HAS_ENTITY 
+      if isinstance(node, gfx.Surface):
+        self.current_flags_ = self.current_flags_ | SelHelper.HAS_SURFACE
+      if (_img_present) and isinstance(node, gfx.MapIso):
+        self.current_flags_ = self.current_flags_ | SelHelper.HAS_IMG
+    
+    if self.scene_sel_.GetActiveViewCount() > 0:
+      self.current_flags_ = self.current_flags_ | SelHelper.HAS_VIEW
+    
+    cnt = 0
+    if self.current_flags_ & SelHelper.HAS_ENTITY:
+      cnt += 1
+    if self.current_flags_ & SelHelper.HAS_SURFACE:
+      cnt += 1
+    if self.current_flags_ & SelHelper.HAS_IMG:
+      cnt += 1
+    if self.current_flags_ & SelHelper.HAS_VIEW:
+      cnt += 1
+    
+    if cnt == 1:
+      self.current_flags_ = self.current_flags_ | SelHelper.IS_SINGLE
+    elif cnt > 1:
+      self.current_flags_ = self.current_flags_ | SelHelper.IS_MULTI
+         
+  def CheckAllFlags(self, flags):
+    if(flags == self.current_flags_ & flags) and (flags == self.current_flags_ | flags):
+      return True
+    return False
+  
+  def CheckNotFlags(self, flags):
+    return not self.CheckFlags(flags)
+    
+  def CheckFlags(self, flags):
+    if(flags == self.current_flags_ & flags):
+      return True
+    return False
+  
+  def CheckMinOneFlag(self, flags):
+    if((self.current_flags_ - (self.current_flags_ & flags)) < self.current_flags_):
+      return True
+    return False
\ No newline at end of file
diff --git a/modules/gui/pymod/scene/uniform_color_widget.py b/modules/gui/pymod/scene/uniform_color_widget.py
index 96cc8373aad5d395b40e536c7384a5e987cf164f..b5c074c9c89d70aaa5ed9b5eaa582a171b3da672 100644
--- a/modules/gui/pymod/scene/uniform_color_widget.py
+++ b/modules/gui/pymod/scene/uniform_color_widget.py
@@ -58,39 +58,45 @@ class UniformColorWidget(QtGui.QWidget):
     top_layout.addLayout(grid)
     self.setLayout(top_layout)
     
-    QtCore.QObject.connect(self.color_select_widget_, QtCore.SIGNAL("colorChanged"), self.Update)
+    QtCore.QObject.connect(self.color_select_widget_, QtCore.SIGNAL("colorChanged"), self.ChangeColors)
     
     self.setMinimumSize(250,150)
 
   def Update(self):
+    scene_selection = gui.SceneSelection.Instance()
+    for i in range(0,scene_selection.GetActiveNodeCount()):
+      node = scene_selection.GetActiveNode(i)
+      if _img_present and isinstance(node, gfx.MapIso):
+        if self.color_select_widget_.GetGfxColor() != node.GetColor():
+          self.color_select_widget_.SetGfxColor(node.GetColor())
+      else:
+        self.ChangeColors()
+        
+  def ChangeColors(self):
     scene_selection = gui.SceneSelection.Instance()
     for i in range(0,scene_selection.GetActiveNodeCount()):
       node = scene_selection.GetActiveNode(i)
       self.ChangeColor(node)
-      
+    
     if(scene_selection.GetActiveViewCount() > 0):
       entity = scene_selection.GetViewEntity()
       view = scene_selection.GetViewUnion()
       self.ChangeViewColor(entity,view)
-        
+  
   def ChangeColor(self, node):
-    gfx_color = self.GetGfxColor()
+    gfx_color = self.color_select_widget_.GetGfxColor()
     if isinstance(node, gfx.Entity) or isinstance(node, gfx.Surface):
-      node.CleanColorOps()
-      node.SetColor(gfx_color,"")
+        node.CleanColorOps()
+        node.SetColor(gfx_color,"")
     elif _img_present and isinstance(node, gfx.MapIso):
-      node.SetColor(gfx_color)
+        node.SetColor(gfx_color)
   
   def ChangeViewColor(self, entity, view):
     if isinstance(entity, gfx.Entity) and isinstance(view, mol.EntityView):
-      gfx_color = self.GetGfxColor()
+      gfx_color = self.color_select_widget_.GetGfxColor()
       ufco=gfx.UniformColorOp(mol.QueryViewWrapper(view),gfx_color)
       entity.Apply(ufco)
-  
-  def GetGfxColor(self):
-    color = self.color_select_widget_.GetColor()
-    return gfx.Color(color.redF(), color.greenF(), color.blueF())
-  
+    
   def resizeEvent(self, event):
     self.color_select_widget_.SetSize(self.width()/2,self.height()/2)