This ALMOST works. I will finish it tomorrow.
Lots of changes