Final Version with comments/doc strings