added a couple of explanations when required, not much changes with the original