move protocols to separate methods