diff --git a/src/main/java/view/GridCanvas.java b/src/main/java/view/GridCanvas.java
index 33c277a79aa3b34aa6820c761c197ea6e10b0272..65ad3ea8d03c4aecc23a2eddb1108ece7ddc5ece 100644
--- a/src/main/java/view/GridCanvas.java
+++ b/src/main/java/view/GridCanvas.java
@@ -27,7 +27,6 @@ public class GridCanvas extends Canvas {
     this.numberOfRows = numberOfRows;
     this.setWidth(tileWidth * numberOfColumns);
     this.setHeight(tileHeight * numberOfRows);
-    // TODO change the EmptyGrid for an ArrayGrid
     grid = new EmptyGrid(numberOfRows, numberOfColumns);
     graphicsContext = getGraphicsContext2D();
   }
@@ -38,7 +37,7 @@ public class GridCanvas extends Canvas {
   }
 
   private void drawGrid(){
-    drawGridTile(grid);
+    draw(grid);
   }
 
   private void clear(){
@@ -49,32 +48,70 @@ public class GridCanvas extends Canvas {
     grid.fill(tileGenerator);
   }
 
-  public void drawGridTile(Grid tileGrid){
+  public void draw(Grid tileGrid){
+    drawSquares(tileGrid);
+    strokeSquares(tileGrid);
+  }
+
+  private void drawSquares(Grid tileGrid) {
     for(int row = 0; row < numberOfRows; row++)
       for(int column = 0; column < numberOfColumns; column++){
-        Tile tile = tileGrid.getSquare(row, column).getTile();
-        drawTile(tile, column * tileWidth, row * tileHeight);
+        Square square = tileGrid.getSquare(row, column);
+        drawSquare(square, column * tileWidth, row * tileHeight);
       }
   }
 
-  private void drawTile(Tile tile, double x, double y) {
+  private void strokeSquares(Grid tileGrid) {
+    for(int row = 0; row < numberOfRows; row++)
+      for(int column = 0; column < numberOfColumns; column++){
+        Square square = tileGrid.getSquare(row, column);
+        strokeSquare(square, column * tileWidth, row * tileHeight);
+      }
+  }
+
+
+  private void strokeSquare(Square square, double x, double y) {
+    PointType[] cornerTypes = PointType.values();
+    double[] xPoints = new double[cornerTypes.length];
+    double[] yPoints = new double[cornerTypes.length];
+    for(int index = 0; index < cornerTypes.length; index++){
+      xPoints[index] =  x + (cornerTypes[index].getXPosition() * tileWidth);
+      yPoints[index] =  y + (cornerTypes[index].getYPosition() * tileHeight);
+    }
+    final int indexCenter = 4;
+    for(CardinalDirection side : CardinalDirection.values()) {
+      int indexCorner0 = side.ordinal();
+      int indexCorner1 = (indexCorner0+1)%4;
+      strokeSquareSide(square, xPoints[indexCorner0], yPoints[indexCorner0], xPoints[indexCorner1], yPoints[indexCorner1], side);
+      strokeInternalTriangleSide(square, xPoints[indexCorner0],yPoints[indexCorner0],xPoints[indexCenter],yPoints[indexCenter], side);
+    }
+  }
+
+  private void strokeSquareSide(Square square, double x0, double y0, double x1, double y1, CardinalDirection side) {
+    graphicsContext.strokeLine(x0, y0, x1, y1);
+  }
+
+  private void strokeInternalTriangleSide(Square square, double x0, double y0, double x1, double y1, CardinalDirection side) {
+    graphicsContext.strokeLine(x0, y0, x1, y1);
+  }
+
+  private void drawSquare(Square square, double x, double y) {
     for(CardinalDirection side: CardinalDirection.values()){
-      drawSideTriangle(tile, x, y, side);
+      drawSideTriangle(square, x, y, side);
     }
   }
 
-  private void drawSideTriangle(Tile tile, double x, double y, CardinalDirection side){
+  private void drawSideTriangle(Square square, double x, double y, CardinalDirection side){
+    Color color = square.getTile().side(side).color();
     List<PointType> cornerTypes = PointType.trianglePointTypes(side);
-    double[] xPoints = new double[3];
-    double[] yPoints = new double[3];
-    for(int index = 0; index < 3; index++){
+    int size = PointType.trianglePointTypes(side).size();
+    double[] xPoints = new double[size];
+    double[] yPoints = new double[size];
+    for(int index = 0; index < size; index++){
       xPoints[index] =  x + (cornerTypes.get(index).getXPosition() * tileWidth);
       yPoints[index] =  y + (cornerTypes.get(index).getYPosition() * tileHeight);
     }
-
-    Color color = tile.side(side).color();
     graphicsContext.setFill(color);
-    graphicsContext.strokePolygon(xPoints, yPoints, 3);
-    graphicsContext.fillPolygon(xPoints, yPoints, 3);
+    graphicsContext.fillPolygon(xPoints, yPoints, size);
   }
 }
diff --git a/src/main/java/view/PointType.java b/src/main/java/view/PointType.java
index a5309438b5cb7902d6eb072159eb2607b4079cff..54061428e8e5b8f7ad0b110fce55ad335bbcb1c3 100644
--- a/src/main/java/view/PointType.java
+++ b/src/main/java/view/PointType.java
@@ -7,8 +7,8 @@ import java.util.List;
 public enum PointType {
   NORTH_WEST_CORNER(0,0),
   NORTH_EAST_CORNER(1,0),
-  SOUTH_WEST_CORNER(0,1),
   SOUTH_EAST_CORNER(1,1),
+  SOUTH_WEST_CORNER(0,1),
   CENTER(0.5,0.5);
   private final double xPosition;
   private final double yPosition;
@@ -23,7 +23,7 @@ public enum PointType {
         case NORTH -> List.of(PointType.NORTH_WEST_CORNER, PointType.NORTH_EAST_CORNER, PointType.CENTER);
         case EAST -> List.of(PointType.NORTH_EAST_CORNER, PointType.SOUTH_EAST_CORNER, PointType.CENTER);
         case SOUTH -> List.of(PointType.SOUTH_EAST_CORNER, PointType.SOUTH_WEST_CORNER, PointType.CENTER);
-        case WEST -> List.of(PointType.NORTH_WEST_CORNER, PointType.SOUTH_WEST_CORNER, PointType.CENTER);
+        case WEST -> List.of(PointType.SOUTH_WEST_CORNER, PointType.NORTH_WEST_CORNER, PointType.CENTER);
       };
   }