add public interface
cleanup currying
cleanup curry
refactoring
refactoring
refactoring