diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/SmallLayerExample.xtend b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/SmallLayerExample.xtend
new file mode 100644
index 0000000..ce76964
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/SmallLayerExample.xtend
@@ -0,0 +1,37 @@
+package org.eclipse.nebula.widgets.nattable.core.example.impl
+
+import org.eclipse.nebula.widgets.nattable.core.example.impl.AbstractNatExample
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AxisImpl
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.DimensionallyDependentLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.DummyLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.LayerDataAccessorImpl
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.composite.CompositeLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.header.ColumnHeaderLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.header.RowHeaderLayer
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportLayer
+
+class SmallLayerExample extends AbstractNatExample {
+	
+	override getDescription() {
+		'''
+		A little grid with 4 columns and 4 rows
+		'''
+	}
+	
+	override createLayer() {
+		val bodyLayer = new ViewportLayer(new DummyLayer(
+			new AxisImpl(4, 200),  // Horizontal axis
+			new AxisImpl(4, 100)  // Vertical axis
+		))
+
+		val columnHeaderLayer = new ColumnHeaderLayer(bodyLayer.horizontalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | columnId ]))
+		val rowHeaderLayer = new RowHeaderLayer(bodyLayer.verticalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | rowId ]))
+		val cornerLayer = new DimensionallyDependentLayer(rowHeaderLayer.horizontalAxis, columnHeaderLayer.verticalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | "" ]))
+		
+		new CompositeLayer => [
+			addRow(cornerLayer, columnHeaderLayer)
+			addRow(rowHeaderLayer, bodyLayer)
+		]
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties
index b844217..8b0c496 100644
--- a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/index.properties
@@ -1,2 +1,3 @@
 GridLayer=org.eclipse.nebula.widgets.nattable.core.example.impl.GridLayer
 big=|Huge examples
+SmallLayerExample=org.eclipse.nebula.widgets.nattable.core.example.impl.SmallLayerExample
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
index 2ab40b5..681ed54 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/AxisInvariants.xtend
@@ -2,8 +2,6 @@
 
 import java.math.BigDecimal
 
