Reworked interfaces and classes so they rely on the most basic interfaces