more information were added with references by vishvax