This reverts commit a6ca88e9. More caution is required to avoid overflow/underflow. Thanks to the santizers for catching this.