made protocol independant