change ctors to protected internal