implemented with the revealing module pattern