diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend
index e6434b8..ae3117e 100644
--- a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/big/BigLayerExample.xtend
@@ -20,8 +20,8 @@
 	
 	override createLayer() {
 		val bodyLayer = new ViewportLayer(new DummyLayer(
-			new AxisImpl(10 * 1000 * 1000, 200),  // Horizontal axis
-			new AxisImpl(10 * 1000 * 1000, 100)  // Vertical axis
+			new AxisImpl(1000 * 1000 * 1000 * 1000, 200),  // Horizontal axis
+			new AxisImpl(1000 * 1000 * 1000 * 1000, 100)  // Vertical axis
 		))
 
 		val columnHeaderLayer = new ColumnHeaderLayer(bodyLayer.horizontalAxis, new LayerDataAccessorImpl([ layer, columnId, rowId | columnId ]))
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend
index da5a372..ee4bb1b 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/AxisTest.xtend
@@ -19,19 +19,19 @@
 		assertEquals('''«axisName» getSegmentCount''', expectedIds.size, axis.segmentCount)
 		
 		// Start pixel of segment position
-		for (segmentPosition : 0 .. axis.segmentCount)
+		for (segmentPosition : 0 .. expectedIds.size)
 			assertEquals('''«axisName» getStartPixelOfSegmentPosition(«segmentPosition»)''', expectedPixels.get(segmentPosition), axis.getStartPixelOfSegmentPosition(segmentPosition), 0)
 		
 		// Segment position of pixel location
 		assertEquals('''«axisName» < range getSegmentPositionOfPixelLocation(«expectedPixels.get(0) - 1»)''', -1, axis.getSegmentPositionOfPixelLocation(expectedPixels.get(0) - 1))
-		for (segmentPosition : 0 ..< axis.segmentCount) {
+		for (segmentPosition : 0 ..< expectedIds.size) {
 			val pixelLocation = expectedPixels.get(segmentPosition)
 			assertEquals('''«axisName» getSegmentPositionOfPixelLocation(«pixelLocation»)''', segmentPosition, axis.getSegmentPositionOfPixelLocation(pixelLocation))
 		}
 		assertEquals('''«axisName» > range getSegmentPositionOfPixelLocation(«axis.pixelSize»)''', axis.segmentCount, axis.getSegmentPositionOfPixelLocation(axis.pixelSize))
 		
 		// Id of segment position
-		for (segmentPosition : 0 ..< axis.segmentCount)
+		for (segmentPosition : 0 ..< expectedIds.size)
 			assertEquals('''«axisName» getIdOfSegmentPosition(«segmentPosition»)''', expectedIds.get(segmentPosition), axis.getIdOfSegmentPosition(segmentPosition))
 
 		// Segment position of id
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend
index d679d10..cc7a427 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/ResizeAxisTest.xtend
@@ -18,7 +18,7 @@
 	def void baseline() {
 		testAxis(
 			axis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -29,7 +29,7 @@
 		
 		testAxis(
 			axis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 125.0, 225.0, 325.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend
index d2e8876..df16370 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/hideshow/HideShowAxisTest.xtend
@@ -7,7 +7,7 @@
 
 import static org.eclipse.nebula.widgets.nattable.core.layer.AxisTest.*
 
-class HideShowSegmentPositionAxisTest {
+class HideShowAxisTest {
 	
 	Axis underlyingAxis
 	HideShowAxis hideShowAxis
@@ -23,14 +23,14 @@
 		testAxis(
 			"underlyingAxis",
 			underlyingAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 		
 		testAxis(
 			"hideShowAxis",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -42,7 +42,7 @@
 		testAxis(
 			"hide",
 			hideShowAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -51,7 +51,7 @@
 		testAxis(
 			"show",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -63,7 +63,7 @@
 		testAxis(
 			"hide",
 			hideShowAxis,
-			#[ 0, 2, 3 ],
+			#[ 0L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -72,7 +72,7 @@
 		testAxis(
 			"show",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -84,7 +84,7 @@
 		testAxis(
 			"hide",
 			hideShowAxis,
-			#[ 0, 1, 2 ],
+			#[ 0L, 1L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -93,7 +93,7 @@
 		testAxis(
 			"show",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -105,7 +105,7 @@
 		testAxis(
 			"hide 3",
 			hideShowAxis,
-			#[ 0, 1, 2 ],
+			#[ 0L, 1L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -114,7 +114,7 @@
 		testAxis(
 			"hide 0",
 			hideShowAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ 0.0, 100.0, 200.0 ]
 		)
 		
@@ -123,7 +123,7 @@
 		testAxis(
 			"hide 1",
 			hideShowAxis,
-			#[ 2 ],
+			#[ 2L ],
 			#[ 0.0, 100.0 ]
 		)
 		
@@ -132,7 +132,7 @@
 		testAxis(
 			"show 1",
 			hideShowAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ 0.0, 100.0, 200.0 ]
 		)
 		
@@ -141,7 +141,7 @@
 		testAxis(
 			"show 3",
 			hideShowAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0 ]
 		)
 		
@@ -150,7 +150,7 @@
 		testAxis(
 			"show 0",
 			hideShowAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend
index 5327ac9..3d38b3e 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/reorder/ReorderAxisTest.xtend
@@ -23,14 +23,14 @@
 		testAxis(
 			"underlyingAxis",
 			underlyingAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 		
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -42,7 +42,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 1, 2, 0, 3 ],
+			#[ 1L, 2L, 0L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -54,7 +54,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 1, 2, 3, 0 ],
+			#[ 1L, 2L, 3L, 0L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -66,7 +66,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 2, 0, 1, 3 ],
+			#[ 2L, 0L, 1L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -78,7 +78,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 2, 1, 3 ],
+			#[ 0L, 2L, 1L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -90,7 +90,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 2, 1, 3 ],
+			#[ 0L, 2L, 1L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -102,7 +102,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 2, 3, 1 ],
+			#[ 0L, 2L, 3L, 1L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -114,7 +114,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 3, 0, 1, 2 ],
+			#[ 3L, 0L, 1L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -126,7 +126,7 @@
 		testAxis(
 			"reorderAxis",
 			reorderAxis,
-			#[ 0, 1, 3, 2 ],
+			#[ 0L, 1L, 3L, 2L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend
index 68bb301..aefb8c1 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayerTest.xtend
@@ -42,14 +42,14 @@
 		testAxis(
 			"bodyLayer.horizontalAxis",
 			bodyLayer.horizontalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 200.0, 400.0, 600.0, 800.0 ]
 		)
 		
 		testAxis(
 			"bodyLayer.verticalAxis",
 			bodyLayer.verticalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -59,14 +59,14 @@
 		testAxis(
 			"columnHeaderLayer.horizontalAxis",
 			columnHeaderLayer.horizontalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 200.0, 400.0, 600.0, 800.0 ]
 		)
 		
 		testAxis(
 			"columnHeaderLayer.verticalAxis",
 			columnHeaderLayer.verticalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 	}
@@ -76,14 +76,14 @@
 		testAxis(
 			"rowHeaderLayer.horizontalAxis",
 			rowHeaderLayer.horizontalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 		
 		testAxis(
 			"rowHeaderLayer.verticalAxis",
 			rowHeaderLayer.verticalAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 100.0, 200.0, 300.0, 400.0 ]
 		)
 	}
@@ -93,14 +93,14 @@
 		testAxis(
 			"cornerLayer.horizontalAxis",
 			cornerLayer.horizontalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 		
 		testAxis(
 			"cornerLayer.verticalAxis",
 			cornerLayer.verticalAxis,
-			#[ 0 ],
+			#[ 0L ],
 			#[ 0.0, 20.0 ]
 		)
 	}
@@ -110,14 +110,14 @@
 		testAxis(
 			"compositeLayer.horizontalAxis",
 			compositeLayer.horizontalAxis,
-			#[ 0, 0, 1, 2, 3 ],
+			#[ 0L, 0L, 1L, 2L, 3L ],
 			#[ 0.0, 20.0, 220.0, 420.0, 620.0, 820.0 ]
 		)
 		
 		testAxis(
 			"compositeLayer.verticalAxis",
 			compositeLayer.verticalAxis,
-			#[ 0, 0, 1, 2, 3 ],
+			#[ 0L, 0L, 1L, 2L, 3L ],
 			#[ 0.0, 20.0, 120.0, 220.0, 320.0, 420.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend
index 69b7b5a..1d98d17 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportAxisTest.xtend
@@ -31,7 +31,7 @@
 		testAxis(
 			"underlyingAxis",
 			underlyingAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 2.0, 5.0, 12.0, 25.0 ]
 		)
 		
@@ -40,7 +40,7 @@
 		testAxis(
 			"viewportAxis",
 			viewportAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ 0.0, 2.0, 5.0, 12.0, 25.0 ]
 		)
 	}
@@ -54,7 +54,7 @@
 		viewportAxis.visiblePixelRange = 5
 		testAxis(
 			viewportAxis,
-			#[ 0, 1 ],
+			#[ 0L, 1L ],
 			#[ 0.0, 2.0, 5.0 ]
 		)
 	}
@@ -69,7 +69,7 @@
 		viewportAxis.visiblePixelRange = 23
 		testAxis(
 			viewportAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ 0.0, 3.0, 10.0, 23.0 ]
 		)
 	}
@@ -84,7 +84,7 @@
 		viewportAxis.visiblePixelRange = 10
 		testAxis(
 			viewportAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ 0.0, 3.0, 10.0 ]
 		)
 	}
@@ -99,7 +99,7 @@
 		viewportAxis.visiblePixelRange = 8
 		testAxis(
 			viewportAxis,
-			#[ 0, 1, 2 ],
+			#[ 0L, 1L, 2L ],
 			#[ 0.0, 2.0, 5.0, 12.0 ]
 		)
 	}
@@ -114,7 +114,7 @@
 		viewportAxis.visiblePixelRange = 17
 		testAxis(
 			viewportAxis,
-			#[ 2, 3 ],
+			#[ 2L, 3L ],
 			#[ -3.0, 4.0, 17.0 ]
 		)
 	}
@@ -129,7 +129,7 @@
 		viewportAxis.visiblePixelRange = 10
 		testAxis(
 			viewportAxis,
-			#[ 3 ],
+			#[ 3L ],
 			#[ -5.0, 8.0 ]
 		)
 	}
@@ -144,7 +144,7 @@
 		viewportAxis.visiblePixelRange = 15
 		testAxis(
 			viewportAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ -2.0, 1.0, 8.0, 21.0 ]
 		)
 	}
@@ -160,7 +160,7 @@
 		testAxis(
 			"before expand",
 			viewportAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ -2.0, 1.0, 8.0 ]
 		)
 		
