diff --git a/PuzzlePlayer/SettingForm.cs b/PuzzlePlayer/SettingForm.cs
index 0b9fc16703fac7fa5b1db99f9876bf9f134d0721..f4a79318d47bfd8624eac73d9636dede492a2d12 100644
--- a/PuzzlePlayer/SettingForm.cs
+++ b/PuzzlePlayer/SettingForm.cs
@@ -8,18 +8,81 @@ using System.Windows.Forms;
 
 namespace PuzzlePlayer_Namespace
 {
+    // struct for saving settings
+    internal struct Settings(Theme t, string fName, int fSize)
+    {
+        public Theme theme = t;
+        public string fontName = fName;
+        public int fontSize = fSize;
+
+        public override string ToString()
+        {
+            return $"SETTINGS|{fontName}|{fontSize}|{theme.ToString()}";
+        }
+
+        public static Settings FromString(string s)
+        {
+            string[] split = s.Split('|');
+            if (split[0] != "SETTINGS")
+                throw new Exception("Invallid input string in FromString methode from Settings struct");
+
+            string themeString = "";
+            for (int i = 3; i < split.Length; i++) // add everything after the fontsize to the themestring
+            {
+                themeString += split[i];
+            }
+
+            return new Settings(Theme.FromString(themeString), split[1], int.Parse(split[2]));
+        }
+    }
+
+    // struct for saving themes
+    internal struct Theme(string s, Color col1, Color col2, Color col3)
+    {
+        public string name = s;
+        public Color primaryColor = col1;
+        public Color secondaryColor = col2;
+        public Color tertiaryColor = col3;
+
+        public override string ToString()
+        {
+            return $"THEME|{name}|{primaryColor.ToArgb()}|{secondaryColor.ToArgb()}|{tertiaryColor.ToArgb()}|";
+        }
+
+        public static Theme FromString(string s)
+        {
+            string[] split = s.Split('|');
+            if (split[0] != "THEME")
+                throw new Exception("Invallid input string in FromString methode from Theme struct");
+
+            Color c1 = Color.FromArgb(int.Parse(split[2]));
+            Color c2 = Color.FromArgb(int.Parse(split[3]));
+            Color c3 = Color.FromArgb(int.Parse(split[4]));
+
+            return new Theme(split[1],c1,c2,c3);
+        }
+    }
+
     internal class SettingForm : Form
     {
         // Public variables for all settings
+        // Currently they are set to their default values
         public static Color primaryColor = Color.FromArgb(66, 69, 73);
         public static Color secondaryColor = Color.FromArgb(54, 57, 62);
         public static Color tertiaryColor = Color.FromArgb(0, 0, 0);
         public static int fontSize = 16;
-        public static Font mainFont = new Font("Gotham", fontSize);
+        public static string mainFontName = "Gotham";
+        public static Font mainFont = new Font(mainFontName, fontSize);
         public static FlowLayoutPanel settingsPanel;
 
+        // For storing user settings
+        private Settings settings;
+        private static string filePath = "Settings.txt";
+
         public SettingForm()
         {
+            settings = GetUserSettings();
+
             SetUpUi();
 
             this.BackColor = primaryColor;
@@ -31,6 +94,36 @@ namespace PuzzlePlayer_Namespace
             Invalidate();
         }
 
+        private Settings GetUserSettings()
+        {
+            StreamReader reader = new StreamReader(System.IO.File.OpenRead(filePath));
+            Settings? newSettings = null;
+            string s = "";
+            while ((s = reader.ReadLine()) != null)
+            {
+                if(s.StartsWith("SETTINGS"))
+                {
+                    newSettings = Settings.FromString(s);
+                    break;
+                }   
+            }
+            reader.Dispose();
+
+            if (newSettings != null)
+                return (Settings)newSettings;
+            else
+                MakeNewSettingsFile();          // if the settings could not be read then a new file must be made
+
+            return GetUserSettings();           // after the new file is made it is save to call getUserSettings again
+        }
+
+        private void MakeNewSettingsFile()
+        {
+            FileStream fs = File.Create(filePath);
+            StreamReader reader = new StreamReader(fs);
+            throw new NotImplementedException();
+        }
+
         private void SetUpUi()
         {
             this.ClientSize = new Size(1115, 755);