adding some interfaces and exceptions