added some more comments, made *= more efficient