Major refactoring, incompatible api change