Index: vtkDisplayListPainter.cxx
===================================================================
RCS file: /cvsroot/VTK/VTK/Rendering/vtkDisplayListPainter.cxx,v
retrieving revision 1.3
diff -u -r1.3 vtkDisplayListPainter.cxx
--- vtkDisplayListPainter.cxx	23 Feb 2008 17:18:46 -0000	1.3
+++ vtkDisplayListPainter.cxx	28 May 2008 09:51:43 -0000
@@ -28,6 +28,7 @@
 vtkDisplayListPainter::vtkDisplayListPainter()
 {
   this->ImmediateModeRendering = 0;
+  this->PreviousRenderingForSelection = 0;
 }
 
 //----------------------------------------------------------------------------
@@ -49,6 +50,11 @@
     {
     this->SetImmediateModeRendering(info->Get(IMMEDIATE_MODE_RENDERING()));
     }
+  if(info->Has(vtkPainter::PREVIOUS_RENDERING_FOR_SELECTION()))
+    {
+    this->SetPreviousRenderingForSelection(info->Get(vtkPainter::PREVIOUS_RENDERING_FOR_SELECTION()));
+    }
+
   this->Superclass::ProcessInformation(info);
 }
 
Index: vtkDisplayListPainter.h
===================================================================
RCS file: /cvsroot/VTK/VTK/Rendering/vtkDisplayListPainter.h,v
retrieving revision 1.3
diff -u -r1.3 vtkDisplayListPainter.h
--- vtkDisplayListPainter.h	10 Jan 2008 13:51:09 -0000	1.3
+++ vtkDisplayListPainter.h	28 May 2008 09:51:43 -0000
@@ -53,7 +53,11 @@
   // since the last time this method was called.
   virtual void ProcessInformation(vtkInformation*);
  
-  
+  vtkSetMacro(PreviousRenderingForSelection,int);
+  vtkGetMacro(PreviousRenderingForSelection,int);
+
+  int PreviousRenderingForSelection;
+
   // These methods set the ivars. These are purposefully protected.
   // The only means to affect them should be using information object.
   vtkSetMacro(ImmediateModeRendering,int);
Index: vtkOpenGLDisplayListPainter.cxx
===================================================================
RCS file: /cvsroot/VTK/VTK/Rendering/vtkOpenGLDisplayListPainter.cxx,v
retrieving revision 1.6
diff -u -r1.6 vtkOpenGLDisplayListPainter.cxx
--- vtkOpenGLDisplayListPainter.cxx	17 Jan 2008 21:01:02 -0000	1.6
+++ vtkOpenGLDisplayListPainter.cxx	28 May 2008 09:51:44 -0000
@@ -90,16 +90,18 @@
     this->Information->GetMTime() > this->BuildTime || 
     this->LastUsedTypeFlags != typeflags)
     {
-    this->ReleaseList();
-    this->DisplayListId = glGenLists(1);
-    glNewList(this->DisplayListId, GL_COMPILE);
-    // generate the display list.
-    this->Superclass::RenderInternal(renderer, actor, typeflags);
-    glEndList();
-
-    this->BuildTime.Modified();
-    this->LastWindow = renderer->GetRenderWindow();
-    this->LastUsedTypeFlags = typeflags;
+      if(!this->GetPreviousRenderingForSelection())
+      {
+        this->ReleaseList();
+        this->DisplayListId = glGenLists(1);
+        glNewList(this->DisplayListId, GL_COMPILE);
+        // generate the display list.
+        this->Superclass::RenderInternal(renderer, actor, typeflags);
+        glEndList();
+      }
+      this->BuildTime.Modified();
+      this->LastWindow = renderer->GetRenderWindow();
+      this->LastUsedTypeFlags = typeflags;
     }
 
   // Time the actual drawing.
Index: vtkPainter.cxx
===================================================================
RCS file: /cvsroot/VTK/VTK/Rendering/vtkPainter.cxx,v
retrieving revision 1.5
diff -u -r1.5 vtkPainter.cxx
--- vtkPainter.cxx	14 Feb 2008 20:02:03 -0000	1.5
+++ vtkPainter.cxx	28 May 2008 09:51:45 -0000
@@ -41,6 +41,7 @@
 vtkInformationKeyMacro(vtkPainter, STATIC_DATA, Integer);
 vtkInformationKeyMacro(vtkPainter, CONSERVE_MEMORY, Integer);
 vtkInformationKeyMacro(vtkPainter, HIGH_QUALITY, Integer);
+vtkInformationKeyMacro(vtkPainter, PREVIOUS_RENDERING_FOR_SELECTION, Integer);
 //-----------------------------------------------------------------------------
 class vtkPainterObserver : public vtkCommand
 {
@@ -209,6 +210,11 @@
 
   this->PrepareForRendering(renderer, actor);
   this->RenderInternal(renderer, actor, typeflags);
+
+  // If the previous rendering selection information exist remove it
+  vtkInformation *info = this->GetInformation();
+  if(info->Has(vtkPainter::PREVIOUS_RENDERING_FOR_SELECTION()))
+    info->Remove(vtkPainter::PREVIOUS_RENDERING_FOR_SELECTION());
 }
 
 //-----------------------------------------------------------------------------
Index: vtkPainter.h
===================================================================
RCS file: /cvsroot/VTK/VTK/Rendering/vtkPainter.h,v
retrieving revision 1.5
diff -u -r1.5 vtkPainter.h
--- vtkPainter.h	10 Jan 2008 13:51:09 -0000	1.5
+++ vtkPainter.h	28 May 2008 09:51:45 -0000
@@ -79,6 +79,12 @@
   static vtkInformationIntegerKey* HIGH_QUALITY();
   
   // Description:
+  // If it is true the previous rendering was made for selection. So some painter
+  // will take care of this and do not have to refresh all the datas. For example 
+  // vtkDisplayListPainter don't need to recompile the data
+  static vtkInformationIntegerKey* PREVIOUS_RENDERING_FOR_SELECTION();
+
+  // Description:
   // Get/Set the information object associated with this painter.
   vtkGetObjectMacro(Information, vtkInformation);
   virtual void SetInformation(vtkInformation*);
Index: vtkRenderer.cxx
===================================================================
RCS file: /cvsroot/VTK/VTK/Rendering/vtkRenderer.cxx,v
retrieving revision 1.240
diff -u -r1.240 vtkRenderer.cxx
--- vtkRenderer.cxx	16 Apr 2008 18:46:05 -0000	1.240
+++ vtkRenderer.cxx	28 May 2008 09:51:45 -0000
@@ -36,6 +36,7 @@
 #include "vtkRenderWindow.h"
 #include "vtkTimerLog.h"
 #include "vtkVolume.h"
+#include "vtkInformation.h"
 
 vtkCxxRevisionMacro(vtkRenderer, "$Revision: 1.240 $");
 
@@ -1789,7 +1790,8 @@
       }
 
     //restore the prop's original settings
-    this->SwapOutSelectablePainter(this->PropArray[i], orig_painter, orig_visibility);      
+    this->SwapOutSelectablePainter(this->PropArray[i], orig_painter, orig_visibility);
+
     }
 
   //restore original background
@@ -1863,6 +1865,8 @@
       {
       orig_mapper->SetPainter(orig_painter);
       orig_painter->UnRegister(this);
+      // Inform the painters that this rendering is a seletion rendering
+      orig_painter->GetInformation()->Set(vtkPainter::PREVIOUS_RENDERING_FOR_SELECTION(), 1);
       }
     }
   if (!orig_painter)
