re-write the whole project