added abstract action listener