diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2341c0fff2bbc41dcfd8bb28bb680006a4085c0e..0507f6d511df2365c8e0fb98e88e366b53d47819 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required(VERSION 3.16)
-project(OOAD_Refactoring_Demo)
+project(02-ifm1-refactoring)
 
 set(CMAKE_CXX_STANDARD 14)
 
-add_executable(OOAD_Refactoring_Demo main.cpp)
+add_executable(02-ifm1-refactoring main.cpp)
diff --git a/RefactoringDemo.cpp b/RefactoringDemo.cpp
index 88352fb54bf3ee1a2affbe890c42fbb8349abfb1..f43330969a1a7a2ad903d2fd9aff3b45b792932b 100644
--- a/RefactoringDemo.cpp
+++ b/RefactoringDemo.cpp
@@ -7,29 +7,56 @@ using namespace std;
 #include "DummyCode.cpp"
 /* End of code to be ignored */
 
-void pruefeRezepte(VorhandeneZutaten VZ){
-    int i, j, k;
-    bool da;
-    for (i=0; i<getAnzahlRezepte(); i++){
-        Rezept* r = getRezept(i);
-        cout << i << ". " << r->getRezeptName() << ": ";
-        da=true;
-        for (j = 0; j < r->getAnzahlRezeptZutaten(); j++) {
-            string z = r->getZutat(j);
-            bool OK= false;
-            for (k=0; k<VZ.getAnzahlZutaten();k++){
-                if (z==VZ.getVorhandeneZutat(k)){
-                    OK= true;
-                    break;
-                }
-            }
-            if (OK== false) {
-                da = false;
-                break;
-            }
+bool istZutatVorhanden(VorhandeneZutaten &vorhandeneZutaten, const string &zutat);
+bool sindAlleZutatenVorhanden(VorhandeneZutaten &vorhandeneZutaten, Rezept *rezept);
+
+void ausgabeRezept(int rezeptNummer, std::string name);
+void ausgabeResultat(std::string result);
+
+void pruefeRezept(VorhandeneZutaten &vorhandeneZutaten, int i);
+
+// This is the original function that has been refactored:
+void pruefeRezepte(VorhandeneZutaten vorhandeneZutaten){
+    for (int i=0; i<getAnzahlRezepte(); i++){
+        pruefeRezept(vorhandeneZutaten, i);
+    }
+}
+
+void pruefeRezept(VorhandeneZutaten &vorhandeneZutaten, int i) {
+    Rezept* rezept = getRezept(i);
+
+    ausgabeRezept(i,rezept->getRezeptName());
+
+    if (sindAlleZutatenVorhanden(vorhandeneZutaten, rezept)) {
+        ausgabeResultat(" mischbar!");
+    }
+    else {
+        ausgabeResultat(" nicht mischbar!");
+    }
+}
+
+
+void ausgabeRezept(int rezeptNummer, std::string name) {
+    cout << rezeptNummer << ". " << name << ": ";
+}
+void ausgabeResultat(std::string result) {
+    cout << result << endl;
+}
+bool sindAlleZutatenVorhanden(VorhandeneZutaten &vorhandeneZutaten, Rezept *rezept) {
+    for (int j = 0; j < rezept->getAnzahlRezeptZutaten(); j++) {
+        string zutat = rezept->getZutat(j);
+        if (!istZutatVorhanden(vorhandeneZutaten, zutat)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+bool istZutatVorhanden(VorhandeneZutaten &vorhandeneZutaten, const string &zutat) {
+    for (int k=0; k < vorhandeneZutaten.getAnzahlZutaten(); k++){
+        if (zutat == vorhandeneZutaten.getVorhandeneZutat(k)){
+            return true;
         }
-        if (da == true) {
-            cout << " mischbar\n"; }
-        else {	cout << " nicht mischbar!\n"; }
     }
-}
\ No newline at end of file
+    return false;
+}
diff --git a/main.cpp b/main.cpp
index 6b29d1746743d30c9c117ae1e442959d39c4785d..9620d1ddb98fec36663fad6699c9cde4203ec52c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -5,5 +5,8 @@
 int main() {
     std::cout << "This is the Refactoring Demo!" << std::endl;
 
+    VorhandeneZutaten vorhandeneZutaten;
+    pruefeRezepte(vorhandeneZutaten);
+
     return 0;
 }