diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
index 381fe01..5ff55e0 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/SWTNatTable.xtend
@@ -1,25 +1,27 @@
-package org.eclipse.nebula.widgets.nattable.renderer.swt
-
-import com.google.inject.Injector
-import javax.inject.Inject
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
-import org.eclipse.nebula.widgets.nattable.core.graphics.LayerPainterFactory
-import org.eclipse.nebula.widgets.nattable.core.layer.Layer
-import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.Mode
-import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.ModeSwitcher
-import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.NormalMode
-import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext
-import org.eclipse.swt.SWT
-import org.eclipse.swt.graphics.GC
-import org.eclipse.swt.widgets.Canvas
-import org.eclipse.swt.widgets.Composite
-
+package org.eclipse.nebula.widgets.nattable.renderer.swt
+
+import com.google.inject.Injector
+import javax.inject.Inject
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
+import org.eclipse.nebula.widgets.nattable.core.graphics.LayerPainterFactory
+import org.eclipse.nebula.widgets.nattable.core.layer.Layer
+import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.Mode
+import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.ModeSwitcher
+import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.NormalMode
+import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext
+import org.eclipse.swt.SWT
+import org.eclipse.swt.graphics.GC
+import org.eclipse.swt.widgets.Canvas
+import org.eclipse.swt.widgets.Composite
+
 class SWTNatTable extends Canvas {
 
 	static val int DEFAULT_STYLE_OPTIONS = SWT::NO_BACKGROUND.bitwiseOr(SWT::DOUBLE_BUFFERED).bitwiseOr(SWT::NO_REDRAW_RESIZE)
 	
 	@Inject extension Injector
 	@Inject extension LayerPainterFactory
+	
+	@Inject ModeSwitcher modeSwitcher
 
 	Layer layer
 
@@ -28,7 +30,7 @@
 	}
 
 	new(Composite parent, int style) {
-		super(parent, style)
+		super(parent, style)
 	}
 	
 	def Layer getLayer() { layer }
@@ -42,15 +44,15 @@
 		// Paint listener
 		addPaintListener([ event | paintLayer(event.gc) ])
 		
-		// Init mode switcher
-		val modeSwitcher = new ModeSwitcher(this)
+		// Init mode switcher
 		modeSwitcher.registerMode(Mode::NORMAL, getInstance(typeof(NormalMode)))
 		modeSwitcher.switchToMode(Mode::NORMAL)
