finish basic function
resovle merge conflict