Use private and protected in some places
Make initialize method always protected
More private and protected, and some small refactors