add ability to pass in new types of state