abstract out State