convert to header-only