contains major spoilers