implement options argument