about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-01-24 00:07:44 +0100
committerRory& <root@rory.gay>2025-01-24 00:07:44 +0100
commit3737b395b9bd510d6a44622bc21d99a7e5ae605d (patch)
tree79419546ca11f4940b626ad66fea026ff7b730d6
parentDisable trimming, explicitly didsable runtime features (diff)
downloadMatrixUtils-main.tar.xz
LibMatrix changes HEAD main
-rw-r--r--.idea/.idea.MatrixUtils/.idea/.name2
m---------LibMatrix0
-rw-r--r--MatrixUtils.Abstractions/FileStorageProvider.cs1
-rw-r--r--MatrixUtils.DmSpaced/Program.cs14
-rw-r--r--MatrixUtils.LibDMSpace/DMSpaceRoom.cs1
-rw-r--r--MatrixUtils.LibDMSpace/StateEvents/DMRoomInfo.cs1
-rw-r--r--MatrixUtils.LibDMSpace/StateEvents/DMSpaceChildLayer.cs1
-rw-r--r--MatrixUtils.LibDMSpace/StateEvents/DMSpaceInfo.cs1
-rw-r--r--MatrixUtils.Web.Server/MatrixUtils.Web.Server.csproj2
-rw-r--r--MatrixUtils.Web/App.razor3
-rw-r--r--MatrixUtils.Web/Classes/RoomCreationTemplates/DefaultRoomCreationTemplate.cs4
-rw-r--r--MatrixUtils.Web/MatrixUtils.Web.csproj10
-rw-r--r--MatrixUtils.Web/Pages/Dev/DevOptions.razor1
-rw-r--r--MatrixUtils.Web/Pages/Dev/DevUtilities.razor2
-rw-r--r--MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor2
-rw-r--r--MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor2
-rw-r--r--MatrixUtils.Web/Pages/HSEInit.razor2
-rw-r--r--MatrixUtils.Web/Pages/Index.razor22
-rw-r--r--MatrixUtils.Web/Pages/InvalidSession.razor18
-rw-r--r--MatrixUtils.Web/Pages/Labs/Client/Index.razor4
-rw-r--r--MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor2
-rw-r--r--MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor2
-rw-r--r--MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor1
-rw-r--r--MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor1
-rw-r--r--MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor2
-rw-r--r--MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor1
-rw-r--r--MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor1
-rw-r--r--MatrixUtils.Web/Pages/LoginPage.razor16
-rw-r--r--MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor7
-rw-r--r--MatrixUtils.Web/Pages/Rooms/Create.razor9
-rw-r--r--MatrixUtils.Web/Pages/Rooms/Index.razor4
-rw-r--r--MatrixUtils.Web/Pages/Rooms/PolicyList.razor5
-rw-r--r--MatrixUtils.Web/Pages/Rooms/PolicyList2.razor3
-rw-r--r--MatrixUtils.Web/Pages/Rooms/PolicyLists.razor3
-rw-r--r--MatrixUtils.Web/Pages/Rooms/Space.razor3
-rw-r--r--MatrixUtils.Web/Pages/Rooms/StateEditor.razor4
-rw-r--r--MatrixUtils.Web/Pages/Rooms/StateViewer.razor4
-rw-r--r--MatrixUtils.Web/Pages/Rooms/Timeline.razor3
-rw-r--r--MatrixUtils.Web/Pages/ServerInfo.razor2
-rw-r--r--MatrixUtils.Web/Pages/StreamTest.razor3
-rw-r--r--MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor2
-rw-r--r--MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor2
-rw-r--r--MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor6
-rw-r--r--MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor2
-rw-r--r--MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor2
-rw-r--r--MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor2
-rw-r--r--MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor7
-rw-r--r--MatrixUtils.Web/Pages/Tools/InviteCounter.razor8
-rw-r--r--MatrixUtils.Web/Pages/Tools/MassCMEBan.razor8
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor6
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor5
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor5
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor4
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor3
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor2
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor5
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor3
-rw-r--r--MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor148
-rw-r--r--MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor3
-rw-r--r--MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor7
-rw-r--r--MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor7
-rw-r--r--MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor2
-rw-r--r--MatrixUtils.Web/Pages/User/DMManager.razor3
-rw-r--r--MatrixUtils.Web/Pages/User/Profile.razor7
-rw-r--r--MatrixUtils.Web/Shared/InlineUserItem.razor3
-rw-r--r--MatrixUtils.Web/Shared/MainLayout.razor3
-rw-r--r--MatrixUtils.Web/Shared/MxcAvatar.razor3
-rw-r--r--MatrixUtils.Web/Shared/RoomListComponents/RoomListCategory.razor2
-rw-r--r--MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor2
-rw-r--r--MatrixUtils.Web/Shared/RoomListItem.razor3
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor1
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor2
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor1
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor1
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor1
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor2
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor1
-rw-r--r--MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor1
-rw-r--r--MatrixUtils.Web/Shared/UserListItem.razor2
-rw-r--r--MatrixUtils.Web/_Imports.razor11
m---------MxApiExtensions0
81 files changed, 225 insertions, 232 deletions
diff --git a/.idea/.idea.MatrixUtils/.idea/.name b/.idea/.idea.MatrixUtils/.idea/.name
index 58beadf..65d8b74 100644
--- a/.idea/.idea.MatrixUtils/.idea/.name
+++ b/.idea/.idea.MatrixUtils/.idea/.name
@@ -1 +1 @@
-MatrixRoomUtils
\ No newline at end of file
+MatrixUtils
\ No newline at end of file
diff --git a/LibMatrix b/LibMatrix
-Subproject 0c46901fbccb994e8ac9086536055819f2a2146
+Subproject cc61a7ae65d427e862e67ed92ec39f449cb2334
diff --git a/MatrixUtils.Abstractions/FileStorageProvider.cs b/MatrixUtils.Abstractions/FileStorageProvider.cs
index fbe068d..1083002 100644
--- a/MatrixUtils.Abstractions/FileStorageProvider.cs
+++ b/MatrixUtils.Abstractions/FileStorageProvider.cs
@@ -1,7 +1,6 @@
 using System.Diagnostics.CodeAnalysis;
 using System.Text.Json;
 using ArcaneLibs.Extensions;
-using LibMatrix.Extensions;
 using LibMatrix.Interfaces.Services;
 using Microsoft.Extensions.Logging;
 
diff --git a/MatrixUtils.DmSpaced/Program.cs b/MatrixUtils.DmSpaced/Program.cs
index ae352b7..6ed6cbc 100644
--- a/MatrixUtils.DmSpaced/Program.cs
+++ b/MatrixUtils.DmSpaced/Program.cs
@@ -22,17 +22,17 @@ if (Environment.GetEnvironmentVariable("MODERATIONBOT_APPSETTINGS_PATH") is stri
     builder.ConfigureAppConfiguration(x => x.AddJsonFile(path));
 
 var host = builder.ConfigureServices((_, services) => {
-    services.AddScoped<TieredStorageService>(x =>
-        new TieredStorageService(
-            cacheStorageProvider: new FileStorageProvider("bot_data/cache/"),
-            dataStorageProvider: new FileStorageProvider("bot_data/data/")
-        )
-    );
+    // services.AddScoped<TieredStorageService>(x =>
+    //     new TieredStorageService(
+    //         cacheStorageProvider: new FileStorageProvider("bot_data/cache/"),
+    //         dataStorageProvider: new FileStorageProvider("bot_data/data/")
+    //     )
+    // );
     services.AddSingleton<ModerationBotConfiguration>();
 
     services.AddRoryLibMatrixServices();
 
-    services.AddSingleton<ModerationBotRoomProvider>();
+    // services.AddSingleton<ModerationBotRoomProvider>();
 
     services.AddHostedService<ModerationBot.ModerationBot>();
 }).UseConsoleLifetime().Build();
diff --git a/MatrixUtils.LibDMSpace/DMSpaceRoom.cs b/MatrixUtils.LibDMSpace/DMSpaceRoom.cs
index e2c8192..55a7812 100644
--- a/MatrixUtils.LibDMSpace/DMSpaceRoom.cs
+++ b/MatrixUtils.LibDMSpace/DMSpaceRoom.cs
@@ -1,4 +1,3 @@
-using System.Net;
 using ArcaneLibs.Extensions;
 using LibMatrix;
 using LibMatrix.EventTypes.Spec.State;
diff --git a/MatrixUtils.LibDMSpace/StateEvents/DMRoomInfo.cs b/MatrixUtils.LibDMSpace/StateEvents/DMRoomInfo.cs
index bc595b5..f7e1e20 100644
--- a/MatrixUtils.LibDMSpace/StateEvents/DMRoomInfo.cs
+++ b/MatrixUtils.LibDMSpace/StateEvents/DMRoomInfo.cs
@@ -1,6 +1,5 @@
 using System.Text.Json.Serialization;
 using LibMatrix.EventTypes;
-using LibMatrix.Interfaces;
 
 namespace MatrixUtils.LibDMSpace.StateEvents;
 
diff --git a/MatrixUtils.LibDMSpace/StateEvents/DMSpaceChildLayer.cs b/MatrixUtils.LibDMSpace/StateEvents/DMSpaceChildLayer.cs
index 16c7b70..886c34d 100644
--- a/MatrixUtils.LibDMSpace/StateEvents/DMSpaceChildLayer.cs
+++ b/MatrixUtils.LibDMSpace/StateEvents/DMSpaceChildLayer.cs
@@ -1,6 +1,5 @@
 using System.Text.Json.Serialization;
 using LibMatrix.EventTypes;
-using LibMatrix.Interfaces;
 
 namespace MatrixUtils.LibDMSpace.StateEvents;
 
diff --git a/MatrixUtils.LibDMSpace/StateEvents/DMSpaceInfo.cs b/MatrixUtils.LibDMSpace/StateEvents/DMSpaceInfo.cs
index f5daa74..170efc7 100644
--- a/MatrixUtils.LibDMSpace/StateEvents/DMSpaceInfo.cs
+++ b/MatrixUtils.LibDMSpace/StateEvents/DMSpaceInfo.cs
@@ -1,6 +1,5 @@
 using System.Text.Json.Serialization;
 using LibMatrix.EventTypes;
-using LibMatrix.Interfaces;
 
 namespace MatrixUtils.LibDMSpace.StateEvents;
 
diff --git a/MatrixUtils.Web.Server/MatrixUtils.Web.Server.csproj b/MatrixUtils.Web.Server/MatrixUtils.Web.Server.csproj
index ab7aad8..24401ab 100644
--- a/MatrixUtils.Web.Server/MatrixUtils.Web.Server.csproj
+++ b/MatrixUtils.Web.Server/MatrixUtils.Web.Server.csproj
@@ -8,7 +8,7 @@
     </PropertyGroup>
 
     <ItemGroup>
-        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.0" />
+        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.1" />
     </ItemGroup>
 
     <ItemGroup>
diff --git a/MatrixUtils.Web/App.razor b/MatrixUtils.Web/App.razor
index 5e87bc3..a8cf817 100644
--- a/MatrixUtils.Web/App.razor
+++ b/MatrixUtils.Web/App.razor
@@ -1,5 +1,4 @@
-@using Microsoft.AspNetCore.Components.Routing
-<Router AppAssembly="@typeof(App).Assembly">
+<Router AppAssembly="@typeof(App).Assembly">
     <Found Context="routeData">
         <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)"/>
         <FocusOnNavigate RouteData="@routeData" Selector="h1"/>
