diff --git a/src/main/java/model/GridIterator.java b/src/main/java/model/GridIterator.java
index ac9ecb53037ba681e9442082d5b4d7b9979fc19c..6cee9e4a8c9a85051f43eda0b2fcdc5db3951466 100644
--- a/src/main/java/model/GridIterator.java
+++ b/src/main/java/model/GridIterator.java
@@ -2,12 +2,12 @@ package model;
 
 import java.util.Iterator;
 
-public class GridIterator implements Iterator<Tile> {
+public class GridIterator implements Iterator<Square> {
   private int rowIndex;
   private int columnIndex;
-  private final TileGrid grid;
+  private final SquareGrid grid;
 
-  GridIterator(TileGrid grid) {
+  GridIterator(SquareGrid grid) {
     this.rowIndex = 0;
     this.columnIndex = 0;
     this.grid = grid;
@@ -19,8 +19,8 @@ public class GridIterator implements Iterator<Tile> {
   }
 
   @Override
-  public Tile next() {
-    final Tile result = grid.getTile(rowIndex, columnIndex);
+  public Square next() {
+    final Square result = grid.getSquare(rowIndex, columnIndex);
     columnIndex = (columnIndex +1) % grid.getNumberOfColumns();
     if(columnIndex == 0){
       rowIndex++;
diff --git a/src/main/java/model/Square.java b/src/main/java/model/Square.java
new file mode 100644
index 0000000000000000000000000000000000000000..dffd14701b816c475276ac6fac95a103ef2df95d
--- /dev/null
+++ b/src/main/java/model/Square.java
@@ -0,0 +1,30 @@
+package model;
+
+import java.util.NoSuchElementException;
+import java.util.Optional;
+
+public class Square {
+  private Optional<Tile> optionalTile;
+
+  private Square(Optional<Tile> tile) {
+    this.optionalTile = tile;
+  }
+
+  public Square(){
+    this(Optional.empty());
+  }
+
+  public Square(Tile tile){
+    this(Optional.of(tile));
+  }
+
+  public Tile getTile(){
+    if(!optionalTile.isPresent())
+      throw new NoSuchElementException();
+    return optionalTile.get();
+  }
+
+  public void add(Tile tile) {
+    optionalTile = Optional.of(tile);
+  }
+}
diff --git a/src/main/java/model/TileGrid.java b/src/main/java/model/SquareGrid.java
similarity index 60%
rename from src/main/java/model/TileGrid.java
rename to src/main/java/model/SquareGrid.java
index f8da2aac26796d890407a5a6f01b5cd0eac2821f..2dcc25467beac882e3e68163e0e696497097c501 100644
--- a/src/main/java/model/TileGrid.java
+++ b/src/main/java/model/SquareGrid.java
@@ -6,10 +6,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Random;
 
-public class TileGrid implements Iterable<Tile> {
+public class SquareGrid implements Iterable<Square> {
   private final int numberOfRows;
   private final int numberOfColumns;
-  private final Tile[][] tiles;
+  private final Square[][] squares;
 
   /**
    * Creates a new {@code Grid} instance given the number of rows and columns.
@@ -19,14 +19,18 @@ public class TileGrid implements Iterable<Tile> {
    * @throws IllegalArgumentException if {@code numberOfRows} or {@code numberOfColumns} are
    *                                  less than or equal to 0
    */
-  public TileGrid(int numberOfRows, int numberOfColumns) {
+  public SquareGrid(int numberOfRows, int numberOfColumns) {
     this.numberOfRows = numberOfRows;
     this.numberOfColumns = numberOfColumns;
-    this.tiles = allocateMatrix();
+    this.squares = allocateMatrix();
   }
 
-  private Tile[][] allocateMatrix() {
-    return new Tile[getNumberOfRows()][getNumberOfColumns()];
+  private Square[][] allocateMatrix() {
+    Square[][] matrix = new Square[getNumberOfRows()][getNumberOfColumns()];
+    for(int row = 0; row < getNumberOfRows(); row++)
+      for(int column = 0; column < getNumberOfRows(); column++)
+        matrix[row][column] = new Square();
+    return matrix;
   }
 
 
@@ -36,14 +40,17 @@ public class TileGrid implements Iterable<Tile> {
    * @return an Iterator.
    */
   @Override
-  public Iterator<Tile> iterator() {
+  public Iterator<Square> iterator() {
     return new GridIterator(this);
   }
 
   public Tile getTile(int rowIndex, int columnIndex) {
-    return tiles[rowIndex][columnIndex];
+    return getSquare(rowIndex,columnIndex).getTile();
   }
 
+  public Square getSquare(int rowIndex, int columnIndex) {
+    return squares[rowIndex][columnIndex];
+  }
   public int getNumberOfRows() {
     return numberOfRows;
   }
@@ -54,9 +61,7 @@ public class TileGrid implements Iterable<Tile> {
 
   public void fillWithRandomTiles(List<Color> colors, Random randomGenerator){
     RandomTileGenerator randomTileGenerator = new RandomTileGenerator(colors, randomGenerator);
-    for(int row = 0; row < numberOfRows; row++)
-      for(int column = 0; column < numberOfColumns; column++){
-        tiles[row][column] = randomTileGenerator.nextTile();
-      }
+    for(Square square : this)
+        square.add(randomTileGenerator.nextTile());
   }
 }
diff --git a/src/main/java/model/TileGame.java b/src/main/java/model/TileGame.java
index 68aeb8a30f93a33482c7b23c19cc02e78da35b46..b893dc20b57ec25021ea269a4dc53956a75bd01e 100644
--- a/src/main/java/model/TileGame.java
+++ b/src/main/java/model/TileGame.java
@@ -6,17 +6,17 @@ import java.util.List;
 import java.util.Random;
 
 public class TileGame {
-  private final TileGrid tileGrid;
+  private final SquareGrid tileGrid;
 
-  public TileGame(TileGrid tileGrid) {
+  public TileGame(SquareGrid tileGrid) {
     this.tileGrid = tileGrid;
     tileGrid.fillWithRandomTiles(List.of(Color.BLUE, Color.WHITE, Color.BLACK, Color.RED), new Random());
   }
   public TileGame() {
-    this(new TileGrid(10, 10));
+    this(new SquareGrid(10, 10));
   }
 
-  public TileGrid getTileGrid() {
+  public SquareGrid getTileGrid() {
     return tileGrid;
   }
 }
diff --git a/src/main/java/view/GridTileCanvas.java b/src/main/java/view/GridTileCanvas.java
index c93b6af6c7fbc69fd5f72da42b1db961da43648a..cfc9b8c1636a4009cbc61329e73b1b354daa33cc 100644
--- a/src/main/java/view/GridTileCanvas.java
+++ b/src/main/java/view/GridTileCanvas.java
@@ -5,8 +5,10 @@ import javafx.scene.canvas.Canvas;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 import model.CardinalDirection;
+import model.Square;
+import model.SquareGrid;
 import model.Tile;
-import model.TileGrid;
+
 import java.util.List;
 import java.util.Random;
 
@@ -27,12 +29,12 @@ public class GridTileCanvas extends Canvas {
     this.numberOfRows = numberOfRows;
     this.setWidth(tileWidth * numberOfColumns);
     this.setHeight(tileHeight * numberOfRows);
-    TileGrid tileGrid = new TileGrid(numberOfRows, numberOfColumns);
+    SquareGrid tileGrid = new SquareGrid(numberOfRows, numberOfColumns);
     tileGrid.fillWithRandomTiles(List.of(Color.BLUE, Color.GREEN, Color.BLACK, Color.RED), new Random());
     drawGridTile(tileGrid);
   }
 
-  public void drawGridTile(TileGrid tileGrid){
+  public void drawGridTile(SquareGrid tileGrid){
     for(int row = 0; row < tileGrid.getNumberOfRows(); row++)
       for(int column = 0; column < tileGrid.getNumberOfColumns(); column++){
         drawTile(tileGrid.getTile(row, column), column, row);
diff --git a/src/main/resources/view/GridCanvas.fxml b/src/main/resources/view/GridCanvas.fxml
index f546bb16ca4b331ecb264bfbb10e46fcfea616c9..8e97434a7547f677fe53d3f1460f6033a35d2cbe 100644
--- a/src/main/resources/view/GridCanvas.fxml
+++ b/src/main/resources/view/GridCanvas.fxml
@@ -14,10 +14,10 @@
                         xmlns:fx="http://javafx.com/fxml"
                         fx:id="GridTileCanvas">
                 <tileHeight>
-                        <Double fx:value="5"/>
+                        <Double fx:value="10"/>
                 </tileHeight>
                 <tileWidth>
-                        <Double fx:value="5"/>
+                        <Double fx:value="10"/>
                 </tileWidth>
                 <numberOfColumns>
                         <Integer fx:value="100"/>