Long but good....explains everything