diff --git a/MatrixUtils.Web/Classes/RoomCreationTemplates/DefaultRoomCreationTemplate.cs b/MatrixUtils.Web/Classes/RoomCreationTemplates/DefaultRoomCreationTemplate.cs
index a627a9c..75d9e16 100644
--- a/MatrixUtils.Web/Classes/RoomCreationTemplates/DefaultRoomCreationTemplate.cs
+++ b/MatrixUtils.Web/Classes/RoomCreationTemplates/DefaultRoomCreationTemplate.cs
@@ -34,7 +34,7 @@ public class DefaultRoomCreationTemplate : IRoomCreationTemplate {
                 },
                 new() {
                     Type = "m.room.server_acl",
-                    TypedContent = new RoomServerACLEventContent() {
+                    TypedContent = new RoomServerAclEventContent() {
                         Allow = new List<string>() { "*" },
                         Deny = new List<string>(),
                         AllowIpLiterals = false
@@ -56,7 +56,7 @@ public class DefaultRoomCreationTemplate : IRoomCreationTemplate {
                 Redact = 50,
                 Kick = 50,
                 Ban = 50,
-                NotificationsPl = new RoomPowerLevelEventContent.NotificationsPL {
+                NotificationsPl = new RoomPowerLevelEventContent.NotificationsPowerLevels {
                     Room = 50
                 },
                 Events = new() {
diff --git a/MatrixUtils.Web/MatrixUtils.Web.csproj b/MatrixUtils.Web/MatrixUtils.Web.csproj
index 38816ff..93e30d9 100644
--- a/MatrixUtils.Web/MatrixUtils.Web.csproj
+++ b/MatrixUtils.Web/MatrixUtils.Web.csproj
@@ -14,7 +14,7 @@
         <BlazorCacheBootResources>false</BlazorCacheBootResources>
         <BlazorEnableTimeZoneSupport>false</BlazorEnableTimeZoneSupport>
     </PropertyGroup>
-    
+
     <!-- Explicitly disable all the unused runtime things trimming would have removed anyways -->
     <!-- https://learn.microsoft.com/en-us/dotnet/core/deploying/trimming/trimming-options -->
     <PropertyGroup>
@@ -39,10 +39,10 @@
     <ItemGroup>
         <PackageReference Include="Blazored.LocalStorage" Version="4.5.0"/>
         <PackageReference Include="Blazored.SessionStorage" Version="2.4.0"/>
-        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.0"/>
-        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.0" PrivateAssets="all"/>
-        <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="9.0.0"/>
-        <PackageReference Include="SpawnDev.BlazorJS.WebWorkers" Version="2.5.18"/>
+        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.1" />
+        <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.1" PrivateAssets="all" />
+        <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="9.0.1" />
+        <PackageReference Include="SpawnDev.BlazorJS.WebWorkers" Version="2.5.36" />
     </ItemGroup>
 
     <ItemGroup>
diff --git a/MatrixUtils.Web/Pages/Dev/DevOptions.razor b/MatrixUtils.Web/Pages/Dev/DevOptions.razor
index 7b646d1..e94cf76 100644
--- a/MatrixUtils.Web/Pages/Dev/DevOptions.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevOptions.razor
@@ -2,7 +2,6 @@
 @using ArcaneLibs.Extensions
 @using System.Text
 @using System.Text.Json
-@using Microsoft.JSInterop
 @inject NavigationManager NavigationManager
 @inject IJSRuntime JSRuntime
 @inject TieredStorageService TieredStorage
diff --git a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
index bf5a396..d81a790 100644
--- a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
@@ -38,7 +38,7 @@ else {
 
     protected override async Task OnInitializedAsync() {
         await base.OnInitializedAsync();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs == null) return;
         Rooms = (await hs.GetJoinedRooms()).Select(x => x.RoomId).ToList();
         Console.WriteLine("Fetched joined rooms!");
diff --git a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
index 9c61431..409d582 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor
@@ -24,7 +24,7 @@ else {
     public ServerVersionResponse? ServerVersionResponse { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
         ServerVersionResponse = await (Homeserver.FederationClient?.GetServerVersionAsync() ?? Task.FromResult<ServerVersionResponse?>(null));
         await base.OnInitializedAsync();
diff --git a/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor b/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor
index 11df261..1e63e16 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/RoomQuery.razor
@@ -167,7 +167,7 @@
 
     private async Task Search() {
         Results.Clear();
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is AuthenticatedHomeserverSynapse synapse) {
             var searchRooms = synapse.Admin.SearchRoomsAsync(orderBy: OrderBy!, dir: Ascending ? "f" : "b", searchTerm: SearchTerm, localFilter: Filter).GetAsyncEnumerator();
             while (await searchRooms.MoveNextAsync()) {
diff --git a/MatrixUtils.Web/Pages/HSEInit.razor b/MatrixUtils.Web/Pages/HSEInit.razor
index cabc671..1eb556a 100644
--- a/MatrixUtils.Web/Pages/HSEInit.razor
+++ b/MatrixUtils.Web/Pages/HSEInit.razor
@@ -19,7 +19,7 @@
 
     async Task<UserAuth?> Login() {
         try {
-            var result = new UserAuth(await hsProvider.Login("http://localhost:5298", $"{Guid.NewGuid().ToString()}", ""));
+            var result = new UserAuth(await HsProvider.Login("http://localhost:5298", $"{Guid.NewGuid().ToString()}", ""));
             if (result == null) {
                 Console.WriteLine($"Failed to login!");
                 return null;
diff --git a/MatrixUtils.Web/Pages/Index.razor b/MatrixUtils.Web/Pages/Index.razor
index 4be91b7..34f2e9b 100644
--- a/MatrixUtils.Web/Pages/Index.razor
+++ b/MatrixUtils.Web/Pages/Index.razor
@@ -144,23 +144,23 @@ Small collection of tools to do not-so-everyday things.
     private readonly List<UserAuth> _offlineSessions = [];
     private readonly List<UserAuth> _invalidSessions = [];
     private LoginResponse? _currentSession;
-    int scannedSessions = 0, totalSessions = 1;
+    int scannedSessions, totalSessions = 1;
     private SvgIdenticonGenerator _identiconGenerator = new();
 
     protected override async Task OnInitializedAsync() {
         Console.WriteLine("Index.OnInitializedAsync");
         logger.LogDebug("Initialising index page");
-        _currentSession = await RMUStorage.GetCurrentToken();
+        _currentSession = await RmuStorage.GetCurrentToken();
         _sessions.Clear();
         _offlineSessions.Clear();
-        var tokens = await RMUStorage.GetAllTokens();
+        var tokens = await RmuStorage.GetAllTokens();
         scannedSessions = 0;
         totalSessions = tokens.Count;
         logger.LogDebug("Found {0} tokens", totalSessions);
         if (tokens is not { Count: > 0 }) {
             Console.WriteLine("No tokens found, trying migration from MRU...");
-            await RMUStorage.MigrateFromMRU();
-            tokens = await RMUStorage.GetAllTokens();
+            await RmuStorage.MigrateFromMRU();
+            tokens = await RmuStorage.GetAllTokens();
             if (tokens is not { Count: > 0 }) {
                 Console.WriteLine("No tokens found");
                 return;
@@ -175,7 +175,7 @@ Small collection of tools to do not-so-everyday things.
             
             AuthenticatedHomeserverGeneric hs;
             try {
-                hs = await hsProvider.GetAuthenticatedWithToken(token.Homeserver, token.AccessToken, token.Proxy);
+                hs = await HsProvider.GetAuthenticatedWithToken(token.Homeserver, token.AccessToken, token.Proxy);
                 var joinedRoomsTask = hs.GetJoinedRooms();
                 var profileTask = hs.GetProfileAsync(hs.WhoAmI.UserId);
                 var serverVersionTask = hs.FederationClient?.GetServerVersionAsync();
@@ -234,7 +234,7 @@ Small collection of tools to do not-so-everyday things.
     private async Task RemoveUser(UserAuth auth, bool logout = false) {
         try {
             if (logout) {
-                await (await hsProvider.GetAuthenticatedWithToken(auth.Homeserver, auth.AccessToken, auth.Proxy)).Logout();
+                await (await HsProvider.GetAuthenticatedWithToken(auth.Homeserver, auth.AccessToken, auth.Proxy)).Logout();
             }
         }
         catch (Exception e) {
@@ -246,15 +246,15 @@ Small collection of tools to do not-so-everyday things.
             Console.WriteLine(e);
         }
 
-        await RMUStorage.RemoveToken(auth);
-        if ((await RMUStorage.GetCurrentToken())?.AccessToken == auth.AccessToken)
-            await RMUStorage.SetCurrentToken((await RMUStorage.GetAllTokens() ?? throw new InvalidOperationException()).FirstOrDefault());
+        await RmuStorage.RemoveToken(auth);
+        if ((await RmuStorage.GetCurrentToken())?.AccessToken == auth.AccessToken)
+            await RmuStorage.SetCurrentToken((await RmuStorage.GetAllTokens() ?? throw new InvalidOperationException()).FirstOrDefault());
         StateHasChanged();
     }
 
     private async Task SwitchSession(UserAuth auth) {
         Console.WriteLine($"Switching to {auth.Homeserver} {auth.UserId} via {auth.Proxy}");
-        await RMUStorage.SetCurrentToken(auth);
+        await RmuStorage.SetCurrentToken(auth);
         _currentSession = auth;
         StateHasChanged();
     }
diff --git a/MatrixUtils.Web/Pages/InvalidSession.razor b/MatrixUtils.Web/Pages/InvalidSession.razor
index e1a72ea..b63c14f 100644
--- a/MatrixUtils.Web/Pages/InvalidSession.razor
+++ b/MatrixUtils.Web/Pages/InvalidSession.razor
@@ -40,7 +40,7 @@ else {
     private MatrixException? _loginException { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        var tokens = await RMUStorage.GetAllTokens();
+        var tokens = await RmuStorage.GetAllTokens();
         if (tokens is null || tokens.Count == 0) {
             NavigationManager.NavigateTo("/Login");
             return;
@@ -56,9 +56,9 @@ else {
     }
 
     private async Task RemoveUser() {
-        await RMUStorage.RemoveToken(_login!);
-        if ((await RMUStorage.GetCurrentToken())!.AccessToken == _login!.AccessToken)
-            await RMUStorage.SetCurrentToken((await RMUStorage.GetAllTokens())?.FirstOrDefault());
+        await RmuStorage.RemoveToken(_login!);
+        if ((await RmuStorage.GetCurrentToken())!.AccessToken == _login!.AccessToken)
+            await RmuStorage.SetCurrentToken((await RmuStorage.GetAllTokens())?.FirstOrDefault());
         await OnInitializedAsync();
     }
 
@@ -70,14 +70,14 @@ else {
 
     private async Task SwitchSession(UserAuth auth) {
         Console.WriteLine($"Switching to {auth.Homeserver} {auth.AccessToken} {auth.UserId}");
-        await RMUStorage.SetCurrentToken(auth);
+        await RmuStorage.SetCurrentToken(auth);
         await OnInitializedAsync();
     }
 
     private async Task TryLogin() {
         if(_login is null) throw new NullReferenceException("Login is null!");
         try {
-            var result = new UserAuth(await hsProvider.Login(_login.Homeserver, _login.UserId, _password));
+            var result = new UserAuth(await HsProvider.Login(_login.Homeserver, _login.UserId, _password));
             if (result is null) {
                 Console.WriteLine($"Failed to login to {_login.Homeserver} as {_login.UserId}!");
                 return;
@@ -85,9 +85,9 @@ else {
             Console.WriteLine($"Obtained access token for {result.UserId}!");
 
             await RemoveUser();
-            await RMUStorage.AddToken(result);
-            if (result.UserId == (await RMUStorage.GetCurrentToken())?.UserId)
-                await RMUStorage.SetCurrentToken(result);
+            await RmuStorage.AddToken(result);
+            if (result.UserId == (await RmuStorage.GetCurrentToken())?.UserId)
+                await RmuStorage.SetCurrentToken(result);
             NavigationManager.NavigateTo("/");
         }
         catch (MatrixException e) {
diff --git a/MatrixUtils.Web/Pages/Labs/Client/Index.razor b/MatrixUtils.Web/Pages/Labs/Client/Index.razor
index ef4a0b9..4656fcb 100644
--- a/MatrixUtils.Web/Pages/Labs/Client/Index.razor
+++ b/MatrixUtils.Web/Pages/Labs/Client/Index.razor
@@ -40,11 +40,11 @@
     }
 
     protected override async Task OnInitializedAsync() {
-        var tokens = await RMUStorage.GetAllTokens();
+        var tokens = await RmuStorage.GetAllTokens();
         var tasks = tokens.Select(async token => {
             try {
                 var cc = new ClientContext() {
-                    Homeserver = await RMUStorage.GetSession(token)
+                    Homeserver = await RmuStorage.GetSession(token)
                 };
                 cc.SyncWrapper = new ClientSyncWrapper(cc.Homeserver);
 
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor
index c0dc8a6..a382729 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpace.razor
@@ -52,7 +52,7 @@
             NavigationManager.NavigateTo(NavigationManager.Uri.Replace("stage=", ""), true); //"/User/DMSpace/Setup"
         }
         DMSpaceRootPage = this;
-        SetupData.Homeserver ??= await RMUStorage.GetCurrentSessionOrNavigate();
+        SetupData.Homeserver ??= await RmuStorage.GetCurrentSessionOrNavigate();
         if (SetupData.Homeserver is null) return;
         try {
             SetupData.DmSpaceConfiguration = await SetupData.Homeserver.GetAccountDataAsync<DMSpaceConfiguration>("gay.rory.dm_space");
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor
index 55e17d6..f147b5b 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor
@@ -5,6 +5,8 @@
 @using MatrixUtils.LibDMSpace.StateEvents
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
+@using LibMatrix.EventTypes.Spec.State.Space
 @using MatrixUtils.Abstractions
 <b>
     <u>DM Space setup tool - stage 1: Configure space</u>
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor
index be6027a..5a0bbd1 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor
@@ -1,6 +1,7 @@
 @using LibMatrix.RoomTypes
 @using LibMatrix.EventTypes.Spec.State
 @using ArcaneLibs.Extensions
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using MatrixUtils.Abstractions
 <b>
     <u>DM Space setup tool - stage 2: Fix DM room attribution</u>
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor
index 09de5d3..6cba639 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor
@@ -3,6 +3,7 @@
 @using LibMatrix.Responses
 @using MatrixUtils.LibDMSpace
 @using System.Text.Json.Serialization
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using MatrixUtils.Abstractions
 
 <b>
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor
index 3392960..f9da6eb 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2.razor
@@ -55,7 +55,7 @@
     public RoomListViewData Data { get; set; } = new RoomListViewData();
 
     protected override async Task OnInitializedAsync() {
-        Data.Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Data.Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Data.Homeserver is null) return;
         var rooms = await Data.Homeserver.GetJoinedRooms();
         Data.GlobalProfile = await Data.Homeserver.GetProfileAsync(Data.Homeserver.WhoAmI.UserId);
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor
index d2b6d5a..a8409fd 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor
@@ -1,6 +1,7 @@
 @using MatrixUtils.Abstractions
 @using System.ComponentModel
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.Space
 @using MatrixUtils.Web.Pages.Labs.Rooms2.Index2Components.MainTabComponents
 <h3>RoomsIndex2MainTab</h3>
 
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor
index 91f228d..7a412c1 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor
@@ -7,6 +7,7 @@
 @using LibMatrix.Utilities
 @using System.Collections.ObjectModel
 @using ArcaneLibs
+@using LibMatrix.EventTypes.Spec.State.Space
 @inject ILogger<RoomsIndex2SyncContainer> logger
 <pre>RoomsIndex2SyncContainer</pre>
 @foreach (var (name, value) in _statusList) {
diff --git a/MatrixUtils.Web/Pages/LoginPage.razor b/MatrixUtils.Web/Pages/LoginPage.razor
index d43913c..bc989c2 100644
--- a/MatrixUtils.Web/Pages/LoginPage.razor
+++ b/MatrixUtils.Web/Pages/LoginPage.razor
@@ -121,7 +121,7 @@
         if (LoggedInSessions.Any(x => x.UserId == $"@{record.Username}:{record.Homeserver}" && x.Proxy == record.Proxy)) return;
         StateHasChanged();
         try {
-            var result = new UserAuth(await hsProvider.Login(record.Homeserver, record.Username, record.Password, record.Proxy)) {
+            var result = new UserAuth(await HsProvider.Login(record.Homeserver, record.Username, record.Password, record.Proxy)) {
                 Proxy = record.Proxy
             };
             if (result == null) {
@@ -131,8 +131,8 @@
 
             Console.WriteLine($"Obtained access token for {result.UserId}!");
 
-            await RMUStorage.AddToken(result);
-            LoggedInSessions = await RMUStorage.GetAllTokens();
+            await RmuStorage.AddToken(result);
+            LoggedInSessions = await RmuStorage.GetAllTokens();
         }
         catch (Exception e) {
             Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!");
@@ -144,7 +144,7 @@
     }
 
     private async Task FileChanged(InputFileChangeEventArgs obj) {
-        LoggedInSessions = await RMUStorage.GetAllTokens();
+        LoggedInSessions = await RmuStorage.GetAllTokens();
         Console.WriteLine(JsonSerializer.Serialize(obj, new JsonSerializerOptions {
             WriteIndented = true
         }));
@@ -162,7 +162,7 @@
     }
 
     private async Task AddRecord() {
-        LoggedInSessions = await RMUStorage.GetAllTokens();
+        LoggedInSessions = await RmuStorage.GetAllTokens();
         records.Add(newRecordInput);
         newRecordInput = new();
     }
@@ -179,19 +179,19 @@
 
     private async Task AddWithAccessToken(LoginStruct record) {
         try {
-            var session = await hsProvider.GetAuthenticatedWithToken(record.Homeserver, record.Password, record.Proxy);
+            var session = await HsProvider.GetAuthenticatedWithToken(record.Homeserver, record.Password, record.Proxy);
             if (session == null) {
                 Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!");
                 return;
             }
             
-            await RMUStorage.AddToken(new UserAuth() {
+            await RmuStorage.AddToken(new UserAuth() {
                 UserId = session.WhoAmI.UserId,
                 AccessToken = session.AccessToken,
                 Proxy = record.Proxy,
                 DeviceId = session.WhoAmI.DeviceId
             });
-            LoggedInSessions = await RMUStorage.GetAllTokens();
+            LoggedInSessions = await RmuStorage.GetAllTokens();
         }
         catch (Exception e) {
             Console.WriteLine($"Failed to login to {record.Homeserver} as {record.Username}!");
diff --git a/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor b/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor
index 9218c8c..1450a3d 100644
--- a/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor
+++ b/MatrixUtils.Web/Pages/Moderation/UserRoomHistory.razor
@@ -2,6 +2,7 @@
 @using LibMatrix.EventTypes.Spec.State
 @using LibMatrix.RoomTypes
 @using ArcaneLibs.Extensions
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using MatrixUtils.Abstractions
 <h3>UserRoomHistory</h3>
 
@@ -44,11 +45,11 @@ else {
     private AuthenticatedHomeserverGeneric? currentHs { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
-        var sessions = await RMUStorage.GetAllTokens();
+        var sessions = await RmuStorage.GetAllTokens();
         foreach (var userAuth in sessions) {
-            var session = await RMUStorage.GetSession(userAuth);
+            var session = await RmuStorage.GetSession(userAuth);
             if (session is not null) {
                 hss.Add(session);
                 StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Rooms/Create.razor b/MatrixUtils.Web/Pages/Rooms/Create.razor
index 3527bf5..0c476d7 100644
--- a/MatrixUtils.Web/Pages/Rooms/Create.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Create.razor
@@ -7,7 +7,6 @@
 @using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Responses
 @using MatrixUtils.Web.Classes.RoomCreationTemplates
-@using Microsoft.AspNetCore.Components.Forms
 @* @* ReSharper disable once RedundantUsingDirective - Must not remove this, Rider marks this as "unused" when it's not */ *@
 
 <h3>Room Manager - Create Room</h3>
@@ -134,7 +133,7 @@
                 }
                 else {
                     <details>
-                        <summary>@((creationEvent["m.room.server_acls"].TypedContent as RoomServerACLEventContent).Allow.Count) allow rules</summary>
+                        <summary>@((creationEvent["m.room.server_acls"].TypedContent as RoomServerAclEventContent).Allow.Count) allow rules</summary>
                         @* <StringListEditor @bind-Items="@serverAcl.Allow"></StringListEditor> *@
                     </details>
                 }
@@ -144,7 +143,7 @@
                 }
                 else {
                     <details>
-                        <summary>@((creationEvent["m.room.server_acls"].TypedContent as RoomServerACLEventContent).Deny.Count) deny rules</summary>
+                        <summary>@((creationEvent["m.room.server_acls"].TypedContent as RoomServerAclEventContent).Deny.Count) deny rules</summary>
                         @* <StringListEditor @bind-Items="@serverAcl.Allow"></StringListEditor> *@
                     </details>
                 }
@@ -256,11 +255,11 @@
 
     private RoomHistoryVisibilityEventContent? historyVisibility => creationEvent?["m.room.history_visibility"].TypedContent as RoomHistoryVisibilityEventContent;
     private RoomGuestAccessEventContent? guestAccessEvent => creationEvent?["m.room.guest_access"].TypedContent as RoomGuestAccessEventContent;
-    private RoomServerACLEventContent? serverAcl => creationEvent?["m.room.server_acls"].TypedContent as RoomServerACLEventContent;
+    private RoomServerAclEventContent? serverAcl => creationEvent?["m.room.server_acls"].TypedContent as RoomServerAclEventContent;
     private RoomAvatarEventContent? roomAvatarEvent => creationEvent?["m.room.avatar"].TypedContent as RoomAvatarEventContent;
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
 
         foreach (var x in Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Contains(typeof(IRoomCreationTemplate))).ToList()) {
diff --git a/MatrixUtils.Web/Pages/Rooms/Index.razor b/MatrixUtils.Web/Pages/Rooms/Index.razor
index 28c4de2..5dd8189 100644
--- a/MatrixUtils.Web/Pages/Rooms/Index.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Index.razor
@@ -68,7 +68,7 @@
     // SyncHelper profileSyncHelper;
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
         // var rooms = await Homeserver.GetJoinedRooms();
         // SemaphoreSlim _semaphore = new(160, 160);
@@ -170,7 +170,7 @@
         }
     }
 
-    private bool RenderContents { get; set; } = false;
+    private bool RenderContents { get; set; }
 
     private string _status;
 
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
index b2ce9c3..0022213 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
@@ -6,13 +6,12 @@
 @using System.Diagnostics
 @using LibMatrix.RoomTypes
 @using System.Collections.Frozen
-@using System.Numerics
 @using System.Reflection
-@using System.Runtime.InteropServices.JavaScript
 @using ArcaneLibs.Attributes
 @using LibMatrix.EventTypes
 @using LibMatrix.EventTypes.Common
 @using LibMatrix.EventTypes.Interop.Draupnir
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 
 @using MatrixUtils.Web.Shared.PolicyEditorComponents
 @using SpawnDev.BlazorJS.WebWorkers
@@ -218,7 +217,7 @@ else {
     protected override async Task OnInitializedAsync() {
         var sw = Stopwatch.StartNew();
         await base.OnInitializedAsync();
-        Homeserver = (await RMUStorage.GetCurrentSessionOrNavigate())!;
+        Homeserver = (await RmuStorage.GetCurrentSessionOrNavigate())!;
         if (Homeserver is null) return;
         Room = Homeserver.GetRoom(RoomId!);
         await Task.WhenAll([
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
index d5d0a7e..eed57e6 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
@@ -9,6 +9,7 @@
 @using System.Reflection
 @using ArcaneLibs.Attributes
 @using LibMatrix.EventTypes
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 
 @using MatrixUtils.Web.Shared.PolicyEditorComponents
 
@@ -173,7 +174,7 @@ else {
     protected override async Task OnInitializedAsync() {
         var sw = Stopwatch.StartNew();
         await base.OnInitializedAsync();
-        Homeserver = (await RMUStorage.GetCurrentSessionOrNavigate())!;
+        Homeserver = (await RmuStorage.GetCurrentSessionOrNavigate())!;
         if (Homeserver is null) return;
         Room = Homeserver.GetRoom(RoomId!);
         PowerLevels = (await Room.GetPowerLevelsAsync())!;
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor b/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor
index 63dc206..4f06822 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor
@@ -1,5 +1,4 @@
 @page "/PolicyLists"
-@using System.Collections.ObjectModel
 @using ArcaneLibs.Extensions
 @using LibMatrix
 @using LibMatrix.EventTypes
@@ -63,7 +62,7 @@
     private AuthenticatedHomeserverGeneric? Homeserver { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
 
         Status = "Fetching rooms...";
diff --git a/MatrixUtils.Web/Pages/Rooms/Space.razor b/MatrixUtils.Web/Pages/Rooms/Space.razor
index 088fdcd..e3bb4e4 100644
--- a/MatrixUtils.Web/Pages/Rooms/Space.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Space.razor
@@ -1,5 +1,4 @@
 @page "/Rooms/{RoomId}/Space"
-@using System.Collections.ObjectModel
 @using LibMatrix.RoomTypes
 @using ArcaneLibs.Extensions
 @using LibMatrix
@@ -37,7 +36,7 @@
     private string? NewRoomId { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         Room = hs.GetRoom(RoomId.Replace('~', '.'));
diff --git a/MatrixUtils.Web/Pages/Rooms/StateEditor.razor b/MatrixUtils.Web/Pages/Rooms/StateEditor.razor
index 6110b83..4d24d47 100644
--- a/MatrixUtils.Web/Pages/Rooms/StateEditor.razor
+++ b/MatrixUtils.Web/Pages/Rooms/StateEditor.razor
@@ -43,7 +43,7 @@
 
     protected override async Task OnInitializedAsync() {
         await base.OnInitializedAsync();
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         RoomId = RoomId.Replace('~', '.');
         await LoadStatesAsync();
@@ -53,7 +53,7 @@
     private DateTime _lastUpdate = DateTime.Now;
 
     private async Task LoadStatesAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
 
         var StateLoaded = 0;
         var response = (hs.GetRoom(RoomId)).GetFullStateAsync();
diff --git a/MatrixUtils.Web/Pages/Rooms/StateViewer.razor b/MatrixUtils.Web/Pages/Rooms/StateViewer.razor
index 7c31136..565d97f 100644
--- a/MatrixUtils.Web/Pages/Rooms/StateViewer.razor
+++ b/MatrixUtils.Web/Pages/Rooms/StateViewer.razor
@@ -70,7 +70,7 @@
 
     protected override async Task OnInitializedAsync() {
         await base.OnInitializedAsync();
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         await LoadStatesAsync();
         Console.WriteLine("Policy list editor initialized!");
@@ -80,7 +80,7 @@
 
     private async Task LoadStatesAsync() {
         var StateLoaded = 0;
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         var response = (hs.GetRoom(RoomId)).GetFullStateAsync();
         await foreach (var _ev in response) {
diff --git a/MatrixUtils.Web/Pages/Rooms/Timeline.razor b/MatrixUtils.Web/Pages/Rooms/Timeline.razor
index e6b1248..a5c88e8 100644
--- a/MatrixUtils.Web/Pages/Rooms/Timeline.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Timeline.razor
@@ -3,6 +3,7 @@
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>RoomManagerTimeline</h3>
 <hr/>
 <p>Loaded @Events.Count events...</p>
@@ -27,7 +28,7 @@
 
     protected override async Task OnInitializedAsync() {
         Console.WriteLine("RoomId: " + RoomId);
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
         var room = Homeserver.GetRoom(RoomId);
         MessagesResponse? msgs = null;
diff --git a/MatrixUtils.Web/Pages/ServerInfo.razor b/MatrixUtils.Web/Pages/ServerInfo.razor
index e6f1f16..8dd7907 100644
--- a/MatrixUtils.Web/Pages/ServerInfo.razor
+++ b/MatrixUtils.Web/Pages/ServerInfo.razor
@@ -78,7 +78,7 @@
 
     protected override async Task OnParametersSetAsync() {
         if (Homeserver is not null) {
-            var rhs = await hsProvider.GetRemoteHomeserver(Homeserver);
+            var rhs = await HsProvider.GetRemoteHomeserver(Homeserver);
             ServerVersionResponse = await (rhs.FederationClient?.GetServerVersionAsync() ?? Task.FromResult<ServerVersionResponse?>(null));
             ClientVersionsResponse = await rhs.GetClientVersionsAsync();
         }
diff --git a/MatrixUtils.Web/Pages/StreamTest.razor b/MatrixUtils.Web/Pages/StreamTest.razor
index 541cfe8..a70e872 100644
--- a/MatrixUtils.Web/Pages/StreamTest.razor
+++ b/MatrixUtils.Web/Pages/StreamTest.razor
@@ -2,6 +2,7 @@
 @inject ILogger<Index> logger
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 
 <PageTitle>StreamText</PageTitle>
 @if (Homeserver is not null) {
@@ -35,7 +36,7 @@
     public List<Stream> Streams { get; set; } = new();
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
 
         //await InitOld();
         await Init2();
diff --git a/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor b/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor
index 841552e..8782dbe 100644
--- a/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor
+++ b/MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor
@@ -17,7 +17,7 @@
     public string? RoomId { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         Log.CollectionChanged += (sender, args) => StateHasChanged();
         
diff --git a/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor b/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor
index 6e87926..dd8a801 100644
--- a/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor
+++ b/MatrixUtils.Web/Pages/Tools/Debug/MediaLocator.razor
@@ -92,7 +92,7 @@
         lines.ToList().ForEach(async line => {
             await sem.WaitAsync();
             try {
-                homeservers.Add((await hsResolver.ResolveHomeserverFromWellKnown(line)).Client);
+                homeservers.Add((await HsResolver.ResolveHomeserverFromWellKnown(line)).Client);
                 StateHasChanged();
             }
             catch (Exception e) {
diff --git a/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor b/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor
index 11d35f1..f21bac2 100644
--- a/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor
+++ b/MatrixUtils.Web/Pages/Tools/Debug/MigrateRoom.razor
@@ -39,7 +39,7 @@
     private string newRoomId { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         StateHasChanged();
@@ -48,7 +48,7 @@
     }
 
     private async Task Execute() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         var oldRoom = hs.GetRoom(roomId);
         var newRoom = hs.GetRoom(newRoomId);
@@ -90,7 +90,7 @@
 
     private async Task TryFetchUsers() {
         try {
-            var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+            var hs = await RmuStorage.GetCurrentSessionOrNavigate();
             if (hs is null) return;
             var room = hs.GetRoom(roomId);
             var members = await room.GetMembersListAsync();
diff --git a/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor b/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor
index 263879b..70ae27d 100644
--- a/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor
+++ b/MatrixUtils.Web/Pages/Tools/Debug/SpaceDebug.razor
@@ -45,7 +45,7 @@
 
     protected override async Task OnInitializedAsync() {
         Status = "Getting homeserver...";
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         var syncHelper = new SyncHelper(hs) {
diff --git a/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor b/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor
index ddd7b15..90b652a 100644
--- a/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor
+++ b/MatrixUtils.Web/Pages/Tools/Info/KnownHomeserverList.razor
@@ -23,7 +23,7 @@
     AuthenticatedHomeserverGeneric? hs { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         var fetchTasks = (await hs.GetJoinedRooms()).Select(x=>x.GetMembersByHomeserverAsync()).ToAsyncEnumerable();
         await foreach (var result in fetchTasks) {
diff --git a/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor b/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor
index e093db2..8f9f043 100644
--- a/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor
+++ b/MatrixUtils.Web/Pages/Tools/Info/PolicyListActivity.razor
@@ -40,7 +40,7 @@ else
     {
         var sw = Stopwatch.StartNew();
         await base.OnInitializedAsync();
-        Homeserver = (await RMUStorage.GetCurrentSessionOrNavigate())!;
+        Homeserver = (await RmuStorage.GetCurrentSessionOrNavigate())!;
         if (Homeserver is null) return;
         //
         //random test data
diff --git a/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor b/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor
index 3b68bfa..710bb2a 100644
--- a/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor
+++ b/MatrixUtils.Web/Pages/Tools/Info/SessionCount.razor
@@ -5,6 +5,7 @@
 @using LibMatrix
 @using System.Collections.Frozen
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>User Trace</h3>
 <hr/>
 
@@ -73,12 +74,12 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         rooms.CollectionChanged += (sender, args) => StateHasChanged();
-        var sessions = await RMUStorage.GetAllTokens();
+        var sessions = await RmuStorage.GetAllTokens();
         foreach (var userAuth in sessions) {
-            var session = await RMUStorage.GetSession(userAuth);
+            var session = await RmuStorage.GetSession(userAuth);
             if (session is not null) {
                 var sessionRooms = await session.GetJoinedRooms();
                 foreach (var room in sessionRooms) {
diff --git a/MatrixUtils.Web/Pages/Tools/InviteCounter.razor b/MatrixUtils.Web/Pages/Tools/InviteCounter.razor
index 8f4b4dd..c9491d4 100644
--- a/MatrixUtils.Web/Pages/Tools/InviteCounter.razor
+++ b/MatrixUtils.Web/Pages/Tools/InviteCounter.razor
@@ -1,11 +1,7 @@
 @page "/Tools/InviteCounter"
-@using ArcaneLibs.Extensions
-@using LibMatrix.RoomTypes
 @using System.Collections.ObjectModel
-@using LibMatrix
-@using System.Collections.Frozen
 @using LibMatrix.EventTypes.Spec.State
-@using MatrixUtils.Abstractions
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>User Trace</h3>
 <hr/>
 
@@ -39,7 +35,7 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
        
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor b/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor
index cbbca9e..547c586 100644
--- a/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor
+++ b/MatrixUtils.Web/Pages/Tools/MassCMEBan.razor
@@ -1,12 +1,6 @@
 @page "/Tools/MassCMEBan"
-@using ArcaneLibs.Extensions
-@using LibMatrix.RoomTypes
 @using System.Collections.ObjectModel
-@using LibMatrix
-@using System.Collections.Frozen
-@using LibMatrix.EventTypes.Spec.State
 @using LibMatrix.EventTypes.Spec.State.Policy
-@using MatrixUtils.Abstractions
 <h3>User Trace</h3>
 <hr/>
 
@@ -33,7 +27,7 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
        
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor
index 51f8e1b..215ead3 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectedRoomsEditor.razor
@@ -1,10 +1,10 @@
 @page "/Moderation/DraupnirProtectedRoomsEditor"
 @page "/Tools/Moderation/DraupnirProtectedRoomsEditor"
 @page "/Tools/Moderation/Draupnir/ProtectedRoomsEditor"
-@using System.Text.Json.Serialization
 @using LibMatrix
 @using LibMatrix.EventTypes.Interop.Draupnir
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.RoomTypes
 <h3>Edit Draupnir protected rooms</h3>
 <hr/>
@@ -43,7 +43,7 @@
                             </td>
                             <td>@(room.PowerLevels.Kick <= room.PowerLevels.GetUserPowerLevel(hs.UserId) ? "X" : "")</td>
                             <td>@(room.PowerLevels.Ban <= room.PowerLevels.GetUserPowerLevel(hs.UserId) ? "X" : "")</td>
-                            <td>@(room.PowerLevels.UserHasStatePermission(hs.UserId, RoomServerACLEventContent.EventId) ? "X" : "")</td>
+                            <td>@(room.PowerLevels.UserHasStatePermission(hs.UserId, RoomServerAclEventContent.EventId) ? "X" : "")</td>
                             <td>@room.Room.RoomId</td>
                             <td>@room.RoomName</td>
                         </tr>
@@ -63,7 +63,7 @@
     private AuthenticatedHomeserverGeneric hs { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         data = await hs.GetAccountDataAsync<DraupnirProtectedRoomsData>(DraupnirProtectedRoomsData.EventId);
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor
index b722596..da84def 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirProtectionsEditor.razor
@@ -2,6 +2,7 @@
 @using System.Text.Json.Serialization
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.RoomTypes
 <h3>Edit Draupnir protected rooms</h3>
 <hr/>
@@ -38,7 +39,7 @@
                             </td>
                             <td>@(room.PowerLevels.Kick <= room.PowerLevels.GetUserPowerLevel(hs.UserId) ? "X" : "")</td>
                             <td>@(room.PowerLevels.Ban <= room.PowerLevels.GetUserPowerLevel(hs.UserId) ? "X" : "")</td>
-                            <td>@(room.PowerLevels.UserHasStatePermission(hs.UserId, RoomServerACLEventContent.EventId) ? "X" : "")</td>
+                            <td>@(room.PowerLevels.UserHasStatePermission(hs.UserId, RoomServerAclEventContent.EventId) ? "X" : "")</td>
                             <td>@room.Room.RoomId</td>
                             <td>@room.RoomName</td>
                         </tr>
@@ -58,7 +59,7 @@
     private AuthenticatedHomeserverGeneric hs { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         data = await hs.GetAccountDataAsync<DraupnirProtectedRoomsData>("org.matrix.mjolnir.protected_rooms");
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor
index b2f4026..4aa0d2f 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/Draupnir/DraupnirWatchedListsEditor.razor
@@ -2,6 +2,7 @@
 @using System.Text.Json.Serialization
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.RoomTypes
 <h3>Edit Draupnir protected rooms</h3>
 <hr/>
@@ -38,7 +39,7 @@
                             </td>
                             <td>@(room.PowerLevels.Kick <= room.PowerLevels.GetUserPowerLevel(hs.UserId) ? "X" : "")</td>
                             <td>@(room.PowerLevels.Ban <= room.PowerLevels.GetUserPowerLevel(hs.UserId) ? "X" : "")</td>
-                            <td>@(room.PowerLevels.UserHasStatePermission(hs.UserId, RoomServerACLEventContent.EventId) ? "X" : "")</td>
+                            <td>@(room.PowerLevels.UserHasStatePermission(hs.UserId, RoomServerAclEventContent.EventId) ? "X" : "")</td>
                             <td>@room.Room.RoomId</td>
                             <td>@room.RoomName</td>
                         </tr>
@@ -58,7 +59,7 @@
     private AuthenticatedHomeserverGeneric hs { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         data = await hs.GetAccountDataAsync<DraupnirProtectedRoomsData>("org.matrix.mjolnir.protected_rooms");
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor b/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor
index 2d78f4e..24bc6e1 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/FindUsersByRegex.razor
@@ -6,9 +6,9 @@
 @using System.Text.RegularExpressions
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Filters
 @using LibMatrix.Helpers
-@using LibMatrix.Utilities
 <h3>Find users by regex</h3>
 <hr/>
 
@@ -64,7 +64,7 @@
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
         log.Add("Authenticating");
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor
index 2123d4d..e7c5a7f 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor
@@ -1,6 +1,7 @@
 @page "/Tools/Moderation/InviteCounter"
 @using System.Collections.ObjectModel
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>Invite counter</h3>
 <hr/>
 
@@ -34,7 +35,7 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
        
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor b/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor
index a4e3918..b5e5edb 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/MassCMEBan.razor
@@ -28,7 +28,7 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor b/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor
index 94afc9a..82ae072 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor
@@ -2,6 +2,7 @@
 @using System.Collections.ObjectModel
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>Membership history viewer</h3>
 <hr/>
 
@@ -155,7 +156,7 @@
 
 #region Filter bindings
 
-    private bool _chronologicalOrder = false;
+    private bool _chronologicalOrder;
 
     private bool ChronologicalOrder {
         get => _chronologicalOrder;
@@ -266,7 +267,7 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor b/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor
index b8baeb8..8516ea8 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/RoomIntersections.razor
@@ -3,6 +3,7 @@
 @using System.Collections.ObjectModel
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>Room intersections</h3>
 <hr/>
 
@@ -113,7 +114,7 @@
 
     protected override async Task OnInitializedAsync() {
         Log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor b/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor
index 915f8dc..3768da4 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor
@@ -3,13 +3,16 @@
 @using LibMatrix.RoomTypes
 @using System.Collections.ObjectModel
 @using LibMatrix
+@using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>User Trace</h3>
 <hr/>
 
 <p>Users: </p>
 <InputTextArea @bind-Value="@UserIdString"></InputTextArea>
 <br/>
-<InputText @bind-Value="@ImportFromRoomId"></InputText><LinkButton OnClick="@DoImportFromRoomId">Import from room (ID)</LinkButton>
+<InputText @bind-Value="@ImportFromRoomId"></InputText>
+<LinkButton OnClick="@DoImportFromRoomId">Import from room (ID)</LinkButton>
 
 <details>
     <summary>Rooms to be searched (@rooms.Count)</summary>
@@ -24,18 +27,21 @@
 
 <details>
     <summary>Results</summary>
-    @foreach (var (userId, events) in matches) {
+    @foreach (var (userId, events) in matches.OrderBy(x=>x.Key)) {
         <h4>@userId</h4>
-        <ul>
-            @foreach (var match in events) {
-                <li>
-                    <ul>
-                        <li>@match.RoomName (<span>@match.Room.RoomId</span>)</li>
-                        <li>Membership: @(match.Event.RawContent.ToJson(indent: false))</li>
-                    </ul>
-                </li>
+        <table>
+            @foreach (var match in events.OrderBy(x=>x.RoomName)) {
+                <tr>
+                    <td>@match.RoomName (<span>@match.Room.RoomId</span>)</td>
+                    <td>
+                        <details>
+                            <summary>@SummarizeMembership(match.Event)</summary>
+                            <pre>@match.Event.RawContent.ToJson(indent: true)</pre>
+                        </details>
+                    </td>
+                </tr>
             }
-        </ul>
+        </table>
     }
 </details>
 
@@ -61,56 +67,34 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
-        // var sessions = await RMUStorage.GetAllTokens();
-        // var baseRooms = new List<GenericRoom>();
-        // foreach (var userAuth in sessions) {
-        //     var session = await RMUStorage.GetSession(userAuth);
-        //     if (session is not null) {
-        //         baseRooms.AddRange(await session.GetJoinedRooms());
-        //         var sessionRooms = (await session.GetJoinedRooms()).Where(x => !rooms.Any(y => y.Room.RoomId == x.RoomId)).ToList();
-        //         StateHasChanged();
-        //         log.Add($"Got {sessionRooms.Count} rooms for {userAuth.UserId}");
-        //     }
-        // }
-        //
-        // log.Add("Done fetching rooms!");
-        //
-        // baseRooms = baseRooms.DistinctBy(x => x.RoomId).ToList();
-        //
-        // // rooms.CollectionChanged += (sender, args) => StateHasChanged();
-        // var tasks = baseRooms.Select(async newRoom => {
-        //     bool success = false;
-        //     while (!success)
-        //         try {
-        //             var state = await newRoom.GetFullStateAsListAsync();
-        //             var newRoomInfo = new RoomInfo(newRoom, state);
-        //             rooms.Add(newRoomInfo);
-        //             log.Add($"Got {newRoomInfo.StateEvents.Count} events for {newRoomInfo.RoomName}");
-        //             success = true;
-        //         }
-        //         catch (MatrixException e) {
-        //             log.Add($"Failed to fetch room {newRoom.RoomId}! {e}");
-        //             throw;
-        //         }
-        //         catch (HttpRequestException e) {
-        //             log.Add($"Failed to fetch room {newRoom.RoomId}! {e}");
-        //         }
-        // });
-        // await Task.WhenAll(tasks);
-        //
-        // log.Add($"Done fetching members!");
-        //
-        // UserIDs.RemoveAll(x => sessions.Any(y => y.UserId == x));
-
-        foreach (var session in await RMUStorage.GetAllTokens()) {
-            var _hs = await RMUStorage.GetSession(session);
-            if (_hs is not null) {
-                rooms.AddRange(await _hs.GetJoinedRooms());
-                log.Add($"Got {rooms.Count} rooms after adding {_hs.UserId}");
+
+        var sessions = await RmuStorage.GetAllTokens();
+        var tasks = sessions.Select(async session => {
+            try {
+                var _hs = await RmuStorage.GetSession(session);
+                if (_hs is not null) {
+                    try {
+                        var _rooms = await _hs.GetJoinedRooms();
+                        if (!_rooms.Any()) return;
+                        // Check if homeserver supports `?format=event`:
+                        await _rooms.First().GetStateEventAsync(RoomMemberEventContent.EventId, session.UserId);
+                        rooms.AddRange(_rooms);
+                        log.Add($"Got {_rooms.Count} rooms for {_hs.UserId}, total {rooms.Count}");
+                    }
+                    catch (Exception e) {
+                        if (e is LibMatrixException { ErrorCode: LibMatrixException.ErrorCodes.M_UNSUPPORTED })
+                            log.Add($"Homeserver {_hs.UserId} does not support `?format=event`! Skipping...");
+                        else log.Add($"Failed to fetch rooms for {_hs.UserId}! {e}");
+                    }
+                }
             }
-        }
+            catch (Exception e) {
+                log.Add($"Failed to fetch rooms for {session.UserId}! {e}");
+            }
+        });
+        await Task.WhenAll(tasks);
 
         //get distinct rooms evenly distributed per session, accounting for count per session
         rooms = rooms.OrderBy(x => rooms.Count(y => y.Homeserver == x.Homeserver)).DistinctBy(x => x.RoomId).ToList();
@@ -125,17 +109,6 @@
         foreach (var userId in UserIDs) {
             matches.Add(userId, new List<Match>());
 
-            // foreach (var room in rooms) {
-            //     var state = room.StateEvents.Where(x => x!.Type == RoomMemberEventContent.EventId).ToList();
-            //     if (state!.Any(x => x.StateKey == userId)) {
-            //         matches[userId].Add(new() {
-            //             Event = state.First(x => x.StateKey == userId),
-            //             Room = room.Room,
-            //             RoomName = room.RoomName ?? "No name"
-            //         });
-            //     }
-            // }
-
             log.Add($"Searching for {userId}...");
             await foreach (var match in GetMatches(userId)) {
                 matches[userId].Add(match);
@@ -173,13 +146,19 @@
 
     private async IAsyncEnumerable<Match> GetMatches(string userId) {
         var results = rooms.Select(async room => {
-            var state = await room.GetStateEventOrNullAsync(room.RoomId, userId);
-            if (state is not null) {
-                return new Match {
-                    Room = room,
-                    Event = state,
-                    RoomName = await room.GetNameOrFallbackAsync()
-                };
+            try {
+                var state = await room.GetStateEventOrNullAsync(RoomMemberEventContent.EventId, userId);
+                if (state is not null) {
+                    log.Add($"Found {userId} in {room.RoomId} with membership {state.RawContent.ToJson(indent: false)}");
+                    return new Match {
+                        Room = room,
+                        Event = state,
+                        RoomName = await room.GetNameOrFallbackAsync()
+                    };
+                }
+            }
+            catch (Exception e) {
+                log.Add($"Failed to fetch state for {userId} in {room.RoomId}! {e}");
             }
 
             return null;
@@ -191,4 +170,19 @@
         }
     }
 
+    public string SummarizeMembership(StateEventResponse state) {
+        var membership = state.ContentAs<RoomMemberEventContent>();
+        var time = DateTimeOffset.FromUnixTimeMilliseconds(state.OriginServerTs!.Value);
+        return membership switch {
+            { Membership: "invite", Reason: null } => $"Invited by {state.Sender} at {time}",
+            { Membership: "invite", Reason: not null } => $"Invited by {state.Sender} at {time} for {membership.Reason}",
+            { Membership: "join", Reason: null } => $"Joined at {time}",
+            { Membership: "join", Reason: not null } => $"Joined at {time} for {membership.Reason}",
+            { Membership: "leave", Reason: null } => state.Sender == state.StateKey ? $"Left at {time}" : $"Kicked by {state.Sender} at {time}",
+            { Membership: "leave", Reason: not null } => state.Sender == state.StateKey ? $"Left at {time} with reason {membership.Reason}" : $"Kicked by {state.Sender} at {time} for {membership.Reason}",
+            { Membership: "ban", Reason: null } => $"Banned by {state.Sender} at {time}",
+            { Membership: "ban", Reason: not null } => $"Banned by {state.Sender} at {time} for {membership.Reason}",
+        };
+    }
+
 }
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor b/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor
index 80a03f2..d9a7d1d 100644
--- a/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor
+++ b/MatrixUtils.Web/Pages/Tools/Room/SpaceRestrictedJoins.razor
@@ -1,6 +1,7 @@
 @page "/Tools/Room/SpaceRestrictedJoins"
 @using System.Collections.ObjectModel
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>Allow space to restricted join children</h3>
 <hr/>
 
@@ -31,7 +32,7 @@
 
     protected override async Task OnInitializedAsync() {
         log.CollectionChanged += (sender, args) => StateHasChanged();
-        hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
 
         StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor b/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor
index ef484bc..5e8c265 100644
--- a/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor
+++ b/MatrixUtils.Web/Pages/Tools/User/CopyPowerlevel.razor
@@ -2,6 +2,7 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.RoomTypes
 <h3>Copy powerlevel</h3>
 <hr/>
@@ -23,11 +24,11 @@
     List<AuthenticatedHomeserverGeneric> hss { get; set; } = new();
 
     protected override async Task OnInitializedAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
-        var sessions = await RMUStorage.GetAllTokens();
+        var sessions = await RmuStorage.GetAllTokens();
         foreach (var userAuth in sessions) {
-            var session = await RMUStorage.GetSession(userAuth);
+            var session = await RmuStorage.GetSession(userAuth);
             if (session is not null) {
                 hss.Add(session);
                 StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor b/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor
index a2ad388..76558ea 100644
--- a/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor
+++ b/MatrixUtils.Web/Pages/Tools/User/MassJoinRoom.razor
@@ -2,6 +2,7 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>Mass join room</h3>
 <hr/>
 <p>Room: </p>
@@ -25,11 +26,11 @@
     string roomId { get; set; }
 
     protected override async Task OnInitializedAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
-        var sessions = await RMUStorage.GetAllTokens();
+        var sessions = await RmuStorage.GetAllTokens();
         foreach (var userAuth in sessions) {
-            var session = await RMUStorage.GetSession(userAuth);
+            var session = await RmuStorage.GetSession(userAuth);
             if (session is not null) {
                 hss.Add(session);
                 StateHasChanged();
diff --git a/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor b/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor
index 153518e..b73b5ac 100644
--- a/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor
+++ b/MatrixUtils.Web/Pages/Tools/User/ViewAccountData.razor
@@ -16,7 +16,7 @@
     Dictionary<string, EventList?> perRoomAccountData = new();
 
     protected override async Task OnInitializedAsync() {
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         if (hs is null) return;
         perRoomAccountData = await hs.EnumerateAccountDataPerRoom();
         globalAccountData = await hs.EnumerateAccountData();
diff --git a/MatrixUtils.Web/Pages/User/DMManager.razor b/MatrixUtils.Web/Pages/User/DMManager.razor
index 80bf3b2..4a6e5b4 100644
--- a/MatrixUtils.Web/Pages/User/DMManager.razor
+++ b/MatrixUtils.Web/Pages/User/DMManager.razor
@@ -3,6 +3,7 @@
 @using LibMatrix.Responses
 @using MatrixUtils.Abstractions
 @using LibMatrix
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 <h3>Direct Messages</h3>
 <hr/>
 
@@ -29,7 +30,7 @@
     }
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
         Status = "Loading global profile...";
         if (Homeserver.WhoAmI?.UserId is null) return;
diff --git a/MatrixUtils.Web/Pages/User/Profile.razor b/MatrixUtils.Web/Pages/User/Profile.razor
index 4e1fd0c..f7ec080 100644
--- a/MatrixUtils.Web/Pages/User/Profile.razor
+++ b/MatrixUtils.Web/Pages/User/Profile.razor
@@ -1,10 +1,9 @@
 @page "/User/Profile"
 @using LibMatrix.EventTypes.Spec.State
-@using ArcaneLibs.Extensions
 @using LibMatrix
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Responses
 @using MatrixUtils.Abstractions
-@using Microsoft.AspNetCore.Components.Forms
 <h3>Manage Profile - @Homeserver?.WhoAmI?.UserId</h3>
 <hr/>
 
@@ -63,7 +62,7 @@
 }
 
 @code {
-    private string? _status = null;
+    private string? _status;
 
     private AuthenticatedHomeserverGeneric? Homeserver { get; set; }
     private UserProfileResponse? NewProfile { get; set; }
@@ -82,7 +81,7 @@
     private Dictionary<string, string> RoomNames { get; set; } = new();
 
     protected override async Task OnInitializedAsync() {
-        Homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (Homeserver is null) return;
         Status = "Loading global profile...";
         if (Homeserver.WhoAmI?.UserId is null) return;
diff --git a/MatrixUtils.Web/Shared/InlineUserItem.razor b/MatrixUtils.Web/Shared/InlineUserItem.razor
index c7f16f0..5b6d42f 100644
--- a/MatrixUtils.Web/Shared/InlineUserItem.razor
+++ b/MatrixUtils.Web/Shared/InlineUserItem.razor
@@ -1,4 +1,5 @@
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Responses
 <div style="background-color: #ffffff11; border-radius: 0.5em; height: 1em; display: inline-block; vertical-align: middle;" alt="@UserId">
     <img style="@(ChildContent is not null ? "vertical-align: baseline;" : "vertical-align: top;") width: 1em; height: 1em; border-radius: 50%;" src="@ProfileAvatar"/>
@@ -39,7 +40,7 @@
 
     protected override async Task OnInitializedAsync() {
         await base.OnInitializedAsync();
-        Homeserver ??= await RMUStorage.GetCurrentSessionOrNavigate();
+        Homeserver ??= await RmuStorage.GetCurrentSessionOrNavigate();
         if(Homeserver is null) return;
 
         await _semaphoreSlim.WaitAsync();
diff --git a/MatrixUtils.Web/Shared/MainLayout.razor b/MatrixUtils.Web/Shared/MainLayout.razor
index c67f73c..f32c19e 100644
--- a/MatrixUtils.Web/Shared/MainLayout.razor
+++ b/MatrixUtils.Web/Shared/MainLayout.razor
@@ -1,5 +1,4 @@
-@using ArcaneLibs
-@inherits LayoutComponentBase
+@inherits LayoutComponentBase
 
 <div class="page">
     <div class="sidebar">
diff --git a/MatrixUtils.Web/Shared/MxcAvatar.razor b/MatrixUtils.Web/Shared/MxcAvatar.razor
index 09ea790..02aff72 100644
--- a/MatrixUtils.Web/Shared/MxcAvatar.razor
+++ b/MatrixUtils.Web/Shared/MxcAvatar.razor
@@ -1,6 +1,3 @@
-@using System.Security
-@using System.Security.Cryptography
-@using Blazored.SessionStorage.JsonConverters
 <StreamedImage Stream="@_stream" style="@StyleString"/>
 
 @code {
diff --git a/MatrixUtils.Web/Shared/RoomListComponents/RoomListCategory.razor b/MatrixUtils.Web/Shared/RoomListComponents/RoomListCategory.razor
index 1f5ce89..555b1f1 100644
--- a/MatrixUtils.Web/Shared/RoomListComponents/RoomListCategory.razor
+++ b/MatrixUtils.Web/Shared/RoomListComponents/RoomListCategory.razor
@@ -1,5 +1,5 @@
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using MatrixUtils.Web.Classes.Constants
-@using LibMatrix.EventTypes.Spec.State
 @using LibMatrix.Responses
 @using MatrixUtils.Abstractions
 <details open>
diff --git a/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor b/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor
index 6954990..11f9040 100644
--- a/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor
+++ b/MatrixUtils.Web/Shared/RoomListComponents/RoomListSpace.razor
@@ -42,7 +42,7 @@
         if (Breadcrumbs == null) throw new ArgumentNullException(nameof(Breadcrumbs));
         await Task.Delay(Random.Shared.Next(1000, 10000));
         var rooms = Space.Room.AsSpace.GetChildrenAsync();
-        var hs = await RMUStorage.GetCurrentSessionOrNavigate();
+        var hs = await RmuStorage.GetCurrentSessionOrNavigate();
         var joinedRooms = await hs.GetJoinedRooms();
         await foreach (var room in rooms) {
             if (Breadcrumbs.Contains(room.RoomId)) continue;
diff --git a/MatrixUtils.Web/Shared/RoomListItem.razor b/MatrixUtils.Web/Shared/RoomListItem.razor
index 248cb59..1875f1d 100644
--- a/MatrixUtils.Web/Shared/RoomListItem.razor
+++ b/MatrixUtils.Web/Shared/RoomListItem.razor
@@ -1,5 +1,6 @@
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Responses
 @using MatrixUtils.Abstractions
 @using MatrixUtils.Web.Classes.Constants
@@ -129,7 +130,7 @@ else {
     protected override async Task OnInitializedAsync() {
         await base.OnInitializedAsync();
 
-        // hs ??= await RMUStorage.GetCurrentSessionOrNavigate();
+        // hs ??= await RmuStorage.GetCurrentSessionOrNavigate();
         // if (hs is null) return;
 
         if (Homeserver is null) {
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor
index 08aeffe..80b9ac5 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/BaseTimelineItem.razor
@@ -1,5 +1,6 @@
 @using LibMatrix
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Responses
 <h3>BaseTimelineItem</h3>
 
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor
index 0488e36..d1984dd 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineCanonicalAliasItem.razor
@@ -1,5 +1,5 @@
 @using ArcaneLibs.Extensions
-@using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @inherits BaseTimelineItem
 
 @if (currentEventContent is not null) {
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor
index bdd6104..74087a5 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineHistoryVisibilityItem.razor
@@ -1,5 +1,6 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @inherits BaseTimelineItem
 
 @if (currentEventContent is not null) {
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor
index 3b18b95..a5ffe80 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMemberItem.razor
@@ -1,5 +1,6 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @using LibMatrix.Responses
 @inherits BaseTimelineItem
 
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor
index 98b5a6d..4459be1 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineMessageItem.razor
@@ -1,5 +1,6 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @inherits BaseTimelineItem
 
 <span>
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor
index f3e6c7e..aeb987a 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomCreateItem.razor
@@ -1,5 +1,5 @@
 @using ArcaneLibs.Extensions
-@using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @inherits BaseTimelineItem
 
 <i>
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor
index 63594a9..57dc77d 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomNameItem.razor
@@ -1,5 +1,6 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @inherits BaseTimelineItem
 
 @if (currentEventContent is not null) {
diff --git a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor
index f70d563..6779b5d 100644
--- a/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor
+++ b/MatrixUtils.Web/Shared/TimelineComponents/TimelineRoomTopicItem.razor
@@ -1,5 +1,6 @@
 @using ArcaneLibs.Extensions
 @using LibMatrix.EventTypes.Spec.State
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
 @inherits BaseTimelineItem
 
 @if (currentEventContent is not null) {
diff --git a/MatrixUtils.Web/Shared/UserListItem.razor b/MatrixUtils.Web/Shared/UserListItem.razor
index d4652b2..cf7f24d 100644
--- a/MatrixUtils.Web/Shared/UserListItem.razor
+++ b/MatrixUtils.Web/Shared/UserListItem.razor
@@ -28,7 +28,7 @@
     private SvgIdenticonGenerator _identiconGenerator = new();
 
     protected override async Task OnInitializedAsync() {
-        _homeserver = await RMUStorage.GetCurrentSessionOrNavigate();
+        _homeserver = await RmuStorage.GetCurrentSessionOrNavigate();
         if (_homeserver is null) return;
 
         if (User == null) {
diff --git a/MatrixUtils.Web/_Imports.razor b/MatrixUtils.Web/_Imports.razor
index 81c7874..47c8b36 100644
--- a/MatrixUtils.Web/_Imports.razor
+++ b/MatrixUtils.Web/_Imports.razor
@@ -1,13 +1,10 @@
 @using System.Net.Http
 @using System.Net.Http.Json
-@* @using Blazored.LocalStorage *@
 @using LibMatrix.Services
 @using Microsoft.AspNetCore.Components.Forms
 @using Microsoft.AspNetCore.Components.Routing
 @using Microsoft.AspNetCore.Components.Web
-@* @using Microsoft.AspNetCore.Components.Web.Virtualization *@
 @using Microsoft.AspNetCore.Components.WebAssembly.Http
-@* @using Microsoft.JSInterop *@
 @using MatrixUtils.Web
 @using MatrixUtils.Web.Classes
 @using MatrixUtils.Web.Shared
@@ -16,8 +13,8 @@
 @using Microsoft.JSInterop
 
 @inject NavigationManager NavigationManager
-@inject RMUStorageWrapper RMUStorage
-@inject HomeserverProviderService hsProvider
+@inject RMUStorageWrapper RmuStorage
+@inject HomeserverProviderService HsProvider
 @inject TieredStorageService TieredStorage
-@inject HomeserverResolverService hsResolver
-@inject IJSRuntime JSRuntime
+@inject HomeserverResolverService HsResolver
+@inject IJSRuntime JsRuntime
diff --git a/MxApiExtensions b/MxApiExtensions
-Subproject ec14ac1d3db8a9be10b94a98f408c087b1f7175
+Subproject b4ef05afcfac87ae197ae69bdbae93c3ca4d46b