State pattern added