Final Version with some comments