diff --git a/build.gradle b/build.gradle
index 7fb077a..2dde0a4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,7 +15,7 @@
 
 description = 'MDM API - Base Model'
 group = 'org.eclipse.mdm'
-version = '5.1.0M7-SNAPSHOT'
+version = '5.1.0M8-SNAPSHOT'
 
 apply plugin: 'java'
 apply plugin: 'maven'
diff --git a/src/main/java/org/eclipse/mdm/api/base/massdata/ReadRequestBuilder.java b/src/main/java/org/eclipse/mdm/api/base/massdata/ReadRequestBuilder.java
index a1fb3a1..9546bc5 100644
--- a/src/main/java/org/eclipse/mdm/api/base/massdata/ReadRequestBuilder.java
+++ b/src/main/java/org/eclipse/mdm/api/base/massdata/ReadRequestBuilder.java
@@ -111,44 +111,6 @@
 	}
 
 	/**
-	 * Configures the number of values that will be loaded per {@link Channel}.
-	 *
-	 * <p>
-	 * <b>Note:</b> If the request size is zero, then all available measured values
-	 * will be loaded for each configured {@link Channel}.
-	 *
-	 * @param requestSize The request size.
-	 * @return This builder is returned.
-	 * @throws IllegalArgumentException Thrown if the request size is smaller than
-	 *                                  0.
-	 */
-	public ReadRequestBuilder requestSize(int requestSize) {
-		if (requestSize < 0) {
-			throw new IllegalArgumentException(
-					"The number of values per channel must be greater or at " + "least equal to 0.");
-		}
-
-		readRequest.setRequestSize(requestSize);
-		return this;
-	}
-
-	/**
-	 * Configures the number of values that will be skipped.
-	 *
-	 * @param startIndex The start index.
-	 * @return This builder is returned.
-	 * @throws IllegalArgumentException Thrown if the start index is smaller than 0.
-	 */
-	public ReadRequestBuilder startIndex(int startIndex) {
-		if (startIndex < 0) {
-			throw new IllegalArgumentException("The start index must be greater or at least equal to 0.");
-		}
-
-		readRequest.setStartIndex(startIndex);
-		return this;
-	}
-
-	/**
 	 * Configures the valuesMode.
 	 * 
 	 * @param valuesMode {@link ValuesMode} to use for the read request.
@@ -177,6 +139,47 @@
 	}
 
 	/**
+	 * Configures the {@link ReadRequest} to load the specified number of values for
+	 * each {@link Channel}. this is a terminal operation returning the built
+	 * {@link ReadRequest}.
+	 *
+	 * <p>
+	 * <b>Note:</b> If the request size is zero, then all available measured values
+	 * will be loaded for each configured {@link Channel}.
+	 *
+	 * @param requestSize The request size.
+	 * @return the {@link ReadRequest}
+	 * @throws IllegalArgumentException Thrown if the request size is smaller than
+	 *                                  0.
+	 */
+	public ReadRequest values(int requestSize) {
+		readRequest.setStartIndex(0);
+		readRequest.setRequestSize(requestSize);
+		return readRequest;
+	}
+
+	/**
+	 * Configures the {@link ReadRequest} to load the specified number of values
+	 * from a specified start index for each {@link Channel}. this is a terminal
+	 * operation returning the built {@link ReadRequest}.
+	 *
+	 * <p>
+	 * <b>Note:</b> If the request size is zero, then all available measured values
+	 * will be loaded for each configured {@link Channel}.
+	 *
+	 * @param startIndex  The start index.
+	 * @param requestSize The request size.
+	 * @return the {@link ReadRequest}
+	 * @throws IllegalArgumentException Thrown if the request size is smaller than 0
+	 *                                  or if the start index is smaller than 0.
+	 */
+	public ReadRequest values(int startIndex, int requestSize) {
+		readRequest.setStartIndex(startIndex);
+		readRequest.setRequestSize(requestSize);
+		return readRequest;
+	}
+
+	/**
 	 * Returns an {@link ReadRequestIterable} to iterate over all available
 	 * {@link ReadRequest}s.
 	 *
diff --git a/src/main/java/org/eclipse/mdm/api/base/massdata/WriteRequestBuilder.java b/src/main/java/org/eclipse/mdm/api/base/massdata/WriteRequestBuilder.java
index 13f5dff..d23fb2f 100644
--- a/src/main/java/org/eclipse/mdm/api/base/massdata/WriteRequestBuilder.java
+++ b/src/main/java/org/eclipse/mdm/api/base/massdata/WriteRequestBuilder.java
@@ -146,7 +146,7 @@
 		} else if (scalarType.isFloat()) {
 			values = new float[] { (float) start, (float) increment };
 		} else if (scalarType.isDouble()) {
-			values = new double[] { start };
+			values = new double[] { start, increment };
 		} else {
 			throw new IllegalArgumentException("Scalar type '" + scalarType + "' is not supported.");
 		}
@@ -198,7 +198,7 @@
 		} else if (scalarType.isFloat()) {
 			values = new float[] { (float) start, (float) increment, (float) valuesPerSaw };
 		} else if (scalarType.isDouble()) {
-			values = new double[] { start };
+			values = new double[] { start, increment, valuesPerSaw };
 		} else {
 			throw new IllegalArgumentException("Scalar type '" + scalarType + "' is not supported.");
 		}
