Changed interface to a class that implements all that boilerplate.