diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml
new file mode 100644
index 0000000000000000000000000000000000000000..02b915b85f9fb22b6e51491729131d93c18d906e
--- /dev/null
+++ b/.idea/git_toolbox_prj.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GitToolBoxProjectSettings">
+    <option name="commitMessageIssueKeyValidationOverride">
+      <BoolValueOverride>
+        <option name="enabled" value="true" />
+      </BoolValueOverride>
+    </option>
+    <option name="commitMessageValidationEnabledOverride">
+      <BoolValueOverride>
+        <option name="enabled" value="true" />
+      </BoolValueOverride>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index dc444fafeb54673e8bf2d361881a38fd89c6db45..df645b06d97133998573e0a2672795d7bfe64d2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,7 @@
                         <id>default-cli</id>
                         <configuration>
                             <mainClass>
-                                edu.ntnu.idatt2003.mappevurderingprog2/edu.ntnu.idatt2003.mappevurderingprog2.HelloApplication
+                                edu.ntnu.idatt2003.mappevurderingprog2.MyApp
                             </mainClass>
                             <launcher>app</launcher>
                             <jlinkZipName>app</jlinkZipName>
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/MyApp.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/MyApp.java
new file mode 100644
index 0000000000000000000000000000000000000000..6cd1ab746b3a082516533b506c8d449c381e9e30
--- /dev/null
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/MyApp.java
@@ -0,0 +1,20 @@
+package edu.ntnu.idatt2003.mappevurderingprog2;
+
+import edu.ntnu.idatt2003.mappevurderingprog2.views.View;
+import javafx.application.Application;
+import javafx.stage.Stage;
+
+public class MyApp extends Application{
+
+  @Override
+  public void start(Stage primaryStage) {
+    View view = new View();
+    primaryStage.setScene(view.createScene());
+    primaryStage.show();
+  }
+
+  public static void main(String[] args) {
+    launch(args);
+  }
+}
+
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/Controller.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/Controller.java
new file mode 100644
index 0000000000000000000000000000000000000000..c1cb41d4f061599ae3d3d693584f7cb28d6eca8b
--- /dev/null
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/controllers/Controller.java
@@ -0,0 +1,5 @@
+package edu.ntnu.idatt2003.mappevurderingprog2.controllers;
+
+public class Controller{
+
+}
\ No newline at end of file
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/Complex.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/Complex.java
index 607be63038c5f88e85addb3d8c4fd1abbe20430f..3907032f58821bc3a8b0dd59ce6b6af22946dca8 100644
--- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/Complex.java
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/Complex.java
@@ -48,11 +48,18 @@ public class Complex extends Vector2D {
    */
   public Complex sqrt() {
     double r = Math.sqrt(Math.pow(getX0(), 2) + Math.pow(getX1(), 2));
-    double theta = Math.atan2(getX1(), getX0());
-    return new Complex(Math.sqrt(r) * Math.cos(theta / 2), Math.sqrt(r) * Math.sin(theta / 2));
+    double theta = Math.atan2(getX1(), getX0()) / 2.0;
+    double sqrtMag = Math.sqrt(r);
+    double realPart = sqrtMag * Math.cos(theta);
+    double imaginaryPart = sqrtMag * Math.sin(theta);
+    return new Complex(realPart, imaginaryPart);
   }
 
   public double magnitudeSquared() {
     return getX0() * getX0() + getX1() * getX1();
   }
+
+  public String toString() {
+    return "(" + getX0() + " + " + getX1() + "i)";
+  }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/JuliaTransform.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/JuliaTransform.java
index 205838327c1c858f688b274e06ebd269c634905f..ddb60f8ba1a7ad5ee2aed2c474d1226ed105d5d8 100644
--- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/JuliaTransform.java
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/JuliaTransform.java
@@ -53,7 +53,6 @@ public class JuliaTransform implements Transform2D {
     if (sign == -1) {
       subtracted = new Complex(-subtracted.getX0(), -subtracted.getX1());
     }
-
     return subtracted;
   }
 }
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosCanvas.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosCanvas.java
index 62168e6de68baf7615babff369d5395b3733b14f..3eed296c7220a19de63ea246dcfd96fa6d4361a6 100644
--- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosCanvas.java
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosCanvas.java
@@ -76,12 +76,17 @@ public class ChaosCanvas{
      */
 
     public void putPixel(Vector2D point) {
-        Vector2D indices = transformCoordsToIndices.transform(point);
-        int x = (int) indices.getX0();
-        int y = (int) indices.getX1();
-        canvas[x][y] = 1;
+      Vector2D indices = transformCoordsToIndices.transform(point);
+      int x = (int) indices.getX0();
+      int y = (int) indices.getX1();
+      if (x >= 0 && x < width && y >= 0 && y < height) {
+        if (canvas[x][y] != 1) { // Check if the pixel is not already set
+          canvas[x][y] = 1;
+        }
+      } else {
+        System.out.println("Indices out of bounds");
+      }
     }
-
     /**
       * Gets the canvas array.
 
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java
index 705aa751f92292e0d31b570287df427517780307..30b19d51591a9121292116c97e102b4a92d1bf33 100644
--- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGame.java
@@ -47,7 +47,7 @@ public class ChaosGame {
     ui.start();
   }
 
-  private static ChaosGameDescription createAffineChaosGameDescription() {
+  public static ChaosGameDescription createAffineChaosGameDescription() {
     List<Transform2D> transforms = new ArrayList<>();
     transforms.add(new AffineTransform2D(new Matrix2x2(0.5, 0, 0, 0.5), new Vector2D(0, 0)));
     transforms.add(new AffineTransform2D(new Matrix2x2(0.5, 0, 0, 0.5), new Vector2D(0.5, 0)));
@@ -55,13 +55,4 @@ public class ChaosGame {
     ChaosGameDescription description = new ChaosGameDescription(transforms, new Vector2D(0, 0), new Vector2D(1, 1));
     return description;
   }
-
-  private static ChaosGameDescription createJuliaChaosGameDescription() {
-    List<Transform2D> transforms = new ArrayList<>();
-    Complex julaPoint = new Complex(-0.74543, 0.11301);
-    int sign = -1;
-    transforms.add(new JuliaTransform(julaPoint, sign));
-    ChaosGameDescription description = new ChaosGameDescription(transforms, new Vector2D(-1.6, -1), new Vector2D(1.6, 1));
-    return description;
-  }
 }
\ No newline at end of file
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGameFileHandler.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGameFileHandler.java
index ae13c64664a676d6ed477cc0fdf380363a555c57..a5fa82ddf65f0fc6447b7b61bbfe66d130d56b2f 100644
--- a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGameFileHandler.java
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/models/chaos/ChaosGameFileHandler.java
@@ -32,7 +32,9 @@ public class ChaosGameFileHandler {
         if (transformType.equals("Affine2D")) {
           transforms.add(parseAffineTransform2D(line));
         } else if (transformType.equals("Julia")) {
-          transforms.add(parseJuliaTransform(line));
+          JuliaTransform transformation = parseJuliaTransform(line);
+          transforms.add(transformation);
+          transforms.add(new JuliaTransform(transformation.getPoint(), -transformation.getSign()));
         }
       }
     }
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/utils/Colorpalette.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/utils/Colorpalette.java
new file mode 100644
index 0000000000000000000000000000000000000000..00fce62feed702579903cde8b36c9d6f36c359d3
--- /dev/null
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/utils/Colorpalette.java
@@ -0,0 +1,9 @@
+package edu.ntnu.idatt2003.mappevurderingprog2.utils;
+
+import javafx.scene.paint.Color;
+
+public final class Colorpalette{
+  public static final Color White = Color.web("#FFFFFF");
+  public static final Color Black = Color.web("#000000");
+  public static  final Color Primary = Color.web("#778899");
+}
\ No newline at end of file
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/MainBar.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/MainBar.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9c30fa9d03e79fc0b7de2b83ad95b612dc1f189
--- /dev/null
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/Components/MainBar.java
@@ -0,0 +1,31 @@
+package edu.ntnu.idatt2003.mappevurderingprog2.views.Components;
+
+import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame;
+import edu.ntnu.idatt2003.mappevurderingprog2.views.View;
+import javafx.scene.control.Button;
+import javafx.scene.control.ToolBar;
+
+// In your MainBar class
+public class MainBar extends ToolBar {
+  private ChaosGame chaosGame;
+  private View view;
+
+  public MainBar(ChaosGame chaosGame, View view){
+    this.chaosGame = chaosGame;
+    this.view = view;
+
+    Button transformButton = new Button();
+    transformButton.setText("Transform");
+    transformButton.setOnAction(event -> performTransformation());
+    getItems().add(transformButton);
+  }
+
+  private void performTransformation() {
+    // Run steps on the existing ChaosGame instance
+    chaosGame.runSteps(10000);
+
+    // Get the ChaosCanvas and draw it on your application's canvas
+    view.redrawCanvas(chaosGame.getCanvas());
+  }
+
+}
\ No newline at end of file
diff --git a/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java
new file mode 100644
index 0000000000000000000000000000000000000000..aafd28416bbe408bc06afbb056e24acd96509e3e
--- /dev/null
+++ b/src/main/java/edu/ntnu/idatt2003/mappevurderingprog2/views/View.java
@@ -0,0 +1,76 @@
+package edu.ntnu.idatt2003.mappevurderingprog2.views;
+
+import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGame;
+import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosGameDescription;
+import edu.ntnu.idatt2003.mappevurderingprog2.utils.Colorpalette;
+import edu.ntnu.idatt2003.mappevurderingprog2.views.Components.MainBar;
+import edu.ntnu.idatt2003.mappevurderingprog2.models.chaos.ChaosCanvas;
+import javafx.geometry.Insets;
+import javafx.scene.Scene;
+import javafx.scene.canvas.Canvas;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.layout.Background;
+import javafx.scene.layout.BackgroundFill;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.CornerRadii;
+
+// In your View class
+public class View extends BorderPane {
+  public int [][] canvas;
+
+  private Canvas affineTransformationCanvas;
+  private GraphicsContext gc;
+
+  public Scene createScene() {
+    this.setBackground(new Background(new BackgroundFill(Colorpalette.Primary, CornerRadii.EMPTY, Insets.EMPTY)));
+
+    ChaosGameDescription description = ChaosGame.createAffineChaosGameDescription();
+    ChaosGame chaosGame = new ChaosGame(description, 600, 600);
+
+    affineTransformationCanvas = new Canvas(600, 400);
+
+    gc = affineTransformationCanvas.getGraphicsContext2D();
+
+    MainBar mainBar = new MainBar(chaosGame, this);
+
+    this.setTop(mainBar);
+    this.setCenter(affineTransformationCanvas);
+
+    return new Scene(this, 900, 700);
+  }
+
+
+  public void redrawCanvas(ChaosCanvas chaosCanvas) {
+    int[][] newCanvas = chaosCanvas.getCanvasArray();
+    this.canvas = newCanvas;
+    // Get the width and height of the canvas
+    double canvasWidth = affineTransformationCanvas.getWidth() - 20;
+    double canvasHeight = affineTransformationCanvas.getHeight() - 20;
+
+    // Calculate the size of each pixel
+    double pixelWidth = canvasWidth / canvas[0].length;
+    double pixelHeight = canvasHeight / canvas.length;
+
+    // Loop through each pixel in the canvas array
+    for (int i = 0; i < canvas.length; i++) {
+      for (int j = 0; j < canvas[i].length; j++) {
+        // Calculate the coordinates of the pixel on the canvas
+        double x = j * pixelWidth + 3;
+        double y = i * pixelHeight + 3;
+
+        // Set the fill color based on the pixel value
+        if (canvas[i][j] == 0) {
+          gc.setFill(Colorpalette.White);
+        } else {
+          gc.setFill(Colorpalette.Black);
+        }
+        // Fill a rectangle representing the pixel
+        gc.fillRect(x, y, pixelWidth, pixelHeight);
+      }
+    }
+  }
+
+
+
+
+}
\ No newline at end of file