Added interfaces and implementations