update for optional arguments