added Command Design pattern