diff --git a/src/main/java/model/CardinalDirection.java b/src/main/java/model/CardinalDirection.java
new file mode 100644
index 0000000000000000000000000000000000000000..10ae434d082de4a010b005aa19415006e3d1b1ed
--- /dev/null
+++ b/src/main/java/model/CardinalDirection.java
@@ -0,0 +1,5 @@
+package model;
+
+public enum CardinalDirection {
+  NORTH, EAST, SOUTH, WEST;
+}
diff --git a/src/main/java/model/Tile.java b/src/main/java/model/Tile.java
new file mode 100644
index 0000000000000000000000000000000000000000..5880b936ca8a83b34a47d71736e9b6f4cf9f77fa
--- /dev/null
+++ b/src/main/java/model/Tile.java
@@ -0,0 +1,36 @@
+package model;
+
+import javafx.scene.paint.Color;
+
+import java.util.Arrays;
+import java.util.HashMap;
+
+public class Tile {
+  private static final int NUMBER_OF_SIDES = 4;
+  private final Color colors[] = new Color[NUMBER_OF_SIDES];
+
+  public Tile(Color[] colors) {
+    if(colors.length != NUMBER_OF_SIDES)
+      throw new IllegalArgumentException("A tile is defined by " + NUMBER_OF_SIDES
+                                            + "and not" + colors.length + "sides.");
+    for(int index = 0; index < NUMBER_OF_SIDES; index++)
+      this.colors[index] = colors[index];
+  }
+
+  public Color getColor(CardinalDirection direction){
+    return colors[direction.ordinal()];
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+    Tile tile = (Tile) o;
+    return Arrays.equals(colors, tile.colors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Arrays.hashCode(colors);
+  }
+}
diff --git a/src/test/java/model/TileTest.java b/src/test/java/model/TileTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..fab7b94044b452f2af77c60237c8e67254b1525c
--- /dev/null
+++ b/src/test/java/model/TileTest.java
@@ -0,0 +1,29 @@
+package model;
+
+import javafx.scene.paint.Color;
+import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class TileTest {
+  @Test
+  void testGetColor(){
+    Tile tile = new Tile(new Color[]{Color.BLACK, Color.BLUE, Color.WHITE, Color.BLUE});
+    assertThat(tile.getColor(CardinalDirection.NORTH)).isEqualTo(Color.BLACK);
+    assertThat(tile.getColor(CardinalDirection.EAST)).isEqualTo(Color.BLUE);
+    assertThat(tile.getColor(CardinalDirection.SOUTH)).isEqualTo(Color.WHITE);
+    assertThat(tile.getColor(CardinalDirection.WEST)).isEqualTo(Color.BLUE);
+  }
+
+  @Test
+  void testEquals(){
+    Color[] colors1 = new Color[]{Color.BLACK, Color.BLUE, Color.WHITE, Color.BLUE};
+    Color[] colors2 = new Color[]{Color.BLACK, Color.BLUE, Color.WHITE, Color.WHITE};
+    Tile tile1 = new Tile(colors1);
+    Tile tile2 = new Tile(colors1);
+    Tile tile3 = new Tile(colors2);
+    assertThat(tile1)
+            .isEqualTo(tile1)
+            .isEqualTo(tile2)
+            .isNotEqualTo(tile3);
+  }
+}