this could result in double semicolons if `cleanName` returns an empty string.