Added more abstractions and protocols.