I factored out a bunch of smaller methods for each option type and tried to simplify