handle optional parameters correctly