diff --git a/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/KeySpace.java b/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/KeySpace.java
index 5d5d55c2db9ef74a2143beed944f9eed043c4dd1..96073c94047bcab11df84bfc8ac82a2f4d8e3774 100644
--- a/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/KeySpace.java
+++ b/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/KeySpace.java
@@ -1,5 +1,6 @@
 package theodolite.commons.workloadgeneration;
 
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -9,7 +10,9 @@ import theodolite.commons.workloadgeneration.generators.AbstractWorkloadGenerato
  * Wrapper class for the definition of the Keys that should be used by the
  * {@link AbstractWorkloadGenerator}.
  */
-public class KeySpace {
+public class KeySpace implements Serializable {
+
+  private static final long serialVersionUID = 7343135392720315515L; // NOPMD
 
   private final String prefix;
   private final int min;
diff --git a/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/WorkloadDefinition.java b/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/WorkloadDefinition.java
index 0bc1d81d2d2186e355c62002bd6704741c8f62a4..4060cca414ae0a938f2605216f8657f1a06c3488 100644
--- a/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/WorkloadDefinition.java
+++ b/benchmarks/workload-generator-commons/src/main/java/theodolite/commons/workloadgeneration/WorkloadDefinition.java
@@ -1,11 +1,14 @@
 package theodolite.commons.workloadgeneration;
 
+import java.io.Serializable;
 import java.time.Duration;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-public class WorkloadDefinition {
+public class WorkloadDefinition implements Serializable {
+
+  private static final long serialVersionUID = -8337364281221817001L; // NOPMD
 
   private final KeySpace keySpace;
   private final Duration period;
@@ -31,12 +34,21 @@ public class WorkloadDefinition {
   }
 
   public Set<WorkloadDefinition> divide(final int parts) {
-    final int size = (this.keySpace.getCount() + parts - 1) / parts; // = ceil(count/parts)
-    return IntStream.range(0, parts)
-        .mapToObj(part -> new KeySpace(
-            this.keySpace.getPrefix(),
-            this.keySpace.getMin() + part * size,
-            Math.min(this.keySpace.getMin() + (part + 1) * size - 1, this.keySpace.getMax())))
+    final int effParts = Math.min(parts, this.keySpace.getCount());
+    final int minSize = this.keySpace.getCount() / effParts;
+    final int largerParts = this.keySpace.getCount() % effParts;
+    return IntStream.range(0, effParts)
+        .mapToObj(part -> {
+          final int thisSize = part < largerParts ? minSize + 1 : minSize;
+          final int largePartsBefore = Math.min(largerParts, part);
+          final int smallPartsBefore = part - largePartsBefore;
+          final int start = largePartsBefore * (minSize + 1) + smallPartsBefore * minSize;
+          final int end = start + thisSize - 1;
+          return new KeySpace(
+              this.keySpace.getPrefix(),
+              start,
+              end);
+        })
         .map(keySpace -> new WorkloadDefinition(
             keySpace,
             this.period))
diff --git a/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/KeySpaceTest.java b/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/KeySpaceTest.java
index bbd8c297d53ba229463e30acd81e7cf1a12ffe99..20c094ddcc7ff110a25aaffa494766e89d4d2475 100644
--- a/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/KeySpaceTest.java
+++ b/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/KeySpaceTest.java
@@ -1,4 +1,4 @@
-package theodolite.commons.workloadgeneration.dimensions;
+package theodolite.commons.workloadgeneration;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/WorkloadDefinitionTest.java b/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/WorkloadDefinitionTest.java
index 6dd2232be6bbcb618ee46c3e14465f64d1cd0d75..9a5dbf2d20e9e33b5902e5f352dc8a4023478cdf 100644
--- a/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/WorkloadDefinitionTest.java
+++ b/benchmarks/workload-generator-commons/src/test/java/theodolite/commons/workloadgeneration/WorkloadDefinitionTest.java
@@ -1,4 +1,4 @@
-package theodolite.commons.workloadgeneration.misc;
+package theodolite.commons.workloadgeneration;
 
 import java.time.Duration;
 import java.util.Comparator;
@@ -7,10 +7,8 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import org.junit.Assert;
 import org.junit.Test;
-import theodolite.commons.workloadgeneration.KeySpace;
-import theodolite.commons.workloadgeneration.WorkloadDefinition;
 
-public class WorkloadDefinition2Test {
+public class WorkloadDefinitionTest {
 
   @Test
   public void testDivideByOneAmount() {
@@ -54,10 +52,46 @@ public class WorkloadDefinition2Test {
     Assert.assertEquals(33, subworkload1.getKeySpace().getMax());
     final WorkloadDefinition subworkload2 = orderedSubworkloads.get(1);
     Assert.assertEquals(34, subworkload2.getKeySpace().getMin());
-    Assert.assertEquals(67, subworkload2.getKeySpace().getMax());
+    Assert.assertEquals(66, subworkload2.getKeySpace().getMax());
     final WorkloadDefinition subworkload3 = orderedSubworkloads.get(2);
-    Assert.assertEquals(68, subworkload3.getKeySpace().getMin());
+    Assert.assertEquals(67, subworkload3.getKeySpace().getMin());
     Assert.assertEquals(99, subworkload3.getKeySpace().getMax());
   }
 
+  @Test
+  public void testDivideMany() {
+    final KeySpace keySpace = new KeySpace("prefix", 10);
+    final WorkloadDefinition workload = new WorkloadDefinition(keySpace, Duration.ofSeconds(1));
+    final Set<WorkloadDefinition> subworkloads = workload.divide(7);
+    Assert.assertEquals(7, subworkloads.size());
+    for (final WorkloadDefinition subworkload : subworkloads) {
+      Assert.assertEquals("prefix", subworkload.getKeySpace().getPrefix());
+      Assert.assertEquals(Duration.ofSeconds(1), subworkload.getPeriod());
+    }
+    final List<WorkloadDefinition> orderedSubworkloads = subworkloads.stream()
+        .sorted(Comparator.comparingInt(l -> l.getKeySpace().getMin()))
+        .collect(Collectors.toList());
+    final WorkloadDefinition subworkload1 = orderedSubworkloads.get(0);
+    Assert.assertEquals(0, subworkload1.getKeySpace().getMin());
+    Assert.assertEquals(1, subworkload1.getKeySpace().getMax());
+    final WorkloadDefinition subworkload2 = orderedSubworkloads.get(1);
+    Assert.assertEquals(2, subworkload2.getKeySpace().getMin());
+    Assert.assertEquals(3, subworkload2.getKeySpace().getMax());
+    final WorkloadDefinition subworkload3 = orderedSubworkloads.get(2);
+    Assert.assertEquals(4, subworkload3.getKeySpace().getMin());
+    Assert.assertEquals(5, subworkload3.getKeySpace().getMax());
+    final WorkloadDefinition subworkload4 = orderedSubworkloads.get(3);
+    Assert.assertEquals(6, subworkload4.getKeySpace().getMin());
+    Assert.assertEquals(6, subworkload4.getKeySpace().getMax());
+    final WorkloadDefinition subworkload5 = orderedSubworkloads.get(4);
+    Assert.assertEquals(7, subworkload5.getKeySpace().getMin());
+    Assert.assertEquals(7, subworkload5.getKeySpace().getMax());
+    final WorkloadDefinition subworkload6 = orderedSubworkloads.get(5);
+    Assert.assertEquals(8, subworkload6.getKeySpace().getMin());
+    Assert.assertEquals(8, subworkload6.getKeySpace().getMax());
+    final WorkloadDefinition subworkload7 = orderedSubworkloads.get(6);
+    Assert.assertEquals(9, subworkload7.getKeySpace().getMin());
+    Assert.assertEquals(9, subworkload7.getKeySpace().getMax());
+  }
+
 }