3.5
function has been done almost