more solutions
rebase from Github