been working on this for days, but I think it's finally done :)