handle optional arguments