Interface Implementation

Changed the implementation to an interface due to popular demand
Merge branch 'interface'