diff --git a/aptos-move/framework/aptos-framework/doc/staking_contract.md b/aptos-move/framework/aptos-framework/doc/staking_contract.md
index 534999c039be2..85a4ffa6b7590 100644
--- a/aptos-move/framework/aptos-framework/doc/staking_contract.md
+++ b/aptos-move/framework/aptos-framework/doc/staking_contract.md
@@ -2212,6 +2212,10 @@ Allows staker to switch operator without going through the lenghthy process to u
let staker_address = signer::address_of(staker);
assert_staking_contract_exists(staker_address, old_operator);
+ assert!(
+ new_commission_percentage <= 100,
+ error::invalid_argument(EINVALID_COMMISSION_PERCENTAGE),
+ );
// Merging two existing staking contracts is too complex as we'd need to merge two separate stake pools.
let store = borrow_global_mut<Store>(staker_address);
let staking_contracts = &mut store.staking_contracts;
diff --git a/aptos-move/framework/aptos-framework/sources/staking_contract.move b/aptos-move/framework/aptos-framework/sources/staking_contract.move
index 5e9ba4355b995..cfdb8531ecdb4 100644
--- a/aptos-move/framework/aptos-framework/sources/staking_contract.move
+++ b/aptos-move/framework/aptos-framework/sources/staking_contract.move
@@ -695,6 +695,10 @@ module aptos_framework::staking_contract {
let staker_address = signer::address_of(staker);
assert_staking_contract_exists(staker_address, old_operator);
+ assert!(
+ new_commission_percentage <= 100,
+ error::invalid_argument(EINVALID_COMMISSION_PERCENTAGE),
+ );
// Merging two existing staking contracts is too complex as we'd need to merge two separate stake pools.
let store = borrow_global_mut(staker_address);
let staking_contracts = &mut store.staking_contracts;