first attempt at #17 still needs some work