added optional target argument