remove doThrow argument
add appendDelimiter