going to refactor for readbility