refactor into single header