diff --git a/GUI/v1a/ViewModels/ModSettingsScreenVM.cs b/GUI/v1a/ViewModels/ModSettingsScreenVM.cs
index 638bad28..cd89020c 100644
--- a/GUI/v1a/ViewModels/ModSettingsScreenVM.cs
+++ b/GUI/v1a/ViewModels/ModSettingsScreenVM.cs
@@ -235,7 +235,7 @@ private void ExecuteRevert()
                             tuple =>
                             {
                                 //Do action
-                                tuple.SettingsInstance = SettingsDatabase.ResetSettingsInstance(SelectedMod.SettingsInstance);
+                                tuple.SettingsInstance = SettingsDatabase.ResetSettings(SelectedMod.SettingsInstance.Id);
                                 tuple.VM.RefreshValues();
                                 ExecuteSelect(null);
                                 ExecuteSelect(tuple.VM);
@@ -243,7 +243,7 @@ private void ExecuteRevert()
                             tuple =>
                             {
                                 //Undo action
-                                SettingsDatabase.OverrideSettingsWithId(tuple.SettingsInstance, tuple.SettingsInstance.Id);
+                                SettingsDatabase.OverrideSettings(tuple.SettingsInstance);
                                 tuple.VM.SettingsInstance = tuple.SettingsInstance;
                                 tuple.VM.RefreshValues();
                                 if (SelectedMod == tuple.VM)
diff --git a/GUI/v1a/ViewModels/ModSettingsVM.cs b/GUI/v1a/ViewModels/ModSettingsVM.cs
index a1cab33b..7d67927a 100644
--- a/GUI/v1a/ViewModels/ModSettingsVM.cs
+++ b/GUI/v1a/ViewModels/ModSettingsVM.cs
@@ -21,7 +21,11 @@ public SettingsBase SettingsInstance
             set => ModSettingsDefinition.SettingsInstance = value;
         }
         public UndoRedoStack URS { get; } = new UndoRedoStack();
-
+        /// <summary>
+        /// XSLT?
+        /// </summary>
+        [DataSourceProperty]
+        public int UIVersion => SettingsInstance.UIVersion;
         [DataSourceProperty]
         public string ModName => SettingsInstance.ModName;
         [DataSourceProperty]
diff --git a/Interfaces/ISettingsProvider.cs b/Interfaces/ISettingsProvider.cs
index d70601dd..5053d35a 100644
--- a/Interfaces/ISettingsProvider.cs
+++ b/Interfaces/ISettingsProvider.cs
@@ -11,7 +11,7 @@ public interface ISettingsProvider
         bool RegisterSettings(SettingsBase settingsClass);
         SettingsBase? GetSettings(string uniqueId);
         void SaveSettings(SettingsBase settingsInstance);
-        bool OverrideSettingsWithId(SettingsBase settings, string Id);
-        SettingsBase ResetSettingsInstance(SettingsBase settingsInstance);
+        bool OverrideSettings(SettingsBase settings);
+        SettingsBase ResetSettings(string id);
     }
 }
\ No newline at end of file
diff --git a/MBOptionScreen.csproj b/MBOptionScreen.csproj
index f376a941..f7ca4b52 100644
--- a/MBOptionScreen.csproj
+++ b/MBOptionScreen.csproj
@@ -14,7 +14,7 @@
     <PackageId>Bannerlord.MBOptionScreen</PackageId>
     <IncludeSymbols>true</IncludeSymbols>
     <SymbolPackageFormat>snupkg</SymbolPackageFormat>
-    <Version>1.1.0</Version>
+    <Version>1.1.1</Version>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/Settings/AttributeSettingsBase.cs b/Settings/AttributeSettingsBase.cs
index fa61903d..0e92e3f0 100644
--- a/Settings/AttributeSettingsBase.cs
+++ b/Settings/AttributeSettingsBase.cs
@@ -9,6 +9,8 @@ namespace MBOptionScreen.Settings
 {
     public abstract class AttributeSettings<T> : SettingsBase<T> where T : SettingsBase, new()
     {
+        protected override char SubGroupDelimiter => '/';
+
         public override List<SettingPropertyGroupDefinition> GetSettingPropertyGroups()
         {
             var groups = new List<SettingPropertyGroupDefinition>();
diff --git a/Settings/SettingsBase.cs b/Settings/SettingsBase.cs
index 3099d9ef..73dac5a1 100644
--- a/Settings/SettingsBase.cs
+++ b/Settings/SettingsBase.cs
@@ -27,6 +27,7 @@ public abstract class SettingsBase
         public abstract string Id { get; set; }
         public abstract string ModuleFolderName { get; }
         public abstract string ModName { get; }
+        public virtual int UIVersion => 1;
         public virtual string SubFolder => "";
         protected virtual char SubGroupDelimiter => '/';
 
diff --git a/Settings/SettingsDatabase.cs b/Settings/SettingsDatabase.cs
index 9037928d..a48287f4 100644
--- a/Settings/SettingsDatabase.cs
+++ b/Settings/SettingsDatabase.cs
@@ -16,8 +16,8 @@ internal static class SettingsDatabase
 
         public static void SaveSettings(SettingsBase settingsInstance) => SettingsStorage.SaveSettings(settingsInstance);
 
-        public static bool OverrideSettingsWithId(SettingsBase settings, string Id) => SettingsStorage.OverrideSettingsWithId(settings, Id);
+        public static bool OverrideSettings(SettingsBase settings) => SettingsStorage.OverrideSettings(settings);
 
-        public static SettingsBase ResetSettingsInstance(SettingsBase settingsInstance) => SettingsStorage.ResetSettingsInstance(settingsInstance);
+        public static SettingsBase ResetSettings(string id) => SettingsStorage.ResetSettings(id);
     }
 }
\ No newline at end of file
diff --git a/Settings/SimpleJsonSettingsProvider.cs b/Settings/SimpleJsonSettingsProvider.cs
index 71d618e3..c5ac0174 100644
--- a/Settings/SimpleJsonSettingsProvider.cs
+++ b/Settings/SimpleJsonSettingsProvider.cs
@@ -59,8 +59,7 @@ public bool RegisterSettings(SettingsBase settingsInstance)
 
             LoadedSettings.Add(settingsInstance.Id, settingsInstance);
 
-            var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName,
-                $"{settingsInstance.Id}.json");
+            var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, settingsInstance.SubFolder ?? "", $"{settingsInstance.Id}.json");
             var file = new FileInfo(path);
             if (file.Exists)
             {
@@ -88,7 +87,7 @@ public void SaveSettings(SettingsBase settingsInstance)
             if (settingsInstance == null || !LoadedSettings.ContainsKey(settingsInstance.Id))
                 return;
 
-            var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, $"{settingsInstance.Id}.json");
+            var path = Path.Combine(_defaultRootFolder, settingsInstance.ModuleFolderName, settingsInstance.SubFolder ?? "", $"{settingsInstance.Id}.json");
             var file = new FileInfo(path);
 
             var content = JsonConvert.SerializeObject(settingsInstance, _jsonSerializerSettings);
