diff --git a/src/main/java/SimulatorApplication.java b/src/main/java/SimulatorApplication.java
index 7e2a01d75586b977138a32a64624b3c4879f71a6..1b933b4b006e10e0dc37af82ddd0a02510a05131 100644
--- a/src/main/java/SimulatorApplication.java
+++ b/src/main/java/SimulatorApplication.java
@@ -8,6 +8,7 @@ import javafx.scene.Scene;
 import javafx.stage.Stage;
 import model.CellularAutomatonSimulation;
 import model.automata.GameOfLifeAutomaton;
+import model.automata.WireWorldAutomaton;
 
 import java.io.IOException;
 import java.net.URL;
@@ -37,7 +38,7 @@ public class SimulatorApplication extends Application {
   public SimulatorApplication() {
     this.simulation =
       new CellularAutomatonSimulation<>(
-              new GameOfLifeAutomaton(NUMBER_OF_COLUMNS,NUMBER_OF_ROWS),
+              new WireWorldAutomaton(NUMBER_OF_COLUMNS,NUMBER_OF_ROWS),
               GENERATOR
       );
   }
diff --git a/src/main/java/model/automata/WireWorldAutomaton.java b/src/main/java/model/automata/WireWorldAutomaton.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ee116d98a117a94f24d3d8d3ea45e9895bd6f41
--- /dev/null
+++ b/src/main/java/model/automata/WireWorldAutomaton.java
@@ -0,0 +1,39 @@
+package model.automata;
+
+import model.CellularAutomaton;
+
+import java.util.Random;
+
+import static model.automata.WireWorldState.WIRE;
+
+public class WireWorldAutomaton implements CellularAutomaton<WireWorldState> {
+
+    private final int numberOfColumns;
+    private final int numberOfRows;
+
+    public WireWorldAutomaton(int numberOfColumns, int numberOfRows) {
+        this.numberOfColumns = numberOfColumns;
+        this.numberOfRows = numberOfRows;
+    }
+
+    @Override
+    public int numberOfColumns() {
+        return numberOfColumns;
+    }
+
+    @Override
+    public int numberOfRows() {
+        return numberOfRows;
+    }
+
+    @Override
+    public WireWorldState defaultState() {
+        return WireWorldState.DEAD;
+    }
+
+    @Override
+    public WireWorldState randomState(Random generator) {
+        int r = generator.nextInt(10);
+        return r < 3 ? WireWorldState.WIRE: WireWorldState.DEAD;
+    }
+}
diff --git a/src/main/java/model/automata/WireWorldState.java b/src/main/java/model/automata/WireWorldState.java
new file mode 100644
index 0000000000000000000000000000000000000000..4d94fd294b6e3336868e7a60296e43aee83726ee
--- /dev/null
+++ b/src/main/java/model/automata/WireWorldState.java
@@ -0,0 +1,44 @@
+package model.automata;
+
+import javafx.scene.paint.Color;
+import model.State;
+
+import java.util.List;
+
+public enum WireWorldState implements State<WireWorldState> {
+    DEAD, WIRE, BLUE, RED;
+
+
+    @Override
+    public Color getColor() {
+        return switch (this) {
+            case DEAD -> Color.BLACK;
+            case WIRE -> Color.GOLD;
+            case BLUE -> Color.BLUE;
+            case RED -> Color.RED;
+        };
+    }
+
+    @Override
+    public WireWorldState cycle() {
+        return switch (this) {
+            case DEAD -> WIRE;
+            case WIRE -> BLUE;
+            case BLUE -> RED;
+            case RED -> DEAD;
+        };
+    }
+
+    @Override
+    public WireWorldState update(List<WireWorldState> neighbours) {
+        return switch (this) {
+            case DEAD -> DEAD;
+            case WIRE -> {
+                int countBlues = State.count(BLUE, neighbours);
+                yield (countBlues == 1 || countBlues == 2)? BLUE: WIRE;
+            }
+            case BLUE -> RED;
+            case RED -> WIRE;
+        };
+    }
+}