change design & refactoring