modified all through, the last 2 version