improve preprocessor