A lot of messy code :S