use class protocol instead of objc protocol which is overkill