diff --git a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend
index e680db1..34df83a 100644
--- a/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core.example/src/org/eclipse/nebula/widgets/nattable/core/example/impl/MultiViewportExample.xtend
@@ -14,14 +14,20 @@
 	override createLayer() {
 		val bodyLayer = new CompositeLayer => [
 			addRow(
-				new ViewportLayer(new DummyLayer(
-					new AxisImpl(4, 150),  // Horizontal axis
-					new AxisImpl(10, 100)  // Vertical axis
-				)),
-				new ViewportLayer(new DummyLayer(
-					new AxisImpl(10, 150),  // Horizontal axis
-					new AxisImpl(10, 100)  // Vertical axis
-				))
+				new ViewportLayer => [
+					underlyingLayer = new DummyLayer(
+						new AxisImpl(4, 150),  // Horizontal axis
+						new AxisImpl(10, 100)  // Vertical axis
+					)
+					horizontalAxis.minPixelOrigin = 0
+					horizontalAxis.maxPixelSize = 150
+				],
+				new ViewportLayer => [
+					underlyingLayer = new DummyLayer(
+						new AxisImpl(10, 150),  // Horizontal axis
+						new AxisImpl(10, 100)  // Vertical axis
+					)
+				]
 			)
 		]
 
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..9a6499d 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
@@ -26,6 +26,16 @@
 	def double getStartPixelOfSegmentPosition(int segmentPosition)
 	
 	/**
+	 * Gets the minimum pixel location of this axis. This is normally the same as getStartPixelOfSegmentPosition(0).
+	 */
+	def double getMinPixelLocation()
+	
+	/**
+	 * Gets the maximum pixel size of this axis. This is normally the same as getStartPixelOfSegmentPosition(getSegmentCount()) - getMinPixelLocation().
+	 */
+	def double getPixelSize()
+	
+	/**
 	 * Gets the position of the segment that is nearest to the the given pixel location.
 	 * 
 	 * @param pixelLocation
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..7733099 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
@@ -5,10 +5,6 @@
  */
 class AxisInvariants {
 	
-	def static getPixelSize(Axis axis) {
-		axis.getStartPixelOfSegmentPosition(axis.segmentCount) - axis.getStartPixelOfSegmentPosition(0)
-	}
-	
 	def static getPixelSizeOfSegmentPosition(Axis axis, int segmentPosition) {
 		axis.getStartPixelOfSegmentPosition(segmentPosition + 1) - axis.getStartPixelOfSegmentPosition(segmentPosition)
 	}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
index 3b6b05c..a11394a 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/core/layer/axis/impl/AbstractAxis.xtend
@@ -4,5 +4,13 @@
 import org.eclipse.nebula.widgets.nattable.core.layer.axis.Axis
 
 abstract class AbstractAxis extends AbstractEventSourceSink implements Axis {
+
+	override getMinPixelLocation() {
+		getStartPixelOfSegmentPosition(0)
+	}
+	
+	override getPixelSize() {
+		getStartPixelOfSegmentPosition(segmentCount) - minPixelLocation
+	}
 	
 }
\ 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..102da85 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
@@ -39,7 +39,7 @@
 			val subSegmentPosition = segmentPosition - segmentOffset
 			
 			if (subSegmentPosition < subAxis.segmentCount)
-				return pixelOffset + subAxis.getStartPixelOfSegmentPosition(subSegmentPosition)
+				return pixelOffset + Math::max(subAxis.minPixelLocation, subAxis.getStartPixelOfSegmentPosition(subSegmentPosition))
 			
 			segmentOffset = segmentOffset + subAxis.segmentCount
 			pixelOffset = pixelOffset + subAxis.pixelSize
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 4615418..f2c9b61 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
@@ -14,6 +14,9 @@
 	val BigAxis underlyingAxis
 	val ViewportAxisListener viewportAxisListener
 	
+	BigDecimal minPixelOrigin = BigDecimal::ZERO
+	BigDecimal maxPixelSize
+	
 	/**
 	 * Indicates the visible size of the axis. Note that the pixel locations returned by this ClientDimensionProvider
 	 * must be in terms of underlying axis pixel coordinates.
@@ -29,9 +32,33 @@
 	
 	def getUnderlyingAxis() { underlyingAxis }
 	
+	def setMinPixelOrigin(double minPixelOrigin) { setMinPixelOrigin(new BigDecimal(minPixelOrigin)) }
+	def setMinPixelOrigin(BigDecimal minPixelOrigin) { this.minPixelOrigin = minPixelOrigin }
+	def setMaxPixelSize(double maxPixelSize) { setMaxPixelSize(new BigDecimal(maxPixelSize)) }
+	def setMaxPixelSize(BigDecimal maxPixelSize) { this.maxPixelSize = maxPixelSize }
+	
+	override getMinPixelLocation() {
+		if (minPixelOrigin != null)
+			minPixelOrigin.doubleValue
+		else
+			super.minPixelLocation
+	}
+	
+	override getPixelSize() {
+		if (maxPixelSize != null)
+			maxPixelSize.doubleValue
+		else
+			super.pixelSize
+	}
+	
 	def getVisiblePixelSize() {
-		if (visiblePixelSize >= BigDecimal::ZERO) visiblePixelSize
-		else BigDecimal::TEN
+		val pixelSize =
+			if (visiblePixelSize >= BigDecimal::ZERO) visiblePixelSize
+			else underlyingAxis.pixelSize
+		if (maxPixelSize != null)
+			pixelSize.min(maxPixelSize)
+		else
+			pixelSize
 	}
 	
 	def setVisiblePixelSize(double visiblePixelSize) {
@@ -71,7 +98,7 @@
 		val endSegmentPosition = underlyingAxis.getSegmentPositionOfPixelLocation(endPixel)
 		val isEndPixelInsideEndSegment = endPixel > underlyingAxis.getStartPixelOfSegmentPosition(endSegmentPosition) && endPixel < underlyingAxis.getStartPixelOfSegmentPosition(underlyingAxis.segmentCount)
 		val segmentCount = endSegmentPosition - originSegmentPosition
-		segmentCount.intValueExact + if (isEndPixelInsideEndSegment) 1 else 0
+		segmentCount.intValue + if (isEndPixelInsideEndSegment) 1 else 0
 	}
 	
 	override getStartPixelOfSegmentPosition(int segmentPosition) {
