I know it's long but WORTH A READ