do not use anonymous function because it doesn't have any local variables