updated Implementation