Messy but decent sized update