This should be an interface.