Phew, that took a few hours...

Comments are appreciated, as always, and any suggestions for improvement will be taken into consideration!