This looks good, but it might conflict with some stuff. Maybe rebase first?