The internal state is now an abstract type