add preconditions