some updates as default values and variable arguments can be mixed you just have to be careful about order