diff --git a/Rendering/vtkXOpenGLRenderWindow.cxx b/Rendering/vtkXOpenGLRenderWindow.cxx
index d415fae..72c4ce0 100644
--- a/Rendering/vtkXOpenGLRenderWindow.cxx
+++ b/Rendering/vtkXOpenGLRenderWindow.cxx
@@ -423,15 +423,16 @@ vtkXOpenGLRenderWindow::vtkXOpenGLRenderWindow()
  
   this->Internal = new vtkXOpenGLRenderWindowInternal(this);
 
-  this->XCArrow =   0;
-  this->XCSizeAll = 0;
-  this->XCSizeNS =  0;
-  this->XCSizeWE =  0;
-  this->XCSizeNE =  0;
-  this->XCSizeNW =  0;
-  this->XCSizeSE =  0;
-  this->XCSizeSW =  0;
-  this->XCHand   =  0;
+  this->XCCrosshair = 0;
+  this->XCArrow     = 0;
+  this->XCSizeAll   = 0;
+  this->XCSizeNS    = 0;
+  this->XCSizeWE    = 0;
+  this->XCSizeNE    = 0;
+  this->XCSizeNW    = 0;
+  this->XCSizeSE    = 0;
+  this->XCSizeSW    = 0;
+  this->XCHand      = 0;
 
   this->Capabilities = 0;
 
@@ -683,6 +684,10 @@ void vtkXOpenGLRenderWindow::DestroyWindow()
       {
       XFreeCursor(this->DisplayId,this->XCArrow);
       }
+    if (this->XCCrosshair)
+      {
+      XFreeCursor(this->DisplayId,this->XCCrosshair);
+      }
     if (this->XCSizeAll)
       {
       XFreeCursor(this->DisplayId,this->XCSizeAll);
@@ -717,15 +722,16 @@ void vtkXOpenGLRenderWindow::DestroyWindow()
       }
     }
 
-  this->XCArrow =   0;
-  this->XCSizeAll = 0;
-  this->XCSizeNS =  0;
-  this->XCSizeWE =  0;
-  this->XCSizeNE =  0;
-  this->XCSizeNW =  0;
-  this->XCSizeSE =  0;
-  this->XCSizeSW =  0;
-  this->XCHand   =  0;
+  this->XCCrosshair = 0;
+  this->XCArrow     = 0;
+  this->XCSizeAll   = 0;
+  this->XCSizeNS    = 0;
+  this->XCSizeWE    = 0;
+  this->XCSizeNE    = 0;
+  this->XCSizeNW    = 0;
+  this->XCSizeSE    = 0;
+  this->XCSizeSW    = 0;
+  this->XCHand      = 0;
 
   this->MakeCurrent();
   
@@ -1990,7 +1996,13 @@ void vtkXOpenGLRenderWindow::SetCurrentCursor(int shape)
       
   switch (shape)
     {
-    case VTK_CURSOR_CROSSHAIR: // XC_crosshair sucks on linux, default to arrow
+    case VTK_CURSOR_CROSSHAIR:
+      if (!this->XCCrosshair)
+        {
+        this->XCCrosshair = XCreateFontCursor(this->DisplayId, XC_crosshair);
+        }
+      XDefineCursor(this->DisplayId, this->WindowId, this->XCCrosshair);
+      break;
     case VTK_CURSOR_ARROW:
       if (!this->XCArrow)
         {
diff --git a/Rendering/vtkXOpenGLRenderWindow.h b/Rendering/vtkXOpenGLRenderWindow.h
index 2ad5f92..adf284a 100644
--- a/Rendering/vtkXOpenGLRenderWindow.h
+++ b/Rendering/vtkXOpenGLRenderWindow.h
@@ -247,6 +247,7 @@ protected:
   char    *Capabilities;
 
   // we must keep track of the cursors we are using
+  Cursor XCCrosshair;
   Cursor XCArrow;
   Cursor XCSizeAll;
   Cursor XCSizeNS;
