diff --git a/src/main/java/mi/hdm/FxmlGuiDriver.java b/src/main/java/mi/hdm/FxmlGuiDriver.java
index a2704265f814753af861c910f02a7812256ff641..b3c0a2d25372a0993e8ed534e9a9415aac8828e0 100644
--- a/src/main/java/mi/hdm/FxmlGuiDriver.java
+++ b/src/main/java/mi/hdm/FxmlGuiDriver.java
@@ -5,7 +5,6 @@ import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.stage.Stage;
-
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -26,7 +25,6 @@ public class FxmlGuiDriver extends Application {
     }
 
     public void start(Stage stage) throws Exception {
-
         log.info("Starting Hello JavaFX and Maven demonstration application");
 
         final String fxmlFile = "/fxml/hello.fxml";
diff --git a/src/main/java/mi/hdm/TastyPages.java b/src/main/java/mi/hdm/TastyPages.java
index 6172eb399c9490342d566a7aa358fd59bbd6322e..b2e99663442f26dd62d61ab85ddd90b9dcfda075 100644
--- a/src/main/java/mi/hdm/TastyPages.java
+++ b/src/main/java/mi/hdm/TastyPages.java
@@ -1,12 +1,15 @@
 package mi.hdm;
 
 import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
 import javafx.scene.Scene;
-import javafx.scene.layout.GridPane;
 import javafx.stage.Stage;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.io.IOException;
+
 public class TastyPages extends Application {
     private final static Logger log = LogManager.getLogger(TastyPages.class);
 
@@ -19,12 +22,16 @@ public class TastyPages extends Application {
     public void save() {}
 
     @Override
-    public void start(Stage stage) {
-        final GridPane gridPane = new GridPane();
-        final Scene scene = new Scene(gridPane, 1400, 800);
+    public void start(Stage stage) throws IOException {
+        final String fxmlFile = "/fxml/recipe-view.fxml";
+        log.debug("Loading FXML for main view from: {}", fxmlFile);
+        final FXMLLoader loader = new FXMLLoader();
+        final Parent rootNode = (Parent) loader.load(getClass().getResourceAsStream(fxmlFile));
+
+        final Scene scene = new Scene(rootNode, 1400, 800);
         //scene.getStylesheets().add("/styles/styles.css");
 
-        stage.setTitle("Start page");
+        stage.setTitle("View Recipe");
         stage.setMaximized(true); //open scene in full screen
         stage.setScene(scene);
         stage.show();
diff --git a/src/main/java/mi/hdm/controllers/BaseController.java b/src/main/java/mi/hdm/controllers/BaseController.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7a6ea7704aee08e9b37af2b582f328e903cd97e
--- /dev/null
+++ b/src/main/java/mi/hdm/controllers/BaseController.java
@@ -0,0 +1,9 @@
+package mi.hdm.controllers;
+
+import java.util.Map;
+
+public class BaseController {
+    protected final static Map<Views, String> VIEWS = Map.of(
+            Views.MAIN, "/fxml/main.fxml",
+            Views.RECIPE_VIEW, "fxml/recipe-view.fxml");
+}
diff --git a/src/main/java/mi/hdm/controllers/RecipeViewController.java b/src/main/java/mi/hdm/controllers/RecipeViewController.java
new file mode 100644
index 0000000000000000000000000000000000000000..edd3d954441e46fc62d240cc2e0ac23b1e4701db
--- /dev/null
+++ b/src/main/java/mi/hdm/controllers/RecipeViewController.java
@@ -0,0 +1,4 @@
+package mi.hdm.controllers;
+
+public class RecipeViewController extends BaseController {
+}
diff --git a/src/main/java/mi/hdm/controllers/Views.java b/src/main/java/mi/hdm/controllers/Views.java
new file mode 100644
index 0000000000000000000000000000000000000000..e877605b8ab14c7a0cdda3a1bd2b0cb37dd79f27
--- /dev/null
+++ b/src/main/java/mi/hdm/controllers/Views.java
@@ -0,0 +1,6 @@
+package mi.hdm.controllers;
+
+public enum Views {
+    MAIN,
+    RECIPE_VIEW
+}
diff --git a/src/main/java/mi/hdm/filesystem/CSVParser.java b/src/main/java/mi/hdm/filesystem/CSVParser.java
index 59fa405cd904c649ca39b6174822fe224faa6148..ed4bca7a42c4f76d51f42aba4e6333013cea30c8 100644
--- a/src/main/java/mi/hdm/filesystem/CSVParser.java
+++ b/src/main/java/mi/hdm/filesystem/CSVParser.java
@@ -102,6 +102,7 @@ public class CSVParser {
     }
 
     private double parseNumberFromString(String candidate) {
+        //TODO check unit before returning
         if (candidate.isBlank()) return 0.0;
 
         StringBuilder numValue = new StringBuilder();
diff --git a/src/main/java/mi/hdm/recipes/Category.java b/src/main/java/mi/hdm/recipes/Category.java
index 19326405d515165161fa9237d079e7cbaf627c35..d66b3712c1b233c8566f755e9dc2189be234310e 100644
--- a/src/main/java/mi/hdm/recipes/Category.java
+++ b/src/main/java/mi/hdm/recipes/Category.java
@@ -31,7 +31,7 @@ public class Category {
     @Override
     public boolean equals(Object o){
         if (o instanceof Category c) {
-            return this.name.equals(c.getName()) || this.colourCode == c.getColourCode();
+            return this.name.equals(c.getName()) && this.colourCode == c.getColourCode();
         }
         return false;
     }
diff --git a/src/main/java/mi/hdm/recipes/Ingredient.java b/src/main/java/mi/hdm/recipes/Ingredient.java
index 7fabd022b2ad17c3a7a96dd819b33f8316217058..d07cc2eacca41f3487aac7a98534acf6a6e36553 100644
--- a/src/main/java/mi/hdm/recipes/Ingredient.java
+++ b/src/main/java/mi/hdm/recipes/Ingredient.java
@@ -35,9 +35,8 @@ public class Ingredient implements RecipeComponent {
 
     @Override
     public boolean equals(Object o) {
-        if (o instanceof Ingredient) {
-            Ingredient in = (Ingredient) o;
-            return this.name.equals(in.getName());
+        if (o instanceof Ingredient in) {
+            return this.name.equals(in.getName()) && this.unit.equals(in.getMeasurement()) && this.nutritionTable.equals(in.getNutritionTable());
         }
         return false;
     }
diff --git a/src/main/java/mi/hdm/recipes/Recipe.java b/src/main/java/mi/hdm/recipes/Recipe.java
index bc7523d35d3e2e0e933e6b675c4b8763100f8110..4d1d548fd40cdb79537facdc53652b171cb74148 100644
--- a/src/main/java/mi/hdm/recipes/Recipe.java
+++ b/src/main/java/mi/hdm/recipes/Recipe.java
@@ -8,12 +8,12 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 public class Recipe implements RecipeComponent {
     //TODO: Add filepath for image
     private static final Logger log = LogManager.getLogger(Recipe.class);
 
-
     private Map<RecipeComponent, Integer> ingredients;
     private String name;
     private String description;
@@ -172,9 +172,9 @@ public class Recipe implements RecipeComponent {
 
     @Override
     public boolean equals(Object o) {
-        if (o instanceof Recipe r) {
-            return r.getName().equals(this.name);
-        }
+        if (this == o) return true;
+        if (o instanceof Recipe recipe)
+            return preparationTimeMins == recipe.preparationTimeMins && Objects.equals(ingredients, recipe.ingredients) && Objects.equals(name, recipe.name) && Objects.equals(description, recipe.description) && Objects.equals(preparation, recipe.preparation) && Objects.equals(categories, recipe.categories) && Objects.equals(nutritionTable, recipe.nutritionTable) && Objects.equals(creationTime, recipe.creationTime);
         return false;
     }
 
diff --git a/src/main/java/mi/hdm/shoppingList/ShoppingList.java b/src/main/java/mi/hdm/shoppingList/ShoppingList.java
index 0ad8c90643f119d00783f93aa49a66b7a245eedb..a0c45345e838038b656f62c59e19d2e8ab07c730 100644
--- a/src/main/java/mi/hdm/shoppingList/ShoppingList.java
+++ b/src/main/java/mi/hdm/shoppingList/ShoppingList.java
@@ -40,7 +40,7 @@ public class ShoppingList {
         log.info("Added {} to shopping list.", ingredient.getName());
     }
 
-    public void addAllToShppingList(Recipe recipe) {
+    public void addAllToShoppingList(Recipe recipe) {
         recipe.getIngredients().keySet()
                 .forEach(element -> {
                     if (element instanceof Ingredient i)
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
index f3b1e62a8849cdbfc2a240e0a81f1fd98ff695ee..80f4d7b8135abf9e7d81a0f022644643f70a0c04 100644
--- a/src/main/java/module-info.java
+++ b/src/main/java/module-info.java
@@ -5,4 +5,5 @@ module gui {
 
     opens mi.hdm to javafx.fxml;
     exports mi.hdm;
+    exports mi.hdm.controllers;
 }
\ No newline at end of file
diff --git a/src/main/resources/fxml/recipe-view.fxml b/src/main/resources/fxml/recipe-view.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..95a176cf22eb78d075c3b3d0fe8454ed781b9ddd
--- /dev/null
+++ b/src/main/resources/fxml/recipe-view.fxml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.Insets?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<AnchorPane prefHeight="400.0" prefWidth="677.0" xmlns="http://javafx.com/javafx/17.0.2-ea"
+            xmlns:fx="http://javafx.com/fxml/1" fx:controller="mi.hdm.controllers.RecipeViewController">
+    <SplitPane dividerPositions="0.15" orientation="VERTICAL" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"
+               AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
+        <GridPane alignment="CENTER" prefHeight="100.0" prefWidth="675.0" style="-fx-background-color: D91C1C;">
+            <columnConstraints>
+                <ColumnConstraints percentWidth="15"/>
+                <ColumnConstraints percentWidth="50"/>
+                <ColumnConstraints percentWidth="35"/>
+            </columnConstraints>
+            <MenuButton mnemonicParsing="false" text="MENU">
+                <items>
+                    <MenuItem mnemonicParsing="false" text="Action 1"/>
+                    <MenuItem mnemonicParsing="false" text="Action 2"/>
+                </items>
+            </MenuButton>
+            <Label alignment="CENTER" prefHeight="17.0" prefWidth="352.0" GridPane.columnIndex="1">LOGO</Label>
+            <TextField GridPane.columnIndex="2"/>
+            <rowConstraints>
+                <RowConstraints/>
+            </rowConstraints>
+            <padding>
+                <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
+            </padding>
+        </GridPane>
+        <TilePane prefHeight="333.0" prefWidth="675.0"/>
+    </SplitPane>
+</AnchorPane>
diff --git a/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java b/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java
index 5b2b4c5f54bbb9f29c8569647705f73311a23414..b2756c64d1aa3d243af7a7360c073631781423cc 100644
--- a/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java
+++ b/src/test/java/mi/hdm/shoppingList/ShoppingListTest.java
@@ -42,7 +42,7 @@ class ShoppingListTest {
         Map<Ingredient, Boolean> expected = Map.of(ing1, false, ing2, false);
 
         //when
-        underTest.addAllToShppingList(r1);
+        underTest.addAllToShoppingList(r1);
 
         //expect
         assertEquals(expected, underTest.getList());