Ok so this took a while