add Command Pattern