Added State Design Pattern