@@ -173,7 +173,7 @@
 		testAxis(
 			"after expand",
 			viewportAxis,
-			#[ 1, 2, 3 ],
+			#[ 1L, 2L, 3L ],
 			#[ -2.0, 1.0, 8.0, 21.0 ]
 		)
 	}
@@ -189,7 +189,7 @@
 		testAxis(
 			"before expand",
 			viewportAxis,
-			#[ 1, 2 ],
+			#[ 1L, 2L ],
 			#[ -2.0, 1.0, 8.0 ]
 		)
 		
@@ -202,7 +202,7 @@
 		testAxis(
 			"after expand",
 			viewportAxis,
-			#[ 0, 1, 2, 3 ],
+			#[ 0L, 1L, 2L, 3L ],
 			#[ -1.0, 1.0, 4.0, 11.0, 24.0 ]
 		)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend
index 78c872d..274cd01 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionCoordinate.xtend
@@ -5,6 +5,6 @@
  */
 @Data
 class PositionCoordinate {
-	int columnPosition
-	int rowPosition
+	long columnPosition
+	long rowPosition
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend
index 2833f1e..131f69b 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/geometry/PositionRectangle.xtend
@@ -5,10 +5,10 @@
  */
 class PositionRectangle {
 	val PositionCoordinate positionOrigin
-	val int positionWidth
-	val int positionHeight
+	val long positionWidth
+	val long positionHeight
 	
-	new(int columnPosition, int rowPosition, int positionWidth, int positionHeight) {
+	new(long columnPosition, long rowPosition, long positionWidth, long positionHeight) {
 		this.positionOrigin = new PositionCoordinate(columnPosition, rowPosition)
 		this.positionWidth = positionWidth
 		this.positionHeight = positionHeight
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
index f7e3569..7c334bf 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/Layer.xtend
@@ -24,6 +24,6 @@
 	/**
 	 * @return The Cell at the given column and row position in this layer.
 	 */
-	def Cell getCell(int columnPosition, int rowPosition)
+	def Cell getCell(long columnPosition, long rowPosition)
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
index ce743d2..9bbd584 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/LayerInvariants.xtend
@@ -16,15 +16,15 @@
 		layer.horizontalAxis.segmentCount
 	}
 	
-	def static getColumnIdOfPosition(Layer layer, int columnPosition) {
+	def static getColumnIdOfPosition(Layer layer, long columnPosition) {
 		layer.horizontalAxis.getIdOfSegmentPosition(columnPosition)
 	}
 	
-	def static getStartXPixelOfColumnPosition(Layer layer, int columnPosition) {
+	def static getStartXPixelOfColumnPosition(Layer layer, long columnPosition) {
 		layer.horizontalAxis.getStartPixelOfSegmentPosition(columnPosition)
 	}
 	
-	def static getPixelWidthOfColumn(Layer layer, int columnPosition) {
+	def static getPixelWidthOfColumn(Layer layer, long columnPosition) {
 		layer.horizontalAxis.getPixelSizeOfSegmentPosition(columnPosition)
 	}
 	
@@ -42,15 +42,15 @@
 		layer.verticalAxis.segmentCount
 	}
 	
-	def static getRowIdOfPosition(Layer layer, int rowPosition) {
+	def static getRowIdOfPosition(Layer layer, long rowPosition) {
 		layer.verticalAxis.getIdOfSegmentPosition(rowPosition)
 	}
 	
-	def static getStartYPixelOfRowPosition(Layer layer, int rowPosition) {
+	def static getStartYPixelOfRowPosition(Layer layer, long rowPosition) {
 		layer.verticalAxis.getStartPixelOfSegmentPosition(rowPosition)
 	}
 	
-	def static getPixelHeightOfRow(Layer layer, int rowPosition) {
+	def static getPixelHeightOfRow(Layer layer, long rowPosition) {
 		layer.verticalAxis.getPixelSizeOfSegmentPosition(rowPosition)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
index 604e878..1fb99dd 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/Axis.xtend
@@ -12,7 +12,7 @@
 	/**
 	 * @return The number of segments on this axis.
 	 */
-	def int getSegmentCount()
+	def long getSegmentCount()
 	
 	/**
 	 * Gets the start pixel location of the segment at the given position. This function must be defined for all valid segment position
@@ -23,7 +23,7 @@
 	 * @param segmentPosition
 	 * @return The start pixel location of the given segment position.
 	 */
-	def double getStartPixelOfSegmentPosition(int segmentPosition)
+	def double getStartPixelOfSegmentPosition(long segmentPosition)
 	
 	/**
 	 * Gets the position of the segment that is nearest to the the given pixel location.
@@ -33,18 +33,18 @@
 	 * If the given pixel location is less than 0, the segment position returned will be -1.
 	 * If the given pixel location is greater than the size of the axis, then the last segment position + 1 will be returned (= segment count).
 	 */
-	def int getSegmentPositionOfPixelLocation(double pixelLocation)
+	def long getSegmentPositionOfPixelLocation(double pixelLocation)
 
 	/**
 	 * @param segmentPosition
 	 * @return The identifier associated with the given segment position.
 	 */
-	def Serializable getIdOfSegmentPosition(int segmentPosition)
+	def Serializable getIdOfSegmentPosition(long segmentPosition)
 	
 	/**
 	 * @param segmentId
 	 * @return The position of the segment associated with the given segment identifier.
 	 */
-	def int getSegmentPositionOfId(Serializable segmentId)
+	def long getSegmentPositionOfId(Serializable segmentId)
 	
 }
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 1914ed2..1161979 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
@@ -9,7 +9,7 @@
 		axis.getStartPixelOfSegmentPosition(axis.segmentCount) - axis.getStartPixelOfSegmentPosition(0)
 	}
 	
-	def static getPixelSizeOfSegmentPosition(Axis axis, int segmentPosition) {
+	def static getPixelSizeOfSegmentPosition(Axis axis, long segmentPosition) {
 		axis.getStartPixelOfSegmentPosition(segmentPosition + 1) - axis.getStartPixelOfSegmentPosition(segmentPosition)
 	}
 	
@@ -17,7 +17,7 @@
 		pixelLocation >= 0 && pixelLocation < axis.getStartPixelOfSegmentPosition(axis.segmentCount)
 	}
 	
-	def static boolean containsSegmentPosition(Axis axis, int segmentPosition) {
+	def static boolean containsSegmentPosition(Axis axis, long segmentPosition) {
 		segmentPosition >= 0 && segmentPosition < axis.segmentCount
 	}
 
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 d461293..5175957 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
@@ -12,7 +12,7 @@
 	
 	int segmentCount
 	double defaultSegmentSize
-	val segmentSizeMap = new TreeMap<Integer, Double>  // segment Position -> pixel size
+	val segmentSizeMap = new TreeMap<Long, Double>  // segment Position -> pixel size
 	
 	new() {}
 	
@@ -35,7 +35,7 @@
 		segmentCount
 	}
 
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		if (segmentPosition < 0) return -1
 		else if (segmentPosition == 0) return 0
 		else if (segmentSizeMap.empty) return segmentPosition * defaultSegmentSize
@@ -43,7 +43,7 @@
 			var numResizedSegments = 0
 			var resizeAggregate = 0.0
 			
-			for (resizedSegmentPosition : segmentSizeMap.subMap(0, segmentPosition).keySet) {
+			for (resizedSegmentPosition : segmentSizeMap.subMap(0L, segmentPosition).keySet) {
 				numResizedSegments = numResizedSegments + 1
 				resizeAggregate = resizeAggregate + segmentSizeMap.get(resizedSegmentPosition)
 			}
@@ -56,14 +56,14 @@
 		if (pixelLocation < 0) return -1
 		else if (pixelLocation == 0) return 0
 		else if (pixelLocation >= pixelSize) return segmentCount
-		else if (segmentSizeMap.empty) return (pixelLocation / defaultSegmentSize) as int
+		else if (segmentSizeMap.empty) return (pixelLocation / defaultSegmentSize) as long
 		else return findSegmentPositionOfPixelLocation(pixelLocation, 0, pixelSize, 0, segmentCount)
 	}
 	
-	def private int findSegmentPositionOfPixelLocation(double pixelLocation, double fromPixel, double toPixel, int fromSegmentPosition, int toSegmentPosition) {
+	def private long findSegmentPositionOfPixelLocation(double pixelLocation, double fromPixel, double toPixel, long fromSegmentPosition, long toSegmentPosition) {
 		// guess segment position = pixelLocation / size of guess region
 		val guessSegmentSize = (toPixel - fromPixel) / (toSegmentPosition - fromSegmentPosition)
-		val guessSegmentPosition = fromSegmentPosition + ((pixelLocation - fromPixel) / guessSegmentSize) as int
+		val guessSegmentPosition = fromSegmentPosition + ((pixelLocation - fromPixel) / guessSegmentSize) as long
 		
 		// find start/end pixel of guessed segment position
 		val startPixel = getStartPixelOfSegmentPosition(guessSegmentPosition)
@@ -77,20 +77,20 @@
 			return guessSegmentPosition
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
+	override getIdOfSegmentPosition(long segmentPosition) {
 		segmentPosition
 	}
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
 		if (segmentId != null)
-			return segmentId as Integer
+			return segmentId as Long
 		else
 			return -1
 	}
 	
 	//
 
-	def void setPixelSizeOfSegmentPosition(double size, int segmentPosition) {
+	def void setPixelSizeOfSegmentPosition(double size, long segmentPosition) {
 		if (!containsSegmentPosition(segmentPosition)) throw new IllegalArgumentException('''segment position «segmentPosition» is not contained in this axis''')
 		if (size < 0) throw new IllegalArgumentException("size must be >= 0")
 		
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 785fb4b..9c3c395 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
@@ -16,8 +16,8 @@
  */
 class HideShowAxis extends AbstractAxis {
 	
-	val SortedMap<Integer, Serializable> hiddenSegmentPositionToIdMap = new TreeMap
-	val Map<Integer, Double> segmentPositionToStartPixelMap = newHashMap
+	val SortedMap<Long, Serializable> hiddenSegmentPositionToIdMap = new TreeMap
+	val Map<Long, Double> segmentPositionToStartPixelMap = newHashMap
 	
 	Axis underlyingAxis
 	
@@ -37,7 +37,7 @@
 		underlyingAxis.segmentCount - hiddenSegmentPositionToIdMap.size
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		val startPixel = segmentPositionToStartPixelMap.get(segmentPosition)
 		if (startPixel != null)
 			return startPixel
@@ -68,9 +68,9 @@
 	}
 	
 	// TODO Optimize. Cache?
-	override getIdOfSegmentPosition(int segmentPosition) {
-		var numHiddenSegments = 0
-		var fromPosition = 0
+	override getIdOfSegmentPosition(long segmentPosition) {
+		var numHiddenSegments = 0L
+		var fromPosition = 0L
 		var toPosition = segmentPosition
 		
 		while (toPosition < underlyingAxis.segmentCount) {
@@ -89,7 +89,7 @@
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
 		val underlyingSegmentPosition = underlyingAxis.getSegmentPositionOfId(segmentId)
-		underlyingSegmentPosition - hiddenSegmentPositionToIdMap.subMap(0, underlyingSegmentPosition).size
+		underlyingSegmentPosition - hiddenSegmentPositionToIdMap.subMap(0L, underlyingSegmentPosition).size
 	}
 	
 	//
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 a822adc..c66471e 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
@@ -16,7 +16,7 @@
 class ReorderAxis extends AbstractAxis {
 	
 	val List<Serializable> reorderedSegmentIds = newArrayList
-	val Map<Integer, Double> segmentPositionToStartPixelMap = newHashMap
+	val Map<Long, Double> segmentPositionToStartPixelMap = newHashMap
 	
 	Axis underlyingAxis
 	
@@ -39,7 +39,7 @@
 		underlyingAxis.segmentCount
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		val startPixel = segmentPositionToStartPixelMap.get(segmentPosition)
 		if (startPixel != null)
 			return startPixel
@@ -69,7 +69,7 @@
 		return segmentCount
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
+	override getIdOfSegmentPosition(long segmentPosition) {
 		reorderedSegmentIds.get(segmentPosition)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend
index 6ceb088..7696c0a 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/AbstractCell.xtend
@@ -12,11 +12,11 @@
 	val Layer layer
 	val PositionRectangle positionBounds
 	
-	new(Layer layer, int columnPosition, int rowPosition) {
+	new(Layer layer, long columnPosition, long rowPosition) {
 		this(layer, columnPosition, rowPosition, 1, 1)
 	}
 	
-	new(Layer layer, int columnPosition, int rowPosition, int columnSpan, int rowSpan) {
+	new(Layer layer, long columnPosition, long rowPosition, long columnSpan, long rowSpan) {
 		this.layer = layer
 		this.positionBounds = new PositionRectangle(columnPosition, rowPosition, columnSpan, rowSpan)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend
index c9d7112..4da5c34 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/LayerDataAccessorCell.xtend
@@ -12,7 +12,7 @@
 	
 	val LayerDataAccessor layerDataAccessor
 	
-	new(Layer layer, int columnPosition, int rowPosition, LayerDataAccessor layerDataAccessor) {
+	new(Layer layer, long columnPosition, long rowPosition, LayerDataAccessor layerDataAccessor) {
 		super(layer, columnPosition, rowPosition)
 		this.layerDataAccessor = layerDataAccessor
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend
index de34212..d869358 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/cell/impl/ReadOnlyCell.xtend
@@ -9,7 +9,7 @@
 	
 	val Object dataValue
 	
-	new(Layer layer, int columnPosition, int rowPosition, Object dataValue) {
+	new(Layer layer, long columnPosition, long rowPosition, Object dataValue) {
 		super(layer, columnPosition, rowPosition)
 		this.dataValue = dataValue
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
index bad09fe..90f9697 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/CellLayerPainter.xtend
@@ -26,24 +26,27 @@
 		
 		val fromColumnPosition = max(layer.getColumnPositionOfXPixel(clipBounds.x), 0)
 		val toColumnPosition = min(layer.getColumnPositionOfXPixel(clipBounds.x + clipBounds.width - 1), layer.columnCount - 1)
+		val columnRange = toColumnPosition - fromColumnPosition
+		
 		val fromRowPosition = max(layer.getRowPositionOfYPixel(clipBounds.y), 0)
 		val toRowPosition = min(layer.getRowPositionOfYPixel(clipBounds.y + clipBounds.height - 1), layer.rowCount - 1)
+		val rowRange = toRowPosition - fromRowPosition
 		
-		if (fromColumnPosition <= toColumnPosition)
-			for (columnPosition : fromColumnPosition .. toColumnPosition)
-				if (fromRowPosition <= toRowPosition)
-					for (rowPosition : fromRowPosition .. toRowPosition) {
-						val cell = layer.getCell(columnPosition, rowPosition)
-						
-						gc.pushState
-						
-						val cellPixelBounds = cell.adjustedPixelBounds
-						gc.clipBounds = cellPixelBounds.intersect(layerPixelBounds)
-						gc.translate(cellPixelBounds.x, cellPixelBounds.y)
-						cellPainter.paintCell(cell, new PixelArea(cellPixelBounds.width, cellPixelBounds.height), gc)
-						
-						gc.popState
-					}
+		if (columnRange >= 0 && columnRange <= Integer::MAX_VALUE && rowRange >= 0 && rowRange <= Integer::MAX_VALUE) {
+			for (columnOffset : 0 .. columnRange as int)
+				for (rowOffset : 0 .. rowRange as int) {
+					val cell = layer.getCell(fromColumnPosition + columnOffset, fromRowPosition + rowOffset)
+					
+					gc.pushState
+					
+					val cellPixelBounds = cell.adjustedPixelBounds
+					gc.clipBounds = cellPixelBounds.intersect(layerPixelBounds)
+					gc.translate(cellPixelBounds.x, cellPixelBounds.y)
+					cellPainter.paintCell(cell, new PixelArea(cellPixelBounds.width, cellPixelBounds.height), gc)
+					
+					gc.popState
+				}
+		}
 	}
 	
 	//
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
index 7cccb08..db5918c 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DimensionallyDependentLayer.xtend
@@ -35,7 +35,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
index 8314bb2..25856eb 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/DummyLayer.xtend
@@ -33,7 +33,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		val columnId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
 		val rowId = verticalAxis.getIdOfSegmentPosition(rowPosition)
 		new ReadOnlyCell(this, columnPosition, rowPosition, '''Column «columnId», Row «rowId»''')
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
index 784fb9a..7c6870f 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/GridLineCellLayerPainter.xtend
@@ -52,9 +52,10 @@
 		// Draw horizontal grid lines
 		val fromRowPosition = max(layer.getRowPositionOfYPixel(clipBounds.y) + 1, 1)
 		val toRowPosition = min(layer.getRowPositionOfYPixel(clipBounds.y + clipBounds.height), layer.rowCount)
-		if (fromRowPosition <= toRowPosition)
-			for (rowPosition : fromRowPosition .. toRowPosition) {
-				val y = layer.getStartYPixelOfRowPosition(rowPosition) - 1
+		val rowRange = toRowPosition - fromRowPosition
+		if (rowRange >= 0 && rowRange <= Integer::MAX_VALUE)
+			for (rowOffset : 0 .. rowRange as int) {
+				val y = layer.getStartYPixelOfRowPosition(fromRowPosition + rowOffset) - 1
 				gc.drawLine(
 					0,          y,
 					pixelWidth, y
@@ -64,9 +65,10 @@
 		// Draw vertical grid lines
 		val fromColumnPosition = max(layer.getColumnPositionOfXPixel(clipBounds.x) + 1, 1)
 		val toColumnPosition = min(layer.getColumnPositionOfXPixel(clipBounds.x + clipBounds.width), layer.columnCount)
-		if (fromColumnPosition <= toColumnPosition)
-			for (columnPosition : fromColumnPosition .. toColumnPosition) {
-				val x = layer.getStartXPixelOfColumnPosition(columnPosition) - 1
+		val columnRange = toColumnPosition - fromColumnPosition
+		if (columnRange >= 0 && columnRange <= Integer::MAX_VALUE)
+			for (columnOffset : 0 .. columnRange as int) {
+				val x = layer.getStartXPixelOfColumnPosition(fromColumnPosition + columnOffset) - 1
 				gc.drawLine(
 					x, 0,
 					x, pixelHeight
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
index 6bd5968..2d86b7d 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/ListRowDataLayer.xtend
@@ -45,12 +45,14 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
-		val rowObject = list.get(rowPosition)
-		val propertyId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
-		val value = rowObject.getPropertyValue(propertyId)
-		
-		new ReadOnlyCell(this, columnPosition, rowPosition, value)
+	override getCell(long columnPosition, long rowPosition) {
+		if (rowPosition <= Integer::MAX_VALUE) {
+			val rowObject = list.get(rowPosition as int)
+			val propertyId = horizontalAxis.getIdOfSegmentPosition(columnPosition)
+			val value = rowObject.getPropertyValue(propertyId)
+			
+			new ReadOnlyCell(this, columnPosition, rowPosition, value)
+		}
 	}
 	
 }
\ No newline at end of file
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 8f812bb..b5a761f 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
@@ -27,11 +27,11 @@
 	// Axis interface
 	
 	override getSegmentCount() {
-		subLayers.fold(0, [ acc, layer | acc + layer.axis.segmentCount ])
+		subLayers.fold(0L, [ acc, layer | acc + layer.axis.segmentCount ])
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
-		var segmentOffset = 0
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
+		var segmentOffset = 0L
 		var pixelOffset = 0.0
 		
 		for (subLayer : subLayers) {
@@ -52,7 +52,7 @@
 		if (pixelLocation < 0) return -1
 		if (pixelLocation >= pixelSize) return segmentCount
 		
-		var segmentOffset = 0
+		var segmentOffset = 0L
 		var pixelOffset = 0.0
 		
 		for (subLayer : subLayers) {
@@ -69,8 +69,8 @@
 		segmentOffset
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
-		var segmentOffset = 0
+	override getIdOfSegmentPosition(long segmentPosition) {
+		var segmentOffset = 0L
 		
 		for (subLayer : subLayers) {
 			val subAxis = subLayer.axis
@@ -86,7 +86,7 @@
 	}
 	
 	override getSegmentPositionOfId(Serializable segmentId) {
-		var segmentOffset = 0
+		var segmentOffset = 0L
 		
 		for (subLayer : subLayers) {
 			val subAxis = subLayer.axis
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend
index 717834f..c43878e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeCell.xtend
@@ -7,10 +7,10 @@
 	
 	val CompositeLayer compositeLayer
 	val Cell subLayerCell
-	val int columnPositionOffset
-	val int rowPositionOffset
+	val long columnPositionOffset
+	val long rowPositionOffset
 	
-	new(CompositeLayer compositeLayer, Cell subLayerCell, int columnPositionOffset, int rowPositionOffset) {
+	new(CompositeLayer compositeLayer, Cell subLayerCell, long columnPositionOffset, long rowPositionOffset) {
 		this.compositeLayer = compositeLayer
 		this.subLayerCell = subLayerCell
 		this.columnPositionOffset = columnPositionOffset
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
index 828a356..9ddcc0e 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayer.xtend
@@ -46,7 +46,7 @@
 	override CompositeAxis getHorizontalAxis() { horizontalAxis }
 	override CompositeAxis getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		val xLayoutInfo = horizontalAxis.getSubLayerLayoutPositionInfo(columnPosition)
 		val yLayoutInfo = verticalAxis.getSubLayerLayoutPositionInfo(rowPosition)
 		
@@ -64,11 +64,11 @@
 	
 	//
 	
-	def private CompositeLayoutInfo getSubLayerLayoutPositionInfo(CompositeAxis compositeAxis, int segmentPosition) {
+	def private CompositeLayoutInfo getSubLayerLayoutPositionInfo(CompositeAxis compositeAxis, long segmentPosition) {
 		val subLayers = compositeAxis.subLayers
 		val axisAccessor = compositeAxis.axisAccessor
 		
-		var segmentOffset = 0
+		var segmentOffset = 0L
 		
 		for (layoutPosition : 0 ..< subLayers.size) {
 			val axis = axisAccessor.getAxis(subLayers.get(layoutPosition))
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend
index 61ee7a2..4d895a6 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/composite/CompositeLayoutInfo.xtend
@@ -4,6 +4,6 @@
 class CompositeLayoutInfo {
 	
 	int layoutPosition
-	int segmentOffset
+	long segmentOffset
 	
 }
\ No newline at end of file
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
index 08987dc..f6fbc43 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/ColumnHeaderLayer.xtend
@@ -39,7 +39,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
index 39b3077..b12fdbc 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/header/RowHeaderLayer.xtend
@@ -39,7 +39,7 @@
 	override getHorizontalAxis() { horizontalAxis }
 	override getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new LayerDataAccessorCell(this, columnPosition, rowPosition, layerDataAccessor)
 	}
 	
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 944e3b0..acc7e26 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
@@ -42,7 +42,7 @@
 		viewportAxisListener?.viewportAxisChanged
 	}
 	
-	def int getOriginSegmentPosition() {
+	def long getOriginSegmentPosition() {
 		underlyingAxis.getSegmentPositionOfPixelLocation(pixelOrigin)
 	}
 	
@@ -62,7 +62,7 @@
 		(endSegmentPosition + if (isEndPixelInsideEndSegment) 1 else 0) - originSegmentPosition
 	}
 	
-	override getStartPixelOfSegmentPosition(int segmentPosition) {
+	override getStartPixelOfSegmentPosition(long segmentPosition) {
 		underlyingAxis.getStartPixelOfSegmentPosition(originSegmentPosition + segmentPosition) - pixelOrigin
 	}
 	
@@ -73,7 +73,7 @@
 		underlyingAxis.getSegmentPositionOfPixelLocation(underlyingPixelLocation) - originSegmentPosition
 	}
 	
-	override getIdOfSegmentPosition(int segmentPosition) {
+	override getIdOfSegmentPosition(long segmentPosition) {
 		underlyingAxis.getIdOfSegmentPosition(originSegmentPosition + segmentPosition)
 	}
 	
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend
index ecaa30a..f936ebd 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportCell.xtend
@@ -6,10 +6,10 @@
 class ViewportCell implements Cell {
 	
 	val ViewportLayer viewportLayer
-	val int columnPosition
-	val int rowPosition
+	val long columnPosition
+	val long rowPosition
 	
-	new(ViewportLayer viewportLayer, int columnPosition, int rowPosition) {
+	new(ViewportLayer viewportLayer, long columnPosition, long rowPosition) {
 		this.viewportLayer = viewportLayer
 		this.columnPosition = columnPosition
 		this.rowPosition = rowPosition
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
index 05cc194..575648f 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/impl/viewport/ViewportLayer.xtend
@@ -36,7 +36,7 @@
 	override ViewportAxis getHorizontalAxis() { horizontalAxis }
 	override ViewportAxis getVerticalAxis() { verticalAxis }
 	
-	override getCell(int columnPosition, int rowPosition) {
+	override getCell(long columnPosition, long rowPosition) {
 		new ViewportCell(this, columnPosition, rowPosition)
 	}
 	
