All these checks should be done against the interfaces rather than implementations