Add state Pattern