Some detailed, really in depth answers from abel here