Marked constructor and helper methods as protected to allow extension

All these methods being internal or private makes the library difficult to extend.