add some comment to help understanding