made command and listeners abstract