Renamed all interfaces and implementations to make them more idiomatic for issue #1