@@ -97,22 +96,24 @@ public void SaveSettings(SettingsBase settingsInstance)
             writer.Write(content);
         }
 
-        public bool OverrideSettingsWithId(SettingsBase newSettingsInstance, string id)
+        public bool OverrideSettings(SettingsBase newSettingsInstance)
         {
             if (newSettingsInstance == null || !LoadedSettings.ContainsKey(newSettingsInstance.Id))
                 return false;
 
-            LoadedSettings[id] = newSettingsInstance;
+            LoadedSettings[newSettingsInstance.Id] = newSettingsInstance;
+            SaveSettings(newSettingsInstance);
             return true;
         }
 
-        public SettingsBase ResetSettingsInstance(SettingsBase settingsInstance)
+        public SettingsBase ResetSettings(string id)
         {
-            if (settingsInstance == null || !LoadedSettings.ContainsKey(settingsInstance.Id))
+            if (!LoadedSettings.ContainsKey(id))
                 return null;
 
-            var defaultSettingsInstance = (SettingsBase) Activator.CreateInstance(settingsInstance.GetType());
-            LoadedSettings[settingsInstance.Id] = defaultSettingsInstance;
+            var defaultSettingsInstance = (SettingsBase) Activator.CreateInstance(LoadedSettings[id].GetType());
+            LoadedSettings[id] = defaultSettingsInstance;
+            SaveSettings(defaultSettingsInstance);
             return defaultSettingsInstance;
         }
 
diff --git a/Settings/Wrapper/WrapperSettings.cs b/Settings/Wrapper/WrapperSettings.cs
index 7b359d6b..48953223 100644
--- a/Settings/Wrapper/WrapperSettings.cs
+++ b/Settings/Wrapper/WrapperSettings.cs
@@ -17,11 +17,17 @@ internal class WrapperSettings : SettingsBase
         private PropertyInfo IdProperty { get; }
         private PropertyInfo ModuleFolderNameProperty { get; }
         private PropertyInfo ModNameProperty { get; }
+        private PropertyInfo UIVersionProperty { get; }
+        private PropertyInfo SubFolderProperty { get; }
+        private PropertyInfo SubGroupDelimiterProperty { get; }
 
 
         public override string Id { get => (string) IdProperty.GetValue(_object); set => IdProperty.SetValue(_object, value); }
         public override string ModuleFolderName => (string) ModuleFolderNameProperty.GetValue(_object);
         public override string ModName => (string) ModNameProperty.GetValue(_object);
+        public override int UIVersion => UIVersionProperty.GetValue(_object) as int? ?? 1;
+        public override string SubFolder => SubFolderProperty.GetValue(_object) as string ?? "";
+        protected override char SubGroupDelimiter => SubGroupDelimiterProperty.GetValue(_object) as char? ?? '/';
 
         public WrapperSettings(object @object)
         {
@@ -31,6 +37,9 @@ public WrapperSettings(object @object)
                          type.GetProperty("ID", BindingFlags.Instance | BindingFlags.Public);
             ModuleFolderNameProperty = type.GetProperty("ModuleFolderName", BindingFlags.Instance | BindingFlags.Public);
             ModNameProperty = type.GetProperty("ModName", BindingFlags.Instance | BindingFlags.Public);
+            UIVersionProperty = type.GetProperty("UIVersion", BindingFlags.Instance | BindingFlags.Public);
+            SubFolderProperty = type.GetProperty("SubFolder", BindingFlags.Instance | BindingFlags.Public);
+            SubGroupDelimiterProperty = type.GetProperty("SubGroupDelimiter", BindingFlags.Instance | BindingFlags.Public);
         }
 
         public override List<SettingPropertyGroupDefinition> GetSettingPropertyGroups()