greedy and abstract
greedy and abstract
semi-working
made it work
cleaned up