split up header and implementation