use interface for state