some refactoring in preparation for a preprocessor