Merge branch 'dev'

Change-Id: I7a6ede24163affc30191b6a55d112010baa648ac
diff --git a/build.gradle b/build.gradle
index efda8dc..7fb077a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,7 +15,7 @@
 
 description = 'MDM API - Base Model'
 group = 'org.eclipse.mdm'
-version = '5.1.0M6'
+version = '5.1.0M7-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.");
 		}