extend protocols and use where appropriate