refactoring into abstract class - UNSTABLE
lib up
refactored to Proxy static class
lib to master