Changed interface to abstract class and added another handler; plus more refactoring.