rewrote package with proper design
move private method to bottom