Refactoring: callback -> preprocess