rename row and column methods to rows and columns to make more intuitive sense and extracted some code in private methods to their own methods for conceptual ease