modify types definition and start to accomplish all