This has pretty much all the answers: