now using types and protocols for the state