A cool way to handle state while keeping data encapsulated