careful of trailing whitespace