This is a work in progress, additions and corrections are welcome.