modifer state pattern