split into header/c