diff --git a/substrate/wasm-runtime/polkadot/src/runtime/parachains.rs b/substrate/wasm-runtime/polkadot/src/runtime/parachains.rs
index 61ee0f57856a01a0991b48814212537ff08247d7..dac19b52823d3edc581ba74f2c294e533a995f04 100644
--- a/substrate/wasm-runtime/polkadot/src/runtime/parachains.rs
+++ b/substrate/wasm-runtime/polkadot/src/runtime/parachains.rs
@@ -56,8 +56,8 @@ pub fn calculate_duty_roster() -> DutyRoster {
 	let validators_per_parachain = (validator_count - 1) / parachain_count;
 	let validators_on_relay = validator_count - validators_per_parachain * parachain_count;
 
-	let mut roles_val = (0..validator_count).map(|i| match i / validators_per_parachain {
-		i if i < parachain_count => Chain::Parachain(i as u32),
+	let mut roles_val = (0..validator_count).map(|i| match i {
+		i if i < parachain_count * validators_per_parachain => Chain::Parachain(i / validators_per_parachain as u32),
 		_ => Chain::Relay,
 	}).collect::<Vec<_>>();
 	let mut roles_gua = roles_val.clone();
@@ -113,53 +113,31 @@ mod tests {
 	fn should_work() {
 		let mut t = simple_setup();
 		with_externalities(&mut t, || {
+			let check_roster = |duty_roster: &DutyRoster| {
+				assert_eq!(duty_roster.validator_duty.len(), 8);
+				assert_eq!(duty_roster.guarantor_duty.len(), 8);
+				for i in 0..2 {
+					assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
+					assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
+				}
+				assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
+				assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
+			};
+
 			with_env(|e| e.parent_hash = [0u8; 32]);
-			let duty_roster = calculate_duty_roster();
-
-			assert_eq!(duty_roster.validator_duty.len(), 8);
-			assert_eq!(duty_roster.guarantor_duty.len(), 8);
-			for i in 0..2 {
-				assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
-				assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
-			}
-			assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
-			assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
-			assert_eq!(duty_roster, DutyRoster {
-				validator_duty: vec![Chain::Parachain(0), Chain::Relay, Chain::Parachain(1), Chain::Relay, Chain::Parachain(1), Chain::Parachain(0), Chain::Parachain(1), Chain::Parachain(0)],
-				guarantor_duty: vec![Chain::Parachain(0), Chain::Parachain(0), Chain::Parachain(1), Chain::Parachain(0), Chain::Relay, Chain::Parachain(1), Chain::Parachain(1), Chain::Relay],
-			});
+			let duty_roster_0 = calculate_duty_roster();
+			check_roster(&duty_roster_0);
 
 			with_env(|e| e.parent_hash = [1u8; 32]);
-			let duty_roster = calculate_duty_roster();
-
-			assert_eq!(duty_roster.validator_duty.len(), 8);
-			assert_eq!(duty_roster.guarantor_duty.len(), 8);
-			for i in 0..2 {
-				assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
-				assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
-			}
-			assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
-			assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
-			assert_eq!(duty_roster, DutyRoster {
-				validator_duty: vec![Chain::Parachain(1), Chain::Parachain(0), Chain::Parachain(0), Chain::Parachain(1), Chain::Parachain(1), Chain::Relay, Chain::Parachain(0), Chain::Relay],
-				guarantor_duty: vec![Chain::Parachain(1), Chain::Parachain(0), Chain::Parachain(0), Chain::Parachain(1), Chain::Parachain(0), Chain::Relay, Chain::Parachain(1), Chain::Relay],
-			});
+			let duty_roster_1 = calculate_duty_roster();
+			check_roster(&duty_roster_1);
+			assert!(duty_roster_0 != duty_roster_1);
 
 			with_env(|e| e.parent_hash = [2u8; 32]);
-			let duty_roster = calculate_duty_roster();
-
-			assert_eq!(duty_roster.validator_duty.len(), 8);
-			assert_eq!(duty_roster.guarantor_duty.len(), 8);
-			for i in 0..2 {
-				assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
-				assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Parachain(i)).count(), 3);
-			}
-			assert_eq!(duty_roster.validator_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
-			assert_eq!(duty_roster.guarantor_duty.iter().filter(|&&j| j == Chain::Relay).count(), 2);
-			assert_eq!(duty_roster, DutyRoster {
-				validator_duty: vec![Chain::Parachain(1), Chain::Parachain(0), Chain::Relay, Chain::Parachain(0), Chain::Parachain(0), Chain::Relay, Chain::Parachain(1), Chain::Parachain(1)],
-				guarantor_duty: vec![Chain::Parachain(0), Chain::Parachain(1), Chain::Parachain(1), Chain::Parachain(1), Chain::Relay, Chain::Parachain(0), Chain::Parachain(0), Chain::Relay],
-			});
+			let duty_roster_2 = calculate_duty_roster();
+			check_roster(&duty_roster_2);
+			assert!(duty_roster_0 != duty_roster_2);
+			assert!(duty_roster_1 != duty_roster_2);
 		});
 	}
 }