Implement all minus encore... this was hard.