some more protection, and more public methods