further implementation and improvement