completed implementation