finished all main requirments