Long but worth the read!