Lots of abstractions.