Interface Implementation

Changed the implementation to an interface due to popular demand