requirement #3, #4:cuong edit