renamed methods to be more inline of proper purpose of the enhancement versions
extracted some methods to push implementation details a bit further from the public interface to try to make the intent of the methods a bit more clear