added explicit protocols