implement the rest of options