follow _process pattern so callback has correct value for 'this'