Please read. It's long but worth it.