Refactor to hide internal private fields into getters and setters

This one looks scary but all i did was take out any direct references to fields and replace them with getter/setter calls. If a field did not have a getter/setter i crated a new one for it