refactored for easy external access, included add/remove and other useful public methods