+		modeSwitcher.listenTo(this)
 	}
 	
 	def private paintLayer(GC swtGC) {
 		val paintArea = new PixelArea(bounds.width, bounds.height)
-		val gc = new SWTGraphicsContext(this, swtGC)
+		val gc = new SWTGraphicsContext(swtGC, this, modeSwitcher)
 		layer?.layerPainter?.paintLayer(layer, paintArea, gc)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/event/mode/ModeSwitcher.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/event/mode/ModeSwitcher.xtend
index fadda8b..94bf812 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/event/mode/ModeSwitcher.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/event/mode/ModeSwitcher.xtend
@@ -1,28 +1,28 @@
-package org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode
-
-import java.util.Map
-import org.eclipse.swt.events.FocusEvent
-import org.eclipse.swt.events.FocusListener
-import org.eclipse.swt.events.KeyEvent
-import org.eclipse.swt.events.KeyListener
-import org.eclipse.swt.events.MouseEvent
-import org.eclipse.swt.events.MouseListener
-import org.eclipse.swt.events.MouseMoveListener
-import org.eclipse.swt.widgets.Control
-
+package org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode
+
+import java.util.Map
+import org.eclipse.swt.events.FocusEvent
+import org.eclipse.swt.events.FocusListener
+import org.eclipse.swt.events.KeyEvent
+import org.eclipse.swt.events.KeyListener
+import org.eclipse.swt.events.MouseEvent
+import org.eclipse.swt.events.MouseListener
+import org.eclipse.swt.events.MouseMoveListener
+import org.eclipse.swt.widgets.Control
+
 /**
  * Modal event handler for NatTable. This class acts as a proxy event listener.
  * It manages a set of IModeEventHandler instances which control the actual
  * event handling for a given mode. This allows the event handling behavior for
  * different modes to be grouped together and isolated from each other.
- */
+ */
 class ModeSwitcher implements KeyListener, MouseListener, MouseMoveListener, FocusListener {
 
 	val Map<String, Mode> modalEventHandlerMap = newHashMap
 
 	Mode currentMode
 
-	new(Control control) {
+	def listenTo(Control control) {
 		control.addKeyListener(this)
 		control.addMouseListener(this)
 		control.addMouseMoveListener(this)
@@ -62,22 +62,22 @@
 
 	// KeyListener interface
 
-	override keyPressed(KeyEvent event) { currentMode.keyPressed(event) }
-	override keyReleased(KeyEvent event) { currentMode.keyReleased(event) }
+	override keyPressed(KeyEvent event) { currentMode?.keyPressed(event) }
+	override keyReleased(KeyEvent event) { currentMode?.keyReleased(event) }
 
 	// MouseListener interface
 
-	override mouseDoubleClick(MouseEvent event) { currentMode.mouseDoubleClick(event) }
-	override mouseDown(MouseEvent event) { currentMode.mouseDown(event) }
-	override mouseUp(MouseEvent event) { currentMode.mouseUp(event) }
+	override mouseDoubleClick(MouseEvent event) { currentMode?.mouseDoubleClick(event) }
+	override mouseDown(MouseEvent event) { currentMode?.mouseDown(event) }
+	override mouseUp(MouseEvent event) { currentMode?.mouseUp(event) }
 	
 	// MouseMotionListener interface
 	
-	override mouseMove(MouseEvent event) { currentMode.mouseMove(event) }
+	override mouseMove(MouseEvent event) { currentMode?.mouseMove(event) }
 
 	// FocusListener interface
 
-	override focusGained(FocusEvent event) { currentMode.focusGained(event) }
-	override focusLost(FocusEvent event) { currentMode.focusLost(event) }
+	override focusGained(FocusEvent event) { currentMode?.focusGained(event) }
+	override focusLost(FocusEvent event) { currentMode?.focusLost(event) }
 
 }
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/graphics/SWTGraphicsContext.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/graphics/SWTGraphicsContext.xtend
index 8681029..63150d5 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/graphics/SWTGraphicsContext.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/graphics/SWTGraphicsContext.xtend
@@ -1,17 +1,18 @@
-package org.eclipse.nebula.widgets.nattable.renderer.swt.graphics
-
-import java.util.Map
-import java.util.Stack
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
-import org.eclipse.nebula.widgets.nattable.core.graphics.Color
-import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
-import org.eclipse.swt.SWT
-import org.eclipse.swt.graphics.GC
-import org.eclipse.swt.graphics.Rectangle
-import org.eclipse.swt.widgets.Composite
-
-import static org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.GraphicsPropertiesEnum.*
-
+package org.eclipse.nebula.widgets.nattable.renderer.swt.graphics
+
+import java.util.Map
+import java.util.Stack
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+import org.eclipse.nebula.widgets.nattable.core.graphics.Color
+import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
+import org.eclipse.nebula.widgets.nattable.renderer.swt.event.mode.ModeSwitcher
+import org.eclipse.swt.SWT
+import org.eclipse.swt.graphics.GC
+import org.eclipse.swt.graphics.Rectangle
+import org.eclipse.swt.widgets.Composite
+
+import static org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.GraphicsPropertiesEnum.*
+
 /**
  * Proxy implementation of {@link IGraphicsContext} to provide the drawing
  * capabilities by {@link GC} so the NatTable can be painted using this.
@@ -21,11 +22,12 @@
  */
 class SWTGraphicsContext implements GraphicsContext {
 	
-	val Composite composite
 	/**
 	 * The SWT {@link GC} which is proxied by this implementation.
 	 */
 	val GC gc
+	val Composite composite
+	val ModeSwitcher modeSwitcher
 	val stateStack = new Stack<Map<GraphicsPropertiesEnum, Object>>
 	
 	Map<GraphicsPropertiesEnum, Object> originalState = newHashMap
@@ -38,16 +40,16 @@
 	 * Create a new proxy instance for the specified {@link GC}.
 	 * @param gc The SWT {@link GC} which is proxied by this implementation.
 	 */
-	new(Composite composite, GC gc) {
-		if (composite == null) throw new IllegalArgumentException("composite can not be null"); //$NON-NLS-1$
+	new(GC gc, Composite composite, ModeSwitcher modeSwitcher) {
 		if (gc == null) throw new IllegalArgumentException("gc can not be null"); //$NON-NLS-1$
-		this.composite = composite
+		if (composite == null) throw new IllegalArgumentException("composite can not be null"); //$NON-NLS-1$
 		this.gc = gc
+		this.composite = composite
+		this.modeSwitcher = modeSwitcher
 	}
 	
-	def getSWTComposite() {
-		composite
-	}
+	def getSWTComposite() { composite }
+	def getModeSwitcher() { modeSwitcher }
 	
 	def getXOffset() { xOffset }
 	def getYOffset() { yOffset }
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
index 4597bc8..774f3cc 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/SWTViewportLayerPainter.xtend
@@ -1,18 +1,18 @@
-package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
-
-import java.util.HashMap
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
-import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
-import org.eclipse.nebula.widgets.nattable.core.layer.LayerPainter
-import org.eclipse.nebula.widgets.nattable.core.layer.impl.GridLineCellLayerPainter
-import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
-import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
-import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext
-import org.eclipse.swt.SWT
-import org.eclipse.swt.graphics.Rectangle
-import org.eclipse.swt.widgets.Canvas
-
+package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
+
+import java.util.HashMap
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelArea
+import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
+import org.eclipse.nebula.widgets.nattable.core.graphics.GraphicsContext
+import org.eclipse.nebula.widgets.nattable.core.layer.LayerPainter
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.GridLineCellLayerPainter
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
+import org.eclipse.nebula.widgets.nattable.renderer.swt.graphics.SWTGraphicsContext
+import org.eclipse.swt.SWT
+import org.eclipse.swt.graphics.Rectangle
+import org.eclipse.swt.widgets.Canvas
+
 class SWTViewportLayerPainter implements LayerPainter<ViewportLayer> {
 	
 	val defaultPainter = new GridLineCellLayerPainter
@@ -36,6 +36,7 @@
 	def private createViewportCanvas(ViewportLayer viewportLayer, SWTGraphicsContext swtGC) {
 		val viewportCanvas = new Canvas(swtGC.SWTComposite, SWT::H_SCROLL.bitwiseOr(SWT::V_SCROLL))
 		viewportLayerToCanvasMap.put(viewportLayer, viewportCanvas)
+		swtGC.modeSwitcher.listenTo(viewportCanvas)
 		
 		// Dispose listener
 		viewportCanvas.addDisposeListener([ viewportLayerToCanvasMap.remove(viewportLayer) ])
@@ -43,7 +44,7 @@
 		// Paint listener
 		viewportCanvas.addPaintListener([ event |
 			val swtBounds = viewportCanvas.bounds
-			defaultPainter.paintLayer(viewportLayer, new PixelArea(swtBounds.width, swtBounds.height), new SWTGraphicsContext(viewportCanvas, event.gc))
+			defaultPainter.paintLayer(viewportLayer, new PixelArea(swtBounds.width, swtBounds.height), new SWTGraphicsContext(event.gc, viewportCanvas, swtGC.modeSwitcher))
 		])
 		
 		viewportLayer.addEventListener([ event | viewportCanvas.redraw ])
