completed, but ugly
full list