And more...

See each commit for detaitls