add more options
refuctoring