added comments and some requirement tracebility