use source to replace iterator