split out reusable bits into separate headers