@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Grid other = (Grid) obj;
		if (gridHeight != other.gridHeight)
			return false;
		if (gridWidth != other.gridWidth)
			return false;
		// check arrays are equal
		if (gridArr.length != other.gridArr.length){
			logger.debug ("This and others grid arrays contain different number of rows");
			return false;
		}
		for (int i = 0; i < this.gridArr.length; i++) {
			int[] row = gridArr[i];
			for (int j=0; j < row.length; j++){
				if (gridArr[i][j] != other.gridArr[i][j]){
					logger.debug("Grid arrays different at grid position " + (i+1) + "," + (j+1) + " value in this = " + gridArr[i][j] + ", value in other = " + other.gridArr[i][j]);
				    return false;
				}
			}
		}
		return true;
	}