revised protocol constructors