few modification and personal experiance added