-import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*
-
 /**
  * A set of useful utility functions that calculate invariants that must hold for any Axis.
  */
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
index b2754e5..a3c9932 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AxisImpl.xtend
@@ -5,7 +5,6 @@
 import java.util.TreeMap
 
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*
 
 /**
  * A simple Axis implementation.
@@ -89,7 +88,7 @@
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
 		if (segmentId != null)
-			return segmentId as Long
+			return (segmentId as Number).longValue
 		else
 			return -1
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
index 1b32633..0e09607 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxis.xtend
@@ -8,7 +8,6 @@
 import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
 
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*
 
 /**
  * An axis that allows segments to be hidden and later shown again.
@@ -43,7 +42,7 @@
 		if (startPixel != null)
 			return startPixel
 		else {
-			var aggregateSize = new BigDecimal(0.0)
+			var aggregateSize = BigDecimal::ZERO
 			
 			for (position : 0 ..< segmentPosition) {
 				val segmentId = getIdOfSegmentPosition(position)
@@ -57,7 +56,7 @@
 	}
 	
 	override getSegmentPositionOfPixelLocation(BigDecimal pixelLocation) {
-		if (pixelLocation < new BigDecimal(0)) return -1
+		if (pixelLocation < BigDecimal::ZERO) return -1
 		
 		for (segmentPosition : 0 .. segmentCount) {
 			val startPixel = getStartPixelOfSegmentPosition(segmentPosition)
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
index 03530d7..af95d0b 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxis.xtend
@@ -8,7 +8,6 @@
 import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
 
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*
 
 /**
  * An axis that allows reordering of its segments.
@@ -52,7 +51,7 @@
 		if (startPixel != null)
 			return startPixel
 		else {
-			var aggregateSize = new BigDecimal(0.0)
+			var aggregateSize = BigDecimal::ZERO
 			
 			var position = 0L
 			while (position < segmentPosition) {
@@ -69,7 +68,7 @@
 	}
 	
 	override getSegmentPositionOfPixelLocation(BigDecimal pixelLocation) {
-		if (pixelLocation < new BigDecimal(0)) return -1
+		if (pixelLocation < BigDecimal::ZERO) return -1
 		
 		var segmentPosition = 0L
 		while (segmentPosition <= segmentCount) {
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend
index baac7cd..e52428f 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/TextCellPainter.xtend
@@ -8,7 +8,11 @@
 class TextCellPainter implements CellPainter {
 	
 	override paintCell(Cell cell, PixelArea cellPaintArea, GraphicsContext gc) {
-		val text = cell.dataValue.toString
+		val text =
+			if (cell.dataValue != null)
+				cell.dataValue.toString
+			else
+				""
 		
 		val centerX = cellPaintArea.width.doubleValue / 2
 		val centerY = cellPaintArea.height.doubleValue / 2
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
index 1381f0c..f922df8 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeAxis.xtend
@@ -5,7 +5,6 @@
 import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
 
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*
 
 /**
  * Represents the axis of a CompositeLayer, which is composed of an amalgamation of the axes of the CompsiteLayer's sublayers.
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
index 96fe6ea..5badd5c 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxis.xtend
@@ -6,7 +6,6 @@
 import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AbstractAxis
 
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
-import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*
 
 class ViewportAxis extends AbstractAxis {
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/math/BigDecimalExtensions.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/math/BigDecimalExtensions.xtend
deleted file mode 100644
index 999c55c..0000000
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/math/BigDecimalExtensions.xtend
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.eclipse.nebula.widgets.nattable.core.math
-
-import java.math.BigDecimal
-
-class BigDecimalExtensions {
-	
-	def static operator_lessThan(BigDecimal a, BigDecimal b) {
-		a.compareTo(b) < 0
-	}
-	
-	def static operator_lessEqualsThan(BigDecimal a, BigDecimal b) {
-		a.compareTo(b) <= 0
-	}
-	
-	def static operator_equals(BigDecimal a, BigDecimal b) {
-		a.compareTo(b) == 0
-	}
-	
-	def static operator_greaterThan(BigDecimal a, BigDecimal b) {
-		a.compareTo(b) > 0
-	}
-	
-	def static operator_greaterEqualsThan(BigDecimal a, BigDecimal b) {
-		a.compareTo(b) >= 0
-	}
-	
-}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.classpath b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.classpath
new file mode 100644
index 0000000..9938e7c
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.project b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.project
new file mode 100644
index 0000000..5d2c470
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.nebula.widgets.nattable.renderer.swt.test</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.settings/org.eclipse.core.resources.prefs b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f42de36
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/META-INF/MANIFEST.MF b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2b17a3f
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: NatTable SWT Renderer Test
+Bundle-SymbolicName: org.eclipse.nebula.widgets.nattable.renderer.swt.test
+Bundle-Version: 2.0.0.qualifier
+Fragment-Host: org.eclipse.nebula.widgets.nattable.renderer.swt;bundle-version="2.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Require-Bundle: org.junit;bundle-version="4.10.0",
+ org.mockito.mockito-core;bundle-version="1.9.5",
+ com.springsource.org.objenesis;bundle-version="1.0.0"
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/build.properties b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/build.properties
new file mode 100644
index 0000000..d8e2f0e
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/build.properties
@@ -0,0 +1,5 @@
+source.. = src/,\
+           xtend-gen/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/AbstractScrollBarHandlerTest.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/AbstractScrollBarHandlerTest.xtend
new file mode 100644
index 0000000..4b79de3
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/AbstractScrollBarHandlerTest.xtend
@@ -0,0 +1,48 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
+
+import java.math.BigDecimal
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
+import org.eclipse.nebula.widgets.nattable.core.layer.axis.impl.AxisImpl
+import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
+import org.eclipse.swt.widgets.ScrollBar
+import org.junit.Before
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+
+abstract class AbstractScrollBarHandlerTest {
+
+	Axis underlyingAxis
+	protected ScrollBar scrollBar
+	protected ViewportAxis viewportAxis
+	protected ScrollBarHandler scrollBarHandler
+	
+	new(long segmentCount, double defaultSegmentSize) {
+		this(segmentCount, new BigDecimal(defaultSegmentSize))
+	}
+	
+	new(long segmentCount, BigDecimal defaultSegmentSize) {
+		underlyingAxis = new AxisImpl(segmentCount, defaultSegmentSize)
+	}
+	
+	@Before
+	def void before() {
+		scrollBar = mock(typeof(ScrollBar))
+		when(scrollBar.thumb).thenReturn(10)
+		when(scrollBar.increment).thenReturn(1)
+		when(scrollBar.pageIncrement).thenReturn(10)
+		
+		viewportAxis = new ViewportAxis(underlyingAxis, null)
+		viewportAxis.visiblePixelSize = 500
+		
+		scrollBarHandler = new ScrollBarHandler(scrollBar, viewportAxis)
+		
+		assertEquals(BigDecimal::TEN, scrollBarHandler.minThumbSize)
+		assertEquals(1, scrollBarHandler.minIncrement)
+		assertEquals(10, scrollBarHandler.minPageIncrement)
+		
+		// ScrollBarHandler constructor makes calls on scrollBar. Reset scrollBar here so they do not interfere with test expectations.
+		reset(scrollBar)
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend
new file mode 100644
index 0000000..90a438e
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeLargerThanIntTest.xtend
@@ -0,0 +1,72 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
+
+import java.math.BigDecimal
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.runners.MockitoJUnitRunner
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+
+import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
+
+@RunWith(typeof(MockitoJUnitRunner))
+class ScrollBarHandlerRangeLargerThanIntTest extends AbstractScrollBarHandlerTest {
+
+	val static MILLION = 1000L * 1000
+	val static BILLION = 1000L * MILLION
+	val static TRILLION = 1000L * BILLION
+	val static QUADRILLION = 1000L * TRILLION
+	
+	//
+	
+	new() {
+		super(1 * QUADRILLION, 200)
+	}
+	
+	@Test
+	def void viewportAtBeginning() {
+		scrollBarHandler.recalculateScrollBarSize
+
+		verify(scrollBar).maximum = Integer::MAX_VALUE
+		verify(scrollBar).thumb = 10
+		verify(scrollBar).increment = 1
+		verify(scrollBar).pageIncrement = 10
+		verify(scrollBar).selection = 0
+	}
+	
+	@Test
+	def void viewportAtEnd() {
+		viewportAxis.pixelOrigin = new BigDecimal(200 * QUADRILLION - 1)
+		scrollBarHandler.recalculateScrollBarSize
+
+		verify(scrollBar).maximum = Integer::MAX_VALUE
+		verify(scrollBar).thumb = 10
+		verify(scrollBar).increment = 1
+		verify(scrollBar).pageIncrement = 10
+		verify(scrollBar).selection = Integer::MAX_VALUE - 10
+	}
+	
+	@Test
+	def void moveViewportABit() {
+		when(scrollBar.selection).thenReturn(1)
+		scrollBarHandler.updateViewportOrigin
+		
+		assertEquals(new BigDecimal((1.0 / Integer::MAX_VALUE) * (200 * QUADRILLION)), viewportAxis.pixelOrigin)
+	}
+	
+	@Test
+	def void moveViewportToEnd() {
+		when(scrollBar.selection).thenReturn(Integer::MAX_VALUE - 10)
+		scrollBarHandler.updateViewportOrigin
+		
+		assertTrue('''viewport origin «viewportAxis.pixelOrigin» + visible pixel size «viewportAxis.visiblePixelSize» should be >= underlying axis pixel size «viewportAxis.underlyingAxis.pixelSize»''', viewportAxis.pixelOrigin + viewportAxis.visiblePixelSize >= new BigDecimal(200 * QUADRILLION))
+		
+		verify(scrollBar).maximum = Integer::MAX_VALUE
+		verify(scrollBar).thumb = 10
+		verify(scrollBar).increment = 1
+		verify(scrollBar).pageIncrement = 10
+		verify(scrollBar).selection = Integer::MAX_VALUE - 10
+	}
+	
+}
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend
new file mode 100644
index 0000000..9231b7e
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt.test/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandlerRangeSmallerThanIntTest.xtend
@@ -0,0 +1,65 @@
+package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
+
+import java.math.BigDecimal
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.runners.MockitoJUnitRunner
+
+import static org.junit.Assert.*
+import static org.mockito.Mockito.*
+
+import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
+
+@RunWith(typeof(MockitoJUnitRunner))
+class ScrollBarHandlerRangeSmallerThanIntTest extends AbstractScrollBarHandlerTest {
+
+	new() {
+		super(10, 200)
+	}
+	
+	@Test
+	def void viewportAtBeginning() {
+		scrollBarHandler.recalculateScrollBarSize
+		
+		verify(scrollBar).maximum = 2000  // axis pixel size
+		verify(scrollBar).thumb = 500  // visible pixel size
+		verify(scrollBar).increment = 125  // 1/4 of visible pixel size
+		verify(scrollBar).pageIncrement = 500
+		verify(scrollBar).selection = 0
+	}
+	
+	@Test
+	def void viewportAtEnd() {
+		viewportAxis.pixelOrigin = 1999
+		scrollBarHandler.recalculateScrollBarSize
+		
+		verify(scrollBar).maximum = 2000  // axis pixel size
+		verify(scrollBar).thumb = 500  // visible pixel size
+		verify(scrollBar).increment = 125  // 1/4 of visible pixel size
+		verify(scrollBar).pageIncrement = 500
+		verify(scrollBar).selection = 1999
+	}
+	
+	@Test
+	def void moveViewportABit() {
+		when(scrollBar.selection).thenReturn(1)
+		scrollBarHandler.updateViewportOrigin
+		
+		assertEquals(BigDecimal::ONE, viewportAxis.pixelOrigin)
+	}
+	
+	@Test
+	def void moveViewportToEnd() {
+		when(scrollBar.selection).thenReturn(1990)
+		scrollBarHandler.updateViewportOrigin
+		
+		assertTrue('''viewport origin «viewportAxis.pixelOrigin» + visible pixel size «viewportAxis.visiblePixelSize» should be >= underlying axis pixel size «viewportAxis.underlyingAxis.pixelSize»''', viewportAxis.pixelOrigin + viewportAxis.visiblePixelSize >= new BigDecimal(2000))
+		
+		verify(scrollBar).maximum = 2000
+		verify(scrollBar).thumb = 500
+		verify(scrollBar).increment = 125
+		verify(scrollBar).pageIncrement = 500
+		verify(scrollBar).selection = 1990
+	}
+	
+}
\ No newline at end of file
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 89e5164..a54c39c 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
@@ -48,16 +48,17 @@
 			// Resize listener
 			
 			viewportCanvas.addListener(SWT::Resize, [ event |
+				println("resize!")
 				// Horizontal
 				viewportLayer.horizontalAxis.handleResize
+				horizontalScrollBarHandler.recalculateScrollBarSize
 				// Vertical
 				viewportLayer.verticalAxis.handleResize
+				verticalScrollBarHandler.recalculateScrollBarSize
 			])
 			
 			resizeViewportCanvas(swtGC)
 			
-			horizontalScrollBarHandler.recalculateScrollBarSize
-			verticalScrollBarHandler.recalculateScrollBarSize
 		} else
 			resizeViewportCanvas(swtGC)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
index d34bc79..f2ab635 100644
--- a/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
+++ b/org.eclipse.nebula.widgets.nattable.renderer.swt/src/org/eclipse/nebula/widgets/nattable/renderer/swt/layer/viewport/ScrollBarHandler.xtend
@@ -1,28 +1,26 @@
 package org.eclipse.nebula.widgets.nattable.renderer.swt.layer.viewport
 
 import java.math.BigDecimal
-import java.math.MathContext
-import java.math.RoundingMode
 import org.eclipse.nebula.widgets.nattable.core.layer.impl.viewport.ViewportAxis
 import org.eclipse.swt.widgets.Event
 import org.eclipse.swt.widgets.Listener
 import org.eclipse.swt.widgets.ScrollBar
 
+import static extension java.lang.Math.*
 import static extension org.eclipse.nebula.widgets.nattable.core.layer.axis.AxisInvariants.*
 
 class ScrollBarHandler implements Listener {
 	
-	val static MAX_SCROLL_SIZE = new BigDecimal(Integer::MAX_VALUE)
+	val static MAXINT = new BigDecimal(Integer::MAX_VALUE)
 	
 	//
 	
 	val ScrollBar scrollBar
 	val ViewportAxis viewportAxis
 	
-	val BigDecimal minThumb
+	val BigDecimal minThumbSize
 	val int minIncrement
 	val int minPageIncrement
-	val BigDecimal maxScrollSelection
 
 	new(ScrollBar scrollBar, ViewportAxis viewportAxis) {
 		this.scrollBar = scrollBar
@@ -32,45 +30,75 @@
 		scrollBar.increment = 0
 		scrollBar.pageIncrement = 0
 		
-		minThumb = new BigDecimal(scrollBar.thumb)
-		minIncrement = scrollBar.increment
-		minPageIncrement = scrollBar.pageIncrement
-		maxScrollSelection = MAX_SCROLL_SIZE - minThumb
+		minThumbSize = new BigDecimal(1.max(scrollBar.thumb))
+		minIncrement = 1.max(scrollBar.increment)
+		minPageIncrement = 1.max(scrollBar.pageIncrement)
 	}
+	
+	def getMinThumbSize() { minThumbSize }
+	def getMinIncrement() { minIncrement }
+	def getMinPageIncrement() { minPageIncrement }
 
 	override handleEvent(Event event) {
-		val maxPixelOrigin = viewportAxis.underlyingAxis.pixelSize - viewportAxis.visiblePixelSize
-		val maxPixelSize = maxPixelOrigin * (MAX_SCROLL_SIZE / maxScrollSelection)
-		val intToPixel = BigDecimal::ONE.max(maxPixelSize.divide(MAX_SCROLL_SIZE, new MathContext(maxPixelSize.precision, RoundingMode::CEILING)))
-		viewportAxis.pixelOrigin = new BigDecimal(scrollBar.selection) * intToPixel
-		recalculateScrollBarSize
+		updateViewportOrigin
 	}
-
+	
+	def void updateViewportOrigin() {
+		recalculateScrollBarSize(true)
+	}
+	
 	def void recalculateScrollBarSize() {
+		recalculateScrollBarSize(false)
+	}
+	
+	/**
+	 * Recalculate scrollbar values from viewport axis values. Optionally update the viewport origin from the scrollbar selection first.
+	 * @param updateViewportOrigin Indicates whether or not to update the viewport origin.
+	 */
+	def private void recalculateScrollBarSize(boolean updateViewportOrigin) {
 		val visiblePixelSize = viewportAxis.visiblePixelSize
-		val maxPixelOrigin = viewportAxis.underlyingAxis.pixelSize - visiblePixelSize
+		val maxPixelSize = viewportAxis.underlyingAxis.pixelSize
+		val maxScrollSize = maxPixelSize.min(MAXINT)
+		val thumbSize = minThumbSize.max((visiblePixelSize / maxPixelSize) * maxScrollSize)
 		
-		val maxPixelSize = maxPixelOrigin * (MAX_SCROLL_SIZE / maxScrollSelection)
-		val pixelToInt = BigDecimal::ONE.min(MAX_SCROLL_SIZE.divide(maxPixelSize, new MathContext(maxPixelSize.precision, RoundingMode::CEILING)))
+		val intPerPixelRatio = 
+			if (thumbSize / maxScrollSize < visiblePixelSize / maxPixelSize)
+				thumbSize / visiblePixelSize
+			else
+				if (maxScrollSize + thumbSize < MAXINT)
+					maxScrollSize / maxPixelSize
+				else
+					(maxScrollSize - thumbSize) / (maxPixelSize - visiblePixelSize)
 		
-		scrollBar.maximum = (maxPixelSize * pixelToInt).intValue
-		scrollBar.selection = (viewportAxis.pixelOrigin * pixelToInt).intValue
+		if (updateViewportOrigin) {
+			println(scrollBar.selection)
+			viewportAxis.pixelOrigin = new BigDecimal(scrollBar.selection) / intPerPixelRatio
+		}
 		
-		if (visiblePixelSize < maxPixelSize && visiblePixelSize != 0) {
-			scrollBar.thumb = minThumb.max(visiblePixelSize * pixelToInt).intValue
+		val viewportOrigin = viewportAxis.pixelOrigin
+		
+		if (visiblePixelSize > BigDecimal::ZERO && viewportOrigin < maxPixelSize) {
+			scrollBar.maximum = maxScrollSize.intValue
+			scrollBar.thumb = thumbSize.intValue
+			scrollBar.pageIncrement = Math::max(minPageIncrement, thumbSize.intValue)
+			
 			// Increment by size of segment 0 or 1/4 of visible pixel size, whichever is smaller
-			val increment = viewportAxis.getPixelSizeOfSegmentPosition(0).min(viewportAxis.visiblePixelSize / new BigDecimal(4))
-			scrollBar.increment = Math::max(minIncrement, increment.intValue)
-			scrollBar.pageIncrement = Math::max(minPageIncrement, scrollBar.thumb)
+			val pixelIncrement = viewportAxis.getPixelSizeOfSegmentPosition(0).min(visiblePixelSize / new BigDecimal(4))
+			scrollBar.increment = minIncrement.max((pixelIncrement * intPerPixelRatio).intValue)
+			
+			scrollBar.selection = (viewportOrigin * intPerPixelRatio).intValue
+			println('''«scrollBar.selection» = («viewportOrigin» * «intPerPixelRatio»).intValue''')
 			
 			scrollBar.enabled = true
 			scrollBar.visible = true
 		} else {
-			scrollBar.thumb = scrollBar.maximum
-			
 			scrollBar.enabled = false
 			scrollBar.visible = false
 		}
 	}
 	
+//	def operator_divide(BigDecimal a, BigDecimal b) {
+//		a.divide(b, new MathContext(a.precision.max(b.precision), RoundingMode::CEILING))
+//	}
+	
 }
\ No newline at end of file
