added some explainations