add Command pattern