adding explanations and rearranged structure