SOoooooo much code