accepts empty string and does nothing