add some comment to help understand