diff --git a/src/main/java/org/example/chaosgame/MainApp.java b/src/main/java/org/example/chaosgame/MainApp.java
index 4a05a6d855a537aba683723b0a5693603c00800d..20aa139361ea37500a14d55484af4cda2bd8e583 100644
--- a/src/main/java/org/example/chaosgame/MainApp.java
+++ b/src/main/java/org/example/chaosgame/MainApp.java
@@ -6,7 +6,10 @@ import javafx.scene.control.Button;
 import javafx.scene.layout.BorderPane;
 import javafx.scene.layout.HBox;
 import javafx.stage.Stage;
+import org.example.chaosgame.controller.MainController;
+import org.example.chaosgame.model.chaos.ChaosGame;
 import org.example.chaosgame.model.chaos.ChaosGameDescription;
+import org.example.chaosgame.model.chaos.ChaosGameDescriptionFactory;
 import org.example.chaosgame.model.chaos.ChaosGameFileHandler;
 import org.example.chaosgame.view.ChaosPage;
 import org.example.chaosgame.view.ExplorePage;
@@ -34,7 +37,6 @@ public class MainApp extends Application {
     });
     Button exploreButton = menuView.getExploreButton();
     exploreButton.setOnAction(e-> {
-
       borderPane.setCenter(explorePage.getExploreContent());
     });
     HBox menuBar = menuView.getMenuBar();
diff --git a/src/main/java/org/example/chaosgame/controller/ChaosGameSubject.java b/src/main/java/org/example/chaosgame/controller/ChaosGameSubject.java
new file mode 100644
index 0000000000000000000000000000000000000000..36dd8621aa6f29fd57d63cb449a8be2e7b8af86d
--- /dev/null
+++ b/src/main/java/org/example/chaosgame/controller/ChaosGameSubject.java
@@ -0,0 +1,7 @@
+package org.example.chaosgame.controller;
+
+public interface ChaosGameSubject {
+  void registerObserver(Observer observer);
+  void removeObserver(Observer observer);
+  void notifyObservers();
+}
diff --git a/src/main/java/org/example/chaosgame/controller/MainController.java b/src/main/java/org/example/chaosgame/controller/MainController.java
index d00c243c45f66ab1e88d79947d0059499769774b..fe97afa8003b8bfe103da46b29dd8e84e26a189d 100644
--- a/src/main/java/org/example/chaosgame/controller/MainController.java
+++ b/src/main/java/org/example/chaosgame/controller/MainController.java
@@ -1,5 +1,22 @@
 package org.example.chaosgame.controller;
 
-public class MainController {
+import javafx.scene.layout.StackPane;
+import org.example.chaosgame.model.chaos.ChaosGame;
+import org.example.chaosgame.view.ChaosPage;
 
+public class MainController implements Observer{
+  private final ChaosGame chaosGame;
+  private final ChaosPage chaosPage;
+
+
+  public MainController(ChaosGame chaosGame) {
+    this.chaosGame = chaosGame;
+    this.chaosPage = new ChaosPage();
+    chaosGame.registerObserver(this);
+  }
+
+  @Override
+  public void update() {
+    chaosPage.updateCanvas();
+  }
 }
diff --git a/src/main/java/org/example/chaosgame/controller/Observer.java b/src/main/java/org/example/chaosgame/controller/Observer.java
new file mode 100644
index 0000000000000000000000000000000000000000..584d01d8d130dfe74fb48653a98fd0bbc46fbde2
--- /dev/null
+++ b/src/main/java/org/example/chaosgame/controller/Observer.java
@@ -0,0 +1,5 @@
+package org.example.chaosgame.controller;
+
+public interface Observer {
+  void update();
+}
diff --git a/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java b/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java
index 82c47121c15103262cc710ae6ccabbf9e29de854..88ec0ecbffc6eadb086322dcbfb0d982502bc35e 100644
--- a/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java
+++ b/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java
@@ -1,7 +1,11 @@
 package org.example.chaosgame.model.chaos;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
+
+import org.example.chaosgame.controller.ChaosGameSubject;
+import org.example.chaosgame.controller.Observer;
 import org.example.chaosgame.model.linalg.Vector2D;
 
 /**
@@ -13,14 +17,15 @@ import org.example.chaosgame.model.linalg.Vector2D;
  * The new point is then drawn on the canvas.
  * This process is repeated a selected amount of steps.
  */
-public class ChaosGame {
+public class ChaosGame implements ChaosGameSubject {
   private final ChaosCanvas canvas;
 
   private final ChaosGameDescription description;
 
   private Vector2D currentPoint = new Vector2D(0.0, 0.0);
 
-  public final Random random = new Random();
+  private final Random random = new Random();
+  private List<Observer> observers;
 
   /**
    * Constructor for ChaosGame.
@@ -36,6 +41,7 @@ public class ChaosGame {
     this.description = description;
     this.canvas = new ChaosCanvas(width, height,
             description.getMinCoords(), description.getMaxCoords());
+    this.observers = new ArrayList<>();
   }
 
 
@@ -55,6 +61,7 @@ public class ChaosGame {
     } else {
       runStepsUniform(steps);
     }
+    notifyObservers();
   }
   private void runStepsUniform(int steps) {
     for (int i = 0; i < steps; i++) {
@@ -90,4 +97,25 @@ public class ChaosGame {
       canvas.putPixel(currentPoint);
     }
   }
+
+  @Override
+  public void registerObserver(Observer observer) {
+    observers.add(observer);
+    System.out.println("Observer added");
+  }
+
+  @Override
+  public void removeObserver(Observer observer) {
+    observers.remove(observer);
+    System.out.println("Observer removed");
+  }
+
+  @Override
+  public void notifyObservers() {
+    for (Observer observer : observers) {
+      observer.update();
+      System.out.println("Observer notified");
+    }
+  }
 }
+
diff --git a/src/main/java/org/example/chaosgame/view/ChaosPage.java b/src/main/java/org/example/chaosgame/view/ChaosPage.java
index 6e0192011514f60e9be48e0dfee90c03d3806d9c..658dfd3e14c814da3219d96fffa31a48f7127172 100644
--- a/src/main/java/org/example/chaosgame/view/ChaosPage.java
+++ b/src/main/java/org/example/chaosgame/view/ChaosPage.java
@@ -26,7 +26,6 @@ public class ChaosPage {
   private final Canvas canvas;
   private final GraphicsContext gc;
   private final Label errorLabel = new Label("Invalid input. Please enter a valid number.");
-
   private final VBox runStepsBox = new VBox();
 
   public ChaosPage() {
@@ -42,16 +41,8 @@ public class ChaosPage {
     stepsField.setPromptText("Enter number of steps");
 
 
-
     ComboBox<String> contextMenu = new ComboBox<>();
     contextMenu.setPromptText("Select chaos game");
-    ColorAdjust shade = new ColorAdjust();
-    shade.setBrightness(0.4);
-    contextMenu.addEventHandler(MouseEvent.MOUSE_ENTERED,
-            e -> contextMenu.setEffect(shade));
-    contextMenu.addEventHandler(MouseEvent.MOUSE_EXITED,
-            e -> contextMenu.setEffect(null));
-
 
     contextMenu.getItems().addAll("Julia", "Sierpinski", "Barnsley", "Make your own");