Necessary interfaces and implementation of them