diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsContext.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsContext.xtend
index 98e1b69..53868bc 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsContext.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsContext.xtend
@@ -32,6 +32,8 @@
 	
 	def void setForegroundColor(Color foregroundColor)
 	
+	def void setBackgroundColor(Color backgroundColor)
+	
 	def PixelRectangle getClipBounds()
 	
 	def void setClipBounds(PixelRectangle clipBounds)
@@ -42,6 +44,7 @@
 	 * Draws the specified text at the position specified by x and y coordinates.
 	 * Ensure that drawing the text doesn't draw a background and line delimiters 
 	 * are handled correctly.
+	 * 
 	 * @param text The text to draw.
 	 * @param x the x coordinate of the top left corner of the rectangular area where the text is to be drawn
 	 * @param y the y coordinate of the top left corner of the rectangular area where the text is to be drawn
@@ -49,7 +52,7 @@
 	def void drawText(String text, int x, int y)
 	
 	/**
-	 * Draws a line, using the foreground color, between the points 
+	 * Draws a line using the foreground color between the points 
 	 * (<code>x1</code>, <code>y1</code>) and (<code>x2</code>, <code>y2</code>).
 	 *
 	 * @param x1 the first point's x coordinate
@@ -60,6 +63,20 @@
 	def void drawLine(int x1, int y1, int x2, int y2)
 	
 	/**
+	 * Draws a rectangle with the specified bounds using the foreground color.
+	 * 
+	 * @param rect The rectangle's pixel bounds.
+	 */
+	def void drawRectangle(PixelRectangle rect)
+	
+	/**
+	 * Fills the specified rectangular pixel area with the background color.
+	 * 
+	 * @param rect The rectangle's pixel bounds.
+	 */
+	def void fillRectangle(PixelRectangle rect)
+	
+	/**
 	 * Returns the calculated pixel width of the given string if drawn in the current font in the receiver.
 	 * Tab expansion and carriage return processing are performed.
 	 * <p>
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsPropertiesEnum.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsPropertiesEnum.xtend
index 9e78bef..4debb03 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsPropertiesEnum.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/graphics/GraphicsPropertiesEnum.xtend
@@ -3,6 +3,7 @@
 enum GraphicsPropertiesEnum {
 	
 	FOREGROUND_COLOR,
+	BACKGROUND_COLOR,
 	CLIP_BOUNDS,
 	X_OFFSET,
 	Y_OFFSET
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/DefaultCellPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/DefaultCellPainter.xtend
index 29e2340..1c1be30 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/DefaultCellPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/DefaultCellPainter.xtend
@@ -1,9 +1,9 @@
 package org.eclipse.nebula.widgets.nattable.core.layer.cell.impl
 
+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.cell.Cell
 import org.eclipse.nebula.widgets.nattable.core.layer.cell.CellPainter
-import org.eclipse.nebula.widgets.nattable.core.geometry.PixelRectangle
 
 class DefaultCellPainter implements CellPainter {
 	
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/graphics/JavaFXGraphicsContext.xtend b/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/graphics/JavaFXGraphicsContext.xtend
index 3529965..a8c9f02 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/graphics/JavaFXGraphicsContext.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.javafx/src/org/eclipse/nebula/widgets/nattable/renderer/javafx/graphics/JavaFXGraphicsContext.xtend
@@ -36,18 +36,36 @@
 		)
 	}
 	
+	override setBackgroundColor(Color backgroundColor) {
+		gc.fill = new javafx.scene.paint.Color(
+			backgroundColor.red as double / 255,
+			backgroundColor.green as double / 255,
+			backgroundColor.blue as double / 255,
+			backgroundColor.alpha as double / 255
+		)
+	}
+	
 	override getClipBounds() {
-		throw new UnsupportedOperationException("TODO: auto-generated method stub")
+		println("getClipBounds() not implemented")
+		new PixelRectangle(0, 0, 0, 0)
 	}
 	
 	override setClipBounds(PixelRectangle clipBounds) {
-		throw new UnsupportedOperationException("TODO: auto-generated method stub")
+		println("setClipBounds(clipBounds) not implemented")
 	}
 	
 	override drawLine(int x1, int y1, int x2, int y2) {
 		gc.strokeLine(x1, y1, x2, y2)
 	}
 	
+	override drawRectangle(PixelRectangle rect) {
+		gc.strokeRect(rect.x, rect.y, rect.width, rect.height)
+	}
+	
+	override fillRectangle(PixelRectangle rect) {
+		gc.fillRect(rect.x, rect.y, rect.width, rect.height)
+	}
+	
 	override drawText(String text, int x, int y) {
 		gc.strokeText(text, x, y)
 	}
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 351c042..6e301aa 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
@@ -63,6 +63,7 @@
 		for (property : originalState.keySet) {
 			switch (property) {
 				case FOREGROUND_COLOR: gc.foreground = originalState.get(property) as org.eclipse.swt.graphics.Color
+				case BACKGROUND_COLOR: gc.background = originalState.get(property) as org.eclipse.swt.graphics.Color
 				case CLIP_BOUNDS: gc.clipping = originalState.get(property) as Rectangle
 				case X_OFFSET: xOffset = originalState.get(property) as Integer
 				case Y_OFFSET: yOffset = originalState.get(property) as Integer
@@ -89,6 +90,16 @@
 		)
 	}
 	
+	override setBackgroundColor(Color backgroundColor) {
+		originalState.put(BACKGROUND_COLOR, gc.background)
+		gc.background = new org.eclipse.swt.graphics.Color(
+			gc.device,
+			backgroundColor.red,
+			backgroundColor.green,
+			backgroundColor.blue
+		)
+	}
+	
 	override getClipBounds() {
 		new PixelRectangle(gc.clipping.x - xOffset, gc.clipping.y - yOffset, gc.clipping.width, gc.clipping.height)
 	}
@@ -102,6 +113,14 @@
 		gc.drawLine(xOffset + x1, yOffset + y1, xOffset + x2, yOffset + y2)
 	}
 	
+	override drawRectangle(PixelRectangle rect) {
+		gc.drawRectangle(rect.x, rect.y, rect.width, rect.height)
+	}
+	
+	override fillRectangle(PixelRectangle rect) {
+		gc.fillRectangle(rect.x, rect.y, rect.width, rect.height)
+	}
+	
 	override drawText(String text, int x, int y) {
 		gc.drawText(text, xOffset + x, yOffset + y, SWT::DRAW_TRANSPARENT.bitwiseOr(SWT::DRAW_DELIMITER))
 		
