initial fork & changes  & implementation for options 1, 2, 3