I've added StatePattern