Use listener/callback instead of abstract methods.